From 2abf07ed9bcf65b699c698097d6bb2728ad79a20 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Sat, 13 Nov 2021 09:26:29 +0100 Subject: [PATCH] Port of TBS's changes for module scoped telemetry --- radio/src/dataconstants.h | 4 +- .../conversions/yaml/dataconstants_220.h | 4 +- radio/src/targets/horus/CMakeLists.txt | 1 + radio/src/targets/taranis/CMakeLists.txt | 1 + radio/src/telemetry/crossfire.cpp | 153 +++++++++++------- radio/src/telemetry/crossfire.h | 9 +- radio/src/telemetry/multi.cpp | 30 +--- radio/src/telemetry/telemetry.cpp | 25 ++- radio/src/telemetry/telemetry.h | 6 + radio/src/translations.cpp | 5 + radio/src/translations.h | 5 + radio/src/translations/untranslated.h | 5 + 12 files changed, 159 insertions(+), 89 deletions(-) diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index 87a3eaeee..a3b374c4e 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -316,8 +316,8 @@ enum TelemetryUnit { UNIT_MS, UNIT_US, UNIT_KM, - UNIT_MAX = UNIT_KM, - UNIT_SPARE5, + UNIT_DBM, + UNIT_MAX = UNIT_DBM, UNIT_SPARE6, UNIT_SPARE7, UNIT_SPARE8, diff --git a/radio/src/storage/conversions/yaml/dataconstants_220.h b/radio/src/storage/conversions/yaml/dataconstants_220.h index 26008d4c7..aefde174c 100644 --- a/radio/src/storage/conversions/yaml/dataconstants_220.h +++ b/radio/src/storage/conversions/yaml/dataconstants_220.h @@ -401,8 +401,8 @@ enum TelemetryUnit { UNIT_MS, UNIT_US, UNIT_KM, - UNIT_MAX = UNIT_KM, - UNIT_SPARE5, + UNIT_DBM, + UNIT_MAX = UNIT_DBM, UNIT_SPARE6, UNIT_SPARE7, UNIT_SPARE8, diff --git a/radio/src/targets/horus/CMakeLists.txt b/radio/src/targets/horus/CMakeLists.txt index 5a014b5bb..769fef213 100644 --- a/radio/src/targets/horus/CMakeLists.txt +++ b/radio/src/targets/horus/CMakeLists.txt @@ -222,6 +222,7 @@ endif() if(INTERNAL_MODULE_MULTI) add_definitions(-DHARDWARE_INTERNAL_MODULE) add_definitions(-DINTERNAL_MODULE_MULTI) + add_definitions(-DINTERNAL_MODULE_SERIAL_TELEMETRY) endif() if(ALLOW_TRAINER_MULTI) diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index c8a53fb5d..859827532 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -517,6 +517,7 @@ endif() if(INTERNAL_MODULE_MULTI) add_definitions(-DHARDWARE_INTERNAL_MODULE) add_definitions(-DINTERNAL_MODULE_MULTI) + add_definitions(-DINTERNAL_MODULE_SERIAL_TELEMETRY) set(TARGET_SRC ${TARGET_SRC} ../common/arm/stm32/intmodule_serial_driver.cpp diff --git a/radio/src/telemetry/crossfire.cpp b/radio/src/telemetry/crossfire.cpp index 48020c0c0..7431f5c2a 100644 --- a/radio/src/telemetry/crossfire.cpp +++ b/radio/src/telemetry/crossfire.cpp @@ -32,6 +32,11 @@ const CrossfireSensor crossfireSensors[] = { {LINK_ID, 7, STR_SENSOR_TX_RSSI, UNIT_DB, 0}, {LINK_ID, 8, STR_SENSOR_TX_QUALITY, UNIT_PERCENT, 0}, {LINK_ID, 9, STR_SENSOR_TX_SNR, UNIT_DB, 0}, + {LINK_RX_ID, 0, STR_SENSOR_RX_RSSI_PERC, UNIT_PERCENT, 0}, + {LINK_RX_ID, 1, STR_SENSOR_RX_RF_POWER, UNIT_DBM, 0}, + {LINK_TX_ID, 0, STR_SENSOR_TX_RSSI_PERC, UNIT_PERCENT, 0}, + {LINK_TX_ID, 1, STR_SENSOR_TX_RF_POWER, UNIT_DBM, 0}, + {LINK_TX_ID, 2, STR_SENSOR_TX_FPS, UNIT_HERTZ, 0}, {BATTERY_ID, 0, STR_SENSOR_BATT, UNIT_VOLTS, 1}, {BATTERY_ID, 1, STR_SENSOR_CURR, UNIT_AMPS, 1}, {BATTERY_ID, 2, STR_SENSOR_CAPACITY, UNIT_MAH, 0}, @@ -54,6 +59,10 @@ const CrossfireSensor & getCrossfireSensor(uint8_t id, uint8_t subId) { if (id == LINK_ID) return crossfireSensors[RX_RSSI1_INDEX+subId]; + else if (id == LINK_RX_ID) + return crossfireSensors[RX_RSSI_PERC_INDEX+subId]; + else if (id == LINK_TX_ID) + return crossfireSensors[TX_RSSI_PERC_INDEX+subId]; else if (id == BATTERY_ID) return crossfireSensors[BATT_VOLTAGE_INDEX+subId]; else if (id == GPS_ID) @@ -74,21 +83,24 @@ void processCrossfireTelemetryValue(uint8_t index, int32_t value) return; const CrossfireSensor & sensor = crossfireSensors[index]; - setTelemetryValue(PROTOCOL_TELEMETRY_CROSSFIRE, sensor.id, 0, sensor.subId, value, sensor.unit, sensor.precision); + setTelemetryValue(PROTOCOL_TELEMETRY_CROSSFIRE, sensor.id, 0, sensor.subId, + value, sensor.unit, sensor.precision); } -bool checkCrossfireTelemetryFrameCRC() +bool checkCrossfireTelemetryFrameCRC(uint8_t module) { - uint8_t len = telemetryRxBuffer[1]; - uint8_t crc = crc8(&telemetryRxBuffer[2], len-1); - return (crc == telemetryRxBuffer[len+1]); + uint8_t * rxBuffer = getTelemetryRxBuffer(module); + uint8_t len = rxBuffer[1]; + uint8_t crc = crc8(&rxBuffer[2], len-1); + return (crc == rxBuffer[len+1]); } template -bool getCrossfireTelemetryValue(uint8_t index, int32_t & value) +bool getCrossfireTelemetryValue(uint8_t index, int32_t & value, uint8_t module) { + uint8_t * rxBuffer = getTelemetryRxBuffer(module); bool result = false; - uint8_t * byte = &telemetryRxBuffer[index]; + uint8_t * byte = &rxBuffer[index]; value = (*byte & 0x80) ? -1 : 0; for (uint8_t i=0; i(3, value)) + if (getCrossfireTelemetryValue<2>(3, value, module)) processCrossfireTelemetryValue(VERTICAL_SPEED_INDEX, value); break; case GPS_ID: - if (getCrossfireTelemetryValue<4>(3, value)) + if (getCrossfireTelemetryValue<4>(3, value, module)) processCrossfireTelemetryValue(GPS_LATITUDE_INDEX, value/10); - if (getCrossfireTelemetryValue<4>(7, value)) + if (getCrossfireTelemetryValue<4>(7, value, module)) processCrossfireTelemetryValue(GPS_LONGITUDE_INDEX, value/10); - if (getCrossfireTelemetryValue<2>(11, value)) + if (getCrossfireTelemetryValue<2>(11, value, module)) processCrossfireTelemetryValue(GPS_GROUND_SPEED_INDEX, value); - if (getCrossfireTelemetryValue<2>(13, value)) + if (getCrossfireTelemetryValue<2>(13, value, module)) processCrossfireTelemetryValue(GPS_HEADING_INDEX, value); - if (getCrossfireTelemetryValue<2>(15, value)) + if (getCrossfireTelemetryValue<2>(15, value, module)) processCrossfireTelemetryValue(GPS_ALTITUDE_INDEX, value - 1000); - if (getCrossfireTelemetryValue<1>(17, value)) + if (getCrossfireTelemetryValue<1>(17, value, module)) processCrossfireTelemetryValue(GPS_SATELLITES_INDEX, value); break; case LINK_ID: for (unsigned int i=0; i<=TX_SNR_INDEX; i++) { - if (getCrossfireTelemetryValue<1>(3+i, value)) { + if (getCrossfireTelemetryValue<1>(3+i, value, module)) { if (i == TX_POWER_INDEX) { - static const int32_t power_values[] = { 0, 10, 25, 100, 500, 1000, 2000, 250, 50 }; - value = ((unsigned)value < DIM(power_values) ? power_values[value] : 0); + static const int32_t power_values[] = {0, 10, 25, 100, 500, + 1000, 2000, 250, 50}; + value = + ((unsigned)value < DIM(power_values) ? power_values[value] : 0); } processCrossfireTelemetryValue(i, value); if (i == RX_QUALITY_INDEX) { if (value) { telemetryData.rssi.set(value); telemetryStreaming = TELEMETRY_TIMEOUT10ms; + telemetryData.telemetryValid |= 1 << module; } else { - telemetryData.rssi.reset(); - telemetryStreaming = 0; + if (telemetryData.telemetryValid & (1 << module)) { + telemetryData.rssi.reset(); + telemetryStreaming = 0; + } + telemetryData.telemetryValid &= ~(1 << module); } } } } break; + case LINK_RX_ID: + if (getCrossfireTelemetryValue<1>(4, value, module)) + processCrossfireTelemetryValue(RX_RSSI_PERC_INDEX, value); + if (getCrossfireTelemetryValue<1>(7, value, module)) + processCrossfireTelemetryValue(TX_RF_POWER_INDEX, value); + break; + + case LINK_TX_ID: + if (getCrossfireTelemetryValue<1>(4, value, module)) + processCrossfireTelemetryValue(TX_RSSI_PERC_INDEX, value); + if (getCrossfireTelemetryValue<1>(7, value, module)) + processCrossfireTelemetryValue(RX_RF_POWER_INDEX, value); + if (getCrossfireTelemetryValue<1>(8, value, module)) + processCrossfireTelemetryValue(TX_FPS_INDEX, value * 10); + break; + case BATTERY_ID: - if (getCrossfireTelemetryValue<2>(3, value)) + if (getCrossfireTelemetryValue<2>(3, value, module)) processCrossfireTelemetryValue(BATT_VOLTAGE_INDEX, value); - if (getCrossfireTelemetryValue<2>(5, value)) + if (getCrossfireTelemetryValue<2>(5, value, module)) processCrossfireTelemetryValue(BATT_CURRENT_INDEX, value); - if (getCrossfireTelemetryValue<3>(7, value)) + if (getCrossfireTelemetryValue<3>(7, value, module)) processCrossfireTelemetryValue(BATT_CAPACITY_INDEX, value); - if (getCrossfireTelemetryValue<1>(10, value)) + if (getCrossfireTelemetryValue<1>(10, value, module)) processCrossfireTelemetryValue(BATT_REMAINING_INDEX, value); break; case ATTITUDE_ID: - if (getCrossfireTelemetryValue<2>(3, value)) + if (getCrossfireTelemetryValue<2>(3, value, module)) processCrossfireTelemetryValue(ATTITUDE_PITCH_INDEX, value/10); - if (getCrossfireTelemetryValue<2>(5, value)) + if (getCrossfireTelemetryValue<2>(5, value, module)) processCrossfireTelemetryValue(ATTITUDE_ROLL_INDEX, value/10); - if (getCrossfireTelemetryValue<2>(7, value)) + if (getCrossfireTelemetryValue<2>(7, value, module)) processCrossfireTelemetryValue(ATTITUDE_YAW_INDEX, value/10); break; case FLIGHT_MODE_ID: { const CrossfireSensor & sensor = crossfireSensors[FLIGHT_MODE_INDEX]; - auto textLength = min(16, telemetryRxBuffer[1]); - telemetryRxBuffer[textLength] = '\0'; - setTelemetryText(PROTOCOL_TELEMETRY_CROSSFIRE, sensor.id, 0, sensor.subId, (const char *)telemetryRxBuffer + 3); + auto textLength = min(16, rxBuffer[1]); + rxBuffer[textLength] = '\0'; + setTelemetryText(PROTOCOL_TELEMETRY_CROSSFIRE, sensor.id, 0, sensor.subId, + (const char *)rxBuffer + 3); break; } @@ -192,24 +231,25 @@ void processCrossfireTelemetryFrame() uint32_t update_interval; int32_t offset; - if (getCrossfireTelemetryValue<4>(6, (int32_t&)update_interval) && getCrossfireTelemetryValue<4>(10, offset)) { - + if (getCrossfireTelemetryValue<4>(6, (int32_t &)update_interval, + module) && + getCrossfireTelemetryValue<4>(10, offset, module)) { // values are in 10th of micro-seconds update_interval /= 10; offset /= 10; TRACE("[XF] Rate: %d, Lag: %d", update_interval, offset); - getModuleSyncStatus(EXTERNAL_MODULE).update(update_interval, offset); + getModuleSyncStatus(module).update(update_interval, offset); } } break; #if defined(LUA) default: - if (luaInputTelemetryFifo && luaInputTelemetryFifo->hasSpace(telemetryRxBufferCount-2) ) { - for (uint8_t i=1; ihasSpace(rxBufferCount-2) ) { + for (uint8_t i=1; ipush(telemetryRxBuffer[i]); + luaInputTelemetryFifo->push(rxBuffer[i]); } } break; @@ -217,8 +257,10 @@ void processCrossfireTelemetryFrame() } } -void processCrossfireTelemetryData(uint8_t data) +void processCrossfireTelemetryData(uint8_t data, uint8_t module) { + uint8_t * rxBuffer = getTelemetryRxBuffer(module); + uint8_t &rxBufferCount = getTelemetryRxBufferCount(module); #if defined(AUX_SERIAL) if (g_eeGeneral.auxSerialMode == UART_MODE_TELEMETRY_MIRROR) { auxSerialPutc(data); @@ -231,35 +273,36 @@ void processCrossfireTelemetryData(uint8_t data) } #endif - if (telemetryRxBufferCount == 0 && data != RADIO_ADDRESS) { + if (rxBufferCount == 0 && data != RADIO_ADDRESS && data != UART_SYNC) { TRACE("[XF] address 0x%02X error", data); return; } - if (telemetryRxBufferCount == 1 && (data < 2 || data > TELEMETRY_RX_PACKET_SIZE-2)) { + if (rxBufferCount == 1 && (data < 2 || data > TELEMETRY_RX_PACKET_SIZE-2)) { TRACE("[XF] length 0x%02X error", data); - telemetryRxBufferCount = 0; + rxBufferCount = 0; return; } - if (telemetryRxBufferCount < TELEMETRY_RX_PACKET_SIZE) { - telemetryRxBuffer[telemetryRxBufferCount++] = data; + if (rxBufferCount < TELEMETRY_RX_PACKET_SIZE) { + rxBuffer[rxBufferCount++] = data; } else { - TRACE("[XF] array size %d error", telemetryRxBufferCount); - telemetryRxBufferCount = 0; + TRACE("[XF] array size %d error", rxBufferCount); + rxBufferCount = 0; } - if (telemetryRxBufferCount > 4) { - uint8_t length = telemetryRxBuffer[1]; - if (length + 2 == telemetryRxBufferCount) { + if (rxBufferCount > 4) { + uint8_t length = rxBuffer[1]; + if (length + 2 == rxBufferCount) { #if defined(BLUETOOTH) - if (g_eeGeneral.bluetoothMode == BLUETOOTH_TELEMETRY && bluetooth.state == BLUETOOTH_STATE_CONNECTED) { - bluetooth.write(telemetryRxBuffer, telemetryRxBufferCount); + if (g_eeGeneral.bluetoothMode == BLUETOOTH_TELEMETRY && + bluetooth.state == BLUETOOTH_STATE_CONNECTED) { + bluetooth.write(rxBuffer, rxBufferCount); } #endif - processCrossfireTelemetryFrame(); - telemetryRxBufferCount = 0; + processCrossfireTelemetryFrame(module); + rxBufferCount = 0; } } } diff --git a/radio/src/telemetry/crossfire.h b/radio/src/telemetry/crossfire.h index 033061138..22e97e926 100644 --- a/radio/src/telemetry/crossfire.h +++ b/radio/src/telemetry/crossfire.h @@ -36,6 +36,8 @@ #define BATTERY_ID 0x08 #define LINK_ID 0x14 #define CHANNELS_ID 0x16 +#define LINK_RX_ID 0x1C +#define LINK_TX_ID 0x1D #define ATTITUDE_ID 0x1E #define FLIGHT_MODE_ID 0x21 #define PING_DEVICES_ID 0x28 @@ -67,6 +69,11 @@ enum CrossfireSensorIndexes { TX_RSSI_INDEX, TX_QUALITY_INDEX, TX_SNR_INDEX, + RX_RSSI_PERC_INDEX, + RX_RF_POWER_INDEX, + TX_RSSI_PERC_INDEX, + TX_RF_POWER_INDEX, + TX_FPS_INDEX, BATT_VOLTAGE_INDEX, BATT_CURRENT_INDEX, BATT_CAPACITY_INDEX, @@ -91,7 +98,7 @@ enum CrossfireFrames{ CRSF_FRAME_MODELID_SENT }; -void processCrossfireTelemetryData(uint8_t data); +void processCrossfireTelemetryData(uint8_t data, uint8_t module); void crossfireSetDefault(int index, uint8_t id, uint8_t subId); uint8_t createCrossfireModelIDFrame(uint8_t * frame); diff --git a/radio/src/telemetry/multi.cpp b/radio/src/telemetry/multi.cpp index 74e55bbae..d710b3d4f 100644 --- a/radio/src/telemetry/multi.cpp +++ b/radio/src/telemetry/multi.cpp @@ -103,10 +103,6 @@ static uint16_t& getMultiTelemetryLastRxTS(uint8_t module) return multiTelemetryLastRxTS[module]; } -// Use additional telemetry buffer -uint8_t intTelemetryRxBuffer[TELEMETRY_RX_PACKET_SIZE]; -uint8_t intTelemetryRxBufferCount; - #else // !INTERNAL_MODULE_MULTI static MultiModuleStatus multiModuleStatus; @@ -556,28 +552,10 @@ void MultiModuleStatus::getStatusString(char * statusText) const } } -static uint8_t * getRxBuffer(uint8_t moduleIdx) -{ -#if defined(INTERNAL_MODULE_MULTI) - if (moduleIdx == INTERNAL_MODULE) - return intTelemetryRxBuffer; -#endif - return telemetryRxBuffer; -} - -static uint8_t &getRxBufferCount(uint8_t moduleIdx) -{ -#if defined(INTERNAL_MODULE_MULTI) - if (moduleIdx == INTERNAL_MODULE) - return intTelemetryRxBufferCount; -#endif - return telemetryRxBufferCount; -} - static void processMultiTelemetryByte(const uint8_t data, uint8_t module) { - uint8_t * rxBuffer = getRxBuffer(module); - uint8_t &rxBufferCount = getRxBufferCount(module); + uint8_t * rxBuffer = getTelemetryRxBuffer(module); + uint8_t &rxBufferCount = getTelemetryRxBufferCount(module); if (rxBufferCount < TELEMETRY_RX_PACKET_SIZE) { rxBuffer[rxBufferCount++] = data; @@ -607,8 +585,8 @@ static void processMultiTelemetryByte(const uint8_t data, uint8_t module) void processMultiTelemetryData(uint8_t data, uint8_t module) { - uint8_t * rxBuffer = getRxBuffer(module); - uint8_t &rxBufferCount = getRxBufferCount(module); + uint8_t * rxBuffer = getTelemetryRxBuffer(module); + uint8_t &rxBufferCount = getTelemetryRxBufferCount(module); uint16_t &lastRxTS = getMultiTelemetryLastRxTS(module); uint16_t nowMs = (uint16_t)RTOS_GET_MS(); diff --git a/radio/src/telemetry/telemetry.cpp b/radio/src/telemetry/telemetry.cpp index fbf971823..3e14eb7f6 100644 --- a/radio/src/telemetry/telemetry.cpp +++ b/radio/src/telemetry/telemetry.cpp @@ -40,15 +40,34 @@ TelemetryData telemetryData; uint8_t telemetryProtocol = 255; -#if defined(PCBSKY9X) && defined(REVX) -uint8_t serialInversion = 0; +#if defined(INTERNAL_MODULE_SERIAL_TELEMETRY) +uint8_t intTelemetryRxBuffer[TELEMETRY_RX_PACKET_SIZE]; +uint8_t intTelemetryRxBufferCount; #endif +uint8_t * getTelemetryRxBuffer(uint8_t moduleIdx) +{ +#if defined(INTERNAL_MODULE_SERIAL_TELEMETRY) + if (moduleIdx == INTERNAL_MODULE) + return intTelemetryRxBuffer; +#endif + return telemetryRxBuffer; +} + +uint8_t &getTelemetryRxBufferCount(uint8_t moduleIdx) +{ +#if defined(INTERNAL_MODULE_SERIAL_TELEMETRY) + if (moduleIdx == INTERNAL_MODULE) + return intTelemetryRxBufferCount; +#endif + return telemetryRxBufferCount; +} + void processTelemetryData(uint8_t data) { #if defined(CROSSFIRE) if (telemetryProtocol == PROTOCOL_TELEMETRY_CROSSFIRE) { - processCrossfireTelemetryData(data); + processCrossfireTelemetryData(data, EXTERNAL_MODULE); return; } #endif diff --git a/radio/src/telemetry/telemetry.h b/radio/src/telemetry/telemetry.h index 348b19701..b8031e470 100644 --- a/radio/src/telemetry/telemetry.h +++ b/radio/src/telemetry/telemetry.h @@ -71,9 +71,15 @@ constexpr uint8_t TELEMETRY_TIMEOUT10ms = 100; // 1 second #define TELEMETRY_RX_PACKET_SIZE 19 // 9 bytes (full packet), worst case 18 bytes with byte-stuffing (+1) #endif +//TODO: remove this public definition extern uint8_t telemetryRxBuffer[TELEMETRY_RX_PACKET_SIZE]; extern uint8_t telemetryRxBufferCount; +//TODO: use module scoped buffers instead +uint8_t* getTelemetryRxBuffer(uint8_t moduleIdx); +uint8_t& getTelemetryRxBufferCount(uint8_t moduleIdx); + + #define TELEMETRY_AVERAGE_COUNT 3 enum { diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 2534fb758..f127841a4 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -561,6 +561,11 @@ const char STR_SENSOR_RF_MODE[] = TR_SENSOR_RF_MODE; const char STR_SENSOR_TX_POWER[] = TR_SENSOR_TX_POWER; const char STR_SENSOR_TX_RSSI[] = TR_SENSOR_TX_RSSI; const char STR_SENSOR_TX_QUALITY[] = TR_SENSOR_TX_QUALITY; +const char STR_SENSOR_RX_RSSI_PERC[] = TR_SENSOR_RX_RSSI_PERC; +const char STR_SENSOR_RX_RF_POWER[] = TR_SENSOR_RX_RF_POWER; +const char STR_SENSOR_TX_RSSI_PERC[] = TR_SENSOR_TX_RSSI_PERC; +const char STR_SENSOR_TX_RF_POWER[] = TR_SENSOR_TX_RF_POWER; +const char STR_SENSOR_TX_FPS[] = TR_SENSOR_TX_FPS; const char STR_SENSOR_TX_SNR[] = TR_SENSOR_TX_SNR; const char STR_SENSOR_TX_NOISE[] = TR_SENSOR_TX_NOISE; const char STR_SENSOR_PITCH[] = TR_SENSOR_PITCH; diff --git a/radio/src/translations.h b/radio/src/translations.h index e1b8d55e2..1c180f971 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -894,6 +894,11 @@ extern const char STR_SENSOR_RF_MODE[]; extern const char STR_SENSOR_TX_POWER[]; extern const char STR_SENSOR_TX_RSSI[]; extern const char STR_SENSOR_TX_QUALITY[]; +extern const char STR_SENSOR_RX_RSSI_PERC[]; +extern const char STR_SENSOR_RX_RF_POWER[]; +extern const char STR_SENSOR_TX_RSSI_PERC[]; +extern const char STR_SENSOR_TX_RF_POWER[]; +extern const char STR_SENSOR_TX_FPS[]; extern const char STR_SENSOR_TX_SNR[]; extern const char STR_SENSOR_TX_NOISE[]; extern const char STR_SENSOR_PITCH[]; diff --git a/radio/src/translations/untranslated.h b/radio/src/translations/untranslated.h index 223b9a9bc..1bb8bd942 100644 --- a/radio/src/translations/untranslated.h +++ b/radio/src/translations/untranslated.h @@ -257,6 +257,11 @@ #define TR_SENSOR_TX_POWER "TPWR" #define TR_SENSOR_TX_RSSI "TRSS" #define TR_SENSOR_TX_QUALITY "TQly" +#define TR_SENSOR_RX_RSSI_PERC "RRSP" +#define TR_SENSOR_RX_RF_POWER "RPWR" +#define TR_SENSOR_TX_RSSI_PERC "TRSP" +#define TR_SENSOR_TX_RF_POWER "TPWR" +#define TR_SENSOR_TX_FPS "TFPS" #define TR_SENSOR_TX_SNR "TSNR" #define TR_SENSOR_TX_NOISE "TNse" #define TR_SENSOR_PITCH "Ptch"