Hooks ----- Hooks allow you to execute custom code at certain predefined points in the firmware execution. To use them, just define the hook function in your keymap file. The following hooks are available available: Hook function | Timing --------------------------------|----------------------------------------------- `hook_early_init(void)` | Early in the boot process, before the matrix is initialized and before a connection is made with the host. Thus, this hook has access to very few parameters, but it is a good place to define any custom parameters needed by other early processes. `hook_late_init(void)` | Near the end of the boot process, after Boot Magic has run and LEDs have been initialized. `hook_bootmagic(void)` | During the Boot Magic window, after EEPROM and Bootloader checks are made, but before any other built-in Boot Magic checks are made. `hook_usb_wakeup(void)` | When the device wakes up from USB suspend state. `hook_usb_suspend_entry(void)` | When the device enters USB suspend state. `hook_usb_suspend_loop(void)` | Continuously, while the device is in USB suspend state. *Default action:* power down and periodically check the matrix, causing wakeup if needed. `hook_keyboard_loop(void)` | Continuously, during the main loop, after the matrix is checked. `hook_matrix_change(keyevent_t event)` | When a matrix state change is detected, before any other actions are processed. `hook_layer_change(uint32_t layer_state)` | When any layer is changed. `hook_default_layer_change(uint32_t default_layer_state)` | When any default layer is changed. `hook_keyboard_leds_change(uint8_t led_status)` | Whenever a change in the LED status is performed. *Default action:* call `keyboard_set_leds(led_status)` ### Hooks Examples You can try these out by copying the code to your keymap file, or any .c file in the Makefile `SRC`. #### Activate keymap layer 5 on startup ```C #include "action_layer.h" void hook_late_init(void) { layer_on(5); print("Layer 5 enabled!"); } ``` #### Blink the Caps Lock LED every .5 seconds ```C #include "timer.h" #include "led.h" bool my_led_status = 0; uint16_t my_led_timer; void hook_keyboard_loop(void) { // check if we've reached 500 milliseconds yet... if (timer_elapsed(my_led_timer) > 500) { // we've reached 500 milliseconds! // reset the timer my_led_timer = timer_read(); // check the current LED state if (my_led_status) { // LED is on, so let's turn it off led_set(host_keyboard_leds() & ~(1< 50) { led_set(host_keyboard_leds()); my_led_status = 0; } } } ```