M keyboard/planck/planck.c => keyboard/planck/planck.c +17 -15
@@ 1,28 1,26 @@
#include "planck.h"
__attribute__ ((weak))
-void matrix_init_user(void) {
-
-}
+void matrix_init_user(void) {}
__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) {
- #ifdef BACKLIGHT_ENABLE
- backlight_init_ports();
- #endif
+#ifdef BACKLIGHT_ENABLE
+ backlight_init_ports();
+#endif
- #ifdef RGBLIGHT_ENABLE
- rgblight_init();
- #endif
+#ifdef RGBLIGHT_ENABLE
+ rgblight_init();
+#endif
-
- // Turn status LED on
- DDRE |= (1<<6);
- PORTE |= (1<<6);
+ // Turn status LED on
+ DDRE |= (1<<6);
+ PORTE |= (1<<6);
matrix_init_user();
}
@@ 30,3 28,7 @@ void matrix_init_kb(void) {
void matrix_scan_kb(void) {
matrix_scan_user();
}
+
+void process_action_kb(keyrecord_t *record) {
+ process_action_user(record);
+}
M keyboard/planck/planck.h => keyboard/planck/planck.h +1 -0
@@ 42,5 42,6 @@
void matrix_init_user(void);
void matrix_scan_user(void);
+void process_action_user(keyrecord_t *record);
#endif
M quantum/template/template.c => quantum/template/template.c +16 -4
@@ 11,6 11,11 @@ void matrix_scan_user(void) {
}
__attribute__ ((weak))
+void process_action_user(keyrecord_t *record) {
+ // leave this function blank - it can be defined in a keymap file
+}
+
+__attribute__ ((weak))
void led_set_user(uint8_t usb_led) {
// 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) {
// put your keyboard start-up code here
// runs once when the firmware starts up
-
+
matrix_init_user();
}
void matrix_scan_kb(void) {
- // put your looping keyboard code here
- // runs every cycle (a lot)
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
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) {
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
led_set_user(usb_led);
-}>
\ No newline at end of file
+}
M quantum/template/template.h => quantum/template/template.h +3 -2
@@ 17,10 17,11 @@
{ \
{ k00, k01, k02 }, \
{ k10, KC_NO, k11 }, \
-}
+}
void matrix_init_user(void);
void matrix_scan_user(void);
+void process_action_user(keyrecord_t *record);
void led_set_user(uint8_t usb_led);
-#endif>
\ No newline at end of file
+#endif
M tmk_core/common/action.c => tmk_core/common/action.c +5 -0
@@ 53,6 53,9 @@ void action_exec(keyevent_t event)
#endif
}
+__attribute__ ((weak))
+void process_action_kb(keyrecord_t *record) {}
+
void process_action(keyrecord_t *record)
{
keyevent_t event = record->event;
@@ 62,6 65,8 @@ void process_action(keyrecord_t *record)
if (IS_NOEVENT(event)) { return; }
+ process_action_kb(record);
+
action_t action = layer_switch_get_action(event.key);
dprint("ACTION: "); debug_action(action);
#ifndef NO_ACTION_LAYER
M tmk_core/common/action.h => tmk_core/common/action.h +3 -0
@@ 58,6 58,9 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt);
/* user defined special function */
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. */
void process_action(keyrecord_t *record);
void register_code(uint8_t code);