mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-03 22:08:28 +00:00 
			
		
		
		
	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
 |