Hi Jan,
It looks like the hotfixes is used for Window XP, but I am running on Windows 7. I am able to use the IAD descriptor and get my device to enumerate with 2 device but the CDC class is scanned in the system as an Imaging Device. Can you take a look at my descriptor as follow and shed some light? My goal is to get my usb device to support CDC + vendor specific class. Thank you!
uint8_t device_descriptor[] = {
0x12, /* bLength = 18 */
0x01, /* bDescriptorType = Device (1) */
0x10, 0x01, /* bcdUSB(L/H) USB spec rev (BCD) */
0xEF, /* bDeviceClass = Generic Class */
0x02, /* bDeviceSubClass */
0x01, /* bDeviceProtocol */
0x40, /* bMaxPacketSize0 is 64 bytes */
0x6A, 0x0B, /* idVendor(L/H) -- 0x0B6A*/
0x78, 0x56, /* idProduct(L/H) -- 4401 */
0x00, 0x01, /* bcdDevice -- 01.00 */
0x01, /* iManufacturer Descriptor ID */
0x02, /* iProduct Descriptor ID */
0x00, /* iSerialNumber = (0) No string */
0x01 /* bNumConfigurations */
};
uint8_t config_descriptor[] = {
0x09, /* bLength = 9 */
0x02, /* bDescriptorType = Config (2) */
0x54, 0x00, /* wTotalLength(L/H) */
0x03, /* bNumInterfaces */
0x01, /* bConfigValue */
0x00, /* iConfiguration */
0xc0, /* bmAttributes (self-powered, no remote wakeup) */
0x01, /* MaxPower is 2ma (units are 2ma/bit) */
/* IAD - Interface Association Descriptor */
0x08, /* bLength */
0x0B, /* bDescriptorType */
0x00, /* bFirstInterface */
0x02, /* bInterfaceCount */
0x02, /* bFunctionClass - Com Class */
0x00, /* bFunctionSubClass */
0x00, /* bFunctionProtocol */
0x00, /* iFunction */
/* First Interface Descriptor For Comm Class Interface */
0x09, /* bLength = 9 */
0x04, /* bDescriptorType = Interface (4) */
0x00, /* bInterfaceNumber */
0x00, /* bAlternateSetting */
0x01, /* bNumEndpoints (one for OUT) */
0x02, /* bInterfaceClass = Communications Interface Class (2) */
0x02, /* bInterfaceSubClass = Abstract Control Model (2) */
0x01, /* bInterfaceProtocol = Common "AT" commands (1), */
/* no class specific protocol (0) */
0x00, /* iInterface */
/* Header Functional Descriptor */
0x05, /* bFunctionalLength = 5 */
0x24, /* bDescriptorType */
0x00, /* bDescriptorSubtype */
0x10, 0x01, /* bcdCDC */
/* Call Management Descriptor */
0x05, /* bFunctionalLength = 5 */
0x24, /* bDescriptorType */
0x01, /* bDescriptorSubtype */
0x03, /* bmCapabilities = Device handles call management itself (0x01), */
/* management over data class (0x02) */
0x01, /* bmDataInterface */
/* Abstract Control Management Functional Descriptor */
0x04, /* bFunctionalLength = 4 */
0x24, /* bDescriptorType */
0x02, /* bDescriptorSubtype */
0x02, /* bmCapabilities */
/* Union Functional Descriptor */
0x05, /* bFunctionalLength = 5 */
0x24, /* bDescriptorType */
0x06, /* bDescriptorSubtype */
0x00, /* bmMasterInterface */
0x01, /* bmSlaveInterface0 */
/* IN Endpoint 3 (Descriptor #1) */
0x07, /* bLength */
0x05, /* bDescriptorType (Endpoint) */
0x83, /* bEndpointAddress (EP3-IN) */
0x03, /* bmAttributes (interrupt) */
0x40, 0x00, /* wMaxPacketSize(L/H) (64) */
0xff, /* bInterval (255 milliseconds) */
/* Second Interface Descriptor For Data Interface */
0x09, /* bLength */
0x04, /* bDescriptorType (Interface) */
0x01, /* bInterfaceNumber */
0x00, /* bAlternateSetting */
0x02, /* bNumEndpoints */
0x0a, /* bInterfaceClass = Data Interface (10) */
0x00, /* bInterfaceSubClass = none (0) */
0x00, /* bInterfaceProtocol = No class specific protocol (0) */
0x00, /* biInterface = No Text String (0) */
/* OUT Endpoint 1 (Descriptor #2) */
0x07, /* bLength */
0x05, /* bDescriptorType (Endpoint) */
0x01, /* bEndpointAddress (EP1-OUT) */
0x02, /* bmAttributes (bulk) */
0x40, 0x00, /* wMaxPacketSize(L/H) (64) */
0x00, /* bInterval (N/A) */
/* IN Endpoint 2 (Descriptor #3) */
0x07, /* bLength */
0x05, /* bDescriptorType (Endpoint) */
0x82, /* bEndpointAddress (EP2-IN) */
0x02, /* bmAttributes (bulk) */
0x40, 0x00, /* wMaxPacketSize(L/H) (64) */
0x00, /* bInterval (N/A) */
/* Third interface - Vendor Specific -
(Serial communication via endpoint 0) */
0x09, /* bLength = 9 */
0x04, /* bDescriptorType = Interface (4) */
0x02, /* bInterfaceNumber */
0x00, /* bAlternateSetting */
0x00, /* bNumEndpoints (one for OUT) */
0xFF, /* bInterfaceClass = Vendor Specific */
0xFF, /* bInterfaceSubClass = Abstract Control Model (2) */
0xFF, /* bInterfaceProtocol = Common "AT" commands (1), */
/* no class specific protocol (0) */
0x00 /* iInterface */