mirror of
https://github.com/osiweb/unified_retro_keyboard.git
synced 2025-02-10 16:31:01 +00:00
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:
parent
b9927a3aad
commit
3f2e8aa249
@ -563,7 +563,7 @@ static void asdf_handle_key_held_pressed(uint8_t row, uint8_t col)
|
|||||||
//
|
//
|
||||||
void asdf_keyscan(void)
|
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);
|
asdf_hook_execute(ASDF_HOOK_EACH_SCAN);
|
||||||
for (uint8_t row = 0; row < asdf_keymaps_num_rows(); row++) {
|
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)
|
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++) {
|
for (uint8_t row = 0; row < asdf_keymaps_num_rows(); row++) {
|
||||||
asdf_cols_t row_key_state = (*row_reader)(row);
|
asdf_cols_t row_key_state = (*row_reader)(row);
|
||||||
|
@ -83,6 +83,9 @@
|
|||||||
// DEFAULT value of keyboard outputs
|
// DEFAULT value of keyboard outputs
|
||||||
#define ASDF_VIRTUAL_OUT_DEFAULT_VALUE 1 // High if not used.
|
#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) */
|
#endif /* !defined (CONFIG_H) */
|
||||||
|
|
||||||
//-------|---------|---------+---------+---------+---------+---------+---------+
|
//-------|---------|---------+---------+---------+---------+---------+---------+
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
#include "asdf_config.h"
|
||||||
#include "asdf_arch.h"
|
#include "asdf_arch.h"
|
||||||
#include "asdf_hook.h"
|
#include "asdf_hook.h"
|
||||||
|
|
||||||
@ -166,8 +167,9 @@ void asdf_hook_init(void)
|
|||||||
hook_map[i] = &asdf_hook_null_func;
|
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_OUTPUT] = (asdf_hook_function_t) ASDF_ARCH_DEFAULT_OUTPUT;
|
||||||
|
hook_map[ASDF_HOOK_KEY_SCANNER] = (asdf_hook_function_t) ASDF_DEFAULT_KEY_SCANNER;
|
||||||
}
|
}
|
||||||
|
|
||||||
//-------|---------|---------+---------+---------+---------+---------+---------+
|
//-------|---------|---------+---------+---------+---------+---------+---------+
|
||||||
|
@ -29,7 +29,8 @@
|
|||||||
// keymap initializer commands.
|
// keymap initializer commands.
|
||||||
typedef enum {
|
typedef enum {
|
||||||
ASDF_HOOK_NULL,
|
ASDF_HOOK_NULL,
|
||||||
ASDF_HOOK_SCANNER,
|
ASDF_HOOK_KEY_SCANNER,
|
||||||
|
ASDF_HOOK_ROW_SCANNER,
|
||||||
ASDF_HOOK_OUTPUT,
|
ASDF_HOOK_OUTPUT,
|
||||||
ASDF_HOOK_EACH_SCAN,
|
ASDF_HOOK_EACH_SCAN,
|
||||||
ASDF_HOOK_USER_1,
|
ASDF_HOOK_USER_1,
|
||||||
|
@ -40,7 +40,7 @@ typedef asdf_cols_t (*scanner_func_t)(uint8_t);
|
|||||||
|
|
||||||
void test_default_scan_hook_is_default_scanner(void)
|
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;
|
asdf_cols_t testval = 0;
|
||||||
|
|
||||||
// make sure the pointer points to the correct function
|
// 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)
|
void test_alternate_scan_hook(void)
|
||||||
{
|
{
|
||||||
asdf_keymaps_select(ASDF_TEST_ALTERNATE_SCANNER_MAP);
|
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;
|
asdf_cols_t testval = 0;
|
||||||
|
|
||||||
// make sure the pointer points to the correct function
|
// make sure the pointer points to the correct function
|
||||||
|
@ -154,7 +154,7 @@ void setup_test_hooks_alt_output(void)
|
|||||||
|
|
||||||
asdf_hook_init();
|
asdf_hook_init();
|
||||||
asdf_hook_assign(ASDF_HOOK_OUTPUT, (void (*)(void)) &test_hook_output);
|
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)
|
void setup_test_hooks_each_scan(void)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user