From 4de76302861c102cf3da5027d4acd2f077d94824 Mon Sep 17 00:00:00 2001 From: 3djc Date: Sat, 14 Nov 2020 13:28:13 +0100 Subject: [PATCH] Restore text sensors and prevent overflow (#8093) * Fix FM sensor --- radio/src/telemetry/crossfire.cpp | 7 +++---- radio/src/telemetry/telemetry_sensors.cpp | 1 + radio/src/telemetry/telemetry_sensors.h | 3 ++- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/radio/src/telemetry/crossfire.cpp b/radio/src/telemetry/crossfire.cpp index 6c876b7b7..f7f647c5f 100644 --- a/radio/src/telemetry/crossfire.cpp +++ b/radio/src/telemetry/crossfire.cpp @@ -178,10 +178,9 @@ void processCrossfireTelemetryFrame() case FLIGHT_MODE_ID: { const CrossfireSensor & sensor = crossfireSensors[FLIGHT_MODE_INDEX]; - for (int i=0; i(16, telemetryRxBuffer[1]-2); i+=4) { - uint32_t value = *((uint32_t *)&telemetryRxBuffer[3+i]); - setTelemetryValue(PROTOCOL_TELEMETRY_CROSSFIRE, sensor.id, 0, sensor.subId, value, sensor.unit, i); - } + auto textLength = min(16, telemetryRxBuffer[1] - 1); + telemetryRxBuffer[textLength] = '\0'; + setTelemetryText(PROTOCOL_TELEMETRY_CROSSFIRE, sensor.id, 0, sensor.subId, (const char *)telemetryRxBuffer + 3); break; } diff --git a/radio/src/telemetry/telemetry_sensors.cpp b/radio/src/telemetry/telemetry_sensors.cpp index 398c15961..e88807062 100644 --- a/radio/src/telemetry/telemetry_sensors.cpp +++ b/radio/src/telemetry/telemetry_sensors.cpp @@ -204,6 +204,7 @@ void TelemetryItem::setValue(const TelemetrySensor & sensor, int32_t val, uint32 } } else if (unit == UNIT_TEXT) { + // Should be handled at telemetry protocol level return; } else { diff --git a/radio/src/telemetry/telemetry_sensors.h b/radio/src/telemetry/telemetry_sensors.h index e2fbcd498..8a44ae547 100644 --- a/radio/src/telemetry/telemetry_sensors.h +++ b/radio/src/telemetry/telemetry_sensors.h @@ -26,6 +26,7 @@ constexpr int8_t TELEMETRY_SENSOR_TIMEOUT_UNAVAILABLE = -2; constexpr int8_t TELEMETRY_SENSOR_TIMEOUT_OLD = -1; constexpr int8_t TELEMETRY_SENSOR_TIMEOUT_START = 125; // * 160ms = 20s +constexpr uint8_t TELEMETRY_SENSOR_TEXT_LENGTH = 16; class TelemetryItem { @@ -74,7 +75,7 @@ class TelemetryItem // pilot latitude is stored in max // distFromEarthAxis is stored in value } gps; - char text[16]; + char text[TELEMETRY_SENSOR_TEXT_LENGTH]; }; TelemetryItem()