mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-10-30 22:51:41 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			99 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
 | |
|  *
 | |
|  * SPDX-License-Identifier: Apache-2.0
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <stdint.h>
 | |
| #include "esp_err.h"
 | |
| 
 | |
| //
 | |
| // TinyUSB helpers to mock the device
 | |
| //
 | |
| 
 | |
| typedef enum {
 | |
|     MOCK_DEV_STAGE_REQ_SHORT_DEV_DESC = 0x00,
 | |
|     MOCK_DEV_STAGE_REQ_FULL_DEV_DESC,
 | |
|     MOCK_DEV_STAGE_REQ_SHORT_CONFIG_DESC,
 | |
|     MOCK_DEV_STAGE_REQ_FULL_CONFIG_DESC,
 | |
|     MOCK_DEV_STAGE_REQ_SHORT_LANGID_TABLE,
 | |
|     MOCK_DEV_STAGE_REQ_FULL_LANGID_TABLE,
 | |
|     MOCK_DEV_STAGE_REQ_SHORT_MANU_STR_DESC,
 | |
|     MOCK_DEV_STAGE_REQ_FULL_MANU_STR_DESC,
 | |
|     MOCK_DEV_STAGE_REQ_SHORT_PROD_STR_DESC,
 | |
|     MOCK_DEV_STAGE_REQ_FULL_PROD_STR_DESC,
 | |
|     MOCK_DEV_STAGE_REQ_SHORT_SER_STR_DESC,
 | |
|     MOCK_DEV_STAGE_REQ_FULL_SER_STR_DESC,
 | |
|     MOCK_DEV_STAGE_SET_CONFIG,
 | |
|     MOCK_DEV_STAGE_MAX
 | |
| } mock_dev_stage_t;
 | |
| 
 | |
| typedef struct {
 | |
|     union {
 | |
|         const uint8_t *desc;
 | |
|         const char *str_desc;
 | |
|     };
 | |
|     bool stop_test;
 | |
| } mock_dev_stage_data_t;
 | |
| 
 | |
| typedef struct {
 | |
|     // connection/disconnection emulation
 | |
|     struct {
 | |
|         bool enabled;
 | |
|         uint32_t delay_ms;
 | |
|     } conn_dconn;
 | |
|     // enumeration logic
 | |
|     struct {
 | |
|         mock_dev_stage_t curr_stage;
 | |
|         mock_dev_stage_data_t stage_config[MOCK_DEV_STAGE_MAX];
 | |
|     } enumeration;
 | |
| } mock_dev_cfg_t;
 | |
| 
 | |
| /**
 | |
|  * @brief Setup the Mock device
 | |
|  *
 | |
|  * @param[in] mock_dev_cfg  Mock device configuration
 | |
|  *
 | |
|  * @note During the setup procedure:
 | |
|  * - Create semaphore
 | |
|  * - Init TinyUSB device stack
 | |
|  * - Create task for device stack handling
 | |
|  * - Configure the Mock device
 | |
|  * - Set current stage to MOCK_DEV_STAGE_REQ_SHORT_DEV_DESC
 | |
|  * - Insert Mock device (Emulate physical connection, if conn_dconn parameter was enabled during configuration)
 | |
|  *
 | |
|  * @return
 | |
|  *    - true if mock device configured successfully and ready
 | |
|  *    - false if mock device hasn't been configured
 | |
|  */
 | |
| bool mock_dev_setup(mock_dev_cfg_t *mock_dev_cfg);
 | |
| 
 | |
| /**
 | |
|  * @brief Wait the stop flag
 | |
|  *
 | |
|  * @note The stop flag is the semaphore mock_device_test_stop, which is triggered by:
 | |
|  * - Stop flag configuration parameter for mock device
 | |
|  * - tud_mount_cb(void)
 | |
|  *
 | |
|  * @return Error code value
 | |
|  *    - ESP_ERR_INVALID_STATE if mock device hasn't been started
 | |
|  *    - ESP_ERR_TIMEOUT if timeout has occurred
 | |
|  *    - ESP_OK if there was no error during test stop
 | |
|  */
 | |
| esp_err_t mock_dev_wait_flag(void);
 | |
| 
 | |
| /**
 | |
|  * @brief Release the Mock device
 | |
|  *
 | |
|  * @note During the release process:
 | |
|  * - Short delay to allow device to show up
 | |
|  * - Remove mock USB device (Emulate physical disconnection, if conn_dconn parameter was enabled during configuration)
 | |
|  * - Uninstall TinyUSB driver
 | |
|  * - Delete device handling task
 | |
|  * - Delete semaphore
 | |
|  * - Flush Mock device configuration
 | |
|  */
 | |
| void mock_dev_release(void);
 |