From fddbe300a1cb906f3179abd4ccf98773a8b3dd88 Mon Sep 17 00:00:00 2001 From: bsongis Date: Tue, 4 Sep 2012 08:54:27 +0000 Subject: [PATCH] Issue 127 fixed --- src/board_ersky9x.cpp | 2 -- src/frsky.cpp | 77 +++++++++++++++++++++++++++---------------- src/frsky.h | 12 ++++--- src/open9x.cpp | 12 ++++--- 4 files changed, 64 insertions(+), 39 deletions(-) diff --git a/src/board_ersky9x.cpp b/src/board_ersky9x.cpp index e3faa29d3..2a69abb1d 100644 --- a/src/board_ersky9x.cpp +++ b/src/board_ersky9x.cpp @@ -707,8 +707,6 @@ void board_init() // Debug variable // uint32_t both_on ; - WDT->WDT_MR = 0x3FFFAFFF ; // Disable watchdog - MATRIX->CCFG_SYSIO |= 0x000000F0L ; // Disable syspins, enable B4,5,6,7 PMC->PMC_PCER0 = (1< frskyData.hub.maxAltitude) + frskyData.hub.maxAltitude = frskyData.hub.baroAltitude_bp; + if (frskyData.hub.baroAltitude_bp < frskyData.hub.minAltitude) + frskyData.hub.minAltitude = frskyData.hub.baroAltitude_bp; +} +#endif + +#if defined(FRSKY_HUB) void extractLatitudeLongitude(uint32_t * latitude, uint32_t * longitude) { div_t qr = div(frskyData.hub.gpsLatitude_bp, 100); @@ -134,16 +154,6 @@ typedef enum { TS_XOR = 0x80 // decode stuffed byte } TS_STATE; -uint16_t getChannelRatio(uint8_t channel) -{ - return (uint16_t)g_model.frsky.channels[channel].ratio << g_model.frsky.channels[channel].multiplier; -} - -int16_t applyChannelRatio(uint8_t channel, int16_t val) -{ - return ((int32_t)val+g_model.frsky.channels[channel].offset) * getChannelRatio(channel) * 2 / 51; -} - void evalVario(int16_t altitude_bp, uint16_t altitude_ap) { #if defined(VARIO) @@ -152,21 +162,13 @@ void evalVario(int16_t altitude_bp, uint16_t altitude_ap) if (varioAltitudeQueuePointer == VARIO_QUEUE_LENGTH) varioAltitudeQueuePointer = 0; frskyData.hub.varioAltitudeQueuePointer = varioAltitudeQueuePointer; - frskyData.hub.varioSpeed -= frskyData.hub.varioAltitudeQueue[varioAltitudeQueuePointer] ; + frskyData.varioSpeed -= frskyData.hub.varioAltitudeQueue[varioAltitudeQueuePointer] ; frskyData.hub.varioAltitudeQueue[varioAltitudeQueuePointer] = varioAltitude_cm - frskyData.hub.varioAltitude_cm; frskyData.hub.varioAltitude_cm = varioAltitude_cm; - frskyData.hub.varioSpeed += frskyData.hub.varioAltitudeQueue[varioAltitudeQueuePointer] ; + frskyData.varioSpeed += frskyData.hub.varioAltitudeQueue[varioAltitudeQueuePointer] ; #endif } -void checkMinMaxAltitude() -{ - if (frskyData.hub.baroAltitude_bp > frskyData.hub.maxAltitude) - frskyData.hub.maxAltitude = frskyData.hub.baroAltitude_bp; - if (frskyData.hub.baroAltitude_bp < frskyData.hub.minAltitude) - frskyData.hub.minAltitude = frskyData.hub.baroAltitude_bp; -} - void parseTelemHubByte(uint8_t byte) { static int8_t structPos; @@ -337,7 +339,7 @@ void parseTelemHubByte(uint8_t byte) } #endif -#ifdef WS_HOW_HIGH +#if defined(WS_HOW_HIGH) void parseTelemWSHowHighByte(uint8_t byte) { if (frskyUsrStreaming < (FRSKY_TIMEOUT10ms*3 - 10)) { @@ -379,7 +381,7 @@ void processFrskyPacket(uint8_t *packet) frskyData.rssi[1].set(packet[4] / 2); frskyStreaming = FRSKY_TIMEOUT10ms; // reset counter only if valid frsky packets are being detected if (g_model.frsky.varioSource >= VARIO_SOURCE_A1) { - frskyData.hub.varioSpeed = applyChannelRatio(g_model.frsky.varioSource - VARIO_SOURCE_A1, frskyData.analog[g_model.frsky.varioSource - VARIO_SOURCE_A1].value); + frskyData.varioSpeed = applyChannelRatio(g_model.frsky.varioSource - VARIO_SOURCE_A1, frskyData.analog[g_model.frsky.varioSource - VARIO_SOURCE_A1].value); } break; #if defined(FRSKY_HUB) || defined (WS_HOW_HIGH) @@ -697,19 +699,30 @@ NOINLINE void check_frsky() #endif uint16_t voltage = 0; /* unit: 1/10 volts */ + +#if defined(FRSKY_HUB) for (uint8_t i=0; i 0) { +#if defined(FRSKY_HUB) if (field == TELEM_ACC) { lcd_putsLeft(7*FH+1, STR_ACCEL); lcd_outdezNAtt(4*FW, 7*FH+1, frskyData.hub.accelX, LEFT|PREC2); @@ -1232,6 +1246,7 @@ void menuProcFrsky(uint8_t event) displayGpsTime(); return; } +#endif } else { displayRssiLine(); @@ -1278,8 +1293,10 @@ void menuProcFrsky(uint8_t event) threshold = getRssiAlarmValue(source-TELEM_RSSI_TX); else if (source <= TELEM_A2) threshold = g_model.frsky.channels[source-TELEM_A1].alarms_value[0]; +#if defined(FRSKY_HUB) else threshold = convertTelemValue(source, barsThresholds[source-TELEM_ALT]); +#endif int16_t barMin = convertTelemValue(source, bmin); int16_t barMax = convertTelemValue(source, bmax); if (threshold) { @@ -1324,12 +1341,14 @@ void menuProcFrsky(uint8_t event) displayVoltageScreenLine(2*FH, g_model.frsky.voltsSource); other = !g_model.frsky.voltsSource; break; +#if defined(FRSKY_HUB) case 2: putsTelemetryChannel(3*FW+6*FW+4, 2*FH, TELEM_VFAS-1, frskyData.hub.vfas, DBLSIZE); break; case 3: putsTelemetryChannel(3*FW+6*FW+4, 2*FH, TELEM_CELLS_SUM-1, frskyData.hub.cellsSum, DBLSIZE); break; +#endif } if (g_model.frsky.currentSource) { @@ -1339,9 +1358,11 @@ void menuProcFrsky(uint8_t event) case 2: displayVoltageScreenLine(4*FH, g_model.frsky.currentSource-1); break; +#if defined(FRSKY_HUB) case 3: putsTelemetryChannel(3*FW+6*FW+4, 4*FH, TELEM_CURRENT-1, frskyData.hub.current, DBLSIZE); break; +#endif } putsTelemetryChannel(4, 6*FH, TELEM_POWER-1, frskyData.power, LEFT|DBLSIZE); @@ -1352,7 +1373,7 @@ void menuProcFrsky(uint8_t event) if (!other) displayVoltageScreenLine(6*FH, 1); } -#ifdef FRSKY_HUB +#if defined(FRSKY_HUB) // Cells voltage if (frskyData.hub.cellsCount > 0) { uint8_t y = 1*FH; @@ -1367,7 +1388,7 @@ void menuProcFrsky(uint8_t event) displayRssiLine(); } -#ifdef FRSKY_HUB +#if defined(FRSKY_HUB) else if (s_frsky_view == e_frsky_after_flight) { uint8_t line=1*FH+1; if (g_model.frsky.usrProto == USR_PROTO_FRSKY_HUB) { diff --git a/src/frsky.h b/src/frsky.h index 314ec49d7..56764c4eb 100644 --- a/src/frsky.h +++ b/src/frsky.h @@ -136,7 +136,6 @@ PACK(struct FrskyHubData { // end of FrSky Hub data uint16_t gpsDistance; int16_t gpsAltitudeOffset; - int16_t varioSpeed; uint8_t varioAltitudeQueuePointer; // circular-buffer pointer uint8_t minCellIdx; uint16_t cellsSum; @@ -146,10 +145,12 @@ PACK(struct FrskyHubData { #elif defined(WS_HOW_HIGH) -struct FrskyHubData { - uint16_t baroAltitude; // 0..9,999 meters +PACK(struct FrskyHubData { + int16_t baroAltitude_bp; // 0..9,999 meters int16_t baroAltitudeOffset; -}; + int16_t minAltitude; + int16_t maxAltitude; +}); #endif @@ -162,9 +163,10 @@ struct FrskyData { uint16_t currentConsumption; uint16_t currentPrescale; uint16_t power; + int16_t varioSpeed; }; -#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH) +#if defined(FRSKY_HUB) enum BarThresholdIdx { THLD_ALT, THLD_RPM, diff --git a/src/open9x.cpp b/src/open9x.cpp index 805b91d68..910dc80fa 100644 --- a/src/open9x.cpp +++ b/src/open9x.cpp @@ -549,7 +549,7 @@ int16_t getValue(uint8_t i) else if(i 0 ? false : true; if (s == CS_VOFS) { y = convertTelemValue(cs->v1-(CSW_CHOUT_BASE+NUM_CHNOUT), 128+cs->v2); +#if defined(FRSKY_HUB) uint8_t idx = cs->v1-CSW_CHOUT_BASE-NUM_CHNOUT-TELEM_ALT; if (idx < THLD_MAX) { // Fill the threshold array barsThresholds[idx] = 128 + cs->v2; } +#endif } else { y = cs->v2; @@ -1688,6 +1690,10 @@ void testFunc() #ifdef SIMU printf("testFunc\n"); fflush(stdout); #endif + + while(1) { + + } } #endif @@ -3745,10 +3751,8 @@ int main(void) uint8_t mcusr = MCUCSR; MCUCSR = 0; #endif -#if !defined(PCBARM) - // TODO test WDT on ARM + wdt_disable(); -#endif board_init();