Skip to content

Commit 0c4cb94

Browse files
author
philmoz
committed
Add radio side code for source invert option.
1 parent e8ed206 commit 0c4cb94

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+424
-211
lines changed

radio/src/dataconstants.h

+2
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,8 @@ enum MixSources {
535535

536536
MIXSRC_FIRST_TELEM SKIP,
537537
MIXSRC_LAST_TELEM SKIP = MIXSRC_FIRST_TELEM + 3 * MAX_TELEMETRY_SENSORS - 1,
538+
539+
MIXSRC_INVERT SKIP,
538540
};
539541

540542

radio/src/datastructs_private.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ PACK(struct CurveRef {
7474
PACK(struct MixData {
7575
int16_t weight:11 CUST(in_read_weight,in_write_weight); // GV1=-1024, -GV1=1023
7676
uint16_t destCh:5;
77-
uint16_t srcRaw:10 CUST(r_mixSrcRaw,w_mixSrcRaw); // srcRaw=0 means not used
77+
int16_t srcRaw:10 CUST(r_mixSrcRawEx,w_mixSrcRawEx); // srcRaw=0 means not used
7878
uint16_t carryTrim:1;
7979
uint16_t mixWarn:2; // mixer warning
8080
uint16_t mltpx:2 ENUM(MixerMultiplex);
@@ -99,7 +99,7 @@ PACK(struct ExpoData {
9999
uint16_t scale:14;
100100
CUST_ATTR(carryTrim, r_carryTrim, nullptr); //pre 2.9
101101
int16_t trimSource:6;
102-
uint16_t srcRaw:10 ENUM(MixSources) CUST(r_mixSrcRaw,w_mixSrcRaw);
102+
int16_t srcRaw:10 ENUM(MixSources) CUST(r_mixSrcRawEx,w_mixSrcRawEx);
103103
uint32_t chn:5;
104104
int32_t swtch:10 CUST(r_swtchSrc,w_swtchSrc);
105105
uint32_t flightModes:9 CUST(r_flightModes, w_flightModes);

radio/src/gui/128x64/gui.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ extern int8_t s_copySrcRow;
125125
extern int8_t s_copyTgtOfs;
126126
extern uint8_t s_currIdx;
127127
extern uint8_t s_currIdxSubMenu;
128-
extern uint16_t s_currSrcRaw;
128+
extern mixsrc_t s_currSrcRaw;
129129
extern uint16_t s_currScale;
130130
extern uint8_t s_copySrcIdx;
131131
extern uint8_t s_copySrcCh;

radio/src/gui/128x64/lcd.cpp

+19-8
Original file line numberDiff line numberDiff line change
@@ -664,23 +664,34 @@ void putsVBat(coord_t x, coord_t y, LcdFlags att)
664664
putsVolts(x, y, g_vbat100mV, att);
665665
}
666666

667-
void drawSource(coord_t x, coord_t y, uint32_t idx, LcdFlags att)
667+
void drawSource(coord_t x, coord_t y, mixsrc_t idx, LcdFlags att)
668668
{
669-
if (idx == MIXSRC_NONE) {
669+
uint16_t aidx = abs(idx);
670+
bool inverted = idx < 0;
671+
672+
if (aidx == MIXSRC_NONE) {
670673
lcdDrawText(x, y, STR_EMPTY, att);
671674
}
672-
else if (idx <= MIXSRC_LAST_INPUT) {
675+
else if (aidx <= MIXSRC_LAST_INPUT) {
676+
if (inverted) {
677+
lcdDrawChar(x, y, '!');
678+
x += 2;
679+
}
673680
lcdDrawChar(x+2, y+1, CHR_INPUT, TINSIZE);
674681
lcdDrawSolidFilledRect(x, y, 7, 7);
675-
if (g_model.inputNames[idx-MIXSRC_FIRST_INPUT][0])
676-
lcdDrawSizedText(x+8, y, g_model.inputNames[idx-MIXSRC_FIRST_INPUT], LEN_INPUT_NAME, att);
682+
if (g_model.inputNames[aidx-MIXSRC_FIRST_INPUT][0])
683+
lcdDrawSizedText(x+8, y, g_model.inputNames[aidx-MIXSRC_FIRST_INPUT], LEN_INPUT_NAME, att);
677684
else
678-
lcdDrawNumber(x+8, y, idx, att|LEADING0|LEFT, 2);
685+
lcdDrawNumber(x+8, y, aidx, att|LEADING0|LEFT, 2);
679686
}
680687
#if defined(LUA_INPUTS)
681-
else if (idx <= MIXSRC_LAST_LUA) {
682-
div_t qr = div(idx-MIXSRC_FIRST_LUA, MAX_SCRIPT_OUTPUTS);
688+
else if (aidx <= MIXSRC_LAST_LUA) {
689+
div_t qr = div((uint16_t)(aidx-MIXSRC_FIRST_LUA), MAX_SCRIPT_OUTPUTS);
683690
#if defined(LUA_MODEL_SCRIPTS)
691+
if (inverted) {
692+
lcdDrawChar(x, y, '!');
693+
x += 2;
694+
}
684695
if (qr.quot < MAX_SCRIPTS && qr.rem < scriptInputsOutputs[qr.quot].outputsCount) {
685696
lcdDrawChar(x+2, y+1, '1'+qr.quot, TINSIZE);
686697
lcdDrawFilledRect(x, y, 7, 7, 0);

radio/src/gui/128x64/menu_model.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,5 +48,5 @@ void editSingleName(coord_t x, coord_t y, const char* label, char* name,
4848

4949
uint8_t s_currIdx;
5050
uint8_t s_currIdxSubMenu;
51-
uint16_t s_currSrcRaw;
51+
mixsrc_t s_currSrcRaw;
5252
uint16_t s_currScale;

radio/src/gui/128x64/model_input_edit.cpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ void menuModelExpoOne(event_t event)
7979
uint8_t old_editMode = s_editMode;
8080

8181
SUBMENU(STR_MENUINPUTS, EXPO_FIELD_MAX,
82-
{0, 0, 0, ed->srcRaw >= MIXSRC_FIRST_TELEM ? (uint8_t)0 : (uint8_t)HIDDEN_ROW, 0, 0, LABEL(Curve), 1,
82+
{0, 0, 0, abs(ed->srcRaw) >= MIXSRC_FIRST_TELEM ? (uint8_t)0 : (uint8_t)HIDDEN_ROW, 0, 0, LABEL(Curve), 1,
8383
CASE_FLIGHT_MODES(FM_ROW(LABEL(Flight Mode))) CASE_FLIGHT_MODES(FM_ROW((MAX_FLIGHT_MODES-1) | NAVIGATION_LINE_BY_LINE)) 0 /*, ...*/});
8484

8585
int8_t sub = menuVerticalPosition;
@@ -112,14 +112,14 @@ void menuModelExpoOne(event_t event)
112112
lcdDrawTextAlignedLeft(y, STR_SOURCE);
113113
drawSource(EXPO_ONE_2ND_COLUMN, y, ed->srcRaw, RIGHT|STREXPANDED|attr);
114114
if (attr)
115-
ed->srcRaw = checkIncDec(event, ed->srcRaw, INPUTSRC_FIRST, INPUTSRC_LAST, EE_MODEL|INCDEC_SOURCE|NO_INCDEC_MARKS, isSourceAvailableInInputs);
115+
ed->srcRaw = checkIncDec(event, ed->srcRaw, INPUTSRC_FIRST, INPUTSRC_LAST, EE_MODEL|INCDEC_SOURCE|INCDEC_SOURCE_INVERT|NO_INCDEC_MARKS, isSourceAvailableInInputs);
116116
break;
117117

118118
case EXPO_FIELD_SCALE:
119119
lcdDrawTextAlignedLeft(y, STR_SCALE);
120-
drawSensorCustomValue(EXPO_ONE_2ND_COLUMN, y, (ed->srcRaw - MIXSRC_FIRST_TELEM)/3, convertTelemValue(ed->srcRaw - MIXSRC_FIRST_TELEM + 1, ed->scale), RIGHT | attr);
120+
drawSensorCustomValue(EXPO_ONE_2ND_COLUMN, y, (abs(ed->srcRaw) - MIXSRC_FIRST_TELEM)/3, convertTelemValue(abs(ed->srcRaw) - MIXSRC_FIRST_TELEM + 1, ed->scale), RIGHT | attr);
121121
if (attr)
122-
ed->scale = checkIncDec(event, ed->scale, 0, maxTelemValue(ed->srcRaw - MIXSRC_FIRST_TELEM + 1), EE_MODEL);
122+
ed->scale = checkIncDec(event, ed->scale, 0, maxTelemValue(abs(ed->srcRaw) - MIXSRC_FIRST_TELEM + 1), EE_MODEL);
123123
break;
124124

125125
case EXPO_FIELD_WEIGHT:
@@ -161,13 +161,13 @@ void menuModelExpoOne(event_t event)
161161
case EXPO_FIELD_TRIM:
162162
lcdDrawTextAlignedLeft(y, STR_TRIM);
163163
{
164-
const char* trim_str = getTrimSourceLabel(ed->srcRaw, ed->trimSource);
164+
const char* trim_str = getTrimSourceLabel(abs(ed->srcRaw), ed->trimSource);
165165
LcdFlags flags = RIGHT | (menuHorizontalPosition==0 ? attr : 0);
166166
lcdDrawText(EXPO_ONE_2ND_COLUMN, y, trim_str, flags);
167167

168168
if (attr) {
169169
int8_t min = TRIM_ON;
170-
if (ed->srcRaw >= MIXSRC_FIRST_STICK && ed->srcRaw <= MIXSRC_LAST_STICK) {
170+
if (abs(ed->srcRaw) >= MIXSRC_FIRST_STICK && abs(ed->srcRaw) <= MIXSRC_LAST_STICK) {
171171
min = -TRIM_OFF;
172172
}
173173
ed->trimSource = -checkIncDecModel(event, -ed->trimSource, min, keysGetMaxTrims());

radio/src/gui/128x64/model_logical_switches.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ void menuModelLogicalSwitchOne(event_t event)
116116
else {
117117
v1_val = cs->v1;
118118
drawSource(CSWONE_2ND_COLUMN, y, v1_val, attr);
119-
INCDEC_SET_FLAG(EE_MODEL | INCDEC_SOURCE);
119+
INCDEC_SET_FLAG(EE_MODEL | INCDEC_SOURCE | INCDEC_SOURCE_INVERT);
120120
INCDEC_ENABLE_CHECK(isSourceAvailable);
121121
}
122122
if (attr) {
@@ -152,7 +152,7 @@ void menuModelLogicalSwitchOne(event_t event)
152152
}
153153
else if (cstate == LS_FAMILY_COMP) {
154154
drawSource(CSWONE_2ND_COLUMN, y, cs->v2, attr);
155-
INCDEC_SET_FLAG(EE_MODEL | INCDEC_SOURCE);
155+
INCDEC_SET_FLAG(EE_MODEL | INCDEC_SOURCE | INCDEC_SOURCE_INVERT);
156156
INCDEC_ENABLE_CHECK(isSourceAvailable);
157157
}
158158
else {

radio/src/gui/128x64/model_mix_edit.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,8 @@ void menuModelMixOne(event_t event)
138138
case MIX_FIELD_SOURCE:
139139
lcdDrawTextAlignedLeft(y, STR_SOURCE);
140140
drawSource(MIXES_2ND_COLUMN, y, md2->srcRaw, STREXPANDED|attr);
141-
if (attr) CHECK_INCDEC_MODELSOURCE(event, md2->srcRaw, 1, MIXSRC_LAST);
141+
if (attr)
142+
md2->srcRaw = checkIncDec(event, md2->srcRaw, 1, MIXSRC_LAST, EE_MODEL|INCDEC_SOURCE|INCDEC_SOURCE_INVERT|NO_INCDEC_MARKS, isSourceAvailable);
142143
break;
143144

144145
case MIX_FIELD_WEIGHT:

radio/src/gui/128x64/model_special_functions.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
351351
val_max = MIXSRC_LAST_TELEM;
352352
drawSource(MODEL_SPECIAL_FUNC_3RD_COLUMN - (val_displayed == 0 ? 0 : 2 * FW), y, val_displayed, attr);
353353
if (active) {
354-
INCDEC_SET_FLAG(eeFlags | INCDEC_SOURCE);
354+
INCDEC_SET_FLAG(eeFlags | INCDEC_SOURCE | INCDEC_SOURCE_INVERT);
355355
INCDEC_ENABLE_CHECK(functionsContext == &globalFunctionsContext ? isSourceAvailableInGlobalFunctions : isSourceAvailable);
356356
}
357357
}
@@ -360,15 +360,15 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
360360
val_max = MIXSRC_LAST_CH;
361361
drawSource(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr);
362362
if (active) {
363-
INCDEC_SET_FLAG(eeFlags | INCDEC_SOURCE);
363+
INCDEC_SET_FLAG(eeFlags | INCDEC_SOURCE | INCDEC_SOURCE_INVERT);
364364
INCDEC_ENABLE_CHECK(isSourceAvailable);
365365
}
366366
}
367367
else if (func == FUNC_BACKLIGHT) {
368368
val_max = MIXSRC_LAST_CH;
369369
drawSource(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr);
370370
if (active) {
371-
INCDEC_SET_FLAG(eeFlags | INCDEC_SOURCE);
371+
INCDEC_SET_FLAG(eeFlags | INCDEC_SOURCE | INCDEC_SOURCE_INVERT);
372372
INCDEC_ENABLE_CHECK(isSourceAvailable);
373373
}
374374
}
@@ -397,7 +397,7 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
397397
val_max = MIXSRC_LAST_CH;
398398
drawSource(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr);
399399
if (active) {
400-
INCDEC_SET_FLAG(eeFlags | INCDEC_SOURCE);
400+
INCDEC_SET_FLAG(eeFlags | INCDEC_SOURCE | INCDEC_SOURCE_INVERT);
401401
INCDEC_ENABLE_CHECK(isSourceAvailable);
402402
}
403403
break;

radio/src/gui/212x64/gui.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ extern int8_t s_copySrcRow;
146146
extern int8_t s_copyTgtOfs;
147147
extern uint8_t s_currIdx;
148148
extern uint8_t s_currIdxSubMenu;
149-
extern uint16_t s_currSrcRaw;
149+
extern mixsrc_t s_currSrcRaw;
150150
extern uint16_t s_currScale;
151151
extern uint8_t s_copySrcIdx;
152152
extern uint8_t s_copySrcCh;

radio/src/gui/212x64/lcd.cpp

+37-33
Original file line numberDiff line numberDiff line change
@@ -634,22 +634,26 @@ void drawMainControlLabel(coord_t x, coord_t y, uint8_t idx, LcdFlags att)
634634
lcdDrawSizedText(x, y, getMainControlLabel(idx), UINT8_MAX, att);
635635
}
636636

637-
void drawSource(coord_t x, coord_t y, uint32_t idx, LcdFlags att)
637+
void drawSource(coord_t x, coord_t y, mixsrc_t idx, LcdFlags att)
638638
{
639-
if (idx == MIXSRC_NONE) {
639+
uint16_t aidx = abs(idx);
640+
641+
// TODO: Handle negative cases
642+
643+
if (aidx == MIXSRC_NONE) {
640644
lcdDrawText(x, y, STR_EMPTY, att);
641645
}
642-
else if (idx <= MIXSRC_LAST_INPUT) {
646+
else if (aidx <= MIXSRC_LAST_INPUT) {
643647
lcdDrawChar(x+2, y+1, CHR_INPUT, TINSIZE);
644648
lcdDrawFilledRect(x, y, 7, 7);
645-
if (ZEXIST(g_model.inputNames[idx-MIXSRC_FIRST_INPUT]))
646-
lcdDrawSizedText(x+8, y, g_model.inputNames[idx-MIXSRC_FIRST_INPUT], LEN_INPUT_NAME, att);
649+
if (ZEXIST(g_model.inputNames[aidx-MIXSRC_FIRST_INPUT]))
650+
lcdDrawSizedText(x+8, y, g_model.inputNames[aidx-MIXSRC_FIRST_INPUT], LEN_INPUT_NAME, att);
647651
else
648-
lcdDrawNumber(x+8, y, idx, att|LEADING0|LEFT, 2);
652+
lcdDrawNumber(x+8, y, aidx, att|LEADING0|LEFT, 2);
649653
}
650654

651-
else if (idx <= MIXSRC_LAST_LUA) {
652-
div_t qr = div(idx-MIXSRC_FIRST_LUA, MAX_SCRIPT_OUTPUTS);
655+
else if (aidx <= MIXSRC_LAST_LUA) {
656+
div_t qr = div((uint16_t)(aidx-MIXSRC_FIRST_LUA), MAX_SCRIPT_OUTPUTS);
653657
#if defined(LUA_MODEL_SCRIPTS)
654658
if (qr.quot < MAX_SCRIPTS && qr.rem < scriptInputsOutputs[qr.quot].outputsCount) {
655659
lcdDrawChar(x+2, y+1, '1'+qr.quot, TINSIZE);
@@ -664,34 +668,34 @@ void drawSource(coord_t x, coord_t y, uint32_t idx, LcdFlags att)
664668
}
665669
}
666670

667-
else if (idx <= MIXSRC_LAST_POT) {
671+
else if (aidx <= MIXSRC_LAST_POT) {
668672
lcdDrawText(x, y, getSourceString(idx), att);
669673
}
670-
else if (idx >= MIXSRC_FIRST_SWITCH && idx <= MIXSRC_LAST_SWITCH) {
674+
else if (aidx >= MIXSRC_FIRST_SWITCH && aidx <= MIXSRC_LAST_SWITCH) {
671675
lcdDrawText(x, y, getSourceString(idx), att);
672676
}
673-
else if (idx <= MIXSRC_LAST_LOGICAL_SWITCH) {
674-
idx -= MIXSRC_FIRST_LOGICAL_SWITCH;
675-
drawSwitch(x, y, idx + SWSRC_FIRST_LOGICAL_SWITCH, att);
676-
} else if (idx <= MIXSRC_LAST_TRAINER) {
677-
idx -= MIXSRC_FIRST_TRAINER;
678-
drawStringWithIndex(x, y, STR_PPM_TRAINER, idx + 1, att);
679-
} else if (idx <= MIXSRC_LAST_CH) {
680-
idx -= MIXSRC_FIRST_CH;
681-
drawStringWithIndex(x, y, STR_CH, idx + 1, att);
682-
if (ZEXIST(g_model.limitData[idx].name) && (att & STREXPANDED)) {
677+
else if (aidx <= MIXSRC_LAST_LOGICAL_SWITCH) {
678+
aidx -= MIXSRC_FIRST_LOGICAL_SWITCH;
679+
drawSwitch(x, y, aidx + SWSRC_FIRST_LOGICAL_SWITCH, att);
680+
} else if (aidx <= MIXSRC_LAST_TRAINER) {
681+
aidx -= MIXSRC_FIRST_TRAINER;
682+
drawStringWithIndex(x, y, STR_PPM_TRAINER, aidx + 1, att);
683+
} else if (aidx <= MIXSRC_LAST_CH) {
684+
aidx -= MIXSRC_FIRST_CH;
685+
drawStringWithIndex(x, y, STR_CH, aidx + 1, att);
686+
if (ZEXIST(g_model.limitData[aidx].name) && (att & STREXPANDED)) {
683687
lcdDrawChar(lcdLastRightPos, y, ' ', att|SMLSIZE);
684-
lcdDrawSizedText(lcdLastRightPos+3, y, g_model.limitData[idx].name, LEN_CHANNEL_NAME, att|SMLSIZE);
688+
lcdDrawSizedText(lcdLastRightPos+3, y, g_model.limitData[aidx].name, LEN_CHANNEL_NAME, att|SMLSIZE);
685689
}
686690
}
687-
else if (idx <= MIXSRC_LAST_GVAR) {
688-
idx -= MIXSRC_FIRST_GVAR - 1;
689-
drawStringWithIndex(x, y, STR_GV, idx, att);
691+
else if (aidx <= MIXSRC_LAST_GVAR) {
692+
aidx -= MIXSRC_FIRST_GVAR - 1;
693+
drawStringWithIndex(x, y, STR_GV, aidx, att);
690694
}
691-
else if (idx < MIXSRC_FIRST_TIMER) {
695+
else if (aidx < MIXSRC_FIRST_TIMER) {
692696
// Built-in sources: TX Voltage, Time, GPS (+ reserved)
693697
const char* src_str;
694-
switch(idx) {
698+
switch(aidx) {
695699
case MIXSRC_TX_VOLTAGE:
696700
src_str = STR_SRC_BATT;
697701
break;
@@ -707,18 +711,18 @@ void drawSource(coord_t x, coord_t y, uint32_t idx, LcdFlags att)
707711
}
708712
lcdDrawText(x, y, src_str, att);
709713
}
710-
else if (idx <= MIXSRC_LAST_TIMER) {
711-
idx -= MIXSRC_FIRST_TIMER;
712-
if(g_model.timers[idx].name[0]) {
713-
lcdDrawSizedText(x, y, g_model.timers[idx].name, LEN_TIMER_NAME, att);
714+
else if (aidx <= MIXSRC_LAST_TIMER) {
715+
aidx -= MIXSRC_FIRST_TIMER;
716+
if(g_model.timers[aidx].name[0]) {
717+
lcdDrawSizedText(x, y, g_model.timers[aidx].name, LEN_TIMER_NAME, att);
714718
}
715719
else {
716-
drawStringWithIndex(x, y, STR_SRC_TIMER, idx + 1, att);
720+
drawStringWithIndex(x, y, STR_SRC_TIMER, aidx + 1, att);
717721
}
718722
}
719723
else {
720-
idx -= MIXSRC_FIRST_TELEM;
721-
div_t qr = div(idx, 3);
724+
aidx -= MIXSRC_FIRST_TELEM;
725+
div_t qr = div((uint16_t)aidx, 3);
722726
lcdDrawSizedText(x, y, g_model.telemetrySensors[qr.quot].label, TELEM_LABEL_LEN, att);
723727
if (qr.rem) lcdDrawChar(lcdLastRightPos, y, qr.rem==2 ? '+' : '-', att);
724728
}

radio/src/gui/212x64/lcd.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ void lcdDrawNumber(coord_t x, coord_t y, int32_t val, LcdFlags mode=0);
113113
void drawModelName(coord_t x, coord_t y, char *name, uint8_t id, LcdFlags att);
114114
void drawSwitch(coord_t x, coord_t y, int32_t swtch, LcdFlags att=0, bool autoBold = true);
115115
void drawMainControlLabel(coord_t x, coord_t y, uint8_t idx, LcdFlags att=0);
116-
void drawSource(coord_t x, coord_t y, uint32_t idx, LcdFlags att=0);
116+
void drawSource(coord_t x, coord_t y, mixsrc_t idx, LcdFlags att=0);
117117
void drawCurveName(coord_t x, coord_t y, int8_t idx, LcdFlags att=0);
118118
void drawTimerMode(coord_t x, coord_t y, swsrc_t mode, LcdFlags att=0);
119119

radio/src/gui/212x64/menu_model.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,5 +74,5 @@ void editSingleName(coord_t x, coord_t y, const char * label, char *name, uint8_
7474

7575
uint8_t s_currIdx;
7676
uint8_t s_currIdxSubMenu;
77-
uint16_t s_currSrcRaw;
77+
mixsrc_t s_currSrcRaw;
7878
uint16_t s_currScale;

radio/src/gui/212x64/model_input_edit.cpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,10 @@ void menuModelExpoOne(event_t event)
103103
lcdDrawTextAlignedLeft(y, STR_SOURCE);
104104
drawSource(EXPO_ONE_2ND_COLUMN, y, ed->srcRaw, STREXPANDED|attr);
105105
if (attr && menuHorizontalPosition==0)
106-
ed->srcRaw = checkIncDec(event, ed->srcRaw, INPUTSRC_FIRST, INPUTSRC_LAST, EE_MODEL|INCDEC_SOURCE|NO_INCDEC_MARKS, isSourceAvailableInInputs);
107-
if (ed->srcRaw >= MIXSRC_FIRST_TELEM) {
108-
drawSensorCustomValue(EXPO_ONE_2ND_COLUMN+30, y, (ed->srcRaw - MIXSRC_FIRST_TELEM)/3, getValue(ed->srcRaw), LEFT|(menuHorizontalPosition==1?attr:0));
109-
if (attr && menuHorizontalPosition == 1) ed->scale = checkIncDec(event, ed->scale, 0, maxTelemValue(ed->srcRaw - MIXSRC_FIRST_TELEM + 1), EE_MODEL);
106+
ed->srcRaw = checkIncDec(event, ed->srcRaw, INPUTSRC_FIRST, INPUTSRC_LAST, EE_MODEL|INCDEC_SOURCE|INCDEC_SOURCE_INVERT|NO_INCDEC_MARKS, isSourceAvailableInInputs);
107+
if (abs(ed->srcRaw) >= MIXSRC_FIRST_TELEM) {
108+
drawSensorCustomValue(EXPO_ONE_2ND_COLUMN+30, y, (abs(ed->srcRaw) - MIXSRC_FIRST_TELEM)/3, getValue(ed->srcRaw), LEFT|(menuHorizontalPosition==1?attr:0));
109+
if (attr && menuHorizontalPosition == 1) ed->scale = checkIncDec(event, ed->scale, 0, maxTelemValue(abs(ed->srcRaw) - MIXSRC_FIRST_TELEM + 1), EE_MODEL);
110110
}
111111
else if (attr) {
112112
menuHorizontalPosition = 0;
@@ -115,8 +115,8 @@ void menuModelExpoOne(event_t event)
115115

116116
case EXPO_FIELD_SCALE:
117117
lcdDrawTextAlignedLeft(y, STR_SCALE);
118-
drawSensorCustomValue(EXPO_ONE_2ND_COLUMN, y, (ed->srcRaw - MIXSRC_FIRST_TELEM)/3, convertTelemValue(ed->srcRaw - MIXSRC_FIRST_TELEM + 1, ed->scale), LEFT|attr);
119-
if (attr) ed->scale = checkIncDec(event, ed->scale, 0, maxTelemValue(ed->srcRaw - MIXSRC_FIRST_TELEM + 1), EE_MODEL);
118+
drawSensorCustomValue(EXPO_ONE_2ND_COLUMN, y, (abs(ed->srcRaw) - MIXSRC_FIRST_TELEM)/3, convertTelemValue(abs(ed->srcRaw) - MIXSRC_FIRST_TELEM + 1, ed->scale), LEFT|attr);
119+
if (attr) ed->scale = checkIncDec(event, ed->scale, 0, maxTelemValue(abs(ed->srcRaw) - MIXSRC_FIRST_TELEM + 1), EE_MODEL);
120120
break;
121121

122122
case EXPO_FIELD_WEIGHT:
@@ -152,13 +152,13 @@ void menuModelExpoOne(event_t event)
152152
case EXPO_FIELD_TRIM:
153153
lcdDrawTextAlignedLeft(y, STR_TRIM);
154154
{
155-
const char* trim_str = getTrimSourceLabel(ed->srcRaw, ed->trimSource);
155+
const char* trim_str = getTrimSourceLabel(abs(ed->srcRaw), ed->trimSource);
156156
LcdFlags flags = RIGHT | (menuHorizontalPosition==0 ? attr : 0);
157157
lcdDrawText(EXPO_ONE_2ND_COLUMN, y, trim_str, flags);
158158

159159
if (attr) {
160160
int8_t min = TRIM_ON;
161-
if (ed->srcRaw >= MIXSRC_FIRST_STICK && ed->srcRaw <= MIXSRC_LAST_STICK) {
161+
if (abs(ed->srcRaw) >= MIXSRC_FIRST_STICK && abs(ed->srcRaw) <= MIXSRC_LAST_STICK) {
162162
min = -TRIM_OFF;
163163
}
164164
ed->trimSource = -checkIncDecModel(event, -ed->trimSource, min, keysGetMaxTrims());

radio/src/gui/212x64/model_logical_switches.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ void menuModelLogicalSwitches(event_t event)
149149
v1_val = cs->v1;
150150
drawSource(CSW_2ND_COLUMN, y, v1_val, attr1);
151151
drawSource(CSW_3RD_COLUMN, y, cs->v2, attr2);
152-
INCDEC_SET_FLAG(EE_MODEL | INCDEC_SOURCE);
152+
INCDEC_SET_FLAG(EE_MODEL | INCDEC_SOURCE | INCDEC_SOURCE_INVERT);
153153
INCDEC_ENABLE_CHECK(isSourceAvailable);
154154
}
155155
else if (cstate == LS_FAMILY_TIMER) {
@@ -164,7 +164,7 @@ void menuModelLogicalSwitches(event_t event)
164164
v1_val = cs->v1;
165165
drawSource(CSW_2ND_COLUMN, y, v1_val, attr1);
166166
if (horz == 1) {
167-
INCDEC_SET_FLAG(EE_MODEL | INCDEC_SOURCE);
167+
INCDEC_SET_FLAG(EE_MODEL | INCDEC_SOURCE | INCDEC_SOURCE_INVERT);
168168
INCDEC_ENABLE_CHECK(isSourceAvailableInCustomSwitches);
169169
}
170170
else {

0 commit comments

Comments
 (0)