diff --git a/src/board_ersky9x.h b/src/board_ersky9x.h index 1ed6f00a7..7b3f9390c 100644 --- a/src/board_ersky9x.h +++ b/src/board_ersky9x.h @@ -78,4 +78,11 @@ extern uint8_t maxTemperature ; // Raw temp reading #define strcpy_P strcpy #define strcat_P strcat +extern uint32_t read_keys(); +#define KEYS_PRESSED() (~read_keys()) +#define DBLKEYS_PRESSED_RGT_LFT(i) (in & (0x20 + 0x40)) +#define DBLKEYS_PRESSED_UP_DWN(i) (in & (0x10 + 0x08)) +#define DBLKEYS_PRESSED_RGT_UP(i) (in & (0x20 + 0x10)) +#define DBLKEYS_PRESSED_LFT_DWN(i) (in & (0x40 + 0x08)) + #endif diff --git a/src/drivers.cpp b/src/drivers.cpp index 2d592e20d..471cb9e86 100644 --- a/src/drivers.cpp +++ b/src/drivers.cpp @@ -74,13 +74,13 @@ void Key::input(bool val, EnumKeys enuk) { uint8_t t_vals = m_vals ; t_vals <<= 1 ; - if(val) t_vals |= 1; //portbit einschieben + if (val) t_vals |= 1; //portbit einschieben m_vals = t_vals ; m_cnt++; - if(m_state && m_vals==0){ //gerade eben sprung auf 0 - if(m_state!=KSTATE_KILLED) { + if (m_state && m_vals==0) { //gerade eben sprung auf 0 + if (m_state != KSTATE_KILLED) { putEvent(EVT_KEY_BREAK(enuk)); } m_cnt = 0; @@ -88,7 +88,7 @@ void Key::input(bool val, EnumKeys enuk) } switch(m_state){ case KSTATE_OFF: - if(m_vals==FFVAL){ //gerade eben sprung auf ff + if (m_vals == FFVAL) { //gerade eben sprung auf ff m_state = KSTATE_START; m_cnt = 0; } diff --git a/src/menus.cpp b/src/menus.cpp index c93b2b6f8..227a7de0d 100644 --- a/src/menus.cpp +++ b/src/menus.cpp @@ -74,22 +74,23 @@ int16_t checkIncDec(uint8_t event, int16_t val, int16_t i_min, int16_t i_max, ui int16_t newval = val; #if defined(DBLKEYS) - if (keyState(KEY_RIGHT) && keyState(KEY_LEFT)) { + uint8_t in = KEYS_PRESSED(); + if (DBLKEYS_PRESSED_RGT_LFT(in)) { newval = -val; killEvents(KEY_LEFT); killEvents(KEY_RIGHT); } - else if (s_editMode && keyState(KEY_RIGHT) && keyState(KEY_UP)) { + else if (s_editMode && DBLKEYS_PRESSED_RGT_UP(in)) { newval = (i_max > 100 ? 100 : i_max); killEvents(KEY_RIGHT); killEvents(KEY_UP); } - else if (s_editMode && keyState(KEY_LEFT) && keyState(KEY_DOWN)) { + else if (s_editMode && DBLKEYS_PRESSED_LFT_DWN(in)) { newval = (i_min < -100 ? -100 : i_min); killEvents(KEY_LEFT); killEvents(KEY_DOWN); } - else if (s_editMode && keyState(KEY_UP) && keyState(KEY_DOWN)) { + else if (s_editMode && DBLKEYS_PRESSED_UP_DWN(in)) { newval = 0; killEvents(KEY_UP); killEvents(KEY_DOWN); diff --git a/src/open9x.h b/src/open9x.h index 0547d13e6..6efa803d6 100644 --- a/src/open9x.h +++ b/src/open9x.h @@ -244,7 +244,22 @@ extern uint8_t s_bind_allowed; # define OUT_H_14DBUSY 6 #endif -#else // boards prior to v4 ... +inline uint8_t KEYS_PRESSED() +{ + uint8_t tin = ~PINL; + uint8_t in; + in = (tin & 0x0f) << 3; + in |= (tin & 0x30) >> 3; + return in; +} + +#define DBLKEYS_PRESSED_RGT_LFT(i) (in & ((1<