From a3c175f53753cb9705ea94f861a3dafb378803aa Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 28 Mar 2016 19:07:28 +0200 Subject: [PATCH] Crossfire telemetry protocol start --- radio/src/CMakeLists.txt | 48 ++++-- radio/src/dataconstants.h | 3 +- .../targets/common_avr/telemetry_driver.cpp | 7 +- radio/src/telemetry/crossfire.cpp | 141 ++++++++++++++++++ radio/src/telemetry/crossfire.h | 29 ++++ radio/src/telemetry/frsky.cpp | 39 +++-- radio/src/telemetry/frsky.h | 32 +--- radio/src/telemetry/telemetry.cpp | 6 + radio/src/telemetry/telemetry.h | 27 +++- radio/src/telemetry/telemetry_sensors.cpp | 5 + radio/src/translations/cz.h.txt | 12 +- radio/src/translations/de.h.txt | 12 +- radio/src/translations/en.h.txt | 12 +- radio/src/translations/es.h.txt | 12 +- radio/src/translations/fi.h.txt | 12 +- radio/src/translations/fr.h.txt | 12 +- radio/src/translations/it.h.txt | 12 +- radio/src/translations/nl.h.txt | 12 +- radio/src/translations/pl.h.txt | 12 +- radio/src/translations/pt.h.txt | 12 +- radio/src/translations/se.h.txt | 12 +- 21 files changed, 396 insertions(+), 73 deletions(-) create mode 100644 radio/src/telemetry/crossfire.cpp create mode 100644 radio/src/telemetry/crossfire.h diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index 31dfafc44..548c7f21d 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -407,11 +407,22 @@ if(CPU_FAMILY STREQUAL STM32) STM32_USB_Device_Library/Core/src/usbd_ioreq.c STM32_USB_Device_Library/Core/src/usbd_req.c ) - set(FIRMWARE_TARGET_SRC ${FIRMWARE_TARGET_SRC} usb_bsp.c usbd_desc.c usbd_usr.cpp) + set(FIRMWARE_TARGET_SRC + ${FIRMWARE_TARGET_SRC} + usb_bsp.c + usbd_desc.c + usbd_usr.cpp + ) if(USB STREQUAL SERIAL) add_definitions(-DUSB_SERIAL) - set(FIRMWARE_TARGET_SRC ${FIRMWARE_TARGET_SRC} usbd_cdc.cpp) - set(STM32USB_SRC ${STM32USB_SRC} STM32_USB_Device_Library/Class/cdc/src/usbd_cdc_core.c) + set(FIRMWARE_TARGET_SRC + ${FIRMWARE_TARGET_SRC} + usbd_cdc.cpp + ) + set(STM32USB_SRC + ${STM32USB_SRC} + STM32_USB_Device_Library/Class/cdc/src/usbd_cdc_core.c + ) elseif(USB STREQUAL MASSSTORAGE) add_definitions(-DUSB_MASS_STORAGE) set(STM32USB_SRC @@ -421,13 +432,22 @@ if(CPU_FAMILY STREQUAL STM32) STM32_USB_Device_Library/Class/msc/src/usbd_msc_bot.c STM32_USB_Device_Library/Class/msc/src/usbd_msc_core.c ) - set(FIRMWARE_TARGET_SRC ${FIRMWARE_TARGET_SRC} usbd_storage_msd.cpp) + set(FIRMWARE_TARGET_SRC + ${FIRMWARE_TARGET_SRC} + usbd_storage_msd.cpp + ) else() add_definitions(-DUSB_JOYSTICK) - set(FIRMWARE_TARGET_SRC ${FIRMWARE_TARGET_SRC} usbd_hid_joystick.c) + set(FIRMWARE_TARGET_SRC + ${FIRMWARE_TARGET_SRC} + usbd_hid_joystick.c + ) endif() if(GVARS) - set(GUI_SRC ${GUI_SRC} menu_model_gvars.cpp) + set(GUI_SRC + ${GUI_SRC} + menu_model_gvars.cpp + ) endif() set(FIRMWARE_SRC ${FIRMWARE_SRC} @@ -436,12 +456,22 @@ if(CPU_FAMILY STREQUAL STM32) targets/taranis/configure_pins.cpp ) foreach(FILE ${STM32LIB_SRC}) - set(FIRMWARE_SRC ${FIRMWARE_SRC} ${STM32LIB_DIR}/${FILE}) + set(FIRMWARE_SRC + ${FIRMWARE_SRC} + ${STM32LIB_DIR}/${FILE} + ) endforeach() foreach(FILE ${STM32USB_SRC}) - set(FIRMWARE_SRC ${FIRMWARE_SRC} ${STM32USB_DIR}/${FILE}) + set(FIRMWARE_SRC + ${FIRMWARE_SRC} + ${STM32USB_DIR}/${FILE} + ) endforeach() - set(SRC ${SRC} sbus.cpp) + set(SRC + ${SRC} + sbus.cpp + telemetry/crossfire.cpp + ) endif() if(ARCH STREQUAL ARM) diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index 55ede0d44..499160814 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -346,6 +346,7 @@ enum TelemetryUnit { UNIT_PERCENT, UNIT_MAH, UNIT_WATTS, + UNIT_MILLIWATTS, UNIT_DB, UNIT_RPMS, UNIT_G, @@ -473,7 +474,7 @@ enum TelemetryUnit { UNIT_SECONDS, UNIT_RPMS, UNIT_G, - UNIT_HDG, + UNIT_HDG }; #endif diff --git a/radio/src/targets/common_avr/telemetry_driver.cpp b/radio/src/targets/common_avr/telemetry_driver.cpp index da3ebbdfc..3fa60635c 100644 --- a/radio/src/targets/common_avr/telemetry_driver.cpp +++ b/radio/src/targets/common_avr/telemetry_driver.cpp @@ -18,7 +18,7 @@ * GNU General Public License for more details. */ -#include "../../opentx.h" +#include "opentx.h" #if defined(FRSKY) @@ -33,9 +33,6 @@ void telemetryEnableRx(void) UCSRB_N(TLM_USART) |= (1 << RXCIE_N(TLM_USART)); // enable Interrupt } -void processFrskyTelemetryData(uint8_t data); -extern uint8_t frskyRxBufferCount; // TODO not driver, change name - ISR(USART_RX_vect_N(TLM_USART)) { uint8_t stat; @@ -79,7 +76,7 @@ ISR(USART_RX_vect_N(TLM_USART)) if (stat & ((1 << FE_N(TLM_USART)) | (1 << DOR_N(TLM_USART)) | (1 << UPE_N(TLM_USART)))) { // discard buffer and start fresh on any comms error - frskyRxBufferCount = 0; + telemetryRxBufferCount = 0; } else { processFrskyTelemetryData(data); diff --git a/radio/src/telemetry/crossfire.cpp b/radio/src/telemetry/crossfire.cpp new file mode 100644 index 000000000..130462ca6 --- /dev/null +++ b/radio/src/telemetry/crossfire.cpp @@ -0,0 +1,141 @@ +/* + * Copyright (C) OpenTX + * + * Based on code named + * th9x - http://code.google.com/p/th9x + * er9x - http://code.google.com/p/er9x + * gruvin9x - http://code.google.com/p/gruvin9x + * + * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include "opentx.h" + +struct CrossfireSensor { + const uint8_t id; + const uint8_t subId; + const char * name; + const TelemetryUnit unit; + const uint8_t prec; +}; + +const CrossfireSensor crossfireSensors[] = { + {LINK_STATS_ID, 0, ZSTR_RX_RSSI1, UNIT_DB, 0}, + {LINK_STATS_ID, 1, ZSTR_RX_RSSI2, UNIT_DB, 0}, + {LINK_STATS_ID, 2, ZSTR_RX_QUALITY, UNIT_PERCENT, 0}, + {LINK_STATS_ID, 3, ZSTR_RX_SNR, UNIT_DB, 0}, + {LINK_STATS_ID, 4, ZSTR_ANTENNA, UNIT_RAW, 0}, + {LINK_STATS_ID, 5, ZSTR_RF_MODE, UNIT_RAW, 0}, + {LINK_STATS_ID, 6, ZSTR_TX_POWER, UNIT_MILLIWATTS, 0}, + {LINK_STATS_ID, 7, ZSTR_TX_RSSI, UNIT_DB, 0}, + {LINK_STATS_ID, 8, ZSTR_TX_QUALITY, UNIT_PERCENT, 0}, + {LINK_STATS_ID, 9, ZSTR_TX_SNR, UNIT_DB, 0}, + { 0, 0, NULL, UNIT_RAW, 0} // sentinel +}; + +const CrossfireSensor * getCrossfireSensor(uint8_t id, uint8_t subId=0) +{ + const CrossfireSensor * result = NULL; + for (const CrossfireSensor * sensor = crossfireSensors; sensor->id; sensor++) { + if (id == sensor->id && subId == sensor->subId) { + result = sensor; + break; + } + } + return result; +} + +void processCrossfireTelemetryFrame(uint8_t id, uint8_t subId, uint32_t value) +{ + const CrossfireSensor * sensor = getCrossfireSensor(id, subId); + TelemetryUnit unit = UNIT_RAW; + uint8_t precision = 0; + if (sensor) { + unit = sensor->unit; + precision = sensor->prec; + } + setTelemetryValue(TELEM_PROTO_CROSSFIRE, id, 0, subId, value, unit, precision); +} + +bool checkCrossfireTelemetryFrameCRC() +{ + // uint8_t length = telemetryRxBuffer[1]; + return true; +} + +void processCrossfireTelemetryFrame() +{ + if (!checkCrossfireTelemetryFrameCRC()) { + return; + } + + uint8_t id = telemetryRxBuffer[2]; + switch(id) { + case LINK_STATS_ID: + for (int i=0; i<10; i++) { + processCrossfireTelemetryFrame(id, i, telemetryRxBuffer[3+i]); + } + break; + } +} + +void processCrossfireTelemetryData(uint8_t data) +{ + if (telemetryRxBufferCount == 0 && data != 0x00) { + return; + } + + if (telemetryRxBufferCount == 1 && (data < || data > TELEMETRY_RX_PACKET_SIZE-2)) { + telemetryRxBufferCount = 0; + return; + } + + if (telemetryRxBufferCount < TELEMETRY_RX_PACKET_SIZE) { + telemetryRxBuffer[telemetryRxBufferCount++] = data; + } + else { + TRACE("processCrossfirePacket(): length error "); + DUMP(telemetryRxBuffer, TELEMETRY_RX_PACKET_SIZE); + telemetryRxBufferCount = 0; + } + + if (telemetryRxBufferCount > 4) { + uint8_t length = telemetryRxBuffer[1]; + if (length + 2 == telemetryRxBufferCount) { + processCrossfireTelemetryFrame(); + telemetryRxBufferCount = 0; + } + } +} + +void crossfireSetDefault(int index, uint8_t id, uint8_t subId) +{ + TelemetrySensor & telemetrySensor = g_model.telemetrySensors[index]; + + telemetrySensor.id = id; + telemetrySensor.instance = subId; + + const CrossfireSensor * sensor = getCrossfireSensor(id, subId); + if (sensor) { + TelemetryUnit unit = sensor->unit; + uint8_t prec = min(2, sensor->prec); + telemetrySensor.init(sensor->name, unit, prec); + if (id == LINK_STATS_ID) { + telemetrySensor.logs = true; + } + } + else { + telemetrySensor.init(id); + } + + storageDirty(EE_MODEL); +} \ No newline at end of file diff --git a/radio/src/telemetry/crossfire.h b/radio/src/telemetry/crossfire.h new file mode 100644 index 000000000..5fa88a513 --- /dev/null +++ b/radio/src/telemetry/crossfire.h @@ -0,0 +1,29 @@ +/* + * Copyright (C) OpenTX + * + * Based on code named + * th9x - http://code.google.com/p/th9x + * er9x - http://code.google.com/p/er9x + * gruvin9x - http://code.google.com/p/gruvin9x + * + * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef _CROSSFIRE_H_ +#define _CROSSFIRE_H_ + +#define LINK_STATS_ID 0x14 + +void processCrossfireTelemetryData(uint8_t data); +void crossfireSetDefault(int index, uint8_t id, uint8_t subId); + +#endif // _CROSSFIRE_H_ diff --git a/radio/src/telemetry/frsky.cpp b/radio/src/telemetry/frsky.cpp index 345002f56..b6f8faf9d 100644 --- a/radio/src/telemetry/frsky.cpp +++ b/radio/src/telemetry/frsky.cpp @@ -20,9 +20,6 @@ #include "opentx.h" -uint8_t frskyRxBuffer[FRSKY_RX_PACKET_SIZE]; // Receive buffer. 9 bytes (full packet), worst case 18 bytes with byte-stuffing (+1) -uint8_t frskyRxBufferCount = 0; - #if !defined(CPUARM) uint8_t frskyTxBuffer[FRSKY_TX_PACKET_SIZE]; uint8_t frskyTxBufferCount = 0; @@ -39,6 +36,18 @@ extern uint8_t TrotCount; extern uint8_t TezRotary; #endif +// Receive buffer state machine state enum +enum FrSkyDataState { + STATE_DATA_IDLE, + STATE_DATA_START, + STATE_DATA_IN_FRAME, + STATE_DATA_XOR, +#if defined(TELEMETREZ) + STATE_DATA_PRIVATE_LEN, + STATE_DATA_PRIVATE_VALUE +#endif +}; + NOINLINE void processFrskyTelemetryData(uint8_t data) { static uint8_t dataState = STATE_DATA_IDLE; @@ -72,12 +81,12 @@ NOINLINE void processFrskyTelemetryData(uint8_t data) if (data == START_STOP) { if (IS_FRSKY_SPORT_PROTOCOL()) { dataState = STATE_DATA_IN_FRAME ; - frskyRxBufferCount = 0; + telemetryRxBufferCount = 0; } } else { - if (frskyRxBufferCount < FRSKY_RX_PACKET_SIZE) { - frskyRxBuffer[frskyRxBufferCount++] = data; + if (telemetryRxBufferCount < TELEMETRY_RX_PACKET_SIZE) { + telemetryRxBuffer[telemetryRxBufferCount++] = data; } dataState = STATE_DATA_IN_FRAME; } @@ -90,30 +99,30 @@ NOINLINE void processFrskyTelemetryData(uint8_t data) else if (data == START_STOP) { if (IS_FRSKY_SPORT_PROTOCOL()) { dataState = STATE_DATA_IN_FRAME ; - frskyRxBufferCount = 0; + telemetryRxBufferCount = 0; } else { // end of frame detected - frskyDProcessPacket(frskyRxBuffer); + frskyDProcessPacket(telemetryRxBuffer); dataState = STATE_DATA_IDLE; } break; } - else if (frskyRxBufferCount < FRSKY_RX_PACKET_SIZE) { - frskyRxBuffer[frskyRxBufferCount++] = data; + else if (telemetryRxBufferCount < TELEMETRY_RX_PACKET_SIZE) { + telemetryRxBuffer[telemetryRxBufferCount++] = data; } break; case STATE_DATA_XOR: - if (frskyRxBufferCount < FRSKY_RX_PACKET_SIZE) { - frskyRxBuffer[frskyRxBufferCount++] = data ^ STUFF_MASK; + if (telemetryRxBufferCount < TELEMETRY_RX_PACKET_SIZE) { + telemetryRxBuffer[telemetryRxBufferCount++] = data ^ STUFF_MASK; } dataState = STATE_DATA_IN_FRAME; break; case STATE_DATA_IDLE: if (data == START_STOP) { - frskyRxBufferCount = 0; + telemetryRxBufferCount = 0; dataState = STATE_DATA_START; } #if defined(TELEMETREZ) @@ -155,8 +164,8 @@ NOINLINE void processFrskyTelemetryData(uint8_t data) } // switch #if defined(FRSKY_SPORT) - if (IS_FRSKY_SPORT_PROTOCOL() && frskyRxBufferCount >= FRSKY_SPORT_PACKET_SIZE) { - processSportPacket(frskyRxBuffer); + if (IS_FRSKY_SPORT_PROTOCOL() && telemetryRxBufferCount >= FRSKY_SPORT_PACKET_SIZE) { + processSportPacket(telemetryRxBuffer); dataState = STATE_DATA_IDLE; } #endif diff --git a/radio/src/telemetry/frsky.h b/radio/src/telemetry/frsky.h index 2ede667a1..3c98da665 100644 --- a/radio/src/telemetry/frsky.h +++ b/radio/src/telemetry/frsky.h @@ -388,20 +388,6 @@ enum AlarmLevel { #define BYTESTUFF 0x7d #define STUFF_MASK 0x20 -// Receive buffer state machine state enum -enum FrSkyDataState { - STATE_DATA_IDLE, - STATE_DATA_START, - STATE_DATA_IN_FRAME, - STATE_DATA_XOR, -#if defined(TELEMETREZ) - STATE_DATA_PRIVATE_LEN, - STATE_DATA_PRIVATE_VALUE -#endif -}; - -#define FRSKY_RX_PACKET_SIZE 19 - #if defined(CPUARM) #define frskySendAlarms() #else @@ -453,6 +439,7 @@ enum TelemetryProtocol { TELEM_PROTO_FRSKY_D, TELEM_PROTO_FRSKY_SPORT, + TELEM_PROTO_CROSSFIRE, }; enum TelemAnas { @@ -496,23 +483,6 @@ void frskyUpdateCells(); void processFrskyTelemetryData(uint8_t data); -#if defined(PCBTARANIS) - inline uint8_t modelTelemetryProtocol() - { -#if defined(CROSSFIRE) - if (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_CROSSFIRE) - return PROTOCOL_PULSES_CROSSFIRE; -#endif - if (g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM) - return g_model.telemetryProtocol; - else - return PROTOCOL_FRSKY_SPORT; - } - #define MODEL_TELEMETRY_PROTOCOL() modelTelemetryProtocol() -#elif defined(CPUARM) - #define MODEL_TELEMETRY_PROTOCOL() g_model.telemetryProtocol -#endif - #if defined(LUA) struct LuaTelemetryValue { diff --git a/radio/src/telemetry/telemetry.cpp b/radio/src/telemetry/telemetry.cpp index 70e58474f..da756c6ef 100644 --- a/radio/src/telemetry/telemetry.cpp +++ b/radio/src/telemetry/telemetry.cpp @@ -21,6 +21,8 @@ #include "opentx.h" uint8_t telemetryStreaming = 0; +uint8_t telemetryRxBuffer[TELEMETRY_RX_PACKET_SIZE]; // Receive buffer. 9 bytes (full packet), worst case 18 bytes with byte-stuffing (+1) +uint8_t telemetryRxBufferCount = 0; #if defined(WS_HOW_HIGH) uint8_t wshhStreaming = 0; @@ -60,6 +62,10 @@ lcdint_t applyChannelRatio(source_t channel, lcdint_t val) #if defined(CPUSTM32) void processTelemetryData(uint8_t data) { +#if defined(CROSSFIRE) + if (telemetryProtocol == PROTOCOL_PULSES_CROSSFIRE) + processCrossfireTelemetryData(data); +#endif processFrskyTelemetryData(data); } #endif diff --git a/radio/src/telemetry/telemetry.h b/radio/src/telemetry/telemetry.h index 7ceb1e218..d14f4f0e7 100644 --- a/radio/src/telemetry/telemetry.h +++ b/radio/src/telemetry/telemetry.h @@ -21,7 +21,7 @@ #ifndef _TELEMETRY_H_ #define _TELEMETRY_H_ -#if defined (FRSKY) +#if defined(FRSKY) // FrSky Telemetry #include "frsky.h" #elif defined(JETI) @@ -38,6 +38,10 @@ #include "mavlink.h" #endif +#if defined(CROSSFIRE) + #include "crossfire.h" +#endif + extern uint8_t telemetryStreaming; // >0 (true) == data is streaming in. 0 = no data detected for some time #if defined(WS_HOW_HIGH) @@ -55,6 +59,10 @@ enum TelemetryStates { extern uint8_t telemetryState; #endif +#define TELEMETRY_RX_PACKET_SIZE 19 // 9 bytes (full packet), worst case 18 bytes with byte-stuffing (+1) +extern uint8_t telemetryRxBuffer[TELEMETRY_RX_PACKET_SIZE]; +extern uint8_t telemetryRxBufferCount; + #if defined(CPUARM) #define TELEMETRY_VALUE_TIMER_CYCLE 200 /*20 seconds*/ #define TELEMETRY_VALUE_OLD_THRESHOLD 150 /*15 seconds*/ @@ -113,6 +121,23 @@ extern uint8_t telemetryProtocol; #define IS_FRSKY_SPORT_PROTOCOL() (false) #endif +#if defined(CPUSTM32) +inline uint8_t modelTelemetryProtocol() +{ +#if defined(CROSSFIRE) + if (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_CROSSFIRE) + return PROTOCOL_PULSES_CROSSFIRE; +#endif + if (g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM) + return g_model.telemetryProtocol; + else + return PROTOCOL_FRSKY_SPORT; +} +#define MODEL_TELEMETRY_PROTOCOL() modelTelemetryProtocol() +#elif defined(CPUARM) +#define MODEL_TELEMETRY_PROTOCOL() g_model.telemetryProtocol +#endif + #if defined(CPUARM) #include "telemetry_sensors.h" #endif diff --git a/radio/src/telemetry/telemetry_sensors.cpp b/radio/src/telemetry/telemetry_sensors.cpp index 294c2a951..292bba9f3 100644 --- a/radio/src/telemetry/telemetry_sensors.cpp +++ b/radio/src/telemetry/telemetry_sensors.cpp @@ -529,6 +529,11 @@ void setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t subId, u case TELEM_PROTO_FRSKY_D: frskyDSetDefault(index, id); break; +#endif +#if defined(CROSSFIRE) + case TELEM_PROTO_CROSSFIRE: + crossfireSetDefault(index, id, instance); + break; #endif default: return; diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index 84d5f6b50..451443b5a 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -376,7 +376,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\010") #define TR_VUNITSSYSTEM TR("Metr.\0""Imper.", "Metrické""Imperial") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -1160,3 +1160,13 @@ #define ZSTR_BATT2_CONSUMPTION "RB2C" #define ZSTR_RB_STATE "RBS" #define ZSTR_CHANS_STATE "RBCS" +#define ZSTR_RX_RSSI1 "1RSS" +#define ZSTR_RX_RSSI2 "2RSS" +#define ZSTR_RX_QUALITY "RQly" +#define ZSTR_RX_SNR "RSNR" +#define ZSTR_ANTENNA "ANT" +#define ZSTR_RF_MODE "RFMD" +#define ZSTR_TX_POWER "TPWR" +#define ZSTR_TX_RSSI "TRSS" +#define ZSTR_TX_QUALITY "TQly" +#define ZSTR_TX_SNR "TSNR" \ No newline at end of file diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index 5cfabed45..30c5c5e87 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -383,7 +383,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\012") #define TR_VUNITSSYSTEM TR("Metrik""Imper.", "Metrisch\0 ""Imperial\0 ") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -1163,3 +1163,13 @@ #define ZSTR_BATT2_CONSUMPTION "RB2C" #define ZSTR_RB_STATE "RBS" #define ZSTR_CHANS_STATE "RBCS" +#define ZSTR_RX_RSSI1 "1RSS" +#define ZSTR_RX_RSSI2 "2RSS" +#define ZSTR_RX_QUALITY "RQly" +#define ZSTR_RX_SNR "RSNR" +#define ZSTR_ANTENNA "ANT" +#define ZSTR_RF_MODE "RFMD" +#define ZSTR_TX_POWER "TPWR" +#define ZSTR_TX_RSSI "TRSS" +#define ZSTR_TX_QUALITY "TQly" +#define ZSTR_TX_SNR "TSNR" \ No newline at end of file diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 8a6e47b40..62f4fe04f 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -378,7 +378,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\010") #define TR_VUNITSSYSTEM TR("Metric""Imper.", "Metric\0 ""Imperial") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -1178,3 +1178,13 @@ #define ZSTR_BATT2_CONSUMPTION "RB2C" #define ZSTR_RB_STATE "RBS" #define ZSTR_CHANS_STATE "RBCS" +#define ZSTR_RX_RSSI1 "1RSS" +#define ZSTR_RX_RSSI2 "2RSS" +#define ZSTR_RX_QUALITY "RQly" +#define ZSTR_RX_SNR "RSNR" +#define ZSTR_ANTENNA "ANT" +#define ZSTR_RF_MODE "RFMD" +#define ZSTR_TX_POWER "TPWR" +#define ZSTR_TX_RSSI "TRSS" +#define ZSTR_TX_QUALITY "TQly" +#define ZSTR_TX_SNR "TSNR" \ No newline at end of file diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index 09df0af3a..6ea0b7a14 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -376,7 +376,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\010") #define TR_VUNITSSYSTEM TR("Metric""Imper.", "Metric\0 ""Imperial") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -1120,3 +1120,13 @@ #define ZSTR_BATT2_CONSUMPTION "RB2C" #define ZSTR_RB_STATE "RBS" #define ZSTR_CHANS_STATE "RBCS" +#define ZSTR_RX_RSSI1 "1RSS" +#define ZSTR_RX_RSSI2 "2RSS" +#define ZSTR_RX_QUALITY "RQly" +#define ZSTR_RX_SNR "RSNR" +#define ZSTR_ANTENNA "ANT" +#define ZSTR_RF_MODE "RFMD" +#define ZSTR_TX_POWER "TPWR" +#define ZSTR_TX_RSSI "TRSS" +#define ZSTR_TX_QUALITY "TQly" +#define ZSTR_TX_SNR "TSNR" \ No newline at end of file diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index a1f96a504..18f76acfd 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -376,7 +376,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\010") #define TR_VUNITSSYSTEM TR("Metric""Imper.", "Metric\0 ""Imperial") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -1120,3 +1120,13 @@ #define ZSTR_BATT2_CONSUMPTION "RB2C" #define ZSTR_RB_STATE "RBS" #define ZSTR_CHANS_STATE "RBCS" +#define ZSTR_RX_RSSI1 "1RSS" +#define ZSTR_RX_RSSI2 "2RSS" +#define ZSTR_RX_QUALITY "RQly" +#define ZSTR_RX_SNR "RSNR" +#define ZSTR_ANTENNA "ANT" +#define ZSTR_RF_MODE "RFMD" +#define ZSTR_TX_POWER "TPWR" +#define ZSTR_TX_RSSI "TRSS" +#define ZSTR_TX_QUALITY "TQly" +#define ZSTR_TX_SNR "TSNR" \ No newline at end of file diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index ec285a68e..476f1be43 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -378,7 +378,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\012") #define TR_VUNITSSYSTEM TR("Métr.\0""Impér.", "Métriques\0""Impériales") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -1150,3 +1150,13 @@ #define ZSTR_BATT2_CONSUMPTION "RB2C" #define ZSTR_RB_STATE "RBS" #define ZSTR_CHANS_STATE "RBCS" +#define ZSTR_RX_RSSI1 "1RSS" +#define ZSTR_RX_RSSI2 "2RSS" +#define ZSTR_RX_QUALITY "RQly" +#define ZSTR_RX_SNR "RSNR" +#define ZSTR_ANTENNA "ANT" +#define ZSTR_RF_MODE "RFMD" +#define ZSTR_TX_POWER "TPWR" +#define ZSTR_TX_RSSI "TRSS" +#define ZSTR_TX_QUALITY "TQly" +#define ZSTR_TX_SNR "TSNR" \ No newline at end of file diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index d3079fa3d..65c11566f 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -378,7 +378,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\011") #define TR_VUNITSSYSTEM TR("Metric""Imper.", "Metriche\0""Imperiali") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -1159,3 +1159,13 @@ #define ZSTR_BATT2_CONSUMPTION "RB2C" #define ZSTR_RB_STATE "RBS" #define ZSTR_CHANS_STATE "RBCS" +#define ZSTR_RX_RSSI1 "1RSS" +#define ZSTR_RX_RSSI2 "2RSS" +#define ZSTR_RX_QUALITY "RQly" +#define ZSTR_RX_SNR "RSNR" +#define ZSTR_ANTENNA "ANT" +#define ZSTR_RF_MODE "RFMD" +#define ZSTR_TX_POWER "TPWR" +#define ZSTR_TX_RSSI "TRSS" +#define ZSTR_TX_QUALITY "TQly" +#define ZSTR_TX_SNR "TSNR" \ No newline at end of file diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index 239b26ed2..b08f7e28f 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -379,7 +379,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\010") #define TR_VUNITSSYSTEM TR("Metrs.""Engels", "Metrisch\0 ""Engels\0 ") #define LEN_VTELEMUNIT "\003" -#define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" +#define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -1174,3 +1174,13 @@ #define ZSTR_BATT2_CONSUMPTION "RB2C" #define ZSTR_RB_STATE "RBS" #define ZSTR_CHANS_STATE "RBCS" +#define ZSTR_RX_RSSI1 "1RSS" +#define ZSTR_RX_RSSI2 "2RSS" +#define ZSTR_RX_QUALITY "RQly" +#define ZSTR_RX_SNR "RSNR" +#define ZSTR_ANTENNA "ANT" +#define ZSTR_RF_MODE "RFMD" +#define ZSTR_TX_POWER "TPWR" +#define ZSTR_TX_RSSI "TRSS" +#define ZSTR_TX_QUALITY "TQly" +#define ZSTR_TX_SNR "TSNR" \ No newline at end of file diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 1114573f5..6260b1593 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -380,7 +380,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\010") /*8 decimal*/ #define TR_VUNITSSYSTEM TR("Metr. ""Imper.", "Metryczn""Imperial") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -1161,3 +1161,13 @@ #define ZSTR_BATT2_CONSUMPTION "RB2C" #define ZSTR_RB_STATE "RBS" #define ZSTR_CHANS_STATE "RBCS" +#define ZSTR_RX_RSSI1 "1RSS" +#define ZSTR_RX_RSSI2 "2RSS" +#define ZSTR_RX_QUALITY "RQly" +#define ZSTR_RX_SNR "RSNR" +#define ZSTR_ANTENNA "ANT" +#define ZSTR_RF_MODE "RFMD" +#define ZSTR_TX_POWER "TPWR" +#define ZSTR_TX_RSSI "TRSS" +#define ZSTR_TX_QUALITY "TQly" +#define ZSTR_TX_SNR "TSNR" \ No newline at end of file diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 3ea2ba070..3b3bd29c9 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -370,7 +370,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\010") #define TR_VUNITSSYSTEM TR("Metric""Imper.", "Metric\0 ""Imperial") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -1114,3 +1114,13 @@ #define ZSTR_BATT2_CONSUMPTION "RB2C" #define ZSTR_RB_STATE "RBS" #define ZSTR_CHANS_STATE "RBCS" +#define ZSTR_RX_RSSI1 "1RSS" +#define ZSTR_RX_RSSI2 "2RSS" +#define ZSTR_RX_QUALITY "RQly" +#define ZSTR_RX_SNR "RSNR" +#define ZSTR_ANTENNA "ANT" +#define ZSTR_RF_MODE "RFMD" +#define ZSTR_TX_POWER "TPWR" +#define ZSTR_TX_RSSI "TRSS" +#define ZSTR_TX_QUALITY "TQly" +#define ZSTR_TX_SNR "TSNR" \ No newline at end of file diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index 7718c2671..54cde89ab 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -376,7 +376,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\010") #define TR_VUNITSSYSTEM TR("Metri.""Imper.", "Metriska""Imperial") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -1175,3 +1175,13 @@ #define ZSTR_BATT2_CONSUMPTION "RB2C" #define ZSTR_RB_STATE "RBS" #define ZSTR_CHANS_STATE "RBCS" +#define ZSTR_RX_RSSI1 "1RSS" +#define ZSTR_RX_RSSI2 "2RSS" +#define ZSTR_RX_QUALITY "RQly" +#define ZSTR_RX_SNR "RSNR" +#define ZSTR_ANTENNA "ANT" +#define ZSTR_RF_MODE "RFMD" +#define ZSTR_TX_POWER "TPWR" +#define ZSTR_TX_RSSI "TRSS" +#define ZSTR_TX_QUALITY "TQly" +#define ZSTR_TX_SNR "TSNR" \ No newline at end of file