From dafdcaf593fd0471eb66eda1ba361c572bf9298e Mon Sep 17 00:00:00 2001 From: wimalopaan Date: Sat, 18 Jul 2026 19:03:10 +0200 Subject: [PATCH 1/2] first try of multi-instance BATT crsf sensor --- radio/src/telemetry/crossfire.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/radio/src/telemetry/crossfire.cpp b/radio/src/telemetry/crossfire.cpp index 5b7508a59a7..d9ce11d0023 100644 --- a/radio/src/telemetry/crossfire.cpp +++ b/radio/src/telemetry/crossfire.cpp @@ -120,13 +120,13 @@ const CrossfireSensor & getCrossfireSensor(uint8_t id, uint8_t subId) return crossfireSensors[UNKNOWN_INDEX]; } -void processCrossfireTelemetryValue(uint8_t index, int32_t value) +void processCrossfireTelemetryValue(const uint8_t index, const int32_t value, const uint8_t sensorId = 0) { if (!TELEMETRY_STREAMING()) return; const CrossfireSensor & sensor = crossfireSensors[index]; - setTelemetryValue(PROTOCOL_TELEMETRY_CROSSFIRE, sensor.id, 0, sensor.subId, + setTelemetryValue(PROTOCOL_TELEMETRY_CROSSFIRE, sensor.id + (sensorId << 8) , 0, sensor.subId, value, sensor.unit, sensor.precision); } @@ -363,14 +363,22 @@ void processCrossfireTelemetryFrame(uint8_t module, uint8_t* rxBuffer, break; case BATTERY_ID: + { + uint8_t sensorID = 0; + if (rxBufferCount > 12) { + if (getCrossfireTelemetryValue<1>(11, value, rxBuffer)) { + sensorID = value; + } + } if (getCrossfireTelemetryValue<2>(3, value, rxBuffer)) - processCrossfireTelemetryValue(BATT_VOLTAGE_INDEX, value); + processCrossfireTelemetryValue(BATT_VOLTAGE_INDEX, value, sensorID); if (getCrossfireTelemetryValue<2>(5, value, rxBuffer)) - processCrossfireTelemetryValue(BATT_CURRENT_INDEX, value); + processCrossfireTelemetryValue(BATT_CURRENT_INDEX, value, sensorID); if (getCrossfireTelemetryValue<3>(7, value, rxBuffer)) - processCrossfireTelemetryValue(BATT_CAPACITY_INDEX, value); + processCrossfireTelemetryValue(BATT_CAPACITY_INDEX, value, sensorID); if (getCrossfireTelemetryValue<1>(10, value, rxBuffer)) - processCrossfireTelemetryValue(BATT_REMAINING_INDEX, value); + processCrossfireTelemetryValue(BATT_REMAINING_INDEX, value, sensorID); + } break; case ATTITUDE_ID: From c50459f56769753cae2034afc59205ab97d5d41f Mon Sep 17 00:00:00 2001 From: wimalopaan Date: Sat, 18 Jul 2026 21:06:57 +0200 Subject: [PATCH 2/2] fixed coderabbit comments --- radio/src/telemetry/crossfire.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/radio/src/telemetry/crossfire.cpp b/radio/src/telemetry/crossfire.cpp index d9ce11d0023..d762684528e 100644 --- a/radio/src/telemetry/crossfire.cpp +++ b/radio/src/telemetry/crossfire.cpp @@ -365,19 +365,19 @@ void processCrossfireTelemetryFrame(uint8_t module, uint8_t* rxBuffer, case BATTERY_ID: { uint8_t sensorID = 0; - if (rxBufferCount > 12) { - if (getCrossfireTelemetryValue<1>(11, value, rxBuffer)) { - sensorID = value; - } + if (crsfPayloadLen > 10) { + if (getCrossfireTelemetryValue<1>(11, value, rxBuffer)) { + sensorID = value; + } } if (getCrossfireTelemetryValue<2>(3, value, rxBuffer)) - processCrossfireTelemetryValue(BATT_VOLTAGE_INDEX, value, sensorID); + processCrossfireTelemetryValue(BATT_VOLTAGE_INDEX, value, sensorID); if (getCrossfireTelemetryValue<2>(5, value, rxBuffer)) - processCrossfireTelemetryValue(BATT_CURRENT_INDEX, value, sensorID); + processCrossfireTelemetryValue(BATT_CURRENT_INDEX, value, sensorID); if (getCrossfireTelemetryValue<3>(7, value, rxBuffer)) - processCrossfireTelemetryValue(BATT_CAPACITY_INDEX, value, sensorID); + processCrossfireTelemetryValue(BATT_CAPACITY_INDEX, value, sensorID); if (getCrossfireTelemetryValue<1>(10, value, rxBuffer)) - processCrossfireTelemetryValue(BATT_REMAINING_INDEX, value, sensorID); + processCrossfireTelemetryValue(BATT_REMAINING_INDEX, value, sensorID); } break;