[FrSky] VFAS is now ID 0x39

[X9D] New Mixer menu (with 2 columns)
[X9D] Names for channels
This commit is contained in:
bsongis
2013-02-01 18:40:08 +00:00
parent 313a74bc7c
commit e247194fac
11 changed files with 176 additions and 119 deletions
-4
View File
@@ -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 ) ;
+2 -2
View File
@@ -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;
});
+5 -5
View File
@@ -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);
+1 -1
View File
@@ -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 {
+2 -2
View File
@@ -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;
+8 -2
View File
@@ -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)
+120 -70
View File
@@ -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<LCD_LINES-1; k++) {
for (uint8_t k=0; k<MENU_COLUMNS*(LCD_LINES-1); k++) {
#if MENU_COLUMNS > 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);
}
+22 -17
View File
@@ -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;
+1 -1
View File
@@ -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
+4 -4
View File
@@ -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,
+11 -11
View File
@@ -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 };