summaryrefslogtreecommitdiff
path: root/tinyusb/host
diff options
context:
space:
mode:
Diffstat (limited to 'tinyusb/host')
-rw-r--r--tinyusb/host/ehci/ehci.c2
-rw-r--r--tinyusb/host/usbh.c19
-rw-r--r--tinyusb/host/usbh_hcd.h10
3 files changed, 19 insertions, 12 deletions
diff --git a/tinyusb/host/ehci/ehci.c b/tinyusb/host/ehci/ehci.c
index 46ea67bf1..faabb4a55 100644
--- a/tinyusb/host/ehci/ehci.c
+++ b/tinyusb/host/ehci/ehci.c
@@ -340,7 +340,6 @@ static inline ehci_qtd_t* get_control_qtds(uint8_t dev_addr) ATTR_ALWAYS_INLINE
//--------------------------------------------------------------------+
// CONTROL PIPE API
//--------------------------------------------------------------------+
-// TODO subject to pure function
static void init_qtd(ehci_qtd_t* p_qtd, uint32_t data_ptr, uint16_t total_bytes)
{
memclr_(p_qtd, sizeof(ehci_qtd_t));
@@ -537,7 +536,6 @@ static inline ehci_qtd_t* get_control_qtds(uint8_t dev_addr)
}
-// TODO subject to pure function
static void init_qhd(ehci_qhd_t *p_qhd, uint8_t dev_addr, uint16_t max_packet_size, uint8_t endpoint_addr, uint8_t xfer_type)
{
memclr_(p_qhd, sizeof(ehci_qhd_t));
diff --git a/tinyusb/host/usbh.c b/tinyusb/host/usbh.c
index c84abbc5d..ad4bf3b2a 100644
--- a/tinyusb/host/usbh.c
+++ b/tinyusb/host/usbh.c
@@ -103,6 +103,13 @@ tusb_error_t usbh_init(void)
ASSERT_STATUS( hcd_init() );
+ //------------- Semaphore for Control Pipe -------------//
+ for(uint8_t i=0; i<TUSB_CFG_HOST_DEVICE_MAX; i++)
+ {
+ usbh_device_info_pool[i].sem_hdl = osal_semaphore_create( OSAL_SEM_REF(usbh_device_info_pool[i].semaphore) );
+ ASSERT_PTR(usbh_device_info_pool[i].sem_hdl, TUSB_ERROR_OSAL_SEMAPHORE_FAILED);
+ }
+
//------------- Enumeration & Reporter Task init -------------//
ASSERT_STATUS( osal_task_create(&enum_task) );
enum_queue_hdl = osal_queue_create(&enum_queue);
@@ -118,9 +125,19 @@ tusb_error_t usbh_init(void)
return TUSB_ERROR_NONE;
}
+// interrupt caused by a TD (with IOC=1) in pipe of class class_code
void usbh_isr(pipe_handle_t pipe_hdl, uint8_t class_code)
{
-
+ if (class_code == 0) // Control transfer
+ {
+ // TODO some semaphore posting
+ }else if (usbh_class_drivers[class_code].isr)
+ {
+ usbh_class_drivers[class_code].isr(pipe_hdl);
+ }else
+ {
+ ASSERT(false, (void) 0); // something wrong, no one claims the isr's source
+ }
}
// function called within a task, requesting os blocking services, subtask input parameter must be static/global variables
diff --git a/tinyusb/host/usbh_hcd.h b/tinyusb/host/usbh_hcd.h
index ab4bef49b..03901050b 100644
--- a/tinyusb/host/usbh_hcd.h
+++ b/tinyusb/host/usbh_hcd.h
@@ -90,20 +90,12 @@ typedef struct { // TODO internal structure, re-order members
//------------- configuration descriptor info -------------//
uint8_t interface_count; // bNumInterfaces alias
- uint8_t status; // value from enum tusbh_device_status_
+ uint8_t status; // value from enum tusbh_device_status_
-// pipe_handle_t pipe_control; NOTE: use device address/handle instead
tusb_std_request_t control_request;
OSAL_SEM_DEF(semaphore);
osal_semaphore_handle_t sem_hdl;
-#if 0 // TODO allow configure for vendor/product
- struct {
- uint8_t interface_count;
- uint8_t attributes;
- } configuration;
-#endif
-
} usbh_device_info_t;
extern usbh_device_info_t usbh_device_info_pool[TUSB_CFG_HOST_DEVICE_MAX+1]; // including zero-address