From 8f103ecee32a38c321d9cbe18e04a81743e822c1 Mon Sep 17 00:00:00 2001 From: bsongis Date: Tue, 14 Aug 2012 17:09:03 +0000 Subject: [PATCH] Different numbers for Voice Prompts Diff functions in Custom Switches --- src/gruvin9x/somo14d.h | 5 +- src/menus.cpp | 3 +- src/model_menus.cpp | 130 +++++++++++++++++++----------------- src/open9x.cpp | 96 ++++++++++++++------------ src/open9x.h | 37 +++++----- src/stock/voice.cpp | 21 ++++-- src/stock/voice.h | 14 ++-- src/translations/cz.h | 4 +- src/translations/de.h | 4 +- src/translations/en.h | 4 +- src/translations/fr.h | 4 +- src/translations/it.h | 4 +- src/translations/se.h | 4 +- src/translations/tts_fr.cpp | 45 +++++++------ 14 files changed, 207 insertions(+), 168 deletions(-) diff --git a/src/gruvin9x/somo14d.h b/src/gruvin9x/somo14d.h index 7d23835b0..417f0a75f 100644 --- a/src/gruvin9x/somo14d.h +++ b/src/gruvin9x/somo14d.h @@ -31,9 +31,10 @@ * */ -#define PROMPT_SYSTEM_BASE 170 -#define PROMPT_CUSTOM_BASE 200 +#define PROMPT_SYSTEM_BASE 230 +#define PROMPT_CUSTOM_BASE 256 +#define pushCustomPrompt(p) pushPrompt(PROMPT_CUSTOM_BASE+v) extern void pushPrompt(uint16_t prompt); extern bool isPlaying(); diff --git a/src/menus.cpp b/src/menus.cpp index cc6a1764b..324601ad4 100644 --- a/src/menus.cpp +++ b/src/menus.cpp @@ -403,7 +403,8 @@ bool check(uint8_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTa break; } if (m_posVert==0 || !menuTab) { - popMenu(); //beeps itself + popMenu(); // beeps itself + return false; } else { AUDIO_MENUS(); diff --git a/src/model_menus.cpp b/src/model_menus.cpp index 6d0ec4e92..1058cbe08 100644 --- a/src/model_menus.cpp +++ b/src/model_menus.cpp @@ -2278,11 +2278,22 @@ void menuProcCustomSwitchOne(uint8_t event) putsSwitches(CSW_2ND_COLUMN, y, cs->v2, attr); v2_min = SWITCH_OFF; v2_max = SWITCH_ON; } - else if (cstate == CS_VOFS) { + else if (cstate == CS_VCOMP) { + putsChnRaw(CSW_2ND_COLUMN, y, cs->v2, attr); + } + else { #if defined(FRSKY) if (cs->v1 > NUM_XCHNCSW-NUM_TELEMETRY) { - putsTelemetryChannel(CSW_2ND_COLUMN, y, cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY+1), convertTelemValue(cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY), 128+cs->v2), attr|LEFT); - v2_min = -128; v2_max = maxTelemValue(cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY)) - 128; + putsTelemetryChannel(CSW_2ND_COLUMN, y, cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY+1), cstate==CS_VOFS ? convertTelemValue(cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY), 128+cs->v2) : cs->v2, attr|LEFT); + v2_max = maxTelemValue(cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY)); + if (cstate == CS_VOFS) { + v2_min = -128; + v2_max -= 128; + } + else { + v2_max = min((uint8_t)127, (uint8_t)v2_max); + v2_min = -v2_max; + } if (cs->v2 > v2_max) { cs->v2 = v2_max; eeDirty(EE_MODEL); @@ -2295,9 +2306,7 @@ void menuProcCustomSwitchOne(uint8_t event) lcd_outdezAtt(CSW_2ND_COLUMN, y, cs->v2, attr|LEFT); } } - else { - putsChnRaw(CSW_2ND_COLUMN, y, cs->v2, attr); - } + if (attr) { CHECK_INCDEC_MODELVAR(event, cs->v2, v2_min, v2_max); } @@ -2325,7 +2334,7 @@ void menuProcCustomSwitchOne(uint8_t event) void menuProcCustomSwitches(uint8_t event) { - MENU(STR_MENUCUSTOMSWITCHES, menuTabModel, e_CustomSwitches, NUM_CSW+1, {0, 2/*repeated...*/}); + SIMPLE_MENU(STR_MENUCUSTOMSWITCHES, menuTabModel, e_CustomSwitches, NUM_CSW+1); uint8_t y = 0; uint8_t k = 0; @@ -2359,39 +2368,31 @@ void menuProcCustomSwitches(uint8_t event) if (cs->func > 0) { // CSW func - lcd_putsiAtt(4*FW - 2, y, STR_VCSWFUNC, cs->func, 0); + lcd_putsiAtt(4*FW - 4, y, STR_VCSWFUNC, cs->func, 0); // CSW params uint8_t cstate = CS_STATE(cs->func); - if (cstate == CS_VOFS) - { - putsChnRaw(12*FW-6, y, cs->v1, 0); + if (cstate == CS_VBOOL) { + putsSwitches(12*FW-4, y, cs->v1, 0); + putsSwitches(17*FW, y, cs->v2, 0); + } + else if (cstate == CS_VCOMP) { + putsChnRaw(12*FW-4, y, cs->v1, 0); + putsChnRaw(17*FW, y, cs->v2, 0); + } + else { + putsChnRaw(12*FW-4, y, cs->v1, 0); #if defined(FRSKY) - if (cs->v1 > NUM_XCHNCSW-NUM_TELEMETRY) { - putsTelemetryChannel(19*FW, y, cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY+1), convertTelemValue(cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY), 128+cs->v2), 0); - int8_t v2_max = maxTelemValue(cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY)) - 128; - if (cs->v2 > v2_max) { - cs->v2 = v2_max; - eeDirty(EE_MODEL); - } - } - else + if (cs->v1 > NUM_XCHNCSW-NUM_TELEMETRY) { + putsTelemetryChannel(19*FW, y, cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY+1), cstate==CS_VOFS ? convertTelemValue(cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY), 128+cs->v2) : cs->v2, 0); + } + else #endif - { - lcd_outdezAtt(19*FW, y, cs->v2, 0); - } - } - else if (cstate == CS_VBOOL) - { - putsSwitches(12*FW-6, y, cs->v1, 0); - putsSwitches(17*FW, y, cs->v2, 0); - } - else // cstate == CS_COMP - { - putsChnRaw(12*FW-6, y, cs->v1, 0); - putsChnRaw(17*FW, y, cs->v2, 0); + { + lcd_outdezAtt(19*FW, y, cs->v2, 0); + } } } } @@ -2416,49 +2417,54 @@ void menuProcCustomSwitches(uint8_t event) putsSwitches(0, y, sw, getSwitch(sw, 0) ? BOLD : 0); // CSW func - lcd_putsiAtt(4*FW - 2, y, STR_VCSWFUNC, cs->func, m_posHorz==0 ? attr : 0); + lcd_putsiAtt(4*FW - 4, y, STR_VCSWFUNC, cs->func, m_posHorz==0 ? attr : 0); // CSW params uint8_t cstate = CS_STATE(cs->func); int8_t v1_min=0, v1_max=NUM_XCHNCSW, v2_min=0, v2_max=NUM_XCHNCSW; - if (cstate == CS_VOFS) - { - putsChnRaw(12*FW-6, y, cs->v1, (m_posHorz==1 ? attr : 0)); + if (cstate == CS_VBOOL) { + putsSwitches(12*FW-4, y, cs->v1, m_posHorz==1 ? attr : 0); + putsSwitches(17*FW, y, cs->v2, m_posHorz==2 ? attr : 0); + v1_min = SWITCH_OFF; v1_max = SWITCH_ON; + v2_min = SWITCH_OFF; v2_max = SWITCH_ON; + } + else if (cstate == CS_VCOMP) { + putsChnRaw(12*FW-4, y, cs->v1, m_posHorz==1 ? attr : 0); + putsChnRaw(17*FW, y, cs->v2, m_posHorz==2 ? attr : 0); + } + else { + putsChnRaw(12*FW-4, y, cs->v1, (m_posHorz==1 ? attr : 0)); #if defined(FRSKY) - if (cs->v1 > NUM_XCHNCSW-NUM_TELEMETRY) { - putsTelemetryChannel(19*FW, y, cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY+1), convertTelemValue(cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY), 128+cs->v2), m_posHorz==2 ? attr : 0); - v2_min = -128; v2_max = maxTelemValue(cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY)) - 128; - if (cs->v2 > v2_max) { - cs->v2 = v2_max; - eeDirty(EE_MODEL); - } + if (cs->v1 > NUM_XCHNCSW-NUM_TELEMETRY) { + putsTelemetryChannel(19*FW, y, cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY+1), cstate==CS_VOFS ? convertTelemValue(cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY), 128+cs->v2) : cs->v2, m_posHorz==2 ? attr : 0); + v2_max = maxTelemValue(cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY)); + if (cstate == CS_VOFS) { + v2_min = -128; + v2_max -= 128; } - else + else { + v2_max = min((uint8_t)127, (uint8_t)v2_max); + v2_min = -v2_max; + } + if (cs->v2 > v2_max) { + cs->v2 = v2_max; + eeDirty(EE_MODEL); + } + } + else #endif - { - lcd_outdezAtt(19*FW, y, cs->v2, m_posHorz==2 ? attr : 0); - v2_min = -125; v2_max = 125; - } - } - else if (cstate == CS_VBOOL) - { - putsSwitches(12*FW-6, y, cs->v1, m_posHorz==1 ? attr : 0); - putsSwitches(17*FW, y, cs->v2, m_posHorz==2 ? attr : 0); - v1_min = SWITCH_OFF; v1_max = SWITCH_ON; - v2_min = SWITCH_OFF; v2_max = SWITCH_ON; - } - else // cstate == CS_COMP - { - putsChnRaw(12*FW-6, y, cs->v1, m_posHorz==1 ? attr : 0); - putsChnRaw(17*FW, y, cs->v2, m_posHorz==2 ? attr : 0); + { + lcd_outdezAtt(19*FW, y, cs->v2, m_posHorz==2 ? attr : 0); + v2_min = -125; v2_max = 125; + } } if ((s_editMode>0 || p1valdiff) && attr) { switch (m_posHorz) { case 0: - CHECK_INCDEC_MODELVAR(event, cs->func, 0,CS_MAXF); + CHECK_INCDEC_MODELVAR(event, cs->func, 0, CS_MAXF); if (cstate != CS_STATE(cs->func)) { cs->v1 = 0; cs->v2 = 0; diff --git a/src/open9x.cpp b/src/open9x.cpp index c6a992b9a..077669e78 100644 --- a/src/open9x.cpp +++ b/src/open9x.cpp @@ -590,6 +590,8 @@ uint32_t delays[NUM_CSW]; uint32_t durations[NUM_CSW]; #endif +int16_t csLastValue[NUM_CSW]; + bool __getSwitch(int8_t swtch) { bool result; @@ -646,43 +648,7 @@ bool __getSwitch(int8_t swtch) else { int16_t x = getValue(cs->v1-1); int16_t y; - if (s == CS_VOFS) { -#if defined(FRSKY) - // Telemetry - if (cs->v1 > CSW_CHOUT_BASE+NUM_CHNOUT) { - if (frskyStreaming <= 0 && cs->v1 > CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS) - return swtch > 0 ? false : true; - - y = convertTelemValue(cs->v1-(CSW_CHOUT_BASE+NUM_CHNOUT), 128+cs->v2); - uint8_t idx = cs->v1-CSW_CHOUT_BASE-NUM_CHNOUT-TELEM_ALT; - if (idx < THLD_MAX) { - // Fill the threshold array - barsThresholds[idx] = 128 + cs->v2; - } - } - else -#endif - { - y = calc100toRESX(cs->v2); - } - - switch (cs->func) { - case CS_VPOS: - result = (x>y); - break; - case CS_VNEG: - result = (xy); - break; - // case CS_ANEG: - default: - result = (abs(x)v2-1); switch (cs->func) { @@ -707,6 +673,56 @@ bool __getSwitch(int8_t swtch) break; } } + else { +#if defined(FRSKY) + // Telemetry + if (cs->v1 > CSW_CHOUT_BASE+NUM_CHNOUT) { + if (frskyStreaming <= 0 && cs->v1 > CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS) + return swtch > 0 ? false : true; + if (s == CS_VOFS) { + y = convertTelemValue(cs->v1-(CSW_CHOUT_BASE+NUM_CHNOUT), 128+cs->v2); + uint8_t idx = cs->v1-CSW_CHOUT_BASE-NUM_CHNOUT-TELEM_ALT; + if (idx < THLD_MAX) { + // Fill the threshold array + barsThresholds[idx] = 128 + cs->v2; + } + } + else { + y = cs->v2; + } + } + else +#endif + { + y = calc100toRESX(cs->v2); + } + + switch (cs->func) { + case CS_VPOS: + result = (x>y); + break; + case CS_VNEG: + result = (xy); + break; + case CS_ANEG: + result = (abs(x)func == CS_DIFFEGREATER) + result = (y >= 0 ? (diff >= y) : (diff <= y)); + else + result = (abs(diff) >= y); + if (result) + csLastValue[cs_idx] = x; + break; + } + } + } } #if defined(PCBARM) @@ -1886,11 +1902,7 @@ void evalFunctions() if (tmr10ms - s_last_play >= 100) { s_last_play = tmr10ms; if (sd->func == FUNC_PLAY_TRACK) -#if defined(TTS_CZ) && defined(PCBSTD) - putVoiceQueueUpper(PROMPT_CUSTOM_BASE+sd->param); -#else - pushPrompt(PROMPT_CUSTOM_BASE+sd->param); -#endif + pushCustomPrompt(sd->param); else playValue(sd->param); } diff --git a/src/open9x.h b/src/open9x.h index 9db10145a..5620b2b0c 100644 --- a/src/open9x.h +++ b/src/open9x.h @@ -365,26 +365,31 @@ extern Key keys[NUM_KEYS]; #define SWASH_TYPE_90 4 #define SWASH_TYPE_NUM 4 -#define CS_OFF 0 -#define CS_VPOS 1 //v>offset -#define CS_VNEG 2 //voffset -#define CS_ANEG 4 //|v|offset + CS_VNEG, // voffset + CS_ANEG, // |v|VoiceQueueCount < VOICE_Q_LENGTH-1) + { + pushPrompt( 0xFF ) ; + pushPrompt( value ) ; + } +} + +void pushPrompt(uint8_t value) { #ifdef SIMU printf("playFile(\"%04d.ad4\")\n", value); fflush(stdout); @@ -62,10 +74,11 @@ void pushPrompt( uint8_t value ) vptr->VoiceQueueInIndex &= (VOICE_Q_LENGTH - 1); vptr->VoiceQueueCount += 1; } + /* TODO why? if (v_ctr < 8) { v_first[v_ctr] = value; v_ctr += 1; - } + } */ } struct t_voice *voiceaddress() diff --git a/src/stock/voice.h b/src/stock/voice.h index 6972641b8..13aa317ab 100644 --- a/src/stock/voice.h +++ b/src/stock/voice.h @@ -48,13 +48,8 @@ #define V_WAIT_BUSY_OFF 4 #define V_WAIT_BUSY_DELAY 5 -#if defined(TTS_CZ) && defined(PCBSTD) -#define PROMPT_SYSTEM_BASE 0 -#define PROMPT_CUSTOM_BASE 40 -#else -#define PROMPT_SYSTEM_BASE 170 -#define PROMPT_CUSTOM_BASE 200 -#endif +#define PROMPT_SYSTEM_BASE 230 +#define PROMPT_CUSTOM_BASE 256 struct t_voice { @@ -72,9 +67,8 @@ struct t_voice void voice_process( void ) ; }; -#if defined(TTS_CZ) -extern void putVoiceQueueUpper( uint8_t value ); -#endif + +extern void pushCustomPrompt( uint8_t value ); extern void pushPrompt( uint8_t value ); extern struct t_voice *voiceaddress( void ) ; extern struct t_voice Voice ; diff --git a/src/translations/cz.h b/src/translations/cz.h index 65551f70c..47fef73f4 100644 --- a/src/translations/cz.h +++ b/src/translations/cz.h @@ -92,8 +92,8 @@ #define LEN_VMIXTRIMS "\004" #define TR_VMIXTRIMS "VYP\0""ZAP\0""Sm\203r""V\212\207k""Plyn""K\206id" -#define LEN_VCSWFUNC "\007" -#define TR_VCSWFUNC "----\0 ""v>ofs ""vofs""|v|v2 ""v1=v2 ""v1<=v2 " +#define LEN_VCSWFUNC "\010" +#define TR_VCSWFUNC "---\0 ""v>ofs\0 ""vofs\0""|v|v2\0 ""v1=v2\0 ""v1<=v2\0 ""d>=ofs\0 ""|d|>=ofs" #define LEN_VFSWFUNC "\015" #if defined(VARIO) diff --git a/src/translations/de.h b/src/translations/de.h index 46003466f..1852d478e 100644 --- a/src/translations/de.h +++ b/src/translations/de.h @@ -92,8 +92,8 @@ #define LEN_VMIXTRIMS "\003" #define TR_VMIXTRIMS "AUS""AN ""Rud""Ele""Thr""Ail" -#define LEN_VCSWFUNC "\007" -#define TR_VCSWFUNC "----\0 ""v>ofs ""vofs""|v|v2 ""v1=v2 ""v1<=v2 " +#define LEN_VCSWFUNC "\010" +#define TR_VCSWFUNC "---\0 ""v>ofs\0 ""vofs\0""|v|v2\0 ""v1=v2\0 ""v1<=v2\0 ""d>=ofs\0 ""|d|>=ofs" #define LEN_VFSWFUNC "\015" #if defined(VARIO) diff --git a/src/translations/en.h b/src/translations/en.h index 6726b0771..24ddf3b07 100644 --- a/src/translations/en.h +++ b/src/translations/en.h @@ -92,8 +92,8 @@ #define LEN_VMIXTRIMS "\003" #define TR_VMIXTRIMS "OFF""ON ""Rud""Ele""Thr""Ail" -#define LEN_VCSWFUNC "\007" -#define TR_VCSWFUNC "---\0 ""v>ofs\0 ""vofs""|v|v2 ""v1=v2 ""v1<=v2 " +#define LEN_VCSWFUNC "\010" +#define TR_VCSWFUNC "---\0 ""v>ofs\0 ""vofs\0""|v|v2\0 ""v1=v2\0 ""v1<=v2\0 ""d>=ofs\0 ""|d|>=ofs" #define LEN_VFSWFUNC "\015" #if defined(VARIO) diff --git a/src/translations/fr.h b/src/translations/fr.h index 0c36193df..493701230 100644 --- a/src/translations/fr.h +++ b/src/translations/fr.h @@ -87,8 +87,8 @@ #define LEN_VMIXTRIMS "\003" #define TR_VMIXTRIMS "OFF""ON ""Dir""Prf""Gaz""Ail" -#define LEN_VCSWFUNC "\007" -#define TR_VCSWFUNC "----\0 ""v>ofs ""vofs""|v|v2 ""v1=v2 ""v1<=v2 " +#define LEN_VCSWFUNC "\010" +#define TR_VCSWFUNC "---\0 ""v>ofs\0 ""vofs\0""|v|v2\0 ""v1=v2\0 ""v1<=v2\0 ""d>=ofs\0 ""|d|>=ofs" #define LEN_VFSWFUNC "\015" #if defined(VARIO) diff --git a/src/translations/it.h b/src/translations/it.h index 43526e172..6296f0388 100644 --- a/src/translations/it.h +++ b/src/translations/it.h @@ -92,8 +92,8 @@ #define LEN_VMIXTRIMS "\003" #define TR_VMIXTRIMS "OFF""ON ""Rud""Ele""Thr""Ail" -#define LEN_VCSWFUNC "\007" -#define TR_VCSWFUNC "----\0 ""v>ofs ""vofs""|v|v2 ""v1=v2 ""v1<=v2 " +#define LEN_VCSWFUNC "\010" +#define TR_VCSWFUNC "---\0 ""v>ofs\0 ""vofs\0""|v|v2\0 ""v1=v2\0 ""v1<=v2\0 ""d>=ofs\0 ""|d|>=ofs" #define LEN_VFSWFUNC "\015" #if defined(VARIO) diff --git a/src/translations/se.h b/src/translations/se.h index fc74bc79b..2ddc27aa8 100644 --- a/src/translations/se.h +++ b/src/translations/se.h @@ -87,8 +87,8 @@ #define LEN_VMIXTRIMS "\003" #define TR_VMIXTRIMS "AV ""P\203 ""Rod""Hjd""Gas""Ske" -#define LEN_VCSWFUNC "\007" -#define TR_VCSWFUNC " ---\0 "" X>Y "" XY "" (X)Y "" X=Y "" X<=Y " +#define LEN_VCSWFUNC "\010" +#define TR_VCSWFUNC " ---\0 "" X>Y "" XY "" (X)Y "" X=Y "" X<=Y ""D>=ofs\0 ""|D|>=ofs" #define LEN_VFSWFUNC "\015" #if defined(VARIO) diff --git a/src/translations/tts_fr.cpp b/src/translations/tts_fr.cpp index 309845222..cd5c9de19 100644 --- a/src/translations/tts_fr.cpp +++ b/src/translations/tts_fr.cpp @@ -37,23 +37,24 @@ enum FrenchPrompts { PROMPT_NUMBERS_BASE = 0, PROMPT_ZERO = PROMPT_NUMBERS_BASE+0, PROMPT_CENT = PROMPT_NUMBERS_BASE+100, - PROMPT_MILLE = PROMPT_NUMBERS_BASE+101, + PROMPT_DEUX_CENT = PROMPT_CENT+1, + PROMPT_MILLE = PROMPT_CENT+9, - PROMPT_UNE = 102, - PROMPT_ONZE = 103, - PROMPT_VINGT_ET_UNE = 104, - PROMPT_TRENTE_ET_UNE = 105, - PROMPT_QUARANTE_ET_UNE = 106, - PROMPT_CINQUANTE_ET_UNE = 107, - PROMPT_SOIXANTE_ET_UNE = 108, - PROMPT_SOIXANTE_ET_ONZE = 109, - PROMPT_QUATRE_VINGT_UNE = 110, + PROMPT_UNE = 110, + PROMPT_ONZE, + PROMPT_VINGT_ET_UNE, + PROMPT_TRENTE_ET_UNE, + PROMPT_QUARANTE_ET_UNE, + PROMPT_CINQUANTE_ET_UNE, + PROMPT_SOIXANTE_ET_UNE, + PROMPT_SOIXANTE_ET_ONZE, + PROMPT_QUATRE_VINGT_UNE, - PROMPT_VIRGULE = 116, - PROMPT_ET = 117, - PROMPT_MOINS = 118, + PROMPT_VIRGULE = 119, + PROMPT_ET = 120, + PROMPT_MOINS = 121, - PROMPT_UNITS_BASE = 120, + PROMPT_UNITS_BASE = 125, PROMPT_VOLTS = PROMPT_UNITS_BASE+UNIT_VOLTS, PROMPT_AMPS = PROMPT_UNITS_BASE+UNIT_AMPS, PROMPT_METERS_PER_SECOND = PROMPT_UNITS_BASE+UNIT_METERS_PER_SECOND, @@ -71,7 +72,7 @@ enum FrenchPrompts { PROMPT_MINUTE = PROMPT_UNITS_BASE+UNIT_MINUTES, PROMPT_SECONDE = PROMPT_UNITS_BASE+UNIT_SECONDS, - PROMPT_LABELS_BASE = 140, + PROMPT_LABELS_BASE = 145, PROMPT_TIMER1 = PROMPT_LABELS_BASE+TELEM_TM1, PROMPT_TIMER2 = PROMPT_LABELS_BASE+TELEM_TM2, PROMPT_A1 = PROMPT_LABELS_BASE+TELEM_A1, @@ -97,7 +98,6 @@ enum FrenchPrompts { PROMPT_ACCELz = PROMPT_LABELS_BASE+TELEM_ACCz, PROMPT_HDG = PROMPT_LABELS_BASE+TELEM_HDG, PROMPT_VARIO = PROMPT_LABELS_BASE+TELEM_VSPD, - }; #if defined(VOICE) @@ -119,9 +119,16 @@ void playNumber(int16_t number, uint8_t unit, uint8_t att) int8_t mode = MODE(att); if (mode > 0) { div_t qr = div(number, (mode == 1 ? 10 : 100)); - playNumber(qr.quot); - pushPrompt(PROMPT_VIRGULE); - playNumber(qr.rem, unit); + if (qr.rem > 0) { + playNumber(qr.quot); + pushPrompt(PROMPT_VIRGULE); + if (mode==2 && qr.rem < 10) + pushPrompt(PROMPT_ZERO); + playNumber(qr.rem, unit); + } + else { + playNumber(qr.quot, unit); + } return; }