Files
esp-idf/tools/mocks/usb/include/mock_add_usb_device.h
peter.marcisovsky 3cef3baeba feat(usb_host): Mock USB device open/close
- CMock callbacks for USB device opening and closing
2024-12-16 16:55:37 +01:00

295 lines
11 KiB
C

/*
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#pragma once
#include <stdint.h>
#include "usb_host.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Add mocked USB device to device list
*
* @param[in] dev_address device address
* @param[in] dev_desc device descriptor
* @param[in] config_desc configuration descriptor
*
* @return
* - ESP_OK: Mocked device added successfully
* - ESP_ERR_INVALID_ARG: Invalid input argument(s)
*/
esp_err_t usb_host_mock_add_device(uint8_t dev_address, const usb_device_desc_t *dev_desc, const usb_config_desc_t *config_desc);
/**
* @brief Get number of mocked USB devices in device list
*
* @return number of devices in devices list
*/
int usb_host_mock_get_devs_count(void);
/**
* @brief Print mocked devices info
* @note if 0xFF is passed as dev_address, function prints all the mocked devices
*
* - printf all info about mocked device(s)
* - device handler, device address, opened status, device descriptor, configuration descriptor
*
* @param[in] dev_address device address (if 0xFF is passed as dev_address, function prints all the mocked devices)
*
* @return
* - ESP_OK: Mocked device found and info printed
* - ESP_ERR_INVALID_SIZE: Mocked devices list empty
* - ESP_ERR_INVALID_ARG: Mocked device does not exist at the provided address
*/
esp_err_t usb_host_mock_print_mocked_devices(uint8_t dev_address);
/**
* @brief Initialize mocked devices list before use
*/
void usb_host_mock_dev_list_init(void);
/**
* @brief Get Mocked device config descriptor by address
*
* @param[in] dev_address device address
* @param[in] config_desc configuration descriptor
*
* @return
* - ESP_OK: Configuration descriptor successfully provided
* - ESP_ERR_INVALID_ARG: Invalid input argument(s), or Mocked device does not exist at the provided address
* - ESP_ERR_INVALID_SIZE: Mocked devices list empty
*/
esp_err_t usb_host_mock_get_config_descriptor_by_address(uint8_t dev_address, const usb_config_desc_t **config_desc);
/**
* @brief Get Mocked device device descriptor by address
*
* @param[in] dev_address device address
* @param[in] config_desc device descriptor
*
* @return
* - ESP_OK: Device descriptor successfully provided
* - ESP_ERR_INVALID_ARG: Invalid input argument(s), or Mocked device does not exist at the provided address
* - ESP_ERR_INVALID_SIZE: Mocked devices list empty
*/
esp_err_t usb_host_mock_get_device_descriptor_by_address(uint8_t dev_address, const usb_device_desc_t **device_desc);
// ------------------------------------------------- CMock callback functions ------------------------------------------
/**
* @brief Allocate a transfer object
* @note CMock callback function, registered to usb_host_transfer_alloc()
*
* @param[in] data_buffer_size Size of the transfer's data buffer
* @param[in] num_isoc_packets Number of isochronous packets in transfer (set to 0 for non-isochronous transfers)
* @param[out] transfer Transfer object
* @param[out] call_count Call count of the callback function (CMock mandatory argument)
*
* @return
* - ESP_OK: Transfer object allocated successfully
* - ESP_ERR_NO_MEM: Insufficient memory
*/
esp_err_t usb_host_transfer_alloc_mock_callback(size_t data_buffer_size, int num_isoc_packets, usb_transfer_t **transfer, int call_count);
/**
* @brief Free a transfer object
* @note CMock callback function, registered to usb_host_transfer_free()
*
* @param[in] transfer Transfer object
* @param[out] call_count Call count of the callback function (CMock mandatory argument)
*
* @return
* - ESP_OK: Transfer object freed successfully
*/
esp_err_t usb_host_transfer_free_mock_callback(usb_transfer_t *transfer, int call_count);
/**
* @brief Register Mocked USB Host client
* @note CMock callback function, registered to usb_host_client_register()
*
* @param[in] client_config USB Host client config
* @param[out] client_hdl_ret USB Host client handle
* @param[out] call_count Call count of the callback function (CMock mandatory argument)
*
* @return
* - ESP_OK: Client registered successfully
* - ESP_ERR_INVALID_ARG: Invalid argument
* - ESP_ERR_NO_MEM: Insufficient memory
*/
esp_err_t usb_host_client_register_mock_callback(const usb_host_client_config_t *client_config, usb_host_client_handle_t *client_hdl_ret, int call_count);
/**
* @brief Mocked USB Host Library client processing function
* @note CMock callback function, registered to usb_host_client_handle_events()
*
* - This function just blocks indefinitely, so the cdc_acm_client_task() does not loop
* - If we only had usb_host_client_handle_events_ExpectAnyArgsAndReturn(ESP_OK) instead of this callback, the cdc_acm_client_task() would loop infinitely
* - The only event implemented (for now) is client unblock, while uninstalling CDC-ACM driver
*
* @note This function can block
* @param[in] client_hdl Client handle
* @param[in] timeout_ticks Timeout in ticks to wait for an event to occur
* @param[out] call_count Call count of the callback function (CMock mandatory argument)
*
* @return
* - ESP_OK: No event to be handled
* - ESP_ERR_INVALID_ARG: Invalid argument
* - ESP_ERR_TIMEOUT: Semaphore waiting for events has timed out
*/
esp_err_t usb_host_client_handle_events_mock_callback(usb_host_client_handle_t client_hdl, TickType_t timeout_ticks, int call_count);
/**
* @brief Unblock a Mocked client
* @note CMock callback function, registered to usb_host_client_unblock()
*
* @param[in] client_hdl Client handle
* @param[out] call_count Call count of the callback function (CMock mandatory argument)
*
* @return
* - ESP_OK: Client unblocked successfully
* - ESP_ERR_INVALID_ARG: Invalid argument
*/
esp_err_t usb_host_client_unblock_mock_callback(usb_host_client_handle_t client_hdl, int call_count);
/**
* @brief Deregister a Mocked client
* @note CMock callback function, registered to usb_host_client_deregister()
*
* @param[in] client_hdl Client handle
* @param[out] call_count Call count of the callback function (CMock mandatory argument)
*
* @return
* - ESP_OK: Client deregistered successfully
* - ESP_ERR_INVALID_ARG: Invalid argument
*/
esp_err_t usb_host_client_deregister_mock_callback(usb_host_client_handle_t client_hdl, int call_count);
/**
* @brief Open a device
* @note CMock callback function, registered to usb_host_device_open()
*
* @param[in] client_hdl Client handle
* @param[in] dev_address Device's address
* @param[out] dev_hdl_ret Device's handle
* @param[out] call_count Call count of the callback function (CMock mandatory argument)
*
* @return
* - ESP_OK: Device opened successfully
* - ESP_ERR_INVALID_ARG: Invalid argument
* - ESP_ERR_NOT_FOUND: Device with specified dev_address not found
*/
esp_err_t usb_host_device_open_mock_callback(usb_host_client_handle_t client_hdl, uint8_t dev_address, usb_device_handle_t *dev_hdl_ret, int call_count);
/**
* @brief Close a device
* @note CMock callback function, registered to usb_host_device_close()
*
* @param[in] client_hdl Client handle
* @param[in] dev_hdl Device's handle
* @param[out] call_count Call count of the callback function (CMock mandatory argument)
*
* @return
* - ESP_OK: Device closed successfully
* - ESP_ERR_INVALID_ARG: Invalid argument
* - ESP_ERR_INVALID_STATE: Device was never opened
*/
esp_err_t usb_host_device_close_mock_callback(usb_host_client_handle_t client_hdl, usb_device_handle_t dev_hdl, int call_count);
/**
* @brief Fill a list of device address
* @note CMock callback function, registered to usb_host_device_addr_list_fill()
*
* @param[in] list_len Length of the empty list
* @param[inout] dev_addr_list Empty list to be filled
* @param[out] num_dev_ret Number of devices
* @param[out] call_count Call count of the callback function (CMock mandatory argument)
*
* @return
* - ESP_OK: Device list filled successfully
* - ESP_ERR_INVALID_ARG: Invalid argument
*/
esp_err_t usb_host_device_addr_list_fill_mock_callback(int list_len, uint8_t *dev_addr_list, int *num_dev_ret, int call_count);
/**
* @brief Get device's device descriptor
* @note CMock callback function, registered to usb_host_get_device_descriptor()
*
* @param[in] dev_hdl Device handle
* @param[out] device_desc Device descriptor
* @param[out] call_count Call count of the callback function (CMock mandatory argument)
*
* @return
* - ESP_OK: Device descriptor obtained successfully
* - ESP_ERR_INVALID_ARG: Invalid argument
*/
esp_err_t usb_host_get_device_descriptor_mock_callback(usb_device_handle_t dev_hdl, const usb_device_desc_t **device_desc, int call_count);
/**
* @brief Get device's active configuration descriptor
* @note CMock callback function, registered to usb_host_get_active_config_descriptor()
*
* @param[in] dev_hdl Device handle
* @param[out] config_desc Configuration descriptor
* @param[out] call_count Call count of the callback function (CMock mandatory argument)
*
* @return
* - ESP_OK: Active configuration descriptor obtained successfully
* - ESP_ERR_INVALID_ARG: Invalid argument
*/
esp_err_t usb_host_get_active_config_descriptor_mock_callback(usb_device_handle_t dev_hdl, const usb_config_desc_t **config_desc, int call_count);
/**
* @brief Submit data transfer successfully
* @note CMock callback function, registered to usb_host_transfer_submit()
*
* Transfer callback is called, transfer status marked as completed, correct number of transferred bytes
*
* @param[in] transfer Pointer to USB transfer
* @param[out] call_count Call count of the callback function (CMock mandatory argument)
*
* @return
* - ESP_OK: Transfer submitted
* - ESP_ERR_INVALID_ARG: Invalid input argument
*/
esp_err_t usb_host_transfer_submit_success_mock_callback(usb_transfer_t *transfer, int call_count);
/**
* @brief Submit data transfer, but fail to deliver
* @note CMock callback function, registered to usb_host_transfer_submit()
*
* Transfer callback is called, transfer status marked as error, incorrect number of transferred bytes
*
* @param[in] transfer Pointer to USB transfer
* @param[out] call_count Call count of the callback function (CMock mandatory argument)
*
* @return
* - ESP_OK: Transfer submitted
* - ESP_ERR_INVALID_ARG: Invalid input argument
*/
esp_err_t usb_host_transfer_submit_invalid_response_mock_callback(usb_transfer_t *transfer, int call_count);
/**
* @brief Submit data transfer, time the transfer out
* @note CMock callback function, registered to usb_host_transfer_submit()
*
* Transfer callback is not called, because transfer timeout is not implemented in the USB Host Library
*
* @param[in] transfer Pointer to USB transfer
* @param[out] call_count Call count of the callback function (CMock mandatory argument)
*
* @return
* - ESP_OK: Transfer submitted
* - ESP_ERR_INVALID_ARG: Invalid input argument
*/
esp_err_t usb_host_transfer_submit_timeout_mock_callback(usb_transfer_t *transfer, int call_count);
#ifdef __cplusplus
}
#endif