mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-03 05:55:49 +00:00 
			
		
		
		
	Hub Driver is refactored as follows:
This commit update and refactors the Hub Driver as follows:
- Refactored enumeration state machine and stage functions
    - Enumeration stage is now incremented
    - Combined transfer stages of enumeration into common functions
- Comments updated
- Fixed usbh_hal_disable_debounce_lock() that would cause root_port_handle_events()
    to fail the HCD_PORT_CMD_RESET call because the previous port connection interrupt
    was not cleared.
The following features were added to the Hub Driver
- Enumeration config descriptor is now fetched in two separate stages
    - Header is fetched first to determine the wTotalLength of the descriptor
    - Fetching the full descriptor will request exactly wTotalLength bytes
    - This works around some non-compliant devices that will babble/return zero
        when requesting a length > wTotalLength
    - Closes https://github.com/espressif/esp-idf/issues/7799
- Enumeration now stores string descriptors
    - The Manufacturer, Product, and Serial Number string descriptors are
        now read and stored during enumeration
    - String descriptors are now part of usb_device_info_t
- Added unit test to test enumeration
		
	
		
			
				
	
	
		
			24 lines
		
	
	
		
			510 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			24 lines
		
	
	
		
			510 B
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD
 | 
						|
 *
 | 
						|
 * SPDX-License-Identifier: Apache-2.0
 | 
						|
 */
 | 
						|
 | 
						|
#include <stdint.h>
 | 
						|
 | 
						|
#define MSC_ASYNC_CLIENT_MAX_EVENT_MSGS       5
 | 
						|
 | 
						|
typedef struct {
 | 
						|
    int num_sectors_to_read;
 | 
						|
    int num_sectors_per_xfer;
 | 
						|
    uint32_t msc_scsi_xfer_tag;
 | 
						|
    uint16_t idVendor;
 | 
						|
    uint16_t idProduct;
 | 
						|
} msc_client_test_param_t;
 | 
						|
 | 
						|
void msc_client_async_seq_task(void *arg);
 | 
						|
 | 
						|
void msc_client_async_dconn_task(void *arg);
 | 
						|
 | 
						|
void msc_client_async_enum_task(void *arg);
 |