LCOV - code coverage report
Current view: top level - zephyr/usb/class - usb_cdc.h Coverage Total Hit
Test: new.info Lines: 17.8 % 135 24
Test Date: 2025-09-05 20:47:19

            Line data    Source code
       1            1 : /* usb_cdc.h - USB CDC-ACM and CDC-ECM public header */
       2              : 
       3              : /*
       4              :  * Copyright (c) 2017 PHYTEC Messtechnik GmbH
       5              :  *
       6              :  * SPDX-License-Identifier: Apache-2.0
       7              :  */
       8              : 
       9              : 
      10              : /**
      11              :  * @file
      12              :  * @brief USB Communications Device Class (CDC) public header
      13              :  *
      14              :  * Header follows the Class Definitions for
      15              :  * Communications Devices Specification (CDC120-20101103-track.pdf),
      16              :  * PSTN Devices Specification (PSTN120.pdf) and
      17              :  * Ethernet Control Model Devices Specification (ECM120.pdf).
      18              :  * Header is limited to ACM and ECM Subclasses.
      19              :  */
      20              : 
      21              : #ifndef ZEPHYR_INCLUDE_USB_CLASS_USB_CDC_H_
      22              : #define ZEPHYR_INCLUDE_USB_CLASS_USB_CDC_H_
      23              : 
      24              : /** CDC Specification release number in BCD format */
      25            1 : #define CDC_SRN_1_20                    0x0120 __DEPRECATED_MACRO
      26              : 
      27              : /** Communications Class Subclass Codes */
      28            1 : #define ACM_SUBCLASS                    0x02
      29            0 : #define ECM_SUBCLASS                    0x06
      30            0 : #define EEM_SUBCLASS                    0x0c
      31            0 : #define NCM_SUBCLASS                    0x0d
      32              : 
      33              : /** Communications Class Protocol Codes */
      34            1 : #define AT_CMD_V250_PROTOCOL            0x01
      35            0 : #define EEM_PROTOCOL                    0x07
      36            0 : #define ACM_VENDOR_PROTOCOL             0xFF
      37            0 : #define NCM_DATA_PROTOCOL               0x01
      38              : 
      39              : /**
      40              :  * @brief Data Class Interface Codes
      41              :  * @note CDC120-20101103-track.pdf, 4.5, Table 6
      42              :  */
      43            1 : #define DATA_INTERFACE_CLASS            0x0A
      44              : 
      45              : /**
      46              :  * @brief bDescriptor SubType for Communications
      47              :  * Class Functional Descriptors
      48              :  * @note CDC120-20101103-track.pdf, 5.2.3, Table 13
      49              :  */
      50            1 : #define HEADER_FUNC_DESC                0x00
      51            0 : #define CALL_MANAGEMENT_FUNC_DESC       0x01
      52            0 : #define ACM_FUNC_DESC                   0x02
      53            0 : #define UNION_FUNC_DESC                 0x06
      54            0 : #define ETHERNET_FUNC_DESC              0x0F
      55            0 : #define ETHERNET_FUNC_DESC_NCM          0x1a
      56              : 
      57              : /**
      58              :  * @brief PSTN Subclass Specific Requests
      59              :  * for ACM devices
      60              :  * @note PSTN120.pdf, 6.3, Table 13
      61              :  */
      62            1 : #define CDC_SEND_ENC_CMD                0x00
      63            0 : #define CDC_GET_ENC_RSP                 0x01
      64            0 : #define SET_LINE_CODING                 0x20
      65            0 : #define GET_LINE_CODING                 0x21
      66            0 : #define SET_CONTROL_LINE_STATE          0x22
      67              : 
      68              : /**
      69              :  * @brief PSTN Subclass Class-Specific Notification Codes
      70              :  * @note PSTN120.pdf, 6.5, Table 30
      71              :  */
      72            1 : #define USB_CDC_NETWORK_CONNECTION      0x00
      73            0 : #define USB_CDC_RESPONSE_AVAILABLE      0x01
      74            0 : #define USB_CDC_AUX_JACK_HOOK_STATE     0x08
      75            0 : #define USB_CDC_RING_DETECT             0x09
      76            0 : #define USB_CDC_SERIAL_STATE            0x20
      77            0 : #define USB_CDC_CALL_STATE_CHANGE       0x28
      78            0 : #define USB_CDC_LINE_STATE_CHANGE       0x23
      79              : 
      80              : /**
      81              :  * @brief PSTN UART State Bitmap Values
      82              :  * @note PSTN120.pdf, 6.5.4, Table 31
      83              :  */
      84            1 : #define USB_CDC_SERIAL_STATE_OVERRUN    BIT(6)
      85            0 : #define USB_CDC_SERIAL_STATE_PARITY     BIT(5)
      86            0 : #define USB_CDC_SERIAL_STATE_FRAMING    BIT(4)
      87            0 : #define USB_CDC_SERIAL_STATE_RINGSIGNAL BIT(3)
      88            0 : #define USB_CDC_SERIAL_STATE_BREAK      BIT(2)
      89            0 : #define USB_CDC_SERIAL_STATE_TXCARRIER  BIT(1)
      90            0 : #define USB_CDC_SERIAL_STATE_RXCARRIER  BIT(0)
      91              : 
      92              : /** Control Signal Bitmap Values for SetControlLineState */
      93            1 : #define SET_CONTROL_LINE_STATE_RTS      0x02
      94            0 : #define SET_CONTROL_LINE_STATE_DTR      0x01
      95              : 
      96              : /** Enhance enum uart_line_ctrl with CDC specific values */
      97            1 : #define USB_CDC_LINE_CTRL_BAUD_RATE     UART_LINE_CTRL_BAUD_RATE
      98            0 : #define USB_CDC_LINE_CTRL_DCD           UART_LINE_CTRL_DCD
      99            0 : #define USB_CDC_LINE_CTRL_DSR           UART_LINE_CTRL_DSR
     100            0 : #define USB_CDC_LINE_CTRL_BREAK         BIT(5)
     101            0 : #define USB_CDC_LINE_CTRL_RING_SIGNAL   BIT(6)
     102            0 : #define USB_CDC_LINE_CTRL_FRAMING       BIT(7)
     103            0 : #define USB_CDC_LINE_CTRL_PARITY        BIT(8)
     104            0 : #define USB_CDC_LINE_CTRL_OVER_RUN      BIT(9)
     105              : 
     106              : /** UART State Bitmap Values */
     107            1 : #define SERIAL_STATE_OVER_RUN           0x40
     108            0 : #define SERIAL_STATE_PARITY             0x20
     109            0 : #define SERIAL_STATE_FRAMING            0x10
     110            0 : #define SERIAL_STATE_RING_SIGNAL        0x08
     111            0 : #define SERIAL_STATE_BREAK              0x04
     112            0 : #define SERIAL_STATE_TX_CARRIER         0x02
     113            0 : #define SERIAL_STATE_RX_CARRIER         0x01
     114              : 
     115              : /**
     116              :  * @brief PSTN Subclass Line Coding Values
     117              :  *
     118              :  * @note PSTN120.pdf, 6.3.11, Table 17
     119              :  */
     120            1 : #define USB_CDC_LINE_CODING_STOP_BITS_1         0
     121            0 : #define USB_CDC_LINE_CODING_STOP_BITS_1_5       1
     122            0 : #define USB_CDC_LINE_CODING_STOP_BITS_2         2
     123              : 
     124            0 : #define USB_CDC_LINE_CODING_PARITY_NO           0
     125            0 : #define USB_CDC_LINE_CODING_PARITY_ODD          1
     126            0 : #define USB_CDC_LINE_CODING_PARITY_EVEN         2
     127            0 : #define USB_CDC_LINE_CODING_PARITY_MARK         3
     128            0 : #define USB_CDC_LINE_CODING_PARITY_SPACE        4
     129              : 
     130            0 : #define USB_CDC_LINE_CODING_DATA_BITS_5         5
     131            0 : #define USB_CDC_LINE_CODING_DATA_BITS_6         6
     132            0 : #define USB_CDC_LINE_CODING_DATA_BITS_7         7
     133            0 : #define USB_CDC_LINE_CODING_DATA_BITS_8         8
     134              : 
     135              : /**
     136              :  * @brief Class-Specific Request Codes for Ethernet subclass
     137              :  * @note ECM120.pdf, 6.2, Table 6
     138              :  */
     139            1 : #define SET_ETHERNET_MULTICAST_FILTERS  0x40
     140            0 : #define SET_ETHERNET_PM_FILTER          0x41
     141            0 : #define GET_ETHERNET_PM_FILTER          0x42
     142            0 : #define SET_ETHERNET_PACKET_FILTER      0x43
     143            0 : #define GET_ETHERNET_STATISTIC          0x44
     144              : 
     145              : /**
     146              :  * @brief Class-Specific Request Codes for NCM subclass
     147              :  * @note NCM100.pdf, 6.2, Table 6-2
     148              :  */
     149            1 : #define GET_NTB_PARAMETERS     0x80
     150            0 : #define GET_NET_ADDRESS        0x81
     151            0 : #define SET_NET_ADDRESS        0x82
     152            0 : #define GET_NTB_FORMAT         0x83
     153            0 : #define SET_NTB_FORMAT         0x84
     154            0 : #define GET_NTB_INPUT_SIZE     0x85
     155            0 : #define SET_NTB_INPUT_SIZE     0x86
     156            0 : #define GET_MAX_DATAGRAM_SIZE  0x87
     157            0 : #define SET_MAX_DATAGRAM_SIZE  0x88
     158            0 : #define GET_CRC_MODE           0x89
     159            0 : #define SET_CRC_MODE           0x8A
     160              : 
     161              : /** Ethernet Packet Filter Bitmap */
     162            1 : #define PACKET_TYPE_MULTICAST           0x10
     163            0 : #define PACKET_TYPE_BROADCAST           0x08
     164            0 : #define PACKET_TYPE_DIRECTED            0x04
     165            0 : #define PACKET_TYPE_ALL_MULTICAST       0x02
     166            0 : #define PACKET_TYPE_PROMISCUOUS         0x01
     167              : 
     168              : /** Header Functional Descriptor */
     169            1 : struct cdc_header_descriptor {
     170            0 :         uint8_t bFunctionLength;
     171            0 :         uint8_t bDescriptorType;
     172            0 :         uint8_t bDescriptorSubtype;
     173            0 :         uint16_t bcdCDC;
     174              : } __packed;
     175              : 
     176              : /** Union Interface Functional Descriptor */
     177            1 : struct cdc_union_descriptor {
     178            0 :         uint8_t bFunctionLength;
     179            0 :         uint8_t bDescriptorType;
     180            0 :         uint8_t bDescriptorSubtype;
     181            0 :         uint8_t bControlInterface;
     182            0 :         uint8_t bSubordinateInterface0;
     183              : } __packed;
     184              : 
     185              : /** Call Management Functional Descriptor */
     186            1 : struct cdc_cm_descriptor {
     187            0 :         uint8_t bFunctionLength;
     188            0 :         uint8_t bDescriptorType;
     189            0 :         uint8_t bDescriptorSubtype;
     190            0 :         uint8_t bmCapabilities;
     191            0 :         uint8_t bDataInterface;
     192              : } __packed;
     193              : 
     194              : /** Abstract Control Management Functional Descriptor */
     195            1 : struct cdc_acm_descriptor {
     196            0 :         uint8_t bFunctionLength;
     197            0 :         uint8_t bDescriptorType;
     198            0 :         uint8_t bDescriptorSubtype;
     199            0 :         uint8_t bmCapabilities;
     200              : } __packed;
     201              : 
     202              : /** Data structure for GET_LINE_CODING / SET_LINE_CODING class requests */
     203            1 : struct cdc_acm_line_coding {
     204            0 :         uint32_t dwDTERate;
     205            0 :         uint8_t bCharFormat;
     206            0 :         uint8_t bParityType;
     207            0 :         uint8_t bDataBits;
     208              : } __packed;
     209              : 
     210              : /** Data structure for the notification about SerialState */
     211            1 : struct cdc_acm_notification {
     212            0 :         uint8_t bmRequestType;
     213            0 :         uint8_t bNotificationType;
     214            0 :         uint16_t wValue;
     215            0 :         uint16_t wIndex;
     216            0 :         uint16_t wLength;
     217            0 :         uint16_t data;
     218              : } __packed;
     219              : 
     220              : /** Ethernet Networking Functional Descriptor */
     221            1 : struct cdc_ecm_descriptor {
     222            0 :         uint8_t bFunctionLength;
     223            0 :         uint8_t bDescriptorType;
     224            0 :         uint8_t bDescriptorSubtype;
     225            0 :         uint8_t iMACAddress;
     226            0 :         uint32_t bmEthernetStatistics;
     227            0 :         uint16_t wMaxSegmentSize;
     228            0 :         uint16_t wNumberMCFilters;
     229            0 :         uint8_t bNumberPowerFilters;
     230              : } __packed;
     231              : 
     232              : /** Ethernet Network Control Model (NCM) Descriptor */
     233            1 : struct cdc_ncm_descriptor {
     234            0 :         uint8_t bFunctionLength;
     235            0 :         uint8_t bDescriptorType;
     236            0 :         uint8_t bDescriptorSubtype;
     237            0 :         uint16_t bcdNcmVersion;
     238            0 :         uint8_t bmNetworkCapabilities;
     239              : } __packed;
     240              : 
     241              : #endif /* ZEPHYR_INCLUDE_USB_CLASS_USB_CDC_H_ */
        

Generated by: LCOV version 2.0-1