mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-10-29 14:11:42 +01:00 
			
		
		
		
	
		
			
	
	
		
			175 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			175 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /* usb_cdc.h - USB CDC-ACM and CDC-ECM public header */ | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * Copyright (c) 2017 PHYTEC Messtechnik GmbH | ||
|  |  * | ||
|  |  * SPDX-License-Identifier: Apache-2.0 | ||
|  |  */ | ||
|  | 
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @file | ||
|  |  * @brief USB Communications Device Class (CDC) public header | ||
|  |  * | ||
|  |  * Header follows the Class Definitions for | ||
|  |  * Communications Devices Specification (CDC120-20101103-track.pdf), | ||
|  |  * PSTN Devices Specification (PSTN120.pdf) and | ||
|  |  * Ethernet Control Model Devices Specification (ECM120.pdf). | ||
|  |  * Header is limited to ACM and ECM Subclasses. | ||
|  |  */ | ||
|  | 
 | ||
|  | #pragma once
 | ||
|  | 
 | ||
|  | #include <stdint.h>
 | ||
|  | #include <sys/cdefs.h>
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | extern "C" { | ||
|  | #endif
 | ||
|  | 
 | ||
|  | /** CDC Specification release number in BCD format */ | ||
|  | #define CDC_SRN_1_20            0x0120
 | ||
|  | 
 | ||
|  | /** Communications Class Subclass Codes */ | ||
|  | #define ACM_SUBCLASS            0x02
 | ||
|  | #define ECM_SUBCLASS            0x06
 | ||
|  | #define EEM_SUBCLASS            0x0c
 | ||
|  | 
 | ||
|  | /** Communications Class Protocol Codes */ | ||
|  | #define AT_CMD_V250_PROTOCOL        0x01
 | ||
|  | #define EEM_PROTOCOL            0x07
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Data Class Interface Codes | ||
|  |  * @note CDC120-20101103-track.pdf, 4.5, Table 6 | ||
|  |  */ | ||
|  | #define DATA_INTERFACE_CLASS        0x0A
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Values for the bDescriptorType Field | ||
|  |  * @note CDC120-20101103-track.pdf, 5.2.3, Table 12 | ||
|  |  */ | ||
|  | #define CS_INTERFACE            0x24
 | ||
|  | #define CS_ENDPOINT         0x25
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief bDescriptor SubType for Communications | ||
|  |  * Class Functional Descriptors | ||
|  |  * @note CDC120-20101103-track.pdf, 5.2.3, Table 13 | ||
|  |  */ | ||
|  | #define HEADER_FUNC_DESC        0x00
 | ||
|  | #define CALL_MANAGEMENT_FUNC_DESC   0x01
 | ||
|  | #define ACM_FUNC_DESC           0x02
 | ||
|  | #define UNION_FUNC_DESC         0x06
 | ||
|  | #define ETHERNET_FUNC_DESC      0x0F
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief PSTN Subclass Specific Requests | ||
|  |  * for ACM devices | ||
|  |  * @note PSTN120.pdf, 6.3, Table 13 | ||
|  |  */ | ||
|  | #define CDC_SEND_ENC_CMD        0x00
 | ||
|  | #define CDC_GET_ENC_RSP         0x01
 | ||
|  | #define SET_LINE_CODING         0x20
 | ||
|  | #define GET_LINE_CODING         0x21
 | ||
|  | #define SET_CONTROL_LINE_STATE      0x22
 | ||
|  | 
 | ||
|  | /** Control Signal Bitmap Values for SetControlLineState */ | ||
|  | #define SET_CONTROL_LINE_STATE_RTS  0x02
 | ||
|  | #define SET_CONTROL_LINE_STATE_DTR  0x01
 | ||
|  | 
 | ||
|  | /** UART State Bitmap Values */ | ||
|  | #define SERIAL_STATE_OVERRUN        0x40
 | ||
|  | #define SERIAL_STATE_PARITY     0x20
 | ||
|  | #define SERIAL_STATE_FRAMING        0x10
 | ||
|  | #define SERIAL_STATE_RING       0x08
 | ||
|  | #define SERIAL_STATE_BREAK      0x04
 | ||
|  | #define SERIAL_STATE_TX_CARRIER     0x02
 | ||
|  | #define SERIAL_STATE_RX_CARRIER     0x01
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Class-Specific Request Codes for Ethernet subclass | ||
|  |  * @note ECM120.pdf, 6.2, Table 6 | ||
|  |  */ | ||
|  | #define SET_ETHERNET_MULTICAST_FILTERS  0x40
 | ||
|  | #define SET_ETHERNET_PM_FILTER      0x41
 | ||
|  | #define GET_ETHERNET_PM_FILTER      0x42
 | ||
|  | #define SET_ETHERNET_PACKET_FILTER  0x43
 | ||
|  | #define GET_ETHERNET_STATISTIC      0x44
 | ||
|  | 
 | ||
|  | /** Ethernet Packet Filter Bitmap */ | ||
|  | #define PACKET_TYPE_MULTICAST       0x10
 | ||
|  | #define PACKET_TYPE_BROADCAST       0x08
 | ||
|  | #define PACKET_TYPE_DIRECTED        0x04
 | ||
|  | #define PACKET_TYPE_ALL_MULTICAST   0x02
 | ||
|  | #define PACKET_TYPE_PROMISCUOUS     0x01
 | ||
|  | 
 | ||
|  | /** Header Functional Descriptor */ | ||
|  | struct cdc_header_descriptor { | ||
|  |     uint8_t bFunctionLength; | ||
|  |     uint8_t bDescriptorType; | ||
|  |     uint8_t bDescriptorSubtype; | ||
|  |     uint16_t bcdCDC; | ||
|  | } __packed; | ||
|  | 
 | ||
|  | /** Union Interface Functional Descriptor */ | ||
|  | struct cdc_union_descriptor { | ||
|  |     uint8_t bFunctionLength; | ||
|  |     uint8_t bDescriptorType; | ||
|  |     uint8_t bDescriptorSubtype; | ||
|  |     uint8_t bControlInterface; | ||
|  |     uint8_t bSubordinateInterface0; | ||
|  | } __packed; | ||
|  | 
 | ||
|  | /** Call Management Functional Descriptor */ | ||
|  | struct cdc_cm_descriptor { | ||
|  |     uint8_t bFunctionLength; | ||
|  |     uint8_t bDescriptorType; | ||
|  |     uint8_t bDescriptorSubtype; | ||
|  |     uint8_t bmCapabilities; | ||
|  |     uint8_t bDataInterface; | ||
|  | } __packed; | ||
|  | 
 | ||
|  | /** Abstract Control Management Functional Descriptor */ | ||
|  | struct cdc_acm_descriptor { | ||
|  |     uint8_t bFunctionLength; | ||
|  |     uint8_t bDescriptorType; | ||
|  |     uint8_t bDescriptorSubtype; | ||
|  |     uint8_t bmCapabilities; | ||
|  | } __packed; | ||
|  | 
 | ||
|  | 
 | ||
|  | /** Data structure for GET_LINE_CODING / SET_LINE_CODING class requests */ | ||
|  | struct cdc_acm_line_coding { | ||
|  |     uint32_t dwDTERate; | ||
|  |     uint8_t bCharFormat; | ||
|  |     uint8_t bParityType; | ||
|  |     uint8_t bDataBits; | ||
|  | } __packed; | ||
|  | 
 | ||
|  | /** Data structure for the notification about SerialState */ | ||
|  | struct cdc_acm_notification { | ||
|  |     uint8_t bmRequestType; | ||
|  |     uint8_t bNotificationType; | ||
|  |     uint16_t wValue; | ||
|  |     uint16_t wIndex; | ||
|  |     uint16_t wLength; | ||
|  |     uint16_t data; | ||
|  | } __packed; | ||
|  | 
 | ||
|  | /** Ethernet Networking Functional Descriptor */ | ||
|  | struct cdc_ecm_descriptor { | ||
|  |     uint8_t bFunctionLength; | ||
|  |     uint8_t bDescriptorType; | ||
|  |     uint8_t bDescriptorSubtype; | ||
|  |     uint8_t iMACAddress; | ||
|  |     uint32_t bmEthernetStatistics; | ||
|  |     uint16_t wMaxSegmentSize; | ||
|  |     uint16_t wNumberMCFilters; | ||
|  |     uint8_t bNumberPowerFilters; | ||
|  | } __packed; | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | } | ||
|  | #endif
 |