X-Git-Url: https://git.friedersdorff.com/?a=blobdiff_plain;f=keyboard%2Fhhkb%2Frn42%2Frn42_task.c;h=501fce46de4c1f57178e9da24d8695cdd8a64fed;hb=ea1d7ff24033b97de5a993138ffd5deab2b9bc84;hp=5107fef483a04634f32ca0e71fd41dfde1c88057;hpb=f1f2066657f4a0998adc016c95d7e541b436e09f;p=max%2Ftmk_keyboard.git diff --git a/keyboard/hhkb/rn42/rn42_task.c b/keyboard/hhkb/rn42/rn42_task.c index 5107fef4..501fce46 100644 --- a/keyboard/hhkb/rn42/rn42_task.c +++ b/keyboard/hhkb/rn42/rn42_task.c @@ -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;