С телефона непральна выразился наверное: без хаба у меня. #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
};