Firstly - AVR USB is great thing!
So. My problem is that i build a Keyboard, that must to know a boot protcol and also it has a Multimedia keys, such as Vol Up, Dn, Mute oan so on. 18 Buttons at all. All this buttons are in Consumer device section. also i need one annother endpoint to create.
I have expanded usbDescriptorConfiguration[]
for one endpoint. Now it looks like this:
Code: Select all
PROGMEM char usbDescriptorConfiguration[] = { // USB configuration descriptor
9, // 0 // sizeof(usbDescriptorConfiguration): length of descriptor in bytes
USBDESCR_CONFIG, // 1 // descriptor type
18 + 7 * USB_CFG_HAVE_INTRIN_ENDPOINT + (USB_CFG_DESCR_PROPS_HID & 0xff), 0, // 2 // total length of data returned (including inlined descriptors)
1, // 4 // number of interfaces in this configuration
1, // 5 // index of this configuration
0, // 6 // configuration name string index
(char)USBATTR_BUSPOWER, // 7 // attributes
USB_CFG_MAX_BUS_POWER / 2, // 8 // max USB current in 2mA units
// interface descriptor Keyboard:
9, // 0 // sizeof(usbDescrInterface): length of descriptor in bytes
USBDESCR_INTERFACE, // 1 // descriptor type
0, // 2 // index of this interface
0, // 3 // alternate setting for this interface
USB_CFG_HAVE_INTRIN_ENDPOINT, // 4 // endpoints excl 0: number of endpoint descriptors to follow
USB_CFG_INTERFACE_CLASS, // 5
USB_CFG_INTERFACE_SUBCLASS, // 6
USB_CFG_INTERFACE_PROTOCOL, // 7
0, // 8 // string index for interface
9, // 0 // sizeof(usbDescrHID): length of descriptor in bytes
USBDESCR_HID, // 1 // descriptor type: HID
0x01, 0x01, // 2 // BCD representation of HID version
0x00, // 4 // target country code
0x01, // 5 // number of HID Report (or other HID class) Descriptor infos to follow
0x22, // 6 // descriptor type: report
USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH, 0, // 7 // total length of report descriptor
7, // 0 // sizeof(usbDescrEndpoint)
USBDESCR_ENDPOINT, // 1 // descriptor type = endpoint
(char)0x81, // 2 // IN endpoint number 1
0x03, // 4 // attrib: Interrupt endpoint
8, 0, // 5 // maximum packet size
USB_CFG_INTR_POLL_INTERVAL, // 6 // in ms
// interface descriptor Consumer Device:
9, // 0 // sizeof(usbDescrInterface): length of descriptor in bytes
USBDESCR_INTERFACE, // 1 // descriptor type
1, // 2 // index of this interface
0, // 3 // alternate setting for this interface
USB_CFG_HAVE_INTRIN_ENDPOINT3, // 4 // endpoints excl 0: number of endpoint descriptors to follow
USB_CFG_INTERFACE_CLASS_1, // 5
USB_CFG_INTERFACE_SUBCLASS_1, // 6
USB_CFG_INTERFACE_PROTOCOL_1, // 7
0, // 8 // string index for interface
9, // 0 // sizeof(usbDescrHID): length of descriptor in bytes
USBDESCR_HID, // 1 // descriptor type: HID
0x01, 0x01, // 2 // BCD representation of HID version
0x00, // 4 // target country code
0x01, // 5 // number of HID Report (or other HID class) Descriptor infos to follow
0x22, // 6 // descriptor type: report
USB_CFG_HID_REPORT_DESCRIPTOR_1_LENGTH, 0, // 7 // total length of report descriptor
7, // 0 // sizeof(usbDescrEndpoint)
USBDESCR_ENDPOINT, // 1 // descriptor type = endpoint
(char)0x82, // 2 // IN endpoint number 1
0x03, // 4 // attrib: Interrupt endpoint
8, 0, // 5 // maximum packet size
USB_CFG_INTR_POLL_INTERVAL, // 6 // in ms
};
What schould i do next?
How to send second Hid Report Decriptor to the host. I have seen, that the actualy Hid descriptor is send on request from host. Where can i see info, what Report Descriptor is requested? Or do i have to expand the old one with Consumer Devices Page too?
Thanks in advance,
Alexei
PS. thouse number in comment are offsets, for better to find it in documentation.