Moved HID report descriptors to their implementation

This commit is contained in:
NicoHood 2015-10-10 12:28:12 +02:00
parent 652e590e23
commit 59bf10efeb
4 changed files with 83 additions and 92 deletions

View file

@ -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)
{

View file

@ -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[];

View file

@ -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));

View file

@ -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;