From fdf4d4926f17eb936df962e63061217779050a9f Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 28 Feb 2018 11:34:32 +0100 Subject: [PATCH 1/9] POC for review and discussion --- radio/src/lua/api_general.cpp | 6 ++++++ radio/src/mixer.cpp | 3 +++ radio/src/opentx.h | 2 +- radio/src/telemetry/telemetry_sensors.cpp | 10 ++++++++++ radio/src/telemetry/telemetry_sensors.h | 1 + 5 files changed, 21 insertions(+), 1 deletion(-) diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index b807906c7..658f95efb 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -218,6 +218,11 @@ static void luaPushCells(lua_State* L, TelemetrySensor & telemetrySensor, Teleme void luaGetValueAndPush(lua_State* L, int src) { + if(IS_FAI_FORBIDDEN(src)) { + lua_pushinteger(L, 0); + return; + } + getvalue_t value = getValue(src); // ignored for GPS, DATETIME, and CELLS if (src >= MIXSRC_FIRST_TELEM && src <= MIXSRC_LAST_TELEM) { @@ -587,6 +592,7 @@ or a name (string) of the source. @retval value current source value (number). Zero is returned for: * non-existing sources * for all telemetry source when the telemetry stream is not received + * far all non allowed sensors while FAI MODE is active @retval table GPS position is returned in a table: * `lat` (number) latitude, positive is North diff --git a/radio/src/mixer.cpp b/radio/src/mixer.cpp index 9eb1d6726..fbf37c0d4 100644 --- a/radio/src/mixer.cpp +++ b/radio/src/mixer.cpp @@ -448,6 +448,9 @@ getvalue_t getValue(mixsrc_t i) #if defined(CPUARM) else if (i <= MIXSRC_LAST_TELEM) { + if(IS_FAI_FORBIDDEN(i)) { + return 0; + } i -= MIXSRC_FIRST_TELEM; div_t qr = div(i, 3); TelemetryItem & telemetryItem = telemetryItems[qr.quot]; diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 9b8f2b22c..8a24314f8 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -231,7 +231,7 @@ #define IF_FAI_CHOICE(x) #endif -#define IS_FAI_FORBIDDEN(idx) (IS_FAI_ENABLED() && idx >= MIXSRC_FIRST_TELEM) +#define IS_FAI_FORBIDDEN(idx) (IS_FAI_ENABLED() && isFaiForbidden(idx)) #if defined(BLUETOOTH) #if defined(X9E) && !defined(USEHORUSBT) diff --git a/radio/src/telemetry/telemetry_sensors.cpp b/radio/src/telemetry/telemetry_sensors.cpp index 52c5ea02a..aa7cddb93 100644 --- a/radio/src/telemetry/telemetry_sensors.cpp +++ b/radio/src/telemetry/telemetry_sensors.cpp @@ -23,6 +23,16 @@ TelemetryItem telemetryItems[MAX_TELEMETRY_SENSORS]; uint8_t allowNewSensors; +bool isFaiForbidden(source_t idx) { + TelemetrySensor * sensor = &g_model.telemetrySensors[idx-MIXSRC_FIRST_TELEM]; + if (sensor->id == RSSI_ID) { + return false; + } + else { + return true; + } +} + // TODO in maths uint32_t getDistFromEarthAxis(int32_t latitude) { diff --git a/radio/src/telemetry/telemetry_sensors.h b/radio/src/telemetry/telemetry_sensors.h index 91ae90468..78e9e48ad 100644 --- a/radio/src/telemetry/telemetry_sensors.h +++ b/radio/src/telemetry/telemetry_sensors.h @@ -136,5 +136,6 @@ class TelemetryItem extern TelemetryItem telemetryItems[MAX_TELEMETRY_SENSORS]; extern uint8_t allowNewSensors; +bool isFaiForbidden(source_t idx); #endif // _TELEMETRY_SENSORS_H_ From b8cb379234add3248f8a66d3bdf811cfe119285d Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 28 Feb 2018 12:30:06 +0100 Subject: [PATCH 2/9] Display telem screen is now ok since we control values --- radio/src/gui/128x64/view_main.cpp | 3 +-- radio/src/gui/212x64/view_main.cpp | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/radio/src/gui/128x64/view_main.cpp b/radio/src/gui/128x64/view_main.cpp index ff921e577..3077b3f16 100644 --- a/radio/src/gui/128x64/view_main.cpp +++ b/radio/src/gui/128x64/view_main.cpp @@ -420,8 +420,7 @@ void menuMainView(event_t event) case EVT_KEY_TELEMETRY: #if defined(TELEMETRY_FRSKY) - if (!IS_FAI_ENABLED()) - chainMenu(menuViewTelemetryFrsky); + chainMenu(menuViewTelemetryFrsky); #elif defined(TELEMETRY_JETI) JETI_EnableRXD(); // enable JETI-Telemetry reception chainMenu(menuViewTelemetryJeti); diff --git a/radio/src/gui/212x64/view_main.cpp b/radio/src/gui/212x64/view_main.cpp index 30f46d6e4..66f7084fd 100644 --- a/radio/src/gui/212x64/view_main.cpp +++ b/radio/src/gui/212x64/view_main.cpp @@ -481,8 +481,7 @@ void menuMainView(event_t event) break; case EVT_KEY_LONG(KEY_PAGE): - if (!IS_FAI_ENABLED()) - chainMenu(menuViewTelemetryFrsky); + chainMenu(menuViewTelemetryFrsky); killEvents(event); break; From af7183151c6883d5404ef8005794dfc8e565d8b9 Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 28 Feb 2018 12:32:47 +0100 Subject: [PATCH 3/9] Restore access from LUA since values are controled --- radio/src/lua/api_general.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index 658f95efb..17803e88a 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -218,11 +218,6 @@ static void luaPushCells(lua_State* L, TelemetrySensor & telemetrySensor, Teleme void luaGetValueAndPush(lua_State* L, int src) { - if(IS_FAI_FORBIDDEN(src)) { - lua_pushinteger(L, 0); - return; - } - getvalue_t value = getValue(src); // ignored for GPS, DATETIME, and CELLS if (src >= MIXSRC_FIRST_TELEM && src <= MIXSRC_LAST_TELEM) { From 90ebc1a8be00e6bf6b810a95bda611aa49526a83 Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 28 Feb 2018 12:58:55 +0100 Subject: [PATCH 4/9] AVR compilation fix --- radio/src/opentx.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 8a24314f8..a748ced3f 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -231,7 +231,11 @@ #define IF_FAI_CHOICE(x) #endif -#define IS_FAI_FORBIDDEN(idx) (IS_FAI_ENABLED() && isFaiForbidden(idx)) +#if defined(CPUARM) + #define IS_FAI_FORBIDDEN(idx) (IS_FAI_ENABLED() && isFaiForbidden(idx)) +#else + #define IS_FAI_FORBIDDEN(idx) (IS_FAI_ENABLED() && idx >= MIXSRC_FIRST_TELEM) +#endif #if defined(BLUETOOTH) #if defined(X9E) && !defined(USEHORUSBT) From 3ea835117ac808e7b8e2a60fa425fb7b3533b2dc Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 28 Feb 2018 17:46:47 +0100 Subject: [PATCH 5/9] RxBt is allowed too --- radio/src/telemetry/telemetry_sensors.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/radio/src/telemetry/telemetry_sensors.cpp b/radio/src/telemetry/telemetry_sensors.cpp index aa7cddb93..a960779aa 100644 --- a/radio/src/telemetry/telemetry_sensors.cpp +++ b/radio/src/telemetry/telemetry_sensors.cpp @@ -24,11 +24,14 @@ TelemetryItem telemetryItems[MAX_TELEMETRY_SENSORS]; uint8_t allowNewSensors; bool isFaiForbidden(source_t idx) { - TelemetrySensor * sensor = &g_model.telemetrySensors[idx-MIXSRC_FIRST_TELEM]; + TelemetrySensor * sensor = &g_model.telemetrySensors[(idx-MIXSRC_FIRST_TELEM)/3]; if (sensor->id == RSSI_ID) { return false; } - else { + else if (sensor->id == BATT_ID) { + return false; + } + else{ return true; } } From fcf32c82ba23b420778616a266a3f17cf828b2e4 Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 28 Feb 2018 18:09:18 +0100 Subject: [PATCH 6/9] multi protocol --- radio/src/telemetry/telemetry_sensors.cpp | 32 ++++++++++++++++------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/radio/src/telemetry/telemetry_sensors.cpp b/radio/src/telemetry/telemetry_sensors.cpp index a960779aa..4f69771f5 100644 --- a/radio/src/telemetry/telemetry_sensors.cpp +++ b/radio/src/telemetry/telemetry_sensors.cpp @@ -23,17 +23,31 @@ TelemetryItem telemetryItems[MAX_TELEMETRY_SENSORS]; uint8_t allowNewSensors; -bool isFaiForbidden(source_t idx) { +bool isFaiForbidden(source_t idx) +{ TelemetrySensor * sensor = &g_model.telemetrySensors[(idx-MIXSRC_FIRST_TELEM)/3]; - if (sensor->id == RSSI_ID) { - return false; - } - else if (sensor->id == BATT_ID) { - return false; - } - else{ - return true; + + switch (telemetryProtocol) { + + case PROTOCOL_FRSKY_SPORT: + if (sensor->id == RSSI_ID) { + return false; + } + else if (sensor->id == BATT_ID) { + return false; + } + break; + + case PROTOCOL_FRSKY_D: + if (sensor->id == D_RSSI_ID) { + return false; + } + else if (sensor->id == D_A1_ID) { + return false; + } + break; } + return true; } // TODO in maths From 9e0d29db1a6443da6e6abcb04bd17cc1c556e42c Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 28 Feb 2018 19:11:46 +0100 Subject: [PATCH 7/9] Completely untested crossfire --- radio/src/telemetry/telemetry_sensors.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/radio/src/telemetry/telemetry_sensors.cpp b/radio/src/telemetry/telemetry_sensors.cpp index 4f69771f5..26c6cf7cb 100644 --- a/radio/src/telemetry/telemetry_sensors.cpp +++ b/radio/src/telemetry/telemetry_sensors.cpp @@ -28,7 +28,7 @@ bool isFaiForbidden(source_t idx) TelemetrySensor * sensor = &g_model.telemetrySensors[(idx-MIXSRC_FIRST_TELEM)/3]; switch (telemetryProtocol) { - + case PROTOCOL_FRSKY_SPORT: if (sensor->id == RSSI_ID) { return false; @@ -46,6 +46,19 @@ bool isFaiForbidden(source_t idx) return false; } break; + + case TELEM_PROTO_CROSSFIRE: + if (sensor->id == RX_RSSI1_INDEX) { + return false; + } + else if (sensor->id == RX_RSSI2_INDEX) { + return false; + } + else if (sensor->id == BATT_VOLTAGE_INDEX) { + return false; + } + break; + } return true; } From 09a391dbf4fe921b88f07e03da58a65303bab820 Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 28 Feb 2018 19:36:23 +0100 Subject: [PATCH 8/9] Crossfire compile fixes --- radio/src/telemetry/crossfire.cpp | 35 ---------------------- radio/src/telemetry/crossfire.h | 36 +++++++++++++++++++++++ radio/src/telemetry/telemetry_sensors.cpp | 3 +- 3 files changed, 38 insertions(+), 36 deletions(-) diff --git a/radio/src/telemetry/crossfire.cpp b/radio/src/telemetry/crossfire.cpp index b0ef34e7c..cd5823fd2 100644 --- a/radio/src/telemetry/crossfire.cpp +++ b/radio/src/telemetry/crossfire.cpp @@ -20,41 +20,6 @@ #include "opentx.h" -struct CrossfireSensor { - const uint8_t id; - const uint8_t subId; - const char * name; - const TelemetryUnit unit; - const uint8_t precision; -}; - -enum CrossfireSensorIndexes { - RX_RSSI1_INDEX, - RX_RSSI2_INDEX, - RX_QUALITY_INDEX, - RX_SNR_INDEX, - RX_ANTENNA_INDEX, - RF_MODE_INDEX, - TX_POWER_INDEX, - TX_RSSI_INDEX, - TX_QUALITY_INDEX, - TX_SNR_INDEX, - BATT_VOLTAGE_INDEX, - BATT_CURRENT_INDEX, - BATT_CAPACITY_INDEX, - GPS_LATITUDE_INDEX, - GPS_LONGITUDE_INDEX, - GPS_GROUND_SPEED_INDEX, - GPS_HEADING_INDEX, - GPS_ALTITUDE_INDEX, - GPS_SATELLITES_INDEX, - ATTITUDE_PITCH_INDEX, - ATTITUDE_ROLL_INDEX, - ATTITUDE_YAW_INDEX, - FLIGHT_MODE_INDEX, - UNKNOWN_INDEX, -}; - const CrossfireSensor crossfireSensors[] = { {LINK_ID, 0, ZSTR_RX_RSSI1, UNIT_DB, 0}, {LINK_ID, 1, ZSTR_RX_RSSI2, UNIT_DB, 0}, diff --git a/radio/src/telemetry/crossfire.h b/radio/src/telemetry/crossfire.h index b189ea202..321da7599 100644 --- a/radio/src/telemetry/crossfire.h +++ b/radio/src/telemetry/crossfire.h @@ -37,6 +37,42 @@ #define DEVICE_INFO_ID 0x29 #define REQUEST_SETTINGS_ID 0x2A + +struct CrossfireSensor { + const uint8_t id; + const uint8_t subId; + const char * name; + const TelemetryUnit unit; + const uint8_t precision; +}; + +enum CrossfireSensorIndexes { + RX_RSSI1_INDEX, + RX_RSSI2_INDEX, + RX_QUALITY_INDEX, + RX_SNR_INDEX, + RX_ANTENNA_INDEX, + RF_MODE_INDEX, + TX_POWER_INDEX, + TX_RSSI_INDEX, + TX_QUALITY_INDEX, + TX_SNR_INDEX, + BATT_VOLTAGE_INDEX, + BATT_CURRENT_INDEX, + BATT_CAPACITY_INDEX, + GPS_LATITUDE_INDEX, + GPS_LONGITUDE_INDEX, + GPS_GROUND_SPEED_INDEX, + GPS_HEADING_INDEX, + GPS_ALTITUDE_INDEX, + GPS_SATELLITES_INDEX, + ATTITUDE_PITCH_INDEX, + ATTITUDE_ROLL_INDEX, + ATTITUDE_YAW_INDEX, + FLIGHT_MODE_INDEX, + UNKNOWN_INDEX, +}; + void processCrossfireTelemetryData(uint8_t data); void crossfireSetDefault(int index, uint8_t id, uint8_t subId); bool isCrossfireOutputBufferAvailable(); diff --git a/radio/src/telemetry/telemetry_sensors.cpp b/radio/src/telemetry/telemetry_sensors.cpp index 26c6cf7cb..35a1d7e9a 100644 --- a/radio/src/telemetry/telemetry_sensors.cpp +++ b/radio/src/telemetry/telemetry_sensors.cpp @@ -47,6 +47,7 @@ bool isFaiForbidden(source_t idx) } break; +#if defined(CROSSFIRE) case TELEM_PROTO_CROSSFIRE: if (sensor->id == RX_RSSI1_INDEX) { return false; @@ -58,7 +59,7 @@ bool isFaiForbidden(source_t idx) return false; } break; - +#endif } return true; } From c8d9d185379322e6d1d22be34b0b8a6514204d1d Mon Sep 17 00:00:00 2001 From: 3djc Date: Fri, 2 Mar 2018 08:29:41 +0100 Subject: [PATCH 9/9] Fine tune --- radio/src/telemetry/telemetry_sensors.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/radio/src/telemetry/telemetry_sensors.cpp b/radio/src/telemetry/telemetry_sensors.cpp index 35a1d7e9a..36330f4fa 100644 --- a/radio/src/telemetry/telemetry_sensors.cpp +++ b/radio/src/telemetry/telemetry_sensors.cpp @@ -25,6 +25,10 @@ uint8_t allowNewSensors; bool isFaiForbidden(source_t idx) { + if (idx < MIXSRC_FIRST_TELEM) { + return false; + } + TelemetrySensor * sensor = &g_model.telemetrySensors[(idx-MIXSRC_FIRST_TELEM)/3]; switch (telemetryProtocol) { @@ -48,7 +52,7 @@ bool isFaiForbidden(source_t idx) break; #if defined(CROSSFIRE) - case TELEM_PROTO_CROSSFIRE: + case PROTOCOL_PULSES_CROSSFIRE: if (sensor->id == RX_RSSI1_INDEX) { return false; }