From 3f2e8aa249dec754d65e52ce54be84f0a4b77ba4 Mon Sep 17 00:00:00 2001 From: Dave Date: Mon, 17 Apr 2023 11:51:08 -0500 Subject: [PATCH] Add hook for keyscan routine A new hook was added, ASDF_HOOK_KEY_SCANNER. This allows the entire keyscan routine to be specified for each keymap. --- firmware/asdf/src/asdf.c | 4 ++-- firmware/asdf/src/asdf_config.h | 3 +++ firmware/asdf/src/asdf_hook.c | 4 +++- firmware/asdf/src/asdf_hook.h | 3 ++- firmware/asdf/test/test_asdf_hook.c | 4 ++-- firmware/asdf/test/test_asdf_keymap_defs.c | 2 +- 6 files changed, 13 insertions(+), 7 deletions(-) diff --git a/firmware/asdf/src/asdf.c b/firmware/asdf/src/asdf.c index a935eee..3614196 100644 --- a/firmware/asdf/src/asdf.c +++ b/firmware/asdf/src/asdf.c @@ -563,7 +563,7 @@ static void asdf_handle_key_held_pressed(uint8_t row, uint8_t col) // void asdf_keyscan(void) { - asdf_cols_t (*row_reader)(uint8_t) = (asdf_cols_t(*)(uint8_t)) asdf_hook_get(ASDF_HOOK_SCANNER); + asdf_cols_t (*row_reader)(uint8_t) = (asdf_cols_t(*)(uint8_t)) asdf_hook_get(ASDF_HOOK_ROW_SCANNER); asdf_hook_execute(ASDF_HOOK_EACH_SCAN); for (uint8_t row = 0; row < asdf_keymaps_num_rows(); row++) { @@ -604,7 +604,7 @@ void asdf_keyscan(void) // void asdf_apply_all_actions(void) { - asdf_cols_t (*row_reader)(uint8_t) = (asdf_cols_t(*)(uint8_t)) asdf_hook_get(ASDF_HOOK_SCANNER); + asdf_cols_t (*row_reader)(uint8_t) = (asdf_cols_t(*)(uint8_t)) asdf_hook_get(ASDF_HOOK_ROW_SCANNER); for (uint8_t row = 0; row < asdf_keymaps_num_rows(); row++) { asdf_cols_t row_key_state = (*row_reader)(row); diff --git a/firmware/asdf/src/asdf_config.h b/firmware/asdf/src/asdf_config.h index dc16b6a..dd0ebcf 100644 --- a/firmware/asdf/src/asdf_config.h +++ b/firmware/asdf/src/asdf_config.h @@ -83,6 +83,9 @@ // DEFAULT value of keyboard outputs #define ASDF_VIRTUAL_OUT_DEFAULT_VALUE 1 // High if not used. +// DEFAULT key scan routine +#define ASDF_DEFAULT_KEY_SCANNER asdf_keyscan + #endif /* !defined (CONFIG_H) */ //-------|---------|---------+---------+---------+---------+---------+---------+ diff --git a/firmware/asdf/src/asdf_hook.c b/firmware/asdf/src/asdf_hook.c index 4988248..5bb4685 100644 --- a/firmware/asdf/src/asdf_hook.c +++ b/firmware/asdf/src/asdf_hook.c @@ -31,6 +31,7 @@ #include #include +#include "asdf_config.h" #include "asdf_arch.h" #include "asdf_hook.h" @@ -166,8 +167,9 @@ void asdf_hook_init(void) hook_map[i] = &asdf_hook_null_func; } - hook_map[ASDF_HOOK_SCANNER] = (asdf_hook_function_t) ASDF_ARCH_DEFAULT_SCANNER; + hook_map[ASDF_HOOK_ROW_SCANNER] = (asdf_hook_function_t) ASDF_ARCH_DEFAULT_ROW_SCANNER; hook_map[ASDF_HOOK_OUTPUT] = (asdf_hook_function_t) ASDF_ARCH_DEFAULT_OUTPUT; + hook_map[ASDF_HOOK_KEY_SCANNER] = (asdf_hook_function_t) ASDF_DEFAULT_KEY_SCANNER; } //-------|---------|---------+---------+---------+---------+---------+---------+ diff --git a/firmware/asdf/src/asdf_hook.h b/firmware/asdf/src/asdf_hook.h index 3164df0..2b3f3d5 100644 --- a/firmware/asdf/src/asdf_hook.h +++ b/firmware/asdf/src/asdf_hook.h @@ -29,7 +29,8 @@ // keymap initializer commands. typedef enum { ASDF_HOOK_NULL, - ASDF_HOOK_SCANNER, + ASDF_HOOK_KEY_SCANNER, + ASDF_HOOK_ROW_SCANNER, ASDF_HOOK_OUTPUT, ASDF_HOOK_EACH_SCAN, ASDF_HOOK_USER_1, diff --git a/firmware/asdf/test/test_asdf_hook.c b/firmware/asdf/test/test_asdf_hook.c index d494010..96e582f 100644 --- a/firmware/asdf/test/test_asdf_hook.c +++ b/firmware/asdf/test/test_asdf_hook.c @@ -40,7 +40,7 @@ typedef asdf_cols_t (*scanner_func_t)(uint8_t); void test_default_scan_hook_is_default_scanner(void) { - scanner_func_t testfunc = (scanner_func_t) asdf_hook_get(ASDF_HOOK_SCANNER); + scanner_func_t testfunc = (scanner_func_t) asdf_hook_get(ASDF_HOOK_ROW_SCANNER); asdf_cols_t testval = 0; // make sure the pointer points to the correct function @@ -55,7 +55,7 @@ void test_default_scan_hook_is_default_scanner(void) void test_alternate_scan_hook(void) { asdf_keymaps_select(ASDF_TEST_ALTERNATE_SCANNER_MAP); - scanner_func_t testfunc = (scanner_func_t) asdf_hook_get(ASDF_HOOK_SCANNER); + scanner_func_t testfunc = (scanner_func_t) asdf_hook_get(ASDF_HOOK_ROW_SCANNER); asdf_cols_t testval = 0; // make sure the pointer points to the correct function diff --git a/firmware/asdf/test/test_asdf_keymap_defs.c b/firmware/asdf/test/test_asdf_keymap_defs.c index a68f516..d95976c 100644 --- a/firmware/asdf/test/test_asdf_keymap_defs.c +++ b/firmware/asdf/test/test_asdf_keymap_defs.c @@ -154,7 +154,7 @@ void setup_test_hooks_alt_output(void) asdf_hook_init(); asdf_hook_assign(ASDF_HOOK_OUTPUT, (void (*)(void)) &test_hook_output); - asdf_hook_assign(ASDF_HOOK_SCANNER, (void (*)(void)) &test_hook_read_row); + asdf_hook_assign(ASDF_HOOK_ROW_SCANNER, (void (*)(void)) &test_hook_read_row); } void setup_test_hooks_each_scan(void)