mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-10-30 20:51:41 +00:00 
			
		
		
		
	 c66f46cb77
			
		
	
	c66f46cb77
	
	
	
		
			
			Previously, descriptors of the test devices were stored direclty in the mock device files (e.g., "mock_[hid|msc].[h|c]"). This commit splits out the device descriptors to separate files (e.g., "dev_[hid|msc].c") along with getter functions. Users that want to run the tests locally on a different device simply need to update the "dev_[hid|msc].c" file for their device.
		
			
				
	
	
		
			101 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD
 | |
|  *
 | |
|  * SPDX-License-Identifier: Apache-2.0
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <stdint.h>
 | |
| #include <stdbool.h>
 | |
| #include "esp_assert.h"
 | |
| #include "usb/usb_types_ch9.h"
 | |
| 
 | |
| /*
 | |
| This header contains bare-bone mock implementations of the MSC SCSI class
 | |
| */
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| extern const char *MSC_CLIENT_TAG;
 | |
| 
 | |
| #define MOCK_MSC_SCSI_REQ_INIT_RESET(setup_pkt_ptr, intf_num) ({  \
 | |
|     (setup_pkt_ptr)->bmRequestType = USB_BM_REQUEST_TYPE_DIR_OUT | USB_BM_REQUEST_TYPE_TYPE_CLASS | USB_BM_REQUEST_TYPE_RECIP_INTERFACE; \
 | |
|     (setup_pkt_ptr)->bRequest = 0xFF;    \
 | |
|     (setup_pkt_ptr)->wValue = 0; \
 | |
|     (setup_pkt_ptr)->wIndex = (intf_num);    \
 | |
|     (setup_pkt_ptr)->wLength = 0;    \
 | |
| })
 | |
| 
 | |
| typedef struct __attribute__((packed))
 | |
| {
 | |
|     uint8_t opcode; //0x28 = read(10), 0x2A=write(10)
 | |
|     uint8_t flags;
 | |
|     uint8_t lba_3;
 | |
|     uint8_t lba_2;
 | |
|     uint8_t lba_1;
 | |
|     uint8_t lba_0;
 | |
|     uint8_t group;
 | |
|     uint8_t len_1;
 | |
|     uint8_t len_0;
 | |
|     uint8_t control;
 | |
| } mock_scsi_cmd10_t;
 | |
| 
 | |
| typedef struct __attribute__((packed))
 | |
| {
 | |
|     uint32_t dCBWSignature;
 | |
|     uint32_t dCBWTag;
 | |
|     uint32_t dCBWDataTransferLength;
 | |
|     uint8_t bmCBWFlags;
 | |
|     uint8_t bCBWLUN;
 | |
|     uint8_t bCBWCBLength;
 | |
|     mock_scsi_cmd10_t CBWCB;
 | |
|     uint8_t padding[6];
 | |
| } mock_msc_bulk_cbw_t;
 | |
| 
 | |
| // USB Bulk Transfer Command Status Wrapper data
 | |
| typedef struct __attribute__((packed))
 | |
| {
 | |
|     uint32_t dCSWSignature;
 | |
|     uint32_t dCSWTag;
 | |
|     uint32_t dCSWDataResidue;
 | |
|     uint8_t bCSWStatus;
 | |
| } mock_msc_bulk_csw_t;
 | |
| 
 | |
| /**
 | |
|  * @brief Initialize a MSC Command Block Wrapper (CBW) as an SCSI command
 | |
|  *
 | |
|  * @param[in] cbw CBW structure
 | |
|  * @param[in] is_read Is a read command
 | |
|  * @param[in] offset Block offset
 | |
|  * @param[in] num_sectors Number of sectors to read
 | |
|  * @param[in] sector_size Size of each sector in bytes
 | |
|  * @param[in] tag Tag (this is simply echoed back
 | |
|  */
 | |
| void mock_msc_scsi_init_cbw(mock_msc_bulk_cbw_t *cbw,
 | |
|                             bool is_read,
 | |
|                             unsigned int offset,
 | |
|                             unsigned int num_sectors,
 | |
|                             unsigned int sector_size,
 | |
|                             uint32_t tag);
 | |
| 
 | |
| /**
 | |
|  * @brief Check that returned Command Status Wrapper (CSW) is valid
 | |
|  *
 | |
|  * @param[in] csw CSW structure
 | |
|  * @param[in] tag_expect Expected tag
 | |
|  * @return True if CSW is valid, false otherwise
 | |
|  */
 | |
| bool mock_msc_scsi_check_csw(mock_msc_bulk_csw_t *csw, uint32_t tag_expect);
 | |
| 
 | |
| /**
 | |
|  * @brief Construct configuration and string descriptors
 | |
|  */
 | |
| void mock_msc_scsi_init_reference_descriptors(void);
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 |