test(usb): Extend USB mock with usb_host_device_info()

Also provide mocks for CTRL transfers usb_host_transfer_submit_control()
This commit is contained in:
Tomas Rezucha
2025-03-21 10:31:40 +01:00
parent 5b185da014
commit 914d003c7b
2 changed files with 118 additions and 2 deletions

View File

@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -289,6 +289,68 @@ esp_err_t usb_host_transfer_submit_invalid_response_mock_callback(usb_transfer_t
*/
esp_err_t usb_host_transfer_submit_timeout_mock_callback(usb_transfer_t *transfer, int call_count);
/**
* @brief Submit CTRL transfer, success
* @note CMock callback function, registered to usb_host_transfer_submit_control()
*
* Transfer callback is called, transfer status marked as completed, correct number of transferred bytes
*
* @param[in] client_hdl Client handle
* @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_control_success_mock_callback(usb_host_client_handle_t client_hdl, usb_transfer_t *transfer, int call_count);
/**
* @brief Submit CTRL transfer, error
* @note CMock callback function, registered to usb_host_transfer_submit_control()
*
* Transfer callback is called, transfer status marked as error, incorrect number of transferred bytes
*
* @param[in] client_hdl Client handle
* @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_control_invalid_response_mock_callback(usb_host_client_handle_t client_hdl, usb_transfer_t *transfer, int call_count);
/**
* @brief Submit CTRL transfer, time the transfer out
* @note CMock callback function, registered to usb_host_transfer_submit_control()
*
* Transfer callback is not called, because transfer timeout is not implemented in the USB Host Library
*
* @param[in] client_hdl Client handle
* @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_control_timeout_mock_callback(usb_host_client_handle_t client_hdl, usb_transfer_t *transfer, int call_count);
/**
* @brief USB Host device info mock callback
* @note CMock callback function registered to usb_host_device_info()
*
* @param[in] dev_hdl Device handle
* @param[out] dev_info Device information
* @param[out] call_count Call count of the callback function (CMock mandatory argument)
*
* @return
* - ESP_OK: Device information obtained successfully
* - ESP_ERR_INVALID_ARG: Invalid argument
*/
esp_err_t usb_host_device_info_mock_callback(usb_device_handle_t dev_hdl, usb_device_info_t *dev_info, int call_count);
#ifdef __cplusplus
}
#endif

View File

@@ -1,10 +1,11 @@
/*
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <stdio.h>
#include <string.h>
#include "esp_log.h"
#include "usb_private.h"
#include "usb/usb_types_ch9.h"
@@ -374,3 +375,56 @@ esp_err_t usb_host_transfer_submit_timeout_mock_callback(usb_transfer_t *transfe
MOCK_CHECK((transfer->bEndpointAddress & USB_B_ENDPOINT_ADDRESS_EP_NUM_MASK) != 0, ESP_ERR_INVALID_ARG);
return ESP_OK;
}
esp_err_t usb_host_transfer_submit_control_success_mock_callback(usb_host_client_handle_t client_hdl, usb_transfer_t *transfer, int call_count)
{
MOCK_CHECK(client_hdl != NULL && transfer != NULL, ESP_ERR_INVALID_ARG);
// Check that control transfer is valid
MOCK_CHECK(transfer->device_handle != NULL, ESP_ERR_INVALID_ARG); // Target device must be set
// Control transfers must be targeted at EP 0
MOCK_CHECK((transfer->bEndpointAddress & USB_B_ENDPOINT_ADDRESS_EP_NUM_MASK) == 0, ESP_ERR_INVALID_ARG);
transfer->status = USB_TRANSFER_STATUS_COMPLETED;
transfer->actual_num_bytes = transfer->num_bytes;
transfer->callback(transfer);
ESP_LOGD(MOCK_TAG_CB, "CTRL mocked transfer submitted, buff len: %d, buff: %s", transfer->num_bytes, transfer->data_buffer);
return ESP_OK;
}
esp_err_t usb_host_transfer_submit_control_invalid_response_mock_callback(usb_host_client_handle_t client_hdl, usb_transfer_t *transfer, int call_count)
{
MOCK_CHECK(client_hdl != NULL && transfer != NULL, ESP_ERR_INVALID_ARG);
// Check that control transfer is valid
MOCK_CHECK(transfer->device_handle != NULL, ESP_ERR_INVALID_ARG); // Target device must be set
// Control transfers must be targeted at EP 0
MOCK_CHECK((transfer->bEndpointAddress & USB_B_ENDPOINT_ADDRESS_EP_NUM_MASK) == 0, ESP_ERR_INVALID_ARG);
transfer->status = USB_TRANSFER_STATUS_ERROR;
transfer->actual_num_bytes = 0;
transfer->callback(transfer);
ESP_LOGD(MOCK_TAG_CB, "CTRL mocked transfer submitted, buff len: %d, buff: %s", transfer->num_bytes, transfer->data_buffer);
ESP_LOGW(MOCK_TAG_CB, "CTRL mocked transfer error");
return ESP_OK;
}
esp_err_t usb_host_transfer_submit_control_timeout_mock_callback(usb_host_client_handle_t client_hdl, usb_transfer_t *transfer, int call_count)
{
MOCK_CHECK(client_hdl != NULL && transfer != NULL, ESP_ERR_INVALID_ARG);
// Check that control transfer is valid
MOCK_CHECK(transfer->device_handle != NULL, ESP_ERR_INVALID_ARG); // Target device must be set
// Control transfers must be targeted at EP 0
MOCK_CHECK((transfer->bEndpointAddress & USB_B_ENDPOINT_ADDRESS_EP_NUM_MASK) == 0, ESP_ERR_INVALID_ARG);
return ESP_OK;
}
esp_err_t usb_host_device_info_mock_callback(usb_device_handle_t dev_hdl, usb_device_info_t *dev_info, int call_count)
{
MOCK_CHECK(dev_hdl != NULL && dev_info != NULL, ESP_ERR_INVALID_ARG);
const device_list_t *current_device = (const device_list_t *) dev_hdl;
memset(dev_info, 0, sizeof(usb_device_info_t));
dev_info->dev_addr = current_device->address;
dev_info->bMaxPacketSize0 = current_device->dev_desc->bMaxPacketSize0;
dev_info->bConfigurationValue = 1;
return ESP_OK;
}