From 79e86c249a3c042e041218ccbd2d142a4bb8cac4 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 15 Feb 2014 20:38:01 +0100 Subject: [PATCH] Issue #708 fixed (Bugs in Telemetry and Logical Switches) --- radio/src/opentx.cpp | 15 ++++++++------- radio/src/telemetry/frsky.h | 2 ++ radio/src/telemetry/frsky_sport.cpp | 8 ++++++-- radio/src/telemetry/frsky_sport.h | 2 ++ radio/src/translations/en.h | 2 +- 5 files changed, 19 insertions(+), 10 deletions(-) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 7ac9366f7..1d25df940 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1484,17 +1484,18 @@ bool getSwitch(int8_t swtch) } } else { + uint8_t v1 = cs->v1; #if defined(FRSKY) // Telemetry - if (cs->v1 >= MIXSRC_FIRST_TELEM) { - if ((!TELEMETRY_STREAMING() && cs->v1 >= MIXSRC_FIRST_TELEM+TELEM_FIRST_STREAMED_VALUE-1) || IS_FAI_FORBIDDEN(cs->v1-1)) + if (v1 >= MIXSRC_FIRST_TELEM) { + if ((!TELEMETRY_STREAMING() && v1 >= MIXSRC_FIRST_TELEM+TELEM_FIRST_STREAMED_VALUE-1) || IS_FAI_FORBIDDEN(v1-1)) return swtch > 0 ? false : true; y = convertCswTelemValue(cs); #if defined(FRSKY_HUB) && defined(GAUGES) if (s == LS_FAMILY_OFS) { - uint8_t idx = cs->v1-MIXSRC_FIRST_TELEM+1-TELEM_ALT; + uint8_t idx = v1-MIXSRC_FIRST_TELEM+1-TELEM_ALT; if (idx < THLD_MAX) { // Fill the threshold array barsThresholds[idx] = 128 + cs->v2; @@ -1502,17 +1503,17 @@ bool getSwitch(int8_t swtch) } #endif } - else if (cs->v1 >= MIXSRC_GVAR1) { + else if (v1 >= MIXSRC_GVAR1) { y = cs->v2; } else { y = calc100toRESX(cs->v2); } #else - if (cs->v1 >= MIXSRC_FIRST_TELEM) { + if (v1 >= MIXSRC_FIRST_TELEM) { y = (int16_t)3 * (128+cs->v2); // it's a Timer } - else if (cs->v1 >= MIXSRC_GVAR1) { + else if (v1 >= MIXSRC_GVAR1) { y = cs->v2; // it's a GVAR } else { @@ -1523,7 +1524,7 @@ bool getSwitch(int8_t swtch) switch (cs->func) { case LS_FUNC_VEQUAL: #if defined(GVARS) - if (cs->v1 >= MIXSRC_GVAR1 && cs->v1 <= MIXSRC_LAST_GVAR) + if (v1 >= MIXSRC_GVAR1 && v1 <= MIXSRC_LAST_GVAR) result = (x==y); else #endif diff --git a/radio/src/telemetry/frsky.h b/radio/src/telemetry/frsky.h index 3736d6a51..440e2b0e5 100644 --- a/radio/src/telemetry/frsky.h +++ b/radio/src/telemetry/frsky.h @@ -139,6 +139,8 @@ PACK(struct FrskySerialData { int16_t maxTemperature2; uint16_t maxGpsSpeed; uint16_t maxGpsDistance; + int16_t minCell; + int16_t minVfas; uint16_t maxCurrent; uint16_t maxPower; /* end */ diff --git a/radio/src/telemetry/frsky_sport.cpp b/radio/src/telemetry/frsky_sport.cpp index 613f30daa..1f0d53888 100644 --- a/radio/src/telemetry/frsky_sport.cpp +++ b/radio/src/telemetry/frsky_sport.cpp @@ -214,8 +214,8 @@ void processHubPacket(uint8_t id, uint16_t value) #else frskyData.hub.vfas = ((frskyData.hub.volts_bp * 100 + frskyData.hub.volts_ap * 10) * 21) / 110; #endif - /* TODO later if (!frskyData.hub.minVfas || frskyData.hub.minVfas > frskyData.hub.vfas) - frskyData.hub.minVfas = frskyData.hub.vfas; */ + if (!frskyData.hub.minVfas || frskyData.hub.vfas < frskyData.hub.minVfas) + frskyData.hub.minVfas = frskyData.hub.vfas; break; case BARO_ALT_AP_ID: @@ -268,6 +268,8 @@ void processHubPacket(uint8_t id, uint16_t value) if (!frskyData.hub.minCellVolts || cellVolts < frskyData.hub.minCellVolts || battnumber==frskyData.hub.minCellIdx) { frskyData.hub.minCellIdx = battnumber; frskyData.hub.minCellVolts = cellVolts; + if (!frskyData.hub.minCell || frskyData.hub.minCellVolts < frskyData.hub.minCell) + frskyData.hub.minCell = frskyData.hub.minCellVolts; } } break; @@ -761,6 +763,8 @@ void resetTelemetry() frskyData.rssi[1].value = 30; frskyData.hub.fuelLevel = 75; frskyData.hub.rpm = 12000; + frskyData.hub.vfas = 100; + frskyData.hub.minVfas = 90; frskyData.hub.gpsFix = 1; frskyData.hub.gpsLatitude_bp = 4401; diff --git a/radio/src/telemetry/frsky_sport.h b/radio/src/telemetry/frsky_sport.h index f192ddda0..489c6537f 100644 --- a/radio/src/telemetry/frsky_sport.h +++ b/radio/src/telemetry/frsky_sport.h @@ -123,6 +123,8 @@ PACK(struct FrskySerialData { int16_t maxTemperature2; uint16_t maxGpsSpeed; uint16_t maxGpsDistance; + int16_t minCell; + int16_t minVfas; uint16_t maxCurrent; uint16_t maxPower; /* end */ diff --git a/radio/src/translations/en.h b/radio/src/translations/en.h index 21701e57b..5d8b9dedc 100644 --- a/radio/src/translations/en.h +++ b/radio/src/translations/en.h @@ -261,7 +261,7 @@ #define TR_RSSI_0 "Tx\0 " #define TR_RSSI_1 "Rx\0 " #endif -#define TR_VTELEMCHNS "---\0""Batt""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+""Cel-""Vfs-""Cel-""Vfs-""Cur+""Pwr+""Acc\0""Time" +#define TR_VTELEMCHNS "---\0""Batt""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+""Cel-""Vfs-""Cur+""Pwr+""Acc\0""Time" #if defined(CPUARM) #define LEN_VUNITSSYSTEM TR("\006", "\010")