Moved HID report descriptors to their implementation
This commit is contained in:
parent
652e590e23
commit
59bf10efeb
4 changed files with 83 additions and 92 deletions
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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[];
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue