From e6370ebb2a74dedd77694e2c89669246328d1670 Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Wed, 2 Jul 2014 12:24:19 +0200 Subject: [PATCH 1/3] United setting of cell voltage in frskySetCellVoltage() --- radio/src/telemetry/frsky.cpp | 21 +++++++++++++++++ radio/src/telemetry/frsky.h | 6 +++++ radio/src/telemetry/frsky_d.cpp | 10 +------- radio/src/telemetry/frsky_sport.cpp | 36 +++-------------------------- 4 files changed, 31 insertions(+), 42 deletions(-) diff --git a/radio/src/telemetry/frsky.cpp b/radio/src/telemetry/frsky.cpp index aad4cc96d..185f1dd1a 100644 --- a/radio/src/telemetry/frsky.cpp +++ b/radio/src/telemetry/frsky.cpp @@ -607,3 +607,24 @@ void telemetryInit(void) // we don't reset the telemetry here as we would also reset the consumption after model load } + + +#if defined(CPUARM) +void frskySetCellVoltage(uint8_t battnumber, uint16_t cellVolts) { +#elif defined(FRSKY_HUB) +void frskySetCellVoltage(uint8_t battnumber, uint8_t cellVolts) { +#endif + frskyData.hub.cellVolts[battnumber] = cellVolts; + if (!frskyData.hub.minCellVolts || cellVolts> 8) + ((frskyData.hub.volts & 0x000F) << 8))) / 10); #endif - frskyData.hub.cellVolts[battnumber] = cellVolts; - if (!frskyData.hub.minCellVolts || cellVolts> 8) + ((frskyData.hub.volts & 0x000F) << 8))) / 10); #endif - frskyData.hub.cellVolts[battnumber] = cellVolts; - if (!frskyData.hub.minCellVolts || cellVolts= CELLS_FIRST_ID && appId <= CELLS_LAST_ID) { uint32_t cells = SPORT_DATA_U32(packet); uint8_t battnumber = cells & 0xF; - uint32_t minCell, minCellNum; - - //TODO: Use reported total voltages (bits 4-7)? - frskyData.hub.cellVolts[battnumber] = ((cells & 0x000FFF00) >> 8) / 5; - frskyData.hub.cellVolts[battnumber+1] = ((cells & 0xFFF00000) >> 20) / 5; - - if (frskyData.hub.cellsCount < battnumber+2) - frskyData.hub.cellsCount = battnumber+2; - if (frskyData.hub.cellVolts[battnumber+1] == 0) - frskyData.hub.cellsCount--; - - if ((frskyData.hub.cellVolts[battnumber] < frskyData.hub.cellVolts[battnumber+1]) || (frskyData.hub.cellVolts[battnumber+1] == 0)) { - minCell = frskyData.hub.cellVolts[battnumber]; - minCellNum = battnumber; - } - else { - minCell = frskyData.hub.cellVolts[battnumber+1]; - minCellNum = battnumber+1; - } - - if (!frskyData.hub.minCellVolts || minCell < frskyData.hub.minCellVolts || minCellNum==frskyData.hub.minCellIdx) { - frskyData.hub.minCellIdx = minCellNum; - frskyData.hub.minCellVolts = minCell; - if (!frskyData.hub.minCell || frskyData.hub.minCellVolts> 8) / 5); + frskySetCellVoltage(battnumber+1, (uint16_t) ((cells & 0xFFF00000) >> 20) / 5); } break; } From 038365e6397c4cf0f87824115c98d54dcc8fc160 Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Wed, 2 Jul 2014 12:47:02 +0200 Subject: [PATCH 2/3] Introduced frskyCellVoltage_t type and united code with frskyUpdateCells() --- radio/src/telemetry/frsky.cpp | 18 ++++++++++++------ radio/src/telemetry/frsky.h | 7 +++++-- radio/src/telemetry/frsky_d.cpp | 14 +------------- radio/src/telemetry/frsky_sport.cpp | 18 +++--------------- 4 files changed, 21 insertions(+), 36 deletions(-) diff --git a/radio/src/telemetry/frsky.cpp b/radio/src/telemetry/frsky.cpp index 185f1dd1a..363bb3d73 100644 --- a/radio/src/telemetry/frsky.cpp +++ b/radio/src/telemetry/frsky.cpp @@ -608,12 +608,7 @@ void telemetryInit(void) // we don't reset the telemetry here as we would also reset the consumption after model load } - -#if defined(CPUARM) -void frskySetCellVoltage(uint8_t battnumber, uint16_t cellVolts) { -#elif defined(FRSKY_HUB) -void frskySetCellVoltage(uint8_t battnumber, uint8_t cellVolts) { -#endif +void frskySetCellVoltage(uint8_t battnumber, frskyCellVoltage_t cellVolts) { frskyData.hub.cellVolts[battnumber] = cellVolts; if (!frskyData.hub.minCellVolts || cellVolts Cell number + Cell voltage + uint8_t battnumber = ((frskyData.hub.volts & 0x00F0) >> 4); + if (battnumber < 12) { + if (frskyData.hub.cellsCount < battnumber+1) { + frskyData.hub.cellsCount = battnumber+1; + } + frskyCellVoltage_t cellVolts = (frskyCellVoltage_t) (((((frskyData.hub.volts & 0xFF00) >> 8) + ((frskyData.hub.volts & 0x000F) << 8))) / (5*TELEMETRY_CELL_VOLTAGE_MUTLIPLIER)); + frskySetCellVoltage(battnumber, cellVolts); + } +} diff --git a/radio/src/telemetry/frsky.h b/radio/src/telemetry/frsky.h index a2afca3bf..a4dca8893 100644 --- a/radio/src/telemetry/frsky.h +++ b/radio/src/telemetry/frsky.h @@ -462,9 +462,12 @@ void telemetryInit(void); void telemetryInterrupt10ms(void); #if defined(CPUARM) -void frskySetCellVoltage(uint8_t battnumber, uint16_t cellVolts); + typedef uint16_t frskyCellVoltage_t; #elif defined(FRSKY_HUB) -void frskySetCellVoltage(uint8_t battnumber, uint8_t cellVolts); + typedef uint16_t frskyCellVoltage_t; #endif +void frskySetCellVoltage(uint8_t battnumber, frskyCellVoltage_t cellVolts); +void frskyUpdateCells(void); + #endif diff --git a/radio/src/telemetry/frsky_d.cpp b/radio/src/telemetry/frsky_d.cpp index 8c9d2da9d..b136a543a 100644 --- a/radio/src/telemetry/frsky_d.cpp +++ b/radio/src/telemetry/frsky_d.cpp @@ -216,19 +216,7 @@ void parseTelemHubByte(uint8_t byte) case offsetof(FrskySerialData, volts): { - // Voltage => Cell number + Cell voltage - uint8_t battnumber = ((frskyData.hub.volts & 0x00F0) >> 4); - if (battnumber < 12) { - if (frskyData.hub.cellsCount < battnumber+1) { - frskyData.hub.cellsCount = battnumber+1; - } -#if defined(CPUARM) - uint16_t cellVolts = (uint16_t)(((((frskyData.hub.volts & 0xFF00) >> 8) + ((frskyData.hub.volts & 0x000F) << 8))) / 5); -#else - uint8_t cellVolts = (uint8_t)(((((frskyData.hub.volts & 0xFF00) >> 8) + ((frskyData.hub.volts & 0x000F) << 8))) / 10); -#endif - frskySetCellVoltage(battnumber, cellVolts); - } + frskyUpdateCells(); break; } diff --git a/radio/src/telemetry/frsky_sport.cpp b/radio/src/telemetry/frsky_sport.cpp index 2603d9da7..d591cf7b7 100644 --- a/radio/src/telemetry/frsky_sport.cpp +++ b/radio/src/telemetry/frsky_sport.cpp @@ -237,19 +237,7 @@ void processHubPacket(uint8_t id, uint16_t value) case VOLTS_ID: { - // Voltage => Cell number + Cell voltage - uint8_t battnumber = ((frskyData.hub.volts & 0x00F0) >> 4); - if (battnumber < 12) { - if (frskyData.hub.cellsCount < battnumber+1) { - frskyData.hub.cellsCount = battnumber+1; - } -#if defined(CPUARM) - uint16_t cellVolts = (uint16_t)(((((frskyData.hub.volts & 0xFF00) >> 8) + ((frskyData.hub.volts & 0x000F) << 8))) / 5); -#else - uint8_t cellVolts = (uint8_t)(((((frskyData.hub.volts & 0xFF00) >> 8) + ((frskyData.hub.volts & 0x000F) << 8))) / 10); -#endif - frskySetCellVoltage(battnumber, cellVolts); - } + frskyUpdateCells(); break; } @@ -467,8 +455,8 @@ void frskySportProcessPacket(uint8_t *packet) else if (appId >= CELLS_FIRST_ID && appId <= CELLS_LAST_ID) { uint32_t cells = SPORT_DATA_U32(packet); uint8_t battnumber = cells & 0xF; - frskySetCellVoltage(battnumber, (uint16_t) ((cells & 0x000FFF00) >> 8) / 5); - frskySetCellVoltage(battnumber+1, (uint16_t) ((cells & 0xFFF00000) >> 20) / 5); + frskySetCellVoltage(battnumber, (frskyCellVoltage_t) ((cells & 0x000FFF00) >> 8) / 5); + frskySetCellVoltage(battnumber+1, (frskyCellVoltage_t) ((cells & 0xFFF00000) >> 20) / 5); } break; } From 7e758ce7add661005cb9af1de83a7d5abc75ecfb Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Wed, 2 Jul 2014 16:08:31 +0200 Subject: [PATCH 3/3] Wrong type corrected and cosmetic fixes --- radio/src/telemetry/frsky.cpp | 6 ++++-- radio/src/telemetry/frsky.h | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/radio/src/telemetry/frsky.cpp b/radio/src/telemetry/frsky.cpp index 363bb3d73..f1c158cbd 100644 --- a/radio/src/telemetry/frsky.cpp +++ b/radio/src/telemetry/frsky.cpp @@ -608,7 +608,8 @@ void telemetryInit(void) // we don't reset the telemetry here as we would also reset the consumption after model load } -void frskySetCellVoltage(uint8_t battnumber, frskyCellVoltage_t cellVolts) { +void frskySetCellVoltage(uint8_t battnumber, frskyCellVoltage_t cellVolts) +{ frskyData.hub.cellVolts[battnumber] = cellVolts; if (!frskyData.hub.minCellVolts || cellVolts Cell number + Cell voltage uint8_t battnumber = ((frskyData.hub.volts & 0x00F0) >> 4); if (battnumber < 12) { diff --git a/radio/src/telemetry/frsky.h b/radio/src/telemetry/frsky.h index a4dca8893..11175a4db 100644 --- a/radio/src/telemetry/frsky.h +++ b/radio/src/telemetry/frsky.h @@ -464,7 +464,7 @@ void telemetryInterrupt10ms(void); #if defined(CPUARM) typedef uint16_t frskyCellVoltage_t; #elif defined(FRSKY_HUB) - typedef uint16_t frskyCellVoltage_t; + typedef uint8_t frskyCellVoltage_t; #endif void frskySetCellVoltage(uint8_t battnumber, frskyCellVoltage_t cellVolts);