mirror of
https://gitee.com/Vancouver2017/luban-lite.git
synced 2025-12-24 04:58:54 +00:00
232 lines
7.2 KiB
C
232 lines
7.2 KiB
C
/**
|
|
* @file usb_dc.h
|
|
* @brief
|
|
*
|
|
* Copyright (c) 2022 sakumisu
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed with
|
|
* this work for additional information regarding copyright ownership. The
|
|
* ASF licenses this file to you 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.
|
|
*
|
|
*/
|
|
#ifndef _USB_DC_H
|
|
#define _USB_DC_H
|
|
|
|
#include <stdint.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* @brief USB Endpoint Configuration.
|
|
*
|
|
* Structure containing the USB endpoint configuration.
|
|
*/
|
|
struct usbd_endpoint_cfg {
|
|
/** The number associated with the EP in the device
|
|
* configuration structure
|
|
* IN EP = 0x80 | \<endpoint number\>
|
|
* OUT EP = 0x00 | \<endpoint number\>
|
|
*/
|
|
uint8_t ep_addr;
|
|
/** Endpoint Transfer Type.
|
|
* May be Bulk, Interrupt, Control or Isochronous
|
|
*/
|
|
uint8_t ep_type;
|
|
/** Endpoint max packet size */
|
|
uint16_t ep_mps;
|
|
};
|
|
|
|
/**
|
|
* @brief USB Device Core Layer API
|
|
* @defgroup _usb_device_core_api USB Device Core API
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @brief init device controller registers.
|
|
* @return 0 on success, negative errno code on fail.
|
|
*/
|
|
int usb_dc_init(void);
|
|
|
|
/**
|
|
* @brief deinit device controller registers.
|
|
* @return 0 on success, negative errno code on fail.
|
|
*/
|
|
int usb_dc_deinit(void);
|
|
|
|
/**
|
|
* @brief Attach USB for device connection
|
|
*
|
|
* Function to attach USB for device connection. Upon success, the USB PLL
|
|
* is enabled, and the USB device is now capable of transmitting and receiving
|
|
* on the USB bus and of generating interrupts.
|
|
*
|
|
* @return 0 on success, negative errno code on fail.
|
|
*/
|
|
int usb_dc_attach(void);
|
|
|
|
/**
|
|
* @brief Detach the USB device
|
|
*
|
|
* Function to detach the USB device. Upon success, the USB hardware PLL
|
|
* is powered down and USB communication is disabled.
|
|
*
|
|
* @return 0 on success, negative errno code on fail.
|
|
*/
|
|
int usb_dc_detach(void);
|
|
|
|
/**
|
|
* @brief Set USB device address
|
|
*
|
|
* @param[in] addr Device address
|
|
*
|
|
* @return 0 on success, negative errno code on fail.
|
|
*/
|
|
int usbd_set_address(const uint8_t addr);
|
|
|
|
/**
|
|
* @brief configure and enable endpoint.
|
|
*
|
|
* This function sets endpoint configuration according to one specified in USB.
|
|
* endpoint descriptor and then enables it for data transfers.
|
|
*
|
|
* @param [in] ep_desc Endpoint descriptor byte array.
|
|
*
|
|
* @return true if successfully configured and enabled.
|
|
*/
|
|
int usbd_ep_open(const struct usbd_endpoint_cfg *ep_cfg);
|
|
|
|
/**
|
|
* @brief Disable the selected endpoint
|
|
*
|
|
* Function to disable the selected endpoint. Upon success interrupts are
|
|
* disabled for the corresponding endpoint and the endpoint is no longer able
|
|
* for transmitting/receiving data.
|
|
*
|
|
* @param[in] ep Endpoint address corresponding to the one
|
|
* listed in the device configuration table
|
|
*
|
|
* @return 0 on success, negative errno code on fail.
|
|
*/
|
|
int usbd_ep_close(const uint8_t ep);
|
|
|
|
/**
|
|
* @brief Set stall condition for the selected endpoint
|
|
*
|
|
* @param[in] ep Endpoint address corresponding to the one
|
|
* listed in the device configuration table
|
|
*
|
|
* @return 0 on success, negative errno code on fail.
|
|
*/
|
|
int usbd_ep_set_stall(const uint8_t ep);
|
|
|
|
/**
|
|
* @brief Clear stall condition for the selected endpoint
|
|
*
|
|
* @param[in] ep Endpoint address corresponding to the one
|
|
* listed in the device configuration table
|
|
*
|
|
* @return 0 on success, negative errno code on fail.
|
|
*/
|
|
int usbd_ep_clear_stall(const uint8_t ep);
|
|
|
|
/**
|
|
* @brief Check if the selected endpoint is stalled
|
|
*
|
|
* @param[in] ep Endpoint address corresponding to the one
|
|
* listed in the device configuration table
|
|
* @param[out] stalled Endpoint stall status
|
|
*
|
|
* @return 0 on success, negative errno code on fail.
|
|
*/
|
|
int usbd_ep_is_stalled(const uint8_t ep, uint8_t *stalled);
|
|
|
|
/**
|
|
* @brief Write data to the specified endpoint with poll mode.
|
|
*
|
|
* This function is called to write data to the specified endpoint. The
|
|
* supplied usbd_endpoint_callback function will be called when data is transmitted
|
|
* out.
|
|
*
|
|
* @param[in] ep Endpoint address corresponding to the one
|
|
* listed in the device configuration table
|
|
* @param[in] data Pointer to data to write
|
|
* @param[in] data_len Length of the data requested to write. This may
|
|
* be zero for a zero length status packet.
|
|
* @param[out] ret_bytes Bytes scheduled for transmission. This value
|
|
* may be NULL if the application expects all
|
|
* bytes to be written
|
|
*
|
|
* @return 0 on success, negative errno code on fail.
|
|
*/
|
|
int usbd_ep_write(const uint8_t ep, const uint8_t *data, uint32_t data_len, uint32_t *ret_bytes);
|
|
|
|
/**
|
|
* @brief Read data from the specified endpoint
|
|
*
|
|
* This function is called by the endpoint handler function, after an OUT
|
|
* interrupt has been received for that EP. The application must only call this
|
|
* function through the supplied usbd_ep_callback function. This function clears
|
|
* the ENDPOINT NAK when max_data_len is 0, if all data in the endpoint FIFO has been read,
|
|
* so as to accept more data from host.
|
|
*
|
|
* @param[in] ep Endpoint address corresponding to the one
|
|
* listed in the device configuration table
|
|
* @param[in] data Pointer to data buffer to write to
|
|
* @param[in] max_data_len Max length of data to read
|
|
* @param[out] read_bytes Number of bytes read. If data is NULL and
|
|
* max_data_len is 0 the number of bytes
|
|
* available for read should be returned.
|
|
*
|
|
* @return 0 on success, negative errno code on fail.
|
|
*/
|
|
int usbd_ep_read(const uint8_t ep, uint8_t *data, uint32_t max_data_len, uint32_t *read_bytes);
|
|
|
|
/**
|
|
* @brief Write data to the specified endpoint with async mode.
|
|
*
|
|
* @param[in] ep Endpoint address corresponding to the one
|
|
* listed in the device configuration table
|
|
* @param[in] data Pointer to data to write
|
|
* @param[in] data_len Length of the data requested to write. This may
|
|
* be zero for a zero length status packet.
|
|
*
|
|
* @return 0 on success, negative errno code on fail.
|
|
*/
|
|
int usbd_ep_write_async(const uint8_t ep, const uint8_t *data, uint32_t data_len);
|
|
|
|
/**
|
|
* @brief Read data from the specified endpoint with async mode.
|
|
*
|
|
* @param[in] ep Endpoint address corresponding to the one
|
|
* listed in the device configuration table
|
|
* @param[in] data Pointer to data buffer to write to
|
|
* @param[in] data_len Max length of data to read
|
|
*
|
|
* @return 0 on success, negative errno code on fail.
|
|
*/
|
|
int usbd_ep_read_async(const uint8_t ep, uint8_t *data, uint32_t data_len);
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|