summaryrefslogtreecommitdiff
path: root/tinyusb/host/usbh.c
diff options
context:
space:
mode:
authorhathach <[email protected]>2013-02-04 12:29:50 +0700
committerhathach <[email protected]>2013-02-04 12:29:50 +0700
commit5ec56120e678672c9da1953ad1890ecfa7bdb773 (patch)
treefa89b552b30eb0facba6774c817e39a3fe474e28 /tinyusb/host/usbh.c
parent5f8839fff8ff12bbf172b5fb9a984867a0d1d8da (diff)
rename usbd_host to usbh
Diffstat (limited to 'tinyusb/host/usbh.c')
-rw-r--r--tinyusb/host/usbh.c144
1 files changed, 144 insertions, 0 deletions
diff --git a/tinyusb/host/usbh.c b/tinyusb/host/usbh.c
new file mode 100644
index 000000000..69d30467b
--- /dev/null
+++ b/tinyusb/host/usbh.c
@@ -0,0 +1,144 @@
+/*
+ * usbd_host.c
+ *
+ * Created on: Jan 19, 2013
+ * Author: hathach
+ */
+
+/*
+ * Software License Agreement (BSD License)
+ * Copyright (c) 2013, 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 "tusb_option.h"
+
+#ifdef TUSB_CFG_HOST
+
+#define _TINY_USB_SOURCE_FILE_
+
+//--------------------------------------------------------------------+
+// INCLUDE
+//--------------------------------------------------------------------+
+#include "common/common.h"
+#include "usbh.h"
+#include "osal/osal.h"
+
+//--------------------------------------------------------------------+
+// MACRO CONSTANT TYPEDEF
+//--------------------------------------------------------------------+
+
+
+//--------------------------------------------------------------------+
+// INTERNAL OBJECT & FUNCTION DECLARATION
+//--------------------------------------------------------------------+
+
+STATIC_ usbh_device_info_t device_info_pool[TUSB_CFG_HOST_DEVICE_MAX];
+
+//--------------------------------------------------------------------+
+// PUBLIC API (Parameter Verification is required)
+//--------------------------------------------------------------------+
+tusbh_device_status_t tusbh_device_status_get (tusb_handle_device_t const device_hdl)
+{
+ ASSERT(device_hdl < TUSB_CFG_HOST_DEVICE_MAX, 0);
+ return device_info_pool[device_hdl].status;
+}
+
+//--------------------------------------------------------------------+
+// ENUMERATION TASK & ITS DATA
+//--------------------------------------------------------------------+
+OSAL_TASK_DEF(enum_task, usbh_enumeration_task, 128, OSAL_PRIO_HIGH);
+
+#define ENUM_QUEUE_DEPTH 5
+OSAL_DEF_QUEUE(enum_queue, ENUM_QUEUE_DEPTH, uin32_t);
+osal_queue_handle_t enum_queue_hdl;
+usbh_device_addr0_t device_addr0 TUSB_CFG_ATTR_USBRAM;
+
+void usbh_enumeration_task(void)
+{
+ tusb_error_t error;
+
+ OSAL_TASK_LOOP_BEGIN
+
+ osal_queue_receive(enum_queue_hdl, (uint32_t*)(&device_addr0.enum_entry), OSAL_TIMEOUT_NORMAL, &error);
+ TASK_ASSERT_STATUS(error);
+
+ if (device_addr0.enum_entry.hub_addr == 0) // direct connection
+ {
+ TASK_ASSERT(device_addr0.enum_entry.connect_status == hcd_port_connect_status(device_addr0.enum_entry.core_id)); // there chances the event is out-dated
+
+ tusb_std_request_t request_dev_desc =
+ {
+ .bmRequestType =
+ {
+ .direction = TUSB_DIR_DEV_TO_HOST,
+ .type = TUSB_REQUEST_TYPE_STANDARD,
+ .recipient = TUSB_REQUEST_RECIPIENT_DEVICE
+ },
+
+ .bRequest = TUSB_REQUEST_GET_DESCRIPTOR,
+ .wValue = (TUSB_DESC_DEVICE << 8),
+ .wLength = 8
+ };
+ device_addr0.speed = hcd_port_speed(device_addr0.enum_entry.core_id);
+// pipe_handle_t pipe_addr0 = hcd_pipe_addr0_open(&device_addr0);
+
+ // hcd_pipe_control_xfer(pipe_addr0, &request_dev_desc)
+ }else // device connect via a hub
+ {
+ ASSERT_MESSAGE("%s", "Hub is not supported yet");
+ }
+
+ OSAL_TASK_LOOP_END
+}
+
+//--------------------------------------------------------------------+
+// REPORTER TASK & ITS DATA
+//--------------------------------------------------------------------+
+
+
+//--------------------------------------------------------------------+
+// CLASS-USBD API (don't require to verify parameters)
+//--------------------------------------------------------------------+
+tusb_error_t usbh_init(void)
+{
+ uint32_t i;
+
+ memset(device_info_pool, 0, sizeof(usbh_device_info_t)*TUSB_CFG_HOST_DEVICE_MAX);
+
+ 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