diff --git a/radio/src/Makefile b/radio/src/Makefile index 9910f805b..9ee52c37b 100644 --- a/radio/src/Makefile +++ b/radio/src/Makefile @@ -823,6 +823,9 @@ ifeq ($(PCB), TARANIS) ifeq ($(SWR), YES) CPPDEFS += -DSWR endif + ifeq ($(PCBREV), REV9E) + CPPSRC += targets/taranis/rotenc_driver.cpp + endif endif CC = $(TRGT)gcc diff --git a/radio/src/gui/menus.h b/radio/src/gui/menus.h index 49fe6189a..1e4e5c6f0 100644 --- a/radio/src/gui/menus.h +++ b/radio/src/gui/menus.h @@ -462,8 +462,13 @@ void displayWarning(uint8_t event); #if defined(PCBTARANIS) #define KEY_MOVE_UP KEY_PLUS #define KEY_MOVE_DOWN KEY_MINUS +#if defined(REV9E) + #define CURSOR_MOVED_LEFT(event) (EVT_KEY_MASK(event) == KEY_MINUS) + #define CURSOR_MOVED_RIGHT(event) (EVT_KEY_MASK(event) == KEY_PLUS) +#else #define CURSOR_MOVED_LEFT(event) (EVT_KEY_MASK(event) == KEY_PLUS) #define CURSOR_MOVED_RIGHT(event) (EVT_KEY_MASK(event) == KEY_MINUS) +#endif #define CASE_EVT_ROTARY_MOVE_RIGHT CASE_EVT_ROTARY_LEFT #define CASE_EVT_ROTARY_MOVE_LEFT CASE_EVT_ROTARY_RIGHT #define IS_ROTARY_MOVE_RIGHT IS_ROTARY_LEFT diff --git a/radio/src/gui/view_telemetry.cpp b/radio/src/gui/view_telemetry.cpp index 4009a7d01..184d8b34b 100644 --- a/radio/src/gui/view_telemetry.cpp +++ b/radio/src/gui/view_telemetry.cpp @@ -579,14 +579,14 @@ void menuTelemetryFrsky(uint8_t event) killEvents(event); // no break; #endif - case EVT_KEY_BREAK(KEY_UP): + case EVT_KEY_FIRST(KEY_UP): decrTelemetryScreen(); break; #if defined(PCBTARANIS) case EVT_KEY_BREAK(KEY_PAGE): #endif - case EVT_KEY_BREAK(KEY_DOWN): + case EVT_KEY_FIRST(KEY_DOWN): incrTelemetryScreen(); break; @@ -627,7 +627,7 @@ void menuTelemetryFrsky(uint8_t event) displayRssiLine(); #else if (!displayTelemetryScreen()) { - putEvent(event == EVT_KEY_BREAK(KEY_UP) ? event : EVT_KEY_BREAK(KEY_DOWN)); + putEvent(event == EVT_KEY_FIRST(KEY_UP) ? event : EVT_KEY_FIRST(KEY_DOWN)); } #endif } diff --git a/radio/src/gui/view_text.cpp b/radio/src/gui/view_text.cpp index 47854bdbd..390754fb5 100644 --- a/radio/src/gui/view_text.cpp +++ b/radio/src/gui/view_text.cpp @@ -115,20 +115,20 @@ void menuTextView(uint8_t event) readTextFile(lines_count); break; - case EVT_KEY_BREAK(KEY_UP): + case EVT_KEY_FIRST(KEY_UP): if (s_pgOfs == 0) break; else s_pgOfs--; // no break; - case EVT_KEY_BREAK(KEY_DOWN): - if (event == EVT_KEY_BREAK(KEY_DOWN)) { + case EVT_KEY_FIRST(KEY_DOWN): + // if (event == EVT_KEY_BREAK(KEY_DOWN)) { if (s_pgOfs+LCD_LINES-1 >= lines_count) break; else ++s_pgOfs; - } + // } readTextFile(lines_count); break; diff --git a/radio/src/keys.cpp b/radio/src/keys.cpp index 532f47130..4d9fa3cc3 100644 --- a/radio/src/keys.cpp +++ b/radio/src/keys.cpp @@ -66,7 +66,7 @@ uint8_t getEvent() #define KEY_LONG_DELAY 32 Key keys[NUM_KEYS]; -void Key::input(bool val, EnumKeys enuk) +void Key::input(bool val) { uint8_t t_vals = m_vals ; t_vals <<= 1 ; @@ -77,7 +77,7 @@ void Key::input(bool val, EnumKeys enuk) if (m_state && m_vals==0) { //gerade eben sprung auf 0 if (m_state != KSTATE_KILLED) { - putEvent(EVT_KEY_BREAK(enuk)); + putEvent(EVT_KEY_BREAK(key())); } m_cnt = 0; m_state = KSTATE_OFF; @@ -91,7 +91,7 @@ void Key::input(bool val, EnumKeys enuk) break; //fallthrough case KSTATE_START: - putEvent(EVT_KEY_FIRST(enuk)); + putEvent(EVT_KEY_FIRST(key())); inactivity.counter = 0; m_state = KSTATE_RPTDELAY; m_cnt = 0; @@ -99,7 +99,7 @@ void Key::input(bool val, EnumKeys enuk) case KSTATE_RPTDELAY: // gruvin: delay state before first key repeat if (m_cnt == KEY_LONG_DELAY) { - putEvent(EVT_KEY_LONG(enuk)); + putEvent(EVT_KEY_LONG(key())); } if (m_cnt == 40) { m_state = 16; @@ -118,7 +118,7 @@ void Key::input(bool val, EnumKeys enuk) // no break case 1: if ((m_cnt & (m_state-1)) == 0) { - putEvent(EVT_KEY_REPT(enuk)); + putEvent(EVT_KEY_REPT(key())); } break; @@ -134,6 +134,11 @@ void Key::input(bool val, EnumKeys enuk) } } +EnumKeys Key::key() const +{ + return static_cast(this - keys); +} + void pauseEvents(uint8_t event) { event = EVT_KEY_MASK(event); diff --git a/radio/src/keys.h b/radio/src/keys.h index 30318b9ba..16bac5b55 100644 --- a/radio/src/keys.h +++ b/radio/src/keys.h @@ -256,10 +256,11 @@ class Key uint8_t m_cnt; uint8_t m_state; public: - void input(bool val, EnumKeys enuk); + void input(bool val); bool state() { return m_vals > 0; } void pauseEvents() { m_state = KSTATE_PAUSE; m_cnt = 0; } void killEvents() { m_state = KSTATE_KILLED; } + EnumKeys key() const; }; extern Key keys[NUM_KEYS]; diff --git a/radio/src/targets/taranis/board_taranis.cpp b/radio/src/targets/taranis/board_taranis.cpp index 57fc2dc25..e18950da9 100644 --- a/radio/src/targets/taranis/board_taranis.cpp +++ b/radio/src/targets/taranis/board_taranis.cpp @@ -105,6 +105,10 @@ void interrupt5ms() pre_scale = 0 ; per10ms(); } + +#if defined(REV9E) + checkRotaryEncoder(); +#endif } extern "C" void TIM8_TRG_COM_TIM14_IRQHandler() @@ -131,6 +135,10 @@ void boardInit() hapticInit(); #endif +#if defined(REV9E) + rotencInit(); +#endif + #if defined(DEBUG) DBGMCU_APB1PeriphConfig(DBGMCU_IWDG_STOP|DBGMCU_TIM1_STOP|DBGMCU_TIM2_STOP|DBGMCU_TIM3_STOP|DBGMCU_TIM6_STOP|DBGMCU_TIM8_STOP|DBGMCU_TIM10_STOP|DBGMCU_TIM13_STOP|DBGMCU_TIM14_STOP, ENABLE); #endif diff --git a/radio/src/targets/taranis/board_taranis.h b/radio/src/targets/taranis/board_taranis.h index 5d6f2d0bd..b1eaafedb 100644 --- a/radio/src/targets/taranis/board_taranis.h +++ b/radio/src/targets/taranis/board_taranis.h @@ -172,6 +172,13 @@ uint32_t readTrims(void); #define DBLKEYS_PRESSED_RGT_UP(i) ((in & ((2<IDR; +#if !defined(REV9E) register uint32_t e = GPIOE->IDR; -#if defined(REV9E) +#else register uint32_t f = GPIOF->IDR; #endif register uint32_t result = 0; #if defined(REV9E) if (f & PIN_BUTTON_ENTER) - result |= 0x02 << KEY_ENTER; #else if (e & PIN_BUTTON_ENTER) - result |= 0x02 << KEY_ENTER; #endif + result |= 0x02 << KEY_ENTER; + +#if !defined(REV9E) if (e & PIN_BUTTON_PLUS) result |= 0x02 << KEY_PLUS; if (e & PIN_BUTTON_MINUS) result |= 0x02 << KEY_MINUS; +#else + result |= 0x02 << KEY_PLUS; + result |= 0x02 << KEY_MINUS; +#endif if (d & PIN_BUTTON_MENU) result |= 0x02 << KEY_MENU; @@ -121,6 +127,10 @@ uint8_t keyDown() return ~readKeys() & 0x7E ; } +#if defined(REV9E) +extern rotenc_t x9de_rotenc; +#endif + /* TODO common to ARM */ void readKeysAndTrims() { @@ -128,15 +138,30 @@ void readKeysAndTrims() uint8_t enuk = KEY_MENU; uint32_t in = ~readKeys(); - for (i = 1; i < 7; i++) { - keys[enuk].input(in & (1 << i), (EnumKeys) enuk); + for (i = 1; i <= TRM_BASE; i++) { + keys[enuk].input(in & (1 << i)); ++enuk; } +#if defined(REV9E) + static rotenc_t rePreviousValue; + rotenc_t reNewValue = (x9de_rotenc / ROTARY_ENCODER_GRANULARITY); + int8_t scrollRE = reNewValue - rePreviousValue; + if (scrollRE) { + rePreviousValue = reNewValue; + if (scrollRE < 0) { + putEvent(EVT_KEY_FIRST(KEY_MINUS)); + } + else { + putEvent(EVT_KEY_FIRST(KEY_PLUS)); + } + } +#endif + in = readTrims(); for (i = 1; i < 256; i <<= 1) { - keys[enuk].input(in & i, (EnumKeys)enuk); + keys[enuk].input(in & i); ++enuk; } }