diff options
Diffstat (limited to 'tmk_core')
| -rw-r--r-- | tmk_core/protocol/vusb/vusb.c | 49 | 
1 files changed, 45 insertions, 4 deletions
| diff --git a/tmk_core/protocol/vusb/vusb.c b/tmk_core/protocol/vusb/vusb.c index 1750afc562..d09b2f19b7 100644 --- a/tmk_core/protocol/vusb/vusb.c +++ b/tmk_core/protocol/vusb/vusb.c @@ -230,10 +230,6 @@ static void send_keyboard(report_keyboard_t *report) {      keyboard_report_sent = *report;  } -static void send_nkro(report_nkro_t *report) { -    // TODO: Implement NKRO -} -  #ifndef KEYBOARD_SHARED_EP  #    define MOUSE_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  #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) {  #ifdef MOUSE_ENABLE      send_report(MOUSE_IN_EPNUM, report, sizeof(report_mouse_t)); @@ -433,6 +435,45 @@ const PROGMEM uchar shared_hid_report[] = {  #    define SHARED_REPORT_STARTED  #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      // Mouse report descriptor      0x05, 0x01,            // Usage Page (Generic Desktop) | 
