- /** CDC Class specific request to set the current virtual serial port handshake line states. */\r
- #define REQ_SetControlLineState 0x22\r
- \r
- /** Notification type constant for a change in the virtual serial port handshake line states, for\r
- * use with a USB_Notification_Header_t notification structure when sent to the host via the CDC \r
- * notification endpoint.\r
- */\r
- #define NOTIF_SerialState 0x20\r
-\r
- /** Mask for the DTR handshake line for use with the REQ_SetControlLineState class specific request\r
- * from the host, to indicate that the DTR line state should be high.\r
- */\r
- #define CDC_CONTROL_LINE_OUT_DTR (1 << 0)\r
-\r
- /** Mask for the RTS handshake line for use with the REQ_SetControlLineState class specific request\r
- * from the host, to indicate that theRTS line state should be high.\r
- */\r
- #define CDC_CONTROL_LINE_OUT_RTS (1 << 1)\r
- \r
- /** Mask for the DCD handshake line for use with the a NOTIF_SerialState class specific notification\r
- * from the device to the host, to indicate that the DCD line state is currently high.\r
- */\r
- #define CDC_CONTROL_LINE_IN_DCD (1 << 0)\r
-\r
- /** Mask for the DSR handshake line for use with the a NOTIF_SerialState class specific notification\r
- * from the device to the host, to indicate that the DSR line state is currently high.\r
- */\r
- #define CDC_CONTROL_LINE_IN_DSR (1 << 1)\r
-\r
- /** Mask for the BREAK handshake line for use with the a NOTIF_SerialState class specific notification\r
- * from the device to the host, to indicate that the BREAK line state is currently high.\r
- */\r
- #define CDC_CONTROL_LINE_IN_BREAK (1 << 2)\r
-\r
- /** Mask for the RING handshake line for use with the a NOTIF_SerialState class specific notification\r
- * from the device to the host, to indicate that the RING line state is currently high.\r
- */\r
- #define CDC_CONTROL_LINE_IN_RING (1 << 3)\r
-\r
- /** Mask for use with the a NOTIF_SerialState class specific notification from the device to the host,\r
- * to indicate that a framing error has occurred on the virtual serial port.\r
- */\r
- #define CDC_CONTROL_LINE_IN_FRAMEERROR (1 << 4)\r
-\r
- /** Mask for use with the a NOTIF_SerialState class specific notification from the device to the host,\r
- * to indicate that a parity error has occurred on the virtual serial port.\r
- */\r
- #define CDC_CONTROL_LINE_IN_PARITYERROR (1 << 5)\r
-\r
- /** Mask for use with the a NOTIF_SerialState class specific notification from the device to the host,\r
- * to indicate that a data overrun error has occurred on the virtual serial port.\r
- */\r
- #define CDC_CONTROL_LINE_IN_OVERRUNERROR (1 << 6)\r
- \r
- /** Macro to define a CDC class-specific functional descriptor. CDC functional descriptors have a\r
- * uniform structure but variable sized data payloads, thus cannot be represented accurately by\r
- * a single typedef struct. A macro is used instead so that functional descriptors can be created\r
- * easily by specifying the size of the payload. This allows sizeof() to work correctly.\r
- *\r
- * \param DataSize Size in bytes of the CDC functional descriptor's data payload\r
- */\r
- #define CDC_FUNCTIONAL_DESCRIPTOR(DataSize) \\r
- struct \\r
- { \\r
- USB_Descriptor_Header_t Header; \\r
- uint8_t SubType; \\r
- uint8_t Data[DataSize]; \\r
- }\r
-\r
- /* Enums: */\r
- /** Enum for the possible line encoding formats of a virtual serial port. */\r
- enum CDCDevice_CDC_LineCodingFormats_t\r
- {\r
- CDC_LINEENCODING_OneStopBit = 0, /**< Each frame contains one stop bit */\r
- CDC_LINEENCODING_OneAndAHalfStopBits = 1, /**< Each frame contains one and a half stop bits */\r
- CDC_LINEENCODING_TwoStopBits = 2, /**< Each frame contains two stop bits */\r
- };\r
- \r
- /** Enum for the possible line encoding parity settings of a virtual serial port. */\r
- enum CDCDevice_LineCodingParity_t\r
- {\r
- CDC_PARITY_None = 0, /**< No parity bit mode on each frame */\r
- CDC_PARITY_Odd = 1, /**< Odd parity bit mode on each frame */\r
- CDC_PARITY_Even = 2, /**< Even parity bit mode on each frame */\r
- CDC_PARITY_Mark = 3, /**< Mark parity bit mode on each frame */\r
- CDC_PARITY_Space = 4, /**< Space parity bit mode on each frame */\r
- };\r
-\r
- /* Type Defines: */\r
- /** Type define for the virtual serial port line encoding settings, for storing the current USART configuration\r
- * as set by the host via a class specific request.\r
- */\r
- typedef struct\r
- {\r
- uint8_t ControlInterfaceNumber; /**< Interface number of the CDC control interface within the device */\r
-\r
- uint8_t DataINEndpointNumber; /**< Endpoint number of the CDC interface's IN data endpoint */\r
- uint16_t DataINEndpointSize; /**< Size in bytes of the CDC interface's IN data endpoint */\r
-\r
- uint8_t DataOUTEndpointNumber; /**< Endpoint number of the CDC interface's OUT data endpoint */\r
- uint16_t DataOUTEndpointSize; /**< Size in bytes of the CDC interface's OUT data endpoint */\r
-\r
- uint8_t NotificationEndpointNumber; /**< Endpoint number of the CDC interface's IN notification endpoint, if used */\r
- uint16_t NotificationEndpointSize; /**< Size in bytes of the CDC interface's IN notification endpoint, if used */\r
-\r
- uint8_t ControlLineState;\r
-\r
- struct\r
- {\r
- uint32_t BaudRateBPS; /**< Baud rate of the virtual serial port, in bits per second */\r
- uint8_t CharFormat; /**< Character format of the virtual serial port, a value from the\r
- * CDCDevice_CDC_LineCodingFormats_t enum\r
- */\r
- uint8_t ParityType; /**< Parity setting of the virtual serial port, a value from the\r
- * CDCDevice_LineCodingParity_t enum\r
- */\r
- uint8_t DataBits; /**< Bits of data per character of the virtual serial port */\r
- } LineEncoding;\r
- } USB_ClassInfo_CDC_t;\r
+ uint8_t DataOUTEndpointNumber; /**< Endpoint number of the CDC interface's OUT data endpoint */\r
+ uint16_t DataOUTEndpointSize; /**< Size in bytes of the CDC interface's OUT data endpoint */\r
+ bool DataOUTEndpointDoubleBank; /** Indicates if the CDC interface's OUT data endpoint should use double banking */\r
+\r
+ uint8_t NotificationEndpointNumber; /**< Endpoint number of the CDC interface's IN notification endpoint, if used */\r
+ uint16_t NotificationEndpointSize; /**< Size in bytes of the CDC interface's IN notification endpoint, if used */\r
+ bool NotificationEndpointDoubleBank; /** Indicates if the CDC interface's notification endpoint should use double banking */\r
+ } Config; /**< Config data for the USB class interface within the device. All elements in this section\r
+ * <b>must</b> be set or the interface will fail to enumerate and operate correctly.\r
+ */\r
+ struct\r
+ {\r
+ struct\r
+ {\r
+ uint8_t HostToDevice; /**< Control line states from the host to device, as a set of CDC_CONTROL_LINE_OUT_*\r
+ * masks.\r
+ */\r
+ uint8_t DeviceToHost; /**< Control line states from the device to host, as a set of CDC_CONTROL_LINE_IN_*\r
+ * masks.\r
+ */\r
+ } ControlLineStates;\r
+\r
+ struct\r
+ {\r
+ uint32_t BaudRateBPS; /**< Baud rate of the virtual serial port, in bits per second */\r
+ uint8_t CharFormat; /**< Character format of the virtual serial port, a value from the\r
+ * CDCDevice_CDC_LineCodingFormats_t enum\r
+ */\r
+ uint8_t ParityType; /**< Parity setting of the virtual serial port, a value from the\r
+ * CDCDevice_LineCodingParity_t enum\r
+ */\r
+ uint8_t DataBits; /**< Bits of data per character of the virtual serial port */\r
+ } LineEncoding; \r
+ } State; /**< State data for the USB class interface within the device. All elements in this section\r
+ * are reset to their defaults when the interface is enumerated.\r
+ */\r
+ } USB_ClassInfo_CDC_Device_t;\r