Fix lock LEDs for ChibiOS when using shared endpoints (#7877)
* Fix lock LEDs for ChibiOS when using shared endpoints * Tweak comments * Doesn't need to be uint16 anymore
This commit is contained in:
parent
2566992c9a
commit
123ae73efc
1 changed files with 12 additions and 15 deletions
|
@ -62,7 +62,7 @@ extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
uint8_t keyboard_idle __attribute__((aligned(2))) = 0;
|
uint8_t keyboard_idle __attribute__((aligned(2))) = 0;
|
||||||
uint8_t keyboard_protocol __attribute__((aligned(2))) = 1;
|
uint8_t keyboard_protocol __attribute__((aligned(2))) = 1;
|
||||||
uint16_t keyboard_led_stats __attribute__((aligned(2))) = 0;
|
uint8_t keyboard_led_stats = 0;
|
||||||
volatile uint16_t keyboard_idle_count = 0;
|
volatile uint16_t keyboard_idle_count = 0;
|
||||||
static virtual_timer_t keyboard_idle_timer;
|
static virtual_timer_t keyboard_idle_timer;
|
||||||
static void keyboard_idle_timer_cb(void *arg);
|
static void keyboard_idle_timer_cb(void *arg);
|
||||||
|
@ -381,14 +381,17 @@ static uint16_t get_hword(uint8_t *p) {
|
||||||
* Other Device Required Optional Optional Optional Optional Optional
|
* Other Device Required Optional Optional Optional Optional Optional
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined(SHARED_EP_ENABLE) && !defined(KEYBOARD_SHARED_EP)
|
|
||||||
static uint8_t set_report_buf[2] __attribute__((aligned(2)));
|
static uint8_t set_report_buf[2] __attribute__((aligned(2)));
|
||||||
static void set_led_transfer_cb(USBDriver *usbp) {
|
static void set_led_transfer_cb(USBDriver *usbp) {
|
||||||
if ((set_report_buf[0] == REPORT_ID_KEYBOARD) || (set_report_buf[0] == REPORT_ID_NKRO)) {
|
if (usbp->setup[6] == 2) { /* LSB(wLength) */
|
||||||
keyboard_led_stats = set_report_buf[1];
|
uint8_t report_id = set_report_buf[0];
|
||||||
|
if ((report_id == REPORT_ID_KEYBOARD) || (report_id == REPORT_ID_NKRO)) {
|
||||||
|
keyboard_led_stats = set_report_buf[1];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
keyboard_led_stats = set_report_buf[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Callback for SETUP request on the endpoint 0 (control) */
|
/* Callback for SETUP request on the endpoint 0 (control) */
|
||||||
static bool usb_request_hook_cb(USBDriver *usbp) {
|
static bool usb_request_hook_cb(USBDriver *usbp) {
|
||||||
|
@ -444,18 +447,12 @@ static bool usb_request_hook_cb(USBDriver *usbp) {
|
||||||
case USB_RTYPE_DIR_HOST2DEV:
|
case USB_RTYPE_DIR_HOST2DEV:
|
||||||
switch (usbp->setup[1]) { /* bRequest */
|
switch (usbp->setup[1]) { /* bRequest */
|
||||||
case HID_SET_REPORT:
|
case HID_SET_REPORT:
|
||||||
switch (usbp->setup[4]) { /* LSB(wIndex) (check MSB==0 and wLength==1?) */
|
switch (usbp->setup[4]) { /* LSB(wIndex) (check MSB==0?) */
|
||||||
|
case KEYBOARD_INTERFACE:
|
||||||
#if defined(SHARED_EP_ENABLE) && !defined(KEYBOARD_SHARED_EP)
|
#if defined(SHARED_EP_ENABLE) && !defined(KEYBOARD_SHARED_EP)
|
||||||
case SHARED_INTERFACE:
|
case SHARED_INTERFACE:
|
||||||
usbSetupTransfer(usbp, set_report_buf, sizeof(set_report_buf), set_led_transfer_cb);
|
|
||||||
return TRUE;
|
|
||||||
break;
|
|
||||||
#endif
|
#endif
|
||||||
|
usbSetupTransfer(usbp, set_report_buf, sizeof(set_report_buf), set_led_transfer_cb);
|
||||||
case KEYBOARD_INTERFACE:
|
|
||||||
/* keyboard_led_stats = <read byte from next OUT report>
|
|
||||||
* keyboard_led_stats needs be word (or dword), otherwise we get an exception on F0 */
|
|
||||||
usbSetupTransfer(usbp, (uint8_t *)&keyboard_led_stats, 1, NULL);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -613,7 +610,7 @@ static void keyboard_idle_timer_cb(void *arg) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* LED status */
|
/* LED status */
|
||||||
uint8_t keyboard_leds(void) { return (uint8_t)(keyboard_led_stats & 0xFF); }
|
uint8_t keyboard_leds(void) { return keyboard_led_stats; }
|
||||||
|
|
||||||
/* prepare and start sending a report IN
|
/* prepare and start sending a report IN
|
||||||
* not callable from ISR or locked state */
|
* not callable from ISR or locked state */
|
||||||
|
|
Loading…
Reference in a new issue