feat: stick inversion (#6394)
Co-authored-by: philmoz <phil.a.mitchell@gmail.com>
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user