mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
18f9dabce1
This commit changes the IRP (I/O Request Packet) structure to the URB (USB Request Block) in order to represent USB transfers in the host stack. The new URB strcuture: - Add extra safety with const fields - Allows each layer of the stack to add their own overhead variables The HCD layer API and tests have been updated to use this new URB structure
153 lines
5.0 KiB
C
153 lines
5.0 KiB
C
// Copyright 2015-2020 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.
|
|
|
|
#include "freertos/FreeRTOS.h"
|
|
#include "freertos/semphr.h"
|
|
#include "hcd.h"
|
|
#include "usb_private.h"
|
|
#include "usb.h"
|
|
|
|
#define URB_CONTEXT_VAL ((void *)0xDEADBEEF)
|
|
|
|
// ------------------------------------------------- HCD Event Test ----------------------------------------------------
|
|
|
|
/**
|
|
* @brief Expect (wait) for an HCD port event
|
|
*
|
|
* @param port_hdl Port handle to expect event from
|
|
* @param expected_event Port event to expect
|
|
*/
|
|
void test_hcd_expect_port_event(hcd_port_handle_t port_hdl, hcd_port_event_t expected_event);
|
|
|
|
/**
|
|
* @brief Expect (wait) for an HCD pipe event
|
|
*
|
|
* @param pipe_hdl Pipe handle to expect event from
|
|
* @param expected_event Pipe event to expect
|
|
*/
|
|
void test_hcd_expect_pipe_event(hcd_pipe_handle_t pipe_hdl, hcd_pipe_event_t expected_event);
|
|
|
|
/**
|
|
* @brief Get the current number of queued port events (dequeued using test_hcd_expect_port_event())
|
|
*
|
|
* @param port_hdl Port handle
|
|
* @return int Number of port events currently queued
|
|
*/
|
|
int test_hcd_get_num_port_events(hcd_port_handle_t port_hdl);
|
|
|
|
/**
|
|
* @brief Get the current number of queued pipe events (dequeued using test_hcd_expect_pipe_event())
|
|
*
|
|
* @param pipe_hdl Pipe handle
|
|
* @return int Number of pipe events currently queued
|
|
*/
|
|
int test_hcd_get_num_pipe_events(hcd_pipe_handle_t pipe_hdl);
|
|
|
|
// ----------------------------------------------- Driver/Port Related -------------------------------------------------
|
|
|
|
/**
|
|
* @brief For the USB PHY into the connected or disconnected state
|
|
*
|
|
* @param connected For into connected state if true, disconnected if false
|
|
* @param delay_ticks Delay in ticks before forcing state
|
|
*/
|
|
void test_hcd_force_conn_state(bool connected, TickType_t delay_ticks);
|
|
|
|
/**
|
|
* @brief Sets up the HCD and initializes an HCD port.
|
|
*
|
|
* @return hcd_port_handle_t Port handle
|
|
*/
|
|
hcd_port_handle_t test_hcd_setup(void);
|
|
|
|
/**
|
|
* @brief Frees and HCD port and uninstalls the HCD
|
|
*
|
|
* @param port_hdl Port handle
|
|
*/
|
|
void test_hcd_teardown(hcd_port_handle_t port_hdl);
|
|
|
|
/**
|
|
* @brief Wait for a connection on an HCD port
|
|
*
|
|
* @note This function will internally call test_hcd_force_conn_state() to allow for a connection
|
|
*
|
|
* @param port_hdl Port handle
|
|
* @return usb_speed_t Speed of the connected device
|
|
*/
|
|
usb_speed_t test_hcd_wait_for_conn(hcd_port_handle_t port_hdl);
|
|
|
|
/**
|
|
* @brief Wait for a disconnection on an HCD port
|
|
*
|
|
* @note This fucntion will internally call test_hcd_force_conn_state() to force a disconnection
|
|
*
|
|
* @param port_hdl Port handle
|
|
* @param already_disabled Whether the HCD port is already in the disabled state
|
|
*/
|
|
void test_hcd_wait_for_disconn(hcd_port_handle_t port_hdl, bool already_disabled);
|
|
|
|
// ------------------------------------------------- Pipe alloc/free ---------------------------------------------------
|
|
|
|
/**
|
|
* @brief Test the allocation of a pipe
|
|
*
|
|
* @param port_hdl Port handle
|
|
* @param ep_desc Endpoint descriptor
|
|
* @param dev_addr Device address of the pipe
|
|
* @param dev_speed Device speed of the pipe
|
|
* @return hcd_pipe_handle_t Pipe handle
|
|
*/
|
|
hcd_pipe_handle_t test_hcd_pipe_alloc(hcd_port_handle_t port_hdl, const usb_desc_ep_t *ep_desc, uint8_t dev_addr, usb_speed_t dev_speed);
|
|
|
|
/**
|
|
* @brief Test the freeing of a pipe
|
|
*
|
|
* @param pipe_hdl Pipe handle
|
|
*/
|
|
void test_hcd_pipe_free(hcd_pipe_handle_t pipe_hdl);
|
|
|
|
/**
|
|
* @brief Allocate a URB
|
|
*
|
|
* @param num_isoc_packets Number of isochronous packets
|
|
* @param data_buffer_size Size of the data buffer of the URB
|
|
* @return urb_t* URB
|
|
*/
|
|
urb_t *test_hcd_alloc_urb(int num_isoc_packets, size_t data_buffer_size);
|
|
|
|
/**
|
|
* @brief Free a URB
|
|
*
|
|
* @param urb URB
|
|
*/
|
|
void test_hcd_free_urb(urb_t *urb);
|
|
|
|
// --------------------------------------------------- Enumeration -----------------------------------------------------
|
|
|
|
/**
|
|
* @brief Do some basic enumeration of the device
|
|
*
|
|
* For tests that need a device to have been enumerated (such as bulk tests). This function will enumerate that device
|
|
* using the device's default pipe. The minimal enumeration will include
|
|
*
|
|
* - Getting the device's descriptor and updating the default pipe's MPS
|
|
* - Setting the device's address and updating the default pipe to use that address
|
|
* - Setting the device to configuration 1 (i.e., the first configuration found
|
|
*
|
|
* @param default_pipe The connected device's default pipe
|
|
* @return uint8_t The address of the device after enumeration
|
|
*/
|
|
uint8_t test_hcd_enum_device(hcd_pipe_handle_t default_pipe);
|