Merge pull request #1429 from opentx/projectkk2glider/frsky_refactoring

Projectkk2glider/frsky refactoring
This commit is contained in:
Bertrand Songis
2014-07-02 16:36:54 +02:00
4 changed files with 42 additions and 66 deletions
+29
View File
@@ -607,3 +607,32 @@ 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)
{
frskyData.hub.cellVolts[battnumber] = cellVolts;
if (!frskyData.hub.minCellVolts || cellVolts<frskyData.hub.minCellVolts || battnumber==frskyData.hub.minCellIdx) {
//update minimum cell voltage (Cell) and its cell number
frskyData.hub.minCellIdx = battnumber;
frskyData.hub.minCellVolts = cellVolts;
#if defined(CPUARM)
if (!frskyData.hub.minCell || frskyData.hub.minCellVolts<frskyData.hub.minCell) {
//update all time minimum cell voltage (Cell-)
frskyData.hub.minCell = frskyData.hub.minCellVolts;
}
#endif
}
}
void frskyUpdateCells(void)
{
// 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;
}
frskyCellVoltage_t cellVolts = (frskyCellVoltage_t) (((((frskyData.hub.volts & 0xFF00) >> 8) + ((frskyData.hub.volts & 0x000F) << 8))) / (5*TELEMETRY_CELL_VOLTAGE_MUTLIPLIER));
frskySetCellVoltage(battnumber, cellVolts);
}
}
+9
View File
@@ -461,4 +461,13 @@ void telemetryReset();
void telemetryInit(void);
void telemetryInterrupt10ms(void);
#if defined(CPUARM)
typedef uint16_t frskyCellVoltage_t;
#elif defined(FRSKY_HUB)
typedef uint8_t frskyCellVoltage_t;
#endif
void frskySetCellVoltage(uint8_t battnumber, frskyCellVoltage_t cellVolts);
void frskyUpdateCells(void);
#endif
+1 -21
View File
@@ -216,27 +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
frskyData.hub.cellVolts[battnumber] = cellVolts;
if (!frskyData.hub.minCellVolts || cellVolts<frskyData.hub.minCellVolts || battnumber==frskyData.hub.minCellIdx) {
frskyData.hub.minCellIdx = battnumber;
frskyData.hub.minCellVolts = cellVolts;
#if defined(CPUARM)
if (!frskyData.hub.minCell || frskyData.hub.minCellVolts<frskyData.hub.minCell)
frskyData.hub.minCell = frskyData.hub.minCellVolts;
#endif
}
}
frskyUpdateCells();
break;
}
+3 -45
View File
@@ -237,25 +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
frskyData.hub.cellVolts[battnumber] = cellVolts;
if (!frskyData.hub.minCellVolts || cellVolts<frskyData.hub.minCellVolts || battnumber==frskyData.hub.minCellIdx) {
frskyData.hub.minCellIdx = battnumber;
frskyData.hub.minCellVolts = cellVolts;
if (!frskyData.hub.minCell || frskyData.hub.minCellVolts<frskyData.hub.minCell)
frskyData.hub.minCell = frskyData.hub.minCellVolts;
}
}
frskyUpdateCells();
break;
}
@@ -473,32 +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;
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<frskyData.hub.minCell)
frskyData.hub.minCell = frskyData.hub.minCellVolts;
}
frskySetCellVoltage(battnumber, (frskyCellVoltage_t) ((cells & 0x000FFF00) >> 8) / 5);
frskySetCellVoltage(battnumber+1, (frskyCellVoltage_t) ((cells & 0xFFF00000) >> 20) / 5);
}
break;
}