diff --git a/tmk_core/protocol/pico/iusb.c b/tmk_core/protocol/pico/iusb.c index 9dc3ea82e9..cbf7b9fc1c 100644 --- a/tmk_core/protocol/pico/iusb.c +++ b/tmk_core/protocol/pico/iusb.c @@ -27,10 +27,8 @@ #include "class/midi/midi_device.h" #include "device/dcd.h" -/* declarations */ uint8_t keyboard_leds(void) { - // TODO - return 0; + return get_keyboard_led_status(); } void send_keyboard(report_keyboard_t *report) { @@ -92,7 +90,7 @@ void send_consumer(uint16_t data) { tud_task(); } -void raw_hid_send(uint8_t* data, uint8_t length) { +void raw_hid_send(uint8_t *data, uint8_t length) { while (!tud_hid_n_ready(ITF_NUM_HID_RAW)) { tud_task(); if (!tud_ready()) { diff --git a/tmk_core/protocol/pico/pico.c b/tmk_core/protocol/pico/pico.c index 4152a50b46..b5807fb877 100644 --- a/tmk_core/protocol/pico/pico.c +++ b/tmk_core/protocol/pico/pico.c @@ -265,12 +265,14 @@ uint16_t tud_hid_get_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t static uint8_t keyboard_indicator_led; uint8_t get_keyboard_led_status(void) { return keyboard_indicator_led; } -__attribute__((weak)) void raw_hid_receive(uint8_t* data, uint8_t length) {} - // Invoked when received SET_REPORT control request or // received data on OUT endpoint ( Report ID = 0, Type = 0 ) void tud_hid_set_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize) { switch (itf) { + case ITF_NUM_HID_KEYBOARD: + // LED status + keyboard_indicator_led = buffer[0]; + break; case ITF_NUM_HID_RAW: raw_hid_receive((uint8_t*)buffer, bufsize); break; diff --git a/tmk_core/protocol/pico/usb_descriptors.h b/tmk_core/protocol/pico/usb_descriptors.h index c95d308760..ee0cb6b111 100644 --- a/tmk_core/protocol/pico/usb_descriptors.h +++ b/tmk_core/protocol/pico/usb_descriptors.h @@ -56,3 +56,5 @@ enum { HID_REPORT_SIZE(0x08), \ HID_OUTPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE | HID_NON_VOLATILE), \ HID_COLLECTION_END + +uint8_t get_keyboard_led_status(void);