]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Merge pull request #214 from cdlm/action-hook
authorJack Humbert <jack.humb@gmail.com>
Mon, 28 Mar 2016 15:55:19 +0000 (11:55 -0400)
committerJack Humbert <jack.humb@gmail.com>
Mon, 28 Mar 2016 15:55:19 +0000 (11:55 -0400)
Add per-event user hook function

keyboard/planck/planck.c
keyboard/planck/planck.h
quantum/template/template.c
quantum/template/template.h
tmk_core/common/action.c
tmk_core/common/action.h

index fe8731ec7b5486fef4c410e41ba70c404ce4fe5f..4b39cf1e8bd89ec8770d0ed8a198cb358b0aebaf 100644 (file)
@@ -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);
+}
index e9566b92286e18e2149558f15429ec5fe51aa1f2..edcb5fbff6d84d549634ac9e38b7a285df882a3c 100644 (file)
@@ -42,5 +42,6 @@
 
 void matrix_init_user(void);
 void matrix_scan_user(void);
+void process_action_user(keyrecord_t *record);
 
 #endif
index 58e73cb09f1de402dfade8ae34b07f974d006f72..cc52e496ffe8b1579be8d33d5443c4b6666dfd21 100644 (file)
@@ -10,6 +10,11 @@ void matrix_scan_user(void) {
        // 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))
 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
+}
index ba91abac3e64914f92e7a4fce0a5dd14ceb4a5ba..b1c34d3cbee294ee1d0364e6264529ade8921c1b 100644 (file)
 { \
     { 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
index 4197c53ed21609dc2d1838c035b7b8f8fce6c714..2ccc0e0b947bdd79342e3b31e02b89a02de72397 100644 (file)
@@ -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
index 8a4736d7bc19cbb833481649b467cc4da109e1ac..9f528af4b98ddd5603f17efaeb59038baa60f285 100644 (file)
@@ -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);