[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
This commit is contained in:
+63
-61
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
+38
-35
@@ -43,28 +43,29 @@
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#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
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) { }
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+26
-23
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user