feat: stick inversion (#6394)

Co-authored-by: philmoz <phil.a.mitchell@gmail.com>
This commit is contained in:
3djc
2025-07-25 13:02:16 +10:00
committed by GitHub
co-authored by philmoz
parent d3263df782
commit 6bb65dfa9c
55 changed files with 388 additions and 208 deletions
+31 -1
View File
@@ -21,9 +21,33 @@
#include "edgetx.h"
#include "calibration.h"
#include "analogs.h"
#include "hal/adc_driver.h"
void menuCommonCalibOptions(event_t event)
{
SIMPLE_SUBMENU(STR_AXISDIR, HEADER_LINE+4);
uint8_t sub = menuVerticalPosition;
coord_t y = MENU_HEADER_HEIGHT + 1;
lcdDrawTextAlignedLeft(y, STR_STICKS);
lcdDrawText(LCD_W / 3 * 2, y, STR_MENU_INVERT, CENTERED);
y+=FH;
for(uint8_t i = 0; i < 4; i++) {
uint8_t k = i + menuVerticalOffset;
LcdFlags attr = (sub == k) ? INVERS : 0;
lcdDrawTextIndented(y, STR_CHAR_STICK);
lcdDrawText(lcdNextPos, y, analogGetCanonicalName(ADC_INPUT_MAIN, i), 0);
bool stickInversion = getStickInversion(i);
lcdDrawChar(LCD_W / 3 * 2, y, stickInversion ? 127 : 126, attr);
if (attr) stickInversion = checkIncDec(event, stickInversion, 0, 1, EE_GENERAL);
setStickInversion(i, stickInversion);
y+=FH;
}
}
void menuCommonCalib(event_t event)
{
// make sure we don't scroll while calibrating
@@ -35,6 +59,11 @@ void menuCommonCalib(event_t event)
reusableBuffer.calib.state = CALIB_START;
break;
case EVT_KEY_LONG(KEY_ENTER):
killEvents(event);
pushMenu(menuCommonCalibOptions);
break;
case EVT_KEY_BREAK(KEY_ENTER):
reusableBuffer.calib.state++;
break;
@@ -55,7 +84,8 @@ void menuCommonCalib(event_t event)
case CALIB_MOVE_STICKS:
// MOVE STICKS/POTS
lcdDrawText(LCD_W/2, MENU_HEADER_HEIGHT+FH, STR_MOVESTICKSPOTS, INVERS|CENTERED);
lcdDrawText(LCD_W/2, MENU_HEADER_HEIGHT, STR_MOVESTICKSPOTS, INVERS|CENTERED);
lcdDrawText(LCD_W/2, MENU_HEADER_HEIGHT+FH, STR_MENUAXISDIR, CENTERED);
lcdDrawText(LCD_W/2, MENU_HEADER_HEIGHT+2*FH, STR_MENUWHENDONE, CENTERED);
adcCalibSetMinMax();
break;
+11 -3
View File
@@ -138,7 +138,7 @@ static void _init_menu_tab_array(uint8_t* tab, size_t len)
auto max_sticks = adcGetMaxInputs(ADC_INPUT_MAIN);
for (int i = ITEM_RADIO_HARDWARE_STICK; i <= ITEM_RADIO_HARDWARE_STICK_END; i++) {
uint8_t idx = i - ITEM_RADIO_HARDWARE_STICK;
tab[i] = idx < max_sticks ? 0 : HIDDEN_ROW;
tab[i] = idx < max_sticks ? 1 : HIDDEN_ROW;
}
auto max_pots = adcGetMaxInputs(ADC_INPUT_FLEX);
@@ -480,9 +480,17 @@ void menuRadioHardware(event_t event)
default:
if (k <= ITEM_RADIO_HARDWARE_STICK_END) {
// Sticks
int idx = k - ITEM_RADIO_HARDWARE_STICK;
LcdFlags flags = menuHorizontalPosition == 0 ? attr : 0;
editStickHardwareSettings(HW_SETTINGS_COLUMN1, y,
k - ITEM_RADIO_HARDWARE_STICK, event,
attr, old_editMode);
idx, event, flags, old_editMode);
// ADC inversion
flags = menuHorizontalPosition == 1 ? attr : 0;
bool stickinversion = getStickInversion(idx);
lcdDrawChar(LCD_W - 8, y, stickinversion ? 127 : 126, flags);
if (flags & (~RIGHT)) stickinversion = checkIncDec(event, stickinversion, 0, 1, EE_GENERAL);
setStickInversion(idx, stickinversion);
} else if (k <= ITEM_RADIO_HARDWARE_POT_END) {
// Pots & sliders