|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- 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<<USB_LED_CAPS_LOCK));
- my_led_status = 0;
- }
- else
- {
- // LED is off, so let's turn it on
- led_set(host_keyboard_leds() | (1<<USB_LED_CAPS_LOCK));
- my_led_status = 1;
- }
- }
- }
- ```
-
- #### Flash the Caps Lock LED for 20ms on every keypress
- ```C
- include "timer.h"
- #include "led.h"
-
- bool my_led_status = 0;
- uint16_t my_led_timer;
-
- void hook_matrix_change(keyevent_t event)
- {
- // only flash LED for key press events, not key release events.
- if (event.pressed)
- {
- // check the current LED status and reverse it
- led_set(host_keyboard_leds() ^ (1<<USB_LED_CAPS_LOCK));
-
- my_led_status = 1;
- my_led_timer = timer_read();
- }
- }
-
- void hook_keyboard_loop(void)
- {
- if (my_led_status)
- {
- // check if we've reached 20 milliseconds yet...
- if (timer_elapsed(my_led_timer) > 50)
- {
- led_set(host_keyboard_leds());
-
- my_led_status = 0;
- }
- }
- }
-
- ```
|