Files
ESPC3-wireless/app/drivers/data_port/usb-host/esp_usbh_cdc.h
LokLiang 9cf47ff0a8 添加 USB 主机、BLE 和 Socket 数据端口驱动程序:
- 支持大容量存储类(MSC)的 USB 主机驱动程序
- BLE SPP(串行端口配置文件)客户端和服务器实现
- Socket(UDP/TCP)数据端口驱动程序
- 相关的 shell 接口用于配置和测试
2025-02-21 12:43:26 +08:00

110 lines
4.0 KiB
C

// Copyright 2019-2021 Espressif Systems (Shanghai) PTE LTD
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#pragma once
#include "stdio.h"
#include "freertos/FreeRTOS.h"
#include "esp_err.h"
#include "hal/usbh_ll.h"
#include "hcd.h"
/**
* @brief USB host CDC configuration type, callbacks should not in block state
*/
typedef struct usbh_cdc_config
{
uint8_t bulk_in_ep_addr; /*!< USB CDC bulk in endpoint address, will be overwritten if bulk_in_ep is specified */
uint8_t bulk_out_ep_addr; /*!< USB CDC bulk out endpoint address, will be overwritten if bulk_out_ep is specified */
int rx_buffer_size; /*!< USB receive/in pipe_obj size */
int tx_buffer_size; /*!< USB transport/out pipe_obj size */
usb_ep_desc_t *bulk_in_ep; /*!< USB CDC bulk in endpoint descriptor, set NULL if using default param */
usb_ep_desc_t *bulk_out_ep; /*!< USB CDC bulk out endpoint descriptor, set NULL if using default param */
usbh_cdc_cb_t conn_callback; /*!< USB connect calllback, set NULL if not use */
usbh_cdc_cb_t disconn_callback; /*!< USB disconnect calllback, usb cdc driver reset to connect waitting after disconnect, set NULL if not use */
usbh_cdc_cb_t rx_callback; /*!< packet receive callback, set NULL if not use */
void *conn_callback_arg; /*!< USB connect calllback args, set NULL if not use */
void *disconn_callback_arg; /*!< USB disconnect calllback args, set NULL if not use */
void *rx_callback_arg; /*!< packet receive callback args, set NULL if not use */
} usbh_cdc_config_t;
/**
* @brief Install USB CDC driver.
*
* @param config USB Host CDC configs
* @return
* ESP_ERR_INVALID_STATE driver has been installed
* ESP_ERR_INVALID_ARG args not supported
* ESP_FAIL driver install failed
* ESP_OK driver install succeed
*/
esp_err_t usbh_cdc_driver_install(const usbh_cdc_config_t *config);
/**
* @brief Uninstall USB driver.
*
* @return
* ESP_ERR_INVALID_STATE driver not installed
* ESP_OK start succeed
*/
esp_err_t usbh_cdc_driver_delete(void);
/**
* @brief Waitting until CDC device connect
*
* @param ticks_to_wait Wait timeout value, count in RTOS ticks
* @return
* ESP_ERR_INVALID_STATE driver not installed
* ESP_ERR_TIMEOUT wait timeout
* ESP_OK device connect succeed
*/
esp_err_t usbh_cdc_wait_connect(TickType_t ticks_to_wait);
/**
* @brief Send data to connected USB device from a given buffer and length,
* this function will return after copying all the data to tx ring buffer.
*
* @param buf data buffer address
* @param length data length to send
* @return int The number of bytes pushed to the tx buffer
*/
int usbh_cdc_write_bytes(const uint8_t *buf, size_t length);
/**
* @brief Get USB receive ring buffer cached data length.
*
* @param size
* @return
* ESP_ERR_INVALID_STATE cdc not configured, or not running
* ESP_ERR_INVALID_ARG args not supported
* ESP_FAIL start failed
* ESP_OK start succeed
*/
esp_err_t usbh_cdc_get_buffered_data_len(size_t *size);
/**
* @brief Read data bytes from USB receive/in buffer.
*
* @param buf data buffer address
* @param length data length to read
* @param ticks_to_wait sTimeout, count in RTOS ticks
* @return int The number of bytes read from USB FIFO
*/
int usbh_cdc_read_bytes(uint8_t *buf, size_t length, TickType_t ticks_to_wait);
/**
* @brief print internal memory usage for debug
* @return void
*/
void usbh_cdc_print_buffer_msg(void);