diff --git a/src/Makefile b/src/Makefile index 0fd51d61f..106b7b766 100644 --- a/src/Makefile +++ b/src/Makefile @@ -310,6 +310,8 @@ CPPDEFS += -DTRANSLATIONS_$(TRANSLATIONS) # TTS language CPPDEFS += -DTTS_$(TTS) +VARIANT = 0 + ifeq ($(UNITS), IMPERIAL) CPPDEFS += -DIMPERIAL_UNITS endif @@ -366,6 +368,7 @@ endif ifeq ($(GVARS), YES) CPPDEFS += -DGVARS + VARIANT += +1 endif # If STD-Support is enabled @@ -409,6 +412,7 @@ ifeq ($(EXT), FRSKY) ifeq ($(VARIO), YES) CPPDEFS += -DVARIO endif + VARIANT += +2 endif ifeq ($(DEBUG), YES) @@ -429,7 +433,7 @@ RUN_FROM_FLASH = 1 ifeq ($(PCB), X9D) # X9D, so ... OPT = 2 - CPPDEFS += -DPCBX9D -DPCBSKY9X -DAUDIO -DHAPTIC -DPXX -DDSM2 -DDSM2_PPM -DROTARY_ENCODERS=1 + CPPDEFS += -DPCBX9D -DPCBSKY9X -DVARIANT=0 -DAUDIO -DHAPTIC -DPXX -DDSM2 -DDSM2_PPM -DROTARY_ENCODERS=1 EXTRAINCDIRS += sky9x CoOS/kernel CoOS/portable BOARDSRC = board_sky9x.cpp SRC += sky9x/core_cm3.c sky9x/board_lowlevel.c sky9x/crt.c sky9x/vectors_sam3s.c @@ -463,7 +467,7 @@ endif ifeq ($(PCB), SKY9X) # SKY9X, so ... OPT = 2 - CPPDEFS += -DPCBSKY9X -DAUDIO -DHAPTIC -DRTCLOCK -DPXX -DDSM2 -DDSM2_PPM -DROTARY_ENCODERS=1 + CPPDEFS += -DPCBSKY9X -DVARIANT=0 -DAUDIO -DHAPTIC -DRTCLOCK -DPXX -DDSM2 -DDSM2_PPM -DROTARY_ENCODERS=1 EXTRAINCDIRS += sky9x CoOS/kernel CoOS/portable BOARDSRC = board_sky9x.cpp SRC += sky9x/core_cm3.c sky9x/board_lowlevel.c sky9x/crt.c sky9x/vectors_sam3s.c @@ -498,7 +502,7 @@ endif ifeq ($(PCB), GRUVIN9X) # Gruvin9x PCB, so ... OPT = 2 - CPPDEFS += -DPCBGRUVIN9X -DAUDIO -DHAPTIC -DROTARY_ENCODERS=2 + CPPDEFS += -DPCBGRUVIN9X -DVARIANT=0 -DAUDIO -DHAPTIC -DROTARY_ENCODERS=2 EXTRAINCDIRS += gruvin9x stock FatFs FatFs/option BOARDSRC += board_gruvin9x.cpp EEPROMSRC = eeprom_avr.cpp @@ -524,7 +528,7 @@ endif ifeq ($(PCB), STD128) # STD PCB with Atmega 128, so ... OPT = 2 - CPPDEFS += -DPCBSTD -DM128 + CPPDEFS += -DPCBSTD -DM128 -DVARIANT=0 EXTRAINCDIRS += stock BOARDSRC = board_stock.cpp EEPROMSRC = eeprom_avr.cpp @@ -556,7 +560,7 @@ ifeq ($(PCB), STD) # STD PCB, so ... OPT = s EXTRAINCDIRS += stock - CPPDEFS += -DPCBSTD + CPPDEFS += -DPCBSTD -DVARIANT=$(shell echo ${VARIANT} | bc) BOARDSRC = board_stock.cpp EEPROMSRC = eeprom_avr.cpp PULSESSRC = pulses_avr.cpp diff --git a/src/eeprom_arm.cpp b/src/eeprom_arm.cpp index 6e2179a0e..8620d8d6e 100644 --- a/src/eeprom_arm.cpp +++ b/src/eeprom_arm.cpp @@ -444,7 +444,7 @@ bool ee32LoadGeneral() read32_eeprom_data( ( File_system[0].block_no << 12) + sizeof( struct t_eeprom_header), ( uint8_t *)&g_eeGeneral, size) ; } - if (g_eeGeneral.version == EEPROM_VER && g_eeGeneral.variant == EEPROM_VARIANT) { + if (g_eeGeneral.version == EEPROM_VER) { uint16_t sum = evalChkSum(); if (g_eeGeneral.chkSum == sum) { return true; @@ -452,7 +452,7 @@ bool ee32LoadGeneral() } #ifdef SIMU - printf("EEPROM version %d (%d) instead of %d (%d)\n", g_eeGeneral.version, g_eeGeneral.variant, EEPROM_VER, EEPROM_VARIANT); + printf("EEPROM version %d (%d) instead of %d (%d)\n", g_eeGeneral.version, g_eeGeneral.variant, EEPROM_VER, VARIANT); fflush(stdout); #endif diff --git a/src/eeprom_avr.cpp b/src/eeprom_avr.cpp index 4f17afcd7..a48026704 100644 --- a/src/eeprom_avr.cpp +++ b/src/eeprom_avr.cpp @@ -816,14 +816,20 @@ bool eeLoadGeneral() if (theFile.readRlc((uint8_t*)&g_eeGeneral, 1) == 1 && g_eeGeneral.version == EEPROM_VER) { theFile.openRlc(FILE_GENERAL); if (theFile.readRlc((uint8_t*)&g_eeGeneral, sizeof(g_eeGeneral)) <= sizeof(EEGeneral)) { - if (g_eeGeneral.variant == EEPROM_VARIANT && g_eeGeneral.chkSum == evalChkSum()) { +#if defined(PCBSTD) + if (g_eeGeneral.variant == VARIANT && g_eeGeneral.chkSum == evalChkSum()) { return true; } +#else + if (g_eeGeneral.chkSum == evalChkSum()) { + return true; + } +#endif } } #ifdef SIMU - printf("EEPROM version %d (%d) instead of %d (%d)\n", g_eeGeneral.version, g_eeGeneral.variant, EEPROM_VER, EEPROM_VARIANT); + printf("EEPROM version %d (%d) instead of %d (%d)\n", g_eeGeneral.version, g_eeGeneral.variant, EEPROM_VER, VARIANT); fflush(stdout); #endif diff --git a/src/frsky.cpp b/src/frsky.cpp index be0ca430f..d5637cb89 100644 --- a/src/frsky.cpp +++ b/src/frsky.cpp @@ -1090,7 +1090,7 @@ void putsTelemetryChannel(uint8_t x, uint8_t y, uint8_t channel, int16_t val, ui enum FrskyViews { e_frsky_custom_screen_1, e_frsky_custom_screen_2, -// TODO IF_PCBSKY9X(e_frsky_custom_screen_3) + IF_PCBSKY9X(e_frsky_custom_screen_3) e_frsky_voltages, e_frsky_after_flight, FRSKY_VIEW_MAX = e_frsky_after_flight @@ -1214,7 +1214,7 @@ void menuTelemetryFrsky(uint8_t event) lcd_filled_rect(0, 0, DISPLAY_W, 8); if (frskyStreaming >= 0) { - if (s_frsky_view < 2/* TODO MAX_FRSKY_SCREENS*/) { + if (s_frsky_view < MAX_FRSKY_SCREENS) { FrSkyScreenData & screen = g_model.frsky.screens[s_frsky_view]; if (g_model.frsky.screensType & (1<= ITEM_TELEMETRY_SCREEN_LABEL3) { + screenIndex = 2; + lineIndex = k-ITEM_TELEMETRY_SCREEN_LINE9; + } +#endif else { screenIndex = 1; lineIndex = k-ITEM_TELEMETRY_SCREEN_LINE5; } - if (g_model.frsky.screensType & (screenIndex+1)) { + if (IS_BARS_SCREEN(screenIndex)) { FrSkyBarData & bar = g_model.frsky.screens[screenIndex].bars[lineIndex]; uint8_t barSource = bar.source; lcd_putsiAtt(4, y, STR_VTELEMCHNS, barSource, (attr && m_posHorz==0) ? blink : 0); diff --git a/src/myeeprom.h b/src/myeeprom.h index 6a1180ca1..79524c6af 100644 --- a/src/myeeprom.h +++ b/src/myeeprom.h @@ -622,13 +622,45 @@ PACK(typedef struct t_SwashRingData { // Swash Ring data #define TRIM_ARRAY int16_t trim[4] #endif +#if defined(PCBSKY9X) +PACK(typedef struct { + int8_t value; + char name[6]; +}) gvar_t; +#define GVAR_VALUE(x) g_model.gvars[x].value +#else +typedef int8_t gvar_t; +#define GVAR_VALUE(x) g_model.gvars[x] +#endif + +#if defined(PCBSTD) +#define PHASE_GVARS_DATA +#if defined(GVARS) +#define MAX_GVARS 5 +#define MODEL_GVARS_DATA gvar_t gvars[MAX_GVARS] +#else +#define MAX_GVARS 0 +#define MODEL_GVARS_DATA +#endif +#else +#define PHASE_GVARS_DATA +#if defined(GVARS) +#define MAX_GVARS 5 +#define MODEL_GVARS_DATA gvar_t gvars[MAX_GVARS] +#else +#define MAX_GVARS 0 +#define MODEL_GVARS_DATA gvar_t gvars[5] +#endif +#endif + PACK(typedef struct t_PhaseData { TRIM_ARRAY; int8_t swtch; // swtch of phase[0] is not used char name[LEN_FP_NAME]; uint8_t fadeIn:4; uint8_t fadeOut:4; - ROTARY_ENCODER_ARRAY + ROTARY_ENCODER_ARRAY; + PHASE_GVARS_DATA; }) PhaseData; #if defined(PCBSKY9X) @@ -718,10 +750,12 @@ enum Dsm2Variants { DSM2_DSMX }; -#ifdef MAVLINK +#if defined(MAVLINK) #define TELEMETRY_DATA MavlinkData mavlink -#else +#elif defined(FRSKY) || !defined(PCBSTD) #define TELEMETRY_DATA FrSkyData frsky +#else +#define TELEMETRY_DATA #endif #if defined(PCBGRUVIN9X) || defined(PCBSKY9X) @@ -730,25 +764,6 @@ enum Dsm2Variants { #define BeepANACenter uint8_t #endif -#if defined(PCBSKY9X) -PACK(typedef struct { - int8_t value; - char name[6]; -}) model_gvar_t; -#define GVAR_VALUE(x) g_model.gvars[x].value -#else -typedef int8_t model_gvar_t; -#define GVAR_VALUE(x) g_model.gvars[x] -#endif - -#if defined(GVARS) -#define MAX_GVARS 5 -#define GVARS_DATA model_gvar_t gvars[MAX_GVARS] -#else -#define MAX_GVARS 0 -#define GVARS_DATA -#endif - PACK(typedef struct t_ModelData { char name[LEN_MODEL_NAME]; // must be first for eeLoadModelName TimerData timers[MAX_TIMERS]; @@ -781,7 +796,7 @@ PACK(typedef struct t_ModelData { uint8_t switchWarningStates; - GVARS_DATA; + MODEL_GVARS_DATA; TELEMETRY_DATA; diff --git a/src/open9x.cpp b/src/open9x.cpp index 8c7f4a9ac..269155af4 100644 --- a/src/open9x.cpp +++ b/src/open9x.cpp @@ -216,7 +216,7 @@ void generalDefault() { memclear(&g_eeGeneral, sizeof(g_eeGeneral)); g_eeGeneral.version = EEPROM_VER; - g_eeGeneral.variant = EEPROM_VARIANT; + g_eeGeneral.variant = VARIANT; g_eeGeneral.contrast = 25; g_eeGeneral.vBatWarn = 90; for (int i = 0; i < 7; ++i) { diff --git a/src/open9x.h b/src/open9x.h index ae08d8ed0..da90fbff6 100644 --- a/src/open9x.h +++ b/src/open9x.h @@ -85,10 +85,8 @@ #endif #if defined(FRSKY) -#define FRSKY_VARIANT 0x0002 #define IF_FRSKY(x) x, #else -#define FRSKY_VARIANT 0x0000 #define IF_FRSKY(x) #endif @@ -135,10 +133,8 @@ #endif #if defined(GVARS) -#define GVARS_VARIANT 0x0001 #define IF_GVARS(x) x, #else -#define GVARS_VARIANT 0x0000 #define IF_GVARS(x) #endif @@ -148,7 +144,8 @@ #define WDT_RESET_STOCK() #endif -/* #define HELI_VARIANT 0x0004 +/* +#define HELI_VARIANT 0x0004 #define VOICE_VARIANT 0x0008 #define PHASES_VARIANT 0x0010 #define PXX_VARIANT 0x0020 @@ -156,8 +153,6 @@ #define VARIO_VARIANT 0x0080 #define HAPTIC_VARIANT 0x0100 */ -#define EEPROM_VARIANT (GVARS_VARIANT + FRSKY_VARIANT) - #if defined(PCBSKY9X) #include "board_sky9x.h" #elif defined(PCBGRUVIN9X) @@ -982,6 +977,7 @@ extern inline uint16_t get_tmr10ms() extern const char stamp1[]; extern const char stamp2[]; extern const char stamp3[]; +extern const char eeprom_stamp[]; extern uint8_t g_vbat100mV; extern volatile uint8_t g_blinkTmr10ms; diff --git a/src/stamp.cpp b/src/stamp.cpp index d8f5ea543..e4ffd5a89 100644 --- a/src/stamp.cpp +++ b/src/stamp.cpp @@ -40,4 +40,4 @@ const pm_char stamp1[] PROGMEM = " SVN: " SVN_STR; const pm_char stamp2[] PROGMEM = "DATE: " DATE_STR; const pm_char stamp3[] PROGMEM = "TIME: " TIME_STR; - +const pm_char eeprom_stamp[] PROGMEM = "EEPR: " DEFNUMSTR(EEPROM_VER) "-" DEFNUMSTR(VARIANT);