]> git.friedersdorff.com Git - max/tmk_keyboard.git/blobdiff - keyboard/hhkb/rn42/rn42_task.c
lufa: Update makefile for new LUFA
[max/tmk_keyboard.git] / keyboard / hhkb / rn42 / rn42_task.c
index 5107fef483a04634f32ca0e71fd41dfde1c88057..501fce46de4c1f57178e9da24d8695cdd8a64fed 100644 (file)
@@ -33,6 +33,9 @@ static void status_led(bool on)
 void rn42_task_init(void)
 {
     battery_init();
+#ifdef NKRO_ENABLE
+    rn42_nkro_last = keyboard_nkro;
+#endif
 }
 
 void rn42_task(void)
@@ -69,14 +72,25 @@ void rn42_task(void)
         }
     }
 
-    /* Bluetooth mode when ready */
-    if (!config_mode && !force_usb) {
-        if (!rn42_rts() && host_get_driver() != &rn42_driver) {
-            clear_keyboard();
-            host_set_driver(&rn42_driver);
-        } else if (rn42_rts() && host_get_driver() != &lufa_driver) {
-            clear_keyboard();
-            host_set_driver(&lufa_driver);
+    /* Switch between USB and Bluetooth */
+    if (!config_mode) { // not switch while config mode
+        if (!force_usb && !rn42_rts()) {
+            if (host_get_driver() != &rn42_driver) {
+                clear_keyboard();
+#ifdef NKRO_ENABLE
+                rn42_nkro_last = keyboard_nkro;
+                keyboard_nkro = false;
+#endif
+                host_set_driver(&rn42_driver);
+            }
+        } else {
+            if (host_get_driver() != &lufa_driver) {
+                clear_keyboard();
+#ifdef NKRO_ENABLE
+                keyboard_nkro = rn42_nkro_last;
+#endif
+                host_set_driver(&lufa_driver);
+            }
         }
     }
 
@@ -125,40 +139,6 @@ void rn42_task(void)
  ******************************************************************************/
 static host_driver_t *prev_driver = &rn42_driver;
 
-static void print_rn42(void)
-{
-    int16_t c;
-    while ((c = rn42_getc()) != -1) {
-        xprintf("%c", c);
-    }
-}
-
-static void clear_rn42(void)
-{
-    while (rn42_getc() != -1) ;
-}
-
-#define SEND_STR(str)       send_str(PSTR(str))
-#define SEND_COMMAND(cmd)   send_command(PSTR(cmd))
-
-static void send_str(const char *str)
-{
-    uint8_t c;
-    while ((c = pgm_read_byte(str++)))
-        rn42_putc(c);
-}
-
-static const char *send_command(const char *cmd)
-{
-    static const char *s;
-    send_str(cmd);
-    wait_ms(500);
-    s = rn42_gets(100);
-    xprintf("%s\r\n", s);
-    print_rn42();
-    return s;
-}
-
 static void enter_command_mode(void)
 {
     prev_driver = host_get_driver();
@@ -171,7 +151,7 @@ static void enter_command_mode(void)
     wait_ms(1100);          // need 1 sec
     SEND_COMMAND("$$$");
     wait_ms(600);           // need 1 sec
-    print_rn42();
+    rn42_print_response();
     const char *s = SEND_COMMAND("v\r\n");
     if (strncmp("v", s, 1) != 0) SEND_COMMAND("+\r\n"); // local echo on
 }
@@ -373,8 +353,6 @@ bool command_extra(uint8_t code)
             } else {
                 print("USB mode\n");
                 force_usb = true;
-                clear_keyboard();
-                host_set_driver(&lufa_driver);
             }
             return true;
         case KC_DELETE:
@@ -394,6 +372,14 @@ bool command_extra(uint8_t code)
         case KC_SCROLLLOCK:
             init_rn42();
             return true;
+#ifdef NKRO_ENABLE
+        case KC_N:
+            if (host_get_driver() != &lufa_driver) {
+                // ignored unless USB mode
+                return true;
+            }
+            return false;
+#endif
         default:
             if (config_mode)
                 return true;