lufa: Fix keyboard protocol on bus reset #763
Keyboard can be set as Boot protocol by BIOS/UEFI/GRUB then bus reset occurs before OS boots up. OS(at least Windows10,11/Ubuntu23.04) expects device works on Report protocol. Note that OS does not send SetProtocol(Report) here. Device state should be initialized properly on bus reset. https://github.com/tmk/tmk_keyboard/issues/763
This commit is contained in:
parent
9e67abe551
commit
d9c100ecf7
1 changed files with 15 additions and 1 deletions
|
|
@ -41,6 +41,7 @@
|
||||||
#include "host_driver.h"
|
#include "host_driver.h"
|
||||||
#include "keyboard.h"
|
#include "keyboard.h"
|
||||||
#include "action.h"
|
#include "action.h"
|
||||||
|
#include "action_util.h"
|
||||||
#include "led.h"
|
#include "led.h"
|
||||||
#include "sendchar.h"
|
#include "sendchar.h"
|
||||||
#include "ringbuf.h"
|
#include "ringbuf.h"
|
||||||
|
|
@ -73,7 +74,7 @@ uint8_t keyboard_idle = 0;
|
||||||
/* 0: Boot Protocol, 1: Report Protocol(default) */
|
/* 0: Boot Protocol, 1: Report Protocol(default) */
|
||||||
uint8_t keyboard_protocol = 1;
|
uint8_t keyboard_protocol = 1;
|
||||||
static uint8_t keyboard_led_stats = 0;
|
static uint8_t keyboard_led_stats = 0;
|
||||||
static report_keyboard_t keyboard_report_sent;
|
static report_keyboard_t keyboard_report_sent = (report_keyboard_t){};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MOUSE_ENABLE
|
#ifdef MOUSE_ENABLE
|
||||||
|
|
@ -305,6 +306,19 @@ void EVENT_USB_Device_Reset(void)
|
||||||
#ifdef TMK_LUFA_DEBUG
|
#ifdef TMK_LUFA_DEBUG
|
||||||
print("[R]");
|
print("[R]");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// reset to initial state: protocol to Report(default)
|
||||||
|
#ifndef NO_KEYBOARD
|
||||||
|
keyboard_protocol = 1;
|
||||||
|
keyboard_idle = 0;
|
||||||
|
keyboard_led_stats = 0;
|
||||||
|
keyboard_report_sent = (report_keyboard_t){};
|
||||||
|
// keyboard_report keys/bits part is not compatible between Boot and Report protocol
|
||||||
|
clear_keys();
|
||||||
|
#endif
|
||||||
|
#ifdef MOUSE_ENABLE
|
||||||
|
mouse_protocol = 1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void EVENT_USB_Device_Suspend()
|
void EVENT_USB_Device_Suspend()
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue