mirror of
https://github.com/hathach/tinyusb.git
synced 2025-02-16 06:40:11 +00:00
add TUSB_CFG_HOST_CONTROLLER_START_INDEX
update usbh_init and test code for TUSB_CFG_HOST_CONTROLLER_START_INDEX clean up some
This commit is contained in:
parent
ef0e105da6
commit
489b98cb93
@ -62,6 +62,8 @@
|
|||||||
|
|
||||||
//------------- CORE/CONTROLLER -------------//
|
//------------- CORE/CONTROLLER -------------//
|
||||||
#define TUSB_CFG_HOST_CONTROLLER_NUM 1
|
#define TUSB_CFG_HOST_CONTROLLER_NUM 1
|
||||||
|
#define TUSB_CFG_HOST_CONTROLLER_START_INDEX 0
|
||||||
|
|
||||||
#define TUSB_CFG_HOST_DEVICE_MAX 1
|
#define TUSB_CFG_HOST_DEVICE_MAX 1
|
||||||
#define TUSB_CFG_CONFIGURATION_MAX 1
|
#define TUSB_CFG_CONFIGURATION_MAX 1
|
||||||
|
|
||||||
|
@ -55,51 +55,8 @@ void tearDown(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// init, get_status
|
// get_status
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
void test_usbh_init_hcd_failed(void)
|
|
||||||
{
|
|
||||||
hcd_init_IgnoreAndReturn(TUSB_ERROR_HCD_FAILED);
|
|
||||||
TEST_ASSERT_EQUAL(TUSB_ERROR_HCD_FAILED, usbh_init());
|
|
||||||
}
|
|
||||||
|
|
||||||
void test_usbh_init_task_create_failed(void)
|
|
||||||
{
|
|
||||||
for(uint32_t i=0; i<TUSB_CFG_HOST_CONTROLLER_NUM; i++)
|
|
||||||
hcd_init_ExpectAndReturn(i, TUSB_ERROR_NONE);
|
|
||||||
|
|
||||||
osal_task_create_IgnoreAndReturn(TUSB_ERROR_OSAL_TASK_FAILED);
|
|
||||||
TEST_ASSERT_EQUAL(TUSB_ERROR_OSAL_TASK_FAILED, usbh_init());
|
|
||||||
}
|
|
||||||
|
|
||||||
void test_usbh_init_queue_create_failed(void)
|
|
||||||
{
|
|
||||||
for(uint32_t i=0; i<TUSB_CFG_HOST_CONTROLLER_NUM; i++)
|
|
||||||
hcd_init_ExpectAndReturn(i, TUSB_ERROR_NONE);
|
|
||||||
|
|
||||||
osal_task_create_IgnoreAndReturn(TUSB_ERROR_NONE);
|
|
||||||
osal_queue_create_IgnoreAndReturn(NULL);
|
|
||||||
TEST_ASSERT_EQUAL(TUSB_ERROR_OSAL_QUEUE_FAILED, usbh_init());
|
|
||||||
}
|
|
||||||
|
|
||||||
void test_usbh_init_ok(void)
|
|
||||||
{
|
|
||||||
uint32_t dummy;
|
|
||||||
|
|
||||||
usbh_device_info_t device_info_zero[TUSB_CFG_HOST_DEVICE_MAX+1];
|
|
||||||
memclr_(device_info_zero, sizeof(usbh_device_info_t)*(TUSB_CFG_HOST_DEVICE_MAX+1));
|
|
||||||
|
|
||||||
for(uint32_t i=0; i<TUSB_CFG_HOST_CONTROLLER_NUM; i++)
|
|
||||||
hcd_init_ExpectAndReturn(i, TUSB_ERROR_NONE);
|
|
||||||
|
|
||||||
osal_task_create_IgnoreAndReturn(TUSB_ERROR_NONE);
|
|
||||||
osal_queue_create_IgnoreAndReturn((osal_queue_handle_t)(&dummy));
|
|
||||||
|
|
||||||
TEST_ASSERT_EQUAL(TUSB_ERROR_NONE, usbh_init());
|
|
||||||
|
|
||||||
TEST_ASSERT_EQUAL_MEMORY(device_info_zero, usbh_device_info_pool, sizeof(usbh_device_info_t)*(TUSB_CFG_HOST_DEVICE_MAX+1));
|
|
||||||
}
|
|
||||||
|
|
||||||
void test_usbh_status_get_fail(void)
|
void test_usbh_status_get_fail(void)
|
||||||
{
|
{
|
||||||
usbh_device_info_pool[dev_hdl].status = 0;
|
usbh_device_info_pool[dev_hdl].status = 0;
|
||||||
@ -113,3 +70,59 @@ void test_usbh_status_get_succeed(void)
|
|||||||
usbh_device_info_pool[dev_hdl].status = TUSB_DEVICE_STATUS_READY;
|
usbh_device_info_pool[dev_hdl].status = TUSB_DEVICE_STATUS_READY;
|
||||||
TEST_ASSERT_EQUAL( TUSB_DEVICE_STATUS_READY, tusbh_device_status_get(dev_hdl) );
|
TEST_ASSERT_EQUAL( TUSB_DEVICE_STATUS_READY, tusbh_device_status_get(dev_hdl) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
// Init
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
void hcd_init_expect(void)
|
||||||
|
{
|
||||||
|
for(uint32_t i=0; i<TUSB_CFG_HOST_CONTROLLER_NUM; i++)
|
||||||
|
hcd_init_ExpectAndReturn(TUSB_CFG_HOST_CONTROLLER_START_INDEX+i, TUSB_ERROR_NONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_usbh_init_hcd_failed(void)
|
||||||
|
{
|
||||||
|
hcd_init_IgnoreAndReturn(TUSB_ERROR_HCD_FAILED);
|
||||||
|
TEST_ASSERT_EQUAL(TUSB_ERROR_HCD_FAILED, usbh_init());
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_usbh_init_enum_task_create_failed(void)
|
||||||
|
{
|
||||||
|
hcd_init_expect();
|
||||||
|
osal_task_create_IgnoreAndReturn(TUSB_ERROR_OSAL_TASK_FAILED);
|
||||||
|
TEST_ASSERT_EQUAL(TUSB_ERROR_OSAL_TASK_FAILED, usbh_init());
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_usbh_init_enum_queue_create_failed(void)
|
||||||
|
{
|
||||||
|
hcd_init_expect();
|
||||||
|
osal_task_create_IgnoreAndReturn(TUSB_ERROR_NONE);
|
||||||
|
osal_queue_create_IgnoreAndReturn(NULL);
|
||||||
|
TEST_ASSERT_EQUAL(TUSB_ERROR_OSAL_QUEUE_FAILED, usbh_init());
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_usbh_init_reporter_taks_create_failed(void)
|
||||||
|
{
|
||||||
|
TEST_IGNORE();
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_usbh_init_reporter_queue_create_failed(void)
|
||||||
|
{
|
||||||
|
TEST_IGNORE();
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_usbh_init_ok(void)
|
||||||
|
{
|
||||||
|
uint32_t dummy;
|
||||||
|
|
||||||
|
usbh_device_info_t device_info_zero[TUSB_CFG_HOST_DEVICE_MAX+1];
|
||||||
|
memclr_(device_info_zero, sizeof(usbh_device_info_t)*(TUSB_CFG_HOST_DEVICE_MAX+1));
|
||||||
|
|
||||||
|
hcd_init_expect();
|
||||||
|
osal_task_create_IgnoreAndReturn(TUSB_ERROR_NONE);
|
||||||
|
osal_queue_create_IgnoreAndReturn((osal_queue_handle_t)(&dummy));
|
||||||
|
|
||||||
|
TEST_ASSERT_EQUAL(TUSB_ERROR_NONE, usbh_init());
|
||||||
|
|
||||||
|
TEST_ASSERT_EQUAL_MEMORY(device_info_zero, usbh_device_info_pool, sizeof(usbh_device_info_t)*(TUSB_CFG_HOST_DEVICE_MAX+1));
|
||||||
|
}
|
||||||
|
@ -62,6 +62,8 @@
|
|||||||
|
|
||||||
//------------- CORE/CONTROLLER -------------//
|
//------------- CORE/CONTROLLER -------------//
|
||||||
#define TUSB_CFG_HOST_CONTROLLER_NUM 2
|
#define TUSB_CFG_HOST_CONTROLLER_NUM 2
|
||||||
|
#define TUSB_CFG_HOST_CONTROLLER_START_INDEX 1
|
||||||
|
|
||||||
#define TUSB_CFG_HOST_DEVICE_MAX 2
|
#define TUSB_CFG_HOST_DEVICE_MAX 2
|
||||||
#define TUSB_CFG_CONFIGURATION_MAX 2
|
#define TUSB_CFG_CONFIGURATION_MAX 2
|
||||||
|
|
||||||
|
@ -51,10 +51,6 @@
|
|||||||
#ifndef _TUSB_HAL_H_
|
#ifndef _TUSB_HAL_H_
|
||||||
#define _TUSB_HAL_H_
|
#define _TUSB_HAL_H_
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "tusb_option.h"
|
#include "tusb_option.h"
|
||||||
#include "common/compiler/compiler.h"
|
#include "common/compiler/compiler.h"
|
||||||
|
|
||||||
@ -72,6 +68,9 @@
|
|||||||
#include "hal_lpc43xx.h"
|
#include "hal_lpc43xx.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
/** \brief USB hardware init
|
/** \brief USB hardware init
|
||||||
*
|
*
|
||||||
|
@ -51,15 +51,25 @@
|
|||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// MACRO CONSTANT TYPEDEF
|
// MACRO CONSTANT TYPEDEF
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
#define ENUM_QUEUE_DEPTH 5
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// INTERNAL OBJECT & FUNCTION DECLARATION
|
// INTERNAL OBJECT & FUNCTION DECLARATION
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
static inline uint8_t get_new_address(void) ATTR_ALWAYS_INLINE;
|
|
||||||
|
|
||||||
STATIC_ usbh_device_info_t usbh_device_info_pool[TUSB_CFG_HOST_DEVICE_MAX+1]; // including zero-address
|
STATIC_ usbh_device_info_t usbh_device_info_pool[TUSB_CFG_HOST_DEVICE_MAX+1]; // including zero-address
|
||||||
|
|
||||||
|
//------------- Enumeration Task Data -------------//
|
||||||
|
OSAL_TASK_DEF(enum_task, usbh_enumeration_task, 128, OSAL_PRIO_HIGH);
|
||||||
|
OSAL_QUEUE_DEF(enum_queue, ENUM_QUEUE_DEPTH, uin32_t);
|
||||||
|
osal_queue_handle_t enum_queue_hdl;
|
||||||
|
STATIC_ uint8_t enum_data_buffer[TUSB_CFG_HOST_ENUM_BUFFER_SIZE] TUSB_CFG_ATTR_USBRAM;
|
||||||
|
|
||||||
|
//------------- Reporter Task Data -------------//
|
||||||
|
|
||||||
|
//------------- Helper Function Prototypes -------------//
|
||||||
|
static inline uint8_t get_new_address(void) ATTR_ALWAYS_INLINE;
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// PUBLIC API (Parameter Verification is required)
|
// PUBLIC API (Parameter Verification is required)
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
@ -70,22 +80,36 @@ tusbh_device_status_t tusbh_device_status_get (tusb_handle_device_t const device
|
|||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// ENUMERATION TASK & ITS DATA
|
// CLASS-USBD API (don't require to verify parameters)
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
OSAL_TASK_DEF(enum_task, usbh_enumeration_task, 128, OSAL_PRIO_HIGH);
|
tusb_error_t usbh_init(void)
|
||||||
|
{
|
||||||
|
uint32_t i;
|
||||||
|
|
||||||
#define ENUM_QUEUE_DEPTH 5
|
memclr_(usbh_device_info_pool, sizeof(usbh_device_info_t)*(TUSB_CFG_HOST_DEVICE_MAX+1));
|
||||||
OSAL_QUEUE_DEF(enum_queue, ENUM_QUEUE_DEPTH, uin32_t);
|
|
||||||
osal_queue_handle_t enum_queue_hdl;
|
|
||||||
STATIC_ uint8_t enum_data_buffer[TUSB_CFG_HOST_ENUM_BUFFER_SIZE] TUSB_CFG_ATTR_USBRAM;
|
|
||||||
|
|
||||||
|
for(i=0; i<TUSB_CFG_HOST_CONTROLLER_NUM; i++)
|
||||||
|
{
|
||||||
|
ASSERT_STATUS( hcd_init(TUSB_CFG_HOST_CONTROLLER_START_INDEX+i) );
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT_STATUS( osal_task_create(&enum_task) );
|
||||||
|
enum_queue_hdl = osal_queue_create(&enum_queue);
|
||||||
|
ASSERT_PTR(enum_queue_hdl, TUSB_ERROR_OSAL_QUEUE_FAILED);
|
||||||
|
|
||||||
|
return TUSB_ERROR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
// ENUMERATION TASK
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
void usbh_enumeration_task(void)
|
void usbh_enumeration_task(void)
|
||||||
{
|
{
|
||||||
tusb_error_t error;
|
tusb_error_t error;
|
||||||
usbh_enumerate_t enum_entry;
|
usbh_enumerate_t enum_entry;
|
||||||
tusb_std_request_t request_packet;
|
tusb_std_request_t request_packet;
|
||||||
|
|
||||||
|
// for OSAL_NONE local variable wont retain value after blocking service sem_wait/queue_recv
|
||||||
static uint8_t new_addr;
|
static uint8_t new_addr;
|
||||||
static uint8_t configure_selected = 1;
|
static uint8_t configure_selected = 1;
|
||||||
|
|
||||||
@ -201,26 +225,7 @@ void usbh_enumeration_task(void)
|
|||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
|
||||||
// CLASS-USBD API (don't require to verify parameters)
|
|
||||||
//--------------------------------------------------------------------+
|
|
||||||
tusb_error_t usbh_init(void)
|
|
||||||
{
|
|
||||||
uint32_t i;
|
|
||||||
|
|
||||||
memclr_(usbh_device_info_pool, sizeof(usbh_device_info_t)*(TUSB_CFG_HOST_DEVICE_MAX+1));
|
|
||||||
|
|
||||||
for(i=0; i<TUSB_CFG_HOST_CONTROLLER_NUM; i++)
|
|
||||||
{
|
|
||||||
ASSERT_STATUS( hcd_init(i) );
|
|
||||||
}
|
|
||||||
|
|
||||||
ASSERT_STATUS( osal_task_create(&enum_task) );
|
|
||||||
enum_queue_hdl = osal_queue_create(&enum_queue);
|
|
||||||
ASSERT_PTR(enum_queue_hdl, TUSB_ERROR_OSAL_QUEUE_FAILED);
|
|
||||||
|
|
||||||
return TUSB_ERROR_NONE;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
@ -51,10 +51,6 @@
|
|||||||
#ifndef _TUSB_OSAL_FREERTOS_H_
|
#ifndef _TUSB_OSAL_FREERTOS_H_
|
||||||
#define _TUSB_OSAL_FREERTOS_H_
|
#define _TUSB_OSAL_FREERTOS_H_
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "osal_common.h"
|
#include "osal_common.h"
|
||||||
|
|
||||||
//------------- FreeRTOS Headers -------------//
|
//------------- FreeRTOS Headers -------------//
|
||||||
@ -62,6 +58,10 @@
|
|||||||
#include "semphr.h"
|
#include "semphr.h"
|
||||||
#include "queue.h"
|
#include "queue.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// TICK API
|
// TICK API
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
@ -98,6 +98,10 @@
|
|||||||
#warning TUSB_CFG_HOST_CONTROLLER_NUM is not defined, default value is 1
|
#warning TUSB_CFG_HOST_CONTROLLER_NUM is not defined, default value is 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef TUSB_CFG_HOST_CONTROLLER_START_INDEX
|
||||||
|
#error TUSB_CFG_HOST_CONTROLLER_START_INDEX is not defined
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef TUSB_CFG_HOST_DEVICE_MAX
|
#ifndef TUSB_CFG_HOST_DEVICE_MAX
|
||||||
#define TUSB_CFG_HOST_DEVICE_MAX 1
|
#define TUSB_CFG_HOST_DEVICE_MAX 1
|
||||||
#warning TUSB_CFG_HOST_DEVICE_MAX is not defined, default value is 1
|
#warning TUSB_CFG_HOST_DEVICE_MAX is not defined, default value is 1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user