/* ---------------------------------------------------------------------------- * ATMEL Microcontroller Software Support * ---------------------------------------------------------------------------- * Copyright (c) 2010, Atmel Corporation * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the disclaimer below. * * Atmel's name may not be used to endorse or promote products derived from * this software without specific prior written permission. * * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ---------------------------------------------------------------------------- */ /** \file * * Definitions and classes for USB CDC class descriptors. */ #ifndef _CDCDESCRIPTORS_H_ #define _CDCDESCRIPTORS_H_ /** \addtogroup usb_cdc *@{ */ /*---------------------------------------------------------------------------- * Includes *----------------------------------------------------------------------------*/ #include /*---------------------------------------------------------------------------- * Definitions *----------------------------------------------------------------------------*/ /** \addtogroup usb_cdc_ver USB CDC Specification Release Numbers * @{ * This section list the CDC Spec. Release Numbers. * - \ref CDCGenericDescriptor_CDC1_10 */ /** Identify CDC specification version 1.10. */ #define CDCGenericDescriptor_CDC1_10 0x0110 /** @}*/ /** \addtogroup usb_cdc_desc_type CDC Descriptro Types * @{ * This section lists CDC descriptor types. * - \ref CDCGenericDescriptor_INTERFACE * - \ref CDCGenericDescriptor_ENDPOINT */ /**Indicates that a CDC descriptor applies to an interface. */ #define CDCGenericDescriptor_INTERFACE 0x24 /** Indicates that a CDC descriptor applies to an endpoint. */ #define CDCGenericDescriptor_ENDPOINT 0x25 /** @}*/ /** \addtogroup usb_cdc_desc_subtype CDC Descriptor Subtypes * @{ * This section lists CDC descriptor sub types * - \ref CDCGenericDescriptor_HEADER * - \ref CDCGenericDescriptor_CALLMANAGEMENT * - \ref CDCGenericDescriptor_ABSTRACTCONTROLMANAGEMENT * - \ref CDCGenericDescriptor_UNION */ /** Header functional descriptor subtype. */ #define CDCGenericDescriptor_HEADER 0x00 /** Call management functional descriptor subtype. */ #define CDCGenericDescriptor_CALLMANAGEMENT 0x01 /** Abstract control management descriptor subtype. */ #define CDCGenericDescriptor_ABSTRACTCONTROLMANAGEMENT 0x02 /** Union descriptor subtype. */ #define CDCGenericDescriptor_UNION 0x06 /** @}*/ /** \addtogroup usb_cdc_descriptor USB CDC Device Descriptor Values * @{ * This section lists the values for CDC Device Descriptor. * - \ref CDCDeviceDescriptor_CLASS * - \ref CDCDeviceDescriptor_SUBCLASS * - \ref CDCDeviceDescriptor_PROTOCOL */ /** Device class code when using the CDC class. */ #define CDCDeviceDescriptor_CLASS 0x02 /** Device subclass code when using the CDC class. */ #define CDCDeviceDescriptor_SUBCLASS 0x00 /** Device protocol code when using the CDC class. */ #define CDCDeviceDescriptor_PROTOCOL 0x00 /** @}*/ /** \addtogroup usb_cdc_if_desc USB CDC Communication Interface Descriptor * @{ * This section lists the values for CDC Communication Interface Descriptor. * - \ref CDCCommunicationInterfaceDescriptor_CLASS * - \ref CDCCommunicationInterfaceDescriptor_ABSTRACTCONTROLMODEL * - \ref CDCCommunicationInterfaceDescriptor_NOPROTOCOL */ /** Interface class code for a CDC communication class interface. */ #define CDCCommunicationInterfaceDescriptor_CLASS 0x02 /** Interface subclass code for an Abstract Control Model interface descriptor. */ #define CDCCommunicationInterfaceDescriptor_ABSTRACTCONTROLMODEL 0x02 /** Interface protocol code when a CDC communication interface does not implemenent any particular protocol. */ #define CDCCommunicationInterfaceDescriptor_NOPROTOCOL 0x00 /** @}*/ /** \addtogroup usb_cdc_data_if USB CDC Data Interface Values * @{ * This section lists the values for CDC Data Interface Descriptor. * - \ref CDCDataInterfaceDescriptor_CLASS * - \ref CDCDataInterfaceDescriptor_SUBCLASS * - \ref CDCDataInterfaceDescriptor_NOPROTOCOL */ /** Interface class code for a data class interface. */ #define CDCDataInterfaceDescriptor_CLASS 0x0A /** Interface subclass code for a data class interface. */ #define CDCDataInterfaceDescriptor_SUBCLASS 0x00 /** Protocol code for a data class interface which does not implement any particular protocol. */ #define CDCDataInterfaceDescriptor_NOPROTOCOL 0x00 /** @}*/ /** \addtogroup usb_cdc_cb_man_desc USB CDC CallManagement Capabilities * @{ * This section lists CDC CallManagement Capabilities. * - \ref CDCCallManagementDescriptor_SELFCALLMANAGEMENT * - \ref CDCCallManagementDescriptor_DATACALLMANAGEMENT */ /** Device handles call management itself. */ #define CDCCallManagementDescriptor_SELFCALLMANAGEMENT (1 << 0) /** Device can exchange call management information over a Data class interface. */ #define CDCCallManagementDescriptor_DATACALLMANAGEMENT (1 << 1) /** @}*/ /** \addtogroup usb_cdc_acm USB CDC ACM Capabilities * @{ * * This section lists the capabilities of the CDC ACM. * - \ref CDCAbstractControlManagementDescriptor_COMMFEATURE * - \ref CDCAbstractControlManagementDescriptor_LINE * - \ref CDCAbstractControlManagementDescriptor_SENDBREAK * - \ref CDCAbstractControlManagementDescriptor_NETWORKCONNECTION */ /** Device supports the request combination of SetCommFeature, ClearCommFeature and GetCommFeature. */ #define CDCAbstractControlManagementDescriptor_COMMFEATURE (1 << 0) /** Device supports the request combination of SetLineCoding, GetLineCoding and SetControlLineState. */ #define CDCAbstractControlManagementDescriptor_LINE (1 << 1) /** Device supports the SendBreak request. */ #define CDCAbstractControlManagementDescriptor_SENDBREAK (1 << 2) /** Device supports the NetworkConnection notification. */ #define CDCAbstractControlManagementDescriptor_NETWORKCONNECTION (1 << 3) /** @}*/ /*---------------------------------------------------------------------------- * Types *----------------------------------------------------------------------------*/ #ifdef __ICCARM__ /* IAR */ #pragma pack(1) /* IAR */ #define __attribute__(...) /* IAR */ #endif /* IAR */ /** * \typedef CDCHeaderDescriptor * \brief Marks the beginning of the concatenated set of functional descriptors * for the interface. */ typedef struct _CDCHeaderDescriptor { /** Size of this descriptor in bytes. */ uint8_t bFunctionLength; /** Descriptor type . */ uint8_t bDescriptorType; /** Descriptor sub-type . */ uint8_t bDescriptorSubtype; /** USB CDC specification release number. */ uint16_t bcdCDC; } __attribute__ ((packed)) CDCHeaderDescriptor; /* GCC */ /** * \typedef CDCUnionDescriptor * \brief Describes the relationship between a group of interfaces that can * be considered to form a functional unit. */ typedef struct _CDCUnionDescriptor { /** Size of the descriptor in bytes. */ uint8_t bFunctionLength; /** Descriptor type . */ uint8_t bDescriptorType; /** Descriptor subtype . */ uint8_t bDescriptorSubtype; /** Number of the master interface for this union. */ uint8_t bMasterInterface; /** Number of the first slave interface for this union. */ uint8_t bSlaveInterface0; } __attribute__ ((packed)) CDCUnionDescriptor; /* GCC */ /** * \typedef CDCCallManagementDescriptor * \brief Describes the processing of calls for the communication class * interface. */ typedef struct _CDCCallManagementDescriptor { /** Size of this descriptor in bytes. */ uint8_t bFunctionLength; /** Descriptor type . */ uint8_t bDescriptorType; /** Descriptor sub-type . */ uint8_t bDescriptorSubtype; /** Configuration capabilities \sa usb_cdc_cb_man_desc CDC CallManagement Capabilities. */ uint8_t bmCapabilities; /** Interface number of the data class interface used for call management (optional). */ uint8_t bDataInterface; } __attribute__ ((packed)) CDCCallManagementDescriptor; /* GCC */ /** * \typedef CDCAbstractControlManagementDescriptor * \brief Describes the command supported by the communication interface class * with the Abstract Control Model subclass code. */ typedef struct _CDCAbstractControlManagementDescriptor { /** Size of this descriptor in bytes. */ uint8_t bFunctionLength; /** Descriptor type . */ uint8_t bDescriptorType; /** Descriptor subtype . */ uint8_t bDescriptorSubtype; /** Configuration capabilities. \sa usb_cdc_acm CDC ACM Capabilities. */ uint8_t bmCapabilities; } __attribute__ ((packed)) CDCAbstractControlManagementDescriptor; /* GCC */ #ifdef __ICCARM__ /* IAR */ #pragma pack() /* IAR */ #endif /* IAR */ /*---------------------------------------------------------------------------- * Functions *----------------------------------------------------------------------------*/ /**@}*/ #endif /* #ifndef _CDCDESCRIPTORS_H_ */