/** | |
* \file | |
* | |
* \brief USB Communication Device Class (CDC) protocol definitions | |
* | |
* Copyright (C) 2009 Atmel Corporation. All rights reserved. | |
* | |
* \page License | |
* | |
* Redistribution and use in source and binary forms, with or without | |
* modification, are permitted provided that the following conditions are met: | |
* | |
* 1. Redistributions of source code must retain the above copyright notice, | |
* this list of conditions and the following disclaimer. | |
* | |
* 2. Redistributions in binary form must reproduce the above copyright notice, | |
* this list of conditions and the following disclaimer in the documentation | |
* and/or other materials provided with the distribution. | |
* | |
* 3. The name of Atmel may not be used to endorse or promote products derived | |
* from this software without specific prior written permission. | |
* | |
* 4. This software may only be redistributed and used in connection with an | |
* Atmel AVR product. | |
* | |
* 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 | |
* EXPRESSLY AND SPECIFICALLY 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. | |
*/ | |
#ifndef _USB_PROTOCOL_CDC_H_ | |
#define _USB_PROTOCOL_CDC_H_ | |
/** | |
* \ingroup usb_protocol_group | |
* \defgroup cdc_protocol_group Communication Device Class Definitions | |
* @{ | |
*/ | |
/** | |
* \name Possible values of class | |
*/ | |
//@{ | |
#define CDC_CLASS_DEVICE 0x02 //!< USB Communication Device Class | |
#define CDC_CLASS_COMM 0x02 //!< CDC Communication Class Interface | |
#define CDC_CLASS_DATA 0x0A //!< CDC Data Class Interface | |
//@} | |
//! \name USB CDC Subclass IDs | |
//@{ | |
#define CDC_SUBCLASS_DLCM 0x01 //!< Direct Line Control Model | |
#define CDC_SUBCLASS_ACM 0x02 //!< Abstract Control Model | |
#define CDC_SUBCLASS_TCM 0x03 //!< Telephone Control Model | |
#define CDC_SUBCLASS_MCCM 0x04 //!< Multi-Channel Control Model | |
#define CDC_SUBCLASS_CCM 0x05 //!< CAPI Control Model | |
#define CDC_SUBCLASS_ETH 0x06 //!< Ethernet Networking Control Model | |
#define CDC_SUBCLASS_ATM 0x07 //!< ATM Networking Control Model | |
//@} | |
//! \name USB CDC Communication Interface Protocol IDs | |
//@{ | |
#define CDC_PROTOCOL_V25TER 0x01 //!< Common AT commands | |
//@} | |
//! \name USB CDC Data Interface Protocol IDs | |
//@{ | |
#define CDC_PROTOCOL_I430 0x30 //!< ISDN BRI | |
#define CDC_PROTOCOL_HDLC 0x31 //!< HDLC | |
#define CDC_PROTOCOL_TRANS 0x32 //!< Transparent | |
#define CDC_PROTOCOL_Q921M 0x50 //!< Q.921 management protocol | |
#define CDC_PROTOCOL_Q921 0x51 //!< Q.931 [sic] Data link protocol | |
#define CDC_PROTOCOL_Q921TM 0x52 //!< Q.921 TEI-multiplexor | |
#define CDC_PROTOCOL_V42BIS 0x90 //!< Data compression procedures | |
#define CDC_PROTOCOL_Q931 0x91 //!< Euro-ISDN protocol control | |
#define CDC_PROTOCOL_V120 0x92 //!< V.24 rate adaption to ISDN | |
#define CDC_PROTOCOL_CAPI20 0x93 //!< CAPI Commands | |
#define CDC_PROTOCOL_HOST 0xFD //!< Host based driver | |
/** | |
* \brief Describes the Protocol Unit Functional Descriptors [sic] | |
* on Communication Class Interface | |
*/ | |
#define CDC_PROTOCOL_PUFD 0xFE | |
//@} | |
//! \name USB CDC Functional Descriptor Types | |
//@{ | |
#define CDC_CS_INTERFACE 0x24 //!< Interface Functional Descriptor | |
#define CDC_CS_ENDPOINT 0x25 //!< Endpoint Functional Descriptor | |
//@} | |
//! \name USB CDC Functional Descriptor Subtypes | |
//@{ | |
#define CDC_SCS_HEADER 0x00 //!< Header Functional Descriptor | |
#define CDC_SCS_CALL_MGMT 0x01 //!< Call Management | |
#define CDC_SCS_ACM 0x02 //!< Abstract Control Management | |
#define CDC_SCS_UNION 0x06 //!< Union Functional Descriptor | |
//@} | |
//! \name USB CDC Request IDs | |
//@{ | |
#define USB_REQ_CDC_SEND_ENCAPSULATED_COMMAND 0x00 | |
#define USB_REQ_CDC_GET_ENCAPSULATED_RESPONSE 0x01 | |
#define USB_REQ_CDC_SET_COMM_FEATURE 0x02 | |
#define USB_REQ_CDC_GET_COMM_FEATURE 0x03 | |
#define USB_REQ_CDC_CLEAR_COMM_FEATURE 0x04 | |
#define USB_REQ_CDC_SET_AUX_LINE_STATE 0x10 | |
#define USB_REQ_CDC_SET_HOOK_STATE 0x11 | |
#define USB_REQ_CDC_PULSE_SETUP 0x12 | |
#define USB_REQ_CDC_SEND_PULSE 0x13 | |
#define USB_REQ_CDC_SET_PULSE_TIME 0x14 | |
#define USB_REQ_CDC_RING_AUX_JACK 0x15 | |
#define USB_REQ_CDC_SET_LINE_CODING 0x20 | |
#define USB_REQ_CDC_GET_LINE_CODING 0x21 | |
#define USB_REQ_CDC_SET_CONTROL_LINE_STATE 0x22 | |
#define USB_REQ_CDC_SEND_BREAK 0x23 | |
#define USB_REQ_CDC_SET_RINGER_PARMS 0x30 | |
#define USB_REQ_CDC_GET_RINGER_PARMS 0x31 | |
#define USB_REQ_CDC_SET_OPERATION_PARMS 0x32 | |
#define USB_REQ_CDC_GET_OPERATION_PARMS 0x33 | |
#define USB_REQ_CDC_SET_LINE_PARMS 0x34 | |
#define USB_REQ_CDC_GET_LINE_PARMS 0x35 | |
#define USB_REQ_CDC_DIAL_DIGITS 0x36 | |
#define USB_REQ_CDC_SET_UNIT_PARAMETER 0x37 | |
#define USB_REQ_CDC_GET_UNIT_PARAMETER 0x38 | |
#define USB_REQ_CDC_CLEAR_UNIT_PARAMETER 0x39 | |
#define USB_REQ_CDC_GET_PROFILE 0x3A | |
#define USB_REQ_CDC_SET_ETHERNET_MULTICAST_FILTERS 0x40 | |
#define USB_REQ_CDC_SET_ETHERNET_POWER_MANAGEMENT_PATTERNFILTER 0x41 | |
#define USB_REQ_CDC_GET_ETHERNET_POWER_MANAGEMENT_PATTERNFILTER 0x42 | |
#define USB_REQ_CDC_SET_ETHERNET_PACKET_FILTER 0x43 | |
#define USB_REQ_CDC_GET_ETHERNET_STATISTIC 0x44 | |
#define USB_REQ_CDC_SET_ATM_DATA_FORMAT 0x50 | |
#define USB_REQ_CDC_GET_ATM_DEVICE_STATISTICS 0x51 | |
#define USB_REQ_CDC_SET_ATM_DEFAULT_VC 0x52 | |
#define USB_REQ_CDC_GET_ATM_VC_STATISTICS 0x53 | |
// Added bNotification codes according cdc spec 1.1 chapter 6.3 | |
#define USB_REQ_CDC_NOTIFY_RING_DETECT 0x09 | |
#define USB_REQ_CDC_NOTIFY_SERIAL_STATE 0x20 | |
#define USB_REQ_CDC_NOTIFY_CALL_STATE_CHANGE 0x28 | |
#define USB_REQ_CDC_NOTIFY_LINE_STATE_CHANGE 0x29 | |
//@} | |
/* | |
* Need to pack structures tightly, or the compiler might insert padding | |
* and violate the spec-mandated layout. | |
*/ | |
COMPILER_PACK_SET(1); | |
//! \name USB CDC Descriptors | |
//@{ | |
//! CDC Header Functional Descriptor | |
typedef struct { | |
uint8_t bFunctionLength; | |
uint8_t bDescriptorType; | |
uint8_t bDescriptorSubtype; | |
le16_t bcdCDC; | |
} usb_cdc_hdr_desc_t; | |
//! CDC Call Management Functional Descriptor | |
typedef struct { | |
uint8_t bFunctionLength; | |
uint8_t bDescriptorType; | |
uint8_t bDescriptorSubtype; | |
uint8_t bmCapabilities; | |
uint8_t bDataInterface; | |
} usb_cdc_call_mgmt_desc_t; | |
//! CDC ACM Functional Descriptor | |
typedef struct { | |
uint8_t bFunctionLength; | |
uint8_t bDescriptorType; | |
uint8_t bDescriptorSubtype; | |
uint8_t bmCapabilities; | |
} usb_cdc_acm_desc_t; | |
//! CDC Union Functional Descriptor | |
typedef struct { | |
uint8_t bFunctionLength; | |
uint8_t bDescriptorType; | |
uint8_t bDescriptorSubtype; | |
uint8_t bMasterInterface; | |
uint8_t bSlaveInterface0; | |
} usb_cdc_union_desc_t; | |
//! \name USB CDC Call Management Capabilities | |
//@{ | |
//! Device handles call management itself | |
#define CDC_CALL_MGMT_SUPPORTED (1 << 0) | |
//! Device can send/receive call management info over a Data Class interface | |
#define CDC_CALL_MGMT_OVER_DCI (1 << 1) | |
//@} | |
//! \name USB CDC ACM Capabilities | |
//@{ | |
//! Device supports the request combination of | |
//! Set_Comm_Feature, Clear_Comm_Feature, and Get_Comm_Feature. | |
#define CDC_ACM_SUPPORT_FEATURE_REQUESTS (1 << 0) | |
//! Device supports the request combination of | |
//! Set_Line_Coding, Set_Control_Line_State, Get_Line_Coding, | |
//! and the notification Serial_State. | |
#define CDC_ACM_SUPPORT_LINE_REQUESTS (1 << 1) | |
//! Device supports the request Send_Break | |
#define CDC_ACM_SUPPORT_SENDBREAK_REQUESTS (1 << 2) | |
//! Device supports the notification Network_Connection. | |
#define CDC_ACM_SUPPORT_NOTIFY_REQUESTS (1 << 3) | |
//@} | |
//@} | |
//! \name USB CDC line control | |
//@{ | |
//! \name USB CDC line coding | |
//@{ | |
//! Line Coding structure | |
typedef struct { | |
le32_t dwDTERate; | |
uint8_t bCharFormat; | |
uint8_t bParityType; | |
uint8_t bDataBits; | |
} usb_cdc_line_coding_t; | |
//! Possible values of bCharFormat | |
enum cdc_char_format { | |
CDC_STOP_BITS_1 = 0, //!< 1 stop bit | |
CDC_STOP_BITS_1_5 = 1, //!< 1.5 stop bits | |
CDC_STOP_BITS_2 = 2 //!< 2 stop bits | |
}; | |
//! Possible values of bParityType | |
enum cdc_parity { | |
CDC_PAR_NONE = 0, //!< No parity | |
CDC_PAR_ODD = 1, //!< Odd parity | |
CDC_PAR_EVEN = 2, //!< Even parity | |
CDC_PAR_MARK = 3, //!< Parity forced to 0 (space) | |
CDC_PAR_SPACE = 4 //!< Parity forced to 1 (mark) | |
}; | |
//@} | |
//! \name USB CDC control signals | |
//! spec 1.1 chapter 6.2.14 | |
//@{ | |
//! Control signal structure | |
typedef struct { | |
uint16_t value; | |
} usb_cdc_control_signal_t; | |
//! \name Possible values in usb_cdc_control_signal_t | |
//@{ | |
//! Carrier control for half duplex modems. | |
//! This signal corresponds to V.24 signal 105 and RS-232 signal RTS. | |
//! The device ignores the value of this bit | |
//! when operating in full duplex mode. | |
#define CDC_CTRL_SIGNAL_ACTIVATE_CARRIER (1 << 1) | |
//! Indicates to DCE if DTE is present or not. | |
//! This signal corresponds to V.24 signal 108/2 and RS-232 signal DTR. | |
#define CDC_CTRL_SIGNAL_DTE_PRESENT (1 << 0) | |
//@} | |
//@} | |
//! \name USB CDC notification message | |
//@{ | |
typedef struct { | |
uint8_t bmRequestType; | |
uint8_t bNotification; | |
le16_t wValue; | |
le16_t wIndex; | |
le16_t wLength; | |
} usb_cdc_notify_msg_t; | |
//! \name USB CDC serial state | |
//@{* | |
//! Hardware handshake support (cdc spec 1.1 chapter 6.3.5) | |
typedef struct { | |
usb_cdc_notify_msg_t header; | |
le16_t value; | |
} usb_cdc_notify_serial_state_t; | |
//! \name Possible values in usb_cdc_notify_serial_state_t | |
//@{ | |
#define CDC_SERIAL_STATE_DCD CPU_TO_LE16((1<<0)) | |
#define CDC_SERIAL_STATE_DSR CPU_TO_LE16((1<<1)) | |
#define CDC_SERIAL_STATE_BREAK CPU_TO_LE16((1<<2)) | |
#define CDC_SERIAL_STATE_RING CPU_TO_LE16((1<<3)) | |
#define CDC_SERIAL_STATE_FRAMING CPU_TO_LE16((1<<4)) | |
#define CDC_SERIAL_STATE_PARITY CPU_TO_LE16((1<<5)) | |
#define CDC_SERIAL_STATE_OVERRUN CPU_TO_LE16((1<<6)) | |
//@} | |
//! @} | |
//! @} | |
COMPILER_PACK_RESET(); | |
//! @} | |
#endif // _USB_PROTOCOL_CDC_H_ |