/* * 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_ */