diff --git a/src/eeprom_arm.cpp b/src/eeprom_arm.cpp index db16e4c2a..717b584dc 100644 --- a/src/eeprom_arm.cpp +++ b/src/eeprom_arm.cpp @@ -76,16 +76,12 @@ uint32_t Eeprom32_data_size ; #define EE_NOWAIT 1 -void init_spi(); - void eeDirty(uint8_t msk) { s_eeDirtyMsk |= msk; s_eeDirtyTime10ms = get_tmr10ms() ; } -void handle_serial( void ) ; - uint32_t get_current_block_number( uint32_t block_no, uint16_t *p_size, uint32_t *p_seq ) ; void write32_eeprom_block( uint32_t eeAddress, register uint8_t *buffer, uint32_t size, uint32_t immediate=0 ) ; void eeLoadModelNames( void ) ; diff --git a/src/frsky.h b/src/frsky.h index 55fa9da3a..5cabdab79 100644 --- a/src/frsky.h +++ b/src/frsky.h @@ -126,7 +126,7 @@ PACK(struct FrskyHubData { uint16_t maxCurrent; /* end */ int16_t varioSpeed; // 0x38 Added to FrSky protocol for home made varios - int16_t cellsSum; + uint16_t vfas; // 0x39 Added to FrSky protocol for home made sensors with a better precision uint16_t volts_bp; // 0x3A uint16_t volts_ap; // 0x3B // end of FrSky Hub data @@ -134,7 +134,7 @@ PACK(struct FrskyHubData { int16_t gpsAltitudeOffset; uint8_t varioAltitudeQueuePointer; // circular-buffer pointer uint8_t minCellIdx; - uint16_t vfas; + int16_t cellsSum; // TODO later uint16_t minVfas; }); diff --git a/src/general_menus.cpp b/src/general_menus.cpp index 3eaf15d1b..dfb94c8f9 100644 --- a/src/general_menus.cpp +++ b/src/general_menus.cpp @@ -136,9 +136,9 @@ enum menuGeneralSetupItems { ITEM_SETUP_MINUTE_BEEP, ITEM_SETUP_COUNTDOWN_BEEP, ITEM_SETUP_BACKLIGHT_LABEL, - ITEM_SETUP_FLASH_BEEP, ITEM_SETUP_BACKLIGHT_MODE, ITEM_SETUP_BACKLIGHT_DELAY, + ITEM_SETUP_FLASH_BEEP, #if defined(SPLASH) && !defined(FSPLASH) ITEM_SETUP_DISABLE_SPLASH, #endif @@ -393,6 +393,10 @@ void menuGeneralSetup(uint8_t event) g_eeGeneral.preBeep = onoffMenuItem( g_eeGeneral.preBeep, RADIO_SETUP_2ND_COLUMN, y, STR_BEEPCOUNTDOWN, attr, event ) ; break; + case ITEM_SETUP_BACKLIGHT_MODE: + g_eeGeneral.backlightMode = selectMenuItem(RADIO_SETUP_2ND_COLUMN, y, STR_MODE, STR_VBLMODE, g_eeGeneral.backlightMode, e_backlight_mode_off, e_backlight_mode_on, attr, event); + break; + case ITEM_SETUP_BACKLIGHT_LABEL: lcd_putsLeft(y, STR_BACKLIGHT_LABEL); break; @@ -401,10 +405,6 @@ void menuGeneralSetup(uint8_t event) g_eeGeneral.flashBeep = onoffMenuItem( g_eeGeneral.flashBeep, RADIO_SETUP_2ND_COLUMN, y, STR_ALARM, attr, event ) ; break; - case ITEM_SETUP_BACKLIGHT_MODE: - g_eeGeneral.backlightMode = selectMenuItem(RADIO_SETUP_2ND_COLUMN, y, STR_MODE, STR_VBLMODE, g_eeGeneral.backlightMode, e_backlight_mode_off, e_backlight_mode_on, attr, event); - break; - case ITEM_SETUP_BACKLIGHT_DELAY: lcd_putsLeft( y, STR_BLDELAY); lcd_outdezAtt(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.lightAutoOff*5, attr|LEFT); diff --git a/src/main_views.cpp b/src/main_views.cpp index d18641717..5000d2d36 100644 --- a/src/main_views.cpp +++ b/src/main_views.cpp @@ -547,7 +547,7 @@ void menuMainView(uint8_t event) for (uint8_t i=0; i<6; i++) { int8_t sw1 = (i<3 ? 1+i : 4+i); int8_t sw2 = (sw1 == 9 ? (getSwitch(4, 0) ? 4 : (getSwitch(5, 0) ? 5 : 6)) : sw1); - putsSwitches(i<3 ? 2*FW-3: 17*FW+2, (i%3)*FH+4*FH+1, sw2, getSwitch(sw1, 0) ? INVERS : 0); + putsSwitches(i<3 ? 2*FW-2: 17*FW-1, (i%3)*FH+4*FH+1, sw2, getSwitch(sw1, 0) ? INVERS : 0); } } else { diff --git a/src/menus.cpp b/src/menus.cpp index 1280ce37d..ca1d09604 100644 --- a/src/menus.cpp +++ b/src/menus.cpp @@ -662,7 +662,7 @@ void displayWarning(uint8_t event) int8_t selectMenuItem(uint8_t x, uint8_t y, const pm_char *label, const pm_char *values, int8_t value, int8_t min, int8_t max, LcdFlags attr, uint8_t event) { - lcd_putsLeft(y, label); + lcd_putsColumnLeft(x, y, label); if (values) lcd_putsiAtt(x, y, values, value-min, attr); if (attr) value = checkIncDec(event, value, min, max, (g_menuPos[0] == 0) ? EE_MODEL : EE_GENERAL); return value; @@ -680,7 +680,7 @@ uint8_t onoffMenuItem(uint8_t value, uint8_t x, uint8_t y, const pm_char *label, int8_t switchMenuItem(uint8_t x, uint8_t y, int8_t value, LcdFlags attr, uint8_t event) { - lcd_putsLeft(y, STR_SWITCH); + lcd_putsColumnLeft(x, y, STR_SWITCH); putsSwitches(x, y, value, attr); if (attr) CHECK_INCDEC_MODELSWITCH(event, value, -MAX_SWITCH, MAX_SWITCH); return value; diff --git a/src/menus.h b/src/menus.h index decec83b2..4c7c3e4b5 100644 --- a/src/menus.h +++ b/src/menus.h @@ -49,9 +49,15 @@ typedef void (*MenuFuncP)(uint8_t event); void displayScreenIndex(uint8_t index, uint8_t count, uint8_t attr); #if LCD_W >= 212 -#define MENUS_SCROLLBAR_WIDTH 2 +#define MENUS_SCROLLBAR_WIDTH 2 +#define MENU_COLUMNS 2 +#define MENU_COLUMN2_X (14 + LCD_W / 2) +#define lcd_putsColumnLeft(x, y, str) lcd_puts((x > (LCD_W-10*FW-MENUS_SCROLLBAR_WIDTH)) ? MENU_COLUMN2_X : 0, y, str) #else -#define MENUS_SCROLLBAR_WIDTH 0 +#define MENUS_SCROLLBAR_WIDTH 0 +#define MENU_COLUMNS 1 +#define COLUMN_X 0 +#define lcd_putsColumnLeft(x, y, str) lcd_putsLeft(y, str) #endif #if defined(SDCARD) diff --git a/src/model_menus.cpp b/src/model_menus.cpp index 37ca73a4d..6e2a8b550 100644 --- a/src/model_menus.cpp +++ b/src/model_menus.cpp @@ -1002,9 +1002,9 @@ void menuModelSetup(uint8_t event) static uint8_t s_currIdx; #if defined(TRANSLATIONS_FR) || defined(TRANSLATIONS_CZ) || defined(TRANSLATIONS_SE) || defined(TRANSLATIONS_DE) -#define MIXES_2ND_COLUMN (13*FW) -#else #define MIXES_2ND_COLUMN (11*FW) +#else +#define MIXES_2ND_COLUMN (9*FW) #endif #if LCD_W >= 212 @@ -1015,6 +1015,16 @@ static uint8_t s_currIdx; #define EXPO_ONE_FP_WIDTH (5*FW) #endif +#if MENU_COLUMNS > 1 +uint8_t editDelay(const xcoord_t x, const uint8_t y, const uint8_t event, const uint8_t attr, const pm_char *str, uint8_t delay) +{ + lcd_puts(x, y, str); + lcd_outdezAtt(x+MIXES_2ND_COLUMN, y, (10/DELAY_STEP)*delay, attr|PREC1|LEFT); + if (attr) CHECK_INCDEC_MODELVAR(event, delay, 0, DELAY_MAX); + return delay; +} +#define EDIT_DELAY(x, y, event, attr, str, delay) editDelay(x, y, event, attr, str, delay) +#else uint8_t editDelay(const uint8_t y, const uint8_t event, const uint8_t attr, const pm_char *str, uint8_t delay) { lcd_putsLeft(y, str); @@ -1022,6 +1032,8 @@ uint8_t editDelay(const uint8_t y, const uint8_t event, const uint8_t attr, cons if (attr) CHECK_INCDEC_MODELVAR(event, delay, 0, DELAY_MAX); return delay; } +#define EDIT_DELAY(x, y, event, attr, str, delay) editDelay(y, event, attr, str, delay) +#endif #if defined(FLIGHT_PHASES) @@ -1033,7 +1045,7 @@ uint8_t editDelay(const uint8_t y, const uint8_t event, const uint8_t attr, cons PhasesType editPhases(uint8_t x, uint8_t y, uint8_t event, PhasesType value, uint8_t attr) { - lcd_putsLeft(y, STR_FPHASE); + lcd_putsColumnLeft(x, y, STR_FPHASE); uint8_t posHorz = m_posHorz; @@ -1171,11 +1183,11 @@ void menuModelPhaseOne(uint8_t event) #endif case ITEM_MODEL_PHASE_FADE_IN: - phase->fadeIn = editDelay(y, event, attr, STR_FADEIN, phase->fadeIn); + phase->fadeIn = EDIT_DELAY(0, y, event, attr, STR_FADEIN, phase->fadeIn); break; case ITEM_MODEL_PHASE_FADE_OUT: - phase->fadeOut = editDelay(y, event, attr, STR_FADEOUT, phase->fadeOut); + phase->fadeOut = EDIT_DELAY(0, y, event, attr, STR_FADEOUT, phase->fadeOut); break; #if defined(GVARS) && !defined(CPUM64) && LCD_W < 260 @@ -1872,8 +1884,8 @@ enum MixFields { MIX_FIELD_OFFSET, MIX_FIELD_TRIM, IF_CURVES(MIX_FIELD_CURVE) - MIX_FIELD_SWITCH, IF_FLIGHT_PHASES(MIX_FIELD_FLIGHT_PHASE) + MIX_FIELD_SWITCH, MIX_FIELD_WARNING, MIX_FIELD_MLTPX, MIX_FIELD_DELAY_UP, @@ -1903,49 +1915,69 @@ void menuModelMixOne(uint8_t event) #else if (m_posVert == MIX_FIELD_TRIM && md2->srcRaw > NUM_STICKS) #endif - SUBMENU_NOTITLE(MIX_FIELD_COUNT, {IF_CPUARM(0) 0, 0, 0, 0, IF_CURVES(0) 0, IF_FLIGHT_PHASES(MAX_PHASES-1) 0 /*, ...*/}) + SUBMENU_NOTITLE(MIX_FIELD_COUNT, {IF_CPUARM(0) 0, 0, 0, 0, IF_CURVES(0) IF_FLIGHT_PHASES(MAX_PHASES-1) 0, 0 /*, ...*/}) else - SUBMENU_NOTITLE(MIX_FIELD_COUNT, {IF_CPUARM(0) 0, 0, 0, 1, IF_CURVES(1) 0, IF_FLIGHT_PHASES(MAX_PHASES-1) 0 /*, ...*/}); + SUBMENU_NOTITLE(MIX_FIELD_COUNT, {IF_CPUARM(0) 0, 0, 0, 1, IF_CURVES(1) IF_FLIGHT_PHASES(MAX_PHASES-1) 0, 0 /*, ...*/}); #else - SUBMENU_NOTITLE(MIX_FIELD_COUNT, {IF_CPUARM(0) 0, 0, 0, 1, IF_CURVES(1) 0, IF_FLIGHT_PHASES(MAX_PHASES-1) 0 /*, ...*/}); + SUBMENU_NOTITLE(MIX_FIELD_COUNT, {IF_CPUARM(0) 0, 0, 0, 1, IF_CURVES(1) IF_FLIGHT_PHASES(MAX_PHASES-1) 0, 0 /*, ...*/}); +#endif + +#if MENU_COLUMNS > 1 + lcd_vline(MENU_COLUMN2_X-4, FH+1, LCD_H-FH-1); #endif int8_t sub = m_posVert; int8_t editMode = s_editMode; - for (uint8_t k=0; k 1 + uint8_t y; + uint8_t COLUMN_X; + if (k >= LCD_LINES-1) { + y = 1 + (k-LCD_LINES+2)*FH; + COLUMN_X = MENU_COLUMN2_X; + } + else { + y = 1 + (k+1)*FH; + COLUMN_X = 0; + } + int8_t i = k; +#else uint8_t y = 1 + (k+1)*FH; int8_t i = k + s_pgOfs; +#endif + uint8_t attr = (sub==i ? (editMode>0 ? BLINK|INVERS : INVERS) : 0); switch(i) { #if defined(CPUARM) case MIX_FIELD_NAME: - editSingleName(MIXES_2ND_COLUMN, y, STR_MIXNAME, md2->name, sizeof(md2->name), event, attr); + editSingleName(COLUMN_X+MIXES_2ND_COLUMN, y, STR_MIXNAME, md2->name, sizeof(md2->name), event, attr); break; #endif case MIX_FIELD_SOURCE: - lcd_putsLeft(y, NO_INDENT(STR_SOURCE)); - putsMixerSource(MIXES_2ND_COLUMN, y, md2->srcRaw, attr); + lcd_putsColumnLeft(COLUMN_X, y, NO_INDENT(STR_SOURCE)); + putsMixerSource(COLUMN_X+MIXES_2ND_COLUMN, y, md2->srcRaw, attr); if(attr) CHECK_INCDEC_MODELVAR(event, md2->srcRaw, 1, NUM_XCHNMIX); break; case MIX_FIELD_WEIGHT: - lcd_putsLeft(y, STR_WEIGHT); - md2->weight = gvarMenuItem(MIXES_2ND_COLUMN, y, md2->weight, -125, 125, attr|LEFT, event); + lcd_putsColumnLeft(COLUMN_X, y, STR_WEIGHT); + md2->weight = gvarMenuItem(COLUMN_X+MIXES_2ND_COLUMN, y, md2->weight, -125, 125, attr|LEFT, event); break; case MIX_FIELD_OFFSET: - lcd_putsLeft(y, NO_INDENT(STR_OFFSET)); - md2->offset = gvarMenuItem(MIXES_2ND_COLUMN, y, md2->offset, -125, 125, attr|LEFT, event); + lcd_putsColumnLeft(COLUMN_X, y, NO_INDENT(STR_OFFSET)); + md2->offset = gvarMenuItem(COLUMN_X+MIXES_2ND_COLUMN, y, md2->offset, -125, 125, attr|LEFT, event); break; case MIX_FIELD_TRIM: { uint8_t not_stick = (md2->srcRaw > NUM_STICKS); int8_t carryTrim = -md2->carryTrim; - lcd_putsLeft(y, STR_TRIM); - lcd_putsiAtt((not_stick ? MIXES_2ND_COLUMN : MIXES_2ND_COLUMN-5*FW), y, STR_VMIXTRIMS, (not_stick && carryTrim == 0) ? 0 : carryTrim+1, m_posHorz==0 ? attr : 0); + lcd_putsColumnLeft(COLUMN_X, y, STR_TRIM); + lcd_putsiAtt((not_stick ? COLUMN_X+MIXES_2ND_COLUMN : COLUMN_X+6*FW-3), y, STR_VMIXTRIMS, (not_stick && carryTrim == 0) ? 0 : carryTrim+1, m_posHorz==0 ? attr : 0); if (attr && m_posHorz==0 && (not_stick || editMode>0)) md2->carryTrim = -checkIncDecModel(event, carryTrim, not_stick ? TRIM_ON : -TRIM_OFF, -TRIM_AIL); if (!not_stick) { - lcd_puts(MIXES_2ND_COLUMN, y, STR_DREX); - menu_lcd_onoff(MIXES_2ND_COLUMN+5*FW, y, !md2->noExpo, m_posHorz==1 ? attr : 0); + lcd_puts(COLUMN_X+MIXES_2ND_COLUMN, y, STR_DREX); + menu_lcd_onoff(COLUMN_X+MIXES_2ND_COLUMN+5*FW, y, !md2->noExpo, m_posHorz==1 ? attr : 0); if (attr && m_posHorz==1 && editMode>0) md2->noExpo = !checkIncDecModel(event, !md2->noExpo, 0, 1); } else if (attr) { @@ -1957,9 +1989,9 @@ void menuModelMixOne(uint8_t event) case MIX_FIELD_CURVE: { int8_t curveParam = md2->curveParam; - lcd_putsLeft(y, STR_CURVE); + lcd_putsColumnLeft(COLUMN_X, y, STR_CURVE); if (md2->curveMode == MODE_CURVE) { - putsCurve(MIXES_2ND_COLUMN, y, curveParam, attr); + putsCurve(COLUMN_X+MIXES_2ND_COLUMN, y, curveParam, attr); if (attr) { if (event==EVT_KEY_FIRST(KEY_MENU) && (curveParam<0 || curveParam>=CURVE_BASE)){ s_curveChan = (curveParam<0 ? -curveParam-1 : curveParam-CURVE_BASE); @@ -1974,8 +2006,8 @@ void menuModelMixOne(uint8_t event) } } else { - lcd_putsAtt(MIXES_2ND_COLUMN, y, PSTR("Diff"), m_posHorz==0 ? attr : 0); - md2->curveParam = gvarMenuItem(MIXES_2ND_COLUMN+5*FW, y, curveParam, -100, 100, LEFT|(m_posHorz==1 ? attr : 0), editMode>0 ? event : 0); + lcd_putsAtt(COLUMN_X+MIXES_2ND_COLUMN, y, PSTR("Diff"), m_posHorz==0 ? attr : 0); + md2->curveParam = gvarMenuItem(COLUMN_X+MIXES_2ND_COLUMN+5*FW, y, curveParam, -100, 100, LEFT|(m_posHorz==1 ? attr : 0), editMode>0 ? event : 0); if (attr && editMode>0 && m_posHorz==0) { int8_t tmp = 0; CHECK_INCDEC_MODELVAR(event, tmp, -1, 1); @@ -1988,36 +2020,36 @@ void menuModelMixOne(uint8_t event) break; } #endif - case MIX_FIELD_SWITCH: - md2->swtch = switchMenuItem(MIXES_2ND_COLUMN, y, md2->swtch, attr, event); - break; #if defined(FLIGHT_PHASES) case MIX_FIELD_FLIGHT_PHASE: - md2->phases = editPhases(MIXES_2ND_COLUMN, y, event, md2->phases, attr); + md2->phases = editPhases(COLUMN_X+MIXES_2ND_COLUMN, y, event, md2->phases, attr); break; #endif + case MIX_FIELD_SWITCH: + md2->swtch = switchMenuItem(COLUMN_X+MIXES_2ND_COLUMN, y, md2->swtch, attr, event); + break; case MIX_FIELD_WARNING: - lcd_putsLeft(y, STR_MIXWARNING); + lcd_putsColumnLeft(COLUMN_X+MIXES_2ND_COLUMN, y, STR_MIXWARNING); if (md2->mixWarn) - lcd_outdezAtt(MIXES_2ND_COLUMN, y, md2->mixWarn, attr|LEFT); + lcd_outdezAtt(COLUMN_X+MIXES_2ND_COLUMN, y, md2->mixWarn, attr|LEFT); else - lcd_putsAtt(MIXES_2ND_COLUMN, y, STR_OFF, attr); - if(attr) CHECK_INCDEC_MODELVAR( event, md2->mixWarn, 0, 3); + lcd_putsAtt(COLUMN_X+MIXES_2ND_COLUMN, y, STR_OFF, attr); + if (attr) CHECK_INCDEC_MODELVAR( event, md2->mixWarn, 0, 3); break; case MIX_FIELD_MLTPX: - md2->mltpx = selectMenuItem(MIXES_2ND_COLUMN, y, STR_MULTPX, STR_VMLTPX, md2->mltpx, 0, 2, attr, event); + md2->mltpx = selectMenuItem(COLUMN_X+MIXES_2ND_COLUMN, y, STR_MULTPX, STR_VMLTPX, md2->mltpx, 0, 2, attr, event); break; case MIX_FIELD_DELAY_UP: - md2->delayUp = editDelay(y, event, attr, STR_DELAYUP, md2->delayUp); + md2->delayUp = EDIT_DELAY(COLUMN_X, y, event, attr, STR_DELAYUP, md2->delayUp); break; case MIX_FIELD_DELAY_DOWN: - md2->delayDown = editDelay(y, event, attr, STR_DELAYDOWN, md2->delayDown); + md2->delayDown = EDIT_DELAY(COLUMN_X, y, event, attr, STR_DELAYDOWN, md2->delayDown); break; case MIX_FIELD_SLOW_UP: - md2->speedUp = editDelay(y, event, attr, STR_SLOWUP, md2->speedUp); + md2->speedUp = EDIT_DELAY(COLUMN_X, y, event, attr, STR_SLOWUP, md2->speedUp); break; case MIX_FIELD_SLOW_DOWN: - md2->speedDown = editDelay(y, event, attr, STR_SLOWDOWN, md2->speedDown); + md2->speedDown = EDIT_DELAY(COLUMN_X, y, event, attr, STR_SLOWDOWN, md2->speedDown); break; } } @@ -2333,14 +2365,17 @@ bool thrOutput(uint8_t ch) } enum LimitsItems { +#if defined(PCBX9D) || defined(PCBACT) + ITEM_LIMITS_CH_NAME, +#endif ITEM_LIMITS_OFFSET, ITEM_LIMITS_MIN, ITEM_LIMITS_MAX, ITEM_LIMITS_DIRECTION, -#ifdef PPM_CENTER_ADJUSTABLE +#if defined(PPM_CENTER_ADJUSTABLE) ITEM_LIMITS_PPM_CENTER, #endif -#ifdef PPM_LIMITS_SYMETRICAL +#if defined(PPM_LIMITS_SYMETRICAL) ITEM_LIMITS_SYMETRICAL, #endif ITEM_LIMITS_COUNT, @@ -2348,32 +2383,41 @@ enum LimitsItems { }; #if defined(PCBX9D) || defined(PCBACT) -#define LIMITS_DIRECTION_POS 12*FW+4 -#define LIMITS_MAX_POS 16*FW+4 -#define LIMITS_REVERT_POS 18*FW -#define LIMITS_PPM_CENTER_POS 25*FW + #define LIMITS_NAME_POS 4*FW + #define LIMITS_OFFSET_POS 14*FW + #define LIMITS_DIRECTION_POS 19*FW+4 + #define LIMITS_MIN_POS 19*FW + #define LIMITS_MAX_POS 23*FW+4 + #define LIMITS_REVERT_POS 26*FW + #define LIMITS_PPM_CENTER_POS 32*FW #else -#ifdef PPM_LIMITS_SYMETRICAL -#ifdef PPM_CENTER_ADJUSTABLE -#define LIMITS_MAX_POS 15*FW -#define LIMITS_REVERT_POS 16*FW-3 -#define LIMITS_PPM_CENTER_POS 20*FW+1 -#else -#define LIMITS_DIRECTION_POS 12*FW+4 -#define LIMITS_MAX_POS 16*FW+4 -#define LIMITS_REVERT_POS 17*FW -#endif -#else -#ifdef PPM_CENTER_ADJUSTABLE -#define LIMITS_MAX_POS 16*FW -#define LIMITS_REVERT_POS 17*FW-2 -#define LIMITS_PPM_CENTER_POS 21*FW+2 -#else -#define LIMITS_MAX_POS 17*FW -#define LIMITS_REVERT_POS 18*FW -#define LIMITS_DIRECTION_POS 12*FW+5 -#endif -#endif + #if defined(PPM_UNIT_US) + #define LIMITS_MIN_POS 12*FW+1 + #else + #define LIMITS_MIN_POS 12*FW + #endif + #define LIMITS_OFFSET_POS 8*FW + #ifdef PPM_LIMITS_SYMETRICAL + #ifdef PPM_CENTER_ADJUSTABLE + #define LIMITS_MAX_POS 15*FW + #define LIMITS_REVERT_POS 16*FW-3 + #define LIMITS_PPM_CENTER_POS 20*FW+1 + #else + #define LIMITS_DIRECTION_POS 12*FW+4 + #define LIMITS_MAX_POS 16*FW+4 + #define LIMITS_REVERT_POS 17*FW + #endif + #else + #ifdef PPM_CENTER_ADJUSTABLE + #define LIMITS_MAX_POS 16*FW + #define LIMITS_REVERT_POS 17*FW-2 + #define LIMITS_PPM_CENTER_POS 21*FW+2 + #else + #define LIMITS_MAX_POS 17*FW + #define LIMITS_REVERT_POS 18*FW + #define LIMITS_DIRECTION_POS 12*FW+5 + #endif + #endif #endif void menuModelLimits(uint8_t event) @@ -2445,11 +2489,17 @@ void menuModelLimits(uint8_t event) uint8_t active = (attr && (s_editMode>0 || p1valdiff)) ; switch(j) { +#if defined(PCBX9D) || defined(PCBACT) + case ITEM_LIMITS_CH_NAME: + editName(LIMITS_NAME_POS, y, ld->name, sizeof(ld->name), event, attr); + break; +#endif + case ITEM_LIMITS_OFFSET: #if defined(PPM_UNIT_US) - lcd_outdezAtt( 8*FW, y, ((int32_t)ld->offset*128) / 25, attr|PREC1); + lcd_outdezAtt(LIMITS_OFFSET_POS, y, ((int32_t)ld->offset*128) / 25, attr|PREC1); #else - lcd_outdezAtt( 8*FW, y, ld->offset, attr|PREC1); + lcd_outdezAtt(LIMITS_OFFSET_POS, y, ld->offset, attr|PREC1); #endif if (active) { ld->offset = checkIncDec(event, ld->offset, -1000, 1000, EE_MODEL|NO_INCDEC_MARKS); @@ -2473,9 +2523,9 @@ void menuModelLimits(uint8_t event) break; case ITEM_LIMITS_MIN: #if defined(PPM_UNIT_US) - lcd_outdezAtt(12*FW+1, y, (((int16_t)ld->min-100)*128) / 25, attr); + lcd_outdezAtt(LIMITS_MIN_POS, y, (((int16_t)ld->min-100)*128) / 25, attr); #else - lcd_outdezAtt(12*FW, y, (int8_t)(ld->min-100), attr); + lcd_outdezAtt(LIMITS_MIN_POS, y, (int8_t)(ld->min-100), attr); #endif if (active) ld->min = 100 + checkIncDecModel(event, ld->min-100, -limit, 25); break; @@ -2517,7 +2567,7 @@ void menuModelLimits(uint8_t event) #endif #if defined(PPM_LIMITS_SYMETRICAL) case ITEM_LIMITS_SYMETRICAL: - lcd_putcAtt(LCD_W-FW, y, ld->symetrical ? '=' : '^', attr); + lcd_putcAtt(LCD_W-FW-MENUS_SCROLLBAR_WIDTH, y, ld->symetrical ? '=' : '^', attr); if (active) { CHECK_INCDEC_MODELVAR(event, ld->symetrical, 0, 1); } diff --git a/src/myeeprom.h b/src/myeeprom.h index a5586f4d6..a963d0c84 100644 --- a/src/myeeprom.h +++ b/src/myeeprom.h @@ -120,6 +120,16 @@ enum BeeperMode { #define EXTRA_GENERAL_FIELDS #endif +#if defined(PCBX9D) || defined(PCBACT) +#define MODELDATA_EXTRA char bitmap[10]; +#define LIMITDATA_EXTRA char name[6]; +#define swstate_t uint16_t +#else +#define MODELDATA_EXTRA +#define LIMITDATA_EXTRA +#define swstate_t uint8_t +#endif + enum BacklightMode { e_backlight_mode_off = 0, e_backlight_mode_keys, @@ -224,6 +234,9 @@ PACK(typedef struct t_LimitData { int16_t offset:14; uint16_t symetrical:1; uint16_t revert:1; + + LIMITDATA_EXTRA + }) LimitData; @@ -602,7 +615,7 @@ typedef char gvar_name_t[6]; #if defined(CPUM64) && defined(GVARS) #define MAX_GVARS 5 -#define MODEL_GVARS_DATA gvar_t gvars[MAX_GVARS] +#define MODEL_GVARS_DATA gvar_t gvars[MAX_GVARS]; #define PHASE_GVARS_DATA #define GVAR_VALUE(x, p) g_model.gvars[x] #elif defined(CPUM64) @@ -611,12 +624,12 @@ typedef char gvar_name_t[6]; #define PHASE_GVARS_DATA #elif defined(GVARS) #define MAX_GVARS 5 -#define MODEL_GVARS_DATA gvar_name_t gvarsNames[MAX_GVARS] +#define MODEL_GVARS_DATA gvar_name_t gvarsNames[MAX_GVARS]; #define PHASE_GVARS_DATA gvar_t gvars[MAX_GVARS] #define GVAR_VALUE(x, p) g_model.phaseData[p].gvars[x] #else #define MAX_GVARS 0 -#define MODEL_GVARS_DATA gvar_name_t gvarsNames[5] +#define MODEL_GVARS_DATA gvar_name_t gvarsNames[5]; #define PHASE_GVARS_DATA gvar_t gvars[5] #endif @@ -802,9 +815,9 @@ enum Dsm2Variants { }; #if defined(MAVLINK) -#define TELEMETRY_DATA MavlinkData mavlink +#define TELEMETRY_DATA MavlinkData mavlink; #elif defined(FRSKY) || !defined(CPUM64) -#define TELEMETRY_DATA FrSkyData frsky +#define TELEMETRY_DATA FrSkyData frsky; #else #define TELEMETRY_DATA #endif @@ -815,14 +828,6 @@ enum Dsm2Variants { #define BeepANACenter uint8_t #endif -#if defined(PCBX9D) || defined(PCBACT) -#define MODELDATA_EXTRA char bitmap[10] -#define swstate_t uint16_t -#else -#define MODELDATA_EXTRA -#define swstate_t uint8_t -#endif - PACK(typedef struct t_ModelData { char name[LEN_MODEL_NAME]; // must be first for eeLoadModelName TimerData timers[MAX_TIMERS]; @@ -855,13 +860,13 @@ PACK(typedef struct t_ModelData { swstate_t switchWarningStates; - MODEL_GVARS_DATA; + MODEL_GVARS_DATA - TELEMETRY_DATA; + TELEMETRY_DATA - ROTARY_ENCODER_ARRAY_EXTRA; + ROTARY_ENCODER_ARRAY_EXTRA - MODELDATA_EXTRA; + MODELDATA_EXTRA }) ModelData; diff --git a/src/sky9x/board_sky9x.h b/src/sky9x/board_sky9x.h index 3b52911e2..b8a9e7d23 100644 --- a/src/sky9x/board_sky9x.h +++ b/src/sky9x/board_sky9x.h @@ -171,7 +171,7 @@ uint32_t sdMounted(); // WDT driver #if !defined(SIMU) #define wdt_disable() -#define wdt_enable(x) WDT->WDT_MR = 0x3FFF217F; +#define wdt_enable(x) WDT->WDT_MR = 0x3FFF217F #define wdt_reset() WDT->WDT_CR = 0xA5000001 #endif diff --git a/src/sticks.lbm b/src/sticks.lbm index 22b871820..55cbe58ef 100644 --- a/src/sticks.lbm +++ b/src/sticks.lbm @@ -1,5 +1,5 @@ 18,8, -0x00,0x08,0x1c,0x08,0x08,0x08,0x1c,0x08,0x00,0x00,0x08,0x22,0x00,0x49,0x00,0x22,0x08,0x00, -0x00,0x00,0x00,0x00,0x22,0x7f,0x22,0x00,0x00,0x00,0x08,0x22,0x00,0x49,0x00,0x22,0x08,0x00, -0x00,0x08,0x22,0x00,0x49,0x00,0x22,0x08,0x00,0x00,0x00,0x22,0x7f,0x22,0x00,0x00,0x00,0x00, -0x00,0x08,0x22,0x00,0x49,0x00,0x22,0x08,0x00,0x00,0x08,0x1c,0x08,0x08,0x08,0x1c,0x08,0x00, +0x00,0x10,0x38,0x10,0x10,0x10,0x38,0x10,0x00,0x00,0x10,0x44,0x00,0x92,0x00,0x44,0x10,0x00, +0x00,0x00,0x00,0x00,0x44,0xfe,0x44,0x00,0x00,0x00,0x10,0x44,0x00,0x92,0x00,0x44,0x10,0x00, +0x00,0x10,0x44,0x00,0x92,0x00,0x44,0x10,0x00,0x00,0x00,0x44,0xfe,0x44,0x00,0x00,0x00,0x00, +0x00,0x10,0x44,0x00,0x92,0x00,0x44,0x10,0x00,0x00,0x10,0x38,0x10,0x10,0x10,0x38,0x10,0x00, diff --git a/src/sticks_4x1.xbm b/src/sticks_4x1.xbm index 52436e597..7ef10c94e 100644 --- a/src/sticks_4x1.xbm +++ b/src/sticks_4x1.xbm @@ -1,11 +1,11 @@ -#define sticks_width 18 -#define sticks_height 32 -static unsigned char sticks_bits[] = { - 0x00, 0x20, 0x00, 0x00, 0x88, 0x00, 0x44, 0x00, 0x00, 0xfe, 0x24, 0x01, - 0x44, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x20, 0x00, 0x70, 0x88, 0x00, 0x20, 0x00, 0x00, 0x20, 0x24, 0x01, - 0x20, 0x00, 0x00, 0x70, 0x88, 0x00, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x10, 0x00, 0x44, 0x38, 0x00, 0x00, 0x10, 0x00, 0x92, 0x10, 0x00, - 0x00, 0x10, 0x00, 0x44, 0x38, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x88, 0x00, 0x92, 0xfc, 0x01, - 0x00, 0x88, 0x00, 0x44, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 }; +#define sticks_4x1_width 18 +#define sticks_4x1_height 32 +static unsigned char sticks_4x1_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x88, 0x00, 0x44, 0x00, 0x00, + 0xfe, 0x24, 0x01, 0x44, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x20, 0x00, 0x70, 0x88, 0x00, 0x20, 0x00, 0x00, + 0x20, 0x24, 0x01, 0x20, 0x00, 0x00, 0x70, 0x88, 0x00, 0x20, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x44, 0x38, 0x00, 0x00, 0x10, 0x00, + 0x92, 0x10, 0x00, 0x00, 0x10, 0x00, 0x44, 0x38, 0x00, 0x10, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x88, 0x00, + 0x92, 0xfc, 0x01, 0x00, 0x88, 0x00, 0x44, 0x00, 0x00, 0x10, 0x00, 0x00 };