unified_retro_keyboard/firmware/asdf/src/ARCHITECTURE-keymaps.org

1.5 KiB

Keymap architecture

Keymap definition modules are in src/Keymaps

Each keymap has its own keymap setup routine

void setup_mapname_keymap(void) - keymap setup function

register a keycode map for each modifier combination
The keycode maps are in flash (ROM)
set up virtual devices for the keymap
virtual device to physical device mapping
associated virtual device function on activate/deactivate
initial state
set up function hooks used by keymap

Keymap definition API

mapping keys

#include "asdf_keymaps.h"

asdf_keymaps_add_map() - called from

Assigns a specified keymap matrix (ptr to FLASH) to a given keymap and modifier type.

adding virtual devices - called from keymap setup routine

asdf_virtual_init()
Clears the virtual device table for the keymap
initialize first entry in virtual device table to NULL
asdf_virtual_add_device()
Accept a virtual device code, a physical device code, a default function, and a default initial value, and create a new entry in the virtual device table.
increment the virtual device table pointer and set next (last) entry to NULL

DIP SWITCHES

Note that the DIP switches are keys in the key matrix, which is initialized to the all unpressed state at startup. Since the keymap is initialized to 0, the keymap is consistent with the presumed initial state of the DIP switches. If the DIP switches are not set to Keymap 0, then their position will be detected as keypresses, and the correct keymap will be set.