diff --git a/src/frsky.cpp b/src/frsky.cpp index f67275054..926fb7a44 100644 --- a/src/frsky.cpp +++ b/src/frsky.cpp @@ -695,28 +695,35 @@ void resetTelemetry() #endif } +uint8_t maxTelemValue(uint8_t channel) +{ + switch (channel) { + case TELEM_FUEL: + return 100; + default: + return 255; + } +} + int16_t convertTelemValue(uint8_t channel, uint8_t value) { - // TODO enum - int16_t result; - switch (channel) { - case 2: - // Altitude + case TELEM_ALT: result = value * 4; break; - case 3: - // RPMs + case TELEM_RPM: result = value * 50; break; - case 7: - case 8: - // SPEED + case TELEM_T1: + case TELEM_T2: + result = (int16_t)value - 30; + break; + case TELEM_SPEED: + case TELEM_CELL: result = value * 2; break; - case 9: - // DIST + case TELEM_DIST: result = value * 8; break; default: @@ -734,23 +741,23 @@ void putsTelemetryValue(uint8_t x, uint8_t y, int16_t val, uint8_t unit, uint8_t } const pm_uint8_t bchunit_ar[] = { - UNIT_VOLTS, // A1 - UNIT_VOLTS, // A2 + UNIT_VOLTS, // A1 // TODO needed? + UNIT_VOLTS, // A2 // TODO needed? UNIT_METERS, // Alt UNIT_RAW, // Rpm UNIT_PERCENT, // Fuel UNIT_DEGREES, // T1 UNIT_DEGREES, // T2 UNIT_KMH, // Speed - UNIT_VOLTS, // Cell - UNIT_METERS // Dist + UNIT_METERS, // Dist + UNIT_VOLTS, // Cell // TODO needed? }; void putsTelemetryChannel(uint8_t x, uint8_t y, uint8_t channel, int16_t val, uint8_t att) { switch (channel) { - case 0: - case 1: + case TELEM_A1-1: + case TELEM_A2-1: // A1 and A2 { // TODO optimize this, avoid int32_t @@ -768,8 +775,12 @@ void putsTelemetryChannel(uint8_t x, uint8_t y, uint8_t channel, int16_t val, ui } } putsTelemetryValue(x, y, converted_value, g_model.frsky.channels[channel].type, att); + break; } - break; + + case TELEM_CELL-1: + putsTelemetryValue(x, y, val, UNIT_VOLTS, att|PREC2); + break; default: putsTelemetryValue(x, y, val, pgm_read_byte(bchunit_ar+channel), att); @@ -907,9 +918,9 @@ void menuProcFrsky(uint8_t event) if (g_model.frsky.bars[i].source <= 2) threshold = g_model.frsky.channels[g_model.frsky.bars[i].source-1].alarms_value[0]; else - threshold = convertTelemValue(g_model.frsky.bars[i].source-1, barsThresholds[g_model.frsky.bars[i].source-3]); - int16_t barMin = convertTelemValue(g_model.frsky.bars[i].source-1, (g_model.frsky.bars[i].barMin * 5)); - int16_t barMax = convertTelemValue(g_model.frsky.bars[i].source-1, ((51 - g_model.frsky.bars[i].barMax) * 5)); + threshold = convertTelemValue(g_model.frsky.bars[i].source, barsThresholds[g_model.frsky.bars[i].source-3]); + int16_t barMin = convertTelemValue(g_model.frsky.bars[i].source, (g_model.frsky.bars[i].barMin * 5)); + int16_t barMax = convertTelemValue(g_model.frsky.bars[i].source, ((51 - g_model.frsky.bars[i].barMax) * 5)); if (threshold) { thresholdX = (uint8_t)(int16_t)((int16_t)100 * (threshold - barMin) / (barMax - barMin)); if (thresholdX > 100) diff --git a/src/frsky.h b/src/frsky.h index 473a827c1..1978e842d 100644 --- a/src/frsky.h +++ b/src/frsky.h @@ -164,6 +164,7 @@ bool FRSKY_alarmRaised(uint8_t idx); void resetTelemetry(); uint8_t getTelemCustomField(uint8_t line, uint8_t col); +uint8_t maxTelemValue(uint8_t channel); int16_t convertTelemValue(uint8_t channel, uint8_t value); void putsTelemetryChannel(uint8_t x, uint8_t y, uint8_t channel, int16_t val, uint8_t att); diff --git a/src/lcd.cpp b/src/lcd.cpp index 891b175c6..e41d20fe5 100644 --- a/src/lcd.cpp +++ b/src/lcd.cpp @@ -475,7 +475,7 @@ void putsChnRaw(uint8_t x, uint8_t y, uint8_t idx, uint8_t att) putsStrIdx(x, y, STR_TMR, idx - (NUM_STICKS+NUM_POTS+2+3+NUM_PPM+NUM_CHNOUT), att); #ifdef FRSKY else - lcd_putsiAtt(x, y, STR_TELEMCHNS, idx-1-(NUM_STICKS+NUM_POTS+2+3+NUM_PPM+NUM_CHNOUT+MAX_TIMERS), att); + lcd_putsiAtt(x, y, STR_VTELEMCHNS, idx-(NUM_STICKS+NUM_POTS+2+3+NUM_PPM+NUM_CHNOUT+MAX_TIMERS), att); #endif } diff --git a/src/model_menus.cpp b/src/model_menus.cpp index b8fd178f9..aa59ddb18 100644 --- a/src/model_menus.cpp +++ b/src/model_menus.cpp @@ -1686,7 +1686,7 @@ void menuProcCustomSwitches(uint8_t event) #if defined(FRSKY) if (cs.v1 > NUM_XCHNCSW-NUM_TELEMETRY) { - putsTelemetryChannel(20*FW, y, cs.v1 - (NUM_XCHNCSW-NUM_TELEMETRY+1), convertTelemValue(cs.v1 - (NUM_XCHNCSW-NUM_TELEMETRY+1), 128+cs.v2), m_posHorz==2 ? attr : 0); + putsTelemetryChannel(20*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 = 127; } else @@ -2033,8 +2033,8 @@ void menuProcTelemetry(uint8_t event) y = (subN-s_pgOfs)*FH; lcd_putsiAtt(4, y, STR_VTELEMCHNS, g_model.frsky.bars[j].source, (sub==subN && m_posHorz==0) ? blink : 0); if (g_model.frsky.bars[j].source) { - putsTelemetryChannel(TELEM_COL2-3*FW, y, g_model.frsky.bars[j].source-1, convertTelemValue(g_model.frsky.bars[j].source-1, g_model.frsky.bars[j].barMin*5), (sub==subN && m_posHorz==1 ? blink : 0) | LEFT); - putsTelemetryChannel(14*FW-3, y, g_model.frsky.bars[j].source-1, convertTelemValue(g_model.frsky.bars[j].source-1, (51-g_model.frsky.bars[j].barMax)*5), (sub==subN && m_posHorz==2 ? blink : 0) | LEFT); + putsTelemetryChannel(TELEM_COL2-3*FW, y, g_model.frsky.bars[j].source-1, convertTelemValue(g_model.frsky.bars[j].source, g_model.frsky.bars[j].barMin*5), (sub==subN && m_posHorz==1 ? blink : 0) | LEFT); + putsTelemetryChannel(14*FW-3, y, g_model.frsky.bars[j].source-1, convertTelemValue(g_model.frsky.bars[j].source, (51-g_model.frsky.bars[j].barMax)*5), (sub==subN && m_posHorz==2 ? blink : 0) | LEFT); } else { if (sub == subN) m_posHorz = 0; @@ -2048,7 +2048,7 @@ void menuProcTelemetry(uint8_t event) CHECK_INCDEC_MODELVAR(event, g_model.frsky.bars[j].barMin, 0, 50-g_model.frsky.bars[j].barMax); break; case 2: - g_model.frsky.bars[j].barMax = 51 - checkIncDec(event, 51 - g_model.frsky.bars[j].barMax, g_model.frsky.bars[j].barMin+1, 51, EE_MODEL); + g_model.frsky.bars[j].barMax = 51 - checkIncDec(event, 51 - g_model.frsky.bars[j].barMax, g_model.frsky.bars[j].barMin+1, maxTelemValue(g_model.frsky.bars[j].source) / 5, EE_MODEL); break; } } diff --git a/src/o9xstrings.cpp b/src/o9xstrings.cpp index 9b67a40a3..b7047ab01 100644 --- a/src/o9xstrings.cpp +++ b/src/o9xstrings.cpp @@ -66,7 +66,6 @@ const pm_char STR_OPEN9X[] PROGMEM = ISTR(VALARM) ISTR(VALARMFN) ISTR(VTELPROTO) - ISTR(TELEMCHNS) #endif #ifdef TEMPLATES ISTR(VTEMPLATES) diff --git a/src/o9xstrings.h b/src/o9xstrings.h index 0f6b10438..a859182ac 100644 --- a/src/o9xstrings.h +++ b/src/o9xstrings.h @@ -83,8 +83,7 @@ extern const pm_char STR_OPEN9X[]; #define OFS_VALARM (OFS_VTELEMUNIT + sizeof(TR_VTELEMUNIT)) #define OFS_VALARMFN (OFS_VALARM + sizeof(TR_VALARM)) #define OFS_VTELPROTO (OFS_VALARMFN + sizeof(TR_VALARMFN)) -#define OFS_TELEMCHNS (OFS_VTELPROTO + sizeof(TR_VTELPROTO)) -#define OFS_ENDTELEM (OFS_TELEMCHNS + sizeof(TR_TELEMCHNS)) +#define OFS_ENDTELEM (OFS_VTELPROTO + sizeof(TR_VTELPROTO)) #else #define OFS_ENDTELEM (OFS_FUNCSOUNDS + sizeof(TR_FUNCSOUNDS)) #endif diff --git a/src/open9x.cpp b/src/open9x.cpp index 9a3a82b5c..b0c3728bb 100644 --- a/src/open9x.cpp +++ b/src/open9x.cpp @@ -395,7 +395,7 @@ bool __getSwitch(int8_t swtch) #if defined(FRSKY) // Telemetry if (cs.v1 > CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS) { - y = convertTelemValue(cs.v1-(CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+1), 128+cs.v2); + y = convertTelemValue(cs.v1-(CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS), 128+cs.v2); if (cs.v1 > CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+2/*A1 and A2*/) { // Fill the threshold array barsThresholds[cs.v1-CSW_CHOUT_BASE-NUM_CHNOUT-MAX_TIMERS-3] = 128 + cs.v2; diff --git a/src/translations/en.h b/src/translations/en.h index 231f88cd1..407d04729 100644 --- a/src/translations/en.h +++ b/src/translations/en.h @@ -139,17 +139,6 @@ #define LEN_VTMRMODES "\003" #define TR_VTMRMODES "OFF""ABS""THs""TH%""THt" -#if defined(FRSKY_HUB) -#define LEN_TELEMCHNS "\004" -#define TR_TELEMCHNS "AD1 AD2 ALT RPM FUELT@1 T@2 SPD\0CELL" -#elif defined(WS_HOW_HIGH) -#define LEN_TELEMCHNS "\003" -#define TR_TELEMCHNS "AD1AD2ALT" -#elif defined(FRSKY) -#define LEN_TELEMCHNS "\003" -#define TR_TELEMCHNS "AD1AD2" -#endif - #define LEN_DSM2MODE "\007" #define TR_DSM2MODE "LP4/LP5DSMonlyDSMX " diff --git a/src/translations/fr.h b/src/translations/fr.h index 2cc5c9045..5fa4c89e6 100644 --- a/src/translations/fr.h +++ b/src/translations/fr.h @@ -117,9 +117,9 @@ #define TR_VTELPROTO "NoneHub " #endif -#define LEN2_VTEMPLATES 14 -#define LEN_VTEMPLATES "\016" -#define TR_VTEMPLATES "Suppr Mixages\0""4 Voies simple\0""Coupure Gaz \0""Empennage V \0""Elevon\\Delta \0""eCCPM \0""Conf. Helico \0""Servo Test \0" +#define LEN2_VTEMPLATES 15 +#define LEN_VTEMPLATES "\017" +#define TR_VTEMPLATES "Suppr Mixages\0\0""4 Voies simple\0""Coupure Gaz \0""Empennage V \0""Elevon\\Delta \0""eCCPM \0""Conf. Helico \0""Servo Test \0" #define LEN_VSWASHTYPE "\004" #define TR_VSWASHTYPE "--- ""120 ""120X""140 ""90 " @@ -139,17 +139,6 @@ #define LEN_VTMRMODES "\003" #define TR_VTMRMODES "OFF""ABS""GZs""GZ%""GZt" -#if defined(FRSKY_HUB) -#define LEN_TELEMCHNS "\004" -#define TR_TELEMCHNS "AD1 AD2 ALT RPM FUELT@1 T@2 SPD\0CELL" -#elif defined(WS_HOW_HIGH) -#define LEN_TELEMCHNS "\003" -#define TR_TELEMCHNS "AD1AD2ALT" -#elif defined(FRSKY) -#define LEN_TELEMCHNS "\003" -#define TR_TELEMCHNS "AD1AD2" -#endif - #define LEN_DSM2MODE "\007" #define TR_DSM2MODE "LP4/LP5DSMonlyDSMX " diff --git a/src/translations/se.h b/src/translations/se.h index 1078b6e74..46e5f3bcc 100644 --- a/src/translations/se.h +++ b/src/translations/se.h @@ -139,17 +139,6 @@ #define LEN_VTMRMODES "\003" #define TR_VTMRMODES "AV ""ABS""THs""TH%""THt" -#if defined(FRSKY_HUB) -#define LEN_TELEMCHNS "\004" -#define TR_TELEMCHNS "AD1 AD2 H\205JDVARVTANKT@1 T@2 FARTBATT" -#elif defined(WS_HOW_HIGH) -#define LEN_TELEMCHNS "\003" -#define TR_TELEMCHNS "AD1AD2H\205J" -#elif defined(FRSKY) -#define LEN_TELEMCHNS "\003" -#define TR_TELEMCHNS "AD1AD2" -#endif - #define LEN_DSM2MODE "\007" #define TR_DSM2MODE "LP4/LP5DSMonlyDSMX "