summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <[email protected]>2013-03-04 16:21:41 +0700
committerhathach <[email protected]>2013-03-04 16:21:41 +0700
commit94c004724ccbe2b74af74fc1753184f6b3ccb9cf (patch)
treeb526a427c2bf16e46d7a20d1a5a54324922d9947
parent656da2992ded914c70da849f9f7a1571dd2b91f4 (diff)
allow configure host/device by controller basic
- make changes to adapt add mcu_capacity.h
-rw-r--r--demos/host/tusb_config.h7
-rw-r--r--tests/test/host/ehci/test_ehci_init.c10
-rw-r--r--tests/test/host/ehci/test_ehci_structure.c2
-rw-r--r--tests/test/support/tusb_config.h9
-rw-r--r--tests/test/test_project_settings.c5
-rw-r--r--tinyusb/host/ehci/ehci.c8
-rw-r--r--tinyusb/host/ehci/ehci.h4
-rw-r--r--tinyusb/mcu_capacity.h105
-rw-r--r--tinyusb/tusb_option.h15
9 files changed, 135 insertions, 30 deletions
diff --git a/demos/host/tusb_config.h b/demos/host/tusb_config.h
index 22c1778ae..f482e333b 100644
--- a/demos/host/tusb_config.h
+++ b/demos/host/tusb_config.h
@@ -56,12 +56,17 @@
#endif
//--------------------------------------------------------------------+
+// CONTROLLER CONFIGURATION
+//--------------------------------------------------------------------+
+#define TUSB_CFG_CONTROLLER0_MODE TUSB_MODE_HOST
+#define TUSB_CFG_CONTROLLER1_MODE TUSB_MODE_HOST
+
+//--------------------------------------------------------------------+
// HOST CONFIGURATION
//--------------------------------------------------------------------+
#define TUSB_CFG_HOST
//------------- CONTROLLER -------------//
-#define TUSB_CFG_HOST_CONTROLLER_NUM 1
#define TUSB_CFG_HOST_CONTROLLER_START_INDEX 0
#define TUSB_CFG_HOST_DEVICE_MAX 1
diff --git a/tests/test/host/ehci/test_ehci_init.c b/tests/test/host/ehci/test_ehci_init.c
index f83d5f979..ab4e8d219 100644
--- a/tests/test/host/ehci/test_ehci_init.c
+++ b/tests/test/host/ehci/test_ehci_init.c
@@ -81,7 +81,7 @@ void test_hcd_init_usbint(void)
{
hcd_init();
- for(uint32_t i=0; i<TUSB_CFG_HOST_CONTROLLER_NUM; i++)
+ for(uint32_t i=0; i<CONTROLLER_HOST_NUMBER; i++)
{
ehci_registers_t* const regs = get_operational_register(i+TUSB_CFG_HOST_CONTROLLER_START_INDEX);
@@ -105,7 +105,7 @@ void test_hcd_init_async_list(void)
{
hcd_init();
- for(uint32_t i=0; i<TUSB_CFG_HOST_CONTROLLER_NUM; i++)
+ for(uint32_t i=0; i<CONTROLLER_HOST_NUMBER; i++)
{
uint8_t hostid = i+TUSB_CFG_HOST_CONTROLLER_START_INDEX;
@@ -130,7 +130,7 @@ void test_hcd_init_period_list(void)
#if EHCI_PERIODIC_LIST
hcd_init();
- for(uint32_t i=0; i<TUSB_CFG_HOST_CONTROLLER_NUM; i++)
+ for(uint32_t i=0; i<CONTROLLER_HOST_NUMBER; i++)
{
uint8_t const hostid = i+TUSB_CFG_HOST_CONTROLLER_START_INDEX;
ehci_registers_t* const regs = get_operational_register(hostid);
@@ -158,7 +158,7 @@ void test_hcd_init_tt_control(void)
{
hcd_init();
- for(uint32_t i=0; i<TUSB_CFG_HOST_CONTROLLER_NUM; i++)
+ for(uint32_t i=0; i<CONTROLLER_HOST_NUMBER; i++)
{
uint8_t const hostid = i+TUSB_CFG_HOST_CONTROLLER_START_INDEX;
ehci_registers_t* const regs = get_operational_register(hostid);
@@ -171,7 +171,7 @@ void test_hcd_init_usbcmd(void)
{
hcd_init();
- for(uint32_t i=0; i<TUSB_CFG_HOST_CONTROLLER_NUM; i++)
+ for(uint32_t i=0; i<CONTROLLER_HOST_NUMBER; i++)
{
uint8_t const hostid = i+TUSB_CFG_HOST_CONTROLLER_START_INDEX;
ehci_registers_t* const regs = get_operational_register(hostid);
diff --git a/tests/test/host/ehci/test_ehci_structure.c b/tests/test/host/ehci/test_ehci_structure.c
index 81917edbf..7a5ff85d5 100644
--- a/tests/test/host/ehci/test_ehci_structure.c
+++ b/tests/test/host/ehci/test_ehci_structure.c
@@ -303,7 +303,7 @@ void test_register_portsc(void)
//--------------------------------------------------------------------+
void test_ehci_data(void)
{
- for(uint32_t i=0; i<TUSB_CFG_HOST_CONTROLLER_NUM; i++)
+ for(uint32_t i=0; i<CONTROLLER_HOST_NUMBER; i++)
{
uint8_t hostid = i+TUSB_CFG_HOST_CONTROLLER_START_INDEX;
TEST_ASSERT_BITS_LOW(4096-1, (uint32_t)get_period_frame_list(hostid) );
diff --git a/tests/test/support/tusb_config.h b/tests/test/support/tusb_config.h
index d7be7931a..cf0566133 100644
--- a/tests/test/support/tusb_config.h
+++ b/tests/test/support/tusb_config.h
@@ -56,13 +56,18 @@
#endif
//--------------------------------------------------------------------+
+// CONTROLLER CONFIGURATION
+//--------------------------------------------------------------------+
+#define TUSB_CFG_CONTROLLER0_MODE TUSB_MODE_HOST
+#define TUSB_CFG_CONTROLLER1_MODE TUSB_MODE_HOST
+
+//--------------------------------------------------------------------+
// HOST CONFIGURATION
//--------------------------------------------------------------------+
#define TUSB_CFG_HOST
-//------------- CORE/CONTROLLER -------------//
+//------------- CORE -------------//
#define TUSB_CFG_HOST_CONTROLLER_START_INDEX 0
-#define TUSB_CFG_HOST_CONTROLLER_NUM (2 - TUSB_CFG_HOST_CONTROLLER_START_INDEX)
#define TUSB_CFG_HOST_DEVICE_MAX 2
#define TUSB_CFG_CONFIGURATION_MAX 2
diff --git a/tests/test/test_project_settings.c b/tests/test/test_project_settings.c
index fdc0162da..8977a9b95 100644
--- a/tests/test/test_project_settings.c
+++ b/tests/test/test_project_settings.c
@@ -50,11 +50,6 @@ void tearDown(void)
{
}
-void test_memory_usage(void)
-{
- TEST_IGNORE_MESSAGE("Try to keep project total memory usage up-to-date");
-}
-
void test_latest_version(void)
{
TEST_ASSERT_EQUAL_STRING(LATEST_VERSION, TUSB_VERSION);
diff --git a/tinyusb/host/ehci/ehci.c b/tinyusb/host/ehci/ehci.c
index 961dc6517..4c55065cc 100644
--- a/tinyusb/host/ehci/ehci.c
+++ b/tinyusb/host/ehci/ehci.c
@@ -55,13 +55,13 @@
//--------------------------------------------------------------------+
STATIC_ ehci_data_t ehci_data TUSB_CFG_ATTR_USBRAM;
STATIC_ ehci_link_t period_frame_list0[EHCI_FRAMELIST_SIZE] ATTR_ALIGNED(4096) TUSB_CFG_ATTR_USBRAM;
-#if TUSB_CFG_HOST_CONTROLLER_NUM > 1
+#if CONTROLLER_HOST_NUMBER > 1
STATIC_ ehci_link_t period_frame_list1[EHCI_FRAMELIST_SIZE] ATTR_ALIGNED(4096) TUSB_CFG_ATTR_USBRAM;
#endif
//------------- Validation -------------//
STATIC_ASSERT( ALIGN_OF(period_frame_list0) == 4096, "Period Framelist must be 4k alginment");
-#if TUSB_CFG_HOST_CONTROLLER_NUM > 1
+#if CONTROLLER_HOST_NUMBER > 1
STATIC_ASSERT( ALIGN_OF(period_frame_list1) == 4096, "Period Framelist must be 4k alginment");
#endif
@@ -77,7 +77,7 @@ STATIC_ INLINE_ ehci_registers_t* const get_operational_register(uint8_t hostid)
STATIC_ INLINE_ ehci_link_t* const get_period_frame_list(uint8_t list_idx) ATTR_PURE ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
STATIC_ INLINE_ ehci_link_t* const get_period_frame_list(uint8_t list_idx)
{
-#if TUSB_CFG_HOST_CONTROLLER_NUM > 1
+#if CONTROLLER_HOST_NUMBER > 1
return list_idx ? period_frame_list1 : period_frame_list0; // TODO more than 2 controller
#else
return period_frame_list0;
@@ -108,7 +108,7 @@ tusb_error_t hcd_init(void)
//------------- Data Structure init -------------//
memclr_(&ehci_data, sizeof(ehci_data_t));
- for(i=0; i<TUSB_CFG_HOST_CONTROLLER_NUM; i++)
+ for(i=0; i<CONTROLLER_HOST_NUMBER; i++)
{
ASSERT_STATUS (hcd_controller_init(TUSB_CFG_HOST_CONTROLLER_START_INDEX + i));
}
diff --git a/tinyusb/host/ehci/ehci.h b/tinyusb/host/ehci/ehci.h
index 7f528eb06..880a0e477 100644
--- a/tinyusb/host/ehci/ehci.h
+++ b/tinyusb/host/ehci/ehci.h
@@ -435,8 +435,8 @@ typedef struct {
// ehci_itd_t itd[EHCI_MAX_ITD] ; ///< Iso Transfer Pool
struct {
- ehci_qhd_t async_head[TUSB_CFG_HOST_CONTROLLER_NUM]; /// head qhd of async list, also is used as control endpoint for address 0
- ehci_qhd_t period_head[TUSB_CFG_HOST_CONTROLLER_NUM];
+ ehci_qhd_t async_head[CONTROLLER_HOST_NUMBER]; /// head qhd of async list, also is used as control endpoint for address 0
+ ehci_qhd_t period_head[CONTROLLER_HOST_NUMBER];
ehci_qtd_t addr0_qtd[3];
}controller; ///< Static Interrupt Queue Head
diff --git a/tinyusb/mcu_capacity.h b/tinyusb/mcu_capacity.h
new file mode 100644
index 000000000..b851ca44a
--- /dev/null
+++ b/tinyusb/mcu_capacity.h
@@ -0,0 +1,105 @@
+/*
+ * mcu_capacity.h
+ *
+ * Created on: Mar 4, 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.
+ */
+
+/** \file
+ * \brief TBD
+ *
+ * \note TBD
+ */
+
+/** \ingroup TBD
+ * \defgroup TBD
+ * \brief TBD
+ *
+ * @{
+ */
+
+#ifndef _TUSB_MCU_CAPACITY_H_
+#define _TUSB_MCU_CAPACITY_H_
+
+#define MCU_LPC13UXX 1
+#define MCU_LPC11UXX 2
+#define MCU_LPC43XX 3
+#define MCU_LPC18XX 4
+#define MCU_LPC175X_6X 5
+#define MCU_LPC177X_8X 6
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+// CAP is abbreviation for Capacity
+
+//--------------------------------------------------------------------+
+// Controller
+//--------------------------------------------------------------------+
+#if MCU == MCU_LPC43XX || MCU == MCU_LPC18XX
+ #define CAP_CONTROLLER_NUMBER 2
+#else
+ #define CAP_CONTROLLER_NUMBER 1
+#endif
+
+#define CAP_MODE_DEVICE
+#if MCU == MCU_LPC43XX || MCU == MCU_LPC18XX || MCU == MCU_LPC175X_6X
+ #define CAP_MODE_HOST
+#endif
+
+#define CONTROLLER_HOST_NUMBER (\
+ (TUSB_CFG_CONTROLLER0_MODE & TUSB_MODE_HOST) ? 1 : 0\
+ +(TUSB_CFG_CONTROLLER1_MODE & TUSB_MODE_HOST) ? 1 : 0)
+
+#define CONTROLLER_DEVICE_NUMBER (\
+ (TUSB_CFG_CONTROLLER0_MODE & TUSB_MODE_DEVICE) ? 1 : 0\
+ +(TUSB_CFG_CONTROLLER1_MODE & TUSB_MODE_DEVICE) ? 1 : 0)
+
+#define MODE_HOST (CONTROLLER_HOST_NUMBER > 0)
+#define MODE_DEVICE (CONTROLLER_DEVICE_NUMBER > 0)
+
+//--------------------------------------------------------------------+
+// Validation
+//--------------------------------------------------------------------+
+#if (CAP_CONTROLLER_NUMBER == 1) && ( defined TUSB_CFG_CONTROLLER1_MODE)
+ #error current MCU does not have the required number of controllers
+#endif
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* _TUSB_MCU_CAPACITY_H_ */
+
+/** @} */
diff --git a/tinyusb/tusb_option.h b/tinyusb/tusb_option.h
index 20769a326..3b1830419 100644
--- a/tinyusb/tusb_option.h
+++ b/tinyusb/tusb_option.h
@@ -61,10 +61,15 @@
/// define this symbol will make tinyusb look for external configure file
#include "tusb_config.h"
+#include "mcu_capacity.h"
//--------------------------------------------------------------------+
// COMMON OPTIONS
//--------------------------------------------------------------------+
+#define TUSB_MODE_HOST BIN8(10)
+#define TUSB_MODE_DEVICE BIN8(01)
+#define TUSB_MODE_NONE BIN8(00)
+
/// 0: no debug information 3: most debug information provided
#ifndef TUSB_CFG_DEBUG
#define TUSB_CFG_DEBUG 3
@@ -89,21 +94,11 @@
#warning TUSB_CFG_CONFIGURATION_MAX is not defined, default value is 1
#endif
-// TODO may move to other places
-#define MCU_LPC13UXX 1
-#define MCU_LPC11UXX 2
-#define MCU_LPC43XX 3
-#define MCU_LPC18XX 4
-
//--------------------------------------------------------------------+
// HOST OPTIONS
//--------------------------------------------------------------------+
#ifdef TUSB_CFG_HOST
//------------- Controller -------------//
- #ifndef TUSB_CFG_HOST_CONTROLLER_NUM
- #define TUSB_CFG_HOST_CONTROLLER_NUM 1
- #warning TUSB_CFG_HOST_CONTROLLER_NUM is not defined, default value is 1
- #endif
#ifndef TUSB_CFG_HOST_CONTROLLER_START_INDEX
#error TUSB_CFG_HOST_CONTROLLER_START_INDEX is not defined