[9x] BATTGRAPH option added to display the Tx voltage
[all] AdjustGVARs feature reworked (now 4 modes) [!ARM] PlayTrack can now play GVARs
This commit is contained in:
+8
-1
@@ -113,9 +113,10 @@ PWM_BACKLIGHT = NO
|
||||
# Values = YES, NO, FIXED
|
||||
SPLASH = YES
|
||||
|
||||
# GRAPHICS (sliders / checkboxes / bold)
|
||||
# GRAPHICS (sliders / checkboxes / bold / batt graph)
|
||||
GRAPHICS = YES
|
||||
BOLD = YES
|
||||
BATTGRAPH = YES
|
||||
|
||||
# THR trace (in STATS screen)
|
||||
THR_TRACE = YES
|
||||
@@ -389,6 +390,12 @@ ifeq ($(BOLD), YES)
|
||||
CPPDEFS += -DBOLD_FONT
|
||||
endif
|
||||
|
||||
ifneq ($(PCB), X9D)
|
||||
ifeq ($(BATTGRAPH), YES)
|
||||
CPPDEFS += -DBATTGRAPH
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(THR_TRACE), YES)
|
||||
CPPDEFS += -DTHRTRACE
|
||||
endif
|
||||
|
||||
+4
-4
@@ -1039,9 +1039,9 @@ int16_t convertCswTelemValue(CustomSwData * cs)
|
||||
{
|
||||
int16_t val;
|
||||
if (CS_STATE(cs->func)==CS_VOFS)
|
||||
val = convertTelemValue(cs->v1 - MIXSRC_LAST_CH, 128+cs->v2);
|
||||
val = convertTelemValue(cs->v1 - MIXSRC_FIRST_TELEM + 1, 128+cs->v2);
|
||||
else
|
||||
val = convertTelemValue(cs->v1 - MIXSRC_LAST_CH, 128+cs->v2) - convertTelemValue(cs->v1 - MIXSRC_LAST_CH, 128);
|
||||
val = convertTelemValue(cs->v1 - MIXSRC_FIRST_TELEM + 1, 128+cs->v2) - convertTelemValue(cs->v1 - MIXSRC_FIRST_TELEM + 1, 128);
|
||||
return val;
|
||||
}
|
||||
|
||||
@@ -1308,7 +1308,7 @@ void menuTelemetryFrsky(uint8_t event)
|
||||
uint8_t y = barHeight+6+i*(barHeight+6);
|
||||
lcd_putsiAtt(0, y+barHeight-5, STR_VTELEMCHNS, source, 0);
|
||||
lcd_rect(25, y, 101, barHeight+2);
|
||||
int16_t value = getValue(MIXSRC_LAST_CH+source-1);
|
||||
int16_t value = getValue(MIXSRC_FIRST_TELEM+source-2);
|
||||
int16_t threshold = 0;
|
||||
uint8_t thresholdX = 0;
|
||||
if (source <= TELEM_TM2)
|
||||
@@ -1381,7 +1381,7 @@ void menuTelemetryFrsky(uint8_t event)
|
||||
}
|
||||
if (field) {
|
||||
fields_count++;
|
||||
int16_t value = getValue(MIXSRC_LAST_CH+field-1);
|
||||
int16_t value = getValue(MIXSRC_FIRST_TELEM+field-2);
|
||||
uint8_t att = (i==3 ? NO_UNIT : DBLSIZE|NO_UNIT);
|
||||
if (field >= TELEM_TM1 && field <= TELEM_TM2) {
|
||||
uint8_t x = (i==3 ? j?80:20 : j?74:10);
|
||||
|
||||
+20
-4
@@ -76,8 +76,8 @@ const MenuFuncP_PROGMEM menuTabDiag[] PROGMEM = {
|
||||
#define RADIO_SETUP_DATE_COLUMN RADIO_SETUP_2ND_COLUMN + 4*FWNUM
|
||||
#define RADIO_SETUP_TIME_COLUMN RADIO_SETUP_2ND_COLUMN + 2*FWNUM
|
||||
#else
|
||||
#define RADIO_SETUP_2ND_COLUMN (LCD_W-5*FW-MENUS_SCROLLBAR_WIDTH)
|
||||
#define RADIO_SETUP_TIME_COLUMN (FW*15+5)
|
||||
#define RADIO_SETUP_2ND_COLUMN (LCD_W-6*FW-3-MENUS_SCROLLBAR_WIDTH)
|
||||
#define RADIO_SETUP_TIME_COLUMN (FW*15+9)
|
||||
#define RADIO_SETUP_DATE_COLUMN (FW*15+5)
|
||||
#endif
|
||||
|
||||
@@ -114,6 +114,7 @@ const MenuFuncP_PROGMEM menuTabDiag[] PROGMEM = {
|
||||
enum menuGeneralSetupItems {
|
||||
IF_RTCLOCK(ITEM_SETUP_DATE)
|
||||
IF_RTCLOCK(ITEM_SETUP_TIME)
|
||||
IF_BATTGRAPH(ITEM_SETUP_BATT_RANGE)
|
||||
ITEM_SETUP_SOUND_LABEL,
|
||||
ITEM_SETUP_BEEPER_MODE,
|
||||
ITEM_SETUP_BEEPER_LENGTH,
|
||||
@@ -166,7 +167,7 @@ void menuGeneralSetup(uint8_t event)
|
||||
}
|
||||
#endif
|
||||
|
||||
MENU(STR_MENURADIOSETUP, menuTabDiag, e_Setup, ITEM_SETUP_MAX+1, {0, IF_RTCLOCK(2) IF_RTCLOCK(2) LABEL(SOUND), 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_CPUARM(0) 0, 0, 0, IF_ROTARY_ENCODERS(0) 0, LABEL(TIMER_EVENTS), 0, 0, LABEL(BACKLIGHT), 0, 0, CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, IF_SPLASH(0) IF_FRSKY(0) IF_FRSKY(0) 0, LABEL(TX_MODE), CASE_PCBX9D(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), 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_CPUARM(0) 0, 0, 0, IF_ROTARY_ENCODERS(0) 0, LABEL(TIMER_EVENTS), 0, 0, LABEL(BACKLIGHT), 0, 0, CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, IF_SPLASH(0) IF_FRSKY(0) IF_FRSKY(0) 0, LABEL(TX_MODE), CASE_PCBX9D(0) 1/*to force edit mode*/});
|
||||
|
||||
uint8_t sub = m_posVert - 1;
|
||||
|
||||
@@ -233,6 +234,21 @@ void menuGeneralSetup(uint8_t event)
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(BATTGRAPH)
|
||||
case ITEM_SETUP_BATT_RANGE:
|
||||
lcd_putsLeft(y, PSTR("Battery Range"));
|
||||
lcd_putc(g_eeGeneral.vBatMin >= 10 ? RADIO_SETUP_2ND_COLUMN+2*FW+FWNUM-1 : RADIO_SETUP_2ND_COLUMN+2*FW+FWNUM-FW/2, y, '-');
|
||||
putsVolts(RADIO_SETUP_2ND_COLUMN, y, 90+g_eeGeneral.vBatMin, (m_posHorz==0 ? attr : 0)|LEFT|NO_UNIT);
|
||||
putsVolts(RADIO_SETUP_2ND_COLUMN+4*FW-2, y, 120+g_eeGeneral.vBatMax, (m_posHorz!=0 ? attr : 0)|LEFT|NO_UNIT);
|
||||
if (attr && s_editMode>0) {
|
||||
if (m_posHorz==0)
|
||||
CHECK_INCDEC_GENVAR(event, g_eeGeneral.vBatMin, -50, g_eeGeneral.vBatMax+20); // min=4.0V
|
||||
else
|
||||
CHECK_INCDEC_GENVAR(event, g_eeGeneral.vBatMax, g_eeGeneral.vBatMin-20, +40); // max=16.0V
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case ITEM_SETUP_SOUND_LABEL:
|
||||
lcd_putsLeft(y, STR_SOUND_LABEL);
|
||||
break;
|
||||
@@ -327,7 +343,7 @@ void menuGeneralSetup(uint8_t event)
|
||||
break;
|
||||
|
||||
case ITEM_SETUP_BATTERY_WARNING:
|
||||
lcd_putsLeft( y,STR_BATTERYWARNING);
|
||||
lcd_putsLeft(y, STR_BATTERYWARNING);
|
||||
putsVolts(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.vBatWarn, attr|LEFT);
|
||||
if(attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.vBatWarn, 40, 120); //4-12V
|
||||
break;
|
||||
|
||||
+5
-1
@@ -771,8 +771,12 @@ void putsMixerSource(xcoord_t x, uint8_t y, uint8_t idx, LcdFlags att)
|
||||
putsStrIdx(x, y, STR_PPM, idx-MIXSRC_PPM1+1, att);
|
||||
else if (idx <= MIXSRC_LAST_CH)
|
||||
putsStrIdx(x, y, STR_CH, idx-MIXSRC_CH1+1, att);
|
||||
#if defined(GVARS)
|
||||
else if (idx <= MIXSRC_LAST_GVAR)
|
||||
putsStrIdx(x, y, STR_GV, idx-MIXSRC_GVAR1+1, att);
|
||||
#endif
|
||||
else
|
||||
lcd_putsiAtt(x, y, STR_VTELEMCHNS, idx-MIXSRC_LAST_CH, att);
|
||||
lcd_putsiAtt(x, y, STR_VTELEMCHNS, idx-MIXSRC_FIRST_TELEM+1, att);
|
||||
}
|
||||
|
||||
void putsChnLetter(xcoord_t x, uint8_t y, uint8_t idx, LcdFlags attr)
|
||||
|
||||
+25
-15
@@ -224,9 +224,30 @@ void displayTimers()
|
||||
}
|
||||
#endif
|
||||
|
||||
void displayBattVoltage()
|
||||
{
|
||||
#if defined(BATTGRAPH)
|
||||
putsVBat(VBATT_X-8, VBATT_Y+1, 0);
|
||||
lcd_filled_rect(VBATT_X-25, VBATT_Y+9, 22, 5);
|
||||
lcd_vline(VBATT_X-3, VBATT_Y+10, 3);
|
||||
uint8_t count = limit<uint8_t>(2, 20 * (g_vbat100mV - g_eeGeneral.vBatMin - 90) / (30 + g_eeGeneral.vBatMax - g_eeGeneral.vBatMin), 20);
|
||||
for (uint8_t i=0; i<count; i+=2)
|
||||
lcd_vline(VBATT_X-24+i, VBATT_Y+10, 3);
|
||||
if (g_vbat100mV > g_eeGeneral.vBatWarn || BLINK_ON_PHASE)
|
||||
lcd_filled_rect(VBATT_X-26, VBATT_Y, 25, 15);
|
||||
#else
|
||||
LcdFlags att = (g_vbat100mV <= g_eeGeneral.vBatWarn ? BLINK|INVERS : 0) | BIGSIZE;
|
||||
putsVBat(VBATT_X-1, VBATT_Y, att|NO_UNIT);
|
||||
#if LCD_W >= 212
|
||||
lcd_putcAtt(VBATTUNIT_X, VBATTUNIT_Y, 'v', MIDSIZE);
|
||||
#else
|
||||
lcd_putc(VBATT_X, VBATTUNIT_Y, 'V');
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(CPUARM)
|
||||
void displayVoltage()
|
||||
void displayVoltageOrAlarm()
|
||||
{
|
||||
if (g_vbat100mV > g_eeGeneral.vBatWarn && g_eeGeneral.temperatureWarn && getTemperature() >= g_eeGeneral.temperatureWarn) {
|
||||
putsTelemetryValue(6*FW-1, 3*FH, getTemperature(), UNIT_DEGREES, BLINK|INVERS|DBLSIZE);
|
||||
@@ -237,22 +258,11 @@ void displayVoltage()
|
||||
}
|
||||
#endif
|
||||
else {
|
||||
LcdFlags att = (g_vbat100mV <= g_eeGeneral.vBatWarn ? BLINK|INVERS : 0) | BIGSIZE;
|
||||
putsVBat(VBATT_X-1, VBATT_Y, att|NO_UNIT);
|
||||
#if LCD_W >= 212
|
||||
lcd_putcAtt(VBATTUNIT_X, VBATTUNIT_Y, 'v', MIDSIZE);
|
||||
#else
|
||||
lcd_putc(VBATT_X, VBATTUNIT_Y, 'V');
|
||||
#endif
|
||||
displayBattVoltage();
|
||||
}
|
||||
}
|
||||
#else
|
||||
void displayVoltage()
|
||||
{
|
||||
LcdFlags att = (g_vbat100mV <= g_eeGeneral.vBatWarn ? BLINK|INVERS : 0) | BIGSIZE;
|
||||
putsVBat(VBATT_X-1, VBATT_Y, att|NO_UNIT);
|
||||
lcd_putc(VBATT_X, VBATTUNIT_Y, 'V');
|
||||
}
|
||||
#define displayVoltageOrAlarm() displayBattVoltage()
|
||||
#endif
|
||||
|
||||
#if defined(PCBX9D) || defined(PCBACT)
|
||||
@@ -431,7 +441,7 @@ void menuMainView(uint8_t event)
|
||||
putsModelName(MODELNAME_X, 0*FH, g_model.name, g_eeGeneral.currModel, BIGSIZE);
|
||||
|
||||
// Main Voltage (or alarm if any)
|
||||
displayVoltage();
|
||||
displayVoltageOrAlarm();
|
||||
|
||||
// Timers
|
||||
displayTimers();
|
||||
|
||||
+116
-58
@@ -899,6 +899,7 @@ void menuModelSetup(uint8_t event)
|
||||
getMovedSwitch();
|
||||
g_model.switchWarningStates = 0x01 + (switches_states << 1);
|
||||
// no break
|
||||
CASE_EVT_ROTARY_BREAK
|
||||
case EVT_KEY_BREAK(KEY_ENTER):
|
||||
#if !defined(PCBX9D)
|
||||
case EVT_KEY_BREAK(KEY_LEFT):
|
||||
@@ -1036,7 +1037,7 @@ void menuModelSetup(uint8_t event)
|
||||
lcd_outdezAtt(MODEL_SETUP_2ND_COLUMN+8*FW+2, y, (g_model.ppmDelay*50)+300, m_posHorz==1 ? attr : 0);
|
||||
lcd_putcAtt(MODEL_SETUP_2ND_COLUMN+10*FW, y, g_model.pulsePol ? '+' : '-', m_posHorz==2 ? attr : 0);
|
||||
|
||||
if(attr && (editMode>0 || p1valdiff)) {
|
||||
if (attr && (editMode>0 || p1valdiff)) {
|
||||
switch (m_posHorz) {
|
||||
case 0:
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.ppmFrameLength, -20, 35);
|
||||
@@ -3021,7 +3022,7 @@ void menuModelCustomSwitchOne(uint8_t event)
|
||||
case CSW_FIELD_V1:
|
||||
{
|
||||
lcd_putsLeft(y, STR_V1);
|
||||
int8_t v1_min=0, v1_max=MIXSRC_LAST_CH+NUM_TELEMETRY;
|
||||
int8_t v1_min=0, v1_max=MIXSRC_LAST_TELEM;
|
||||
if (cstate == CS_VBOOL) {
|
||||
putsSwitches(CSWONE_2ND_COLUMN, y, cs->v1, attr);
|
||||
v1_min = SWSRC_OFF+1; v1_max = SWSRC_ON-1;
|
||||
@@ -3037,7 +3038,7 @@ void menuModelCustomSwitchOne(uint8_t event)
|
||||
case CSW_FIELD_V2:
|
||||
{
|
||||
lcd_putsLeft(y, STR_V2);
|
||||
int8_t v2_min=0, v2_max=MIXSRC_LAST_CH+NUM_TELEMETRY;
|
||||
int8_t v2_min=0, v2_max=MIXSRC_LAST_TELEM;
|
||||
if (cstate == CS_VBOOL) {
|
||||
putsSwitches(CSWONE_2ND_COLUMN, y, cs->v2, attr);
|
||||
v2_min = SWSRC_OFF+1; v2_max = SWSRC_OFF-1;
|
||||
@@ -3047,9 +3048,9 @@ void menuModelCustomSwitchOne(uint8_t event)
|
||||
}
|
||||
else {
|
||||
#if defined(FRSKY)
|
||||
if (cs->v1 > MIXSRC_LAST_CH) {
|
||||
putsTelemetryChannel(CSWONE_2ND_COLUMN, y, cs->v1 - MIXSRC_LAST_CH - 1, convertCswTelemValue(cs), attr|LEFT);
|
||||
v2_max = maxTelemValue(cs->v1 - MIXSRC_LAST_CH);
|
||||
if (cs->v1 >= MIXSRC_FIRST_TELEM) {
|
||||
putsTelemetryChannel(CSWONE_2ND_COLUMN, y, cs->v1 - MIXSRC_FIRST_TELEM, convertCswTelemValue(cs), attr|LEFT);
|
||||
v2_max = maxTelemValue(cs->v1 - MIXSRC_FIRST_TELEM + 1);
|
||||
if (cstate == CS_VOFS) {
|
||||
v2_min = -128;
|
||||
v2_max -= 128;
|
||||
@@ -3158,8 +3159,8 @@ void menuModelCustomSwitches(uint8_t event)
|
||||
putsMixerSource(CSW_2ND_COLUMN, y, cs->v1, 0);
|
||||
|
||||
#if defined(FRSKY)
|
||||
if (cs->v1 > MIXSRC_LAST_CH) {
|
||||
putsTelemetryChannel(CSW_3RD_COLUMN, y, cs->v1 - MIXSRC_LAST_CH - 1, convertCswTelemValue(cs), 0);
|
||||
if (cs->v1 >= MIXSRC_FIRST_TELEM) {
|
||||
putsTelemetryChannel(CSW_3RD_COLUMN, y, cs->v1 - MIXSRC_FIRST_TELEM, convertCswTelemValue(cs), 0);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
@@ -3205,7 +3206,7 @@ void menuModelCustomSwitches(uint8_t event)
|
||||
|
||||
// CSW params
|
||||
uint8_t cstate = CS_STATE(cs->func);
|
||||
int8_t v1_min=0, v1_max=MIXSRC_LAST_CH+NUM_TELEMETRY, v2_min=0, v2_max=MIXSRC_LAST_CH+NUM_TELEMETRY;
|
||||
int8_t v1_min=0, v1_max=MIXSRC_LAST_TELEM, v2_min=0, v2_max=MIXSRC_LAST_TELEM;
|
||||
|
||||
if (cstate == CS_VBOOL) {
|
||||
putsSwitches(CSW_2ND_COLUMN, y, cs->v1, m_posHorz==1 ? attr : 0);
|
||||
@@ -3221,9 +3222,9 @@ void menuModelCustomSwitches(uint8_t event)
|
||||
putsMixerSource(CSW_2ND_COLUMN, y, cs->v1, (m_posHorz==1 ? attr : 0));
|
||||
|
||||
#if defined(FRSKY)
|
||||
if (cs->v1 > MIXSRC_LAST_CH) {
|
||||
putsTelemetryChannel(CSW_3RD_COLUMN, y, cs->v1 - MIXSRC_LAST_CH - 1, convertCswTelemValue(cs), m_posHorz==2 ? attr : 0);
|
||||
v2_max = maxTelemValue(cs->v1 - MIXSRC_LAST_CH);
|
||||
if (cs->v1 >= MIXSRC_FIRST_TELEM) {
|
||||
putsTelemetryChannel(CSW_3RD_COLUMN, y, cs->v1 MIXSRC_FIRST_TELEM, convertCswTelemValue(cs), m_posHorz==2 ? attr : 0);
|
||||
v2_max = maxTelemValue(cs->v1 - MIXSRC_FIRST_TELEM + 1);
|
||||
if (cstate == CS_VOFS) {
|
||||
v2_min = -128;
|
||||
v2_max -= 128;
|
||||
@@ -3348,37 +3349,49 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
case 1:
|
||||
if (sd->swtch) {
|
||||
uint8_t func_displayed;
|
||||
if (sd->func < FUNC_TRAINER) {
|
||||
if (CFN_FUNC(sd) < FUNC_TRAINER) {
|
||||
func_displayed = 0;
|
||||
putsChn(MODEL_CUSTOM_FUNC_2ND_COLUMN+6*FW, y, sd->func+1, attr);
|
||||
putsChn(MODEL_CUSTOM_FUNC_2ND_COLUMN+6*FW, y, CFN_CH_NUMBER(sd)+1, attr);
|
||||
}
|
||||
else if (sd->func < 16 + NUM_STICKS + 1) {
|
||||
else if (CFN_FUNC(sd) <= FUNC_TRAINER + NUM_STICKS) {
|
||||
func_displayed = 1;
|
||||
if (sd->func != FUNC_TRAINER)
|
||||
putsMixerSource(MODEL_CUSTOM_FUNC_2ND_COLUMN+7*FW, y, sd->func-FUNC_TRAINER, attr);
|
||||
if (CFN_FUNC(sd) != FUNC_TRAINER)
|
||||
putsMixerSource(MODEL_CUSTOM_FUNC_2ND_COLUMN+7*FW, y, CFN_FUNC(sd)-FUNC_TRAINER, attr);
|
||||
}
|
||||
#if defined(DEBUG)
|
||||
else if (sd->func == FUNC_TEST) {
|
||||
else if (CFN_FUNC(sd) == FUNC_TEST) {
|
||||
#if defined(GVARS)
|
||||
func_displayed = FUNC_TEST - 16 - NUM_STICKS - MAX_GVARS + 2;
|
||||
func_displayed = FUNC_TEST - FUNC_TRAINER - NUM_STICKS - MAX_GVARS + 2;
|
||||
#else
|
||||
func_displayed = FUNC_TEST - 16 - NUM_STICKS + 1;
|
||||
func_displayed = FUNC_TEST - FUNC_TRAINER - NUM_STICKS + 1;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
#if defined(GVARS)
|
||||
else if (sd->func >= FUNC_ADJUST_GV1) {
|
||||
func_displayed = FUNC_ADJUST_GV1 - 16 - NUM_STICKS + 1;
|
||||
putsStrIdx(MODEL_CUSTOM_FUNC_2ND_COLUMN+7*FW, y, STR_GV, sd->func-FUNC_ADJUST_GV1+1, attr);
|
||||
else if (CFN_FUNC(sd) >= FUNC_ADJUST_GV1) {
|
||||
func_displayed = FUNC_ADJUST_GV1 - FUNC_TRAINER - NUM_STICKS + 1;
|
||||
putsStrIdx(MODEL_CUSTOM_FUNC_2ND_COLUMN+7*FW, y, STR_GV, CFN_FUNC(sd)-FUNC_ADJUST_GV1+1, attr);
|
||||
}
|
||||
#endif
|
||||
else {
|
||||
func_displayed = 2 + sd->func - 16 - NUM_STICKS - 1;
|
||||
func_displayed = 2 + CFN_FUNC(sd) - FUNC_TRAINER - NUM_STICKS - 1;
|
||||
}
|
||||
lcd_putsiAtt(MODEL_CUSTOM_FUNC_2ND_COLUMN, y, STR_VFSWFUNC, func_displayed, attr);
|
||||
if (active) {
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, sd->func, FUNC_MAX-1);
|
||||
if (checkIncDec_Ret) CFN_RESET_PARAM(sd);
|
||||
#if defined(CPUARM)
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, CFN_FUNC(sd), FUNC_MAX-1);
|
||||
if (checkIncDec_Ret)
|
||||
CFN_RESET_PARAM(sd);
|
||||
#else
|
||||
if (CFN_FUNC(sd) < FUNC_TRAINER) {
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, sd->internal.func_safety.func, 16);
|
||||
}
|
||||
else {
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, CFN_FUNC(sd), FUNC_MAX-1);
|
||||
if (CFN_FUNC(sd) < FUNC_TRAINER)
|
||||
sd->internal.func_safety.func = 15;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else if (attr) {
|
||||
@@ -3391,7 +3404,7 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
int16_t val_displayed = CFN_PARAM(sd);
|
||||
int8_t val_min = 0;
|
||||
uint8_t val_max = 255;
|
||||
if (sd->func == FUNC_PLAY_SOUND) {
|
||||
if (CFN_FUNC(sd) == FUNC_PLAY_SOUND) {
|
||||
#if defined(AUDIO)
|
||||
val_max = AU_FRSKY_LAST-AU_FRSKY_FIRST-1;
|
||||
lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_FUNCSOUNDS, val_displayed, attr);
|
||||
@@ -3400,54 +3413,69 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
#endif
|
||||
}
|
||||
#if defined(HAPTIC)
|
||||
else if (sd->func == FUNC_HAPTIC) {
|
||||
else if (CFN_FUNC(sd) == FUNC_HAPTIC) {
|
||||
val_max = 3;
|
||||
lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT);
|
||||
}
|
||||
#endif
|
||||
#if defined(CPUARM) && defined(SDCARD)
|
||||
else if (sd->func == FUNC_PLAY_TRACK || sd->func == FUNC_BACKGND_MUSIC) {
|
||||
uint8_t x = (sd->func == FUNC_PLAY_TRACK ? MODEL_CUSTOM_FUNC_2ND_COLUMN + FW + FW*strlen(TR_PLAY_TRACK) : MODEL_CUSTOM_FUNC_3RD_COLUMN);
|
||||
if (ZLEN(sd->param))
|
||||
lcd_putsnAtt(x, y, sd->param, sizeof(sd->param), attr);
|
||||
else if (CFN_FUNC(sd) == FUNC_PLAY_TRACK || CFN_FUNC(sd) == FUNC_BACKGND_MUSIC) {
|
||||
uint8_t x = (CFN_FUNC(sd) == FUNC_PLAY_TRACK ? MODEL_CUSTOM_FUNC_2ND_COLUMN + FW + FW*strlen(TR_PLAY_TRACK) : MODEL_CUSTOM_FUNC_3RD_COLUMN);
|
||||
if (ZLEN(sd->param.name))
|
||||
lcd_putsnAtt(x, y, sd->param.name, sizeof(sd->param.name), attr);
|
||||
else
|
||||
lcd_putsiAtt(x, y, STR_VCSWFUNC, 0, attr);
|
||||
if (active && event==EVT_KEY_BREAK(KEY_ENTER)) {
|
||||
s_editMode = 0;
|
||||
_event = 0;
|
||||
if (!listSdFiles(SOUNDS_PATH, SOUNDS_EXT, sizeof(sd->param), sd->param)) {
|
||||
if (!listSdFiles(SOUNDS_PATH, SOUNDS_EXT, sizeof(sd->param.name), sd->param.name)) {
|
||||
s_warning = STR_NO_SOUNDS_ON_SD;
|
||||
s_menu_flags = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
else if (sd->func == FUNC_PLAY_VALUE) {
|
||||
val_max = MIXSRC_LAST_CH + TELEM_DISPLAY_MAX - 1;
|
||||
else if (CFN_FUNC(sd) == FUNC_PLAY_VALUE) {
|
||||
val_max = MIXSRC_FIRST_TELEM + TELEM_DISPLAY_MAX - 2;
|
||||
putsMixerSource(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed+1, attr);
|
||||
}
|
||||
#endif
|
||||
#if defined(CPUARM)
|
||||
else if (sd->func == FUNC_VOLUME) {
|
||||
else if (CFN_FUNC(sd) == FUNC_VOLUME) {
|
||||
val_max = MIXSRC_LAST_CH-1;
|
||||
putsMixerSource(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed+1, attr);
|
||||
}
|
||||
#elif defined(VOICE)
|
||||
else if (sd->func == FUNC_PLAY_TRACK) {
|
||||
else if (CFN_FUNC(sd) == FUNC_PLAY_TRACK) {
|
||||
#if defined(GVARS)
|
||||
if (attr && event==EVT_KEY_LONG(KEY_ENTER)) {
|
||||
killEvents(event);
|
||||
s_editMode = !s_editMode;
|
||||
active = true;
|
||||
val_displayed = (val_displayed > 250 ? 0 : 251);
|
||||
}
|
||||
if (val_displayed > 250) {
|
||||
putsStrIdx(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_GV, val_displayed-250, attr);
|
||||
}
|
||||
else {
|
||||
lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed+PROMPT_CUSTOM_BASE, attr|LEFT);
|
||||
}
|
||||
#else
|
||||
lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed+PROMPT_CUSTOM_BASE, attr|LEFT);
|
||||
#endif
|
||||
}
|
||||
else if (sd->func == FUNC_PLAY_BOTH) {
|
||||
else if (CFN_FUNC(sd) == FUNC_PLAY_BOTH) {
|
||||
lcd_putcAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN-2+3*FWNUM, y, '|', attr);
|
||||
lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN+3*FWNUM, y, val_displayed+PROMPT_CUSTOM_BASE, attr);
|
||||
lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN+2+3*FWNUM, y, (val_displayed+PROMPT_CUSTOM_BASE+1)%10, attr|LEFT);
|
||||
}
|
||||
else if (sd->func == FUNC_PLAY_VALUE) {
|
||||
val_max = MIXSRC_LAST_CH + TELEM_DISPLAY_MAX - 1;
|
||||
else if (CFN_FUNC(sd) == FUNC_PLAY_VALUE) {
|
||||
val_max = MIXSRC_FIRST_TELEM + TELEM_DISPLAY_MAX - 2;
|
||||
putsMixerSource(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed+1, attr);
|
||||
}
|
||||
#endif
|
||||
#if defined(SDCARD)
|
||||
else if (sd->func == FUNC_LOGS) {
|
||||
else if (CFN_FUNC(sd) == FUNC_LOGS) {
|
||||
if (val_displayed) {
|
||||
lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|PREC1|LEFT);
|
||||
lcd_putc(lcdLastPos, y, 's');
|
||||
@@ -3457,23 +3485,46 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
}
|
||||
}
|
||||
#endif
|
||||
else if (sd->func == FUNC_RESET) {
|
||||
else if (CFN_FUNC(sd) == FUNC_RESET) {
|
||||
val_max = 3;
|
||||
lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_VFSWRESET, CFN_PARAM(sd), attr);
|
||||
}
|
||||
else if (sd->func <= FUNC_SAFETY_CH16) {
|
||||
else if (CFN_FUNC(sd) < FUNC_TRAINER) {
|
||||
val_displayed = (int8_t)CFN_PARAM(sd);
|
||||
val_min = -125; val_max = 125;
|
||||
lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT);
|
||||
}
|
||||
#if defined(GVARS)
|
||||
else if (sd->func >= FUNC_ADJUST_GV1
|
||||
else if (CFN_FUNC(sd) >= FUNC_ADJUST_GV1
|
||||
#if defined(DEBUG)
|
||||
&& sd->func != FUNC_TEST
|
||||
&& CFN_FUNC(sd) <= FUNC_ADJUST_GV5
|
||||
#endif
|
||||
) {
|
||||
val_max = MIXSRC_LAST_CH-1;
|
||||
putsMixerSource(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed+1, attr);
|
||||
switch (CFN_GVAR_MODE(sd)) {
|
||||
case 0:
|
||||
val_min = -125; val_max = +125;
|
||||
lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT);
|
||||
break;
|
||||
case 1:
|
||||
val_max = MIXSRC_LAST_CH-1;
|
||||
putsMixerSource(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed+1, attr);
|
||||
break;
|
||||
case 2:
|
||||
val_max = MAX_GVARS-1;
|
||||
putsStrIdx(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_GV, val_displayed+1, attr);
|
||||
break;
|
||||
default:
|
||||
val_max = 1;
|
||||
lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, PSTR("\002+1-1"), val_displayed, attr);
|
||||
break;
|
||||
}
|
||||
|
||||
if (attr && event==EVT_KEY_LONG(KEY_ENTER)) {
|
||||
s_editMode = !s_editMode;
|
||||
killEvents(event);
|
||||
CFN_GVAR_MODE(sd) += 1;
|
||||
val_displayed = 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
else {
|
||||
@@ -3491,24 +3542,31 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
break;
|
||||
|
||||
case 3:
|
||||
if (sd->swtch && sd->func <= FUNC_INSTANT_TRIM) {
|
||||
menu_lcd_onoff(MODEL_CUSTOM_FUNC_4TH_COLUMN, y, sd->active, attr);
|
||||
if (active) CHECK_INCDEC_MODELVAR_ZERO(event, sd->active, 1);
|
||||
if (sd->swtch && (CFN_FUNC(sd) <= FUNC_INSTANT_TRIM
|
||||
#if defined(GVARS)
|
||||
|| CFN_FUNC(sd) >= FUNC_ADJUST_GV1
|
||||
#endif
|
||||
#if defined(CPUARM)
|
||||
|| CFN_FUNC(sd) == FUNC_VOLUME
|
||||
#endif
|
||||
)) {
|
||||
menu_lcd_onoff(MODEL_CUSTOM_FUNC_4TH_COLUMN, y, CFN_ACTIVE(sd), attr);
|
||||
if (active) CHECK_INCDEC_MODELVAR_ZERO(event, CFN_ACTIVE(sd), 1);
|
||||
}
|
||||
#if defined(VOICE)
|
||||
else if (sd->swtch && sd->func >= FUNC_PLAY_TRACK && sd->func <= FUNC_PLAY_VALUE) {
|
||||
else if (sd->swtch && CFN_FUNC(sd) >= FUNC_PLAY_TRACK && CFN_FUNC(sd) <= FUNC_PLAY_VALUE) {
|
||||
#if defined(CPUARM)
|
||||
if (sd->active)
|
||||
lcd_outdezAtt(MODEL_CUSTOM_FUNC_4TH_COLUMN+2+FW, y, sd->active*5, attr);
|
||||
if (CFN_PLAY_REPEAT(sd))
|
||||
lcd_outdezAtt(MODEL_CUSTOM_FUNC_4TH_COLUMN+2+FW, y, CFN_PLAY_REPEAT(sd)*5, attr);
|
||||
else
|
||||
lcd_putcAtt(MODEL_CUSTOM_FUNC_4TH_COLUMN+1, y, '-', attr);
|
||||
if (active) CHECK_INCDEC_MODELVAR_ZERO(event, sd->active, 12);
|
||||
if (active) CHECK_INCDEC_MODELVAR_ZERO(event, CFN_PLAY_REPEAT(sd), 12);
|
||||
#else
|
||||
if (sd->active)
|
||||
lcd_outdezAtt(MODEL_CUSTOM_FUNC_4TH_COLUMN+2+FW, y, 15 << (sd->active-1), attr);
|
||||
if (CFN_PLAY_REPEAT(sd))
|
||||
lcd_outdezAtt(MODEL_CUSTOM_FUNC_4TH_COLUMN+2+FW, y, CFN_PLAY_REPEAT(sd)*10, attr);
|
||||
else
|
||||
lcd_putcAtt(MODEL_CUSTOM_FUNC_4TH_COLUMN+1, y, '-', attr);
|
||||
if (active) CHECK_INCDEC_MODELVAR_ZERO(event, sd->active, 3);
|
||||
if (active) CHECK_INCDEC_MODELVAR_ZERO(event, CFN_PLAY_REPEAT(sd), 6);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
@@ -3532,7 +3590,7 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
}
|
||||
else {
|
||||
// The user choosed a wav file in the list
|
||||
memcpy(g_model.funcSw[sub].param, result, sizeof(g_model.funcSw[sub].param));
|
||||
memcpy(g_model.funcSw[sub].param.name, result, sizeof(g_model.funcSw[sub].param.name));
|
||||
eeDirty(EE_MODEL);
|
||||
}
|
||||
}
|
||||
|
||||
+67
-8
@@ -190,6 +190,8 @@ PACK(typedef struct t_EEGeneral {
|
||||
uint8_t unexpectedShutdown:1;
|
||||
uint8_t speakerPitch;
|
||||
int8_t speakerVolume;
|
||||
int8_t vBatMin;
|
||||
int8_t vBatMax;
|
||||
|
||||
EXTRA_GENERAL_FIELDS;
|
||||
|
||||
@@ -345,8 +347,15 @@ PACK(typedef struct t_CustomSwData { // Custom Switches data
|
||||
#endif
|
||||
|
||||
enum Functions {
|
||||
#if defined(CPUARM)
|
||||
FUNC_SAFETY_CH1,
|
||||
FUNC_SAFETY_CH16=FUNC_SAFETY_CH1+15,
|
||||
#else
|
||||
FUNC_SAFETY_GROUP1,
|
||||
FUNC_SAFETY_GROUP2,
|
||||
FUNC_SAFETY_GROUP3,
|
||||
FUNC_SAFETY_GROUP4,
|
||||
#endif
|
||||
FUNC_TRAINER,
|
||||
FUNC_TRAINER_RUD,
|
||||
FUNC_TRAINER_ELE,
|
||||
@@ -401,20 +410,52 @@ enum ResetFunctionParam {
|
||||
|
||||
#if defined(CPUARM)
|
||||
PACK(typedef struct t_CustomFnData { // Function Switches data
|
||||
int8_t swtch; //input
|
||||
int8_t swtch;
|
||||
uint8_t func;
|
||||
char param[6];
|
||||
uint8_t active;
|
||||
union {
|
||||
char name[6];
|
||||
struct {
|
||||
uint32_t val;
|
||||
uint16_t spare;
|
||||
} composite;
|
||||
} param;
|
||||
uint8_t mode:2;
|
||||
uint8_t active:6;
|
||||
}) CustomFnData;
|
||||
#define CFN_PARAM(p) (*((uint32_t*)(p)->param))
|
||||
#define CFN_RESET_PARAM(p) memset(p->param, 0, sizeof(p->param))
|
||||
#define CFN_FUNC(p) ((p)->func)
|
||||
#define CFN_ACTIVE(p) ((p)->active)
|
||||
#define CFN_CH_NUMBER(p) (CFN_FUNC(p))
|
||||
#define CFN_PLAY_REPEAT(p) ((p)->active)
|
||||
#define CFN_GVAR_MODE(p) ((p)->mode)
|
||||
#define CFN_PARAM(p) ((p)->param.composite.val)
|
||||
#define CFN_RESET_PARAM(p) memset(&(p)->param, 0, sizeof((p)->param))
|
||||
#else
|
||||
PACK(typedef struct t_CustomFnData { // Function Switches data
|
||||
int8_t swtch; // input
|
||||
uint8_t func:6;
|
||||
uint8_t active:2;
|
||||
union {
|
||||
struct {
|
||||
uint8_t param:3;
|
||||
uint8_t func:5;
|
||||
} func_param;
|
||||
|
||||
struct {
|
||||
uint8_t active:1;
|
||||
uint8_t param:2;
|
||||
uint8_t func:5;
|
||||
} func_param_enable;
|
||||
|
||||
struct {
|
||||
uint8_t active:1;
|
||||
uint8_t func:7;
|
||||
} func_safety;
|
||||
} internal;
|
||||
uint8_t param;
|
||||
}) CustomFnData;
|
||||
#define CFN_FUNC(p) ((p)->internal.func_param.func)
|
||||
#define CFN_ACTIVE(p) ((p)->internal.func_param_enable.active)
|
||||
#define CFN_CH_NUMBER(p) ((p)->internal.func_safety.func)
|
||||
#define CFN_PLAY_REPEAT(p) ((p)->internal.func_param.param)
|
||||
#define CFN_GVAR_MODE(p) ((p)->internal.func_param_enable.param)
|
||||
#define CFN_PARAM(p) ((p)->param)
|
||||
#define CFN_RESET_PARAM(p) CFN_PARAM(p) = 0
|
||||
#endif
|
||||
@@ -521,6 +562,18 @@ enum VarioSource {
|
||||
VARIO_SOURCE_LAST = VARIO_SOURCE_A2
|
||||
};
|
||||
|
||||
#if defined(FRSKY_HUB)
|
||||
#define NUM_TELEMETRY TELEM_CSW_MAX
|
||||
#elif defined(WS_HOW_HIGH)
|
||||
#define NUM_TELEMETRY TELEM_ALT
|
||||
#elif defined(FRSKY)
|
||||
#define NUM_TELEMETRY TELEM_A2
|
||||
#elif defined(MAVLINK)
|
||||
#define NUM_TELEMETRY 4
|
||||
#else
|
||||
#define NUM_TELEMETRY TELEM_TM2
|
||||
#endif
|
||||
|
||||
PACK(typedef struct t_FrSkyBarData {
|
||||
uint8_t source;
|
||||
uint8_t barMin; // minimum for bar display
|
||||
@@ -918,7 +971,13 @@ enum MixSources {
|
||||
MIXSRC_CH14,
|
||||
MIXSRC_CH15,
|
||||
MIXSRC_CH16,
|
||||
MIXSRC_LAST_CH = MIXSRC_CH1+NUM_CHNOUT-1
|
||||
MIXSRC_LAST_CH = MIXSRC_CH1+NUM_CHNOUT-1,
|
||||
|
||||
MIXSRC_GVAR1,
|
||||
MIXSRC_LAST_GVAR = MIXSRC_GVAR1+MAX_GVARS-1,
|
||||
|
||||
MIXSRC_FIRST_TELEM,
|
||||
MIXSRC_LAST_TELEM = MIXSRC_FIRST_TELEM+NUM_TELEMETRY-1,
|
||||
};
|
||||
|
||||
#define MIN_POINTS 3
|
||||
|
||||
+135
-104
@@ -706,37 +706,40 @@ int16_t getValue(uint8_t i)
|
||||
else if (i<MIXSRC_PPM1+NUM_CAL_PPM) return (g_ppmIns[i+1-MIXSRC_PPM1] - g_eeGeneral.trainer.calib[i+1-MIXSRC_PPM1])*2;
|
||||
else if (i<MIXSRC_LAST_PPM) return g_ppmIns[i+1-MIXSRC_PPM1]*2;
|
||||
else if (i<MIXSRC_LAST_CH) return ex_chans[i+1-MIXSRC_CH1];
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_TX_VOLTAGE) return g_vbat100mV;
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_TM2) return s_timerVal[i+1-MIXSRC_LAST_CH-TELEM_TM1];
|
||||
#if defined(GVARS)
|
||||
else if (i<MIXSRC_LAST_GVAR) return GVAR_VALUE(i+1-MIXSRC_GVAR1, getGVarFlightPhase(s_perout_flight_phase, i+1-MIXSRC_GVAR1));
|
||||
#endif
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_TX_VOLTAGE) return g_vbat100mV;
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_TM2) return s_timerVal[i+1-MIXSRC_FIRST_TELEM+1-TELEM_TM1];
|
||||
#if defined(FRSKY)
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_RSSI_TX) return frskyData.rssi[1].value;
|
||||
else if(i<MIXSRC_LAST_CH+TELEM_RSSI_RX) return frskyData.rssi[0].value;
|
||||
else if(i<MIXSRC_LAST_CH+TELEM_A2) return frskyData.analog[i+1-MIXSRC_LAST_CH-TELEM_A1].value;
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_RSSI_TX) return frskyData.rssi[1].value;
|
||||
else if(i<MIXSRC_FIRST_TELEM-1+TELEM_RSSI_RX) return frskyData.rssi[0].value;
|
||||
else if(i<MIXSRC_FIRST_TELEM-1+TELEM_A2) return frskyData.analog[i+1-MIXSRC_FIRST_TELEM+1-TELEM_A1].value;
|
||||
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
|
||||
else if(i<MIXSRC_LAST_CH+TELEM_ALT) return frskyData.hub.baroAltitude_bp;
|
||||
else if(i<MIXSRC_FIRST_TELEM-1+TELEM_ALT) return frskyData.hub.baroAltitude_bp;
|
||||
#endif
|
||||
#if defined(FRSKY_HUB)
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_RPM) return frskyData.hub.rpm;
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_FUEL) return frskyData.hub.fuelLevel;
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_T1) return frskyData.hub.temperature1;
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_T2) return frskyData.hub.temperature2;
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_SPEED) return frskyData.hub.gpsSpeed_bp;
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_DIST) return frskyData.hub.gpsDistance;
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_GPSALT) return frskyData.hub.gpsAltitude_bp;
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_CELL) return (int16_t)frskyData.hub.minCellVolts * 2;
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_CELLS_SUM) return (int16_t)frskyData.hub.cellsSum;
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_VFAS) return (int16_t)frskyData.hub.vfas;
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_CURRENT) return (int16_t)frskyData.hub.current;
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_CONSUMPTION) return frskyData.currentConsumption;
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_POWER) return frskyData.power;
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_ACCx) return frskyData.hub.accelX;
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_ACCy) return frskyData.hub.accelY;
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_ACCz) return frskyData.hub.accelZ;
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_HDG) return frskyData.hub.gpsCourse_bp;
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_VSPD) return frskyData.hub.varioSpeed;
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_MIN_A1) return frskyData.analog[0].min;
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_MIN_A2) return frskyData.analog[1].min;
|
||||
else if (i<MIXSRC_LAST_CH+TELEM_MAX_CURRENT) return *(((int16_t*)(&frskyData.hub.minAltitude))+i+1-(MIXSRC_LAST_CH+TELEM_MAX_CURRENT));
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_RPM) return frskyData.hub.rpm;
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_FUEL) return frskyData.hub.fuelLevel;
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_T1) return frskyData.hub.temperature1;
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_T2) return frskyData.hub.temperature2;
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_SPEED) return frskyData.hub.gpsSpeed_bp;
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_DIST) return frskyData.hub.gpsDistance;
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_GPSALT) return frskyData.hub.gpsAltitude_bp;
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_CELL) return (int16_t)frskyData.hub.minCellVolts * 2;
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_CELLS_SUM) return (int16_t)frskyData.hub.cellsSum;
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_VFAS) return (int16_t)frskyData.hub.vfas;
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_CURRENT) return (int16_t)frskyData.hub.current;
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_CONSUMPTION) return frskyData.currentConsumption;
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_POWER) return frskyData.power;
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_ACCx) return frskyData.hub.accelX;
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_ACCy) return frskyData.hub.accelY;
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_ACCz) return frskyData.hub.accelZ;
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_HDG) return frskyData.hub.gpsCourse_bp;
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_VSPD) return frskyData.hub.varioSpeed;
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_MIN_A1) return frskyData.analog[0].min;
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_MIN_A2) return frskyData.analog[1].min;
|
||||
else if (i<MIXSRC_FIRST_TELEM-1+TELEM_MAX_CURRENT) return *(((int16_t*)(&frskyData.hub.minAltitude))+i+1-(MIXSRC_FIRST_TELEM-1+TELEM_MAX_CURRENT));
|
||||
#endif
|
||||
#endif
|
||||
else return 0;
|
||||
@@ -835,15 +838,15 @@ bool __getSwitch(int8_t swtch)
|
||||
else {
|
||||
#if defined(FRSKY)
|
||||
// Telemetry
|
||||
if (cs->v1 > MIXSRC_LAST_CH) {
|
||||
if (frskyStreaming <= 0 && cs->v1 > MIXSRC_LAST_CH+MAX_TIMERS)
|
||||
if (cs->v1 >= MIXSRC_FIRST_TELEM) {
|
||||
if (frskyStreaming <= 0 && cs->v1 > MIXSRC_FIRST_TELEM-1+MAX_TIMERS)
|
||||
return swtch > 0 ? false : true;
|
||||
|
||||
y = convertCswTelemValue(cs);
|
||||
|
||||
#if defined(FRSKY_HUB)
|
||||
if (s == CS_VOFS) {
|
||||
uint8_t idx = cs->v1-MIXSRC_LAST_CH-TELEM_ALT;
|
||||
uint8_t idx = cs->v1-MIXSRC_FIRST_TELEM+1-TELEM_ALT;
|
||||
if (idx < THLD_MAX) {
|
||||
// Fill the threshold array
|
||||
barsThresholds[idx] = 128 + cs->v2;
|
||||
@@ -855,7 +858,7 @@ bool __getSwitch(int8_t swtch)
|
||||
y = calc100toRESX(cs->v2);
|
||||
}
|
||||
#else
|
||||
if (cs->v1 > MIXSRC_LAST_CH) {
|
||||
if (cs->v1 >= MIXSRC_FIRST_TELEM) {
|
||||
y = cs->v2; // it's a timer
|
||||
}
|
||||
else {
|
||||
@@ -865,7 +868,12 @@ bool __getSwitch(int8_t swtch)
|
||||
|
||||
switch (cs->func) {
|
||||
case CS_VEQUAL:
|
||||
result = (abs(x-y) < STICK_TOLERANCE);
|
||||
#if defined(GVARS)
|
||||
if (cs->v1 >= MIXSRC_GVAR1 && cs->v1 <= MIXSRC_LAST_GVAR)
|
||||
result = (x==y);
|
||||
else
|
||||
#endif
|
||||
result = (abs(x-y) < (1024 / STICK_TOLERANCE));
|
||||
break;
|
||||
case CS_VPOS:
|
||||
result = (x>y);
|
||||
@@ -1955,25 +1963,25 @@ PLAY_FUNCTION(playValue, uint8_t idx)
|
||||
// TODO add the MIXSRC_TELEM_TM1 and so on.
|
||||
|
||||
switch (idx) {
|
||||
case MIXSRC_LAST_CH+TELEM_TX_VOLTAGE-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_TX_VOLTAGE-1:
|
||||
PLAY_NUMBER(val, 1+UNIT_VOLTS, PREC1);
|
||||
break;
|
||||
case MIXSRC_LAST_CH+TELEM_TM1-1:
|
||||
case MIXSRC_LAST_CH+TELEM_TM2-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_TM1-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_TM2-1:
|
||||
PLAY_DURATION(val);
|
||||
break;
|
||||
#if defined(FRSKY)
|
||||
case MIXSRC_LAST_CH+TELEM_RSSI_TX-1:
|
||||
case MIXSRC_LAST_CH+TELEM_RSSI_RX-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_RSSI_TX-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_RSSI_RX-1:
|
||||
PLAY_NUMBER(val, 1+UNIT_DBM, 0);
|
||||
break;
|
||||
case MIXSRC_LAST_CH+TELEM_MIN_A1-1:
|
||||
case MIXSRC_LAST_CH+TELEM_MIN_A2-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_MIN_A1-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_MIN_A2-1:
|
||||
idx -= TELEM_MIN_A1-TELEM_A1;
|
||||
// no break
|
||||
case MIXSRC_LAST_CH+TELEM_A1-1:
|
||||
case MIXSRC_LAST_CH+TELEM_A2-1:
|
||||
idx -= (MIXSRC_LAST_CH+TELEM_A1-1);
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_A1-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_A2-1:
|
||||
idx -= (MIXSRC_FIRST_TELEM-1+TELEM_A1-1);
|
||||
// A1 and A2
|
||||
{
|
||||
uint8_t att = 0;
|
||||
@@ -1985,41 +1993,41 @@ PLAY_FUNCTION(playValue, uint8_t idx)
|
||||
break;
|
||||
}
|
||||
|
||||
case MIXSRC_LAST_CH+TELEM_CELL-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_CELL-1:
|
||||
PLAY_NUMBER(val/10, 1+UNIT_VOLTS, PREC1);
|
||||
break;
|
||||
|
||||
case MIXSRC_LAST_CH+TELEM_VFAS-1:
|
||||
case MIXSRC_LAST_CH+TELEM_CELLS_SUM-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_VFAS-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_CELLS_SUM-1:
|
||||
PLAY_NUMBER(val, 1+UNIT_VOLTS, PREC1);
|
||||
break;
|
||||
|
||||
case MIXSRC_LAST_CH+TELEM_CURRENT-1:
|
||||
case MIXSRC_LAST_CH+TELEM_MAX_CURRENT-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_CURRENT-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_MAX_CURRENT-1:
|
||||
PLAY_NUMBER(val, 1+UNIT_AMPS, PREC1);
|
||||
break;
|
||||
|
||||
case MIXSRC_LAST_CH+TELEM_ACCx-1:
|
||||
case MIXSRC_LAST_CH+TELEM_ACCy-1:
|
||||
case MIXSRC_LAST_CH+TELEM_ACCz-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_ACCx-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_ACCy-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_ACCz-1:
|
||||
PLAY_NUMBER(val/10, 1+UNIT_G, PREC1);
|
||||
break;
|
||||
|
||||
case MIXSRC_LAST_CH+TELEM_VSPD-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_VSPD-1:
|
||||
PLAY_NUMBER(val/10, 1+UNIT_METERS_PER_SECOND, PREC1);
|
||||
break;
|
||||
|
||||
case MIXSRC_LAST_CH+TELEM_CONSUMPTION-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_CONSUMPTION-1:
|
||||
PLAY_NUMBER(val, 1+UNIT_MAH, 0);
|
||||
break;
|
||||
|
||||
case MIXSRC_LAST_CH+TELEM_POWER-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_POWER-1:
|
||||
PLAY_NUMBER(val, 1+UNIT_WATTS, 0);
|
||||
break;
|
||||
|
||||
case MIXSRC_LAST_CH+TELEM_ALT-1:
|
||||
case MIXSRC_LAST_CH+TELEM_MIN_ALT-1:
|
||||
case MIXSRC_LAST_CH+TELEM_MAX_ALT-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_ALT-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_MIN_ALT-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_MAX_ALT-1:
|
||||
#if defined(IMPERIAL_UNITS)
|
||||
if (g_model.frsky.usrProto == USR_PROTO_WS_HOW_HIGH)
|
||||
PLAY_NUMBER(val, 1+UNIT_FEET, 0);
|
||||
@@ -2028,24 +2036,24 @@ PLAY_FUNCTION(playValue, uint8_t idx)
|
||||
PLAY_NUMBER(val, 1+UNIT_METERS, 0);
|
||||
break;
|
||||
|
||||
case MIXSRC_LAST_CH+TELEM_RPM-1:
|
||||
case MIXSRC_LAST_CH+TELEM_MAX_RPM-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_RPM-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_MAX_RPM-1:
|
||||
PLAY_NUMBER(val, 1+UNIT_RPMS, 0);
|
||||
break;
|
||||
|
||||
case MIXSRC_LAST_CH+TELEM_HDG-1:
|
||||
case MIXSRC_FIRST_TELEM-1+TELEM_HDG-1:
|
||||
PLAY_NUMBER(val, 1+UNIT_DEGREES, 0);
|
||||
break;
|
||||
|
||||
default:
|
||||
{
|
||||
uint8_t unit = 1;
|
||||
if (idx < MIXSRC_LAST_CH+TELEM_TM1-1)
|
||||
if (idx < MIXSRC_FIRST_TELEM-1+TELEM_TM1-1)
|
||||
val = calcRESXto100(val);
|
||||
if (idx >= MIXSRC_LAST_CH+TELEM_ALT-1 && idx <= MIXSRC_LAST_CH+TELEM_GPSALT-1)
|
||||
unit = idx - (MIXSRC_LAST_CH+TELEM_ALT-1);
|
||||
else if (idx >= MIXSRC_LAST_CH+TELEM_MAX_T1-1 && idx <= MIXSRC_LAST_CH+TELEM_MAX_DIST-1)
|
||||
unit = 3 + idx - (MIXSRC_LAST_CH+TELEM_MAX_T1-1);
|
||||
if (idx >= MIXSRC_FIRST_TELEM-1+TELEM_ALT-1 && idx <= MIXSRC_FIRST_TELEM-1+TELEM_GPSALT-1)
|
||||
unit = idx - (MIXSRC_FIRST_TELEM-1+TELEM_ALT-1);
|
||||
else if (idx >= MIXSRC_FIRST_TELEM-1+TELEM_MAX_T1-1 && idx <= MIXSRC_FIRST_TELEM-1+TELEM_MAX_DIST-1)
|
||||
unit = 3 + idx - (MIXSRC_FIRST_TELEM-1+TELEM_MAX_T1-1);
|
||||
|
||||
unit = pgm_read_byte(bchunit_ar+unit);
|
||||
#if !defined(IMPERIAL_UNITS)
|
||||
@@ -2078,8 +2086,8 @@ uint8_t fnSwitchDuration[NUM_CFN] = { 0 };
|
||||
inline void playCustomFunctionFile(CustomFnData *sd, uint8_t id)
|
||||
{
|
||||
char lfn[] = SOUNDS_PATH "/xxxxxx.wav";
|
||||
strncpy(lfn+sizeof(SOUNDS_PATH), sd->param, sizeof(sd->param));
|
||||
lfn[sizeof(SOUNDS_PATH)+sizeof(sd->param)] = '\0';
|
||||
strncpy(lfn+sizeof(SOUNDS_PATH), sd->param.name, sizeof(sd->param.name));
|
||||
lfn[sizeof(SOUNDS_PATH)+sizeof(sd->param.name)] = '\0';
|
||||
strcat(lfn+sizeof(SOUNDS_PATH), SOUNDS_EXT);
|
||||
PLAY_FILE(lfn, sd->func==FUNC_BACKGND_MUSIC ? PLAY_BACKGROUND : 0, id);
|
||||
}
|
||||
@@ -2108,7 +2116,7 @@ void evalFunctions()
|
||||
CustomFnData *sd = &g_model.funcSw[i];
|
||||
int8_t swtch = sd->swtch;
|
||||
if (swtch) {
|
||||
MASK_FUNC_TYPE function_mask = (sd->func >= FUNC_TRAINER ? ((MASK_FUNC_TYPE)1 << (sd->func-FUNC_TRAINER)) : 0);
|
||||
MASK_FUNC_TYPE function_mask = (CFN_FUNC(sd) >= FUNC_TRAINER ? ((MASK_FUNC_TYPE)1 << (CFN_FUNC(sd)-FUNC_TRAINER)) : 0);
|
||||
MASK_CFN_TYPE switch_mask = ((MASK_CFN_TYPE)1 << i);
|
||||
uint8_t momentary = 0;
|
||||
|
||||
@@ -2158,7 +2166,7 @@ void evalFunctions()
|
||||
|
||||
active = !(activeFnSwitches & switch_mask);
|
||||
#if !defined(CPUARM)
|
||||
if (sd->func == FUNC_PLAY_BOTH && !active) {
|
||||
if (CFN_FUNC(sd) == FUNC_PLAY_BOTH && !active) {
|
||||
momentary = 1;
|
||||
}
|
||||
else
|
||||
@@ -2184,19 +2192,19 @@ void evalFunctions()
|
||||
#endif
|
||||
}
|
||||
#if !defined(CPUARM)
|
||||
else if (sd->func == FUNC_PLAY_BOTH) {
|
||||
else if (CFN_FUNC(sd) == FUNC_PLAY_BOTH) {
|
||||
momentary = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (active || momentary) {
|
||||
if (sd->active) {
|
||||
if (sd->func < FUNC_TRAINER) {
|
||||
safetyCh[sd->func] = CFN_PARAM(sd);
|
||||
if (CFN_ACTIVE(sd)) {
|
||||
if (CFN_FUNC(sd) < FUNC_TRAINER) {
|
||||
safetyCh[CFN_FUNC(sd)] = CFN_CH_NUMBER(sd);
|
||||
}
|
||||
|
||||
if (!(activeFunctions & function_mask)) {
|
||||
if (sd->func == FUNC_INSTANT_TRIM) {
|
||||
if (CFN_FUNC(sd) == FUNC_INSTANT_TRIM) {
|
||||
if (g_menuStack[0] == menuMainView
|
||||
#if defined(FRSKY)
|
||||
|| g_menuStack[0] == menuTelemetryFrsky
|
||||
@@ -2206,18 +2214,17 @@ void evalFunctions()
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (sd->func <= FUNC_INSTANT_TRIM) {
|
||||
function_mask = 0;
|
||||
switch_mask = 0;
|
||||
else if (CFN_FUNC(sd) <= FUNC_INSTANT_TRIM) {
|
||||
active = false;
|
||||
}
|
||||
|
||||
#if defined(SDCARD)
|
||||
if (sd->func == FUNC_LOGS) {
|
||||
if (CFN_FUNC(sd) == FUNC_LOGS) {
|
||||
logDelay = CFN_PARAM(sd);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (sd->func == FUNC_RESET) {
|
||||
if (CFN_FUNC(sd) == FUNC_RESET) {
|
||||
switch (CFN_PARAM(sd)) {
|
||||
case FUNC_RESET_TIMER1:
|
||||
case FUNC_RESET_TIMER2:
|
||||
@@ -2242,24 +2249,24 @@ void evalFunctions()
|
||||
}
|
||||
}
|
||||
|
||||
if (sd->func == FUNC_PLAY_SOUND) {
|
||||
if (CFN_FUNC(sd) == FUNC_PLAY_SOUND) {
|
||||
AUDIO_PLAY(AU_FRSKY_FIRST+CFN_PARAM(sd));
|
||||
}
|
||||
|
||||
#if defined(HAPTIC)
|
||||
if (sd->func == FUNC_HAPTIC) {
|
||||
if (CFN_FUNC(sd) == FUNC_HAPTIC) {
|
||||
haptic.event(AU_FRSKY_LAST+CFN_PARAM(sd));
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CPUARM) && defined(SDCARD)
|
||||
else if (sd->func == FUNC_PLAY_TRACK || sd->func == FUNC_PLAY_VALUE) {
|
||||
else if (CFN_FUNC(sd) == FUNC_PLAY_TRACK || CFN_FUNC(sd) == FUNC_PLAY_VALUE) {
|
||||
tmr10ms_t tmr10ms = get_tmr10ms();
|
||||
uint8_t repeatParam = sd->active;
|
||||
uint8_t repeatParam = CFN_PLAY_REPEAT(sd);
|
||||
if (!lastFunctionTime[i] || (repeatParam && (signed)(tmr10ms-lastFunctionTime[i])>=500*repeatParam)) {
|
||||
if (!IS_PLAYING(i+1)) {
|
||||
lastFunctionTime[i] = tmr10ms;
|
||||
if (sd->func == FUNC_PLAY_VALUE) {
|
||||
if (CFN_FUNC(sd) == FUNC_PLAY_VALUE) {
|
||||
PLAY_VALUE(CFN_PARAM(sd), i+1);
|
||||
}
|
||||
else {
|
||||
@@ -2268,51 +2275,75 @@ void evalFunctions()
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (sd->func == FUNC_BACKGND_MUSIC) {
|
||||
else if (CFN_FUNC(sd) == FUNC_BACKGND_MUSIC) {
|
||||
if (!IS_PLAYING(i+1)) {
|
||||
playCustomFunctionFile(sd, i+1);
|
||||
}
|
||||
}
|
||||
else if (sd->func == FUNC_VOLUME) {
|
||||
requiredSpeakerVolume = ((1024 + getValue(CFN_PARAM(sd))) * VOLUME_LEVEL_MAX) / 2048;
|
||||
else if (CFN_FUNC(sd) == FUNC_VOLUME) {
|
||||
if (CFN_ACTIVE(sd)) {
|
||||
requiredSpeakerVolume = ((1024 + getValue(CFN_PARAM(sd))) * VOLUME_LEVEL_MAX) / 2048;
|
||||
}
|
||||
else {
|
||||
active = false;
|
||||
}
|
||||
}
|
||||
#elif defined(VOICE)
|
||||
else if (sd->func == FUNC_PLAY_TRACK || sd->func == FUNC_PLAY_BOTH || sd->func == FUNC_PLAY_VALUE) {
|
||||
else if (CFN_FUNC(sd) == FUNC_PLAY_TRACK || CFN_FUNC(sd) == FUNC_PLAY_BOTH || CFN_FUNC(sd) == FUNC_PLAY_VALUE) {
|
||||
tmr10ms_t tmr10ms = get_tmr10ms();
|
||||
uint8_t repeatParam = sd->active;
|
||||
if (!lastFunctionTime[i] || (sd->func==FUNC_PLAY_BOTH && active!=(bool)(activeFnSwitches&switch_mask)) || (repeatParam && (signed)(tmr10ms-lastFunctionTime[i])>=(1500<<(repeatParam-1)))) {
|
||||
uint8_t repeatParam = CFN_PLAY_REPEAT(sd);
|
||||
if (!lastFunctionTime[i] || (CFN_FUNC(sd)==FUNC_PLAY_BOTH && active!=(bool)(activeFnSwitches&switch_mask)) || (repeatParam && (signed)(tmr10ms-lastFunctionTime[i])>=1000*repeatParam)) {
|
||||
lastFunctionTime[i] = tmr10ms;
|
||||
if (sd->func == FUNC_PLAY_VALUE) {
|
||||
PLAY_VALUE(CFN_PARAM(sd), i+1);
|
||||
uint8_t param = CFN_PARAM(sd);
|
||||
if (CFN_FUNC(sd) == FUNC_PLAY_VALUE) {
|
||||
PLAY_VALUE(param, i+1);
|
||||
}
|
||||
else {
|
||||
PUSH_CUSTOM_PROMPT(active ? sd->param : sd->param+1, i+1);
|
||||
if (CFN_FUNC(sd) == FUNC_PLAY_TRACK && param > 250)
|
||||
param = GVAR_VALUE(param-251, getGVarFlightPhase(s_perout_flight_phase, param-251));
|
||||
PUSH_CUSTOM_PROMPT(active ? param : param+1, i+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(DEBUG)
|
||||
else if (sd->func == FUNC_TEST) {
|
||||
else if (CFN_FUNC(sd) == FUNC_TEST) {
|
||||
testFunc();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(GVARS)
|
||||
else if (sd->func >= FUNC_ADJUST_GV1) {
|
||||
if (CFN_PARAM(sd) >= MIXSRC_TrimRud-1 && CFN_PARAM(sd) <= MIXSRC_TrimAil-1) {
|
||||
trimGvar[CFN_PARAM(sd)-MIXSRC_TrimRud+1] = sd->func-FUNC_ADJUST_GV1;
|
||||
}
|
||||
else if (CFN_FUNC(sd) >= FUNC_ADJUST_GV1) {
|
||||
if (CFN_ACTIVE(sd)) {
|
||||
if (CFN_GVAR_MODE(sd) == 0) {
|
||||
SET_GVAR(CFN_FUNC(sd)-FUNC_ADJUST_GV1, CFN_PARAM(sd), s_perout_flight_phase);
|
||||
}
|
||||
else if (CFN_GVAR_MODE(sd) == 2) {
|
||||
SET_GVAR(CFN_FUNC(sd)-FUNC_ADJUST_GV1, GVAR_VALUE(CFN_PARAM(sd), s_perout_flight_phase), s_perout_flight_phase);
|
||||
}
|
||||
else if (CFN_GVAR_MODE(sd) == 3) {
|
||||
if (!(activeFnSwitches & switch_mask)) {
|
||||
SET_GVAR(CFN_FUNC(sd)-FUNC_ADJUST_GV1, GVAR_VALUE(CFN_FUNC(sd)-FUNC_ADJUST_GV1, getGVarFlightPhase(s_perout_flight_phase, CFN_FUNC(sd)-FUNC_ADJUST_GV1)) + (CFN_PARAM(sd) ? +1 : -1), s_perout_flight_phase);
|
||||
}
|
||||
}
|
||||
else if (CFN_PARAM(sd) >= MIXSRC_TrimRud-1 && CFN_PARAM(sd) <= MIXSRC_TrimAil-1) {
|
||||
trimGvar[CFN_PARAM(sd)-MIXSRC_TrimRud+1] = CFN_FUNC(sd)-FUNC_ADJUST_GV1;
|
||||
}
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
else if (CFN_PARAM(sd) >= MIXSRC_REa-1 && CFN_PARAM(sd) < MIXSRC_TrimRud-1) {
|
||||
int8_t scroll = rePreviousValues[CFN_PARAM(sd)-MIXSRC_REa+1] - (g_rotenc[CFN_PARAM(sd)-MIXSRC_REa+1] / ROTARY_ENCODER_GRANULARITY);
|
||||
if (scroll) {
|
||||
SET_GVAR(sd->func-FUNC_ADJUST_GV1, GVAR_VALUE(sd->func-FUNC_ADJUST_GV1, s_perout_flight_phase) + scroll, s_perout_flight_phase);
|
||||
else if (CFN_PARAM(sd) >= MIXSRC_REa-1 && CFN_PARAM(sd) < MIXSRC_TrimRud-1) {
|
||||
int8_t scroll = rePreviousValues[CFN_PARAM(sd)-MIXSRC_REa+1] - (g_rotenc[CFN_PARAM(sd)-MIXSRC_REa+1] / ROTARY_ENCODER_GRANULARITY);
|
||||
if (scroll) {
|
||||
SET_GVAR(CFN_FUNC(sd)-FUNC_ADJUST_GV1, GVAR_VALUE(CFN_FUNC(sd)-FUNC_ADJUST_GV1, getGVarFlightPhase(s_perout_flight_phase, CFN_FUNC(sd)-FUNC_ADJUST_GV1)) + scroll, s_perout_flight_phase);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
else {
|
||||
SET_GVAR(CFN_FUNC(sd)-FUNC_ADJUST_GV1, limit((int16_t)-1250, getValue(CFN_PARAM(sd)), (int16_t)1250) / 10, s_perout_flight_phase);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
else {
|
||||
SET_GVAR(sd->func-FUNC_ADJUST_GV1, limit((int16_t)-1250, getValue(CFN_PARAM(sd)), (int16_t)1250) / 10, s_perout_flight_phase);
|
||||
active = false;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -2328,7 +2359,7 @@ void evalFunctions()
|
||||
fnSwitchDuration[i] = 0;
|
||||
#endif
|
||||
#if defined(CPUARM) && defined(SDCARD)
|
||||
if (sd->func == FUNC_BACKGND_MUSIC && isFunctionActive(FUNC_BACKGND_MUSIC)) {
|
||||
if (CFN_FUNC(sd) == FUNC_BACKGND_MUSIC && isFunctionActive(FUNC_BACKGND_MUSIC)) {
|
||||
STOP_PLAY(i+1);
|
||||
}
|
||||
#endif
|
||||
|
||||
+6
-12
@@ -68,6 +68,12 @@
|
||||
#define IF_CPUARM(x)
|
||||
#endif
|
||||
|
||||
#if defined(BATTGRAPH)
|
||||
#define IF_BATTGRAPH(x) x,
|
||||
#else
|
||||
#define IF_BATTGRAPH(x)
|
||||
#endif
|
||||
|
||||
#if defined(RTCLOCK)
|
||||
#define IF_RTCLOCK(x) x,
|
||||
#else
|
||||
@@ -534,18 +540,6 @@ enum CswFunctions {
|
||||
#define NUM_CAL_PPM 4
|
||||
#define NUM_PPM 8
|
||||
|
||||
#if defined(FRSKY_HUB)
|
||||
#define NUM_TELEMETRY TELEM_CSW_MAX
|
||||
#elif defined(WS_HOW_HIGH)
|
||||
#define NUM_TELEMETRY TELEM_ALT
|
||||
#elif defined(FRSKY)
|
||||
#define NUM_TELEMETRY TELEM_A2
|
||||
#elif defined(MAVLINK)
|
||||
#define NUM_TELEMETRY 4
|
||||
#else
|
||||
#define NUM_TELEMETRY TELEM_TM2
|
||||
#endif
|
||||
|
||||
#define THRCHK_DEADBAND 16
|
||||
|
||||
#if defined(FSPLASH) || defined(XSPLASH)
|
||||
|
||||
Reference in New Issue
Block a user