[nv14] Make Ghost menu work with joystick trims (#1416)

* Update radio_ghost_module_config.cpp

* Update board.h

* Update keys_driver.cpp

* Auto-formatting

* Add functions simply so gtests compiles

* Update board.h

define TRIMS_EMULATE_BUTTONS to avoid HW dependent defines in other code

* Update radio_ghost_module_config.cpp

Use TRIMS_EMULATE_BUTTONS rather than PCBNV14

* `simu` code behind build flag also

Co-authored-by: Peter Feerick <peter.feerick@gmail.com>
This commit is contained in:
stefan73
2022-01-21 14:42:13 +10:00
committed by GitHub
co-authored by Peter Feerick
parent 91d3c88421
commit 1d7b04d679
4 changed files with 54 additions and 16 deletions
@@ -34,8 +34,13 @@ class GhostModuleConfigWindow: public Window
void paint(BitmapBuffer * dc) override
{
#if LCD_H > LCD_W
constexpr coord_t xOffset = 20;
constexpr coord_t xOffset2 = 140;
#else
constexpr coord_t xOffset = 140;
constexpr coord_t xOffset2 = 260;
#endif
constexpr coord_t yOffset = 20;
constexpr coord_t lineSpacing = 25;
@@ -84,6 +89,9 @@ RadioGhostModuleConfig::RadioGhostModuleConfig(uint8_t moduleIdx) :
buildHeader(&header);
buildBody(&body);
setFocus(SET_FOCUS_DEFAULT);
#if defined(TRIMS_EMULATE_BUTTONS)
setTrimsAsButtons(true); // Use trim joysticks to operate menu (e.g. on NV14)
#endif
}
void RadioGhostModuleConfig::buildHeader(Window * window)
@@ -102,19 +110,23 @@ void RadioGhostModuleConfig::onEvent(event_t event)
switch (event) {
#if defined(ROTARY_ENCODER_NAVIGATION)
case EVT_ROTARY_LEFT:
#else
case EVT_KEY_BREAK(KEY_UP):
#endif
reusableBuffer.ghostMenu.buttonAction = GHST_BTN_JOYUP;
reusableBuffer.ghostMenu.menuAction = GHST_MENU_CTRL_NONE;
moduleState[EXTERNAL_MODULE].counter = GHST_MENU_CONTROL;
break;
#endif
#if defined(ROTARY_ENCODER_NAVIGATION)
case EVT_ROTARY_RIGHT:
#else
case EVT_KEY_BREAK(KEY_DOWN):
#endif
reusableBuffer.ghostMenu.buttonAction = GHST_BTN_JOYDOWN;
reusableBuffer.ghostMenu.menuAction = GHST_MENU_CTRL_NONE;
moduleState[EXTERNAL_MODULE].counter = GHST_MENU_CONTROL;
break;
#endif
case EVT_KEY_FIRST(KEY_ENTER):
reusableBuffer.ghostMenu.buttonAction = GHST_BTN_JOYPRESS;
@@ -135,6 +147,9 @@ void RadioGhostModuleConfig::onEvent(event_t event)
moduleState[EXTERNAL_MODULE].counter = GHST_MENU_CONTROL;
RTOS_WAIT_MS(10);
Page::onEvent(event);
#if defined(TRIMS_EMULATE_BUTTONS)
setTrimsAsButtons(false); // switch trims back to normal
#endif
break;
}
}
@@ -151,6 +166,9 @@ void RadioGhostModuleConfig::checkEvents()
else if (reusableBuffer.ghostMenu.menuStatus == GHST_MENU_STATUS_CLOSING) {
RTOS_WAIT_MS(10);
deleteLater();
#if defined(TRIMS_EMULATE_BUTTONS)
setTrimsAsButtons(false); // switch trims back to normal
#endif
}
}
#endif
+3
View File
@@ -244,6 +244,9 @@ uint8_t keyState(uint8_t index);
uint32_t switchState(uint8_t index);
uint32_t readKeys();
uint32_t readTrims();
void setTrimsAsButtons(bool);
bool getTrimsAsButtons();
#define TRIMS_EMULATE_BUTTONS
#define NUM_TRIMS NUM_STICKS
#define NUM_TRIMS_KEYS (NUM_TRIMS * 2)
#define TRIMS_PRESSED() (readTrims())
+16 -14
View File
@@ -22,17 +22,24 @@
#include "opentx.h"
#include "hal/adc_driver.h"
bool trimsAsButtons = false;
void setTrimsAsButtons(bool val) { trimsAsButtons = val; }
bool getTrimsAsButtons()
{
bool lua = false;
#if defined(LUA)
lua = isLuaStandaloneRunning();
#endif
return (trimsAsButtons || lua);
}
uint32_t readKeys()
{
uint32_t result = 0;
bool getKeys = true;
#if defined(LUA)
if (!isLuaStandaloneRunning()) {
getKeys = false;
}
#endif
if (getKeys) {
if (getTrimsAsButtons()) {
if (TRIMS_GPIO_REG_LHL & TRIMS_GPIO_PIN_LHL)
result |= 1 << KEY_RADIO;
if (TRIMS_GPIO_REG_LHR & TRIMS_GPIO_PIN_LHR)
@@ -64,13 +71,7 @@ uint32_t readTrims()
{
uint32_t result = 0;
bool getTrim = true;
#if defined(LUA)
if (isLuaStandaloneRunning()) {
getTrim = false;
}
#endif
if(!getTrim) return result;
if(getTrimsAsButtons()) return result;
if (TRIMS_GPIO_REG_LHL & TRIMS_GPIO_PIN_LHL)
result |= 1 << (TRM_LH_DWN - TRM_BASE);
if (TRIMS_GPIO_REG_LHR & TRIMS_GPIO_PIN_LHR)
@@ -178,4 +179,5 @@ void keysInit()
GPIO_InitStructure.GPIO_Pin = KEYS_GPIOJ_PINS;
GPIO_Init(GPIOJ, &GPIO_InitStructure);
setTrimsAsButtons(false);
}
+15
View File
@@ -560,6 +560,21 @@ bool trimDown(uint8_t idx)
return readTrims() & (1 << idx);
}
#if defined(TRIMS_EMULATE_BUTTONS)
bool trimsAsButtons = false;
void setTrimsAsButtons(bool val) { trimsAsButtons = val; }
bool getTrimsAsButtons()
{
bool lua = false;
#if defined(LUA)
lua = isLuaStandaloneRunning();
#endif
return (trimsAsButtons || lua);
}
#endif
uint32_t readKeys()
{
uint32_t result = 0;