USB Component
Version 6.3
MDK-Professional Middleware for USB Device and Host
|
Implement application specific behaviour of a Communication Device Class (CDC) USB Device. More...
Functions | |
void | USBD_CDCn_ACM_Initialize (void) |
Called during USBD_Initialize to initialize the USB CDC class Device (Virtual COM Port) | |
void | USBD_CDCn_ACM_Uninitialize (void) |
Called during USBD_Uninitialize to de-initialize the USB CDC class Device (Virtual COM Port) | |
void | USBD_CDCn_ACM_Reset (void) |
Called during USB Bus reset to reset the USB CDC class Device (Virtual COM Port) | |
bool | USBD_CDCn_ACM_SetLineCoding (CDC_LINE_CODING *line_coding) |
Change communication settings of USB CDC class Device (Virtual COM Port) | |
bool | USBD_CDCn_ACM_GetLineCoding (CDC_LINE_CODING *line_coding) |
Retrieve communication settings of USB CDC class Device (Virtual COM Port) | |
bool | USBD_CDCn_ACM_SetControlLineState (uint16_t state) |
Set control line states of USB CDC class Device (Virtual COM Port) | |
void | USBD_CDCn_ACM_DataReceived (uint32_t len) |
Function indicating new data was received by USB CDC class Device (Virtual COM Port) | |
void | USBD_CDCn_ACM_DataSent (void) |
Function indicating all data was sent by USB CDC class Device (Virtual COM Port) | |
int32_t | USBD_CDC_ACM_WriteData (uint8_t instance, const uint8_t *buf, int32_t len) |
Write data from Communication Device to USB Host. | |
int | USBD_CDC_ACM_PutChar (uint8_t instance, int ch) |
Write a single character from Communication Device to USB Host. | |
int32_t | USBD_CDC_ACM_ReadData (uint8_t instance, uint8_t *buf, int32_t len) |
Read multiple data bytes received by Communication Device from USB Host. | |
int | USBD_CDC_ACM_GetChar (uint8_t instance) |
Read one character received by Communication Device from USB Host. | |
int32_t | USBD_CDC_ACM_DataAvailable (uint8_t instance) |
Retrieve number of data bytes received by Communication Device from USB Host that are available to read. | |
usbStatus | USBD_CDC_ACM_Notify (uint8_t instance, uint16_t state) |
Send notification of Communication Device status and line states to USB Host. | |
Implement application specific behaviour of a Communication Device Class (CDC) USB Device.
The CDC class in the USB Component is used for data communication. It is typically used in applications that previously used a serial COM or UART communication.
Refer to:
The USB Component allows multiple instances of the CDC class. This feature is used to create USB Composite Devices. Each CDC class instance has a separate files and interface functions:
This documentation uses n as a placeholder for the instance number 0 - 3. Most applications only require one instance of a CDC class. For the first CDC class instance the instance number is 0:
Software Structure
The handling for the CDC class endpoint events is implemented in USBD_CDCn_Int_Thread and USBD_CDCn_Bulk_Thread which are started by USBD_Initialize. Each instance of a CDC class runs an instance of USBD_CDCn_Int_Thread and USBD_CDCn_Bulk_Thread.
The thread USBD_CDCn_Int_Thread handles Interrupt IN Endpoint whereas the USBD_CDCn_Bulk_Thread handles the Bulk IN and Bulk OUT Endpoints.
Implementation
To create an USB Device with a CDC class:
Configuration File USBD_Config_CDC_n.h
The configuration file USBD_Config_CDC_n.h defines:
These settings are used to create the Interface Descriptor and Endpoint Descriptor of the related USB Device Class. It is important that the settings match the application specific behavior in the related C source file USBD_User_CDC_n.c.
User Code Template The USBD_User_CDC.c user code template contains all the callback functions that need to be implemented by the user.
User Code Template USBD_User_CDC.c
The following source code can be used to implement the application specific behavior of an USB CDC Device.
int32_t USBD_CDC_ACM_DataAvailable | ( | uint8_t | instance | ) |
Retrieve number of data bytes received by Communication Device from USB Host that are available to read.
[in] | instance | instance of CDC class. |
The function USBD_CDC_ACM_DataAvailable returns the number of bytes available in the intermediate buffer that was received from the USB Host by the CDC device instance that is specified by the argument instance.
Code Example
int USBD_CDC_ACM_GetChar | ( | uint8_t | instance | ) |
Read one character received by Communication Device from USB Host.
[in] | instance | instance of CDC class. |
The function USBD_CDC_ACM_GetChar reads a data character from the intermediate buffer that was received from the USB Host by the CDC device instance that is specified by the argument instance.
Code Example
usbStatus USBD_CDC_ACM_Notify | ( | uint8_t | instance, |
uint16_t | state | ||
) |
Send notification of Communication Device status and line states to USB Host.
[in] | instance | instance of CDC class. |
[in] | state | error status and line states:
|
The function USBD_CDC_ACM_Notify sends error and line status information about the Virtual COM Port over the Interrupt Endpoint.
The argument instance specifies the CDC device that is to be used with USBD_CDC_ACM_Notify.
The argument state specifies the error status and the line state.
Code Example
int USBD_CDC_ACM_PutChar | ( | uint8_t | instance, |
int | ch | ||
) |
Write a single character from Communication Device to USB Host.
[in] | instance | instance of CDC class. |
[in] | ch | character to write. |
The function USBD_CDC_ACM_PutChar asynchronously prepares a data byte that will be returned to the USB Host upon request.
The argument instance specifies the CDC class instance that is to be used.
The argument ch represents the character to be written.
Code Example
int32_t USBD_CDC_ACM_ReadData | ( | uint8_t | instance, |
uint8_t * | buf, | ||
int32_t | len | ||
) |
Read multiple data bytes received by Communication Device from USB Host.
[in] | instance | instance of CDC class. |
[out] | buf | buffer that receives data. |
[in] | len | maximum number of bytes to read. |
The function USBD_CDC_ACM_ReadData reads data from the intermediate buffer that was received from the USB Host and stores them into a buffer.
The argument instance specifies the CDC class instance that is to be used.
The argument buf is a pointer to the buffer where received data will be stored.
The argument len specifies the number of bytes to be read.
Code Example
int32_t USBD_CDC_ACM_WriteData | ( | uint8_t | instance, |
const uint8_t * | buf, | ||
int32_t | len | ||
) |
Write data from Communication Device to USB Host.
[in] | instance | instance of CDC class. |
[in] | buf | buffer containing data bytes to write. |
[in] | len | maximum number of bytes to write. |
The function USBD_CDC_ACM_WriteData asynchronously prepares data that will be returned to the USB Host upon request.
The argument instance specifies the CDC class instance that is to be used.
The argument buf is a pointer to the buffer containing the data to be written.
The argument len specifies the number of bytes to be written.
Code Example
void USBD_CDCn_ACM_DataReceived | ( | uint32_t | len | ) |
Function indicating new data was received by USB CDC class Device (Virtual COM Port)
[in] | len | number of bytes available to read. |
The function USBD_CDCn_ACM_DataReceived notifies that there is newly received data available.
The argument len is number of bytes available to read. Modify this function to the application needs.
void USBD_CDCn_ACM_DataSent | ( | void | ) |
Function indicating all data was sent by USB CDC class Device (Virtual COM Port)
The function USBD_CDCn_ACM_DataSent notifies that all data was sent.
bool USBD_CDCn_ACM_GetLineCoding | ( | CDC_LINE_CODING * | line_coding | ) |
Retrieve communication settings of USB CDC class Device (Virtual COM Port)
[out] | line_coding | pointer to CDC_LINE_CODING structure. |
The function USBD_CDCn_ACM_GetLineCoding retrieves communication settings of the port used as the Virtual COM Port.
The argument line_coding is a pointer to the CDC Line Coding structure containing coding settings. Modify this function to the application needs.
Code Example
void USBD_CDCn_ACM_Initialize | ( | void | ) |
Called during USBD_Initialize to initialize the USB CDC class Device (Virtual COM Port)
The function USBD_CDCn_ACM_Initialize initializes the hardware resources of the port used as the Virtual COM Port. It is called during USBD_Initialize. The function may be used to allocate resources and initialize peripherals. Modify this function to the application needs.
Code Example
The following code initializes an UART that is mapped as the Virtual COM Port to the CDC class.
void USBD_CDCn_ACM_Reset | ( | void | ) |
Called during USB Bus reset to reset the USB CDC class Device (Virtual COM Port)
The function USBD_CDCn_ACM_Reset resets the internal states of the port used as the Virtual COM Port. Modify this function to the application's needs.
Code Example
The following code resets an UART that is mapped as the Virtual COM Port to the CDC class.
bool USBD_CDCn_ACM_SetControlLineState | ( | uint16_t | state | ) |
Set control line states of USB CDC class Device (Virtual COM Port)
[in] | state | control line settings bitmap.
|
The function USBD_CDCn_ACM_SetControlLineState sets control line state on the port used as the Virtual COM Port.
The argument state represents control signal bitmap (0. bit - DTR line state, 1. bit - RTS line state). Modify this function to the application needs.
Code Example
The following code outputs the line state to LEDs.
bool USBD_CDCn_ACM_SetLineCoding | ( | CDC_LINE_CODING * | line_coding | ) |
Change communication settings of USB CDC class Device (Virtual COM Port)
[in] | line_coding | pointer to CDC_LINE_CODING structure. |
The function USBD_CDCn_ACM_SetLineCoding changes communication settings of the port used as the Virtual COM Port.
The argument line_coding is a pointer to the CDC Line Coding structure containing the requested coding settings. Modify this function to the application needs.
Code Example
The following code configures an UART that is mapped as the Virtual COM Port to the CDC class.
void USBD_CDCn_ACM_Uninitialize | ( | void | ) |
Called during USBD_Uninitialize to de-initialize the USB CDC class Device (Virtual COM Port)
The function USBD_CDCn_ACM_Uninitialize de-initializes/releases the hardware resources of the port used as the Virtual COM Port. It is called during USBD_Uninitialize. If USBD_CDCn_ACM_Initialize has been adapted to the application, USBD_CDCn_ACM_Uninitialize should release resources and should de-initialize peripherals.
Code Example