V-USB: implement NKRO (#22398)
This commit is contained in:
parent
cbf538aaaa
commit
4601f339e4
1 changed files with 45 additions and 4 deletions
|
@ -230,10 +230,6 @@ static void send_keyboard(report_keyboard_t *report) {
|
||||||
keyboard_report_sent = *report;
|
keyboard_report_sent = *report;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void send_nkro(report_nkro_t *report) {
|
|
||||||
// TODO: Implement NKRO
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef KEYBOARD_SHARED_EP
|
#ifndef KEYBOARD_SHARED_EP
|
||||||
# define MOUSE_IN_EPNUM 3
|
# define MOUSE_IN_EPNUM 3
|
||||||
# define SHARED_IN_EPNUM 3
|
# define SHARED_IN_EPNUM 3
|
||||||
|
@ -242,6 +238,12 @@ static void send_nkro(report_nkro_t *report) {
|
||||||
# define SHARED_IN_EPNUM 1
|
# define SHARED_IN_EPNUM 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void send_nkro(report_nkro_t *report) {
|
||||||
|
#ifdef NKRO_ENABLE
|
||||||
|
send_report(3, report, sizeof(report_nkro_t));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
static void send_mouse(report_mouse_t *report) {
|
static void send_mouse(report_mouse_t *report) {
|
||||||
#ifdef MOUSE_ENABLE
|
#ifdef MOUSE_ENABLE
|
||||||
send_report(MOUSE_IN_EPNUM, report, sizeof(report_mouse_t));
|
send_report(MOUSE_IN_EPNUM, report, sizeof(report_mouse_t));
|
||||||
|
@ -433,6 +435,45 @@ const PROGMEM uchar shared_hid_report[] = {
|
||||||
# define SHARED_REPORT_STARTED
|
# define SHARED_REPORT_STARTED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef NKRO_ENABLE
|
||||||
|
// NKRO report descriptor
|
||||||
|
0x05, 0x01, // Usage Page (Generic Desktop)
|
||||||
|
0x09, 0x06, // Usage (Keyboard)
|
||||||
|
0xA1, 0x01, // Collection (Application)
|
||||||
|
0x85, REPORT_ID_NKRO, // Report ID
|
||||||
|
// Modifiers (8 bits)
|
||||||
|
0x05, 0x07, // Usage Page (Keyboard/Keypad)
|
||||||
|
0x19, 0xE0, // Usage Minimum (Keyboard Left Control)
|
||||||
|
0x29, 0xE7, // Usage Maximum (Keyboard Right GUI)
|
||||||
|
0x15, 0x00, // Logical Minimum (0)
|
||||||
|
0x25, 0x01, // Logical Maximum (1)
|
||||||
|
0x95, 0x08, // Report Count (8)
|
||||||
|
0x75, 0x01, // Report Size (1)
|
||||||
|
0x81, 0x02, // Input (Data, Variable, Absolute)
|
||||||
|
// Keycodes
|
||||||
|
0x05, 0x07, // Usage Page (Keyboard/Keypad)
|
||||||
|
0x19, 0x00, // Usage Minimum (0)
|
||||||
|
0x29, NKRO_REPORT_BITS * 8 - 1, // Usage Maximum
|
||||||
|
0x15, 0x00, // Logical Minimum (0)
|
||||||
|
0x25, 0x01, // Logical Maximum (1)
|
||||||
|
0x95, NKRO_REPORT_BITS * 8, // Report Count
|
||||||
|
0x75, 0x01, // Report Size (1)
|
||||||
|
0x81, 0x02, // Input (Data, Variable, Absolute)
|
||||||
|
|
||||||
|
// Status LEDs (5 bits)
|
||||||
|
0x05, 0x08, // Usage Page (LED)
|
||||||
|
0x19, 0x01, // Usage Minimum (Num Lock)
|
||||||
|
0x29, 0x05, // Usage Maximum (Kana)
|
||||||
|
0x95, 0x05, // Report Count (5)
|
||||||
|
0x75, 0x01, // Report Size (1)
|
||||||
|
0x91, 0x02, // Output (Data, Variable, Absolute)
|
||||||
|
// LED padding (3 bits)
|
||||||
|
0x95, 0x01, // Report Count (1)
|
||||||
|
0x75, 0x03, // Report Size (3)
|
||||||
|
0x91, 0x03, // Output (Constant)
|
||||||
|
0xC0, // End Collection
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef MOUSE_ENABLE
|
#ifdef MOUSE_ENABLE
|
||||||
// Mouse report descriptor
|
// Mouse report descriptor
|
||||||
0x05, 0x01, // Usage Page (Generic Desktop)
|
0x05, 0x01, // Usage Page (Generic Desktop)
|
||||||
|
|
Loading…
Reference in a new issue