From 59bf10efeb8579000ed5256933b3c883412e719c Mon Sep 17 00:00:00 2001 From: NicoHood Date: Sat, 10 Oct 2015 12:28:12 +0200 Subject: [PATCH] Moved HID report descriptors to their implementation --- src/HID-APIs/KeyboardAPI.cpp | 12 ----- src/HID-APIs/KeyboardAPI.h | 80 ---------------------------- src/MultiReport/ImprovedKeyboard.cpp | 36 +++++++++++++ src/SingleReport/BootKeyboard.cpp | 47 ++++++++++++++++ 4 files changed, 83 insertions(+), 92 deletions(-) diff --git a/src/HID-APIs/KeyboardAPI.cpp b/src/HID-APIs/KeyboardAPI.cpp index 58cd476..1bc6715 100644 --- a/src/HID-APIs/KeyboardAPI.cpp +++ b/src/HID-APIs/KeyboardAPI.cpp @@ -23,18 +23,6 @@ THE SOFTWARE. #include "KeyboardAPI.h" -const uint8_t _hidReportDescriptorKeyboard[] PROGMEM = { - HID_REPORT_KEYBOARD, -}; - -const uint8_t _hidMultiReportDescriptorKeyboard[] PROGMEM = { - HID_MULTIREPORT_KEYBOARD, -}; - -static_assert(sizeof _hidReportDescriptorKeyboard == HID_REPORT_KEYBOARD_SIZE, "Oops, sizes are not equal."); -static_assert(sizeof _hidMultiReportDescriptorKeyboard == HID_MULTIREPORT_KEYBOARD_SIZE, "Oops, sizes are not equal."); - - void KeyboardAPI::begin(void) { diff --git a/src/HID-APIs/KeyboardAPI.h b/src/HID-APIs/KeyboardAPI.h index 84bfe9a..5af6677 100644 --- a/src/HID-APIs/KeyboardAPI.h +++ b/src/HID-APIs/KeyboardAPI.h @@ -30,86 +30,6 @@ THE SOFTWARE. #include "HID-Tables.h" //TODO -#define HID_REPORT_KEYBOARD_START \ - 0x05, 0x01, /* USAGE_PAGE (Generic Desktop) 47 */ \ - 0x09, 0x06, /* USAGE (Keyboard) */ \ - 0xa1, 0x01 /* COLLECTION (Application) */ - -#define HID_REPORT_KEYBOARD_REPORTID \ - 0x85, HID_REPORTID_KEYBOARD /* REPORT_ID TODO order important?*/ - -#define HID_REPORT_KEYBOARD_START2 \ - 0x05, 0x07 /* USAGE_PAGE (Keyboard) */ - -#define HID_REPORT_KEYBOARD_MODIFIERS \ - /* Keyboard Modifiers (shift, alt, ...) */ \ - 0x19, 0xe0, /* USAGE_MINIMUM (Keyboard LeftControl) */ \ - 0x29, 0xe7, /* USAGE_MAXIMUM (Keyboard Right GUI) */ \ - 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ \ - 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ \ - 0x75, 0x01, /* REPORT_SIZE (1) */ \ - 0x95, 0x08, /* REPORT_COUNT (8) */ \ - 0x81, 0x02 /* INPUT (Data,Var,Abs) */ - -#define HID_REPORT_KEYBOARD_RESERVED \ - /* Reserved byte TODO consumer and or system?*/ \ - 0x95, 0x01, /* REPORT_COUNT (1) */ \ - 0x75, 0x08, /* REPORT_SIZE (8) */ \ - 0x81, 0x03 /* INPUT (Cnst,Var,Abs) */ \ - -#define HID_REPORT_KEYBOARD_KEYS \ - /* 6 Keyboard keys */ \ - 0x95, 0x06, /* REPORT_COUNT (6) */ \ - 0x75, 0x08, /* REPORT_SIZE (8) */ \ - 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ \ - 0x26, 0xE7, 0x00, /* LOGICAL_MAXIMUM (231) */ \ - 0x05, 0x07, /* USAGE_PAGE (Keyboard) */ \ - 0x19, 0x00, /* USAGE_MINIMUM (Reserved (no event indicated)) */ \ - 0x29, 0xE7, /* USAGE_MAXIMUM (Keyboard Right GUI) */ \ - 0x81, 0x00 /* INPUT (Data,Ary,Abs) */ - -#define HID_REPORT_KEYBOARD_LEDS \ - /* 5 LEDs for num lock etc */ \ - 0x05, 0x08, /* USAGE_PAGE (LEDs) */ \ - 0x19, 0x01, /* USAGE_MINIMUM (Num Lock) */ \ - 0x29, 0x05, /* USAGE_MAXIMUM (Kana) TODO */ \ - 0x95, 0x05, /* REPORT_COUNT (5) */ \ - 0x75, 0x01, /* REPORT_SIZE (1) */ \ - 0x91, 0x02, /* OUTPUT (Data,Var,Abs) */ \ - /* Reserved 3 bits TODO */ \ - 0x95, 0x01, /* REPORT_COUNT (1) */ \ - 0x75, 0x03, /* REPORT_SIZE (3) */ \ - 0x91, 0x03 /* OUTPUT (Cnst,Var,Abs) */ - -#define HID_REPORT_KEYBOARD_END \ - /* End */ \ - 0xc0 /* END_COLLECTION */ - -#define HID_REPORT_KEYBOARD \ -HID_REPORT_KEYBOARD_START, \ -HID_REPORT_KEYBOARD_START2, \ -HID_REPORT_KEYBOARD_MODIFIERS, \ -HID_REPORT_KEYBOARD_RESERVED, \ -HID_REPORT_KEYBOARD_KEYS, \ -HID_REPORT_KEYBOARD_LEDS, \ -HID_REPORT_KEYBOARD_END - -#define HID_MULTIREPORT_KEYBOARD \ -HID_REPORT_KEYBOARD_START, \ -HID_REPORT_KEYBOARD_REPORTID, \ -HID_REPORT_KEYBOARD_START2, \ -HID_REPORT_KEYBOARD_MODIFIERS, \ -HID_REPORT_KEYBOARD_RESERVED, \ -HID_REPORT_KEYBOARD_KEYS, \ -HID_REPORT_KEYBOARD_END - -#define HID_REPORT_KEYBOARD_SIZE sizeof ((uint8_t[]) {HID_REPORT_KEYBOARD}) -#define HID_MULTIREPORT_KEYBOARD_SIZE sizeof ((uint8_t[]) {HID_MULTIREPORT_KEYBOARD}) - -extern const uint8_t _hidReportDescriptorKeyboard[HID_REPORT_KEYBOARD_SIZE] PROGMEM; -extern const uint8_t _hidMultiReportDescriptorKeyboard[HID_MULTIREPORT_KEYBOARD_SIZE] PROGMEM; - - typedef union{ // Low level key report: up to 6 keys and shift, ctrl etc at once uint8_t whole8[]; diff --git a/src/MultiReport/ImprovedKeyboard.cpp b/src/MultiReport/ImprovedKeyboard.cpp index 7e391a6..ff4fecb 100644 --- a/src/MultiReport/ImprovedKeyboard.cpp +++ b/src/MultiReport/ImprovedKeyboard.cpp @@ -23,6 +23,42 @@ THE SOFTWARE. #include "ImprovedKeyboard.h" +static const uint8_t _hidMultiReportDescriptorKeyboard[] PROGMEM = { + // Keyboard + 0x05, 0x01, /* USAGE_PAGE (Generic Desktop) 47 */ + 0x09, 0x06, /* USAGE (Keyboard) */ + 0xa1, 0x01, /* COLLECTION (Application) */ + 0x85, HID_REPORTID_KEYBOARD, /* REPORT_ID TODO order important? */ + 0x05, 0x07, /* USAGE_PAGE (Keyboard) */ + + /* Keyboard Modifiers (shift, alt, ...) */ + 0x19, 0xe0, /* USAGE_MINIMUM (Keyboard LeftControl) */ + 0x29, 0xe7, /* USAGE_MAXIMUM (Keyboard Right GUI) */ + 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ + 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ + 0x75, 0x01, /* REPORT_SIZE (1) */ + 0x95, 0x08, /* REPORT_COUNT (8) */ + 0x81, 0x02, /* INPUT (Data,Var,Abs) */ + + /* Reserved byte */ + 0x95, 0x01, /* REPORT_COUNT (1) */ + 0x75, 0x08, /* REPORT_SIZE (8) */ + 0x81, 0x03, /* INPUT (Cnst,Var,Abs) */ + + /* 6 Keyboard keys */ + 0x95, 0x06, /* REPORT_COUNT (6) */ + 0x75, 0x08, /* REPORT_SIZE (8) */ + 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ + 0x26, 0xE7, 0x00, /* LOGICAL_MAXIMUM (231) */ + 0x05, 0x07, /* USAGE_PAGE (Keyboard) */ + 0x19, 0x00, /* USAGE_MINIMUM (Reserved (no event indicated)) */ + 0x29, 0xE7, /* USAGE_MAXIMUM (Keyboard Right GUI) */ + 0x81, 0x00, /* INPUT (Data,Ary,Abs) */ + + /* End */ + 0xc0 /* END_COLLECTION */ +}; + Keyboard_::Keyboard_(void) { static HIDDescriptorListNode node(_hidMultiReportDescriptorKeyboard, sizeof(_hidMultiReportDescriptorKeyboard)); diff --git a/src/SingleReport/BootKeyboard.cpp b/src/SingleReport/BootKeyboard.cpp index 8e6b811..96c393f 100644 --- a/src/SingleReport/BootKeyboard.cpp +++ b/src/SingleReport/BootKeyboard.cpp @@ -24,6 +24,53 @@ THE SOFTWARE. #include "BootKeyboard.h" #include "HID-Driver.h" +static const uint8_t _hidReportDescriptorKeyboard[] PROGMEM = { + // Keyboard + 0x05, 0x01, /* USAGE_PAGE (Generic Desktop) 47 */ + 0x09, 0x06, /* USAGE (Keyboard) */ + 0xa1, 0x01, /* COLLECTION (Application) */ + 0x05, 0x07, /* USAGE_PAGE (Keyboard) */ + + /* Keyboard Modifiers (shift, alt, ...) */ + 0x19, 0xe0, /* USAGE_MINIMUM (Keyboard LeftControl) */ + 0x29, 0xe7, /* USAGE_MAXIMUM (Keyboard Right GUI) */ + 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ + 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ + 0x75, 0x01, /* REPORT_SIZE (1) */ + 0x95, 0x08, /* REPORT_COUNT (8) */ + 0x81, 0x02, /* INPUT (Data,Var,Abs) */ + + /* Reserved byte TODO consumer and or system */ + 0x95, 0x01, /* REPORT_COUNT (1) */ + 0x75, 0x08, /* REPORT_SIZE (8) */ + 0x81, 0x03, /* INPUT (Cnst,Var,Abs) */ + + /* 5 LEDs for num lock etc, 3 left for advanced, custom usage */ + 0x05, 0x08, /* USAGE_PAGE (LEDs) */ + 0x19, 0x01, /* USAGE_MINIMUM (Num Lock) */ + 0x29, 0x05, /* USAGE_MAXIMUM (Kana) TODO*/ + 0x95, 0x08, /* REPORT_COUNT (8) */ + 0x75, 0x01, /* REPORT_SIZE (1) */ + 0x91, 0x02, /* OUTPUT (Data,Var,Abs) */ + /* Reserved 3 bits TODO */ + //0x95, 0x01, /* REPORT_COUNT (1) */ + //0x75, 0x03, /* REPORT_SIZE (3) */ + //0x91, 0x03, /* OUTPUT (Cnst,Var,Abs) */ + + /* 6 Keyboard keys */ + 0x95, 0x06, /* REPORT_COUNT (6) */ + 0x75, 0x08, /* REPORT_SIZE (8) */ + 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ + 0x26, 0xE7, 0x00, /* LOGICAL_MAXIMUM (231) */ + 0x05, 0x07, /* USAGE_PAGE (Keyboard) */ + 0x19, 0x00, /* USAGE_MINIMUM (Reserved (no event indicated)) */ + 0x29, 0xE7, /* USAGE_MAXIMUM (Keyboard Right GUI) */ + 0x81, 0x00, /* INPUT (Data,Ary,Abs) */ + + /* End */ + 0xc0 /* END_COLLECTION */ +}; + BootKeyboard_::BootKeyboard_(void) : PUSBListNode(1, 1, epType), protocol(1), idle(1), leds(0) { epType[0] = EP_TYPE_INTERRUPT_IN;