]> git.friedersdorff.com Git - max/tmk_keyboard.git/blobdiff - pjrc/host.c
minor fix for HHKB Makefile and doc
[max/tmk_keyboard.git] / pjrc / host.c
index 7247288bd75fe91979f964ded05274a2f50bc2b8..b69c6cb20c513af34347200bc6fc686c97f6814a 100644 (file)
@@ -1,9 +1,11 @@
 #include <stdint.h>
+#include <avr/interrupt.h>
 #include "usb_keycodes.h"
 #include "usb_keyboard.h"
 #include "usb_mouse.h"
 #include "debug.h"
 #include "host.h"
+#include "util.h"
 
 
 #ifdef USB_NKRO_ENABLE
@@ -57,9 +59,12 @@ void host_add_code(uint8_t code)
 
 void host_swap_keyboard_report(void)
 {
+    uint8_t sreg = SREG;
+    cli();
     report_keyboard_t *tmp = keyboard_report_prev;
     keyboard_report_prev = keyboard_report;
     keyboard_report = tmp;
+    SREG = sreg;
 }
 
 void host_clear_keyboard_report(void)
@@ -80,14 +85,17 @@ uint8_t host_has_anykey(void)
     return cnt;
 }
 
-uint8_t *host_get_keys(void)
+uint8_t host_get_first_key(void)
 {
-    return keyboard_report->keys;
-}
-
-uint8_t host_get_mods(void)
-{
-    return keyboard_report->mods;
+#ifdef USB_NKRO_ENABLE
+    if (keyboard_nkro) {
+        uint8_t i = 0;
+        for (; i < REPORT_KEYS && !keyboard_report->keys[i]; i++)
+            ;
+        return i<<3 | biton(keyboard_report->keys[i]);
+    }
+#endif
+    return keyboard_report->keys[0];
 }