summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHugo Chargois <hugo.chargois@free.fr>2023-11-18 02:22:03 +0100
committerHugo Chargois <hugo.chargois@free.fr>2023-11-19 19:50:39 +0100
commitb82d7289371dd0245df2275dd9789b70b6b3d63b (patch)
tree1d3e3894725b60179551df705ee962c5adca8f78
parentbd9d792230094ec447f9948a7a8f164d8f7535cb (diff)
downloadSensor-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.c58
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;