CDC Architecture
The host operating system (OS) enumerates the device using the control endpoints. Once the enumeration phase is done, the host can configure the device by sending class-specific requests to the Communications Class Interface (CCI) via the control endpoints. The class-specific requests vary according to the CDC subclasses. Micrium’s CDC base class offers the possibility to allocate an interrupt endpoint for event notification, depending on the subclass needs.
Following enumeration and configuration of the device, the host can start the transmission/reception of data to/from the device using the bulk endpoints belonging to the Data Class Interface (DCI). Isochronous endpoints are not supported in the current implementation. The CDC base class enables you to have several DCIs along with the CCI. The application can communicate with the host using the communication API offered by the CDC subclass.
As a CDC function is described by a minimum of two interfaces, when the CDC function is used with other class functions to form a composite device, the Interface Association Descriptor (IAD) must be present in the Configuration descriptor. IAD groups two or more interfaces so that the host sees these interfaces as one unique class function. It allows the host to load the same driver for all these interfaces to manage the CDC function. As soon as the CDC class is added to a configuration during the class initialization, the µC/USB-Device stack automatically configures the use of IAD for this CDC function. Thus, IAD will be always part of the Configuration descriptor whatever the device type, single or composite.
IAD is supported under Mac OS X 10.7 and later. Prior versions of Mac OS X do not support IADs, and moreover can only support non-composite, single function CDC devices. Nevertheless given that USB device stack always uses IAD, a single CDC device won't work with Mac OS X prior to version 10.7.