NKRO is disable when SET_PROTOCOL(boot)
- Command can force to enable NKRO even when boot mode - After boot keyboard may be in boot mode due to BIOS' request
This commit is contained in:
parent
5e3f2d2b2e
commit
22854eb71b
4 changed files with 11 additions and 5 deletions
|
@ -67,7 +67,7 @@ void send_keyboard_report(void) {
|
||||||
void add_key(uint8_t key)
|
void add_key(uint8_t key)
|
||||||
{
|
{
|
||||||
#ifdef NKRO_ENABLE
|
#ifdef NKRO_ENABLE
|
||||||
if (keyboard_nkro && keyboard_protocol) {
|
if (keyboard_nkro) {
|
||||||
add_key_bit(key);
|
add_key_bit(key);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -78,7 +78,7 @@ void add_key(uint8_t key)
|
||||||
void del_key(uint8_t key)
|
void del_key(uint8_t key)
|
||||||
{
|
{
|
||||||
#ifdef NKRO_ENABLE
|
#ifdef NKRO_ENABLE
|
||||||
if (keyboard_nkro && keyboard_protocol) {
|
if (keyboard_nkro) {
|
||||||
del_key_bit(key);
|
del_key_bit(key);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -151,7 +151,7 @@ uint8_t has_anymod(void)
|
||||||
uint8_t get_first_key(void)
|
uint8_t get_first_key(void)
|
||||||
{
|
{
|
||||||
#ifdef NKRO_ENABLE
|
#ifdef NKRO_ENABLE
|
||||||
if (keyboard_nkro && keyboard_protocol) {
|
if (keyboard_nkro) {
|
||||||
uint8_t i = 0;
|
uint8_t i = 0;
|
||||||
for (; i < REPORT_BITS && !keyboard_report->nkro.bits[i]; i++)
|
for (; i < REPORT_BITS && !keyboard_report->nkro.bits[i]; i++)
|
||||||
;
|
;
|
||||||
|
|
|
@ -308,6 +308,9 @@ void EVENT_USB_Device_ControlRequest(void)
|
||||||
Endpoint_ClearStatusStage();
|
Endpoint_ClearStatusStage();
|
||||||
|
|
||||||
keyboard_protocol = ((USB_ControlRequest.wValue & 0xFF) != 0x00);
|
keyboard_protocol = ((USB_ControlRequest.wValue & 0xFF) != 0x00);
|
||||||
|
#ifdef NKRO_ENABLE
|
||||||
|
keyboard_nkro = !!keyboard_protocol;
|
||||||
|
#endif
|
||||||
clear_keyboard();
|
clear_keyboard();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -354,7 +357,7 @@ static void send_keyboard(report_keyboard_t *report)
|
||||||
|
|
||||||
/* Select the Keyboard Report Endpoint */
|
/* Select the Keyboard Report Endpoint */
|
||||||
#ifdef NKRO_ENABLE
|
#ifdef NKRO_ENABLE
|
||||||
if (keyboard_nkro && keyboard_protocol) {
|
if (keyboard_nkro) {
|
||||||
/* Report protocol - NKRO */
|
/* Report protocol - NKRO */
|
||||||
Endpoint_SelectEndpoint(NKRO_IN_EPNUM);
|
Endpoint_SelectEndpoint(NKRO_IN_EPNUM);
|
||||||
|
|
||||||
|
|
|
@ -930,6 +930,9 @@ ISR(USB_COM_vect)
|
||||||
}
|
}
|
||||||
if (bRequest == HID_SET_PROTOCOL) {
|
if (bRequest == HID_SET_PROTOCOL) {
|
||||||
keyboard_protocol = wValue;
|
keyboard_protocol = wValue;
|
||||||
|
#ifdef NKRO_ENABLE
|
||||||
|
keyboard_nkro = !!keyboard_protocol;
|
||||||
|
#endif
|
||||||
clear_keyboard();
|
clear_keyboard();
|
||||||
//usb_wait_in_ready();
|
//usb_wait_in_ready();
|
||||||
usb_send_in();
|
usb_send_in();
|
||||||
|
|
|
@ -56,7 +56,7 @@ int8_t usb_keyboard_send_report(report_keyboard_t *report)
|
||||||
int8_t result = 0;
|
int8_t result = 0;
|
||||||
|
|
||||||
#ifdef NKRO_ENABLE
|
#ifdef NKRO_ENABLE
|
||||||
if (keyboard_nkro && keyboard_protocol)
|
if (keyboard_nkro)
|
||||||
result = send_report(report, KBD2_ENDPOINT, 0, KBD2_SIZE);
|
result = send_report(report, KBD2_ENDPOINT, 0, KBD2_SIZE);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue