diff --git a/src/audio_arm.cpp b/src/audio_arm.cpp index 5b950923d..e7a2495a9 100644 --- a/src/audio_arm.cpp +++ b/src/audio_arm.cpp @@ -613,7 +613,8 @@ void AudioQueue::play(uint8_t tFreq, uint8_t tLen, uint8_t tPause, uint8_t tFlag void AudioQueue::playFile(const char *filename, uint8_t flags, uint8_t id) { #if defined(SIMU) - printf("playFile(\"%s\")\n", filename); fflush(stdout); + printf("playFile(\"%s\", flags=%x, id=%d)\n", filename, flags, id); + fflush(stdout); #else if (!sdMounted()) @@ -654,6 +655,10 @@ void AudioQueue::playFile(const char *filename, uint8_t flags, uint8_t id) void AudioQueue::stopPlay(uint8_t id) { +#if defined(SIMU) + printf("stopPlay(id=%d)\n", id); fflush(stdout); +#endif + // For the moment it's only needed to stop the background music if (backgroundContext.fragment.id == id) { memset(&backgroundContext.fragment, 0, sizeof(AudioFragment)); diff --git a/src/eeprom_arm.cpp b/src/eeprom_arm.cpp index 93c2b3acb..471d73378 100644 --- a/src/eeprom_arm.cpp +++ b/src/eeprom_arm.cpp @@ -401,8 +401,9 @@ void eeLoadModel(uint8_t id) resumePulses(); } + activeSwitches = 0; + activeFnSwitches = 0; activeFunctions = 0; - activeFunctionSwitches = 0; for (uint8_t i=0; i #include #include "open9x.h" @@ -219,6 +220,8 @@ TEST(EEPROM, rm) EXPECT_EQ(sz, 0); } +#if defined(FRSKY) + extern void processFrskyPacket(uint8_t *packet); TEST(FrSky, gpsNfuel) @@ -266,6 +269,8 @@ TEST(FrSky, dateNtime) EXPECT_EQ(frskyData.hub.sec, 50); } +#endif + TEST(getSwitch, undefCSW) { MODEL_RESET(); @@ -425,6 +430,18 @@ TEST(Mixer, RecursiveAddChannel) EXPECT_EQ(chans[1], 0); } +TEST(Expo, AllValues) +{ + // TODO whole range + for (uint16_t x=0; x<100; x++) { + for (uint16_t k=0; k<100; k++) { + // TODO compare with the correct function instead of this one + uint16_t ref = ((unsigned long)x*x*x/0x10000*k/(RESXul*RESXul/0x10000) + (RESKul-k)*x+RESKul/2)/RESKul; + EXPECT_EQ(expou(x, k), ref); + } + } +} + int main(int argc, char **argv) { StartEepromThread(NULL); diff --git a/src/keys.cpp b/src/keys.cpp index c7a61d47e..940441213 100644 --- a/src/keys.cpp +++ b/src/keys.cpp @@ -64,11 +64,7 @@ uint8_t getEvent() } #endif -#if defined(CPUARM) #define KEY_LONG_DELAY 32 -#else -#define KEY_LONG_DELAY 24 -#endif Key keys[NUM_KEYS]; void Key::input(bool val, EnumKeys enuk) @@ -161,11 +157,16 @@ void clearKeyEvents() CoTickDelay(100); // 200ms #endif + // loop until all keys are up + #if defined(SIMU) while (keyDown() && main_thread_running) sleep(1/*ms*/); +#elif defined(PCBSTD) && defined(ROTARY_ENCODER_NAVIGATION) && !defined(TELEMETREZ) + while (keyDown()) { wdt_reset(); rotencPoll(); } #else - while (keyDown()) wdt_reset(); // loop until all keys are up + while (keyDown()) wdt_reset(); #endif + memclear(keys, sizeof(keys)); putEvent(0); } diff --git a/src/menus.cpp b/src/menus.cpp index 3187d1ff3..f9348f9ce 100644 --- a/src/menus.cpp +++ b/src/menus.cpp @@ -190,12 +190,17 @@ int16_t checkIncDec(uint8_t event, int16_t val, int16_t i_min, int16_t i_max, ui #if defined(CPUM64) int8_t checkIncDecModel(uint8_t event, int8_t i_val, int8_t i_min, int8_t i_max) { - return checkIncDec(event,i_val,i_min,i_max,EE_MODEL); + return checkIncDec(event, i_val, i_min, i_max, EE_MODEL); +} + +int8_t checkIncDecModelZero(uint8_t event, int8_t i_val, int8_t i_max) +{ + return checkIncDecModel(event, i_val, 0, i_max); } int8_t checkIncDecGen(uint8_t event, int8_t i_val, int8_t i_min, int8_t i_max) { - return checkIncDec(event,i_val,i_min,i_max,EE_GENERAL); + return checkIncDec(event, i_val, i_min, i_max, EE_GENERAL); } #endif diff --git a/src/menus.h b/src/menus.h index 06db385b2..38c63af9a 100644 --- a/src/menus.h +++ b/src/menus.h @@ -125,15 +125,20 @@ int16_t checkIncDec(uint8_t event, int16_t i_pval, int16_t i_min, int16_t i_max, #if defined(CPUM64) int8_t checkIncDecModel(uint8_t event, int8_t i_val, int8_t i_min, int8_t i_max); +int8_t checkIncDecModelZero(uint8_t event, int8_t i_val, int8_t i_max); int8_t checkIncDecGen(uint8_t event, int8_t i_val, int8_t i_min, int8_t i_max); #else #define checkIncDecModel(event, i_val, i_min, i_max) checkIncDec(event, i_val, i_min, i_max, EE_MODEL) +#define checkIncDecModelZero(event, i_val, i_max) checkIncDec(event, i_val, 0, i_max, EE_MODEL) #define checkIncDecGen(event, i_val, i_min, i_max) checkIncDec(event, i_val, i_min, i_max, EE_GENERAL) #endif #define CHECK_INCDEC_MODELVAR(event, var, min, max) \ var = checkIncDecModel(event,var,min,max) +#define CHECK_INCDEC_MODELVAR_ZERO(event, var, max) \ + var = checkIncDecModelZero(event,var,max) + #if defined(AUTOSWITCH) #define AUTOSWITCH_ENTER_LONG() (attr && event==EVT_KEY_LONG(KEY_ENTER)) #define CHECK_INCDEC_MODELSWITCH(event, var, min, max) \ @@ -272,7 +277,7 @@ void menuChannelsMonitor(uint8_t event); #endif #if defined(ROTARY_ENCODER_NAVIGATION) || defined(PCBX9D) - #define REPEAT_LAST_CURSOR_MOVE() putEvent(event) + #define REPEAT_LAST_CURSOR_MOVE() { if (EVT_KEY_MASK(event) >= 0x0e) putEvent(event); else m_posHorz = 0; } #else #define REPEAT_LAST_CURSOR_MOVE() m_posHorz = 0; #endif diff --git a/src/model_menus.cpp b/src/model_menus.cpp index 6a7a5741a..7e5b02a91 100644 --- a/src/model_menus.cpp +++ b/src/model_menus.cpp @@ -242,20 +242,17 @@ void menuModelSelect(uint8_t event) uint8_t _event_ = (IS_ROTARY_BREAK(event) || IS_ROTARY_LONG(event) ? 0 : event); - if (s_copyMode && (event & 0x1f) == KEY_EXIT) + if (s_copyMode && EVT_KEY_MASK(event) == KEY_EXIT) _event_ -= KEY_EXIT; int8_t oldSub = m_posVert; + if (!check_submenu_simple(_event_, MAX_MODELS-1)) return; if (s_editMode > 0) s_editMode = 0; #if !defined(CPUARM) - if (event -#if defined(ROTARY_ENCODER_NAVIGATION) - || oldSub != m_posVert -#endif - ) { + if (event) { eeFlush(); // flush eeprom write #if defined(SDCARD) REFRESH(true); @@ -404,15 +401,15 @@ void menuModelSelect(uint8_t event) if (s_copySrcRow < 0 && s_copyMode==COPY_MODE) { s_copySrcRow = oldSub; // find a hole (in the first empty slot above / below) - m_posVert = eeFindEmptyModel(s_copySrcRow, event==EVT_KEY_FIRST(KEY_MOVE_DOWN)); - if ((uint8_t)m_posVert == 0xff) { + sub = eeFindEmptyModel(s_copySrcRow, event==EVT_KEY_FIRST(KEY_MOVE_DOWN)); + if (sub < 0) { // no free room for duplicating the model AUDIO_ERROR(); - m_posVert = oldSub; + sub = oldSub; s_copyMode = 0; } next_ofs = 0; - sub = m_posVert; + m_posVert = sub; } s_copyTgtOfs = next_ofs; } @@ -735,12 +732,10 @@ void menuModelSetup(uint8_t event) { TimerData *timer = &g_model.timers[k-ITEM_MODEL_TIMER1]; putsStrIdx(0*FW, y, STR_TIMER, k-ITEM_MODEL_TIMER1+1); - putsTmrMode(MODEL_SETUP_2ND_COLUMN, y, timer->mode, (attr && m_posHorz==0) ? blink : 0); - putsTime(MODEL_SETUP_2ND_COLUMN+5*FW-2, y, timer->start, - (attr && m_posHorz==1 ? blink:0), - (attr && m_posHorz==2 ? blink:0) ); + putsTmrMode(MODEL_SETUP_2ND_COLUMN, y, timer->mode, m_posHorz==0 ? attr : 0); + putsTime(MODEL_SETUP_2ND_COLUMN+5*FW-2, y, timer->start, m_posHorz==1 ? attr : 0, m_posHorz==2 ? attr : 0); #if defined(CPUARM) || defined(PCBGRUVIN9X) - lcd_putcAtt(MODEL_SETUP_2ND_COLUMN+10*FW-1, y, g_model.timers[k-ITEM_MODEL_TIMER1].remanent ? 'R' : '-', (attr && m_posHorz==3) ? blink : 0); + lcd_putcAtt(MODEL_SETUP_2ND_COLUMN+10*FW-1, y, g_model.timers[k-ITEM_MODEL_TIMER1].remanent ? 'R' : '-', m_posHorz==3 ? attr : 0); #endif if (attr && (editMode>0 || p1valdiff)) { div_t qr = div(timer->start, 60); @@ -749,7 +744,7 @@ void menuModelSetup(uint8_t event) CHECK_INCDEC_MODELVAR(event, timer->mode, -2*(MAX_PSWITCH+NUM_CSW), TMR_VAROFS-1+2*(MAX_PSWITCH+NUM_CSW)); break; case 1: - CHECK_INCDEC_MODELVAR(event, qr.quot, 0, 59); + CHECK_INCDEC_MODELVAR_ZERO(event, qr.quot, 59); timer->start = qr.rem + qr.quot*60; break; case 2: @@ -759,7 +754,7 @@ void menuModelSetup(uint8_t event) break; #if defined(CPUARM) || defined(PCBGRUVIN9X) case 3: - CHECK_INCDEC_MODELVAR(event, g_model.timers[k-ITEM_MODEL_TIMER1].remanent, 0, 1); + CHECK_INCDEC_MODELVAR_ZERO(event, g_model.timers[k-ITEM_MODEL_TIMER1].remanent, 1); break; #endif } @@ -782,7 +777,7 @@ void menuModelSetup(uint8_t event) case ITEM_MODEL_THROTTLE_TRACE: { lcd_putsLeft(y, STR_TTRACE); - if (attr) CHECK_INCDEC_MODELVAR(event, g_model.thrTraceSrc, 0, NUM_POTS+NUM_CHNOUT); + if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, g_model.thrTraceSrc, NUM_POTS+NUM_CHNOUT); uint8_t idx = g_model.thrTraceSrc + MIXSRC_Thr; if (idx > MIXSRC_Thr) idx += 1; @@ -871,18 +866,18 @@ void menuModelSetup(uint8_t event) lcd_putsLeft(y, NO_INDENT(STR_PROTO)); #endif - lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, STR_VPROTOS, protocol, (attr && m_posHorz==0 ? (editMode>0 ? BLINK|INVERS : INVERS):0)); + lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, STR_VPROTOS, protocol, m_posHorz==0 ? attr : 0); #if defined(PCBSKY9X) - lcd_putsAtt(MODEL_SETUP_2ND_COLUMN+4*FW+3, y, STR_CH, (attr && m_posHorz==1) ? blink : 0); - lcd_outdezAtt(lcdLastPos, y, g_model.ppmSCH+1, LEFT | ((attr && m_posHorz==1) ? blink : 0)); + lcd_putsAtt(MODEL_SETUP_2ND_COLUMN+4*FW+3, y, STR_CH, m_posHorz==1 ? attr : 0); + lcd_outdezAtt(lcdLastPos, y, g_model.ppmSCH+1, LEFT | (m_posHorz==1 ? attr : 0)); lcd_putc(lcdLastPos, y, '-'); - lcd_outdezAtt(lcdLastPos + FW+1, y, g_model.ppmSCH+NUM_PORT1_CHANNELS, LEFT | ((attr && m_posHorz==2) ? blink : 0)); + lcd_outdezAtt(lcdLastPos + FW+1, y, g_model.ppmSCH+NUM_PORT1_CHANNELS, LEFT | (m_posHorz==2 ? attr : 0)); #else if (IS_PPM_PROTOCOL(protocol)) { - lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN+7*FW, y, STR_NCHANNELS, g_model.ppmNCH+2, (attr && m_posHorz==1) ? blink : 0); + lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN+7*FW, y, STR_NCHANNELS, g_model.ppmNCH+2, m_posHorz==1 ? attr : 0); } - else if (attr) { + else if (attr && m_posHorz != 0 /* TODO avoid it on stock with another macro*/) { REPEAT_LAST_CURSOR_MOVE(); } #endif @@ -894,11 +889,11 @@ void menuModelSetup(uint8_t event) )) { switch (m_posHorz) { case 0: - CHECK_INCDEC_MODELVAR(event, g_model.protocol, 0, PROTO_MAX-1); + CHECK_INCDEC_MODELVAR_ZERO(event, g_model.protocol, PROTO_MAX-1); break; case 1: #if defined(PCBSKY9X) - CHECK_INCDEC_MODELVAR(event, g_model.ppmSCH, 0, 32-8-(g_model.ppmNCH*2)); + CHECK_INCDEC_MODELVAR_ZERO(event, g_model.ppmSCH, 32-8-(g_model.ppmNCH*2)); #else CHECK_INCDEC_MODELVAR(event, g_model.ppmNCH, -2, 4); #endif @@ -919,14 +914,14 @@ void menuModelSetup(uint8_t event) case ITEM_MODEL_PPM2_PROTOCOL: lcd_putsLeft(y, PSTR("Port2")); lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, STR_VPROTOS, 0, 0); - lcd_putsAtt(MODEL_SETUP_2ND_COLUMN+4*FW+3, y, STR_CH, (attr && m_posHorz==0) ? blink : 0); - lcd_outdezAtt(lcdLastPos, y, g_model.ppm2SCH+1, LEFT | ((attr && m_posHorz==0) ? blink : 0)); + lcd_putsAtt(MODEL_SETUP_2ND_COLUMN+4*FW+3, y, STR_CH, m_posHorz==0 ? attr : 0); + lcd_outdezAtt(lcdLastPos, y, g_model.ppm2SCH+1, LEFT | (m_posHorz==0 ? attr : 0)); lcd_putc(lcdLastPos, y, '-'); - lcd_outdezAtt(lcdLastPos + FW+1, y, g_model.ppm2SCH+8+(g_model.ppm2NCH*2), LEFT | ((attr && m_posHorz==1) ? blink : 0)); + lcd_outdezAtt(lcdLastPos + FW+1, y, g_model.ppm2SCH+8+(g_model.ppm2NCH*2), LEFT | (m_posHorz==1 ? attr : 0)); if (attr && (editMode>0 || p1valdiff)) { switch (m_posHorz) { case 0: - CHECK_INCDEC_MODELVAR(event, g_model.ppm2SCH, 0, 32-8-(g_model.ppm2NCH*2)); + CHECK_INCDEC_MODELVAR_ZERO(event, g_model.ppm2SCH, 32-8-(g_model.ppm2NCH*2)); break; case 1: CHECK_INCDEC_MODELVAR(event, g_model.ppm2NCH, -2, min(4, (32-g_model.ppm2SCH)/2-4)); @@ -940,10 +935,10 @@ void menuModelSetup(uint8_t event) if (IS_PPM_PROTOCOL(protocol)) { lcd_putsLeft( y, STR_PPMFRAME); lcd_puts(MODEL_SETUP_2ND_COLUMN+3*FW, y, STR_MS); - lcd_outdezAtt(MODEL_SETUP_2ND_COLUMN, y, (int16_t)g_model.ppmFrameLength*5 + 225, ((attr && m_posHorz==0) ? (editMode>0 ? BLINK|INVERS : INVERS) : 0) | PREC1|LEFT); + lcd_outdezAtt(MODEL_SETUP_2ND_COLUMN, y, (int16_t)g_model.ppmFrameLength*5 + 225, (m_posHorz==0 ? attr : 0) | PREC1|LEFT); lcd_putc(MODEL_SETUP_2ND_COLUMN+8*FW+2, y, 'u'); - lcd_outdezAtt(MODEL_SETUP_2ND_COLUMN+8*FW+2, y, (g_model.ppmDelay*50)+300, ((attr && m_posHorz==1) ? blink : 0)); - lcd_putcAtt(MODEL_SETUP_2ND_COLUMN+10*FW, y, g_model.pulsePol ? '+' : '-', (attr && m_posHorz==2) ? INVERS : 0); + lcd_outdezAtt(MODEL_SETUP_2ND_COLUMN+8*FW+2, y, (g_model.ppmDelay*50)+300, m_posHorz==1 ? attr : 0); + lcd_putcAtt(MODEL_SETUP_2ND_COLUMN+10*FW, y, g_model.pulsePol ? '+' : '-', m_posHorz==2 ? attr : 0); if(attr && (editMode>0 || p1valdiff)) { switch (m_posHorz) { @@ -954,7 +949,7 @@ void menuModelSetup(uint8_t event) CHECK_INCDEC_MODELVAR(event, g_model.ppmDelay, -4, 10); break; case 2: - CHECK_INCDEC_MODELVAR(event, g_model.pulsePol, 0, 1); + CHECK_INCDEC_MODELVAR_ZERO(event, g_model.pulsePol, 1); break; } } @@ -966,9 +961,9 @@ void menuModelSetup(uint8_t event) } lcd_putsLeft(y, STR_RXNUM); - lcd_outdezNAtt(MODEL_SETUP_2ND_COLUMN-3*FW, y, g_model.modelId, ((attr && m_posHorz==0) ? (editMode>0 ? BLINK|INVERS : INVERS) : 0) | LEADING0|LEFT, 2); + lcd_outdezNAtt(MODEL_SETUP_2ND_COLUMN-3*FW, y, g_model.modelId, (m_posHorz==0 ? attr : 0) | LEADING0|LEFT, 2); if (attr && (m_posHorz==0 && (editMode>0 || p1valdiff))) - CHECK_INCDEC_MODELVAR(event, g_model.modelId, 0, 99); + CHECK_INCDEC_MODELVAR_ZERO(event, g_model.modelId, 99); #if defined(PXX) if (protocol == PROTO_PXX) { @@ -1037,7 +1032,7 @@ uint8_t editDelay(const xcoord_t x, const uint8_t y, const uint8_t event, const { lcd_puts(x, y, str); lcd_outdezAtt(x+MIXES_2ND_COLUMN, y, (10/DELAY_STEP)*delay, attr|PREC1|LEFT); - if (attr) CHECK_INCDEC_MODELVAR(event, delay, 0, DELAY_MAX); + if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, delay, DELAY_MAX); return delay; } #define EDIT_DELAY(x, y, event, attr, str, delay) editDelay(x, y, event, attr, str, delay) @@ -1046,7 +1041,7 @@ uint8_t editDelay(const uint8_t y, const uint8_t event, const uint8_t attr, cons { lcd_putsLeft(y, str); lcd_outdezAtt(MIXES_2ND_COLUMN, y, (10/DELAY_STEP)*delay, attr|PREC1|LEFT); - if (attr) CHECK_INCDEC_MODELVAR(event, delay, 0, DELAY_MAX); + if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, delay, DELAY_MAX); return delay; } #define EDIT_DELAY(x, y, event, attr, str, delay) editDelay(y, event, attr, str, delay) @@ -1153,7 +1148,7 @@ void menuModelPhaseOne(uint8_t event) case ITEM_MODEL_PHASE_TRIMS: lcd_putsLeft(y, STR_TRIMS); for (uint8_t t=0; t0) ? BLINK|INVERS : INVERS) : 0); + putsTrimMode(MIXES_2ND_COLUMN+(t*FW), y, s_currIdx, t, m_posHorz==t ? attr : 0); if (attr && m_posHorz==t && ((editMode>0) || p1valdiff)) { int16_t v = getRawTrimValue(s_currIdx, t); if (v < TRIM_EXTENDED_MAX) v = TRIM_EXTENDED_MAX; @@ -1170,7 +1165,7 @@ void menuModelPhaseOne(uint8_t event) case ITEM_MODEL_PHASE_ROTARY_ENCODERS: lcd_putsLeft(y, STR_ROTARY_ENCODER); for (uint8_t t=0; t0) ? BLINK|INVERS : INVERS) : 0); + putsRotaryEncoderMode(MIXES_2ND_COLUMN+(t*FW), y, s_currIdx, t, m_posHorz==t ? attr : 0); if (attr && m_posHorz==t && ((editMode>0) || p1valdiff)) { #if ROTARY_ENCODERS > 2 int16_t v; @@ -1229,7 +1224,7 @@ void menuModelPhaseOne(uint8_t event) else { lcd_putsAtt(MIXES_2ND_COLUMN+2*FW, y, STR_OWN, m_posHorz==1 ? attr : 0); } - if (attr && s_currIdx>0 && m_posHorz==1 && ((editMode>0) || p1valdiff)) { + if (attr && s_currIdx>0 && m_posHorz==1 && (editMode>0 || p1valdiff)) { if (v < GVAR_MAX) v = GVAR_MAX; v = checkIncDec(event, v, GVAR_MAX, GVAR_MAX+MAX_PHASES-1, EE_MODEL); if (checkIncDec_Ret) { @@ -1382,7 +1377,7 @@ void menuModelHeli(uint8_t event) case ITEM_HELI_SWASHRING: lcd_putsLeft(y, STR_SWASHRING); lcd_outdezAtt(HELI_PARAM_OFS, y, g_model.swashR.value, LEFT|attr); - if (attr) CHECK_INCDEC_MODELVAR(event, g_model.swashR.value, 0, 100); + if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, g_model.swashR.value, 100); break; case ITEM_HELI_ELEDIRECTION: @@ -1843,7 +1838,7 @@ void menuModelExpoOne(uint8_t event) if (ed->curveMode!=MODE_EXPO || ed->curveParam==0) { putsCurve(EXPO_ONE_2ND_COLUMN, y, ed->curveParam, attr); if (attr) { - CHECK_INCDEC_MODELVAR(event, ed->curveParam, 0, CURVE_BASE+MAX_CURVES-1); + CHECK_INCDEC_MODELVAR_ZERO(event, ed->curveParam, CURVE_BASE+MAX_CURVES-1); if (ed->curveParam) ed->curveMode = MODE_CURVE; if (ed->curveParam>=CURVE_BASE && event==EVT_KEY_FIRST(KEY_MENU)) { s_curveChan = ed->curveParam - CURVE_BASE; @@ -2082,7 +2077,7 @@ void menuModelMixOne(uint8_t event) lcd_outdezAtt(COLUMN_X+MIXES_2ND_COLUMN, y, md2->mixWarn, attr|LEFT); else lcd_putsAtt(COLUMN_X+MIXES_2ND_COLUMN, y, STR_OFF, attr); - if (attr) CHECK_INCDEC_MODELVAR( event, md2->mixWarn, 0, 3); + if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, md2->mixWarn, 3); break; case MIX_FIELD_MLTPX: md2->mltpx = selectMenuItem(COLUMN_X+MIXES_2ND_COLUMN, y, STR_MULTPX, STR_VMLTPX, md2->mltpx, 0, 2, attr, event); @@ -2609,7 +2604,7 @@ void menuModelLimits(uint8_t event) case ITEM_LIMITS_SYMETRICAL: lcd_putcAtt(LCD_W-FW-MENUS_SCROLLBAR_WIDTH, y, ld->symetrical ? '=' : '^', attr); if (active) { - CHECK_INCDEC_MODELVAR(event, ld->symetrical, 0, 1); + CHECK_INCDEC_MODELVAR_ZERO(event, ld->symetrical, 1); } break; #endif @@ -2764,7 +2759,7 @@ void menuModelCustomSwitchOne(uint8_t event) lcd_putsLeft(y, STR_FUNC); lcd_putsiAtt(CSW_2ND_COLUMN, y, STR_VCSWFUNC, cs->func, attr); if (attr) { - CHECK_INCDEC_MODELVAR(event, cs->func, 0, CS_MAXF); + CHECK_INCDEC_MODELVAR_ZERO(event, cs->func, CS_MAXF); if (cstate != CS_STATE(cs->func)) { cs->v1 = 0; cs->v2 = 0; @@ -2835,7 +2830,7 @@ void menuModelCustomSwitchOne(uint8_t event) lcd_outdezAtt(CSW_2ND_COLUMN, y, 5*cs->duration, attr|PREC1|LEFT); else lcd_putsiAtt(CSW_2ND_COLUMN, y, STR_MMMINV, 0, attr); - if (attr) CHECK_INCDEC_MODELVAR(event, cs->duration, 0, MAX_CSW_DURATION); + if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, cs->duration, MAX_CSW_DURATION); break; case CSW_FIELD_DELAY: lcd_putsLeft(y, STR_DELAY); @@ -2843,7 +2838,7 @@ void menuModelCustomSwitchOne(uint8_t event) lcd_outdezAtt(CSW_2ND_COLUMN, y, 5*cs->delay, attr|PREC1|LEFT); else lcd_putsiAtt(CSW_2ND_COLUMN, y, STR_MMMINV, 0, attr); - if (attr) CHECK_INCDEC_MODELVAR(event, cs->delay, 0, MAX_CSW_DELAY); + if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, cs->delay, MAX_CSW_DELAY); break; } } @@ -2981,7 +2976,7 @@ void menuModelCustomSwitches(uint8_t event) if ((s_editMode>0 || p1valdiff) && attr) { switch (m_posHorz) { case 0: - CHECK_INCDEC_MODELVAR(event, cs->func, 0, CS_MAXF); + CHECK_INCDEC_MODELVAR_ZERO(event, cs->func, CS_MAXF); if (cstate != CS_STATE(cs->func)) { cs->v1 = 0; cs->v2 = 0; @@ -3022,7 +3017,7 @@ void menuModelCustomFunctions(uint8_t event) } #endif - MENU(STR_MENUCUSTOMFUNC, menuTabModel, e_CustomFunctions, NUM_FSW+1, {0, 3/*repeated*/}); + MENU(STR_MENUCUSTOMFUNC, menuTabModel, e_CustomFunctions, NUM_CFN+1, {0, 3/*repeated*/}); uint8_t y; uint8_t k = 0; @@ -3032,7 +3027,7 @@ void menuModelCustomFunctions(uint8_t event) y = 1 + (i+1)*FH; k = i+s_pgOfs; if(k==NUM_CHNOUT) break; - FuncSwData *sd = &g_model.funcSw[k]; + CustomFnData *sd = &g_model.funcSw[k]; for (uint8_t j=0; j<4; j++) { uint8_t attr = ((sub==k && m_posHorz==j) ? ((s_editMode>0) ? BLINK|INVERS : INVERS) : 0); uint8_t active = (attr && (s_editMode>0 || p1valdiff)); @@ -3042,7 +3037,7 @@ void menuModelCustomFunctions(uint8_t event) if (sd->swtch > MAX_SWITCH+1) sd->swtch -= (MAX_SWITCH+1); if (sd->swtch < -MAX_SWITCH-1) sd->swtch += (MAX_SWITCH+1); } - putsSwitches(3, y, sd->swtch, SWONOFF | attr | ((abs(sd->swtch) <= (MAX_SWITCH+1) && getSwitch(sd->swtch, 0) && (sd->func > FUNC_INSTANT_TRIM || sd->active)) ? BOLD : 0)); + putsSwitches(3, y, sd->swtch, SWONOFF | attr | ((activeFnSwitches & ((MASK_FUNC_TYPE)1 << k)) ? BOLD : 0)); if (active || AUTOSWITCH_ENTER_LONG()) { #if defined(PCBX9D) CHECK_INCDEC_MODELSWITCH(event, sd->swtch, -127, +127); @@ -3086,8 +3081,8 @@ void menuModelCustomFunctions(uint8_t event) } lcd_putsiAtt(MODEL_CUSTOM_FUNC_2ND_COLUMN, y, STR_VFSWFUNC, func_displayed, attr); if (active) { - CHECK_INCDEC_MODELVAR(event, sd->func, 0, FUNC_MAX-1); - if (checkIncDec_Ret) FSW_RESET_PARAM(sd); + CHECK_INCDEC_MODELVAR_ZERO(event, sd->func, FUNC_MAX-1); + if (checkIncDec_Ret) CFN_RESET_PARAM(sd); } } else if (attr) { @@ -3097,7 +3092,7 @@ void menuModelCustomFunctions(uint8_t event) case 2: if (sd->swtch) { - int16_t val_displayed = FSW_PARAM(sd); + int16_t val_displayed = CFN_PARAM(sd); int8_t val_min = 0; uint8_t val_max = 255; if (sd->func == FUNC_PLAY_SOUND) { @@ -3116,10 +3111,11 @@ void menuModelCustomFunctions(uint8_t event) #endif #if defined(CPUARM) && defined(SDCARD) else if (sd->func == FUNC_PLAY_TRACK || sd->func == FUNC_BACKGND_MUSIC) { + uint8_t x = (sd->func == FUNC_PLAY_TRACK ? MODEL_CUSTOM_FUNC_2ND_COLUMN + FW + FW*strlen(TR_PLAY_TRACK) : MODEL_CUSTOM_FUNC_3RD_COLUMN); if (ZLEN(sd->param)) - lcd_putsnAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, sd->param, sizeof(sd->param), attr); + lcd_putsnAtt(x, y, sd->param, sizeof(sd->param), attr); else - lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_VCSWFUNC, 0, attr); + lcd_putsiAtt(x, y, STR_VCSWFUNC, 0, attr); if (active && event==EVT_KEY_BREAK(KEY_ENTER)) { s_editMode = 0; _event = 0; @@ -3132,7 +3128,7 @@ void menuModelCustomFunctions(uint8_t event) } else if (sd->func == FUNC_PLAY_VALUE) { val_max = NUM_XCHNPLAY-1; - putsChnRaw(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed+1, attr); + putsChnRaw(MODEL_CUSTOM_FUNC_3RD_COLUMN-FW-2, y, val_displayed+1, attr); } #endif #if defined(CPUARM) @@ -3144,14 +3140,14 @@ void menuModelCustomFunctions(uint8_t event) else if (sd->func == FUNC_PLAY_TRACK) { lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed+PROMPT_CUSTOM_BASE, attr|LEFT); } + else if (sd->func == FUNC_PLAY_BOTH) { + lcd_putcAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN-1, y, '|', attr); + lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN+1, y, val_displayed+PROMPT_CUSTOM_BASE, attr); + lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN+3, y, val_displayed+PROMPT_CUSTOM_BASE+1, attr|LEFT); + } else if (sd->func == FUNC_PLAY_VALUE) { val_max = NUM_XCHNPLAY-1; - putsChnRaw(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed+1, attr); - } - else if (sd->func == FUNC_PLAY_BOTH) { - lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed+PROMPT_CUSTOM_BASE, attr|LEFT); - lcd_putcAtt(lcdLastPos, y, '/', attr); - lcd_outdezAtt(lcdLastPos+FW, y, val_displayed+PROMPT_CUSTOM_BASE+1, attr|LEFT); + putsChnRaw(MODEL_CUSTOM_FUNC_3RD_COLUMN-2*FW-2, y, val_displayed+1, attr); } #endif #if defined(SDCARD) @@ -3167,10 +3163,10 @@ void menuModelCustomFunctions(uint8_t event) #endif else if (sd->func == FUNC_RESET) { val_max = 3; - lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_VFSWRESET, FSW_PARAM(sd), attr); + lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_VFSWRESET, CFN_PARAM(sd), attr); } else if (sd->func <= FUNC_SAFETY_CH16) { - val_displayed = (int8_t)FSW_PARAM(sd); + val_displayed = (int8_t)CFN_PARAM(sd); val_min = -125; val_max = 125; lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT); } @@ -3190,7 +3186,7 @@ void menuModelCustomFunctions(uint8_t event) } if (active) { - FSW_PARAM(sd) = checkIncDec(event, val_displayed, val_min, val_max, EE_MODEL); + CFN_PARAM(sd) = checkIncDec(event, val_displayed, val_min, val_max, EE_MODEL); } } else if (attr) { @@ -3201,8 +3197,25 @@ void menuModelCustomFunctions(uint8_t event) case 3: if (sd->swtch && sd->func <= FUNC_INSTANT_TRIM) { menu_lcd_onoff(MODEL_CUSTOM_FUNC_4TH_COLUMN, y, sd->active, attr); - if (active) CHECK_INCDEC_MODELVAR(event, sd->active, 0, 1); + if (active) CHECK_INCDEC_MODELVAR_ZERO(event, sd->active, 1); } +#if defined(VOICE) + else if (sd->swtch && sd->func >= FUNC_PLAY_TRACK && sd->func <= FUNC_PLAY_VALUE) { +#if defined(CPUARM) + if (sd->active) { + lcd_outdezAtt(MODEL_CUSTOM_FUNC_4TH_COLUMN+2, y, sd->active*5, attr); + lcd_putcAtt(MODEL_CUSTOM_FUNC_4TH_COLUMN+2, y, '\'', attr); + } + else { + lcd_putcAtt(MODEL_CUSTOM_FUNC_4TH_COLUMN-1, y, '-', attr); + } + if (active) CHECK_INCDEC_MODELVAR_ZERO(event, sd->active, 12); +#else + lcd_putsiAtt(MODEL_CUSTOM_FUNC_4TH_COLUMN-2*FWNUM, y, PSTR("\003\002\001-15'30'60'"), sd->active, attr); + if (active) CHECK_INCDEC_MODELVAR_ZERO(event, sd->active, 3); +#endif + } +#endif else if (attr) { REPEAT_LAST_CURSOR_MOVE(); } @@ -3327,8 +3340,8 @@ void menuModelTelemetry(uint8_t event) case ITEM_TELEMETRY_A1_RANGE: case ITEM_TELEMETRY_A2_RANGE: lcd_putsLeft(y, STR_RANGE); - putsTelemetryChannel(TELEM_COL2, y, dest, 255-channel.offset, ((attr && m_posHorz==0) ? blink : 0)|NO_UNIT|LEFT); - lcd_putsiAtt(lcdLastPos, y, STR_VTELEMUNIT, channel.type, (attr && m_posHorz==1 ? blink : 0)); + putsTelemetryChannel(TELEM_COL2, y, dest, 255-channel.offset, (m_posHorz==0 ? attr : 0)|NO_UNIT|LEFT); + lcd_putsiAtt(lcdLastPos, y, STR_VTELEMUNIT, channel.type, m_posHorz==1 ? attr : 0); if (attr && (s_editMode>0 || p1valdiff)) { if (m_posHorz == 0) { uint16_t ratio = checkIncDec(event, channel.ratio, 0, 256, EE_MODEL); @@ -3345,7 +3358,7 @@ void menuModelTelemetry(uint8_t event) } } else { - CHECK_INCDEC_MODELVAR(event, channel.type, 0, UNIT_A1A2_MAX); + CHECK_INCDEC_MODELVAR_ZERO(event, channel.type, UNIT_A1A2_MAX); } } break; @@ -3364,9 +3377,9 @@ void menuModelTelemetry(uint8_t event) { uint8_t j = ((k==ITEM_TELEMETRY_A1_ALARM1 || k==ITEM_TELEMETRY_A2_ALARM1) ? 0 : 1); lcd_putsLeft(y, STR_ALARM); - lcd_putsiAtt(TELEM_COL2, y, STR_VALARM, ALARM_LEVEL(ch, j), (attr && m_posHorz==0) ? blink : 0); - lcd_putsiAtt(TELEM_COL2+4*FW, y, STR_VALARMFN, ALARM_GREATER(ch, j), (attr && m_posHorz==1) ? blink : 0); - putsTelemetryChannel(TELEM_COL2+6*FW, y, dest, channel.alarms_value[j], (attr && m_posHorz==2 ? blink : 0) | LEFT); + lcd_putsiAtt(TELEM_COL2, y, STR_VALARM, ALARM_LEVEL(ch, j), m_posHorz==0 ? attr : 0); + lcd_putsiAtt(TELEM_COL2+4*FW, y, STR_VALARMFN, ALARM_GREATER(ch, j), m_posHorz==1 ? attr : 0); + putsTelemetryChannel(TELEM_COL2+6*FW, y, dest, channel.alarms_value[j], (m_posHorz==2 ? attr : 0) | LEFT); if (attr && (s_editMode>0 || p1valdiff)) { uint8_t t; @@ -3398,9 +3411,9 @@ void menuModelTelemetry(uint8_t event) case ITEM_TELEMETRY_RSSI_ALARM2: { uint8_t j = k-ITEM_TELEMETRY_RSSI_ALARM1; lcd_putsLeft(y, STR_ALARM); - lcd_putsiAtt(TELEM_COL2, y, STR_VALARM, ((2+j+g_model.frsky.rssiAlarms[j].level)%4), (attr && m_posHorz==0) ? blink : 0); + lcd_putsiAtt(TELEM_COL2, y, STR_VALARM, ((2+j+g_model.frsky.rssiAlarms[j].level)%4), m_posHorz==0 ? attr : 0); lcd_putc(TELEM_COL2+4*FW, y, '<'); - lcd_outdezNAtt(TELEM_COL2+6*FW, y, getRssiAlarmValue(j), LEFT|((attr && m_posHorz==1) ? blink : 0), 3); + lcd_outdezNAtt(TELEM_COL2+6*FW, y, getRssiAlarmValue(j), LEFT|(m_posHorz==1 ? attr : 0), 3); if (attr && (s_editMode>0 || p1valdiff)) { switch (m_posHorz) { @@ -3423,26 +3436,26 @@ void menuModelTelemetry(uint8_t event) case ITEM_TELEMETRY_USR_PROTO: lcd_putsLeft(y, STR_PROTO); lcd_putsiAtt(TELEM_COL2, y, STR_VTELPROTO, g_model.frsky.usrProto, attr); - if (attr) CHECK_INCDEC_MODELVAR(event, g_model.frsky.usrProto, 0, USR_PROTO_LAST); + if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, g_model.frsky.usrProto, USR_PROTO_LAST); break; case ITEM_TELEMETRY_USR_BLADES: lcd_putsLeft(y, STR_BLADES); lcd_outdezAtt(TELEM_COL2+FWNUM, y, 2+g_model.frsky.blades, attr); - if (attr) CHECK_INCDEC_MODELVAR(event, g_model.frsky.blades, 0, 3); + if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, g_model.frsky.blades, 3); break; #endif case ITEM_TELEMETRY_USR_VOLTAGE_SOURCE: lcd_putsLeft(y, STR_VOLTAGE); lcd_putsiAtt(TELEM_COL2, y, STR_VOLTSRC, g_model.frsky.voltsSource+1, attr); - if (attr) CHECK_INCDEC_MODELVAR(event, g_model.frsky.voltsSource, 0, 3); + if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, g_model.frsky.voltsSource, 3); break; case ITEM_TELEMETRY_USR_CURRENT_SOURCE: lcd_putsLeft(y, STR_CURRENT); lcd_putsiAtt(TELEM_COL2, y, STR_VOLTSRC, g_model.frsky.currentSource, attr); - if (attr) CHECK_INCDEC_MODELVAR(event, g_model.frsky.currentSource, 0, 3); + if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, g_model.frsky.currentSource, 3); break; #if defined(VARIO) @@ -3458,17 +3471,20 @@ void menuModelTelemetry(uint8_t event) case ITEM_TELEMETRY_VARIO_RANGE: lcd_putsLeft(y, STR_LIMIT); - lcd_outdezAtt(TELEM_COL2, y, -10+g_model.frsky.varioMin, ((attr && m_posHorz==0) ? blink : 0)|LEFT); - lcd_outdezAtt(TELEM_COL2+7*FW-2, y, -5+g_model.frsky.varioCenterMin, ((attr && m_posHorz==1) ? blink : 0)|PREC1); - lcd_outdezAtt(TELEM_COL2+10*FW, y, 5+g_model.frsky.varioCenterMax, ((attr && m_posHorz==2) ? blink : 0)|PREC1); - lcd_outdezAtt(TELEM_COL2+13*FW+2, y, 10+g_model.frsky.varioMax, ((attr && m_posHorz==3) ? blink : 0)); + lcd_outdezAtt(TELEM_COL2, y, -10+g_model.frsky.varioMin, (m_posHorz==0 ? attr : 0)|LEFT); + if (g_model.frsky.varioCenterMin == -16) + lcd_putsAtt(TELEM_COL2+4*FW-2, y, STR_OFF, m_posHorz==1 ? attr : 0); + else + lcd_outdezAtt(TELEM_COL2+7*FW-2, y, -5+g_model.frsky.varioCenterMin, (m_posHorz==1 ? attr : 0)|PREC1); + lcd_outdezAtt(TELEM_COL2+10*FW, y, 5+g_model.frsky.varioCenterMax, (m_posHorz==2 ? attr : 0)|PREC1); + lcd_outdezAtt(TELEM_COL2+13*FW+2, y, 10+g_model.frsky.varioMax, (m_posHorz==3 ? attr : 0)); if (attr && (s_editMode>0 || p1valdiff)) { switch (m_posHorz) { case 0: CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioMin, -7, 7); break; case 1: - CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioCenterMin, -15, 5+min(10, g_model.frsky.varioCenterMax+5)); + CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioCenterMin, -16, 5+min(10, g_model.frsky.varioCenterMax+5)); break; case 2: CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioCenterMax, -5+max(-10, g_model.frsky.varioCenterMin-5), +15); @@ -3540,10 +3556,10 @@ void menuModelTelemetry(uint8_t event) if (IS_BARS_SCREEN(screenIndex)) { FrSkyBarData & bar = g_model.frsky.screens[screenIndex].bars[lineIndex]; uint8_t barSource = bar.source; - lcd_putsiAtt(INDENT_WIDTH, y, STR_VTELEMCHNS, barSource, (attr && m_posHorz==0) ? blink : 0); + lcd_putsiAtt(INDENT_WIDTH, y, STR_VTELEMCHNS, barSource, m_posHorz==0 ? attr : 0); if (barSource) { - putsTelemetryChannel(56-3*FW, y, barSource-1, convertTelemValue(barSource, bar.barMin), (attr && m_posHorz==1 ? blink : 0) | LEFT); - putsTelemetryChannel(14*FW-3, y, barSource-1, convertTelemValue(barSource, 255-bar.barMax), (attr && m_posHorz==2 ? blink : 0) | LEFT); + putsTelemetryChannel(56-3*FW, y, barSource-1, convertTelemValue(barSource, bar.barMin), (m_posHorz==1 ? attr : 0) | LEFT); + putsTelemetryChannel(14*FW-3, y, barSource-1, convertTelemValue(barSource, 255-bar.barMax), (m_posHorz==2 ? attr : 0) | LEFT); } else { if (attr) m_posHorz = 0; @@ -3569,9 +3585,9 @@ void menuModelTelemetry(uint8_t event) else { for (uint8_t c=0; c<2; c++) { uint8_t & value = g_model.frsky.screens[screenIndex].lines[lineIndex].sources[c]; - lcd_putsiAtt(c==0?INDENT_WIDTH:TELEM_COL2, y, STR_VTELEMCHNS, value, (attr && m_posHorz==c) ? blink : 0); + lcd_putsiAtt(c==0?INDENT_WIDTH:TELEM_COL2, y, STR_VTELEMCHNS, value, m_posHorz==c ? attr : 0); if (attr && m_posHorz==c && (s_editMode>0 || p1valdiff)) { - CHECK_INCDEC_MODELVAR(event, value, 0, g_model.frsky.usrProto ? ((lineIndex==3 && c==0) ? TELEM_STATUS_MAX : TELEM_DISPLAY_MAX) : TELEM_NOUSR_MAX); + CHECK_INCDEC_MODELVAR_ZERO(event, value, g_model.frsky.usrProto ? ((lineIndex==3 && c==0) ? TELEM_STATUS_MAX : TELEM_DISPLAY_MAX) : TELEM_NOUSR_MAX); } } if (attr && m_posHorz == 2) { diff --git a/src/myeeprom.h b/src/myeeprom.h index c149e5825..6608fc7e7 100644 --- a/src/myeeprom.h +++ b/src/myeeprom.h @@ -381,24 +381,24 @@ enum Functions { }; #if defined(CPUARM) -PACK(typedef struct t_FuncSwData { // Function Switches data +PACK(typedef struct t_CustomFnData { // Function Switches data int8_t swtch; //input uint8_t func; - char param[6]; + char param[6]; uint8_t active; uint8_t spare; -}) FuncSwData; -#define FSW_PARAM(p) (*((uint32_t*)(p)->param)) -#define FSW_RESET_PARAM(p) memset(p->param, 0, sizeof(p->param)) +}) CustomFnData; +#define CFN_PARAM(p) (*((uint32_t*)(p)->param)) +#define CFN_RESET_PARAM(p) memset(p->param, 0, sizeof(p->param)) #else -PACK(typedef struct t_FuncSwData { // Function Switches data - int8_t swtch; //input - uint8_t func:7; - uint8_t active:1; +PACK(typedef struct t_CustomFnData { // Function Switches data + int8_t swtch; // input + uint8_t func:6; + uint8_t active:2; uint8_t param; -}) FuncSwData; -#define FSW_PARAM(p) ((p)->param) -#define FSW_RESET_PARAM(p) FSW_PARAM(p) = 0 +}) CustomFnData; +#define CFN_PARAM(p) ((p)->param) +#define CFN_RESET_PARAM(p) CFN_PARAM(p) = 0 #endif enum TelemetryUnit { @@ -682,7 +682,7 @@ PACK(typedef struct t_PhaseData { #define MAX_MIXERS 64 #define MAX_EXPOS 32 #define NUM_CSW 32 // number of custom switches -#define NUM_FSW 32 // number of functions assigned to switches +#define NUM_CFN 32 // number of functions assigned to switches #elif defined(PCBGRUVIN9X) || defined(CPUM128) #define MAX_MODELS 30 #define NUM_CHNOUT 16 // number of real output channels CH1-CH16 @@ -690,7 +690,7 @@ PACK(typedef struct t_PhaseData { #define MAX_MIXERS 32 #define MAX_EXPOS 14 #define NUM_CSW 12 // number of custom switches -#define NUM_FSW 16 // number of functions assigned to switches +#define NUM_CFN 16 // number of functions assigned to switches #else #define MAX_MODELS 16 #define NUM_CHNOUT 16 // number of real output channels CH1-CH16 @@ -698,7 +698,7 @@ PACK(typedef struct t_PhaseData { #define MAX_MIXERS 32 #define MAX_EXPOS 14 #define NUM_CSW 12 // number of custom switches -#define NUM_FSW 16 // number of functions assigned to switches +#define NUM_CFN 16 // number of functions assigned to switches #endif #define MAX_TIMERS 2 @@ -881,7 +881,7 @@ PACK(typedef struct t_ModelData { int8_t points[NUM_POINTS]; CustomSwData customSw[NUM_CSW]; - FuncSwData funcSw[NUM_FSW]; + CustomFnData funcSw[NUM_CFN]; SwashRingData swashR; PhaseData phaseData[MAX_PHASES]; diff --git a/src/open9x.cpp b/src/open9x.cpp index 1dc6ba674..427e17f5a 100644 --- a/src/open9x.cpp +++ b/src/open9x.cpp @@ -264,8 +264,8 @@ void per10ms() #if defined(ROTARY_ENCODER_NAVIGATION) if (IS_RE_NAVIGATION_ENABLE()) { - static int16_t rePreviousValue; - int16_t reNewValue = (g_rotenc[NAVIGATION_RE_IDX()] / ROTARY_ENCODER_GRANULARITY); + static rotenc_t rePreviousValue; + rotenc_t reNewValue = (g_rotenc[NAVIGATION_RE_IDX()] / ROTARY_ENCODER_GRANULARITY); int8_t scrollRE = reNewValue - rePreviousValue; if (scrollRE) { rePreviousValue = reNewValue; @@ -404,17 +404,17 @@ void modelDefault(uint8_t id) applyDefaultTemplate(); } -int16_t intpol(int16_t x, uint8_t idx) // -100, -75, -50, -25, 0 ,25 ,50, 75, 100 +int16_t intpol(int16_t x, uint8_t idx) // -100, -75, -50, -25, 0, 25 ,50, 75, 100 { CurveInfo crv = curveinfo(idx); int16_t erg = 0; x+=RESXu; if (x < 0) { - erg = (int16_t)crv.crv[0] * (RESX/4); + erg = (int16_t)crv.crv[0]; } else if (x >= (RESX*2)) { - erg = (int16_t)crv.crv[crv.points-1] * (RESX/4); + erg = (int16_t)crv.crv[crv.points-1]; } else { uint16_t a=0, b=0; @@ -422,7 +422,7 @@ int16_t intpol(int16_t x, uint8_t idx) // -100, -75, -50, -25, 0 ,25 ,50, 75, 10 if (crv.custom) { for (i=0; i>= 8; + value *= (uint32_t)x; + value >>= 12; + value += (uint32_t)(100-k)*x+50; + + // return divu100(value); + return value/100; } int16_t expo(int16_t x, int16_t k) @@ -1203,6 +1214,10 @@ void checkBacklight() { static uint8_t tmr10ms ; +#if defined(PCBSTD) && defined(ROTARY_ENCODER_NAVIGATION) + rotencPoll(); +#endif + if (tmr10ms != g_blinkTmr10ms) { tmr10ms = g_blinkTmr10ms; uint16_t tsum = stickMoveValue(); @@ -1222,10 +1237,6 @@ void checkBacklight() Voice.voice_process() ; #endif } - -#if defined(PCBSTD) && defined(ROTARY_ENCODER_NAVIGATION) - rotencPoll(); -#endif } void backlightOn() @@ -1926,8 +1937,10 @@ void testFunc() } #endif -MASK_FUNC_TYPE activeFunctions = 0; -MASK_FSW_TYPE activeFunctionSwitches = 0; +MASK_FUNC_TYPE activeFunctions = 0; +MASK_CFN_TYPE activeSwitches = 0; +MASK_CFN_TYPE activeFnSwitches = 0; +tmr10ms_t lastFunctionTime[NUM_CFN] = { 0 }; #if defined(VOICE) PLAY_FUNCTION(playValue, uint8_t idx) @@ -2048,16 +2061,25 @@ PLAY_FUNCTION(playValue, uint8_t idx) #if defined(CPUARM) uint8_t currentSpeakerVolume = 255; uint8_t requiredSpeakerVolume; -uint8_t fnSwitchDuration[NUM_FSW] = { 0 }; -#define FSW_PRESSLONG_DURATION 100 -#define COMPLEX_SWITCH (momentary || shrt || lng) -#else -#define COMPLEX_SWITCH (momentary) +uint8_t fnSwitchDuration[NUM_CFN] = { 0 }; +#define CFN_PRESSLONG_DURATION 100 + +inline void playCustomFunctionFile(CustomFnData *sd, uint8_t id) +{ + char lfn[] = SOUNDS_PATH "/xxxxxx.wav"; + strncpy(lfn+sizeof(SOUNDS_PATH), sd->param, sizeof(sd->param)); + lfn[sizeof(SOUNDS_PATH)+sizeof(sd->param)] = '\0'; + strcat(lfn+sizeof(SOUNDS_PATH), SOUNDS_EXT); + PLAY_FILE(lfn, sd->func==FUNC_BACKGND_MUSIC ? PLAY_BACKGROUND : 0, id); +} + #endif void evalFunctions() { - MASK_FUNC_TYPE newActiveFunctions = 0; + MASK_FUNC_TYPE newActiveFunctions = 0; + MASK_CFN_TYPE newActiveSwitches = 0; + MASK_CFN_TYPE newActiveFnSwitches = 0; #if defined(ROTARY_ENCODERS) && defined(GVARS) static rotenc_t rePreviousValues[ROTARY_ENCODERS]; @@ -2071,25 +2093,39 @@ void evalFunctions() trimGvar[i] = -1; #endif - for (uint8_t i=0; iswtch; if (swtch) { MASK_FUNC_TYPE function_mask = (sd->func >= FUNC_TRAINER ? ((MASK_FUNC_TYPE)1 << (sd->func-FUNC_TRAINER)) : 0); - MASK_FSW_TYPE switch_mask = ((MASK_FSW_TYPE)1 << i); + MASK_CFN_TYPE switch_mask = ((MASK_CFN_TYPE)1 << i); uint8_t momentary = 0; + #if defined(CPUARM) - uint8_t shrt=0, lng=0; + + #define MOMENTARY_START_TEST() ( (momentary && !(activeSwitches & switch_mask) && active) || \ + (shortPress && !active && fnSwitchDuration[i]>0 && fnSwitchDuration[i]=CFN_PRESSLONG_DURATION) ) + + uint8_t shortPress=0, longPress=0; if (swtch > MAX_SWITCH+1+MAX_SWITCH+1+MAX_PSWITCH) { - lng = 1; + longPress = 1; swtch -= MAX_SWITCH+1+MAX_SWITCH+1+MAX_PSWITCH; } else if (swtch > MAX_SWITCH+1+MAX_SWITCH+1) { - shrt = 1; + shortPress = 1; swtch -= MAX_SWITCH+1+MAX_SWITCH+1; } else + +#else + + #define shortPress 0 + #define longPress 0 + #define MOMENTARY_START_TEST() (!(activeSwitches & switch_mask) && active) + #endif + if (swtch > MAX_SWITCH+1) { momentary = 1; swtch -= MAX_SWITCH+1; @@ -2098,26 +2134,54 @@ void evalFunctions() momentary = 1; swtch += MAX_SWITCH+1; } + + bool active = getSwitch(swtch, 0); + if (active) newActiveSwitches |= switch_mask; + if (momentary || longPress || shortPress) { + #if defined(CPUARM) - bool sw; - if ((sw=getSwitch(swtch, 0)) || (shrt&&fnSwitchDuration[i]>0&&fnSwitchDuration[i]=(uint8_t)FSW_PRESSLONG_DURATION)) { - if (shrt || lng) { - if (sw) { + bool swState = active; +#endif + + if (MOMENTARY_START_TEST()) { + + active = !(activeFnSwitches & switch_mask); +#if !defined(CPUARM) + if (sd->func == FUNC_PLAY_BOTH && !active) { + momentary = 1; + } + else +#endif + { + momentary = 0; + } + } + else { + active = (activeFnSwitches & switch_mask); + momentary = 0; + } +#if defined(CPUARM) + if (shortPress || longPress) { + if (swState) { if (fnSwitchDuration[i] < 255) fnSwitchDuration[i]++; - newActiveFunctions |= (activeFunctions & function_mask); - continue; } else { fnSwitchDuration[i] = 0; } } -#else - if (getSwitch(swtch, 0)) { #endif + } +#if !defined(CPUARM) + else if (sd->func == FUNC_PLAY_BOTH) { + momentary = 1; + } +#endif + + if (active || momentary) { if (sd->active) { if (sd->func < FUNC_TRAINER) { - safetyCh[sd->func] = FSW_PARAM(sd); + safetyCh[sd->func] = CFN_PARAM(sd); } if (!(activeFunctions & function_mask)) { @@ -2133,175 +2197,129 @@ void evalFunctions() } else if (sd->func <= FUNC_INSTANT_TRIM) { function_mask = 0; + switch_mask = 0; } #if defined(SDCARD) if (sd->func == FUNC_LOGS) { - logDelay = FSW_PARAM(sd); + logDelay = CFN_PARAM(sd); } #endif - if (!(activeFunctionSwitches & switch_mask)) { - if (sd->func == FUNC_RESET) { - switch (FSW_PARAM(sd)) { - case 0: - case 1: - resetTimer(FSW_PARAM(sd)); - break; - case 2: - resetAll(); - break; + if (sd->func == FUNC_RESET) { + switch (CFN_PARAM(sd)) { + case 0: + case 1: + resetTimer(CFN_PARAM(sd)); + break; + case 2: + resetAll(); + break; #if defined(FRSKY) - case 3: - resetTelemetry(); - break; + case 3: + resetTelemetry(); + break; #endif - } } } -#if defined(CPUARM) && defined(SDCARD) - if ((shrt || lng) && (activeFunctions & function_mask)) { - if (sd->func == FUNC_BACKGND_MUSIC) { - STOP_PLAY(i+1); - } + if (sd->func == FUNC_PLAY_SOUND) { + AUDIO_PLAY(AU_FRSKY_FIRST+CFN_PARAM(sd)); } - else -#endif - - if (!COMPLEX_SWITCH || !(activeFunctionSwitches & switch_mask)) { - if (sd->func == FUNC_PLAY_SOUND) { - AUDIO_PLAY(AU_FRSKY_FIRST+FSW_PARAM(sd)); - } #if defined(HAPTIC) - if (sd->func == FUNC_HAPTIC) { - haptic.event(AU_FRSKY_LAST+FSW_PARAM(sd)); - } + if (sd->func == FUNC_HAPTIC) { + haptic.event(AU_FRSKY_LAST+CFN_PARAM(sd)); + } #endif #if defined(CPUARM) && defined(SDCARD) - else if (sd->func == FUNC_PLAY_TRACK || sd->func == FUNC_BACKGND_MUSIC) { - if (IS_PLAYING(i+1)) { - switch_mask = 0; - } - else { - char lfn[] = SOUNDS_PATH "/xxxxxx.wav"; - strncpy(lfn+sizeof(SOUNDS_PATH), sd->param, sizeof(sd->param)); - lfn[sizeof(SOUNDS_PATH)+sizeof(sd->param)] = '\0'; - strcat(lfn+sizeof(SOUNDS_PATH), SOUNDS_EXT); - PLAY_FILE(lfn, sd->func==FUNC_BACKGND_MUSIC ? PLAY_BACKGROUND : 0, i+1); + else if (sd->func == FUNC_PLAY_TRACK || sd->func == FUNC_PLAY_VALUE) { + tmr10ms_t tmr10ms = get_tmr10ms(); + uint8_t repeatParam = sd->active; + if (!lastFunctionTime[i] || (repeatParam && (signed)(tmr10ms-lastFunctionTime[i])>=500*repeatParam)) { + if (!IS_PLAYING(i+1)) { + lastFunctionTime[i] = tmr10ms; + if (sd->func == FUNC_PLAY_VALUE) { + PLAY_VALUE(CFN_PARAM(sd), i+1); + } + else { + playCustomFunctionFile(sd, i+1); + } } } - else if (sd->func == FUNC_PLAY_VALUE) { - if (IS_PLAYING(i+1)) { - switch_mask = 0; - } - else { - PLAY_VALUE(FSW_PARAM(sd), i+1); - } - } - else if (sd->func == FUNC_VOLUME) { - requiredSpeakerVolume = ((1024 + getValue(FSW_PARAM(sd))) * VOLUME_LEVEL_MAX) / 2048; + } + else if (sd->func == FUNC_BACKGND_MUSIC) { + if (!IS_PLAYING(i+1)) { + playCustomFunctionFile(sd, i+1); } + } + else if (sd->func == FUNC_VOLUME) { + requiredSpeakerVolume = ((1024 + getValue(CFN_PARAM(sd))) * VOLUME_LEVEL_MAX) / 2048; + } #elif defined(VOICE) - else if (sd->func == FUNC_PLAY_TRACK) { - if (IS_PLAYING(i+1)) { - switch_mask = 0; + else if (sd->func == FUNC_PLAY_TRACK || sd->func == FUNC_PLAY_BOTH || sd->func == FUNC_PLAY_VALUE) { + tmr10ms_t tmr10ms = get_tmr10ms(); + uint8_t repeatParam = sd->active; + if (!lastFunctionTime[i] || (sd->func==FUNC_PLAY_BOTH && active!=(bool)(activeFnSwitches&switch_mask)) || (repeatParam && (signed)(tmr10ms-lastFunctionTime[i])>=(1500<<(repeatParam-1)))) { + lastFunctionTime[i] = tmr10ms; + if (sd->func == FUNC_PLAY_VALUE) { + PLAY_VALUE(CFN_PARAM(sd), i+1); } else { - PUSH_CUSTOM_PROMPT(sd->param, i+1); - } - } - else if (sd->func == FUNC_PLAY_VALUE) { - if (IS_PLAYING(i+1)) { - switch_mask = 0; - } - else { - PLAY_VALUE(FSW_PARAM(sd), i+1); - } - } - else if (sd->func == FUNC_PLAY_BOTH) { - if (IS_PLAYING(i+1)) { - switch_mask = 0; - } - else { - PUSH_CUSTOM_PROMPT(FSW_PARAM(sd) + 1, i+1); + PUSH_CUSTOM_PROMPT(active ? sd->param : sd->param+1, i+1); } } + } #endif #if defined(DEBUG) - else if (sd->func == FUNC_TEST) { - testFunc(); - } + else if (sd->func == FUNC_TEST) { + testFunc(); + } #endif #if defined(GVARS) - else if (sd->func >= FUNC_ADJUST_GV1) { - if (FSW_PARAM(sd) >= MIXSRC_TrimRud-1 && FSW_PARAM(sd) <= MIXSRC_TrimAil-1) { - trimGvar[FSW_PARAM(sd)-MIXSRC_TrimRud+1] = sd->func-FUNC_ADJUST_GV1; - } + else if (sd->func >= FUNC_ADJUST_GV1) { + if (CFN_PARAM(sd) >= MIXSRC_TrimRud-1 && CFN_PARAM(sd) <= MIXSRC_TrimAil-1) { + trimGvar[CFN_PARAM(sd)-MIXSRC_TrimRud+1] = sd->func-FUNC_ADJUST_GV1; + } #if defined(ROTARY_ENCODERS) - else if (FSW_PARAM(sd) >= MIXSRC_REa-1 && FSW_PARAM(sd) < MIXSRC_TrimRud-1) { - int8_t scroll = rePreviousValues[FSW_PARAM(sd)-MIXSRC_REa+1] - (g_rotenc[FSW_PARAM(sd)-MIXSRC_REa+1] / ROTARY_ENCODER_GRANULARITY); - if (scroll) { - SET_GVAR(sd->func-FUNC_ADJUST_GV1, GVAR_VALUE(sd->func-FUNC_ADJUST_GV1, s_perout_flight_phase) + scroll, s_perout_flight_phase); - } - } -#endif - else { - SET_GVAR(sd->func-FUNC_ADJUST_GV1, limit((int16_t)-1250, getValue(FSW_PARAM(sd)), (int16_t)1250) / 10, s_perout_flight_phase); + else if (CFN_PARAM(sd) >= MIXSRC_REa-1 && CFN_PARAM(sd) < MIXSRC_TrimRud-1) { + int8_t scroll = rePreviousValues[CFN_PARAM(sd)-MIXSRC_REa+1] - (g_rotenc[CFN_PARAM(sd)-MIXSRC_REa+1] / ROTARY_ENCODER_GRANULARITY); + if (scroll) { + SET_GVAR(sd->func-FUNC_ADJUST_GV1, GVAR_VALUE(sd->func-FUNC_ADJUST_GV1, s_perout_flight_phase) + scroll, s_perout_flight_phase); } } #endif - } - - if (COMPLEX_SWITCH) { - if (!(activeFunctionSwitches & switch_mask)) { - if (!(activeFunctions & function_mask)) { - newActiveFunctions |= function_mask; - } - } else { - newActiveFunctions |= (activeFunctions & function_mask); + SET_GVAR(sd->func-FUNC_ADJUST_GV1, limit((int16_t)-1250, getValue(CFN_PARAM(sd)), (int16_t)1250) / 10, s_perout_flight_phase); } } - else { +#endif + + if (active) { + newActiveFnSwitches |= switch_mask; newActiveFunctions |= function_mask; } - - activeFunctionSwitches |= switch_mask; } else { + lastFunctionTime[i] = 0; #if defined(CPUARM) fnSwitchDuration[i] = 0; #endif #if defined(CPUARM) && defined(SDCARD) - if (!COMPLEX_SWITCH && sd->func == FUNC_BACKGND_MUSIC) { + if (sd->func == FUNC_BACKGND_MUSIC && isFunctionActive(FUNC_BACKGND_MUSIC)) { STOP_PLAY(i+1); } -#elif defined(VOICE) - if (sd->func == FUNC_PLAY_BOTH && (!momentary || (activeFunctionSwitches & switch_mask))) { - if (IS_PLAYING(i+1)) { - switch_mask = 0; - } - else { - PUSH_CUSTOM_PROMPT(FSW_PARAM(sd), i+1); - } - } #endif - - activeFunctionSwitches &= (~switch_mask); - if (COMPLEX_SWITCH) - newActiveFunctions |= (activeFunctions & function_mask); - - } } } - activeFunctions = newActiveFunctions; + activeSwitches = newActiveSwitches; + activeFnSwitches = newActiveFnSwitches; + activeFunctions = newActiveFunctions; #if defined(ROTARY_ENCODERS) && defined(GVARS) for (uint8_t i=0; ioffset CS_VNEG, // voffset @@ -542,13 +543,14 @@ enum CswFunctions { CS_OR, CS_XOR, CS_EQUAL, - CS_NEQUAL, + CS_NEQUAL, // TODO remove CS_GREATER, CS_LESS, - CS_EGREATER, - CS_ELESS, + CS_EGREATER, // TODO remove + CS_ELESS, // TODO remove CS_DIFFEGREATER, CS_ADIFFEGREATER, + // TODO add CS_TIMER, CS_MAXF = CS_ADIFFEGREATER }; @@ -1111,14 +1113,15 @@ inline bool isMixActive(uint8_t mix) #endif #if defined(CPUARM) -#define MASK_FSW_TYPE uint32_t // current max = 32 function switches +#define MASK_CFN_TYPE uint32_t // current max = 32 function switches #define MASK_FUNC_TYPE uint32_t // current max = 32 functions #else -#define MASK_FSW_TYPE uint16_t // current max = 16 function switches +#define MASK_CFN_TYPE uint16_t // current max = 16 function switches #define MASK_FUNC_TYPE uint16_t // current max = 16 functions #endif -extern MASK_FSW_TYPE activeFunctionSwitches; +extern MASK_CFN_TYPE activeSwitches; +extern MASK_CFN_TYPE activeFnSwitches; extern MASK_FUNC_TYPE activeFunctions; inline bool isFunctionActive(uint8_t func) { @@ -1126,9 +1129,9 @@ inline bool isFunctionActive(uint8_t func) } #if defined(CPUARM) -typedef uint32_t rotenc_t; +typedef int32_t rotenc_t; #else -typedef uint8_t rotenc_t; +typedef int8_t rotenc_t; #endif #if defined(ROTARY_ENCODERS) diff --git a/src/stock/voice.cpp b/src/stock/voice.cpp index 00f166a75..a08af10db 100644 --- a/src/stock/voice.cpp +++ b/src/stock/voice.cpp @@ -112,13 +112,12 @@ void t_voice::voice_process(void) PORTA_LCD_DAT = VoiceLatch; // Latch data set PORTB |= (1 << OUT_B_LIGHT); // Drive high,pullup enabled DDRB &= ~(1 << OUT_B_LIGHT); // Change to input -#if !defined(SIMU) // delay to allow input to settle + asm(" rjmp 1f"); + asm("1:"); asm(" nop"); - asm(" nop"); - asm(" nop"); - asm(" nop"); // 4th nop added for Thomas9x (compared to er9x) -#endif + asm(" rjmp 1f"); + asm("1:"); busy = PINB & 0x80; DDRB |= (1 << OUT_B_LIGHT); // Change to output // The next bit guarantees the backlight output gets clocked out diff --git a/src/stock/voice.h b/src/stock/voice.h index 7f79b4488..765a0f4b4 100644 --- a/src/stock/voice.h +++ b/src/stock/voice.h @@ -132,5 +132,5 @@ inline bool isPlaying() #define PUSH_CUSTOM_PROMPT(p, ...) pushCustomPrompt((p)) #define PLAY_NUMBER(n, u, a) playNumber((n), (u), (a)) #define PLAY_DURATION(d) playDuration((d)) -#define IS_PLAYING(id) isPlaying() +#define IS_PLAYING(id) (0) /* isPlaying() */ #define PLAY_VALUE(v, id) playValue((v)) diff --git a/src/translations/cz.h b/src/translations/cz.h index 6a8a6f11c..a1e67f94b 100644 --- a/src/translations/cz.h +++ b/src/translations/cz.h @@ -133,35 +133,35 @@ #else #define TR_SDCLOGS "[Logov\200n\204 SD]" #endif - #define TR_FSW_VOLUME "Hlasitost\0 " - #define TR_FSW_BG_MUSIC "BgHudba\0 ""BgHudba Pauza" + #define TR_CFN_VOLUME "Hlasitost\0 " + #define TR_CFN_BG_MUSIC "BgHudba\0 ""BgHudba Pauza" #elif defined(PCBGRUVIN9X) #if defined(SDCARD) #define TR_SDCLOGS "Logování SD\0 " #else #define TR_SDCLOGS "[Logování SD]" #endif - #define TR_FSW_VOLUME - #define TR_FSW_BG_MUSIC + #define TR_CFN_VOLUME + #define TR_CFN_BG_MUSIC #else #define TR_SDCLOGS - #define TR_FSW_VOLUME - #define TR_FSW_BG_MUSIC + #define TR_CFN_VOLUME + #define TR_CFN_BG_MUSIC #endif #ifdef GVARS - #define TR_FSW_ADJUST_GVAR "Nastav \0 " + #define TR_CFN_ADJUST_GVAR "Nastav \0 " #else - #define TR_FSW_ADJUST_GVAR + #define TR_CFN_ADJUST_GVAR #endif #ifdef DEBUG - #define TR_FSW_TEST "Test\0 " + #define TR_CFN_TEST "Test\0 " #else - #define TR_FSW_TEST + #define TR_CFN_TEST #endif -#define TR_VFSWFUNC "Bezpe\201\0 ""Tren\202r \0 ""Instant Trim\0" TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_FSW_VOLUME "Podsv\203tlen\204\0 " TR_FSW_BG_MUSIC TR_FSW_ADJUST_GVAR TR_FSW_TEST +#define TR_VFSWFUNC "Bezpe\201\0 ""Tren\202r \0 ""Instant Trim\0" TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_CFN_VOLUME "Podsv\203tlen\204\0 " TR_CFN_BG_MUSIC TR_CFN_ADJUST_GVAR TR_CFN_TEST #define LEN_VFSWRESET "\006" #define TR_VFSWRESET "Timer1""Timer2""V\207e ""Telem." diff --git a/src/translations/de.h b/src/translations/de.h index 1c528bee4..2d27a93fe 100644 --- a/src/translations/de.h +++ b/src/translations/de.h @@ -125,33 +125,33 @@ #else #define TR_SDCLOGS "[SD Aufz.]\0 " #endif -#define TR_FSW_VOLUME "Lautst\201rke\0 " -#define TR_FSW_BG_MUSIC "Musik Start\0 ""Musik Pause\0 " +#define TR_CFN_VOLUME "Lautst\201rke\0 " +#define TR_CFN_BG_MUSIC "Musik Start\0 ""Musik Pause\0 " #elif defined(PCBGRUVIN9X) #if defined(SDCARD) #define TR_SDCLOGS "SD Aufz.\0 " #else #define TR_SDCLOGS "[SD Aufz.]\0 " #endif -#define TR_FSW_VOLUME -#define TR_FSW_BG_MUSIC +#define TR_CFN_VOLUME +#define TR_CFN_BG_MUSIC #else #define TR_SDCLOGS -#define TR_FSW_VOLUME -#define TR_FSW_BG_MUSIC +#define TR_CFN_VOLUME +#define TR_CFN_BG_MUSIC #endif #ifdef GVARS -#define TR_FSW_ADJUST_GVAR "\200ndere \0 " +#define TR_CFN_ADJUST_GVAR "\200ndere \0 " #else -#define TR_FSW_ADJUST_GVAR +#define TR_CFN_ADJUST_GVAR #endif #ifdef DEBUG -#define TR_FSW_TEST "Test\0 " +#define TR_CFN_TEST "Test\0 " #else -#define TR_FSW_TEST +#define TR_CFN_TEST #endif -#define TR_VFSWFUNC "Sicher\0 ""Lehrsch.\0 ""Instant. Trim" TR_SOUND TR_HAPTIC "R\205cksetz.\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_FSW_VOLUME "Beleuchtung\0 " TR_FSW_BG_MUSIC TR_FSW_ADJUST_GVAR TR_FSW_TEST +#define TR_VFSWFUNC "Sicher\0 ""Lehrsch.\0 ""Instant. Trim" TR_SOUND TR_HAPTIC "R\205cksetz.\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_CFN_VOLUME "Beleuchtung\0 " TR_CFN_BG_MUSIC TR_CFN_ADJUST_GVAR TR_CFN_TEST #define LEN_VFSWRESET "\006" #define TR_VFSWRESET "S.Uhr1""S.Uhr2""Alle ""Telem." diff --git a/src/translations/en.h b/src/translations/en.h index 0c1d800d7..c4bc851d0 100644 --- a/src/translations/en.h +++ b/src/translations/en.h @@ -120,50 +120,47 @@ #endif #if defined(VOICE) - #define TR_PLAY_TRACK "Play Track\0" - #define TR_PLAY_BOTH "Play Both\0 " - #define TR_PLAY_VALUE "Play Value\0" + #if defined(PCBSKY9X) + #define TR_PLAY_TRACK "Play\0 " + #else + #define TR_PLAY_TRACK "Play Track\0" + #endif + #define TR_PLAY_BOTH "Play Bth\0 " + #define TR_PLAY_VALUE "Play Val\0 " #else #define TR_PLAY_TRACK "[PlayTrack]" - #define TR_PLAY_BOTH "[Play Both]" // TODO could be avoided + #define TR_PLAY_BOTH "[Play Both]" #define TR_PLAY_VALUE "[PlayValue]" #endif -#if defined(CPUARM) - #if defined(SDCARD) - #define TR_SDCLOGS "SD Logs\0 " - #else - #define TR_SDCLOGS "[SD Logs]\0 " - #endif - #define TR_FSW_VOLUME "Volume\0 " - #define TR_FSW_BG_MUSIC "BgMusic\0 ""BgMusic ||\0" -#elif defined(PCBGRUVIN9X) - #if defined(SDCARD) - #define TR_SDCLOGS "SD Logs\0 " - #else - #define TR_SDCLOGS "[SD Logs]\0 " - #endif - #define TR_FSW_VOLUME - #define TR_FSW_BG_MUSIC +#define TR_CFN_VOLUME "Volume\0 " +#define TR_CFN_BG_MUSIC "BgMusic\0 ""BgMusic ||\0" + +#if defined(SDCARD) + #define TR_SDCLOGS "SD Logs\0 " #else - #define TR_SDCLOGS - #define TR_FSW_VOLUME - #define TR_FSW_BG_MUSIC + #define TR_SDCLOGS "[SD Logs]\0 " #endif #ifdef GVARS - #define TR_FSW_ADJUST_GVAR "Adjust \0 " + #define TR_CFN_ADJUST_GVAR "Adjust \0 " #else - #define TR_FSW_ADJUST_GVAR + #define TR_CFN_ADJUST_GVAR #endif #ifdef DEBUG - #define TR_FSW_TEST "Test\0" + #define TR_CFN_TEST "Test\0" #else - #define TR_FSW_TEST + #define TR_CFN_TEST #endif -#define TR_VFSWFUNC "Safety\0 ""Trainer \0 ""Inst. Trim\0" TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_SDCLOGS TR_FSW_VOLUME "Backlight\0 " TR_FSW_BG_MUSIC TR_FSW_ADJUST_GVAR TR_FSW_TEST +#if defined(CPUARM) + #define TR_VFSWFUNC "Safety\0 ""Trainer \0 ""Inst. Trim\0" TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_CFN_VOLUME "Backlight\0 " TR_CFN_BG_MUSIC TR_CFN_ADJUST_GVAR TR_CFN_TEST +#elif defined(PCBGRUVIN9X) + #define TR_VFSWFUNC "Safety\0 ""Trainer \0 ""Inst. Trim\0" TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_SDCLOGS "Backlight\0 " TR_CFN_ADJUST_GVAR TR_CFN_TEST +#else + #define TR_VFSWFUNC "Safety\0 ""Trainer \0 ""Inst. Trim\0" TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE "Backlight\0 " TR_CFN_ADJUST_GVAR TR_CFN_TEST +#endif #define LEN_VFSWRESET TR("\006","\012") #define TR_VFSWRESET "Timer 1 ""Timer 2 ""All ""Telemetry" diff --git a/src/translations/es.h b/src/translations/es.h index eee4d0abb..05d2cfb4d 100644 --- a/src/translations/es.h +++ b/src/translations/es.h @@ -134,35 +134,35 @@ #else #define TR_SDCLOGS "[SD Logs]\0 " #endif - #define TR_FSW_VOLUME "Volumen\0 " - #define TR_FSW_BG_MUSIC "BgMusica\0 ""BgMusica||\0" + #define TR_CFN_VOLUME "Volumen\0 " + #define TR_CFN_BG_MUSIC "BgMusica\0 ""BgMusica||\0" #elif defined(PCBGRUVIN9X) #if defined(SDCARD) #define TR_SDCLOGS "SD Logs\0 " #else #define TR_SDCLOGS "[SD Logs]\0 " #endif - #define TR_FSW_VOLUME - #define TR_FSW_BG_MUSIC + #define TR_CFN_VOLUME + #define TR_CFN_BG_MUSIC #else #define TR_SDCLOGS - #define TR_FSW_VOLUME - #define TR_FSW_BG_MUSIC + #define TR_CFN_VOLUME + #define TR_CFN_BG_MUSIC #endif #ifdef GVARS - #define TR_FSW_ADJUST_GVAR "Ajuste \0 " + #define TR_CFN_ADJUST_GVAR "Ajuste \0 " #else - #define TR_FSW_ADJUST_GVAR + #define TR_CFN_ADJUST_GVAR #endif #ifdef DEBUG - #define TR_FSW_TEST "Test\0" + #define TR_CFN_TEST "Test\0" #else - #define TR_FSW_TEST + #define TR_CFN_TEST #endif -#define TR_VFSWFUNC "Seguro\0 ""Aprendiz\0 ""Inst. Trim\0" TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_FSW_VOLUME "Panel luz\0 " TR_FSW_BG_MUSIC TR_FSW_ADJUST_GVAR TR_FSW_TEST +#define TR_VFSWFUNC "Seguro\0 ""Aprendiz\0 ""Inst. Trim\0" TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_CFN_VOLUME "Panel luz\0 " TR_CFN_BG_MUSIC TR_CFN_ADJUST_GVAR TR_CFN_TEST #define LEN_VFSWRESET TR("\006","\012") #define TR_VFSWRESET "Reloj 1 ""Reloj 2 ""Todo ""Telemetr." diff --git a/src/translations/fr.h b/src/translations/fr.h index 8460e51ea..365b4a88e 100644 --- a/src/translations/fr.h +++ b/src/translations/fr.h @@ -125,33 +125,33 @@ #else #define TR_SDCLOGS "[Logs SD]\0 " #endif -#define TR_FSW_VOLUME "Volume\0 " -#define TR_FSW_BG_MUSIC "Musique\0 ""Pause Musique" +#define TR_CFN_VOLUME "Volume\0 " +#define TR_CFN_BG_MUSIC "Musique\0 ""Pause Musique" #elif defined(PCBGRUVIN9X) #if defined(SDCARD) #define TR_SDCLOGS "Logs carte SD" #else #define TR_SDCLOGS "[Logs SD]\0 " #endif -#define TR_FSW_VOLUME -#define TR_FSW_BG_MUSIC +#define TR_CFN_VOLUME +#define TR_CFN_BG_MUSIC #else #define TR_SDCLOGS -#define TR_FSW_VOLUME -#define TR_FSW_BG_MUSIC +#define TR_CFN_VOLUME +#define TR_CFN_BG_MUSIC #endif #ifdef GVARS -#define TR_FSW_ADJUST_GVAR "Ajuster\0 " +#define TR_CFN_ADJUST_GVAR "Ajuster\0 " #else -#define TR_FSW_ADJUST_GVAR +#define TR_CFN_ADJUST_GVAR #endif #ifdef DEBUG -#define TR_FSW_TEST "Test\0 " +#define TR_CFN_TEST "Test\0 " #else -#define TR_FSW_TEST +#define TR_CFN_TEST #endif -#define TR_VFSWFUNC "S\200cur.\0 ""Ecolage \0 ""Trim instant." TR_SOUND TR_HAPTIC "Remise \202 0\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_FSW_VOLUME "R\200tro\200cl.\0 " TR_FSW_BG_MUSIC TR_FSW_ADJUST_GVAR TR_FSW_TEST +#define TR_VFSWFUNC "S\200cur.\0 ""Ecolage \0 ""Trim instant." TR_SOUND TR_HAPTIC "Remise \202 0\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_CFN_VOLUME "R\200tro\200cl.\0 " TR_CFN_BG_MUSIC TR_CFN_ADJUST_GVAR TR_CFN_TEST #define LEN_VFSWRESET "\006" #define TR_VFSWRESET "Timer1""Timer2""Timers""T\200l\200m." diff --git a/src/translations/it.h b/src/translations/it.h index c1edf22cc..f6482475c 100644 --- a/src/translations/it.h +++ b/src/translations/it.h @@ -124,32 +124,32 @@ #else #define TR_SDCLOGS "[SDCARD Logs]" #endif -#define TR_FSW_VOLUME "Volume\0 " -#define TR_FSW_BG_MUSIC "BgMusic\0 ""BgMusic Pause" +#define TR_CFN_VOLUME "Volume\0 " +#define TR_CFN_BG_MUSIC "BgMusic\0 ""BgMusic Pause" #elif defined(PCBGRUVIN9X) #if defined(SDCARD) #define TR_SDCLOGS "SDCARD Logs" #else #define TR_SDCLOGS "[SDCARD Logs]" #endif -#define TR_FSW_VOLUME -#define TR_FSW_BG_MUSIC +#define TR_CFN_VOLUME +#define TR_CFN_BG_MUSIC #else #define TR_SDCLOGS -#define TR_FSW_VOLUME -#define TR_FSW_BG_MUSIC +#define TR_CFN_VOLUME +#define TR_CFN_BG_MUSIC #endif #ifdef GVARS -#define TR_FSW_ADJUST_GVAR "Adjust \0 " +#define TR_CFN_ADJUST_GVAR "Adjust \0 " #else -#define TR_FSW_ADJUST_GVAR +#define TR_CFN_ADJUST_GVAR #endif #ifdef DEBUG -#define TR_FSW_TEST "Test\0 " +#define TR_CFN_TEST "Test\0 " #else -#define TR_FSW_TEST +#define TR_CFN_TEST #endif -#define TR_VFSWFUNC "Blocco\0 ""Trainer \0 ""Instant Trim " TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_FSW_VOLUME "Retroillum.\0 " TR_FSW_BG_MUSIC TR_FSW_ADJUST_GVAR TR_FSW_TEST +#define TR_VFSWFUNC "Blocco\0 ""Trainer \0 ""Instant Trim " TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_CFN_VOLUME "Retroillum.\0 " TR_CFN_BG_MUSIC TR_CFN_ADJUST_GVAR TR_CFN_TEST #define LEN_VFSWRESET "\006" #define TR_VFSWRESET "Timer1""Timer2""Tutto ""Telem." diff --git a/src/translations/pt.h b/src/translations/pt.h index a93f4a67e..85fb9ef77 100644 --- a/src/translations/pt.h +++ b/src/translations/pt.h @@ -125,33 +125,33 @@ #else #define TR_SDCLOGS "[SDCARD Logs]" #endif -#define TR_FSW_VOLUME "Volume\0 " -#define TR_FSW_BG_MUSIC "BgMusic\0 ""BgMusic ||\0 " +#define TR_CFN_VOLUME "Volume\0 " +#define TR_CFN_BG_MUSIC "BgMusic\0 ""BgMusic ||\0 " #elif defined(PCBGRUVIN9X) #if defined(SDCARD) #define TR_SDCLOGS "SDCARD Logs\0 " #else #define TR_SDCLOGS "[SDCARD Logs]" #endif -#define TR_FSW_VOLUME -#define TR_FSW_BG_MUSIC +#define TR_CFN_VOLUME +#define TR_CFN_BG_MUSIC #else #define TR_SDCLOGS -#define TR_FSW_VOLUME -#define TR_FSW_BG_MUSIC +#define TR_CFN_VOLUME +#define TR_CFN_BG_MUSIC #endif #ifdef GVARS -#define TR_FSW_ADJUST_GVAR "Ajuste\0 " +#define TR_CFN_ADJUST_GVAR "Ajuste\0 " #else -#define TR_FSW_ADJUST_GVAR +#define TR_CFN_ADJUST_GVAR #endif #ifdef DEBUG -#define TR_FSW_TEST "Teste\0 " +#define TR_CFN_TEST "Teste\0 " #else -#define TR_FSW_TEST +#define TR_CFN_TEST #endif -#define TR_VFSWFUNC "Seguro\0 ""Aprendiz\0 ""Ajuste Rapido" TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_FSW_VOLUME "Backlight\0 " TR_FSW_BG_MUSIC TR_FSW_ADJUST_GVAR TR_FSW_TEST +#define TR_VFSWFUNC "Seguro\0 ""Aprendiz\0 ""Ajuste Rapido" TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_CFN_VOLUME "Backlight\0 " TR_CFN_BG_MUSIC TR_CFN_ADJUST_GVAR TR_CFN_TEST #define LEN_VFSWRESET "\006" #define TR_VFSWRESET "Tempo1""Tempo2""Todo ""Telem." diff --git a/src/translations/se.h b/src/translations/se.h index 612560d74..0a586a855 100644 --- a/src/translations/se.h +++ b/src/translations/se.h @@ -133,35 +133,35 @@ #else #define TR_SDCLOGS "[SDCARD Logg]" #endif - #define TR_FSW_VOLUME "Volym\0 " - #define TR_FSW_BG_MUSIC "BgMusik\0 ""BgMusik ||\0" + #define TR_CFN_VOLUME "Volym\0 " + #define TR_CFN_BG_MUSIC "BgMusik\0 ""BgMusik ||\0" #elif defined(PCBGRUVIN9X) #if defined(SDCARD) #define TR_SDCLOGS "SDCARD Loggar" #else #define TR_SDCLOGS "[SDCARD Logg]" #endif - #define TR_FSW_VOLUME - #define TR_FSW_BG_MUSIC + #define TR_CFN_VOLUME + #define TR_CFN_BG_MUSIC #else #define TR_SDCLOGS - #define TR_FSW_VOLUME - #define TR_FSW_BG_MUSIC + #define TR_CFN_VOLUME + #define TR_CFN_BG_MUSIC #endif #ifdef GVARS - #define TR_FSW_ADJUST_GVAR "Justera\0 " + #define TR_CFN_ADJUST_GVAR "Justera\0 " #else - #define TR_FSW_ADJUST_GVAR + #define TR_CFN_ADJUST_GVAR #endif #ifdef DEBUG - #define TR_FSW_TEST "Test\0" + #define TR_CFN_TEST "Test\0" #else - #define TR_FSW_TEST + #define TR_CFN_TEST #endif -#define TR_VFSWFUNC "S\201kra\0 ""Trainer \0 ""S\201tt Trim\0 " TR_SOUND TR_HAPTIC "Nollst\201ll\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_FSW_VOLUME "Belysning\0 " TR_FSW_BG_MUSIC TR_FSW_ADJUST_GVAR TR_FSW_TEST +#define TR_VFSWFUNC "S\201kra\0 ""Trainer \0 ""S\201tt Trim\0 " TR_SOUND TR_HAPTIC "Nollst\201ll\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_CFN_VOLUME "Belysning\0 " TR_CFN_BG_MUSIC TR_CFN_ADJUST_GVAR TR_CFN_TEST #define LEN_VFSWRESET TR("\006","\012") #define TR_VFSWRESET "Timer1 ""Timer2 ""Allt ""Telemetri"