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.
This commit is contained in:
Dave 2023-04-17 11:51:08 -05:00
parent b9927a3aad
commit 3f2e8aa249
6 changed files with 13 additions and 7 deletions

View File

@ -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);

View File

@ -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) */
//-------|---------|---------+---------+---------+---------+---------+---------+

View File

@ -31,6 +31,7 @@
#include <stdint.h>
#include <stddef.h>
#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;
}
//-------|---------|---------+---------+---------+---------+---------+---------+

View File

@ -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,

View File

@ -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

View File

@ -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)