From 6b412ed2644e402a990a3474f79cf9e33b704b87 Mon Sep 17 00:00:00 2001 From: "bsongis@gmail.com" Date: Tue, 21 May 2013 18:35:59 +0000 Subject: [PATCH] [stock] Flash saving [stock] More code removed when GPS=NO [Taranis] Last EEPROM massstorage block (512 bytes) never written [Taranis] Values displayed near the gauges --- src/debug.cpp | 124 ++++++++++++----------- src/debug.h | 73 ++++++------- src/gui/menu_general.cpp | 8 +- src/gui/view_telemetry.cpp | 14 ++- src/lcd.h | 2 +- src/simpgmspace.h | 1 + src/targets/taranis/usbd_storage_msd.cpp | 33 +++--- src/telemetry/frsky.cpp | 49 ++++----- src/telemetry/frsky.h | 12 +-- 9 files changed, 166 insertions(+), 150 deletions(-) diff --git a/src/debug.cpp b/src/debug.cpp index 295778ba7..197605113 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -79,8 +79,8 @@ uint32_t Memaddmode ; void crlf() { - debugPutc( 13 ) ; - debugPutc( 10 ) ; + debugPutc( 13 ) ; + debugPutc( 10 ) ; } // Send a single 4 bit value to the RS232 port as a hex digit @@ -140,75 +140,77 @@ static void dispw_256( register uint32_t address, register uint32_t lines ) void debugTask(void* pdata) { uint8_t rxchar ; - crlf() ; - dispw_256( (uint32_t)USART3, 4 ) ; + + TRACE("DEBUG Task started"); + + crlf() ; + dispw_256( (uint32_t)USART3, 4 ) ; for (;;) { - while ( (USART3->SR & USART_SR_RXNE) == 0 ) CoTickDelay(5); // 10ms - rxchar = USART3->DR ; + rxchar = USART3->DR; - if ( Memaddmode ) - { - if ( ( rxchar >= 'a' ) && ( rxchar <= 'f' ) ) - { - rxchar -= 0x20 ; // toupper! - } - if ( ( ( rxchar >= '0' ) && ( rxchar <= '9' ) ) || ( ( rxchar >= 'A' ) && ( rxchar <= 'F' ) ) ) - { - debugPutc( rxchar ) ; - rxchar -= '0' ; - if ( rxchar > 9 ) - { - rxchar -= 7 ; - } - Mem_address <<= 4 ; - Mem_address |= rxchar ; - } - else if ( rxchar == 13 ) - { - crlf() ; - if ( Mem_address == 0 ) - { - Mem_address = Next_mem_address ; - } - dispw_256( Mem_address, 4 ) ; - Next_mem_address = Mem_address + 64 ; - Memaddmode = 0 ; - } - else if ( rxchar == 8 ) - { - debugPutc( rxchar ) ; - debugPutc( rxchar ) ; - debugPutc( rxchar ) ; - Mem_address >>= 4 ; - } - else if ( rxchar == 27 ) - { - crlf() ; - Memaddmode = 0 ; - } + if ( Memaddmode ) + { + if ( ( rxchar >= 'a' ) && ( rxchar <= 'f' ) ) + { + rxchar -= 0x20; // toupper! + } + if ( ( ( rxchar >= '0' ) && ( rxchar <= '9' ) ) || ( ( rxchar >= 'A' ) && ( rxchar <= 'F' ) ) ) + { + debugPutc( rxchar ); + rxchar -= '0'; + if ( rxchar > 9 ) + { + rxchar -= 7; + } + Mem_address <<= 4; + Mem_address |= rxchar; + } + else if ( rxchar == 13 ) + { + crlf(); + if ( Mem_address == 0 ) + { + Mem_address = Next_mem_address; + } + dispw_256( Mem_address, 4 ); + Next_mem_address = Mem_address + 64; + Memaddmode = 0; + } + else if ( rxchar == 8 ) + { + debugPutc( rxchar ); + debugPutc( rxchar ); + debugPutc( rxchar ); + Mem_address >>= 4; + } + else if ( rxchar == 27 ) + { + crlf(); + Memaddmode = 0; + } - } + } - if ( rxchar == '?' ) - { - Memaddmode = 1 ; - Mem_address = 0 ; - debugPutc( '>' ) ; - } + if ( rxchar == '?' ) + { + Memaddmode = 1; + Mem_address = 0; + debugPutc( '>' ); + } - if ( rxchar == 'm' ) - { - crlf() ; - p8hex( (uint32_t) &g_model.moduleData[0] ) ; - debugPutc( ' ' ) ; - p8hex( (uint32_t) &g_model.moduleData[1] ) ; - crlf() ; - } + if ( rxchar == 'm' ) + { + crlf(); + p8hex( (uint32_t) &g_model.moduleData[0] ); + debugPutc( ' ' ); + p8hex( (uint32_t) &g_model.moduleData[1] ); + crlf(); + } } } diff --git a/src/debug.h b/src/debug.h index d19aacaec..f259d4b11 100644 --- a/src/debug.h +++ b/src/debug.h @@ -43,28 +43,29 @@ #include - #define TRACE_DEBUG(...) { printf("-D- " __VA_ARGS__); fflush(stdout); } - #define TRACE_DEBUG_WP(...) { printf(__VA_ARGS__); fflush(stdout); } - #define TRACE_INFO(...) { printf("-I- " __VA_ARGS__); fflush(stdout); } - #define TRACE_INFO_WP(...) { printf(__VA_ARGS__); fflush(stdout); } - #define TRACE_WARNING(...) { printf("-W- " __VA_ARGS__); fflush(stdout); } - #define TRACE_WARNING_WP(...) { printf(__VA_ARGS__); fflush(stdout); } - #define TRACE_ERROR(...) { printf("-E- " __VA_ARGS__); fflush(stdout); } - inline void dump(unsigned char *data, unsigned int size) - { - printf("DUMP %d bytes ...\n\r", size); - unsigned int i = 0, j=0; - while (i*32+j < size) { - printf("%.2X ", data[i*32+j]); - j++; - if (j==32) { - i++; j=0; - printf("\n\r"); - } +#define TRACE(...) do { printf(__VA_ARGS__); printf("\n"); fflush(stdout); } while(0) +#define TRACE_DEBUG(...) do { printf("-D- " __VA_ARGS__); fflush(stdout); } while(0) +#define TRACE_DEBUG_WP(...) do { printf(__VA_ARGS__); fflush(stdout); } while(0) +#define TRACE_INFO(...) do { printf("-I- " __VA_ARGS__); fflush(stdout); } while(0) +#define TRACE_INFO_WP(...) do { printf(__VA_ARGS__); fflush(stdout); } while(0) +#define TRACE_WARNING(...) do { printf("-W- " __VA_ARGS__); fflush(stdout); } while(0) +#define TRACE_WARNING_WP(...) do { printf(__VA_ARGS__); fflush(stdout); } while(0) +#define TRACE_ERROR(...) do { printf("-E- " __VA_ARGS__); fflush(stdout); } while(0) +inline void dump(unsigned char *data, unsigned int size) +{ + printf("DUMP %d bytes ...\n\r", size); + unsigned int i = 0, j=0; + while (i*32+j < size) { + printf("%.2X ", data[i*32+j]); + j++; + if (j==32) { + i++; j=0; + printf("\n\r"); } - printf("\n\r"); } - #define DUMP(data, size) dump(data, size) + printf("\n\r"); +} +#define DUMP(data, size) dump(data, size) #elif defined(DEBUG) && defined(CPUARM) @@ -80,27 +81,29 @@ void dump(unsigned char *data, unsigned int size); } #endif -#define TRACE_DEBUG(...) debugPuts("-D- " __VA_ARGS__) -#define TRACE_DEBUG_WP(...) debugPuts(__VA_ARGS__) -#define TRACE_INFO(...) debugPuts("-I- " __VA_ARGS__) -#define TRACE_INFO_WP(...) debugPuts(__VA_ARGS__) -#define TRACE_WARNING(...) debugPuts("-W- " __VA_ARGS__) +#define TRACE(...) do { debugPuts(__VA_ARGS__); debugPuts("\r\n"); } while(0) +#define DUMP(data, size) dump(data, size) +#define TRACE_DEBUG(...) debugPuts("-D- " __VA_ARGS__) +#define TRACE_DEBUG_WP(...) debugPuts(__VA_ARGS__) +#define TRACE_INFO(...) debugPuts("-I- " __VA_ARGS__) +#define TRACE_INFO_WP(...) debugPuts(__VA_ARGS__) +#define TRACE_WARNING(...) debugPuts("-W- " __VA_ARGS__) #define TRACE_WARNING_WP(...) debugPuts(__VA_ARGS__) -#define TRACE_ERROR(...) debugPuts("-E- " __VA_ARGS__) -#define DUMP(data, size) dump(data, size) +#define TRACE_ERROR(...) debugPuts("-E- " __VA_ARGS__) void debugTask(void* pdata); #else - #define TRACE_DEBUG(...) { } - #define TRACE_DEBUG_WP(...) { } - #define TRACE_INFO(...) { } - #define TRACE_INFO_WP(...) { } - #define TRACE_WARNING(...) { } - #define TRACE_WARNING_WP(...) { } - #define TRACE_ERROR(...) { } - #define DUMP(...) { } +#define TRACE(...) { } +#define DUMP(...) { } +#define TRACE_DEBUG(...) { } +#define TRACE_DEBUG_WP(...) { } +#define TRACE_INFO(...) { } +#define TRACE_INFO_WP(...) { } +#define TRACE_WARNING(...) { } +#define TRACE_WARNING_WP(...) { } +#define TRACE_ERROR(...) { } #endif diff --git a/src/gui/menu_general.cpp b/src/gui/menu_general.cpp index c5ce017c0..52ecc6c2e 100644 --- a/src/gui/menu_general.cpp +++ b/src/gui/menu_general.cpp @@ -168,7 +168,7 @@ enum menuGeneralSetupItems { #if defined(SPLASH) && !defined(FSPLASH) ITEM_SETUP_DISABLE_SPLASH, #endif - IF_FRSKY(ITEM_SETUP_TIMEZONE) + IF_GPS(ITEM_SETUP_TIMEZONE) IF_GPS(ITEM_SETUP_GPSFORMAT) IF_PXX(ITEM_SETUP_COUNTRYCODE) IF_CPUARM(ITEM_SETUP_LANGUAGE) @@ -191,7 +191,7 @@ void menuGeneralSetup(uint8_t event) } #endif - MENU(STR_MENURADIOSETUP, menuTabDiag, e_Setup, ITEM_SETUP_MAX+1, {0, IF_RTCLOCK(2) IF_RTCLOCK(2) IF_BATTGRAPH(1) LABEL(SOUND), IF_AUDIO(0) IF_BUZZER(0) 0, IF_AUDIO(0) IF_VOICE(0) IF_HAPTIC(LABEL(HAPTIC)) IF_HAPTIC(0) IF_HAPTIC(0) IF_HAPTIC(0) IF_PCBSKY9X(0) IF_9X(0) LABEL(ALARMS), 0, IF_PCBSKY9X(0) IF_PCBSKY9X(0) 0, 0, 0, IF_ROTARY_ENCODERS(0) LABEL(BACKLIGHT), 0, 0, CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, IF_SPLASH(0) IF_FRSKY(0) IF_GPS(0) IF_PXX(0) IF_CPUARM(0) IF_CPUARM(0) 0, LABEL(TX_MODE), CASE_PCBTARANIS(0) 1/*to force edit mode*/}); + MENU(STR_MENURADIOSETUP, menuTabDiag, e_Setup, ITEM_SETUP_MAX+1, {0, IF_RTCLOCK(2) IF_RTCLOCK(2) IF_BATTGRAPH(1) LABEL(SOUND), IF_AUDIO(0) IF_BUZZER(0) 0, IF_AUDIO(0) IF_VOICE(0) IF_HAPTIC(LABEL(HAPTIC)) IF_HAPTIC(0) IF_HAPTIC(0) IF_HAPTIC(0) IF_PCBSKY9X(0) IF_9X(0) LABEL(ALARMS), 0, IF_PCBSKY9X(0) IF_PCBSKY9X(0) 0, 0, 0, IF_ROTARY_ENCODERS(0) LABEL(BACKLIGHT), 0, 0, CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, IF_SPLASH(0) IF_GPS(0) IF_GPS(0) IF_PXX(0) IF_CPUARM(0) IF_CPUARM(0) 0, LABEL(TX_MODE), CASE_PCBTARANIS(0) 1/*to force edit mode*/}); uint8_t sub = m_posVert - 1; @@ -487,15 +487,13 @@ void menuGeneralSetup(uint8_t event) } #endif -#if defined(FRSKY) +#if defined(FRSKY) && defined(FRSKY_HUB) && defined(GPS) case ITEM_SETUP_TIMEZONE: lcd_putsLeft(y, STR_TIMEZONE); lcd_outdezAtt(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.timezone, attr|LEFT); if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.timezone, -12, 12); break; -#endif -#if defined(FRSKY) && defined(FRSKY_HUB) && defined(GPS) case ITEM_SETUP_GPSFORMAT: g_eeGeneral.gpsFormat = selectMenuItem(RADIO_SETUP_2ND_COLUMN, y, STR_GPSCOORD, STR_GPSFORMAT, g_eeGeneral.gpsFormat, 0, 1, attr, event); break; diff --git a/src/gui/view_telemetry.cpp b/src/gui/view_telemetry.cpp index acb8859e3..72b058743 100644 --- a/src/gui/view_telemetry.cpp +++ b/src/gui/view_telemetry.cpp @@ -95,7 +95,7 @@ void displayRssiLine() } #endif -#if defined(FRSKY_HUB) +#if defined(FRSKY) && defined(FRSKY_HUB) && defined(GPS) void displayGpsTime() { uint8_t att = (TELEMETRY_STREAMING() ? LEFT|LEADING0 : LEFT|LEADING0|BLINK); @@ -137,6 +137,9 @@ void displayGpsCoord(uint8_t y, char direction, int16_t bp, int16_t ap) lcd_puts(TELEM_2ND_COLUMN, y, STR_VCSWFUNC+1/*----*/); } } +#else +#define displayGpsTime() +#define displayGpsCoord(...) #endif NOINLINE uint8_t getRssiAlarmValue(uint8_t alarm) @@ -216,6 +219,9 @@ void menuTelemetryFrsky(uint8_t event) lcd_putsiAtt(0, y+barHeight-5, STR_VTELEMCHNS, source, 0); lcd_rect(25, y, BAR_WIDTH+1, barHeight+2); getvalue_t value = getValue(MIXSRC_FIRST_TELEM+source-2); +#if LCD_W >= 212 + putsTelemetryChannel(28+BAR_WIDTH, y+barHeight-5, source-1, value, LEFT); +#endif getvalue_t threshold = 0; uint8_t thresholdX = 0; if (source <= TELEM_TM2) @@ -244,8 +250,8 @@ void menuTelemetryFrsky(uint8_t event) lcd_filled_rect(26, y+1, width, barHeight, barShade); - for (uint8_t j=50; j<125; j+=25) - if (j>26+thresholdX || j>26+width) lcd_vline(j, y+1, barHeight); + for (uint8_t j=24; j<99; j+=25) + if (j>thresholdX || j>width) lcd_vline(j*BAR_WIDTH/100+26, y+1, barHeight); if (thresholdX) { lcd_vlineStip(26+thresholdX, y-2, barHeight+3, DOTTED); @@ -282,10 +288,12 @@ void menuTelemetryFrsky(uint8_t event) lcd_outdezNAtt(16*FW, STATUS_BAR_Y, frskyData.hub.accelZ, LEFT|PREC2); break; } +#if defined(GPS) else if (field == TELEM_GPS_TIME) { displayGpsTime(); return; } +#endif #endif } else { diff --git a/src/lcd.h b/src/lcd.h index 84884a8bb..6931ce9ca 100644 --- a/src/lcd.h +++ b/src/lcd.h @@ -184,7 +184,7 @@ void putsChnLetter(xcoord_t x, uint8_t y, uint8_t idx, LcdFlags attr); void putsVolts(xcoord_t x, uint8_t y, uint16_t volts, LcdFlags att); void putsVBat(xcoord_t x, uint8_t y, LcdFlags att); -void putsTelemetryChannel(xcoord_t x, uint8_t y, uint8_t channel, lcdint_t val, uint8_t att); +void putsTelemetryChannel(xcoord_t x, uint8_t y, uint8_t channel, lcdint_t val, uint8_t att=0); #if defined(CPUARM) #define putstime_t int32_t diff --git a/src/simpgmspace.h b/src/simpgmspace.h index cd3e6633d..f7ef4589f 100644 --- a/src/simpgmspace.h +++ b/src/simpgmspace.h @@ -376,6 +376,7 @@ void eeprom_read_block (void *pointer_ram, const void *pointer_eeprom, size_t si #define UART3_Configure(...) #define UART_Stop(...) #define UART3_Stop(...) +#define USART_GetITStatus(...) 0 #if defined(PCBTARANIS) inline void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct) { } diff --git a/src/targets/taranis/usbd_storage_msd.cpp b/src/targets/taranis/usbd_storage_msd.cpp index 58150210a..fcb56ebe7 100644 --- a/src/targets/taranis/usbd_storage_msd.cpp +++ b/src/targets/taranis/usbd_storage_msd.cpp @@ -37,7 +37,8 @@ extern "C" { void eeprom_read_block (void *pointer_ram, uint16_t pointer_eeprom, size_t size); -#define STORAGE_LUN_NBR 2 +#define STORAGE_LUN_NBR 2 +#define BLOCKSIZE 512 /* USB Mass storage Standard Inquiry Data */ const unsigned char STORAGE_Inquirydata[] = {//36 @@ -139,14 +140,14 @@ int8_t STORAGE_Init (uint8_t lun) int8_t STORAGE_GetCapacity (uint8_t lun, uint32_t *block_num, uint32_t *block_size) { if (lun == 1) { - *block_size = 512; - *block_num = EESIZE/512 + 3 ; + *block_size = BLOCKSIZE; + *block_num = EESIZE/BLOCKSIZE + 3 ; } else { if (!SD_CARD_PRESENT()) return -1; - *block_size = 512; + *block_size = BLOCKSIZE; static DWORD sector_count = 0; if (sector_count == 0) { @@ -259,9 +260,6 @@ int8_t STORAGE_GetMaxLun (void) return (STORAGE_LUN_NBR - 1); } -// Test FAT12 etc. - -#define BLOCKSIZE 512 //------------------------------------------------------------------------------ /** @@ -277,7 +275,7 @@ const char g_FATboot[BLOCKSIZE] = 0x01, // Number of FATs 0x10, 0x00, // Number of root directory entries - (EESIZE/512)+3, 0x00, // Total sectors = 131 + (EESIZE/BLOCKSIZE)+3, 0x00, // Total sectors = 131 0xf8, // Media descriptor 0x01, 0x00, // Sectors per FAT table 0x20, 0x00, // Sectors per track @@ -633,7 +631,6 @@ const FATDirEntry_t g_DIRroot[16] = }, }; - // count is number of 512 byte sectors int32_t fat12Read( uint8_t *buffer, uint16_t sector, uint16_t count ) { @@ -650,9 +647,9 @@ int32_t fat12Read( uint8_t *buffer, uint16_t sector, uint16_t count ) memcpy( buffer, g_DIRroot, BLOCKSIZE ) ; } else { - eeprom_read_block (buffer, (sector-3)*512, 512); + eeprom_read_block (buffer, (sector-3)*BLOCKSIZE, BLOCKSIZE); } - buffer += 512 ; + buffer += BLOCKSIZE ; sector++ ; count-- ; } @@ -665,18 +662,22 @@ int32_t fat12Write(const uint8_t *buffer, uint16_t sector, uint32_t count ) { static int offset = 0; + TRACE("FAT12 Write(sector=%d, count=%d)", sector, count); + while (count) { const EeFs * test = (const EeFs *)buffer; - if (test->version==EEFS_VERS && test->mySize==sizeof(eeFs) && test->bs==BS) { + if (offset == 0 && test->version==EEFS_VERS && test->mySize==sizeof(eeFs) && test->bs==BS) { + TRACE("EEPROM start found in sector %d", sector); offset = sector; } - if (offset && sector >= offset && (sector-offset) < EESIZE/512) { - eeWriteBlockCmp((uint8_t *)buffer, (sector-offset)*512, 512); + if (offset && sector >= offset && (sector-offset) < EESIZE/BLOCKSIZE) { + eeWriteBlockCmp((uint8_t *)buffer, (sector-offset)*BLOCKSIZE, BLOCKSIZE); } - buffer += 512; + buffer += BLOCKSIZE; sector++; count--; - if (sector-offset+1 >= EESIZE/512) { + if (sector-offset >= EESIZE/BLOCKSIZE) { + TRACE("EEPROM end written at sector %d", sector-1); offset = 0; } } diff --git a/src/telemetry/frsky.cpp b/src/telemetry/frsky.cpp index 15ca233f6..a2ca57090 100644 --- a/src/telemetry/frsky.cpp +++ b/src/telemetry/frsky.cpp @@ -143,53 +143,55 @@ void parseTelemHubByte(uint8_t byte) state = TS_IDLE; - if ((uint8_t)structPos == offsetof(FrskyHubData, gpsLatitude_bp)) { +#if defined(GPS) + if ((uint8_t)structPos == offsetof(FrskySerialData, gpsLatitude_bp)) { if (lowByte || byte) frskyData.hub.gpsFix = 1; else if (frskyData.hub.gpsFix > 0 && frskyData.hub.gpsLatitude_bp > 1) frskyData.hub.gpsFix = 0; } - else if ((uint8_t)structPos == offsetof(FrskyHubData, gpsLongitude_bp)) { + else if ((uint8_t)structPos == offsetof(FrskySerialData, gpsLongitude_bp)) { if (lowByte || byte) frskyData.hub.gpsFix = 1; else if (frskyData.hub.gpsFix > 0 && frskyData.hub.gpsLongitude_bp > 1) frskyData.hub.gpsFix = 0; } - if ((uint8_t)structPos == offsetof(FrskyHubData, gpsAltitude_bp) || - ((uint8_t)structPos >= offsetof(FrskyHubData, gpsAltitude_ap) && (uint8_t)structPos <= offsetof(FrskyHubData, gpsLatitudeNS) && (uint8_t)structPos != offsetof(FrskyHubData, baroAltitude_bp) && (uint8_t)structPos != offsetof(FrskyHubData, baroAltitude_ap))) { + if ((uint8_t)structPos == offsetof(FrskySerialData, gpsAltitude_bp) || + ((uint8_t)structPos >= offsetof(FrskySerialData, gpsAltitude_ap) && (uint8_t)structPos <= offsetof(FrskySerialData, gpsLatitudeNS) && (uint8_t)structPos != offsetof(FrskySerialData, baroAltitude_bp) && (uint8_t)structPos != offsetof(FrskySerialData, baroAltitude_ap))) { // If we don't have a fix, we may discard the value if (frskyData.hub.gpsFix <= 0) return; } +#endif ((uint8_t*)&frskyData.hub)[structPos] = lowByte; ((uint8_t*)&frskyData.hub)[structPos+1] = byte; switch ((uint8_t)structPos) { - case offsetof(FrskyHubData, rpm): + case offsetof(FrskySerialData, rpm): frskyData.hub.rpm *= (uint8_t)60/(g_model.frsky.blades+2); if (frskyData.hub.rpm > frskyData.hub.maxRpm) frskyData.hub.maxRpm = frskyData.hub.rpm; break; - case offsetof(FrskyHubData, temperature1): + case offsetof(FrskySerialData, temperature1): if (frskyData.hub.temperature1 > frskyData.hub.maxTemperature1) frskyData.hub.maxTemperature1 = frskyData.hub.temperature1; break; - case offsetof(FrskyHubData, temperature2): + case offsetof(FrskySerialData, temperature2): if (frskyData.hub.temperature2 > frskyData.hub.maxTemperature2) frskyData.hub.maxTemperature2 = frskyData.hub.temperature2; break; - case offsetof(FrskyHubData, current): + case offsetof(FrskySerialData, current): if (frskyData.hub.current > frskyData.hub.maxCurrent) frskyData.hub.maxCurrent = frskyData.hub.current; break; - case offsetof(FrskyHubData, volts_ap): + case offsetof(FrskySerialData, volts_ap): #if defined(FAS_BSS) frskyData.hub.vfas = (frskyData.hub.volts_bp * 10 + frskyData.hub.volts_ap); #else @@ -199,7 +201,7 @@ void parseTelemHubByte(uint8_t byte) frskyData.hub.minVfas = frskyData.hub.vfas; */ break; - case offsetof(FrskyHubData, baroAltitude_bp): + case offsetof(FrskySerialData, baroAltitude_bp): // First received barometer altitude => Altitude offset if (!frskyData.hub.baroAltitudeOffset) frskyData.hub.baroAltitudeOffset = -frskyData.hub.baroAltitude_bp; @@ -210,13 +212,14 @@ void parseTelemHubByte(uint8_t byte) checkMinMaxAltitude(); break; - case offsetof(FrskyHubData, baroAltitude_ap): + case offsetof(FrskySerialData, baroAltitude_ap): if (g_model.frsky.varioSource == VARIO_SOURCE_ALTI_PLUS) { evalVario(frskyData.hub.baroAltitude_bp-frskyData.hub.baroAltitudeOffset, frskyData.hub.baroAltitude_ap); } break; - case offsetof(FrskyHubData, gpsAltitude_ap): +#if defined(GPS) + case offsetof(FrskySerialData, gpsAltitude_ap): if (!frskyData.hub.gpsAltitudeOffset) frskyData.hub.gpsAltitudeOffset = -frskyData.hub.gpsAltitude_bp; frskyData.hub.gpsAltitude_bp += frskyData.hub.gpsAltitudeOffset; @@ -226,8 +229,6 @@ void parseTelemHubByte(uint8_t byte) if (frskyData.hub.gpsAltitude_bp < frskyData.hub.minAltitude) frskyData.hub.minAltitude = frskyData.hub.gpsAltitude_bp; } - -#if defined(GPS) if (!frskyData.hub.pilotLatitude && !frskyData.hub.pilotLongitude) { // First received GPS position => Pilot GPS position getGpsPilotPosition(); @@ -235,16 +236,16 @@ void parseTelemHubByte(uint8_t byte) else if (frskyData.hub.gpsDistNeeded || g_menuStack[g_menuStackPtr] == menuTelemetryFrsky) { getGpsDistance(); } -#endif break; - case offsetof(FrskyHubData, gpsSpeed_bp): + case offsetof(FrskySerialData, gpsSpeed_bp): // Speed => Max speed if (frskyData.hub.gpsSpeed_bp > frskyData.hub.maxGpsSpeed) frskyData.hub.maxGpsSpeed = frskyData.hub.gpsSpeed_bp; break; +#endif - case offsetof(FrskyHubData, volts): + case offsetof(FrskySerialData, volts): // Voltage => Cell number + Cell voltage { uint8_t battnumber = ((frskyData.hub.volts & 0x00F0) >> 4); @@ -262,13 +263,15 @@ void parseTelemHubByte(uint8_t byte) break; } - case offsetof(FrskyHubData, hour): +#if defined(GPS) + case offsetof(FrskySerialData, hour): frskyData.hub.hour = ((uint8_t)(frskyData.hub.hour + g_eeGeneral.timezone + 24)) % 24; break; +#endif - case offsetof(FrskyHubData, accelX): - case offsetof(FrskyHubData, accelY): - case offsetof(FrskyHubData, accelZ): + case offsetof(FrskySerialData, accelX): + case offsetof(FrskySerialData, accelY): + case offsetof(FrskySerialData, accelZ): *(int16_t*)(&((uint8_t*)&frskyData.hub)[structPos]) /= 10; break; @@ -280,7 +283,7 @@ void parseTelemHubByte(uint8_t byte) void parseTelemWSHowHighByte(uint8_t byte) { if (frskyUsrStreaming < (FRSKY_TIMEOUT10ms*3 - 10)) { - ((uint8_t*)&frskyData.hub)[offsetof(FrskyHubData, baroAltitude_bp)] = byte; + ((uint8_t*)&frskyData.hub)[offsetof(FrskySerialData, baroAltitude_bp)] = byte; checkMinMaxAltitude(); if (g_model.frsky.varioSource == VARIO_SOURCE_ALTI) { evalVario(frskyData.hub.baroAltitude_bp, 0); @@ -288,7 +291,7 @@ void parseTelemWSHowHighByte(uint8_t byte) } else { // At least 100mS passed since last data received - ((uint8_t*)&frskyData.hub)[offsetof(FrskyHubData, baroAltitude_bp)+1] = byte; + ((uint8_t*)&frskyData.hub)[offsetof(FrskySerialData, baroAltitude_bp)+1] = byte; } // baroAltitude_bp unit here is feet! frskyUsrStreaming = FRSKY_TIMEOUT10ms*3; // reset counter diff --git a/src/telemetry/frsky.h b/src/telemetry/frsky.h index 59b18d94e..4916c7f4d 100644 --- a/src/telemetry/frsky.h +++ b/src/telemetry/frsky.h @@ -72,7 +72,7 @@ class FrskyValueWithMinMax: public FrskyValueWithMin { #define VARIO_QUEUE_LENGTH 5 #if defined(FRSKY_HUB) -PACK(struct FrskyHubData { +PACK(struct FrskySerialData { int16_t baroAltitudeOffset;// spare reused int16_t gpsAltitude_bp; // 0x01 before punct int16_t temperature1; // 0x02 -20 .. 250 deg. celcius @@ -140,9 +140,9 @@ PACK(struct FrskyHubData { // TODO later uint16_t minVfas; }); -#define FRSKY_HUB_DATA FrskyHubData hub; +#define FRSKY_HUB_DATA FrskySerialData hub; #elif defined(WS_HOW_HIGH) -PACK(struct WSHowHighData { +PACK(struct FrskySerialData { int16_t baroAltitude_bp; // 0..9,999 meters int16_t baroAltitudeOffset; int16_t minAltitude; @@ -154,15 +154,15 @@ PACK(struct WSHowHighData { int16_t varioSpeed; // Vertical speed in cm/s #endif }); -#define FRSKY_HUB_DATA WSHowHighData hub; +#define FRSKY_HUB_DATA FrskySerialData hub; #elif defined(VARIO) -PACK(struct VarioData { +PACK(struct FrskySerialData { int16_t varioAltitudeQueue[VARIO_QUEUE_LENGTH]; //circular buffer uint8_t varioAltitudeQueuePointer; // circular-buffer pointer int32_t varioAltitude_cm; int16_t varioSpeed; // Vertical speed in cm/s }); -#define FRSKY_HUB_DATA VarioData hub; +#define FRSKY_HUB_DATA FrskySerialData hub; #else #define FRSKY_HUB_DATA #endif