1 /* 2 * SPDX-FileCopyrightText: 2017 PHYTEC Messtechnik GmbH 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 8 /** 9 * @file 10 * @brief USB Communications Device Class (CDC) public header 11 * 12 * Header follows the Class Definitions for 13 * Communications Devices Specification (CDC120-20101103-track.pdf), 14 * PSTN Devices Specification (PSTN120.pdf) and 15 * Ethernet Control Model Devices Specification (ECM120.pdf). 16 * Header is limited to ACM and ECM Subclasses. 17 */ 18 19 #pragma once 20 21 #include <stdint.h> 22 #include <sys/cdefs.h> 23 24 #ifdef __cplusplus 25 extern "C" { 26 #endif 27 28 /** CDC Specification release number in BCD format */ 29 #define CDC_SRN_1_20 0x0120 30 31 /** Communications Class Subclass Codes */ 32 #define ACM_SUBCLASS 0x02 33 #define ECM_SUBCLASS 0x06 34 #define EEM_SUBCLASS 0x0c 35 36 /** Communications Class Protocol Codes */ 37 #define AT_CMD_V250_PROTOCOL 0x01 38 #define EEM_PROTOCOL 0x07 39 40 /** 41 * @brief Data Class Interface Codes 42 * @note CDC120-20101103-track.pdf, 4.5, Table 6 43 */ 44 #define DATA_INTERFACE_CLASS 0x0A 45 46 /** 47 * @brief Values for the bDescriptorType Field 48 * @note CDC120-20101103-track.pdf, 5.2.3, Table 12 49 */ 50 #define CS_INTERFACE 0x24 51 #define CS_ENDPOINT 0x25 52 53 /** 54 * @brief bDescriptor SubType for Communications 55 * Class Functional Descriptors 56 * @note CDC120-20101103-track.pdf, 5.2.3, Table 13 57 */ 58 #define HEADER_FUNC_DESC 0x00 59 #define CALL_MANAGEMENT_FUNC_DESC 0x01 60 #define ACM_FUNC_DESC 0x02 61 #define UNION_FUNC_DESC 0x06 62 #define ETHERNET_FUNC_DESC 0x0F 63 64 /** 65 * @brief PSTN Subclass Specific Requests 66 * for ACM devices 67 * @note PSTN120.pdf, 6.3, Table 13 68 */ 69 #define CDC_SEND_ENC_CMD 0x00 70 #define CDC_GET_ENC_RSP 0x01 71 #define SET_LINE_CODING 0x20 72 #define GET_LINE_CODING 0x21 73 #define SET_CONTROL_LINE_STATE 0x22 74 75 /** Control Signal Bitmap Values for SetControlLineState */ 76 #define SET_CONTROL_LINE_STATE_RTS 0x02 77 #define SET_CONTROL_LINE_STATE_DTR 0x01 78 79 /** UART State Bitmap Values */ 80 #define SERIAL_STATE_OVERRUN 0x40 81 #define SERIAL_STATE_PARITY 0x20 82 #define SERIAL_STATE_FRAMING 0x10 83 #define SERIAL_STATE_RING 0x08 84 #define SERIAL_STATE_BREAK 0x04 85 #define SERIAL_STATE_TX_CARRIER 0x02 86 #define SERIAL_STATE_RX_CARRIER 0x01 87 88 /** 89 * @brief Class-Specific Request Codes for Ethernet subclass 90 * @note ECM120.pdf, 6.2, Table 6 91 */ 92 #define SET_ETHERNET_MULTICAST_FILTERS 0x40 93 #define SET_ETHERNET_PM_FILTER 0x41 94 #define GET_ETHERNET_PM_FILTER 0x42 95 #define SET_ETHERNET_PACKET_FILTER 0x43 96 #define GET_ETHERNET_STATISTIC 0x44 97 98 /** Ethernet Packet Filter Bitmap */ 99 #define PACKET_TYPE_MULTICAST 0x10 100 #define PACKET_TYPE_BROADCAST 0x08 101 #define PACKET_TYPE_DIRECTED 0x04 102 #define PACKET_TYPE_ALL_MULTICAST 0x02 103 #define PACKET_TYPE_PROMISCUOUS 0x01 104 105 /** Header Functional Descriptor */ 106 struct cdc_header_descriptor { 107 uint8_t bFunctionLength; 108 uint8_t bDescriptorType; 109 uint8_t bDescriptorSubtype; 110 uint16_t bcdCDC; 111 } __packed; 112 113 /** Union Interface Functional Descriptor */ 114 struct cdc_union_descriptor { 115 uint8_t bFunctionLength; 116 uint8_t bDescriptorType; 117 uint8_t bDescriptorSubtype; 118 uint8_t bControlInterface; 119 uint8_t bSubordinateInterface0; 120 } __packed; 121 122 /** Call Management Functional Descriptor */ 123 struct cdc_cm_descriptor { 124 uint8_t bFunctionLength; 125 uint8_t bDescriptorType; 126 uint8_t bDescriptorSubtype; 127 uint8_t bmCapabilities; 128 uint8_t bDataInterface; 129 } __packed; 130 131 /** Abstract Control Management Functional Descriptor */ 132 struct cdc_acm_descriptor { 133 uint8_t bFunctionLength; 134 uint8_t bDescriptorType; 135 uint8_t bDescriptorSubtype; 136 uint8_t bmCapabilities; 137 } __packed; 138 139 140 /** Data structure for GET_LINE_CODING / SET_LINE_CODING class requests */ 141 struct cdc_acm_line_coding { 142 uint32_t dwDTERate; 143 uint8_t bCharFormat; 144 uint8_t bParityType; 145 uint8_t bDataBits; 146 } __packed; 147 148 /** Data structure for the notification about SerialState */ 149 struct cdc_acm_notification { 150 uint8_t bmRequestType; 151 uint8_t bNotificationType; 152 uint16_t wValue; 153 uint16_t wIndex; 154 uint16_t wLength; 155 uint16_t data; 156 } __packed; 157 158 /** Ethernet Networking Functional Descriptor */ 159 struct cdc_ecm_descriptor { 160 uint8_t bFunctionLength; 161 uint8_t bDescriptorType; 162 uint8_t bDescriptorSubtype; 163 uint8_t iMACAddress; 164 uint32_t bmEthernetStatistics; 165 uint16_t wMaxSegmentSize; 166 uint16_t wNumberMCFilters; 167 uint8_t bNumberPowerFilters; 168 } __packed; 169 170 #ifdef __cplusplus 171 } 172 #endif 173