Update UC3 platform driver support to use the bitmasks defined in the header files...
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Common / CDC.h
index 6d2c519..45e0c58 100644 (file)
@@ -1,13 +1,13 @@
 /*
              LUFA Library
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2010.
+     Copyright (C) Dean Camera, 2011.
 
   dean [at] fourwalledcubicle [dot] com
 
   dean [at] fourwalledcubicle [dot] com
-      www.fourwalledcubicle.com
+           www.lufa-lib.org
 */
 
 /*
 */
 
 /*
-  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
  *
  *  Common definitions and declarations for the library USB CDC Class driver.
  *
  *
  *  Common definitions and declarations for the library USB CDC Class driver.
  *
- *  \note This file should not be included directly. It is automatically included as needed by the class driver
- *        dispatch header located in LUFA/Drivers/USB/Class/CDC.h.
+ *  \note This file should not be included directly. It is automatically included as needed by the USB module driver
+ *        dispatch header located in LUFA/Drivers/USB.h.
  */
 
 /** \ingroup Group_USBClassCDC
  */
 
 /** \ingroup Group_USBClassCDC
- *  @defgroup Group_USBClassCDCCommon  Common Class Definitions
+ *  \defgroup Group_USBClassCDCCommon  Common Class Definitions
  *
  *
- *  \section Module Description
+ *  \section Sec_ModDescription Module Description
  *  Constants, Types and Enum definitions that are common to both Device and Host modes for the USB
  *  CDC Class.
  *
  *  Constants, Types and Enum definitions that are common to both Device and Host modes for the USB
  *  CDC Class.
  *
@@ -51,9 +51,7 @@
 #define _CDC_CLASS_COMMON_H_
 
        /* Includes: */
 #define _CDC_CLASS_COMMON_H_
 
        /* Includes: */
-               #include "../../USB.h"
-
-               #include <string.h>
+               #include "../../Core/StdDescriptors.h"
 
        /* Enable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
 
        /* Enable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
 
        /* Preprocessor Checks: */
                #if !defined(__INCLUDE_FROM_CDC_DRIVER)
 
        /* Preprocessor Checks: */
                #if !defined(__INCLUDE_FROM_CDC_DRIVER)
-                       #error Do not include this file directly. Include LUFA/Drivers/Class/CDC.h instead.
+                       #error Do not include this file directly. Include LUFA/Drivers/USB.h instead.
                #endif
 
        /* Macros: */
                #endif
 
        /* Macros: */
+               /** \name Virtual Control Line Masks */
+               //@{
                /** Mask for the DTR handshake line for use with the \ref CDC_REQ_SetControlLineState class-specific request
                 *  from the host, to indicate that the DTR line state should be high.
                 */
                /** Mask for the DTR handshake line for use with the \ref CDC_REQ_SetControlLineState class-specific request
                 *  from the host, to indicate that the DTR line state should be high.
                 */
                 *  to indicate that a data overrun error has occurred on the virtual serial port.
                 */
                #define CDC_CONTROL_LINE_IN_OVERRUNERROR (1 << 6)
                 *  to indicate that a data overrun error has occurred on the virtual serial port.
                 */
                #define CDC_CONTROL_LINE_IN_OVERRUNERROR (1 << 6)
-
+               //@}
+               
                /** Macro to define a CDC class-specific functional descriptor. CDC functional descriptors have a
                 *  uniform structure but variable sized data payloads, thus cannot be represented accurately by
                 *  a single typedef struct. A macro is used instead so that functional descriptors can be created
                /** Macro to define a CDC class-specific functional descriptor. CDC functional descriptors have a
                 *  uniform structure but variable sized data payloads, thus cannot be represented accurately by
                 *  a single typedef struct. A macro is used instead so that functional descriptors can be created
-                *  easily by specifying the size of the payload. This allows sizeof() to work correctly.
+                *  easily by specifying the size of the payload. This allows \c sizeof() to work correctly.
                 *
                 *  \param[in] DataSize  Size in bytes of the CDC functional descriptor's data payload.
                 */
                 *
                 *  \param[in] DataSize  Size in bytes of the CDC functional descriptor's data payload.
                 */
                     }
 
        /* Enums: */
                     }
 
        /* Enums: */
+               /** Enum for possible Class, Subclass and Protocol values of device and interface descriptors relating to the CDC
+                *  device class.
+                */
+               enum CDC_Descriptor_ClassSubclassProtocol_t
+               {
+                       CDC_CSCP_CDCClass               = 0x02, /**< Descriptor Class value indicating that the device or interface
+                                                                *   belongs to the CDC class.
+                                                                */
+                       CDC_CSCP_NoSpecificSubclass     = 0x00, /**< Descriptor Subclass value indicating that the device or interface
+                                                                *   belongs to no specific subclass of the CDC class.
+                                                                */
+                       CDC_CSCP_ACMSubclass            = 0x02, /**< Descriptor Subclass value indicating that the device or interface
+                                                                *   belongs to the Abstract Control Model CDC subclass.
+                                                                */
+                       CDC_CSCP_ATCommandProtocol      = 0x01, /**< Descriptor Protocol value indicating that the device or interface
+                                                                *   belongs to the AT Command protocol of the CDC class.
+                                                                */
+                       CDC_CSCP_NoSpecificProtocol     = 0x00, /**< Descriptor Protocol value indicating that the device or interface
+                                                                *   belongs to no specific protocol of the CDC class.
+                                                                */
+                       CDC_CSCP_VendorSpecificProtocol = 0xFF, /**< Descriptor Protocol value indicating that the device or interface
+                                                                *   belongs to a vendor-specific protocol of the CDC class.
+                                                                */
+                       CDC_CSCP_CDCDataClass           = 0x0A, /**< Descriptor Class value indicating that the device or interface
+                                                                *   belongs to the CDC Data class.
+                                                                */
+                       CDC_CSCP_NoDataSubclass         = 0x00, /**< Descriptor Subclass value indicating that the device or interface
+                                                                *   belongs to no specific subclass of the CDC data class.
+                                                                */
+                       CDC_CSCP_NoDataProtocol         = 0x00, /**< Descriptor Protocol value indicating that the device or interface
+                                                                *   belongs to no specific protocol of the CDC data class.
+                                                                */
+               };
+               
                /** Enum for the CDC class specific control requests that can be issued by the USB bus host. */
                enum CDC_ClassRequests_t
                {
                /** Enum for the CDC class specific control requests that can be issued by the USB bus host. */
                enum CDC_ClassRequests_t
                {
                enum CDC_DescriptorSubtypes_t
                {
                        CDC_DSUBTYPE_CSInterface_Header           = 0x00, /**< CDC class-specific Header functional descriptor. */
                enum CDC_DescriptorSubtypes_t
                {
                        CDC_DSUBTYPE_CSInterface_Header           = 0x00, /**< CDC class-specific Header functional descriptor. */
-                       CDC_DSUBTYPE_CSInterface_CallManagement   = 0x01, /**< CDC class-specific Call Managment functional descriptor. */
+                       CDC_DSUBTYPE_CSInterface_CallManagement   = 0x01, /**< CDC class-specific Call Management functional descriptor. */
                        CDC_DSUBTYPE_CSInterface_ACM              = 0x02, /**< CDC class-specific Abstract Control Model functional descriptor. */
                        CDC_DSUBTYPE_CSInterface_DirectLine       = 0x03, /**< CDC class-specific Direct Line functional descriptor. */
                        CDC_DSUBTYPE_CSInterface_TelephoneRinger  = 0x04, /**< CDC class-specific Telephone Ringer functional descriptor. */
                        CDC_DSUBTYPE_CSInterface_ACM              = 0x02, /**< CDC class-specific Abstract Control Model functional descriptor. */
                        CDC_DSUBTYPE_CSInterface_DirectLine       = 0x03, /**< CDC class-specific Direct Line functional descriptor. */
                        CDC_DSUBTYPE_CSInterface_TelephoneRinger  = 0x04, /**< CDC class-specific Telephone Ringer functional descriptor. */
                 *  See the CDC class specification for more details.
                 *
                 *  \see \ref USB_CDC_StdDescriptor_FunctionalHeader_t for the version of this type with standard element names.
                 *  See the CDC class specification for more details.
                 *
                 *  \see \ref USB_CDC_StdDescriptor_FunctionalHeader_t for the version of this type with standard element names.
+                *
+                *  \note Regardless of CPU architecture, these values should be stored as little endian.
                 */
                typedef struct
                {
                 */
                typedef struct
                {
                        uint16_t                CDCSpecification; /**< Version number of the CDC specification implemented by the device,
                                                                   *   encoded in BCD format.
                                                                   */
                        uint16_t                CDCSpecification; /**< Version number of the CDC specification implemented by the device,
                                                                   *   encoded in BCD format.
                                                                   */
-               } USB_CDC_Descriptor_FunctionalHeader_t;
+               } ATTR_PACKED USB_CDC_Descriptor_FunctionalHeader_t;
 
                /** \brief CDC class-specific Functional Header Descriptor (USB-IF naming conventions).
                 *
 
                /** \brief CDC class-specific Functional Header Descriptor (USB-IF naming conventions).
                 *
                 *
                 *  \see \ref USB_CDC_Descriptor_FunctionalHeader_t for the version of this type with non-standard LUFA specific
                 *       element names.
                 *
                 *  \see \ref USB_CDC_Descriptor_FunctionalHeader_t for the version of this type with non-standard LUFA specific
                 *       element names.
+                *
+                *  \note Regardless of CPU architecture, these values should be stored as little endian.
                 */
                typedef struct
                {
                 */
                typedef struct
                {
                                                      *   must be \ref CDC_DSUBTYPE_CSInterface_Header.
                                                      */
                        uint16_t bcdCDC; /**< Version number of the CDC specification implemented by the device, encoded in BCD format. */
                                                      *   must be \ref CDC_DSUBTYPE_CSInterface_Header.
                                                      */
                        uint16_t bcdCDC; /**< Version number of the CDC specification implemented by the device, encoded in BCD format. */
-               } USB_CDC_StdDescriptor_FunctionalHeader_t;
+               } ATTR_PACKED USB_CDC_StdDescriptor_FunctionalHeader_t;
 
                /** \brief CDC class-specific Functional ACM Descriptor (LUFA naming conventions).
                 *
 
                /** \brief CDC class-specific Functional ACM Descriptor (LUFA naming conventions).
                 *
                 *  supports the CDC ACM subclass of the CDC specification. See the CDC class specification for more details.
                 *
                 *  \see \ref USB_CDC_StdDescriptor_FunctionalACM_t for the version of this type with standard element names.
                 *  supports the CDC ACM subclass of the CDC specification. See the CDC class specification for more details.
                 *
                 *  \see \ref USB_CDC_StdDescriptor_FunctionalACM_t for the version of this type with standard element names.
+                *
+                *  \note Regardless of CPU architecture, these values should be stored as little endian.
                 */
                typedef struct
                {
                 */
                typedef struct
                {
                                                          *   must be \ref CDC_DSUBTYPE_CSInterface_ACM.
                                                          */
                        uint8_t                 Capabilities; /**< Capabilities of the ACM interface, given as a bit mask. For most devices,
                                                          *   must be \ref CDC_DSUBTYPE_CSInterface_ACM.
                                                          */
                        uint8_t                 Capabilities; /**< Capabilities of the ACM interface, given as a bit mask. For most devices,
-                                                              *   this should be set to a fixed value of 0x06 - for other capabiltiies, refer
+                                                              *   this should be set to a fixed value of 0x06 - for other capabilities, refer
                                                               *   to the CDC ACM specification.
                                                               */
                                                               *   to the CDC ACM specification.
                                                               */
-               } USB_CDC_Descriptor_FunctionalACM_t;
+               } ATTR_PACKED USB_CDC_Descriptor_FunctionalACM_t;
 
                /** \brief CDC class-specific Functional ACM Descriptor (USB-IF naming conventions).
                 *
 
                /** \brief CDC class-specific Functional ACM Descriptor (USB-IF naming conventions).
                 *
                 *
                 *  \see \ref USB_CDC_Descriptor_FunctionalACM_t for the version of this type with non-standard LUFA specific
                 *       element names.
                 *
                 *  \see \ref USB_CDC_Descriptor_FunctionalACM_t for the version of this type with non-standard LUFA specific
                 *       element names.
+                *
+                *  \note Regardless of CPU architecture, these values should be stored as little endian.
                 */
                typedef struct
                {
                 */
                typedef struct
                {
                                                     *   must be \ref CDC_DSUBTYPE_CSInterface_ACM.
                                                     */
                        uint8_t bmCapabilities; /**< Capabilities of the ACM interface, given as a bit mask. For most devices,
                                                     *   must be \ref CDC_DSUBTYPE_CSInterface_ACM.
                                                     */
                        uint8_t bmCapabilities; /**< Capabilities of the ACM interface, given as a bit mask. For most devices,
-                                                *   this should be set to a fixed value of 0x06 - for other capabiltiies, refer
+                                                *   this should be set to a fixed value of 0x06 - for other capabilities, refer
                                                 *   to the CDC ACM specification.
                                                 */
                                                 *   to the CDC ACM specification.
                                                 */
-               } USB_CDC_StdDescriptor_FunctionalACM_t;
+               } ATTR_PACKED USB_CDC_StdDescriptor_FunctionalACM_t;
 
                /** \brief CDC class-specific Functional Union Descriptor (LUFA naming conventions).
                 *
 
                /** \brief CDC class-specific Functional Union Descriptor (LUFA naming conventions).
                 *
                 *  CDC control and data interfaces are related. See the CDC class specification for more details.
                 *
                 *  \see \ref USB_CDC_StdDescriptor_FunctionalUnion_t for the version of this type with standard element names.
                 *  CDC control and data interfaces are related. See the CDC class specification for more details.
                 *
                 *  \see \ref USB_CDC_StdDescriptor_FunctionalUnion_t for the version of this type with standard element names.
+                *
+                *  \note Regardless of CPU architecture, these values should be stored as little endian.
                 */
                typedef struct
                {
                 */
                typedef struct
                {
                                                          */
                        uint8_t                 MasterInterfaceNumber; /**< Interface number of the CDC Control interface. */
                        uint8_t                 SlaveInterfaceNumber; /**< Interface number of the CDC Data interface. */
                                                          */
                        uint8_t                 MasterInterfaceNumber; /**< Interface number of the CDC Control interface. */
                        uint8_t                 SlaveInterfaceNumber; /**< Interface number of the CDC Data interface. */
-               } USB_CDC_Descriptor_FunctionalUnion_t;
+               } ATTR_PACKED USB_CDC_Descriptor_FunctionalUnion_t;
 
                /** \brief CDC class-specific Functional Union Descriptor (USB-IF naming conventions).
                 *
 
                /** \brief CDC class-specific Functional Union Descriptor (USB-IF naming conventions).
                 *
                 *
                 *  \see \ref USB_CDC_Descriptor_FunctionalUnion_t for the version of this type with non-standard LUFA specific
                 *       element names.
                 *
                 *  \see \ref USB_CDC_Descriptor_FunctionalUnion_t for the version of this type with non-standard LUFA specific
                 *       element names.
+                *
+                *  \note Regardless of CPU architecture, these values should be stored as little endian.
                 */
                typedef struct
                {
                 */
                typedef struct
                {
                                                     */
                        uint8_t bMasterInterface; /**< Interface number of the CDC Control interface. */
                        uint8_t bSlaveInterface0; /**< Interface number of the CDC Data interface. */
                                                     */
                        uint8_t bMasterInterface; /**< Interface number of the CDC Control interface. */
                        uint8_t bSlaveInterface0; /**< Interface number of the CDC Data interface. */
-               } USB_CDC_StdDescriptor_FunctionalUnion_t;
+               } ATTR_PACKED USB_CDC_StdDescriptor_FunctionalUnion_t;
+               
+               /** \brief CDC Virtual Serial Port Line Encoding Settings Structure.
+                *
+                *  Type define for a CDC Line Encoding structure, used to hold the various encoding parameters for a virtual
+                *  serial port.
+                *
+                *  \note Regardless of CPU architecture, these values should be stored as little endian.
+                */
+               typedef struct
+               {
+                       uint32_t BaudRateBPS; /**< Baud rate of the virtual serial port, in bits per second. */
+                       uint8_t  CharFormat; /**< Character format of the virtual serial port, a value from the
+                                                                 *   \ref CDC_LineEncodingFormats_t enum.
+                                                                 */
+                       uint8_t  ParityType; /**< Parity setting of the virtual serial port, a value from the
+                                                                 *   \ref CDC_LineEncodingParity_t enum.
+                                                                 */
+                       uint8_t  DataBits; /**< Bits of data per character of the virtual serial port. */
+               } ATTR_PACKED CDC_LineEncoding_t;
 
        /* Disable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
 
        /* Disable C linkage for C++ Compilers: */
                #if defined(__cplusplus)