С телефона непральна выразился наверное: без хаба у меня. #define USB_Class_EPbd_IN ep[1].in
#define USB_Class_EPbsz_IN 64
#define USB_Class_EPbd_OUT ep[2].out
#define USB_Class_EPbsz_OUT 64
#define USB_Class_EPbd_Ctrl ep[3].in
#define USB_Class_EPbsz_Ctrl 16
const u8_t USB_DevDescriptor_HIDkbd[] = {
// 12.01.0110.00.00.00.08.VVVV.PPPP.vvvv.ss.ss.ss.01
0x12, 0x01, 0x10, 0x01, 0x00, 0x00, 0x00, 0x40,
0x6E, 0x04, 0xC3, 0x52, 0x23, 0x01,
0x01, 0x02, 0x03, 0x01,
};
const u8_t USB_CfgDescriptor_HIDkbd[] = {
// 09.02.LLLL.01.01.ss.80.II // Config descriptor
0x09, 0x02, (9+9+9+7), 0x00, 0x01, 0x01, 0x00, 0xA0, 32,
// 09.04.00.00.01.03.0b.01.ss // Interface descriptor
0x09, 0x04, 0x00, 0x00, 0x01, 0x03, 0x01, 0x01, 0x00, // Boot device
// 0x09, 0x04, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, // Non-Boot device
0x09, 0x21, 0x10, 0x01, 0x00, 0x01, 0x22, (30*2)+1/*+(15*2)+1*/+(13*2)+1, 0x00,
0x07, 0x05, 0x83, 0x03, 0x10, 0x00, 0x01,
};
const u8_t USB_HIDDescriptor_HIDkbd0[] = {
// [30*2+1] Main kbd
0x05, 0x01, // g; UsagePage GENERIC DESKTOP
0x09, 0x06, // l; Usage: Keyboard
0xa1, 0x01, // m; SOC; Application
0x85, 0x01, // g; Report ID
// Alt Ctrl Shift
0x05, 0x07, // g; UsagePage KEYBOARD
0x19, 0xe0, // l; Usage Minimum:
0x29, 0xe7, // l; Usage Maximum:
0x15, 0x00, // g; Logical Minimum:
0x25, 0x01, // g; Logical Maximum:
0x75, 0x01, // g; Report Size:
0x95, 0x08, // g; Report Count:
0x81, 0x02, // m; Input; Data + Var
// State LEDs
// NumLock,CapsLock,ScrollLock,Compose,x, Mute,Battery run,Battery Low
0x95, 0x08, // g; Report Count:
0x75, 0x01, // g; Report Size:
0x05, 0x08, // g; UsagePage LED
0x19, 0x01, // l; Usage Minimum:
0x29, 0x05, // l; Usage Maximum:
0x09, 0x09, // l; Usage: Mute
0x09, 0x1B, // l; Usage: Battery run
0x09, 0x1D, // l; Usage: Battery Low
0x91, 0x02, // m; Output; Data + Var
// main Kbd
0x95, 0x06, // g; Report Count:
0x75, 0x08, // g; Report Size:
0x15, 0x00, // g; Logical Minimum:
0x26, 0xff, 0x00, // g; Logical Maximum:
0x05, 0x07, // g; UsagePage KEYBOARD
0x19, 0x00, // l; Usage Minimum:
0x2a, 0xff, 0x00, // l; Usage Maximum:
0x81, 0x00, // m; Input;
0xc0, // m; EOC
// [15*2+1]
//0x05, 0x01, // g; UsagePage GENERIC DESKTOP
//0x09, 0x80, // l; Usage: System Control
//0xa1, 0x01, // m; SOC; Application
// 0x85, 0x02, // g; Report ID
// // Menu, Power, etc
// 0x05, 0x01, // g; UsagePage GENERIC DESKTOP
// 0x19, 0x81, // l; Usage Minimum:
// 0x29, 0x8D, // l; Usage Maximum:
// 0x15, 0x00, // g; Logical Minimum:
// 0x25, 0x01, // g; Logical Maximum:
// 0x95, 0x0D, // g; Report Count:
// 0x75, 0x01, // g; Report Size:
// 0x81, 0x02, // m; Input; Data + Var
//
// // Fill
// 0x95, 0x03, // g; Report Count:
// 0x75, 0x01, // g; Report Size:
// 0x81, 0x01, // m; Input; Const
//0xc0, // m; EOC
// [13*2+1] generic IO
0x06, 0x00, 0xFF, // g; UsagePage CONSUMER PAGE
0x09, 0x01, // l; Usage: Consumer Control
0xa1, 0x01, // m; SOC; Application
0x15, 0x00, // g; Logical Minimum:
0x26, 0xFF, 0x00, // g; Logical Maximum:
0x75, 0x08, // g; Report Size:
// ID[1] + Flags[15] + Format String[112]
0x85, 0x03, // g; Report ID
0x95, 127, // g; Report Count:
0x09, 0x01, // l; Usage:
0xB1, 0x00, // m; Feature; Data + Arr
0x09, 0x01, // l; Usage:
0x81, 0x00, // m; Input; Data + Arr
// ID[1] + RW I/O[127]
// 0x85, 0x04, // g; Report ID
// 0x09, 0x01, // l; Usage:
// 0x91, 0x00, // m; Output; Data + Arr
// 0x09, 0x01, // l; Usage:
// 0x81, 0x00, // m; Input; Data + Arr
0xc0, // m; EOC
};