23static int cdc_parse_cs_interface(
CDC_DEV_T *cdev, uint8_t *buffer,
int size)
31 while(size >=
sizeof(DESC_HDR_T))
33 header = (DESC_HDR_T *)buffer;
35 if (header->bLength < 2)
37 CDC_DBGMSG(
"Invalid descriptor length of %d\n", header->bLength);
41 if (header->bDescriptorType != CDC_CS_INTERFACE)
44 cifd = (CDC_IF_HDR_T *)header;
46 CDC_DBGMSG(
"CS_INTERFACE: 0x%x, ", cifd->bDescriptorSubtype);
48 switch (cifd->bDescriptorSubtype)
51 CDC_DBGMSG(
"Header Functional\n");
53 case CDC_DT_CALL_MANAGE:
54 CDC_DBGMSG(
"Call Management\n");
57 CDC_DBGMSG(
"Abstract Control Management\n");
59 case CDC_DT_LINE_MANAGE:
60 CDC_DBGMSG(
"Direct Line Management\n");
62 case CDC_DT_TEL_RINGER:
63 CDC_DBGMSG(
"Telephone Ringer\n");
65 case CDC_DT_TEL_OPER_MODES:
66 CDC_DBGMSG(
"Telephone Operational Modes\n");
68 case CDC_DT_CALL_LINE_CAP:
69 CDC_DBGMSG(
"Telephone Call and Line State Reporting Capabilities\n");
72 CDC_DBGMSG(
"Union Functional\n");
73 if (cifd->bLength >= 5)
75 if (cifd->bLength >= 6)
77 CDC_DBGMSG(
"Union Functional length %d, not supported!\n", cifd->bLength);
80 case CDC_DT_COUNTRY_SEL:
81 CDC_DBGMSG(
"Country Selection\n");
83 case CDC_DT_USB_TERMINAL:
84 CDC_DBGMSG(
"USB Terminal\n");
86 case CDC_DT_NET_CHANNEL:
87 CDC_DBGMSG(
"Network Channel Terminal\n");
89 case CDC_DT_PROTO_UNIT:
90 CDC_DBGMSG(
"Protocol Unit\n");
92 case CDC_DT_EXTENT_UNIT:
93 CDC_DBGMSG(
"Extension Unit\n");
95 case CDC_DT_MULTI_CHANNEL:
96 CDC_DBGMSG(
"Multi-Channel Management\n");
98 case CDC_DT_CAPI_CTRL:
99 CDC_DBGMSG(
"CAPI Control Management\n");
101 case CDC_DT_ETHERNET_FUNC:
102 CDC_DBGMSG(
"Ethernet Networking Functional\n");
104 case CDC_DT_ATM_FUNC:
105 CDC_DBGMSG(
"ATM Networking Functional\n");
109 buffer += header->bLength;
110 parsed += header->bLength;
111 size -= header->bLength;
121 UDEV_T *udev = cdev->
udev;
128 config = (DESC_CONF_T *)udev->cfd_buff;
129 bptr = (uint8_t *)config;
130 bptr += config->bLength;
131 size = config->wTotalLength - config->bLength;
133 while (size >=
sizeof(DESC_HDR_T))
135 header = (DESC_HDR_T *)bptr;
137 if ((header->bLength > size) || (header->bLength < 2))
139 CDC_DBGMSG(
"Error - invalid descriptor length of %d\n", header->bLength);
146 if (header->bDescriptorType == USB_DT_INTERFACE)
148 ifd = (DESC_IF_T *)header;
149 if (ifd->bInterfaceNumber == cdev->
iface_cdc->if_num)
151 bptr += header->bLength;
152 size -= header->bLength;
156 bptr += header->bLength;
157 size -= header->bLength;
164 while (size >=
sizeof(DESC_HDR_T))
166 header = (DESC_HDR_T *)bptr;
168 if ((header->bLength > size) || (header->bLength < 2))
170 CDC_DBGMSG(
"Error - invalid descriptor length of %d\n", header->bLength);
177 if (header->bDescriptorType != CDC_CS_INTERFACE)
180 result = cdc_parse_cs_interface(cdev, bptr, size);
187 CDC_DBGMSG(
"CDC ifnum_cdc = %d\n", cdev->
iface_cdc->if_num);
190 CDC_DBGMSG(
"CDC ifnum_data = %d\n", cdev->
iface_data->if_num);
NuMicro peripheral access layer header file.
#define USBH_ERR_NOT_SUPPORTED
USB Host library header file.
USB Host CDC(Communication Device Class) driver header file.
USB Host library exported header file.