Statistics
| Branch: | Tag: | Revision:

root / LUFA / Drivers / USB / Class / Common / CDC.h @ 978b99e5

History | View | Annotate | Download (21.2 KB)

1
/*
2
             LUFA Library
3
     Copyright (C) Dean Camera, 2011.
4

5
  dean [at] fourwalledcubicle [dot] com
6
           www.lufa-lib.org
7
*/
8

    
9
/*
10
  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)
11

12
  Permission to use, copy, modify, distribute, and sell this
13
  software and its documentation for any purpose is hereby granted
14
  without fee, provided that the above copyright notice appear in
15
  all copies and that both that the copyright notice and this
16
  permission notice and warranty disclaimer appear in supporting
17
  documentation, and that the name of the author not be used in
18
  advertising or publicity pertaining to distribution of the
19
  software without specific, written prior permission.
20

21
  The author disclaim all warranties with regard to this
22
  software, including all implied warranties of merchantability
23
  and fitness.  In no event shall the author be liable for any
24
  special, indirect or consequential damages or any damages
25
  whatsoever resulting from loss of use, data or profits, whether
26
  in an action of contract, negligence or other tortious action,
27
  arising out of or in connection with the use or performance of
28
  this software.
29
*/
30

    
31
/** \file
32
 *  \brief Common definitions and declarations for the library USB CDC Class driver.
33
 *
34
 *  Common definitions and declarations for the library USB CDC Class driver.
35
 *
36
 *  \note This file should not be included directly. It is automatically included as needed by the USB module driver
37
 *        dispatch header located in LUFA/Drivers/USB.h.
38
 */
39

    
40
/** \ingroup Group_USBClassCDC
41
 *  \defgroup Group_USBClassCDCCommon  Common Class Definitions
42
 *
43
 *  \section Sec_ModDescription Module Description
44
 *  Constants, Types and Enum definitions that are common to both Device and Host modes for the USB
45
 *  CDC Class.
46
 *
47
 *  @{
48
 */
49

    
50
#ifndef _CDC_CLASS_COMMON_H_
51
#define _CDC_CLASS_COMMON_H_
52

    
53
        /* Includes: */
54
                #include "../../Core/StdDescriptors.h"
55

    
56
        /* Enable C linkage for C++ Compilers: */
57
                #if defined(__cplusplus)
58
                        extern "C" {
59
                #endif
60

    
61
        /* Preprocessor Checks: */
62
                #if !defined(__INCLUDE_FROM_CDC_DRIVER)
63
                        #error Do not include this file directly. Include LUFA/Drivers/USB.h instead.
64
                #endif
65

    
66
        /* Macros: */
67
                /** \name Virtual Control Line Masks */
68
                //@{
69
                /** Mask for the DTR handshake line for use with the \ref CDC_REQ_SetControlLineState class-specific request
70
                 *  from the host, to indicate that the DTR line state should be high.
71
                 */
72
                #define CDC_CONTROL_LINE_OUT_DTR         (1 << 0)
73

    
74
                /** Mask for the RTS handshake line for use with the \ref CDC_REQ_SetControlLineState class-specific request
75
                 *  from the host, to indicate that the RTS line state should be high.
76
                 */
77
                #define CDC_CONTROL_LINE_OUT_RTS         (1 << 1)
78

    
79
                /** Mask for the DCD handshake line for use with the \ref CDC_NOTIF_SerialState class-specific notification
80
                 *  from the device to the host, to indicate that the DCD line state is currently high.
81
                 */
82
                #define CDC_CONTROL_LINE_IN_DCD          (1 << 0)
83

    
84
                /** Mask for the DSR handshake line for use with the \ref CDC_NOTIF_SerialState class-specific notification
85
                 *  from the device to the host, to indicate that the DSR line state is currently high.
86
                 */
87
                #define CDC_CONTROL_LINE_IN_DSR          (1 << 1)
88

    
89
                /** Mask for the BREAK handshake line for use with the \ref CDC_NOTIF_SerialState class-specific notification
90
                 *  from the device to the host, to indicate that the BREAK line state is currently high.
91
                 */
92
                #define CDC_CONTROL_LINE_IN_BREAK        (1 << 2)
93

    
94
                /** Mask for the RING handshake line for use with the \ref CDC_NOTIF_SerialState class-specific notification
95
                 *  from the device to the host, to indicate that the RING line state is currently high.
96
                 */
97
                #define CDC_CONTROL_LINE_IN_RING         (1 << 3)
98

    
99
                /** Mask for use with the \ref CDC_NOTIF_SerialState class-specific notification from the device to the host,
100
                 *  to indicate that a framing error has occurred on the virtual serial port.
101
                 */
102
                #define CDC_CONTROL_LINE_IN_FRAMEERROR   (1 << 4)
103

    
104
                /** Mask for use with the \ref CDC_NOTIF_SerialState class-specific notification from the device to the host,
105
                 *  to indicate that a parity error has occurred on the virtual serial port.
106
                 */
107
                #define CDC_CONTROL_LINE_IN_PARITYERROR  (1 << 5)
108

    
109
                /** Mask for use with the \ref CDC_NOTIF_SerialState class-specific notification from the device to the host,
110
                 *  to indicate that a data overrun error has occurred on the virtual serial port.
111
                 */
112
                #define CDC_CONTROL_LINE_IN_OVERRUNERROR (1 << 6)
113
                //@}
114
                
115
                /** Macro to define a CDC class-specific functional descriptor. CDC functional descriptors have a
116
                 *  uniform structure but variable sized data payloads, thus cannot be represented accurately by
117
                 *  a single typedef struct. A macro is used instead so that functional descriptors can be created
118
                 *  easily by specifying the size of the payload. This allows \c sizeof() to work correctly.
119
                 *
120
                 *  \param[in] DataSize  Size in bytes of the CDC functional descriptor's data payload.
121
                 */
122
                #define CDC_FUNCTIONAL_DESCRIPTOR(DataSize)        \
123
                     struct                                        \
124
                     {                                             \
125
                          USB_Descriptor_Header_t Header;          \
126
                              uint8_t                 SubType;         \
127
                          uint8_t                 Data[DataSize];  \
128
                     }
129

    
130
        /* Enums: */
131
                /** Enum for possible Class, Subclass and Protocol values of device and interface descriptors relating to the CDC
132
                 *  device class.
133
                 */
134
                enum CDC_Descriptor_ClassSubclassProtocol_t
135
                {
136
                        CDC_CSCP_CDCClass               = 0x02, /**< Descriptor Class value indicating that the device or interface
137
                                                                 *   belongs to the CDC class.
138
                                                                 */
139
                        CDC_CSCP_NoSpecificSubclass     = 0x00, /**< Descriptor Subclass value indicating that the device or interface
140
                                                                 *   belongs to no specific subclass of the CDC class.
141
                                                                 */
142
                        CDC_CSCP_ACMSubclass            = 0x02, /**< Descriptor Subclass value indicating that the device or interface
143
                                                                 *   belongs to the Abstract Control Model CDC subclass.
144
                                                                 */
145
                        CDC_CSCP_ATCommandProtocol      = 0x01, /**< Descriptor Protocol value indicating that the device or interface
146
                                                                 *   belongs to the AT Command protocol of the CDC class.
147
                                                                 */
148
                        CDC_CSCP_NoSpecificProtocol     = 0x00, /**< Descriptor Protocol value indicating that the device or interface
149
                                                                 *   belongs to no specific protocol of the CDC class.
150
                                                                 */
151
                        CDC_CSCP_VendorSpecificProtocol = 0xFF, /**< Descriptor Protocol value indicating that the device or interface
152
                                                                 *   belongs to a vendor-specific protocol of the CDC class.
153
                                                                 */
154
                        CDC_CSCP_CDCDataClass           = 0x0A, /**< Descriptor Class value indicating that the device or interface
155
                                                                 *   belongs to the CDC Data class.
156
                                                                 */
157
                        CDC_CSCP_NoDataSubclass         = 0x00, /**< Descriptor Subclass value indicating that the device or interface
158
                                                                 *   belongs to no specific subclass of the CDC data class.
159
                                                                 */
160
                        CDC_CSCP_NoDataProtocol         = 0x00, /**< Descriptor Protocol value indicating that the device or interface
161
                                                                 *   belongs to no specific protocol of the CDC data class.
162
                                                                 */
163
                };
164
                
165
                /** Enum for the CDC class specific control requests that can be issued by the USB bus host. */
166
                enum CDC_ClassRequests_t
167
                {
168
                        CDC_REQ_SendEncapsulatedCommand = 0x00, /**< CDC class-specific request to send an encapsulated command to the device. */
169
                        CDC_REQ_GetEncapsulatedResponse = 0x01, /**< CDC class-specific request to retrieve an encapsulated command response from the device. */
170
                        CDC_REQ_SetLineEncoding         = 0x20, /**< CDC class-specific request to set the current virtual serial port configuration settings. */
171
                        CDC_REQ_GetLineEncoding         = 0x21, /**< CDC class-specific request to get the current virtual serial port configuration settings. */
172
                        CDC_REQ_SetControlLineState     = 0x22, /**< CDC class-specific request to set the current virtual serial port handshake line states. */
173
                        CDC_REQ_SendBreak               = 0x23, /**< CDC class-specific request to send a break to the receiver via the carrier channel. */
174
                };
175

    
176
                /** Enum for the CDC class specific notification requests that can be issued by a CDC device to a host. */
177
                enum CDC_ClassNotifications_t
178
                {
179
                        CDC_NOTIF_SerialState               = 0x20, /**< Notification type constant for a change in the virtual serial port
180
                                                                     *   handshake line states, for use with a \ref USB_Request_Header_t
181
                                                                     *   notification structure when sent to the host via the CDC notification
182
                                                                     *   endpoint.
183
                                                                     */
184
                };
185

    
186
                /** Enum for the CDC class specific interface descriptor subtypes. */
187
                enum CDC_DescriptorSubtypes_t
188
                {
189
                        CDC_DSUBTYPE_CSInterface_Header           = 0x00, /**< CDC class-specific Header functional descriptor. */
190
                        CDC_DSUBTYPE_CSInterface_CallManagement   = 0x01, /**< CDC class-specific Call Management functional descriptor. */
191
                        CDC_DSUBTYPE_CSInterface_ACM              = 0x02, /**< CDC class-specific Abstract Control Model functional descriptor. */
192
                        CDC_DSUBTYPE_CSInterface_DirectLine       = 0x03, /**< CDC class-specific Direct Line functional descriptor. */
193
                        CDC_DSUBTYPE_CSInterface_TelephoneRinger  = 0x04, /**< CDC class-specific Telephone Ringer functional descriptor. */
194
                        CDC_DSUBTYPE_CSInterface_TelephoneCall    = 0x05, /**< CDC class-specific Telephone Call functional descriptor. */
195
                        CDC_DSUBTYPE_CSInterface_Union            = 0x06, /**< CDC class-specific Union functional descriptor. */
196
                        CDC_DSUBTYPE_CSInterface_CountrySelection = 0x07, /**< CDC class-specific Country Selection functional descriptor. */
197
                        CDC_DSUBTYPE_CSInterface_TelephoneOpModes = 0x08, /**< CDC class-specific Telephone Operation Modes functional descriptor. */
198
                        CDC_DSUBTYPE_CSInterface_USBTerminal      = 0x09, /**< CDC class-specific USB Terminal functional descriptor. */
199
                        CDC_DSUBTYPE_CSInterface_NetworkChannel   = 0x0A, /**< CDC class-specific Network Channel functional descriptor. */
200
                        CDC_DSUBTYPE_CSInterface_ProtocolUnit     = 0x0B, /**< CDC class-specific Protocol Unit functional descriptor. */
201
                        CDC_DSUBTYPE_CSInterface_ExtensionUnit    = 0x0C, /**< CDC class-specific Extension Unit functional descriptor. */
202
                        CDC_DSUBTYPE_CSInterface_MultiChannel     = 0x0D, /**< CDC class-specific Multi-Channel Management functional descriptor. */
203
                        CDC_DSUBTYPE_CSInterface_CAPI             = 0x0E, /**< CDC class-specific Common ISDN API functional descriptor. */
204
                        CDC_DSUBTYPE_CSInterface_Ethernet         = 0x0F, /**< CDC class-specific Ethernet functional descriptor. */
205
                        CDC_DSUBTYPE_CSInterface_ATM              = 0x10, /**< CDC class-specific Asynchronous Transfer Mode functional descriptor. */
206
                };
207

    
208
                /** Enum for the possible line encoding formats of a virtual serial port. */
209
                enum CDC_LineEncodingFormats_t
210
                {
211
                        CDC_LINEENCODING_OneStopBit          = 0, /**< Each frame contains one stop bit. */
212
                        CDC_LINEENCODING_OneAndAHalfStopBits = 1, /**< Each frame contains one and a half stop bits. */
213
                        CDC_LINEENCODING_TwoStopBits         = 2, /**< Each frame contains two stop bits. */
214
                };
215

    
216
                /** Enum for the possible line encoding parity settings of a virtual serial port. */
217
                enum CDC_LineEncodingParity_t
218
                {
219
                        CDC_PARITY_None  = 0, /**< No parity bit mode on each frame. */
220
                        CDC_PARITY_Odd   = 1, /**< Odd parity bit mode on each frame. */
221
                        CDC_PARITY_Even  = 2, /**< Even parity bit mode on each frame. */
222
                        CDC_PARITY_Mark  = 3, /**< Mark parity bit mode on each frame. */
223
                        CDC_PARITY_Space = 4, /**< Space parity bit mode on each frame. */
224
                };
225

    
226
        /* Type Defines: */
227
                /** \brief CDC class-specific Functional Header Descriptor (LUFA naming conventions).
228
                 *
229
                 *  Type define for a CDC class-specific functional header descriptor. This indicates to the host that the device
230
                 *  contains one or more CDC functional data descriptors, which give the CDC interface's capabilities and configuration.
231
                 *  See the CDC class specification for more details.
232
                 *
233
                 *  \see \ref USB_CDC_StdDescriptor_FunctionalHeader_t for the version of this type with standard element names.
234
                 *
235
                 *  \note Regardless of CPU architecture, these values should be stored as little endian.
236
                 */
237
                typedef struct
238
                {
239
                        USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length. */
240
                        uint8_t                 Subtype; /**< Sub type value used to distinguish between CDC class-specific descriptors,
241
                                                          *   must be \ref CDC_DSUBTYPE_CSInterface_Header.
242
                                                          */
243
                        uint16_t                CDCSpecification; /**< Version number of the CDC specification implemented by the device,
244
                                                                   *   encoded in BCD format.
245
                                                                   */
246
                } ATTR_PACKED USB_CDC_Descriptor_FunctionalHeader_t;
247

    
248
                /** \brief CDC class-specific Functional Header Descriptor (USB-IF naming conventions).
249
                 *
250
                 *  Type define for a CDC class-specific functional header descriptor. This indicates to the host that the device
251
                 *  contains one or more CDC functional data descriptors, which give the CDC interface's capabilities and configuration.
252
                 *  See the CDC class specification for more details.
253
                 *
254
                 *  \see \ref USB_CDC_Descriptor_FunctionalHeader_t for the version of this type with non-standard LUFA specific
255
                 *       element names.
256
                 *
257
                 *  \note Regardless of CPU architecture, these values should be stored as little endian.
258
                 */
259
                typedef struct
260
                {
261
                        uint8_t  bFunctionLength; /**< Size of the descriptor, in bytes. */
262
                        uint8_t  bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value
263
                                                   *   given by the specific class.
264
                                                   */
265
                        uint8_t  bDescriptorSubType; /**< Sub type value used to distinguish between CDC class-specific descriptors,
266
                                                      *   must be \ref CDC_DSUBTYPE_CSInterface_Header.
267
                                                      */
268
                        uint16_t bcdCDC; /**< Version number of the CDC specification implemented by the device, encoded in BCD format. */
269
                } ATTR_PACKED USB_CDC_StdDescriptor_FunctionalHeader_t;
270

    
271
                /** \brief CDC class-specific Functional ACM Descriptor (LUFA naming conventions).
272
                 *
273
                 *  Type define for a CDC class-specific functional ACM descriptor. This indicates to the host that the CDC interface
274
                 *  supports the CDC ACM subclass of the CDC specification. See the CDC class specification for more details.
275
                 *
276
                 *  \see \ref USB_CDC_StdDescriptor_FunctionalACM_t for the version of this type with standard element names.
277
                 *
278
                 *  \note Regardless of CPU architecture, these values should be stored as little endian.
279
                 */
280
                typedef struct
281
                {
282
                        USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length. */
283
                        uint8_t                 Subtype; /**< Sub type value used to distinguish between CDC class-specific descriptors,
284
                                                          *   must be \ref CDC_DSUBTYPE_CSInterface_ACM.
285
                                                          */
286
                        uint8_t                 Capabilities; /**< Capabilities of the ACM interface, given as a bit mask. For most devices,
287
                                                               *   this should be set to a fixed value of 0x06 - for other capabilities, refer
288
                                                               *   to the CDC ACM specification.
289
                                                               */
290
                } ATTR_PACKED USB_CDC_Descriptor_FunctionalACM_t;
291

    
292
                /** \brief CDC class-specific Functional ACM Descriptor (USB-IF naming conventions).
293
                 *
294
                 *  Type define for a CDC class-specific functional ACM descriptor. This indicates to the host that the CDC interface
295
                 *  supports the CDC ACM subclass of the CDC specification. See the CDC class specification for more details.
296
                 *
297
                 *  \see \ref USB_CDC_Descriptor_FunctionalACM_t for the version of this type with non-standard LUFA specific
298
                 *       element names.
299
                 *
300
                 *  \note Regardless of CPU architecture, these values should be stored as little endian.
301
                 */
302
                typedef struct
303
                {
304
                        uint8_t bFunctionLength; /**< Size of the descriptor, in bytes. */
305
                        uint8_t bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value
306
                                                  *   given by the specific class.
307
                                                  */
308
                        uint8_t bDescriptorSubType; /**< Sub type value used to distinguish between CDC class-specific descriptors,
309
                                                     *   must be \ref CDC_DSUBTYPE_CSInterface_ACM.
310
                                                     */
311
                        uint8_t bmCapabilities; /**< Capabilities of the ACM interface, given as a bit mask. For most devices,
312
                                                 *   this should be set to a fixed value of 0x06 - for other capabilities, refer
313
                                                 *   to the CDC ACM specification.
314
                                                 */
315
                } ATTR_PACKED USB_CDC_StdDescriptor_FunctionalACM_t;
316

    
317
                /** \brief CDC class-specific Functional Union Descriptor (LUFA naming conventions).
318
                 *
319
                 *  Type define for a CDC class-specific functional Union descriptor. This indicates to the host that specific
320
                 *  CDC control and data interfaces are related. See the CDC class specification for more details.
321
                 *
322
                 *  \see \ref USB_CDC_StdDescriptor_FunctionalUnion_t for the version of this type with standard element names.
323
                 *
324
                 *  \note Regardless of CPU architecture, these values should be stored as little endian.
325
                 */
326
                typedef struct
327
                {
328
                        USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length. */
329
                        uint8_t                 Subtype; /**< Sub type value used to distinguish between CDC class-specific descriptors,
330
                                                          *   must be \ref CDC_DSUBTYPE_CSInterface_Union.
331
                                                          */
332
                        uint8_t                 MasterInterfaceNumber; /**< Interface number of the CDC Control interface. */
333
                        uint8_t                 SlaveInterfaceNumber; /**< Interface number of the CDC Data interface. */
334
                } ATTR_PACKED USB_CDC_Descriptor_FunctionalUnion_t;
335

    
336
                /** \brief CDC class-specific Functional Union Descriptor (USB-IF naming conventions).
337
                 *
338
                 *  Type define for a CDC class-specific functional Union descriptor. This indicates to the host that specific
339
                 *  CDC control and data interfaces are related. See the CDC class specification for more details.
340
                 *
341
                 *  \see \ref USB_CDC_Descriptor_FunctionalUnion_t for the version of this type with non-standard LUFA specific
342
                 *       element names.
343
                 *
344
                 *  \note Regardless of CPU architecture, these values should be stored as little endian.
345
                 */
346
                typedef struct
347
                {
348
                        uint8_t bFunctionLength; /**< Size of the descriptor, in bytes. */
349
                        uint8_t bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value
350
                                                  *   given by the specific class.
351
                                                  */
352
                        uint8_t bDescriptorSubType; /**< Sub type value used to distinguish between CDC class-specific descriptors,
353
                                                     *   must be \ref CDC_DSUBTYPE_CSInterface_Union.
354
                                                     */
355
                        uint8_t bMasterInterface; /**< Interface number of the CDC Control interface. */
356
                        uint8_t bSlaveInterface0; /**< Interface number of the CDC Data interface. */
357
                } ATTR_PACKED USB_CDC_StdDescriptor_FunctionalUnion_t;
358
                
359
                /** \brief CDC Virtual Serial Port Line Encoding Settings Structure.
360
                 *
361
                 *  Type define for a CDC Line Encoding structure, used to hold the various encoding parameters for a virtual
362
                 *  serial port.
363
                 *
364
                 *  \note Regardless of CPU architecture, these values should be stored as little endian.
365
                 */
366
                typedef struct
367
                {
368
                        uint32_t BaudRateBPS; /**< Baud rate of the virtual serial port, in bits per second. */
369
                        uint8_t  CharFormat; /**< Character format of the virtual serial port, a value from the
370
                                                                  *   \ref CDC_LineEncodingFormats_t enum.
371
                                                                  */
372
                        uint8_t  ParityType; /**< Parity setting of the virtual serial port, a value from the
373
                                                                  *   \ref CDC_LineEncodingParity_t enum.
374
                                                                  */
375
                        uint8_t  DataBits; /**< Bits of data per character of the virtual serial port. */
376
                } ATTR_PACKED CDC_LineEncoding_t;
377

    
378
        /* Disable C linkage for C++ Compilers: */
379
                #if defined(__cplusplus)
380
                        }
381
                #endif
382

    
383
#endif
384

    
385
/** @} */
386