diff --git a/radio/src/telemetry/telemetry.cpp b/radio/src/telemetry/telemetry.cpp index ff7c37f34..ff8ad7fb0 100644 --- a/radio/src/telemetry/telemetry.cpp +++ b/radio/src/telemetry/telemetry.cpp @@ -71,6 +71,23 @@ void processTelemetryData(uint8_t data) processFrskyTelemetryData(data); } +void processGetHardwareInfoFrame(uint8_t module, uint8_t * frame) +{ + if (moduleSettings[module].mode != MODULE_MODE_GET_HARDWARE_INFO) { + return; + } + + uint8_t index = frame[3]; + if (index == 0xFF) { + reusableBuffer.hardware.modules[module].hw_version = *((uint32_t *)&frame[4]); + reusableBuffer.hardware.modules[module].sw_version = *((uint32_t *)&frame[8]); + } + else if (index < PXX2_MAX_RECEIVERS_PER_MODULE){ + reusableBuffer.hardware.modules[module].receivers[index].hw_version = *((uint32_t *)&frame[4]); + reusableBuffer.hardware.modules[module].receivers[index].sw_version = *((uint32_t *)&frame[8]); + } +} + void processRegisterFrame(uint8_t module, uint8_t * frame) { if (moduleSettings[module].mode != MODULE_MODE_REGISTER) { @@ -151,6 +168,10 @@ void processSpectrumFrame(uint8_t module, uint8_t * frame) void processRadioFrame(uint8_t module, uint8_t * frame) { switch (frame[2]) { + case PXX2_TYPE_ID_HW_INFO: + processGetHardwareInfoFrame(module, frame); + break; + case PXX2_TYPE_ID_REGISTER: processRegisterFrame(module, frame); break;