SD card support on ersky9x board

Little animation at Tx start
Backlight support for simu
Mixes slow down / up now go 2 times faster
This commit is contained in:
bsongis
2012-06-17 21:01:07 +00:00
18 changed files with 1006 additions and 276 deletions
+46 -38
View File
@@ -142,6 +142,11 @@ bool listSDcardModels()
s_menu_flags = BSS;
uint8_t offset = 0;
FRESULT result = f_mount(0, &g_FATFS_Obj);
if (result != FR_OK) {
return SDCARD_ERROR(result);
}
FRESULT res = f_opendir(&dir, MODELS_PATH); /* Open the directory */
if (res == FR_OK) {
for (;;) {
@@ -177,15 +182,17 @@ bool listSDcardModels()
return s_menu_count;
}
#endif
void menuProcModelSelect(uint8_t event)
{
TITLE(STR_MENUMODELSEL);
#if defined(SDCARD)
#if defined(PCBARM)
#define REFRESH(x)
#elif defined(PCBV4) && defined(SDCARD)
static bool refresh = true;
#define REFRESH(x) refresh = (x)
#else
#define refresh event
#endif
@@ -226,7 +233,7 @@ void menuProcModelSelect(uint8_t event)
) {
eeFlush(); // flush eeprom write
#if defined(SDCARD)
refresh = true;
REFRESH(true);
#endif
}
#endif
@@ -442,7 +449,7 @@ void menuProcModelSelect(uint8_t event)
}
#if defined(SDCARD)
refresh = false;
REFRESH(false);
if (s_sdcard_error) {
s_warning = s_sdcard_error;
displayWarning(event);
@@ -455,7 +462,7 @@ void menuProcModelSelect(uint8_t event)
if (s_menu_count) {
const char * result = displayMenu(event);
if (result) {
refresh = true;
REFRESH(true);
if (result == STR_SELECT_MODEL || result == STR_CREATE_MODEL) {
displayPopup(STR_LOADINGMODEL);
eeCheck(true); // force writing of current model data before this is changed
@@ -1478,6 +1485,7 @@ enum MixFields {
MIX_FIELD_COUNT
};
#define MIXES_2ND_COLUMN (9*FW)
void menuProcMixOne(uint8_t event)
{
TITLEP(s_currCh ? STR_INSERTMIX : STR_EDITMIX);
@@ -1493,38 +1501,38 @@ void menuProcMixOne(uint8_t event)
uint8_t attr = (sub==i ? (s_editMode>0 ? BLINK|INVERS : INVERS) : 0);
switch(i) {
case MIX_FIELD_SOURCE:
lcd_puts(2*FW, y, STR_SOURCE);
putsMixerSource(FW*10, y, md2->srcRaw, attr);
lcd_putsLeft(y, STR_SOURCE);
putsMixerSource(MIXES_2ND_COLUMN, y, md2->srcRaw, attr);
if(attr) CHECK_INCDEC_MODELVAR(event, md2->srcRaw, 1, NUM_XCHNMIX);
break;
case MIX_FIELD_WEIGHT:
lcd_puts(2*FW, y, STR_WEIGHT);
lcd_outdezAtt(FW*10, y, md2->weight, attr|LEFT|INFLIGHT(md2->weight));
lcd_putsLeft(y, STR_WEIGHT);
lcd_outdezAtt(MIXES_2ND_COLUMN, y, md2->weight, attr|LEFT|INFLIGHT(md2->weight));
if (attr) CHECK_INFLIGHT_INCDEC_MODELVAR(event, md2->weight, -125, 125, 0, STR_MIXERWEIGHT);
break;
case MIX_FIELD_DIFFERENTIAL:
// TODO INFLIGHT
lcd_puts(2*FW, y, STR_DIFFERENTIAL);
lcd_outdezAtt(FW*10, y, md2->differential*2, attr|LEFT);
lcd_putsLeft(y, STR_DIFFERENTIAL);
lcd_outdezAtt(MIXES_2ND_COLUMN, y, md2->differential*2, attr|LEFT);
if (attr) CHECK_INCDEC_MODELVAR(event, md2->differential, -50, 50);
break;
case MIX_FIELD_OFFSET:
lcd_puts(2*FW, y, STR_OFFSET);
lcd_outdezAtt(FW*10, y, md2->sOffset, attr|LEFT|INFLIGHT(md2->sOffset));
lcd_putsLeft(y, STR_OFFSET);
lcd_outdezAtt(MIXES_2ND_COLUMN, y, md2->sOffset, attr|LEFT|INFLIGHT(md2->sOffset));
if (attr) CHECK_INFLIGHT_INCDEC_MODELVAR(event, md2->sOffset, -125, 125, 0, STR_MIXEROFFSET);
break;
case MIX_FIELD_TRIM:
{
uint8_t not_stick = (md2->srcRaw > NUM_STICKS);
int8_t carryTrim = -md2->carryTrim;
lcd_puts(2*FW, y, STR_TRIM);
lcd_putsiAtt(FW*10, y, STR_VMIXTRIMS, (not_stick && carryTrim == 0) ? 0 : carryTrim+1, attr);
lcd_putsLeft(y, STR_TRIM);
lcd_putsiAtt(MIXES_2ND_COLUMN, y, STR_VMIXTRIMS, (not_stick && carryTrim == 0) ? 0 : carryTrim+1, attr);
if (attr) md2->carryTrim = -checkIncDecModel(event, carryTrim, not_stick ? TRIM_ON : -TRIM_OFF, -TRIM_AIL);
break;
}
case MIX_FIELD_CURVE:
lcd_puts(2*FW, y, STR_CURVES);
putsCurve(FW*10, y, md2->curve, attr);
lcd_putsLeft(y, STR_CURVES);
putsCurve(MIXES_2ND_COLUMN, y, md2->curve, attr);
if(attr) CHECK_INCDEC_MODELVAR( event, md2->curve, -MAX_CURVE5-MAX_CURVE9, MAX_CURVE5+MAX_CURVE9+7-1);
if(attr && event==EVT_KEY_FIRST(KEY_MENU) && (md2->curve<0 || md2->curve>=CURVE_BASE)){
s_curveChan = (md2->curve<0 ? -md2->curve-1 : md2->curve-CURVE_BASE);
@@ -1532,49 +1540,49 @@ void menuProcMixOne(uint8_t event)
}
break;
case MIX_FIELD_SWITCH:
lcd_puts( 2*FW,y,STR_SWITCH);
putsSwitches(10*FW, y,md2->swtch,attr);
lcd_putsLeft(y, STR_SWITCH);
putsSwitches(MIXES_2ND_COLUMN, y,md2->swtch,attr);
if(attr) CHECK_INCDEC_MODELSWITCH( event, md2->swtch, -MAX_SWITCH, MAX_SWITCH);
break;
#ifdef FLIGHT_PHASES
case MIX_FIELD_FLIGHT_PHASE:
lcd_puts( 2*FW,y,STR_FPHASE);
putsFlightPhase(10*FW, y, md2->phase, attr);
lcd_putsLeft(y, STR_FPHASE);
putsFlightPhase(MIXES_2ND_COLUMN, y, md2->phase, attr);
if(attr) CHECK_INCDEC_MODELVAR( event, md2->phase, -MAX_PHASES, MAX_PHASES);
break;
#endif
case MIX_FIELD_WARNING:
lcd_puts( 2*FW,y,STR_MIXWARNING);
lcd_putsLeft(y, STR_MIXWARNING);
if(md2->mixWarn)
lcd_outdezAtt(FW*10,y,md2->mixWarn,attr|LEFT);
lcd_outdezAtt(MIXES_2ND_COLUMN,y,md2->mixWarn,attr|LEFT);
else
lcd_putsAtt(FW*10, y, STR_OFF, attr);
lcd_putsAtt(MIXES_2ND_COLUMN, y, STR_OFF, attr);
if(attr) CHECK_INCDEC_MODELVAR( event, md2->mixWarn, 0,3);
break;
case MIX_FIELD_MLTPX:
lcd_puts( 2*FW,y,STR_MULTPX);
lcd_putsiAtt(10*FW, y, STR_VMLTPX, md2->mltpx, attr);
lcd_putsLeft(y, STR_MULTPX);
lcd_putsiAtt(MIXES_2ND_COLUMN, y, STR_VMLTPX, md2->mltpx, attr);
if(attr) CHECK_INCDEC_MODELVAR( event, md2->mltpx, 0, 2);
break;
case MIX_FIELD_DELAY_UP:
lcd_puts( 2*FW,y,STR_DELAYUP);
lcd_outdezAtt(FW*16,y,md2->delayUp,attr);
if(attr) CHECK_INCDEC_MODELVAR( event, md2->delayUp, 0,15);
lcd_putsLeft(y, STR_DELAYUP);
lcd_outdezAtt(MIXES_2ND_COLUMN,y,md2->delayUp,attr|LEFT);
if(attr) CHECK_INCDEC_MODELVAR( event, md2->delayUp, 0, 15);
break;
case MIX_FIELD_DELAY_DOWN:
lcd_puts( 2*FW,y,STR_DELAYDOWN);
lcd_outdezAtt(FW*16,y,md2->delayDown,attr);
if(attr) CHECK_INCDEC_MODELVAR( event, md2->delayDown, 0,15);
lcd_putsLeft(y, STR_DELAYDOWN);
lcd_outdezAtt(MIXES_2ND_COLUMN,y,md2->delayDown,attr|LEFT);
if(attr) CHECK_INCDEC_MODELVAR( event, md2->delayDown, 0, 15);
break;
case MIX_FIELD_SLOW_UP:
lcd_puts( 2*FW,y,STR_SLOWUP);
lcd_outdezAtt(FW*16,y,md2->speedUp,attr);
if(attr) CHECK_INCDEC_MODELVAR( event, md2->speedUp, 0,15);
lcd_putsLeft(y, STR_SLOWUP);
lcd_outdezAtt(MIXES_2ND_COLUMN,y,5*md2->speedUp,attr|PREC1|LEFT);
if(attr) CHECK_INCDEC_MODELVAR( event, md2->speedUp, 0, 15);
break;
case MIX_FIELD_SLOW_DOWN:
lcd_puts( 2*FW,y,STR_SLOWDOWN);
lcd_outdezAtt(FW*16,y,md2->speedDown,attr);
if(attr) CHECK_INCDEC_MODELVAR( event, md2->speedDown, 0,15);
lcd_putsLeft(y, STR_SLOWDOWN);
lcd_outdezAtt(MIXES_2ND_COLUMN,y,5*md2->speedDown,attr|PREC1|LEFT);
if(attr) CHECK_INCDEC_MODELVAR( event, md2->speedDown, 0, 15);
break;
}
}