diff options
author | Hugo Chargois <hugo.chargois@free.fr> | 2023-11-18 02:22:03 +0100 |
---|---|---|
committer | Hugo Chargois <hugo.chargois@free.fr> | 2023-11-19 19:50:39 +0100 |
commit | b82d7289371dd0245df2275dd9789b70b6b3d63b (patch) | |
tree | 1d3e3894725b60179551df705ee962c5adca8f78 | |
parent | bd9d792230094ec447f9948a7a8f164d8f7535cb (diff) | |
download | Sensor-Watch-b82d7289371dd0245df2275dd9789b70b6b3d63b.tar.gz Sensor-Watch-b82d7289371dd0245df2275dd9789b70b6b3d63b.tar.bz2 Sensor-Watch-b82d7289371dd0245df2275dd9789b70b6b3d63b.zip |
Simulator: Add keyboard arrows as buttons shortcuts
-rw-r--r-- | watch-library/simulator/watch/watch_extint.c | 58 |
1 files changed, 40 insertions, 18 deletions
diff --git a/watch-library/simulator/watch/watch_extint.c b/watch-library/simulator/watch/watch_extint.c index 88e4f30a..b5894b95 100644 --- a/watch-library/simulator/watch/watch_extint.c +++ b/watch-library/simulator/watch/watch_extint.c @@ -22,6 +22,8 @@ * SOFTWARE. */ +#include <string.h> + #include "watch_extint.h" #include "watch_main_loop.h" @@ -47,25 +49,45 @@ static EM_BOOL watch_invoke_interrupt_callback(const uint8_t button_id, watch_in static EM_BOOL watch_invoke_key_callback(int eventType, const EmscriptenKeyboardEvent *keyEvent, void *userData) { if (debug_console_focused || keyEvent->repeat) return EM_FALSE; - const char *key = keyEvent->key; - if (key[1] != 0) return EM_FALSE; - uint8_t button_id; - switch (key[0]) { - case 'A': - case 'a': - button_id = BTN_ID_ALARM; - break; - case 'L': - case 'l': - button_id = BTN_ID_LIGHT; - break; - case 'M': - case 'm': - button_id = BTN_ID_MODE; - break; - default: - return EM_FALSE; + const char *key = keyEvent->key; + if (key[1] == 0) { + // event is from a plain letter key + switch (key[0]) { + case 'A': + case 'a': + button_id = BTN_ID_ALARM; + break; + case 'L': + case 'l': + button_id = BTN_ID_LIGHT; + break; + case 'M': + case 'm': + button_id = BTN_ID_MODE; + break; + default: + return EM_FALSE; + } + } else if (strncmp(key, "Arrow", 5) == 0) { + // event is from one of the arrow keys + switch(key[5]) { + case 'U': // ArrowUp + button_id = BTN_ID_LIGHT; + break; + case 'D': // ArrowDown + case 'L': // ArrowLeft + button_id = BTN_ID_MODE; + break; + case 'R': // ArrowRight + button_id = BTN_ID_ALARM; + break; + default: + return EM_FALSE; + } + } else { + // another kind of key + return EM_FALSE; } watch_interrupt_trigger trigger = eventType == EMSCRIPTEN_EVENT_KEYDOWN ? INTERRUPT_TRIGGER_RISING : INTERRUPT_TRIGGER_FALLING; |