]> git.friedersdorff.com Git - max/tmk_keyboard.git/blobdiff - common/host.c
Add keycode.h and remove usb_keycodes.h.
[max/tmk_keyboard.git] / common / host.c
index 8dd2abbee8d86048ff21ad9c9cd4c0b42054695e..37f707d0b310a42ec9db70e83ed539c9c60e0729 100644 (file)
@@ -17,7 +17,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <stdint.h>
 #include <avr/interrupt.h>
-#include "usb_keycodes.h"
+#include "keycode.h"
 #include "host.h"
 #include "util.h"
 #include "debug.h"
@@ -56,6 +56,27 @@ uint8_t host_keyboard_leds(void)
     return (*driver->keyboard_leds)();
 }
 
+/* new interface */
+void host_register_key(uint8_t key)
+{
+    host_add_key(key);
+    host_send_keyboard_report();
+}
+
+void host_unregister_key(uint8_t key)
+{
+    host_del_key(key);
+    host_send_keyboard_report();
+}
+
+void host_clear_all_keys_but_mods(void)
+{
+    for (int8_t i = 0; i < REPORT_KEYS; i++) {
+        keyboard_report->keys[i] = 0;
+    }
+    host_send_keyboard_report();
+}
+
 /* keyboard report operations */
 void host_add_key(uint8_t key)
 {
@@ -158,6 +179,14 @@ void host_send_keyboard_report(void)
 {
     if (!driver) return;
     (*driver->send_keyboard)(keyboard_report);
+
+    if (debug_keyboard) {
+        print("keys: ");
+        for (int i = 0; i < REPORT_KEYS; i++) {
+            phex(keyboard_report->keys[i]); print(" ");
+        }
+        print(" mods: "); phex(keyboard_report->mods); print("\n");
+    }
 }
 
 void host_mouse_send(report_mouse_t *report)
@@ -216,7 +245,6 @@ static inline void del_key_byte(uint8_t code)
     for (; i < REPORT_KEYS; i++) {
         if (keyboard_report->keys[i] == code) {
             keyboard_report->keys[i] = 0;
-            break;
         }
     }
 }