From 9997b8c599dc9fb6129086a86494f983d1d3d5f9 Mon Sep 17 00:00:00 2001 From: "romolo.manfredini@gmail.com" Date: Fri, 17 Feb 2012 23:37:30 +0000 Subject: [PATCH] Frsky V2 HUB protocol variometer fix --- src/frsky.cpp | 16 +++++++++------- src/frsky.h | 7 ++++--- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/frsky.cpp b/src/frsky.cpp index ccde410cc..a9a262b0a 100644 --- a/src/frsky.cpp +++ b/src/frsky.cpp @@ -176,14 +176,16 @@ void parseTelemHubByte(uint8_t byte) if ((uint8_t)structPos == offsetof(FrskyHubData, volts)) { // Voltage => Cell number + Cell voltage - uint8_t battnumber = (frskyHubData.volts & 0x00F0) >> 4; - if (frskyHubData.cellsCount < battnumber+1) { - frskyHubData.cellsCount = battnumber+1; + uint8_t battnumber = ((frskyHubData.volts & 0x00F0) >> 4); + if (battnumber<12) { + if (frskyHubData.cellsCount < battnumber+1) { + frskyHubData.cellsCount = battnumber+1; + } + uint8_t cellVolts = (uint8_t)(((((frskyHubData.volts & 0xFF00) >> 8) + ((frskyHubData.volts & 0x000F) << 8)))/10); + frskyHubData.cellVolts[battnumber] = cellVolts; + if (!frskyHubData.minCellVolts || cellVolts < frskyHubData.minCellVolts) + frskyHubData.minCellVolts = cellVolts; } - uint8_t cellVolts = (uint8_t)(((((frskyHubData.volts & 0xFF00) >> 8) + ((frskyHubData.volts & 0x000F) << 8)))/10); - frskyHubData.cellVolts[battnumber] = cellVolts; - if (!frskyHubData.minCellVolts || cellVolts < frskyHubData.minCellVolts) - frskyHubData.minCellVolts = cellVolts; } state = TS_IDLE; diff --git a/src/frsky.h b/src/frsky.h index a2d6924c1..0cee5793d 100644 --- a/src/frsky.h +++ b/src/frsky.h @@ -95,9 +95,9 @@ struct FrskyHubData { uint16_t gpsLongitude_ap; uint16_t gpsLatitude_ap; uint16_t gpsCourse_ap; - uint32_t pilotLatitude; // 2 spares reused - uint32_t pilotLongitude; // 2 spares reused - uint16_t maxGpsSpeed; // spare reused + uint32_t pilotLatitude; // 2 spares reused + uint32_t pilotLongitude; // 2 spares reused + uint16_t baroAltitude_bp; // spare reused uint16_t gpsLongitudeEW; // East/West uint16_t gpsLatitudeNS; // North/South int16_t accelX; // 1/256th gram (-8g ~ +8g) @@ -109,6 +109,7 @@ struct FrskyHubData { // 17 spares uint16_t volts_bp; uint16_t volts_ap; + uint16_t maxGpsSpeed; // spare reused }; #elif defined(WS_HOW_HIGH)