[Taranis] No more --- stored as a bitmap
[Taranis] Telemetry CRC fixed [Taranis / sky9x] Unuseful sources are hidden in the lists [Taranis / sky9x] No more --- [all] Recursive custom switches bug fix
This commit is contained in:
+53
-27
@@ -894,7 +894,7 @@ enum menuModelSetupItems {
|
||||
#endif
|
||||
|
||||
#if defined(PCBTARANIS) && defined(SDCARD)
|
||||
void onModelSetupMenu(const char *result)
|
||||
void onModelSetupBitmapMenu(const char *result)
|
||||
{
|
||||
if (result == STR_UPDATE_LIST) {
|
||||
if (!listSdFiles(BITMAPS_PATH, BITMAPS_EXT, sizeof(g_model.header.bitmap), NULL)) {
|
||||
@@ -904,7 +904,10 @@ void onModelSetupMenu(const char *result)
|
||||
}
|
||||
else {
|
||||
// The user choosed a bmp file in the list
|
||||
memcpy(g_model.header.bitmap, result, sizeof(g_model.header.bitmap));
|
||||
if (memcmp(result, "---", 3) == 0)
|
||||
memset(g_model.header.bitmap, 0, sizeof(g_model.header.bitmap));
|
||||
else
|
||||
memcpy(g_model.header.bitmap, result, sizeof(g_model.header.bitmap));
|
||||
LOAD_MODEL_BITMAP();
|
||||
memcpy(modelHeaders[g_eeGeneral.currModel].bitmap, g_model.header.bitmap, sizeof(g_model.header.bitmap));
|
||||
eeDirty(EE_MODEL);
|
||||
@@ -984,14 +987,14 @@ void menuModelSetup(uint8_t event)
|
||||
#if defined(PCBTARANIS) && defined(SDCARD)
|
||||
case ITEM_MODEL_BITMAP:
|
||||
lcd_putsLeft(y, STR_BITMAP);
|
||||
if (ZLEN(g_model.header.bitmap) > 0)
|
||||
if (ZEXIST(g_model.header.bitmap))
|
||||
lcd_putsnAtt(MODEL_SETUP_2ND_COLUMN, y, g_model.header.bitmap, sizeof(g_model.header.bitmap), attr);
|
||||
else
|
||||
lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, STR_VCSWFUNC, 0, attr);
|
||||
if (attr && event==EVT_KEY_BREAK(KEY_ENTER)) {
|
||||
s_editMode = 0;
|
||||
if (listSdFiles(BITMAPS_PATH, BITMAPS_EXT, sizeof(g_model.header.bitmap), g_model.header.bitmap, LIST_NONE_SD_FILE)) {
|
||||
menuHandler = onModelSetupMenu;
|
||||
menuHandler = onModelSetupBitmapMenu;
|
||||
}
|
||||
else {
|
||||
POPUP_WARNING(STR_NO_BITMAPS_ON_SD);
|
||||
@@ -1223,7 +1226,6 @@ void menuModelSetup(uint8_t event)
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case ITEM_MODEL_INTERNAL_MODULE_CHANNELS:
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_CHANNELS:
|
||||
case ITEM_MODEL_TRAINER_CHANNELS:
|
||||
@@ -2869,8 +2871,8 @@ void menuModelMixOne(uint8_t event)
|
||||
#endif
|
||||
case MIX_FIELD_SOURCE:
|
||||
lcd_putsColumnLeft(COLUMN_X, y, NO_INDENT(STR_SOURCE));
|
||||
putsMixerSource(COLUMN_X+MIXES_2ND_COLUMN, y, md2->srcRaw, attr);
|
||||
if (attr) CHECK_INCDEC_MODELSOURCE(event, md2->srcRaw, 1, MIXSRC_LAST_CH);
|
||||
putsMixerSource(COLUMN_X+MIXES_2ND_COLUMN, y, md2->srcRaw, STREXPANDED|attr);
|
||||
if (attr) CHECK_INCDEC_MODELSOURCE(event, md2->srcRaw, 1, MIXSRC_LAST);
|
||||
break;
|
||||
case MIX_FIELD_WEIGHT:
|
||||
lcd_putsColumnLeft(COLUMN_X, y, STR_WEIGHT);
|
||||
@@ -2987,6 +2989,8 @@ static uint8_t s_copySrcCh;
|
||||
#define _STR_MAX(x) PSTR("/" #x)
|
||||
#define STR_MAX(x) _STR_MAX(x)
|
||||
|
||||
#define MIX_LINE_SRC_POS 4*FW-1
|
||||
|
||||
#if LCD_W >= 212
|
||||
#define EXPO_LINE_WEIGHT_POS 7*FW+1
|
||||
#define EXPO_LINE_EXPO_POS 11*FW+5
|
||||
@@ -2995,7 +2999,6 @@ static uint8_t s_copySrcCh;
|
||||
#define EXPO_LINE_SELECT_POS 18
|
||||
#define EXPO_LINE_FM_POS LCD_W-LEN_EXPOMIX_NAME*FW-MENUS_SCROLLBAR_WIDTH-FW-1
|
||||
#define EXPO_LINE_NAME_POS LCD_W-LEN_EXPOMIX_NAME*FW-MENUS_SCROLLBAR_WIDTH
|
||||
#define MIX_LINE_SRC_POS 4*FW
|
||||
#define MIX_LINE_WEIGHT_POS 11*FW+5
|
||||
#define MIX_LINE_CURVE_POS 12*FW+4
|
||||
#define MIX_LINE_SWITCH_POS 16*FW+1
|
||||
@@ -3008,7 +3011,6 @@ static uint8_t s_copySrcCh;
|
||||
#define EXPO_LINE_SELECT_POS 24
|
||||
#define EXPO_LINE_FM_POS
|
||||
#define EXPO_LINE_NAME_POS LCD_W-sizeof(ed->name)*FW-MENUS_SCROLLBAR_WIDTH
|
||||
#define MIX_LINE_SRC_POS 4*FW
|
||||
#define MIX_LINE_WEIGHT_POS 11*FW+3
|
||||
#define MIX_LINE_CURVE_POS 12*FW+2
|
||||
#define MIX_LINE_SWITCH_POS 16*FW
|
||||
@@ -3024,7 +3026,6 @@ static uint8_t s_copySrcCh;
|
||||
#endif
|
||||
#define EXPO_LINE_FM_POS LCD_W-FW-MENUS_SCROLLBAR_WIDTH
|
||||
#define EXPO_LINE_SELECT_POS 24
|
||||
#define MIX_LINE_SRC_POS 4*FW
|
||||
#define MIX_LINE_WEIGHT_POS 11*FW+3
|
||||
#define MIX_LINE_CURVE_POS 12*FW+2
|
||||
#define MIX_LINE_SWITCH_POS 16*FW
|
||||
@@ -3754,6 +3755,23 @@ void menuModelGVars(uint8_t event)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CPUARM)
|
||||
#define INCDEC_DECLARE_VARS() uint8_t incdecFlag = EE_MODEL; IsValueAvailable isValueAvailable = NULL
|
||||
#define INCDEC_SET_FLAG(f) incdecFlag = (EE_MODEL|(f))
|
||||
#define INCDEC_ENABLE_CHECK(fn) isValueAvailable = fn
|
||||
#define CHECK_INCDEC_PARAM(event, var, min, max) checkIncDec(event, var, min, max, incdecFlag, isValueAvailable)
|
||||
#elif defined(CPUM64)
|
||||
#define INCDEC_DECLARE_VARS()
|
||||
#define INCDEC_SET_FLAG(f)
|
||||
#define INCDEC_ENABLE_CHECK(fn)
|
||||
#define CHECK_INCDEC_PARAM(event, var, min, max) checkIncDec(event, var, min, max, EE_MODEL)
|
||||
#else
|
||||
#define INCDEC_DECLARE_VARS() uint8_t incdecFlag = EE_MODEL
|
||||
#define INCDEC_SET_FLAG(f) incdecFlag = (EE_MODEL|(f))
|
||||
#define INCDEC_ENABLE_CHECK(fn)
|
||||
#define CHECK_INCDEC_PARAM(event, var, min, max) checkIncDec(event, var, min, max, incdecFlag)
|
||||
#endif
|
||||
|
||||
enum CustomSwitchFields {
|
||||
CSW_FIELD_FUNCTION,
|
||||
CSW_FIELD_V1,
|
||||
@@ -3770,7 +3788,7 @@ enum CustomSwitchFields {
|
||||
#if LCD_W >= 212
|
||||
#define CSW_1ST_COLUMN (4*FW-3)
|
||||
#define CSW_2ND_COLUMN (8*FW+1)
|
||||
#define CSW_3RD_COLUMN (13*FW+2)
|
||||
#define CSW_3RD_COLUMN (14*FW)
|
||||
#define CSW_4TH_COLUMN (21*FW+1)
|
||||
#define CSW_5TH_COLUMN (26*FW+1)
|
||||
#define CSW_6TH_COLUMN (31*FW+1)
|
||||
@@ -3916,9 +3934,7 @@ void menuModelCustomSwitches(uint8_t event)
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
case EVT_ROTARY_BREAK:
|
||||
#endif
|
||||
#if !defined(PCBTARANIS)
|
||||
case EVT_KEY_FIRST(KEY_RIGHT):
|
||||
#endif
|
||||
case EVT_KEY_FIRST(KEY_ENTER):
|
||||
if (sub >= 0) {
|
||||
s_currIdx = sub;
|
||||
@@ -3971,18 +3987,12 @@ void menuModelCustomSwitches(uint8_t event)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
void menuModelCustomSwitches(uint8_t event)
|
||||
{
|
||||
#if defined(CPUM64)
|
||||
#define INCDEC_SET_FLAG(f)
|
||||
#define CHECK_INCDEC_CSPARAM(event, var, min, max) CHECK_INCDEC_MODELVAR(event, var, min, max)
|
||||
#else
|
||||
uint8_t incdecFlag;
|
||||
#define INCDEC_SET_FLAG(f) incdecFlag = (EE_MODEL|(f))
|
||||
#define CHECK_INCDEC_CSPARAM(event, var, min, max) var = checkIncDec(event, var, min, max, incdecFlag)
|
||||
#endif
|
||||
INCDEC_DECLARE_VARS();
|
||||
|
||||
MENU(STR_MENUCUSTOMSWITCHES, menuTabModel, e_CustomSwitches, NUM_CSW+1, {0, NAVIGATION_LINE_BY_LINE|CSW_FIELD_LAST/*repeated...*/});
|
||||
|
||||
@@ -4014,7 +4024,11 @@ void menuModelCustomSwitches(uint8_t event)
|
||||
|
||||
// CSW params
|
||||
uint8_t cstate = cswFamily(cs->func);
|
||||
#if defined(CPUARM)
|
||||
int16_t v1_min=0, v1_max=MIXSRC_LAST_TELEM, v2_min=0, v2_max=MIXSRC_LAST_TELEM;
|
||||
#else
|
||||
int8_t v1_min=0, v1_max=MIXSRC_LAST_TELEM, v2_min=0, v2_max=MIXSRC_LAST_TELEM;
|
||||
#endif
|
||||
|
||||
if (cstate == CS_VBOOL) {
|
||||
putsSwitches(CSW_2ND_COLUMN, y, cs->v1, attr1);
|
||||
@@ -4022,11 +4036,13 @@ void menuModelCustomSwitches(uint8_t event)
|
||||
v1_min = SWSRC_OFF+1; v1_max = SWSRC_ON-1;
|
||||
v2_min = SWSRC_OFF+1; v2_max = SWSRC_ON-1;
|
||||
INCDEC_SET_FLAG(INCDEC_SWITCH);
|
||||
INCDEC_ENABLE_CHECK(NULL);
|
||||
}
|
||||
else if (cstate == CS_VCOMP) {
|
||||
putsMixerSource(CSW_2ND_COLUMN, y, cs->v1, attr1);
|
||||
putsMixerSource(CSW_3RD_COLUMN, y, cs->v2, attr2);
|
||||
INCDEC_SET_FLAG(INCDEC_SOURCE);
|
||||
INCDEC_ENABLE_CHECK(isSourceAvailable);
|
||||
}
|
||||
else if (cstate == CS_VTIMER) {
|
||||
lcd_outdezAtt(CSW_2ND_COLUMN, y, cswTimerValue(cs->v1), LEFT|PREC1|attr1);
|
||||
@@ -4034,13 +4050,18 @@ void menuModelCustomSwitches(uint8_t event)
|
||||
v1_min = v2_min = -128;
|
||||
v1_max = v2_max = 122;
|
||||
INCDEC_SET_FLAG(0);
|
||||
INCDEC_ENABLE_CHECK(NULL);
|
||||
}
|
||||
else {
|
||||
putsMixerSource(CSW_2ND_COLUMN, y, cs->v1, attr1);
|
||||
if (horz == 1)
|
||||
if (horz == 1) {
|
||||
INCDEC_SET_FLAG(INCDEC_SOURCE);
|
||||
else
|
||||
INCDEC_ENABLE_CHECK(isSourceAvailable);
|
||||
}
|
||||
else {
|
||||
INCDEC_SET_FLAG(0);
|
||||
INCDEC_ENABLE_CHECK(NULL);
|
||||
}
|
||||
#if defined(FRSKY)
|
||||
if (cs->v1 >= MIXSRC_FIRST_TELEM) {
|
||||
putsTelemetryChannel(CSW_3RD_COLUMN, y, cs->v1 - MIXSRC_FIRST_TELEM, convertCswTelemValue(cs), LEFT|attr2);
|
||||
@@ -4102,10 +4123,10 @@ void menuModelCustomSwitches(uint8_t event)
|
||||
break;
|
||||
}
|
||||
case CSW_FIELD_V1:
|
||||
CHECK_INCDEC_CSPARAM(event, cs->v1, v1_min, v1_max);
|
||||
cs->v1 = CHECK_INCDEC_PARAM(event, cs->v1, v1_min, v1_max);
|
||||
break;
|
||||
case CSW_FIELD_V2:
|
||||
CHECK_INCDEC_CSPARAM(event, cs->v2, v2_min, v2_max);
|
||||
cs->v2 = CHECK_INCDEC_PARAM(event, cs->v2, v2_min, v2_max);
|
||||
break;
|
||||
case CSW_FIELD_ANDSW:
|
||||
#if defined(CPUARM)
|
||||
@@ -4247,6 +4268,7 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
|
||||
case 2:
|
||||
if (sd->swtch) {
|
||||
INCDEC_DECLARE_VARS();
|
||||
int16_t val_displayed = CFN_PARAM(sd);
|
||||
int8_t val_min = 0;
|
||||
uint8_t val_max = 255;
|
||||
@@ -4271,7 +4293,7 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
#else
|
||||
xcoord_t x = (CFN_FUNC(sd) == FUNC_PLAY_TRACK ? MODEL_CUSTOM_FUNC_2ND_COLUMN + FW + FW*strlen(TR_PLAY_TRACK) : MODEL_CUSTOM_FUNC_3RD_COLUMN);
|
||||
#endif
|
||||
if (ZLEN(sd->param.name))
|
||||
if (ZEXIST(sd->param.name))
|
||||
lcd_putsnAtt(x, y, sd->param.name, sizeof(sd->param.name), attr);
|
||||
else
|
||||
lcd_putsiAtt(x, y, STR_VCSWFUNC, 0, attr);
|
||||
@@ -4292,12 +4314,14 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
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);
|
||||
INCDEC_ENABLE_CHECK(isSourceP1Available);
|
||||
}
|
||||
#endif
|
||||
#if defined(CPUARM)
|
||||
else if (CFN_FUNC(sd) == FUNC_VOLUME) {
|
||||
val_max = MIXSRC_LAST_CH-1;
|
||||
putsMixerSource(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed+1, attr);
|
||||
INCDEC_ENABLE_CHECK(isSourceP1Available);
|
||||
}
|
||||
#elif defined(VOICE)
|
||||
else if (CFN_FUNC(sd) == FUNC_PLAY_TRACK) {
|
||||
@@ -4326,6 +4350,7 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
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);
|
||||
INCDEC_ENABLE_CHECK(isSourceP1Available);
|
||||
}
|
||||
#endif
|
||||
#if defined(SDCARD)
|
||||
@@ -4363,6 +4388,7 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
case FUNC_ADJUST_GVAR_SOURCE:
|
||||
val_max = MIXSRC_LAST_CH-1;
|
||||
putsMixerSource(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed+1, attr);
|
||||
INCDEC_ENABLE_CHECK(isSourceP1Available);
|
||||
break;
|
||||
case FUNC_ADJUST_GVAR_GVAR:
|
||||
val_max = MAX_GVARS-1;
|
||||
@@ -4389,7 +4415,7 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
}
|
||||
|
||||
if (active) {
|
||||
CFN_PARAM(sd) = checkIncDec(event, val_displayed, val_min, val_max, EE_MODEL);
|
||||
CFN_PARAM(sd) = CHECK_INCDEC_PARAM(event, val_displayed, val_min, val_max);
|
||||
}
|
||||
}
|
||||
else if (attr) {
|
||||
|
||||
Reference in New Issue
Block a user