X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=tmk_core%2Fcommon%2Fkeyboard.c;h=13b3cb4c0c1f5a035034760cef32c38fa6edc055;hb=a173eda6d28bd09b2d59448a6532edb7a6c8e358;hp=93a066e574a3cd763212b1149fee278065610f72;hpb=849ed5a6a03b14defa94a50b66169abac89b9c08;p=qmk_firmware.git
diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c
index 93a066e57..13b3cb4c0 100644
--- a/tmk_core/common/keyboard.c
+++ b/tmk_core/common/keyboard.c
@@ -51,6 +51,9 @@ along with this program. If not, see .
#ifdef RGBLIGHT_ENABLE
# include "rgblight.h"
#endif
+#ifdef STENO_ENABLE
+# include "process_steno.h"
+#endif
#ifdef FAUXCLICKY_ENABLE
# include "fauxclicky.h"
#endif
@@ -60,57 +63,99 @@ along with this program. If not, see .
#ifdef VISUALIZER_ENABLE
# include "visualizer/visualizer.h"
#endif
+#ifdef POINTING_DEVICE_ENABLE
+# include "pointing_device.h"
+#endif
+#ifdef MIDI_ENABLE
+# include "process_midi.h"
+#endif
+#ifdef HD44780_ENABLE
+# include "hd44780.h"
+#endif
+#ifdef MATRIX_HAS_GHOST
+extern const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
+static matrix_row_t get_real_keys(uint8_t row, matrix_row_t rowdata){
+ matrix_row_t out = 0;
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ //read each key in the row data and check if the keymap defines it as a real key
+ if (pgm_read_byte(&keymaps[0][row][col]) && (rowdata & (1<
1){
+ if (i != row && popcount_more_than_one(get_real_keys(i, matrix_get_row(i)) & rowdata)){
return true;
}
}
return false;
- return false;
-}
-
-extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
-// bit map of true keys and empty spots in matrix, each row is reversed
-void make_ghost_check_array(){
- for (int row = 0; row < MATRIX_ROWS; row++) {
- for (int col = 0; col < MATRIX_COLS; col++) {
- if (keymaps[0][row][col] & 0xFF)
- matrix_ghost_check[row] |= 1<= QMK_KEYS_PER_SCAN)
+#endif
+ // process a key per task call
+ goto MATRIX_LOOP_END;
+ }
}
}
}
}
// call with pseudo tick event when no real key event.
+#ifdef QMK_KEYS_PER_SCAN
+ // we can get here with some keys processed now.
+ if (!keys_processed)
+#endif
action_exec(TICK);
MATRIX_LOOP_END:
@@ -222,6 +291,14 @@ MATRIX_LOOP_END:
visualizer_update(default_layer_state, layer_state, visualizer_get_mods(), host_keyboard_leds());
#endif
+#ifdef POINTING_DEVICE_ENABLE
+ pointing_device_task();
+#endif
+
+#ifdef MIDI_ENABLE
+ midi_task();
+#endif
+
// update LED
if (led_status != host_keyboard_leds()) {
led_status = host_keyboard_leds();
@@ -229,6 +306,10 @@ MATRIX_LOOP_END:
}
}
+/** \brief keyboard set leds
+ *
+ * FIXME: needs doc
+ */
void keyboard_set_leds(uint8_t leds)
{
if (debug_keyboard) { debug("keyboard_set_led: "); debug_hex8(leds); debug("\n"); }