Merge pull request #214 from cdlm/action-hook

Add per-event user hook function
example_keyboards
Jack Humbert 9 years ago
commit fd9e5d1510

@ -1,28 +1,26 @@
#include "planck.h" #include "planck.h"
__attribute__ ((weak)) __attribute__ ((weak))
void matrix_init_user(void) { void matrix_init_user(void) {}
}
__attribute__ ((weak)) __attribute__ ((weak))
void matrix_scan_user(void) { void matrix_scan_user(void) {}
} __attribute__ ((weak))
void process_action_user(keyrecord_t *record) {}
void matrix_init_kb(void) { void matrix_init_kb(void) {
#ifdef BACKLIGHT_ENABLE #ifdef BACKLIGHT_ENABLE
backlight_init_ports(); backlight_init_ports();
#endif #endif
#ifdef RGBLIGHT_ENABLE #ifdef RGBLIGHT_ENABLE
rgblight_init(); rgblight_init();
#endif #endif
// Turn status LED on
// Turn status LED on DDRE |= (1<<6);
DDRE |= (1<<6); PORTE |= (1<<6);
PORTE |= (1<<6);
matrix_init_user(); matrix_init_user();
} }
@ -30,3 +28,7 @@ void matrix_init_kb(void) {
void matrix_scan_kb(void) { void matrix_scan_kb(void) {
matrix_scan_user(); matrix_scan_user();
} }
void process_action_kb(keyrecord_t *record) {
process_action_user(record);
}

@ -42,5 +42,6 @@
void matrix_init_user(void); void matrix_init_user(void);
void matrix_scan_user(void); void matrix_scan_user(void);
void process_action_user(keyrecord_t *record);
#endif #endif

@ -10,6 +10,11 @@ void matrix_scan_user(void) {
// leave this function blank - it can be defined in a keymap file // leave this function blank - it can be defined in a keymap file
} }
__attribute__ ((weak))
void process_action_user(keyrecord_t *record) {
// leave this function blank - it can be defined in a keymap file
}
__attribute__ ((weak)) __attribute__ ((weak))
void led_set_user(uint8_t usb_led) { void led_set_user(uint8_t usb_led) {
// leave this function blank - it can be defined in a keymap file // leave this function blank - it can be defined in a keymap file
@ -18,19 +23,26 @@ void led_set_user(uint8_t usb_led) {
void matrix_init_kb(void) { void matrix_init_kb(void) {
// put your keyboard start-up code here // put your keyboard start-up code here
// runs once when the firmware starts up // runs once when the firmware starts up
matrix_init_user(); matrix_init_user();
} }
void matrix_scan_kb(void) { void matrix_scan_kb(void) {
// put your looping keyboard code here // put your looping keyboard code here
// runs every cycle (a lot) // runs every cycle (a lot)
matrix_scan_user(); matrix_scan_user();
} }
void process_action_kb(keyrecord_t *record) {
// put your per-action keyboard code here
// runs for every action, just before processing by the firmware
process_action_user(record);
}
void led_set_kb(uint8_t usb_led) { void led_set_kb(uint8_t usb_led) {
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
led_set_user(usb_led); led_set_user(usb_led);
} }

@ -17,10 +17,11 @@
{ \ { \
{ k00, k01, k02 }, \ { k00, k01, k02 }, \
{ k10, KC_NO, k11 }, \ { k10, KC_NO, k11 }, \
} }
void matrix_init_user(void); void matrix_init_user(void);
void matrix_scan_user(void); void matrix_scan_user(void);
void process_action_user(keyrecord_t *record);
void led_set_user(uint8_t usb_led); void led_set_user(uint8_t usb_led);
#endif #endif

@ -53,6 +53,9 @@ void action_exec(keyevent_t event)
#endif #endif
} }
__attribute__ ((weak))
void process_action_kb(keyrecord_t *record) {}
void process_action(keyrecord_t *record) void process_action(keyrecord_t *record)
{ {
keyevent_t event = record->event; keyevent_t event = record->event;
@ -62,6 +65,8 @@ void process_action(keyrecord_t *record)
if (IS_NOEVENT(event)) { return; } if (IS_NOEVENT(event)) { return; }
process_action_kb(record);
action_t action = layer_switch_get_action(event.key); action_t action = layer_switch_get_action(event.key);
dprint("ACTION: "); debug_action(action); dprint("ACTION: "); debug_action(action);
#ifndef NO_ACTION_LAYER #ifndef NO_ACTION_LAYER

@ -58,6 +58,9 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt);
/* user defined special function */ /* user defined special function */
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt); void action_function(keyrecord_t *record, uint8_t id, uint8_t opt);
/* keyboard-specific key event (pre)processing */
void process_action_kb(keyrecord_t *record);
/* Utilities for actions. */ /* Utilities for actions. */
void process_action(keyrecord_t *record); void process_action(keyrecord_t *record);
void register_code(uint8_t code); void register_code(uint8_t code);

Loading…
Cancel
Save