Procházet zdrojové kódy

Merge pull request #214 from cdlm/action-hook

Add per-event user hook function
Jack Humbert před 9 roky
rodič
revize
fd9e5d1510

+ 17 - 15
keyboard/planck/planck.c

@@ -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);
+}

+ 1 - 0
keyboard/planck/planck.h

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

+ 16 - 4
quantum/template/template.c

@@ -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);
-}
+}

+ 3 - 2
quantum/template/template.h

@@ -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
+#endif

+ 5 - 0
tmk_core/common/action.c

@@ -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

+ 3 - 0
tmk_core/common/action.h

@@ -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);