mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-04 00:51:42 +01:00 
			
		
		
		
	This commit adds the preliminary version of the USB Host Library. This commit contains: - USBH (USB Host Driver) - Hub Driver that only supports a single device and device enumeration - USB Host Library (asychronous API) - Test cases for USB Host Library asychronous API The following changes were made to the existing HCD: - Removed HCD_PIPE_STATE_INVALID. Pipes are no longer invalidated - Changed pipe commands to halt, flush, and clear. Pipes need to be manually halted, flush, and cleared. - Halting and flushing a pipe will execute the pipe callback if it causes a HCD_PIPE_EVENT_URB_DONE event
		
			
				
	
	
		
			89 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD
 | 
						|
 *
 | 
						|
 * SPDX-License-Identifier: Apache-2.0
 | 
						|
 */
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
#include <stdlib.h>
 | 
						|
#include <stdint.h>
 | 
						|
#include "esp_err.h"
 | 
						|
#include "usb_private.h"
 | 
						|
#include "usbh.h"
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
// ------------------------------------------------------ Types --------------------------------------------------------
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Hub driver configuration
 | 
						|
 */
 | 
						|
typedef struct {
 | 
						|
    usb_notif_cb_t notif_cb;            /**< Notification callback */
 | 
						|
    void *notif_cb_arg;                 /**< Notification callback argument */
 | 
						|
} hub_config_t;
 | 
						|
 | 
						|
// ---------------------------------------------- Hub Driver Functions -------------------------------------------------
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Install Hub driver
 | 
						|
 *
 | 
						|
 * Entry:
 | 
						|
 * - USBH must already be installed
 | 
						|
 * Exit:
 | 
						|
 * - Install Hub driver memory resources
 | 
						|
 * - Initializes the HCD root port
 | 
						|
 *
 | 
						|
 * @param[in] hub_config Hub driver configuration
 | 
						|
 * @return esp_err_t
 | 
						|
 */
 | 
						|
esp_err_t hub_install(hub_config_t *hub_config);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Uninstall Hub driver
 | 
						|
 *
 | 
						|
 * This must be called before uninstalling the USBH
 | 
						|
 * Entry:
 | 
						|
 * - Must have stopped the root port
 | 
						|
 * Exit:
 | 
						|
 * - HCD root port deinitialized
 | 
						|
 *
 | 
						|
 * @return esp_err_t
 | 
						|
 */
 | 
						|
esp_err_t hub_uninstall(void);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Start the Hub driver's root port
 | 
						|
 *
 | 
						|
 * This will power the root port ON
 | 
						|
 *
 | 
						|
 * @return esp_err_t
 | 
						|
 */
 | 
						|
esp_err_t hub_root_start(void);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Stops the Hub driver's root port
 | 
						|
 *
 | 
						|
 * This will power OFF the root port
 | 
						|
 *
 | 
						|
 * @return esp_err_t
 | 
						|
 */
 | 
						|
esp_err_t hub_root_stop(void);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Hub driver's processing function
 | 
						|
 *
 | 
						|
 * Hub driver handling function that must be called repeatdly to process the Hub driver's events. If blocking, the
 | 
						|
 * caller can block on the notification callback of source USB_NOTIF_SOURCE_HUB to run this function.
 | 
						|
 *
 | 
						|
 * @return esp_err_t
 | 
						|
 */
 | 
						|
esp_err_t hub_process(void);
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 |