usbd_cdc.h
  1  /**
  2    ******************************************************************************
  3    * @file    usbd_cdc.h
  4    * @author  MCD Application Team
  5    * @brief   header file for the usbd_cdc.c file.
  6    ******************************************************************************
  7    * @attention
  8    *
  9    * Copyright (c) 2015 STMicroelectronics.
 10    * All rights reserved.
 11    *
 12    * This software is licensed under terms that can be found in the LICENSE file
 13    * in the root directory of this software component.
 14    * If no LICENSE file comes with this software, it is provided AS-IS.
 15    *
 16    ******************************************************************************
 17    */
 18  
 19  /* Define to prevent recursive inclusion -------------------------------------*/
 20  #ifndef __USB_CDC_H
 21  #define __USB_CDC_H
 22  
 23  #ifdef __cplusplus
 24  extern "C" {
 25  #endif
 26  
 27  /* Includes ------------------------------------------------------------------*/
 28  #include  "usbd_ioreq.h"
 29  
 30  /** @addtogroup STM32_USB_DEVICE_LIBRARY
 31    * @{
 32    */
 33  
 34  /** @defgroup usbd_cdc
 35    * @brief This file is the Header file for usbd_cdc.c
 36    * @{
 37    */
 38  
 39  
 40  /** @defgroup usbd_cdc_Exported_Defines
 41    * @{
 42    */
 43  #ifndef CDC_IN_EP
 44  #define CDC_IN_EP                                   0x81U  /* EP1 for data IN */
 45  #endif /* CDC_IN_EP */
 46  #ifndef CDC_OUT_EP
 47  #define CDC_OUT_EP                                  0x01U  /* EP1 for data OUT */
 48  #endif /* CDC_OUT_EP */
 49  #ifndef CDC_CMD_EP
 50  #define CDC_CMD_EP                                  0x82U  /* EP2 for CDC commands */
 51  #endif /* CDC_CMD_EP  */
 52  
 53  #ifndef CDC_HS_BINTERVAL
 54  #define CDC_HS_BINTERVAL                            0x10U
 55  #endif /* CDC_HS_BINTERVAL */
 56  
 57  #ifndef CDC_FS_BINTERVAL
 58  #define CDC_FS_BINTERVAL                            0x10U
 59  #endif /* CDC_FS_BINTERVAL */
 60  
 61  /* CDC Endpoints parameters: you can fine tune these values depending on the needed baudrates and performance. */
 62  #define CDC_DATA_HS_MAX_PACKET_SIZE                 512U  /* Endpoint IN & OUT Packet size */
 63  #define CDC_DATA_FS_MAX_PACKET_SIZE                 64U  /* Endpoint IN & OUT Packet size */
 64  #define CDC_CMD_PACKET_SIZE                         8U  /* Control Endpoint Packet size */
 65  
 66  #define USB_CDC_CONFIG_DESC_SIZ                     67U
 67  #define CDC_DATA_HS_IN_PACKET_SIZE                  CDC_DATA_HS_MAX_PACKET_SIZE
 68  #define CDC_DATA_HS_OUT_PACKET_SIZE                 CDC_DATA_HS_MAX_PACKET_SIZE
 69  
 70  #define CDC_DATA_FS_IN_PACKET_SIZE                  CDC_DATA_FS_MAX_PACKET_SIZE
 71  #define CDC_DATA_FS_OUT_PACKET_SIZE                 CDC_DATA_FS_MAX_PACKET_SIZE
 72  
 73  #define CDC_REQ_MAX_DATA_SIZE                       0x7U
 74  /*---------------------------------------------------------------------*/
 75  /*  CDC definitions                                                    */
 76  /*---------------------------------------------------------------------*/
 77  #define CDC_SEND_ENCAPSULATED_COMMAND               0x00U
 78  #define CDC_GET_ENCAPSULATED_RESPONSE               0x01U
 79  #define CDC_SET_COMM_FEATURE                        0x02U
 80  #define CDC_GET_COMM_FEATURE                        0x03U
 81  #define CDC_CLEAR_COMM_FEATURE                      0x04U
 82  #define CDC_SET_LINE_CODING                         0x20U
 83  #define CDC_GET_LINE_CODING                         0x21U
 84  #define CDC_SET_CONTROL_LINE_STATE                  0x22U
 85  #define CDC_SEND_BREAK                              0x23U
 86  
 87  /**
 88    * @}
 89    */
 90  
 91  
 92  /** @defgroup USBD_CORE_Exported_TypesDefinitions
 93    * @{
 94    */
 95  
 96  /**
 97    * @}
 98    */
 99  typedef struct
100  {
101    uint32_t bitrate;
102    uint8_t  format;
103    uint8_t  paritytype;
104    uint8_t  datatype;
105  } USBD_CDC_LineCodingTypeDef;
106  
107  typedef struct _USBD_CDC_Itf
108  {
109    int8_t (* Init)(void);
110    int8_t (* DeInit)(void);
111    int8_t (* Control)(uint8_t cmd, uint8_t *pbuf, uint16_t length);
112    int8_t (* Receive)(uint8_t *Buf, uint32_t *Len);
113    int8_t (* TransmitCplt)(uint8_t *Buf, uint32_t *Len, uint8_t epnum);
114  } USBD_CDC_ItfTypeDef;
115  
116  
117  typedef struct
118  {
119    uint32_t data[CDC_DATA_HS_MAX_PACKET_SIZE / 4U];      /* Force 32-bit alignment */
120    uint8_t  CmdOpCode;
121    uint8_t  CmdLength;
122    uint8_t  *RxBuffer;
123    uint8_t  *TxBuffer;
124    uint32_t RxLength;
125    uint32_t TxLength;
126  
127    __IO uint32_t TxState;
128    __IO uint32_t RxState;
129  } USBD_CDC_HandleTypeDef;
130  
131  
132  
133  /** @defgroup USBD_CORE_Exported_Macros
134    * @{
135    */
136  
137  /**
138    * @}
139    */
140  
141  /** @defgroup USBD_CORE_Exported_Variables
142    * @{
143    */
144  
145  extern USBD_ClassTypeDef USBD_CDC;
146  #define USBD_CDC_CLASS &USBD_CDC
147  /**
148    * @}
149    */
150  
151  /** @defgroup USB_CORE_Exported_Functions
152    * @{
153    */
154  uint8_t USBD_CDC_RegisterInterface(USBD_HandleTypeDef *pdev,
155                                     USBD_CDC_ItfTypeDef *fops);
156  
157  #ifdef USE_USBD_COMPOSITE
158  uint8_t USBD_CDC_SetTxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff,
159                               uint32_t length, uint8_t ClassId);
160  uint8_t USBD_CDC_TransmitPacket(USBD_HandleTypeDef *pdev, uint8_t ClassId);
161  #else
162  uint8_t USBD_CDC_SetTxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff,
163                               uint32_t length);
164  uint8_t USBD_CDC_TransmitPacket(USBD_HandleTypeDef *pdev);
165  #endif /* USE_USBD_COMPOSITE */
166  uint8_t USBD_CDC_SetRxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff);
167  uint8_t USBD_CDC_ReceivePacket(USBD_HandleTypeDef *pdev);
168  /**
169    * @}
170    */
171  
172  #ifdef __cplusplus
173  }
174  #endif
175  
176  #endif  /* __USB_CDC_H */
177  /**
178    * @}
179    */
180  
181  /**
182    * @}
183    */
184