176 lines
7.0 KiB
C
176 lines
7.0 KiB
C
|
/*
|
||
|
* The Clear BSD License
|
||
|
* Copyright (c) 2015, Freescale Semiconductor, Inc.
|
||
|
* Copyright 2016-2017 NXP
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||
|
* are permitted (subject to the limitations in the disclaimer below) provided
|
||
|
* that the following conditions are met:
|
||
|
*
|
||
|
* o Redistributions of source code must retain the above copyright notice, this list
|
||
|
* of conditions and the following disclaimer.
|
||
|
*
|
||
|
* o Redistributions in binary form must reproduce the above copyright notice, this
|
||
|
* list of conditions and the following disclaimer in the documentation and/or
|
||
|
* other materials provided with the distribution.
|
||
|
*
|
||
|
* o Neither the name of the copyright holder nor the names of its
|
||
|
* contributors may be used to endorse or promote products derived from this
|
||
|
* software without specific prior written permission.
|
||
|
*
|
||
|
* NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
|
||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||
|
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
|
*/
|
||
|
#ifndef _USB_CDC_VCOM_H_
|
||
|
#define _USB_CDC_VCOM_H_ 1
|
||
|
|
||
|
#include "usb_device_descriptor.h"
|
||
|
#include "fsl_common.h"
|
||
|
|
||
|
/*******************************************************************************
|
||
|
* Definitions
|
||
|
******************************************************************************/
|
||
|
#if defined(USB_DEVICE_CONFIG_EHCI) && (USB_DEVICE_CONFIG_EHCI > 0)
|
||
|
#define CONTROLLER_ID kUSB_ControllerEhci0
|
||
|
#define DATA_BUFF_SIZE HS_CDC_VCOM_BULK_OUT_PACKET_SIZE
|
||
|
#endif /* USB_DEVICE_CONFIG_EHCI */
|
||
|
|
||
|
#if defined(USB_DEVICE_CONFIG_KHCI) && (USB_DEVICE_CONFIG_KHCI > 0)
|
||
|
#define CONTROLLER_ID kUSB_ControllerKhci0
|
||
|
#define DATA_BUFF_SIZE FS_CDC_VCOM_BULK_OUT_PACKET_SIZE
|
||
|
#endif /* USB_DEVICE_CONFIG_KHCI */
|
||
|
|
||
|
#if defined(USB_DEVICE_CONFIG_LPCIP3511FS) && (USB_DEVICE_CONFIG_LPCIP3511FS > 0U)
|
||
|
#define CONTROLLER_ID kUSB_ControllerLpcIp3511Fs0
|
||
|
#define DATA_BUFF_SIZE FS_CDC_VCOM_BULK_OUT_PACKET_SIZE
|
||
|
#endif /* USB_DEVICE_CONFIG_LPCIP3511FS */
|
||
|
|
||
|
#if defined(USB_DEVICE_CONFIG_LPCIP3511HS) && (USB_DEVICE_CONFIG_LPCIP3511HS > 0U)
|
||
|
#define CONTROLLER_ID kUSB_ControllerLpcIp3511Hs0
|
||
|
#define DATA_BUFF_SIZE HS_CDC_VCOM_BULK_OUT_PACKET_SIZE
|
||
|
#endif /* USB_DEVICE_CONFIG_LPCIP3511HS */
|
||
|
|
||
|
#if defined(USB_DEVICE_CONFIG_LPCIP3511FS) && (USB_DEVICE_CONFIG_LPCIP3511FS > 0U)
|
||
|
#define CONTROLLER_ID kUSB_ControllerLpcIp3511Fs0
|
||
|
#define DATA_BUFF_SIZE FS_CDC_VCOM_BULK_OUT_PACKET_SIZE
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#if defined(USB_DEVICE_CONFIG_LPCIP3511HS) && (USB_DEVICE_CONFIG_LPCIP3511HS > 0U)
|
||
|
#define CONTROLLER_ID kUSB_ControllerLpcIp3511Hs0
|
||
|
#define DATA_BUFF_SIZE HS_CDC_VCOM_BULK_OUT_PACKET_SIZE
|
||
|
#endif
|
||
|
|
||
|
#define USB_DEVICE_INTERRUPT_PRIORITY (3U)
|
||
|
|
||
|
/* Currently configured line coding */
|
||
|
#define LINE_CODING_SIZE (0x07)
|
||
|
#define LINE_CODING_DTERATE (115200)
|
||
|
#define LINE_CODING_CHARFORMAT (0x00)
|
||
|
#define LINE_CODING_PARITYTYPE (0x00)
|
||
|
#define LINE_CODING_DATABITS (0x08)
|
||
|
|
||
|
/* Communications feature */
|
||
|
#define COMM_FEATURE_DATA_SIZE (0x02)
|
||
|
#define STATUS_ABSTRACT_STATE (0x0000)
|
||
|
#define COUNTRY_SETTING (0x0000)
|
||
|
|
||
|
/* Notification of serial state */
|
||
|
#define NOTIF_PACKET_SIZE (0x08)
|
||
|
#define UART_BITMAP_SIZE (0x02)
|
||
|
#define NOTIF_REQUEST_TYPE (0xA1)
|
||
|
|
||
|
/* Define the types for application */
|
||
|
typedef struct _usb_cdc_vcom_struct
|
||
|
{
|
||
|
usb_device_handle deviceHandle; /* USB device handle. */
|
||
|
volatile uint8_t attach; /* A flag to indicate whether a usb device is attached. 1: attached, 0: not attached */
|
||
|
uint8_t speed; /* Speed of USB device. USB_SPEED_FULL/USB_SPEED_LOW/USB_SPEED_HIGH. */
|
||
|
volatile uint8_t
|
||
|
startTransactions; /* A flag to indicate whether a CDC device is ready to transmit and receive data. */
|
||
|
uint8_t currentConfiguration; /* Current configuration value. */
|
||
|
uint8_t currentInterfaceAlternateSetting
|
||
|
[USB_CDC_VCOM_INTERFACE_COUNT]; /* Current alternate setting value for each interface. */
|
||
|
} usb_cdc_vcom_struct_t;
|
||
|
|
||
|
/* Define the infomation relates to abstract control model */
|
||
|
typedef struct _usb_cdc_acm_info
|
||
|
{
|
||
|
uint8_t serialStateBuf[NOTIF_PACKET_SIZE + UART_BITMAP_SIZE]; /* Serial state buffer of the CDC device to notify the
|
||
|
serial state to host. */
|
||
|
bool dtePresent; /* A flag to indicate whether DTE is present. */
|
||
|
uint16_t breakDuration; /* Length of time in milliseconds of the break signal */
|
||
|
uint8_t dteStatus; /* Status of data terminal equipment */
|
||
|
uint8_t currentInterface; /* Current interface index. */
|
||
|
uint16_t uartState; /* UART state of the CDC device. */
|
||
|
} usb_cdc_acm_info_t;
|
||
|
|
||
|
/*******************************************************************************
|
||
|
* Prototypes
|
||
|
******************************************************************************/
|
||
|
/*!
|
||
|
* @brief Application initialization function.
|
||
|
*
|
||
|
* This function initializes the application.
|
||
|
*
|
||
|
* @return pointer to USB device handle.
|
||
|
*/
|
||
|
usb_device_handle USB_VcomInit(void);
|
||
|
|
||
|
/*!
|
||
|
* @brief Application initialization function.
|
||
|
*
|
||
|
* This function initializes the application.
|
||
|
*
|
||
|
* @return pointer to USB device handle.
|
||
|
*/
|
||
|
void USB_VcomDeinit(usb_device_handle deviceHandle);
|
||
|
|
||
|
/*!
|
||
|
* @brief USB recive data from host using a blocking method.
|
||
|
*
|
||
|
* This function recives data from host by usb cdc protocol
|
||
|
* @param baseAddr pointer to USB device handle.
|
||
|
* @param buf pointer to the data.
|
||
|
* @param count size of the transfer.
|
||
|
*
|
||
|
* @return A USB error code or kStatus_USB_Success.
|
||
|
*/
|
||
|
status_t USB_VcomReadBlocking(usb_device_handle baseAddr, uint8_t *buf, size_t count);
|
||
|
|
||
|
/*!
|
||
|
* @brief USB recive 'count' number of data from host using a blocking method.
|
||
|
*
|
||
|
* This function recives data from host by usb cdc protocol
|
||
|
* @param baseAddr pointer to USB device handle.
|
||
|
* @param buf pointer to the data.
|
||
|
* @param count size of the transfer.
|
||
|
*
|
||
|
* @return A USB error code or kStatus_USB_Success.
|
||
|
*/
|
||
|
status_t USB_VcomReadPolling(usb_device_handle baseAddr, uint8_t *buf, size_t count);
|
||
|
|
||
|
/*!
|
||
|
* @brief USB send data to host using a blocking method.
|
||
|
*
|
||
|
* This function sends data to host by usb cdc protocol
|
||
|
* @param baseAddr pointer to USB device handle.
|
||
|
* @param buf pointer to the data.
|
||
|
* @param count size of the transfer.
|
||
|
*
|
||
|
* @return None.
|
||
|
*/
|
||
|
void USB_VcomWriteBlocking(usb_device_handle baseAddr, const uint8_t *buf, size_t count);
|
||
|
|
||
|
#endif /* _USB_CDC_VCOM_H_ */
|