/* * test_usbd_host.c * * Created on: Jan 21, 2013 * Author: hathach */ /* * Software License Agreement (BSD License) * Copyright (c) 2012, hathach (tinyusb.net) * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY * OF SUCH DAMAGE. * * This file is part of the tiny usb stack. */ #include "unity.h" #include "errors.h" #include "usbh.h" #include "descriptor_test.h" #include "mock_osal.h" #include "mock_hcd.h" #include "mock_usbh_hcd.h" extern usbh_device_info_t usbh_device_info_pool[TUSB_CFG_HOST_DEVICE_MAX]; tusb_handle_device_t dev_hdl; void setUp(void) { dev_hdl = 0; memset(usbh_device_info_pool, 0, TUSB_CFG_HOST_DEVICE_MAX*sizeof(usbh_device_info_t)); } void tearDown(void) { } //--------------------------------------------------------------------+ // init, 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; ibRequest); TEST_ASSERT_EQUAL(TUSB_DESC_DEVICE, p_request->wValue >> 8); memcpy(data, &desc_device, p_request->wLength); return TUSB_ERROR_NONE; } tusb_error_t set_device_addr_stub(pipe_handle_t pipe_hdl, const tusb_std_request_t * const p_request, uint8_t data[], int num_call) { TEST_ASSERT_EQUAL(TUSB_REQUEST_SET_ADDRESS, p_request->bRequest); TEST_ASSERT_EQUAL(p_request->wValue, 1); return TUSB_ERROR_NONE; } tusb_error_t get_configuration_desc_stub(pipe_handle_t pipe_hdl, const tusb_std_request_t * const p_request, uint8_t data[], int num_call) { TEST_ASSERT(num_call < 2); TEST_ASSERT_EQUAL(TUSB_REQUEST_GET_DESCRIPTOR, p_request->bRequest); TEST_ASSERT_EQUAL(TUSB_DESC_CONFIGURATION, p_request->wValue >> 8); memcpy(data, &desc_device, p_request->wLength); return TUSB_ERROR_NONE; } void test_enum_task_connect(void) { pipe_handle_t pipe_addr0 = 12; osal_queue_receive_StubWithCallback(queue_recv_stub); hcd_port_connect_status_ExpectAndReturn(enum_connect.core_id, true); hcd_port_speed_ExpectAndReturn(enum_connect.core_id, TUSB_SPEED_FULL); { hcd_addr0_open_IgnoreAndReturn(TUSB_ERROR_NONE); // get 8-byte of device descriptor hcd_pipe_control_xfer_StubWithCallback(get_device_desc_stub); osal_semaphore_wait_StubWithCallback(semaphore_wait_stub); // set device address hcd_pipe_control_xfer_StubWithCallback(set_device_addr_stub); osal_semaphore_wait_StubWithCallback(semaphore_wait_stub); hcd_addr0_close_IgnoreAndReturn(TUSB_ERROR_NONE); } usbh_enumeration_task(); TEST_ASSERT_EQUAL(TUSB_DEVICE_STATUS_ADDRESSED, usbh_device_info_pool[0].status); TEST_ASSERT_EQUAL(TUSB_SPEED_FULL, usbh_device_info_pool[0].speed); TEST_ASSERT_EQUAL(enum_connect.core_id, usbh_device_info_pool[0].core_id); TEST_ASSERT_EQUAL(enum_connect.hub_addr, usbh_device_info_pool[0].hub_addr); TEST_ASSERT_EQUAL(enum_connect.hub_port, usbh_device_info_pool[0].hub_port); hcd_pipe_control_open_ExpectAndReturn(1, desc_device.bMaxPacketSize0, TUSB_ERROR_NONE); hcd_pipe_control_xfer_StubWithCallback(get_device_desc_stub); // get full device descriptor osal_semaphore_wait_StubWithCallback(semaphore_wait_stub); hcd_pipe_control_xfer_StubWithCallback(get_configuration_desc_stub); // get 9 bytes of configuration descriptor osal_semaphore_wait_StubWithCallback(semaphore_wait_stub); hcd_pipe_control_xfer_StubWithCallback(get_configuration_desc_stub); // get full-length configuration descriptor osal_semaphore_wait_StubWithCallback(semaphore_wait_stub); } void test_enum_task_disconnect(void) { TEST_IGNORE(); } void test_enum_task_connect_via_hub(void) { TEST_IGNORE(); } void test_enum_task_disconnect_via_hub(void) { TEST_IGNORE(); }