hhkb: Fix for USB NKRO for RN42

This commit is contained in:
tmk 2018-03-16 17:52:03 +09:00
parent 3526fcaf15
commit f2761c9565
6 changed files with 2941 additions and 2861 deletions

View file

@ -1,5 +1,5 @@
TARGET ?= hhkb_rn42 TARGET ?= hhkb_rn42
CONFIG_H ?= config_rn42.h CONFIG_H ?= config_rn42.h
RN42_ENABLE ?= yes RN42_ENABLE ?= yes
NKRO_ENABLE ?= no NKRO_ENABLE ?= yes
include Makefile include Makefile

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -72,12 +72,6 @@ int main(void)
/* init modules */ /* init modules */
keyboard_init(); keyboard_init();
if (!rn42_rts()) {
host_set_driver(&rn42_driver);
} else {
host_set_driver(&lufa_driver);
}
#ifdef SLEEP_LED_ENABLE #ifdef SLEEP_LED_ENABLE
sleep_led_init(); sleep_led_init();
#endif #endif

View file

@ -33,6 +33,9 @@ static void status_led(bool on)
void rn42_task_init(void) void rn42_task_init(void)
{ {
battery_init(); battery_init();
#ifdef NKRO_ENABLE
rn42_nkro_last = keyboard_nkro;
#endif
} }
void rn42_task(void) void rn42_task(void)
@ -69,14 +72,25 @@ void rn42_task(void)
} }
} }
/* Bluetooth mode when ready */ /* Switch between USB and Bluetooth */
if (!config_mode && !force_usb) { if (!config_mode) { // not switch while config mode
if (!rn42_rts() && host_get_driver() != &rn42_driver) { if (!force_usb && !rn42_rts()) {
clear_keyboard(); if (host_get_driver() != &rn42_driver) {
host_set_driver(&rn42_driver); clear_keyboard();
} else if (rn42_rts() && host_get_driver() != &lufa_driver) { #ifdef NKRO_ENABLE
clear_keyboard(); rn42_nkro_last = keyboard_nkro;
host_set_driver(&lufa_driver); 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);
}
} }
} }
@ -339,8 +353,6 @@ bool command_extra(uint8_t code)
} else { } else {
print("USB mode\n"); print("USB mode\n");
force_usb = true; force_usb = true;
clear_keyboard();
host_set_driver(&lufa_driver);
} }
return true; return true;
case KC_DELETE: case KC_DELETE:
@ -360,6 +372,14 @@ bool command_extra(uint8_t code)
case KC_SCROLLLOCK: case KC_SCROLLLOCK:
init_rn42(); init_rn42();
return true; return true;
#ifdef NKRO_ENABLE
case KC_N:
if (host_get_driver() != &lufa_driver) {
// ignored unless USB mode
return true;
}
return false;
#endif
default: default:
if (config_mode) if (config_mode)
return true; return true;

View file

@ -4,6 +4,10 @@
#include <stdbool.h> #include <stdbool.h>
#include "rn42.h" #include "rn42.h"
#ifdef NKRO_ENABLE
bool rn42_nkro_last;
#endif
void rn42_task_init(void); void rn42_task_init(void);
void rn42_task(void); void rn42_task(void);