diff --git a/radio/src/gui/colorlcd/radio_diagkeys.cpp b/radio/src/gui/colorlcd/radio_diagkeys.cpp index 8d95ce8e6..a6b7971b0 100644 --- a/radio/src/gui/colorlcd/radio_diagkeys.cpp +++ b/radio/src/gui/colorlcd/radio_diagkeys.cpp @@ -55,13 +55,13 @@ class RadioKeyDiagsWindow : public Window void paint(BitmapBuffer * dc) override { -#if !defined(PCBNV14) constexpr coord_t KEY_COLUMN = 6; +#if !defined(PCBNV14) constexpr coord_t SWITCHES_COLUMN = LCD_W / 2 - 20; constexpr coord_t TRIM_COLUMN = LCD_W - 120; #else - constexpr coord_t SWITCHES_COLUMN = LCD_W / 6; - constexpr coord_t TRIM_COLUMN = LCD_W / 2; + constexpr coord_t SWITCHES_COLUMN = LCD_W / 3; + constexpr coord_t TRIM_COLUMN = 2 * LCD_W / 3; #endif constexpr coord_t TRIM_MINUS_COLUMN = TRIM_COLUMN + 60; constexpr coord_t TRIM_PLUS_COLUMN = TRIM_MINUS_COLUMN + 20; @@ -82,6 +82,16 @@ class RadioKeyDiagsWindow : public Window dc->drawText(KEY_COLUMN, y, STR_ROTARY_ENCODER); dc->drawNumber(70, y, rotencValue, 0); #endif +#else // defined(PCBNV14) + // KEYS + { + coord_t y = 1; + dc->drawTextAtIndex(KEY_COLUMN, y, STR_VKEYS, KEY_ENTER, 0); + displayKeyState(dc, 70, y, KEY_ENTER); + y += FH; + dc->drawTextAtIndex(KEY_COLUMN, y, STR_VKEYS, KEY_EXIT, 0); + displayKeyState(dc, 70, y, KEY_EXIT); + } #endif // SWITCHES for (uint8_t i = 0; i < NUM_SWITCHES; i++) { diff --git a/radio/src/gui/colorlcd/timeedit.cpp b/radio/src/gui/colorlcd/timeedit.cpp index 804eb4b9c..8fe23dc6c 100644 --- a/radio/src/gui/colorlcd/timeedit.cpp +++ b/radio/src/gui/colorlcd/timeedit.cpp @@ -54,7 +54,7 @@ void TimeEdit::onEvent(event_t event) if (editMode) { if (event == EVT_ROTARY_RIGHT) { int value = getValue(); - value += rotencSpeed * step; + value += ROTARY_ENCODER_SPEED() * step; if (value <= vmax) setValue(value); else @@ -63,7 +63,7 @@ void TimeEdit::onEvent(event_t event) } else if (event == EVT_ROTARY_LEFT) { int value = getValue(); - value -= rotencSpeed * step; + value -= ROTARY_ENCODER_SPEED() * step; if (value >= vmin) setValue(value); else diff --git a/radio/src/targets/nv14/CMakeLists.txt b/radio/src/targets/nv14/CMakeLists.txt index ad5dda406..242b0bd09 100644 --- a/radio/src/targets/nv14/CMakeLists.txt +++ b/radio/src/targets/nv14/CMakeLists.txt @@ -80,7 +80,8 @@ set(SOFTWARE_KEYBOARD ON) set(FIRMWARE_DEPENDENCIES datacopy) -add_definitions(-DSTM32F429_439xx -DSDRAM -DCOLORLCD -DLIBOPENUI -DHARDWARE_TOUCH -DSOFTWARE_KEYBOARD) +add_definitions(-DSTM32F429_439xx -DSDRAM -DCOLORLCD -DLIBOPENUI + -DHARDWARE_TOUCH -DHARDWARE_KEYS -DSOFTWARE_KEYBOARD) add_definitions(-DEEPROM_VARIANT=0 -DAUDIO -DVOICE -DRTCLOCK) add_definitions(-DGPS_USART_BAUDRATE=${INTERNAL_GPS_BAUDRATE}) add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) diff --git a/radio/src/targets/nv14/board.h b/radio/src/targets/nv14/board.h index d4bc4e37c..d278506e7 100644 --- a/radio/src/targets/nv14/board.h +++ b/radio/src/targets/nv14/board.h @@ -142,18 +142,18 @@ void stop_trainer_capture(); // Keys driver enum EnumKeys { - KEY_ENTER, - KEY_EXIT, KEY_PGUP, KEY_PGDN, - KEY_UP, - KEY_MODEL = KEY_UP, // TODO: just fixed for compile error, seems this is quite different from horus definition. - KEY_DOWN, - KEY_RIGHT, - KEY_LEFT, + KEY_ENTER, + KEY_MODEL, + KEY_UP = KEY_MODEL, + KEY_EXIT, + KEY_DOWN = KEY_EXIT, KEY_TELEM, - KEY_MENU, + KEY_RIGHT = KEY_TELEM, KEY_RADIO, + KEY_LEFT = KEY_RADIO, + TRM_BASE, TRM_LH_DWN = TRM_BASE, TRM_LH_UP, @@ -165,9 +165,8 @@ enum EnumKeys TRM_RH_UP, TRM_LS_DWN, TRM_LS_UP, - TRM_LEFT_CLICK, - TRM_RIGHT_CLICK, - TRM_LAST = TRM_RIGHT_CLICK, + TRM_LAST = TRM_LS_UP, + NUM_KEYS }; diff --git a/radio/src/targets/nv14/keys_driver.cpp b/radio/src/targets/nv14/keys_driver.cpp index 3e4f530b3..293728b03 100644 --- a/radio/src/targets/nv14/keys_driver.cpp +++ b/radio/src/targets/nv14/keys_driver.cpp @@ -23,32 +23,25 @@ uint32_t readKeys() { uint32_t result = 0; - bool getKeys = true; -/*#if defined(LUA) - getKeys = (luaState & INTERPRETER_RUNNING_STANDALONE_SCRIPT); -#endif*/ //TODO: not sure why has LUA condition here, this construct is not in horus target - if (getKeys) { - if (TRIMS_GPIO_REG_LHL & TRIMS_GPIO_PIN_LHL) - result |= 1 << KEY_PGDN; - if (TRIMS_GPIO_REG_LHR & TRIMS_GPIO_PIN_LHR) - result |= 1 << KEY_PGUP; - if (TRIMS_GPIO_REG_LVD & TRIMS_GPIO_PIN_LVD) - result |= 1 << KEY_TELEM; - if (TRIMS_GPIO_REG_LVU & TRIMS_GPIO_PIN_LVU) - result |= 1 << KEY_MENU; - if (TRIMS_GPIO_REG_RVD & TRIMS_GPIO_PIN_RVD) - result |= 1 << KEY_DOWN; - if (TRIMS_GPIO_REG_RVU & TRIMS_GPIO_PIN_RVU) - result |= 1 << KEY_UP; - if (TRIMS_GPIO_REG_RHL & TRIMS_GPIO_PIN_RHL) - result |= 1 << KEY_LEFT; - if (TRIMS_GPIO_REG_RHR & TRIMS_GPIO_PIN_RHR) - result |= 1 << KEY_RIGHT; - if (TRIMS_GPIO_REG_RPRESS & TRIMS_GPIO_PIN_RPRESS) - result |= 1 << KEY_ENTER; - if (TRIMS_GPIO_REG_LPRESS & TRIMS_GPIO_PIN_LPRESS) - result |= 1 << KEY_EXIT; - } + + // Arrow keys on right trim joystick + // is only supported within bootloader +#if defined(BOOT) + if (TRIMS_GPIO_REG_RVD & TRIMS_GPIO_PIN_RVD) + result |= 1 << KEY_DOWN; + if (TRIMS_GPIO_REG_RVU & TRIMS_GPIO_PIN_RVU) + result |= 1 << KEY_UP; + if (TRIMS_GPIO_REG_RHL & TRIMS_GPIO_PIN_RHL) + result |= 1 << KEY_LEFT; + if (TRIMS_GPIO_REG_RHR & TRIMS_GPIO_PIN_RHR) + result |= 1 << KEY_RIGHT; +#endif + + // Enter and Exit are always supported + if (TRIMS_GPIO_REG_RPRESS & TRIMS_GPIO_PIN_RPRESS) + result |= 1 << KEY_ENTER; + if (TRIMS_GPIO_REG_LPRESS & TRIMS_GPIO_PIN_LPRESS) + result |= 1 << KEY_EXIT; return result; } @@ -56,13 +49,7 @@ uint32_t readKeys() uint32_t readTrims() { uint32_t result = 0; - bool getTrim = true; -/*#if defined(LUA) - if(luaState & INTERPRETER_RUNNING_STANDALONE_SCRIPT) { - getTrim = false; - } -#endif*/ //TODO: not sure why has LUA condition here, this construct is not in horus target - if(!getTrim) 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) @@ -79,10 +66,6 @@ uint32_t readTrims() result |= 1 << (TRM_RH_DWN - TRM_BASE); if (TRIMS_GPIO_REG_RHR & TRIMS_GPIO_PIN_RHR) result |= 1 << (TRM_RH_UP - TRM_BASE); - if (TRIMS_GPIO_REG_RPRESS & TRIMS_GPIO_PIN_RPRESS) - result |= 1 << (TRM_RIGHT_CLICK - TRM_BASE); - if (TRIMS_GPIO_REG_LPRESS & TRIMS_GPIO_PIN_LPRESS) - result |= 1 << (TRM_LEFT_CLICK - TRM_BASE); return result; } @@ -94,7 +77,7 @@ bool trimDown(uint8_t idx) bool keyDown() { - return 0; + return readKeys() || readTrims(); } /* TODO common to ARM */ @@ -105,6 +88,7 @@ void readKeysAndTrims() uint8_t index = 0; uint32_t in = readKeys(); uint32_t trims = readTrims(); + for (i = 0; i < TRM_BASE; i++) { keys[index++].input(in & (1 << i)); } diff --git a/radio/src/targets/nv14/libopenui_config.h b/radio/src/targets/nv14/libopenui_config.h index f23ad216b..72773a4e4 100644 --- a/radio/src/targets/nv14/libopenui_config.h +++ b/radio/src/targets/nv14/libopenui_config.h @@ -177,3 +177,5 @@ constexpr LcdFlags TABLE_BODY_FONT = FONT(STD); constexpr int CJK_FIRST_LETTER_INDEX = 128 - 32 + 21; constexpr coord_t CHAR_SPACING = 0; +// Disable rotary encoder, as the NV14 does not have one +#define ROTARY_ENCODER_SPEED() 0 diff --git a/radio/src/targets/simu/opentxsimulator.cpp b/radio/src/targets/simu/opentxsimulator.cpp index 001962264..8a1ec7e6e 100644 --- a/radio/src/targets/simu/opentxsimulator.cpp +++ b/radio/src/targets/simu/opentxsimulator.cpp @@ -274,7 +274,7 @@ void OpenTxSimulator::rotaryEncoderEvent(int steps) key = KEY_DOWN; else if (steps < 0) key = KEY_UP; -#elif defined(HARDWARE_KEYS) +#elif defined(KEYS_GPIO_REG_PLUS) && defined(KEYS_GPIO_REG_MINUS) if (steps > 0) key = KEY_MINUS; else if (steps < 0) diff --git a/radio/src/translations/cn.h.txt b/radio/src/translations/cn.h.txt index 9ae808ca3..1e0b03293 100644 --- a/radio/src/translations/cn.h.txt +++ b/radio/src/translations/cn.h.txt @@ -337,7 +337,7 @@ #if defined(PCBFRSKY) #define TR_ENTER "[ENTER]" -#elif !defined(HARDWARE_KEYS) +#elif defined(PCBNV14) #define TR_ENTER "[NEXT]" #else #define TR_ENTER "[MENU]" diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index aad86571b..58248fecb 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -289,7 +289,7 @@ #define LEN_VSWASHTYPE "\004" #define TR_VSWASHTYPE "---\0""120\0""120X""140\0""90\0" -#if defined(PCBHORUS) +#if defined(PCBHORUS) || defined(PCBNV14) #define LEN_VKEYS "\005" #define TR_VKEYS "PGUP\0""PGDN\0""ENTER""MDL\0 ""RTN\0 ""TELE\0""SYS\0 " #elif defined(RADIO_FAMILY_JUMPER_T12) @@ -404,7 +404,7 @@ #if defined(PCBTARANIS) || defined(PCBHORUS) #define TR_ENTER "[ENTER]" -#elif !defined(HARDWARE_KEYS) +#elif defined(PCBNV14) #define TR_ENTER "[NEXT]" #else #define TR_ENTER "[MENU]" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index 7b99fb514..e2db8c03c 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -292,7 +292,7 @@ #define LEN_VSWASHTYPE "\004" #define TR_VSWASHTYPE "--- ""120 ""120X""140 ""90\0" -#if defined(PCBHORUS) +#if defined(PCBHORUS) || defined(PCBNV14) #define LEN_VKEYS "\005" #define TR_VKEYS "PGUP\0""PGDN\0""ENTER""MDL\0 ""RTN\0 ""TELE\0""SYS\0 " #elif defined(PCBXLITE) @@ -410,7 +410,7 @@ #if defined(PCBFRSKY) #define TR_ENTER "[ENTER]" -#elif !defined(HARDWARE_KEYS) +#elif defined(PCBNV14) #define TR_ENTER "[NEXT]" #else #define TR_ENTER "[MENU]" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index c37f99bf4..b30e08652 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -292,7 +292,7 @@ #define LEN_VSWASHTYPE "\004" #define TR_VSWASHTYPE "---\0""120\0""120X""140\0""90\0" -#if defined(PCBHORUS) +#if defined(PCBHORUS) || defined(PCBNV14) #define LEN_VKEYS "\005" #define TR_VKEYS "PGUP\0""PGDN\0""ENTER""MDL\0 ""RTN\0 ""TELE\0""SYS\0 " #elif defined(PCBXLITE) @@ -410,7 +410,7 @@ #if defined(PCBFRSKY) #define TR_ENTER "[ENTER]" -#elif !defined(HARDWARE_KEYS) +#elif defined(PCBNV14) #define TR_ENTER "[NEXT]" #else #define TR_ENTER "[MENU]" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index de969b1a6..666e960a6 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -289,7 +289,7 @@ #define LEN_VSWASHTYPE "\004" #define TR_VSWASHTYPE "---\0""120\0""120X""140\0""90\0" -#if defined(PCBHORUS) +#if defined(PCBHORUS) || defined(PCBNV14) #define LEN_VKEYS "\005" #define TR_VKEYS "PGUP\0""PGDN\0""ENTER""MDL\0 ""RTN\0 ""TELE\0""SYS\0 " #elif defined(PCBXLITE) @@ -407,7 +407,7 @@ #if defined(PCBTARANIS) || defined(PCBHORUS) #define TR_ENTER "[ENTER]" -#elif !defined(HARDWARE_KEYS) +#elif defined(PCBNV14) #define TR_ENTER "[NEXT]" #else #define TR_ENTER "[MENU]" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index 06c3476bc..ce657eeab 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -310,7 +310,7 @@ #define LEN_VSWASHTYPE "\004" #define TR_VSWASHTYPE "---\0""120\0""120X""140\0""90\0" -#if defined(PCBHORUS) +#if defined(PCBHORUS) || defined(PCBNV14) #define LEN_VKEYS "\005" #define TR_VKEYS "PGUP\0""PGDN\0""ENTER""MDL\0 ""RTN\0 ""TELE\0""SYS\0 " #elif defined(PCBXLITE) @@ -417,7 +417,7 @@ #if defined(PCBTARANIS) || defined(PCBHORUS) #define TR_ENTER "[ENTER]" -#elif !defined(HARDWARE_KEYS) +#elif defined(PCBNV14) #define TR_ENTER "[NEXT]" #else #define TR_ENTER "[MENU]" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 546ebaf41..d1005b541 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -312,7 +312,7 @@ #define LEN_VSWASHTYPE "\004" #define TR_VSWASHTYPE "--- ""120 ""120X""140 ""90\0" -#if defined(PCBHORUS) +#if defined(PCBHORUS) || defined(PCBNV14) #define LEN_VKEYS "\005" #define TR_VKEYS "PGUP\0""PGDN\0""ENTER""MDL\0 ""RTN\0 ""TELE\0""SYS\0 " #elif defined(PCBXLITE) @@ -427,7 +427,7 @@ #if defined(PCBFRSKY) #define TR_ENTER "[ENTER]" -#elif !defined(HARDWARE_KEYS) +#elif defined(PCBNV14) #define TR_ENTER "[NEXT]" #else #define TR_ENTER "[MENU]" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index e1b095635..efaa97448 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -316,7 +316,7 @@ #define LEN_VSWASHTYPE "\004" #define TR_VSWASHTYPE "---\0""120\0""120X""140\0""90\0" -#if defined(PCBHORUS) +#if defined(PCBHORUS) || defined(PCBNV14) #define LEN_VKEYS "\005" #define TR_VKEYS "PGUP\0""PGDN\0""ENTER""MDL\0 ""RTN\0 ""TELE\0""SYS\0 " #elif defined(PCBXLITE) @@ -432,7 +432,7 @@ #if defined(PCBTARANIS) || defined(PCBHORUS) #define TR_ENTER "[ENTER]" -#elif !defined(HARDWARE_KEYS) +#elif defined(PCBNV14) #define TR_ENTER "[NEXT]" #else #define TR_ENTER "[MENU]" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index f40c93a1a..93b210d68 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -293,7 +293,7 @@ #define LEN_VSWASHTYPE "\004" #define TR_VSWASHTYPE "---\0""120\0""120X""140\0""90\0" -#if defined(PCBHORUS) +#if defined(PCBHORUS) || defined(PCBNV14) #define LEN_VKEYS "\005" #define TR_VKEYS "PGUP\0""PGDN\0""ENTER""MDL\0 ""RTN\0 ""TELE\0""SYS\0 " #elif defined(RADIO_FAMILY_JUMPER_T12) @@ -409,7 +409,7 @@ #if defined(PCBFRSKY) #define TR_ENTER "[ENTER]" -#elif !defined(HARDWARE_KEYS) +#elif defined(PCBNV14) #define TR_ENTER "[NEXT]" #else #define TR_ENTER "[MENU]" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 7e74be8e5..0e8c9cb18 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -310,7 +310,7 @@ #define LEN_VSWASHTYPE "\004" #define TR_VSWASHTYPE "---\0""120\0""120X""140\0""90\0" -#if defined(PCBHORUS) +#if defined(PCBHORUS) || defined(PCBNV14) #define LEN_VKEYS "\005" #define TR_VKEYS "PGUP\0""PGDN\0""ENTER""MDL\0 ""RTN\0 ""TELE\0""SYS\0 " #elif defined(PCBXLITE) @@ -428,7 +428,7 @@ #if defined(PCBTARANIS) || defined(PCBHORUS) #define TR_ENTER "[ENTER]" -#elif !defined(HARDWARE_KEYS) +#elif defined(PCBNV14) #define TR_ENTER "[NEXT]" #else #define TR_ENTER "[MENU]" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index b301eb6ab..672bfb9e3 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -306,7 +306,7 @@ #define LEN_VSWASHTYPE "\004" #define TR_VSWASHTYPE "--- ""120 ""120X""140 ""90\0" -#if defined(PCBHORUS) +#if defined(PCBHORUS) || defined(PCBNV14) #define LEN_VKEYS "\005" #define TR_VKEYS "PGUP\0""PGDN\0""ENTER""MDL\0 ""RTN\0 ""TELE\0""SYS\0 " #elif defined(RADIO_FAMILY_JUMPER_T12) @@ -421,7 +421,7 @@ #if defined(PCBTARANIS) || defined(PCBHORUS) #define TR_ENTER "[ENTER]" -#elif !defined(HARDWARE_KEYS) +#elif defined(PCBNV14) #define TR_ENTER "[NEXT]" #else #define TR_ENTER "[MENU]" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index bf6604dec..585b82000 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -310,7 +310,7 @@ #define LEN_VSWASHTYPE "\004" #define TR_VSWASHTYPE "--- ""120 ""120X""140 ""90\0 " -#if defined(PCBHORUS) +#if defined(PCBHORUS) || defined(PCBNV14) #define LEN_VKEYS "\005" #define TR_VKEYS "PGUP\0""PGDN\0""ENTER""MDL\0 ""RTN\0 ""TELE\0""SYS\0 " #elif defined(RADIO_FAMILY_JUMPER_T12) @@ -426,7 +426,7 @@ #if defined(PCBFRSKY) #define TR_ENTER "[ENTER]" -#elif !defined(HARDWARE_KEYS) +#elif defined(PCBNV14) #define TR_ENTER "[NEXT]" #else #define TR_ENTER "[MENU]" diff --git a/radio/src/translations/tw.h.txt b/radio/src/translations/tw.h.txt index 32d4c3a97..86fdd0bfa 100644 --- a/radio/src/translations/tw.h.txt +++ b/radio/src/translations/tw.h.txt @@ -337,7 +337,7 @@ #if defined(PCBFRSKY) #define TR_ENTER "[ENTER]" -#elif !defined(HARDWARE_KEYS) +#elif defined(PCBNV14) #define TR_ENTER "[NEXT]" #else #define TR_ENTER "[MENU]"