From 39f29860c90709ed377c6436a171593ff2a40c36 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 2 Aug 2019 21:31:03 +0200 Subject: [PATCH] Bsongis/telemetry clean session (#6597) Telemetry cleaning session --- radio/src/gui/212x64/radio_diaganas.cpp | 5 +- radio/src/gui/480x272/view_statistics.cpp | 2 +- .../src/gui/common/stdlcd/radio_hardware.cpp | 4 +- radio/src/lua/api_general.cpp | 2 +- radio/src/opentx.cpp | 10 -- radio/src/switches.cpp | 3 +- radio/src/telemetry/frsky.h | 98 ++++++------------- radio/src/telemetry/telemetry.cpp | 15 ++- radio/src/telemetry/telemetry_holders.h | 50 +++++++--- radio/src/tests/CMakeLists.txt | 2 +- radio/src/tests/eeprom.cpp | 55 ++++++----- radio/src/tests/frsky.cpp | 71 +++++++------- radio/src/tests/gtests.h | 6 +- 13 files changed, 151 insertions(+), 172 deletions(-) diff --git a/radio/src/gui/212x64/radio_diaganas.cpp b/radio/src/gui/212x64/radio_diaganas.cpp index 6c9279033..bea4089a4 100644 --- a/radio/src/gui/212x64/radio_diaganas.cpp +++ b/radio/src/gui/212x64/radio_diaganas.cpp @@ -40,11 +40,10 @@ void menuRadioDiagAnalogs(event_t event) } // RAS - if((isModuleXJT(INTERNAL_MODULE) && IS_INTERNAL_MODULE_ON()) || (isModulePXX1(EXTERNAL_MODULE) && !IS_INTERNAL_MODULE_ON())) { + if ((isModuleXJT(INTERNAL_MODULE) && IS_INTERNAL_MODULE_ON()) || (isModulePXX1(EXTERNAL_MODULE) && !IS_INTERNAL_MODULE_ON())) { lcdDrawTextAlignedLeft(MENU_HEADER_HEIGHT+6*FH, "RAS"); - lcdDrawNumber(10*FW-1, MENU_HEADER_HEIGHT+6*FH, telemetryData.swrInternal.value, RIGHT); + lcdDrawNumber(10*FW-1, MENU_HEADER_HEIGHT+6*FH, telemetryData.swrInternal.value(), RIGHT); lcdDrawText(LCD_W/2, MENU_HEADER_HEIGHT+6*FH, "XJTVER"); lcdDrawNumber(LCD_W/2 + 10*FW-1, MENU_HEADER_HEIGHT+6*FH, telemetryData.xjtVersion, RIGHT); - } } diff --git a/radio/src/gui/480x272/view_statistics.cpp b/radio/src/gui/480x272/view_statistics.cpp index 5d29b07bb..5d4f4a5b0 100644 --- a/radio/src/gui/480x272/view_statistics.cpp +++ b/radio/src/gui/480x272/view_statistics.cpp @@ -221,7 +221,7 @@ bool menuStatsAnalogs(event_t event) // RAS if ((isModuleXJT(INTERNAL_MODULE) && IS_INTERNAL_MODULE_ON()) || (isModulePXX1(EXTERNAL_MODULE) && !IS_INTERNAL_MODULE_ON())) { lcdDrawText(MENUS_MARGIN_LEFT, MENU_CONTENT_TOP+7*FH, "RAS"); - lcdDrawNumber(MENUS_MARGIN_LEFT+100, MENU_CONTENT_TOP+7*FH, telemetryData.swrInternal.value); + lcdDrawNumber(MENUS_MARGIN_LEFT+100, MENU_CONTENT_TOP+7*FH, telemetryData.swrInternal.value()); lcdDrawText(MENUS_MARGIN_LEFT + LCD_W/2, MENU_CONTENT_TOP+7*FH, "XJTVER"); lcdDrawNumber(LCD_W/2 + MENUS_MARGIN_LEFT+100, MENU_CONTENT_TOP+7*FH, telemetryData.xjtVersion); } diff --git a/radio/src/gui/common/stdlcd/radio_hardware.cpp b/radio/src/gui/common/stdlcd/radio_hardware.cpp index 4744ef357..fd8078731 100644 --- a/radio/src/gui/common/stdlcd/radio_hardware.cpp +++ b/radio/src/gui/common/stdlcd/radio_hardware.cpp @@ -564,13 +564,13 @@ void menuRadioHardware(event_t event) #else lcdDrawTextAlignedLeft(y, "RAS"); if (telemetryData.swrInternal.isFresh()) - lcdDrawNumber(HW_SETTINGS_COLUMN2, y, telemetryData.swrInternal.value); + lcdDrawNumber(HW_SETTINGS_COLUMN2, y, telemetryData.swrInternal.value()); else lcdDrawText(HW_SETTINGS_COLUMN2, y, "---"); lcdDrawText(lcdNextPos, y, "/"); #endif if (telemetryData.swrExternal.isFresh()) - lcdDrawNumber(lcdNextPos, y, telemetryData.swrExternal.value); + lcdDrawNumber(lcdNextPos, y, telemetryData.swrExternal.value()); else lcdDrawText(lcdNextPos, y, "---"); break; diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index 467a75cd8..7b750487e 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -785,7 +785,7 @@ This is just a hardware pass/fail measure and does not represent the quality of static int luaGetRAS(lua_State * L) { if (isRasValueValid()) { - lua_pushinteger(L, telemetryData.swrInternal.value); + lua_pushinteger(L, telemetryData.swrInternal.value()); } else { lua_pushnil(L); diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 4e9419e51..aea58caa6 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1842,17 +1842,7 @@ void opentxInit() // g_model.topbarData is still zero here (because it was not yet read from SDCARD), // but we only remember the pointer to in in constructor. // The storageReadAll() needs topbar object, so it must be created here -#if __clang__ -// clang does not like this at all, turn into a warning so that -Werror does not stop here -// taking address of packed member 'topbarData' of class or structure 'ModelData' may result in an unaligned pointer value [-Werror,-Waddress-of-packed-member] -#pragma clang diagnostic push -#pragma clang diagnostic warning "-Waddress-of-packed-member" -#endif topbar = new Topbar(&g_model.topbarData); -#if __clang__ -// Restore warnings -#pragma clang diagnostic pop -#endif // lua widget state must also be prepared before the call to storageReadAll() LUA_INIT_THEMES_AND_WIDGETS(); diff --git a/radio/src/switches.cpp b/radio/src/switches.cpp index b24999227..3e76e3304 100644 --- a/radio/src/switches.cpp +++ b/radio/src/switches.cpp @@ -784,10 +784,11 @@ void logicalSwitchesTimerTick() for (uint8_t i=0; ifunc == LS_FUNC_TIMER) { - int16_t *lastValue = &LS_LAST_VALUE(fm, i); + int16_t * lastValue = &LS_LAST_VALUE(fm, i); if (*lastValue == 0 || *lastValue == CS_LAST_VALUE_INIT) { *lastValue = -lswTimerValue(ls->v1); } + else if (*lastValue < 0) { if (++(*lastValue) == 0) *lastValue = lswTimerValue(ls->v2); diff --git a/radio/src/telemetry/frsky.h b/radio/src/telemetry/frsky.h index 4e121252a..3b7634ab4 100644 --- a/radio/src/telemetry/frsky.h +++ b/radio/src/telemetry/frsky.h @@ -39,11 +39,6 @@ enum FrSkyDataState { #define FRSKY_SPORT_PACKET_SIZE 9 -#define WSHH_TIMEOUT10ms 60 // 600ms - -#define FRSKY_SPORT_AVERAGING 4 -#define FRSKY_D_AVERAGING 8 - // Enumerate FrSky packet codes #define LINKPKT 0xfe #define USRPKT 0xfd @@ -56,7 +51,6 @@ enum FrSkyDataState { #define RSSI2PKT 0xf6 #define RSSI_REQUEST 0xf1 - // FrSky PRIM IDs (1 byte) #define DATA_FRAME 0x10 @@ -99,7 +93,6 @@ enum FrSkyDataState { #define VFAS_D_HIPREC_OFFSET 2000 - // FrSky new DATA IDs (2 bytes) #define ALT_FIRST_ID 0x0100 #define ALT_LAST_ID 0x010f @@ -205,52 +198,44 @@ enum FrSkyDataState { #define DATA_ID_SP2UH 0x45 // 5 #define DATA_ID_SP2UR 0xC6 // 6 -#define IS_HIDDEN_TELEMETRY_VALUE(id) ((id == SP2UART_A_ID) || (id == SP2UART_B_ID) || (id == XJT_VERSION_ID) || (id == RAS_ID) || (id == FACT_TEST_ID)) +inline bool IS_HIDDEN_TELEMETRY_VALUE(uint16_t id) +{ + return (id == SP2UART_A_ID) || (id == SP2UART_B_ID) || (id == XJT_VERSION_ID) || (id == RAS_ID) || (id == FACT_TEST_ID); +} -#define ALARM_GREATER(channel, alarm) ((g_model.frsky.channels[channel].alarms_greater >> alarm) & 1) -#define ALARM_LEVEL(channel, alarm) ((g_model.frsky.channels[channel].alarms_level >> (2*alarm)) & 3) +class TelemetryData { + public: + TelemetryExpiringDecorator swrInternal; + TelemetryExpiringDecorator swrExternal; + TelemetryFilterDecorator rssi; + uint16_t xjtVersion; + bool varioHighPrecision; -#define TELEMETRY_STREAMING() (telemetryData.rssi.value > 0) -#define TELEMETRY_RSSI() (telemetryData.rssi.value) -#define TELEMETRY_RSSI_MIN() (telemetryData.rssi.min) + void setSwr(uint8_t module, uint8_t value) + { + if (module == 0) + swrInternal.set(value); + else + swrExternal.set(value); + } -#define TELEMETRY_CELL_VOLTAGE_MUTLIPLIER 1 + void clear() + { + memset(this, 0, sizeof(*this)); + } +}; -#define TELEMETRY_GPS_SPEED_BP telemetryData.hub.gpsSpeed_bp -#define TELEMETRY_GPS_SPEED_AP telemetryData.hub.gpsSpeed_ap +extern TelemetryData telemetryData; -#define TELEMETRY_ABSOLUTE_GPS_ALT (telemetryData.hub.gpsAltitude) -#define TELEMETRY_RELATIVE_GPS_ALT (telemetryData.hub.gpsAltitude + telemetryData.hub.gpsAltitudeOffset) -#define TELEMETRY_RELATIVE_GPS_ALT_BP (TELEMETRY_RELATIVE_GPS_ALT / 100) +inline bool TELEMETRY_STREAMING() +{ + return telemetryData.rssi.value() > 0; +} -#define TELEMETRY_RELATIVE_BARO_ALT_BP (telemetryData.hub.baroAltitude / 100) -#define TELEMETRY_RELATIVE_BARO_ALT_AP (telemetryData.hub.baroAltitude % 100) - -#define TELEMETRY_BARO_ALT_PREPARE() div_t baroAltitudeDivision = div(getConvertedTelemetryValue(telemetryData.hub.baroAltitude, UNIT_DIST), 100) -#define TELEMETRY_BARO_ALT_FORMAT "%c%d.%02d," -#define TELEMETRY_BARO_ALT_ARGS telemetryData.hub.baroAltitude < 0 ? '-' : ' ', abs(baroAltitudeDivision.quot), abs(baroAltitudeDivision.rem), -#define TELEMETRY_GPS_ALT_FORMAT "%c%d.%02d," -#define TELEMETRY_GPS_ALT_ARGS telemetryData.hub.gpsAltitude < 0 ? '-' : ' ', abs(telemetryData.hub.gpsAltitude / 100), abs(telemetryData.hub.gpsAltitude % 100), -#define TELEMETRY_SPEED_UNIT (IS_IMPERIAL_ENABLE() ? SPEED_UNIT_IMP : SPEED_UNIT_METR) -#define TELEMETRY_GPS_SPEED_FORMAT "%d," -#define TELEMETRY_GPS_SPEED_ARGS telemetryData.hub.gpsSpeed_bp, - -#define TELEMETRY_CELLS_ARGS telemetryData.hub.cellsSum / 10, telemetryData.hub.cellsSum % 10, TELEMETRY_CELL_VOLTAGE(0)/100, TELEMETRY_CELL_VOLTAGE(0)%100, TELEMETRY_CELL_VOLTAGE(1)/100, TELEMETRY_CELL_VOLTAGE(1)%100, TELEMETRY_CELL_VOLTAGE(2)/100, TELEMETRY_CELL_VOLTAGE(2)%100, TELEMETRY_CELL_VOLTAGE(3)/100, TELEMETRY_CELL_VOLTAGE(3)%100, TELEMETRY_CELL_VOLTAGE(4)/100, TELEMETRY_CELL_VOLTAGE(4)%100, TELEMETRY_CELL_VOLTAGE(5)/100, TELEMETRY_CELL_VOLTAGE(5)%100, TELEMETRY_CELL_VOLTAGE(6)/100, TELEMETRY_CELL_VOLTAGE(6)%100, TELEMETRY_CELL_VOLTAGE(7)/100, TELEMETRY_CELL_VOLTAGE(7)%100, TELEMETRY_CELL_VOLTAGE(8)/100, TELEMETRY_CELL_VOLTAGE(8)%100, TELEMETRY_CELL_VOLTAGE(9)/100, TELEMETRY_CELL_VOLTAGE(9)%100, TELEMETRY_CELL_VOLTAGE(10)/100, TELEMETRY_CELL_VOLTAGE(10)%100, TELEMETRY_CELL_VOLTAGE(11)/100, TELEMETRY_CELL_VOLTAGE(11)%100, -#define TELEMETRY_CELLS_FORMAT "%d.%d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d," -#define TELEMETRY_CELLS_LABEL "Cell volts,Cell 1,Cell 2,Cell 3,Cell 4,Cell 5,Cell 6,Cell 7,Cell 8,Cell 9,Cell 10,Cell 11,Cell 12," - -#define TELEMETRY_CURRENT_FORMAT "%d.%d," -#define TELEMETRY_CURRENT_ARGS telemetryData.hub.current / 10, telemetryData.hub.current % 10, -#define TELEMETRY_VFAS_FORMAT "%d.%d," -#define TELEMETRY_VFAS_ARGS telemetryData.hub.vfas / 10, telemetryData.hub.vfas % 10, -#define TELEMETRY_VSPEED_FORMAT "%c%d.%02d," -#define TELEMETRY_VSPEED_ARGS telemetryData.hub.varioSpeed < 0 ? '-' : ' ', abs(telemetryData.hub.varioSpeed / 100), abs(telemetryData.hub.varioSpeed % 100), -#define TELEMETRY_ASPEED_FORMAT "%d.%d," -#define TELEMETRY_ASPEED_ARGS telemetryData.hub.airSpeed / 10, telemetryData.hub.airSpeed % 10, -#define TELEMETRY_OPENXSENSOR() (0) - -#define TELEMETRY_CELL_VOLTAGE(k) (telemetryData.hub.cellVolts[k] * TELEMETRY_CELL_VOLTAGE_MUTLIPLIER) -#define TELEMETRY_MIN_CELL_VOLTAGE (telemetryData.hub.minCellVolts * TELEMETRY_CELL_VOLTAGE_MUTLIPLIER) +inline uint8_t TELEMETRY_RSSI() +{ + return telemetryData.rssi.value(); +} #define START_STOP 0x7E #define BYTESTUFF 0x7D @@ -280,25 +265,6 @@ void telemetryInit(uint8_t protocol); void telemetryInterrupt10ms(); -class TelemetryData { - public: - TelemetryExpiringDecorator swrInternal; - TelemetryExpiringDecorator swrExternal; - TelemetryFilterDecorator rssi; - uint16_t xjtVersion; - bool varioHighPrecision; - - void setSwr(uint8_t module, uint8_t value) - { - if (module == 0) - swrInternal.set(value); - else - swrExternal.set(value); - } -}; - -extern TelemetryData telemetryData; - bool pushFrskyTelemetryData(uint8_t data); // returns true when end of frame detected void processFrskyTelemetryData(uint8_t data); diff --git a/radio/src/telemetry/telemetry.cpp b/radio/src/telemetry/telemetry.cpp index 36d260a21..6d7a1ea6d 100644 --- a/radio/src/telemetry/telemetry.cpp +++ b/radio/src/telemetry/telemetry.cpp @@ -71,10 +71,10 @@ inline bool isBadAntennaDetected() if (!isRasValueValid()) return false; - if (telemetryData.swrInternal.isFresh() && telemetryData.swrInternal.value > FRSKY_BAD_ANTENNA_THRESHOLD) + if (telemetryData.swrInternal.isFresh() && telemetryData.swrInternal.value() > FRSKY_BAD_ANTENNA_THRESHOLD) return true; - if (telemetryData.swrExternal.isFresh() && telemetryData.swrExternal.value > FRSKY_BAD_ANTENNA_THRESHOLD) + if (telemetryData.swrExternal.isFresh() && telemetryData.swrExternal.value() > FRSKY_BAD_ANTENNA_THRESHOLD) return true; return false; @@ -210,15 +210,12 @@ void telemetryInterrupt10ms() { if (TELEMETRY_STREAMING()) { - if (!TELEMETRY_OPENXSENSOR()) { - for (int i=0; ivalue = value; + _value = value; } void reset() { set(0); - }; + } + + protected: + uint8_t _value; }; template class TelemetryFilterDecorator: public T { public: - uint8_t values[TELEMETRY_AVERAGE_COUNT]; void set(uint8_t value) { - if (this->value == 0 || value == 0) { + if (value == 0 || this->_value == 0) { memset(values, value, TELEMETRY_AVERAGE_COUNT); - this->value = value; + this->_value = value; } else { - //calculate the average from values[] and value - //also shift readings in values [] array + // calculate the average from values[] and value + // also shift readings in values [] array unsigned int sum = values[0]; for (int i=0; ivalue = sum / (TELEMETRY_AVERAGE_COUNT+1); + this->_value = sum / (TELEMETRY_AVERAGE_COUNT+1); } } + void reset() { memclear(this, sizeof(*this)); - }; + } + + protected: + uint8_t values[TELEMETRY_AVERAGE_COUNT]; }; template class TelemetryExpiringDecorator: public T { public: - tmr10ms_t expirationTime; void set(uint8_t value) { T::set(value); expirationTime = get_tmr10ms() + 1000/*10s*/; } + void reset() { memclear(this, sizeof(*this)); } + bool isFresh() { return get_tmr10ms() < expirationTime; } + + protected: + tmr10ms_t expirationTime; }; template class TelemetryMinDecorator: public T { public: - uint8_t min; void set(uint8_t value) { T::set(value); - if (!min || value < min) { - min = value; + if (!_min || value < _min) { + _min = value; } } + + uint8_t min() + { + return _min; + } + void reset() { memclear(this, sizeof(*this)); } + + protected: + uint8_t _min; }; #endif // _TELEMETRY_HOLDERS_H_ diff --git a/radio/src/tests/CMakeLists.txt b/radio/src/tests/CMakeLists.txt index d2062a0f3..bef6b072e 100644 --- a/radio/src/tests/CMakeLists.txt +++ b/radio/src/tests/CMakeLists.txt @@ -34,7 +34,7 @@ if(GTEST_INCDIR AND GTEST_SRCDIR AND Qt5Widgets_FOUND) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-ms-bitfields") endif() set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 ${WARNING_FLAGS}") use_cxx11() # ensure gnu++11 in CXX_FLAGS with CMake < 3.1 diff --git a/radio/src/tests/eeprom.cpp b/radio/src/tests/eeprom.cpp index 7dce423c7..aa92eaebd 100644 --- a/radio/src/tests/eeprom.cpp +++ b/radio/src/tests/eeprom.cpp @@ -35,7 +35,6 @@ PACK(struct RamBackupUncompressed { extern Backup::RamBackupUncompressed ramBackupUncompressed; TEST(Storage, BackupAndRestore) { - rambackupWrite(); Backup::RamBackupUncompressed ramBackupRestored; if (uncompress((uint8_t *)&ramBackupRestored, sizeof(ramBackupRestored), ramBackup->data, ramBackup->size) != sizeof(ramBackupUncompressed)) @@ -55,10 +54,10 @@ TEST(Eeprom, 100_random_writes) storageFormat(); - for(int i=0; i<100; i++) { - int size = rand()%800; - for(int j=0; j> testVal; - testVal.value = 0; + testVal.reset(); testVal.set(10); - EXPECT_EQ(RAW_FRSKY_MINMAX(testVal), 10); - EXPECT_EQ(testVal.value, expected[testPos++]); - for(int n=2; n<10; ++n) { - testVal.set(n*10); - EXPECT_EQ(RAW_FRSKY_MINMAX(testVal), n*10); - EXPECT_EQ(testVal.value, expected[testPos++]); + EXPECT_EQ(testVal.value(), expected[testPos++]); + for (int n = 2; n < 10; ++n) { + testVal.set(n * 10); + EXPECT_EQ(testVal.value(), expected[testPos++]); } - for(int n=2; n<10; ++n) { + for (int n = 2; n < 10; ++n) { testVal.set(100); - EXPECT_EQ(RAW_FRSKY_MINMAX(testVal), 100); - EXPECT_EQ(testVal.value, expected[testPos++]); + EXPECT_EQ(testVal.value(), expected[testPos++]); } } @@ -190,8 +187,6 @@ void generateSportCellPacket(uint8_t * packet, uint8_t cells, uint8_t battnumber setSportPacketCrc(packet); } -#define _V(volts) (volts/TELEMETRY_CELL_VOLTAGE_MUTLIPLIER) - TEST(FrSkySPORT, FrSkyDCells) { MODEL_RESET(); @@ -227,12 +222,12 @@ TEST(FrSkySPORT, frskySetCellVoltage) allowNewSensors = true; // test that simulates 3 cell battery - generateSportCellPacket(packet, 3, 0, _V(410), _V(420)); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 3, 0, 410, 420); sportProcessTelemetryPacket(packet); EXPECT_EQ(checkSportPacket(packet), true) << "Bad CRC generation in setSportPacketCrc()"; - generateSportCellPacket(packet, 3, 2, _V(430), _V( 0)); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 3, 2, 430, 0); sportProcessTelemetryPacket(packet); - generateSportCellPacket(packet, 3, 0, _V(405), _V(300)); sportProcessTelemetryPacket(packet); - generateSportCellPacket(packet, 3, 2, _V(430), _V( 0)); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 3, 0, 405, 300); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 3, 2, 430, 0); sportProcessTelemetryPacket(packet); EXPECT_EQ(telemetryItems[0].cells.count, 3); EXPECT_EQ(telemetryItems[0].cells.values[0].value, 405); @@ -243,11 +238,11 @@ TEST(FrSkySPORT, frskySetCellVoltage) EXPECT_EQ(telemetryItems[0].valueMin, 1135); EXPECT_EQ(telemetryItems[0].valueMax, 1260); - generateSportCellPacket(packet, 3, 0, _V(405), _V(250)); sportProcessTelemetryPacket(packet); - generateSportCellPacket(packet, 3, 2, _V(430), _V( 0)); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 3, 0, 405, 250); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 3, 2, 430, 0); sportProcessTelemetryPacket(packet); - generateSportCellPacket(packet, 3, 0, _V(410), _V(420)); sportProcessTelemetryPacket(packet); - generateSportCellPacket(packet, 3, 2, _V(430), _V( 0)); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 3, 0, 410, 420); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 3, 2, 430, 0); sportProcessTelemetryPacket(packet); EXPECT_EQ(telemetryItems[0].cells.count, 3); EXPECT_EQ(telemetryItems[0].cells.values[0].value, 410); @@ -259,9 +254,9 @@ TEST(FrSkySPORT, frskySetCellVoltage) EXPECT_EQ(telemetryItems[0].valueMax, 1260); //add another two cells - 5 cell battery - generateSportCellPacket(packet, 5, 0, _V(418), _V(408)); sportProcessTelemetryPacket(packet); - generateSportCellPacket(packet, 5, 2, _V(415), _V(420)); sportProcessTelemetryPacket(packet); - generateSportCellPacket(packet, 5, 4, _V(410), _V( 0)); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 5, 0, 418, 408); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 5, 2, 415, 420); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 5, 4, 410, 0); sportProcessTelemetryPacket(packet); EXPECT_EQ(telemetryItems[0].cells.count, 5); EXPECT_EQ(telemetryItems[0].cells.values[0].value, 418); @@ -275,9 +270,9 @@ TEST(FrSkySPORT, frskySetCellVoltage) EXPECT_EQ(telemetryItems[0].valueMax, 2071); //simulate very low voltage for cell 3 - generateSportCellPacket(packet, 5, 0, _V(418), _V(408)); sportProcessTelemetryPacket(packet); - generateSportCellPacket(packet, 5, 2, _V(100), _V(420)); sportProcessTelemetryPacket(packet); - generateSportCellPacket(packet, 5, 4, _V(410), _V( 0)); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 5, 0, 418, 408); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 5, 2, 100, 420); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 5, 4, 410, 0); sportProcessTelemetryPacket(packet); EXPECT_EQ(telemetryItems[0].cells.count, 5); EXPECT_EQ(telemetryItems[0].cells.values[0].value, 418); @@ -291,10 +286,10 @@ TEST(FrSkySPORT, frskySetCellVoltage) EXPECT_EQ(telemetryItems[0].valueMax, 2071); //back to normal (but with reversed order of packets) - generateSportCellPacket(packet, 5, 4, _V(410), _V( 0)); sportProcessTelemetryPacket(packet); - generateSportCellPacket(packet, 5, 0, _V(418), _V(408)); sportProcessTelemetryPacket(packet); - generateSportCellPacket(packet, 5, 2, _V(412), _V(420)); sportProcessTelemetryPacket(packet); - generateSportCellPacket(packet, 5, 4, _V(410), _V( 0)); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 5, 4, 410, 0); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 5, 0, 418, 408); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 5, 2, 412, 420); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 5, 4, 410, 0); sportProcessTelemetryPacket(packet); EXPECT_EQ(telemetryItems[0].cells.count, 5); EXPECT_EQ(telemetryItems[0].cells.values[0].value, 418); @@ -334,8 +329,8 @@ TEST(FrSkySPORT, frskySetCellVoltageTwoSensors) allowNewSensors = true; //sensor 1: 3 cell battery - generateSportCellPacket(packet, 3, 0, _V(418), _V(416)); sportProcessTelemetryPacket(packet); - generateSportCellPacket(packet, 3, 2, _V(415), _V( 0)); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 3, 0, 418, 416); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 3, 2, 415, 0); sportProcessTelemetryPacket(packet); EXPECT_EQ(telemetryItems[0].cells.count, 3); EXPECT_EQ(telemetryItems[0].cells.values[0].value, 418); @@ -347,8 +342,8 @@ TEST(FrSkySPORT, frskySetCellVoltageTwoSensors) EXPECT_EQ(telemetryItems[0].valueMax, 1249); //sensor 2: 4 cell battery - generateSportCellPacket(packet, 4, 0, _V(410), _V(420), DATA_ID_FLVSS+1); sportProcessTelemetryPacket(packet); - generateSportCellPacket(packet, 4, 2, _V(400), _V(405), DATA_ID_FLVSS+1); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 4, 0, 410, 420, DATA_ID_FLVSS+1); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 4, 2, 400, 405, DATA_ID_FLVSS+1); sportProcessTelemetryPacket(packet); EXPECT_EQ(telemetryItems[1].cells.count, 4); EXPECT_EQ(telemetryItems[1].cells.values[0].value, 410); @@ -372,10 +367,10 @@ TEST(FrSkySPORT, frskySetCellVoltageTwoSensors) EXPECT_EQ(telemetryItems[2].valueMax, 287); //now change some voltages - generateSportCellPacket(packet, 3, 2, _V(415), _V( 0)); sportProcessTelemetryPacket(packet); - generateSportCellPacket(packet, 4, 2, _V(390), _V(370), DATA_ID_FLVSS+1); sportProcessTelemetryPacket(packet); - generateSportCellPacket(packet, 3, 0, _V(420), _V(410)); sportProcessTelemetryPacket(packet); - generateSportCellPacket(packet, 4, 0, _V(410), _V(420), DATA_ID_FLVSS+1); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 3, 2, 415, 0); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 4, 2, 390, 370, DATA_ID_FLVSS+1); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 3, 0, 420, 410); sportProcessTelemetryPacket(packet); + generateSportCellPacket(packet, 4, 0, 410, 420, DATA_ID_FLVSS+1); sportProcessTelemetryPacket(packet); telemetryWakeup(); diff --git a/radio/src/tests/gtests.h b/radio/src/tests/gtests.h index 360084bca..5be8b49be 100644 --- a/radio/src/tests/gtests.h +++ b/radio/src/tests/gtests.h @@ -81,10 +81,8 @@ inline void MIXER_RESET() inline void TELEMETRY_RESET() { #if defined(TELEMETRY_FRSKY) - memclear(&telemetryData, sizeof(telemetryData)); - TELEMETRY_RSSI() = 100; -#endif -#if defined(TELEMETRY_FRSKY) + telemetryData.clear(); + telemetryData.rssi.set(100); for (int i=0; i