diff options
| author | hathach <[email protected]> | 2013-02-04 20:54:52 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2013-02-04 20:54:52 +0700 |
| commit | 93269b034396673062ec79e69673e95d47f29438 (patch) | |
| tree | 65c28d1881bebd59240ad4a50ec2432df27c085f /tinyusb | |
| parent | f88e9d045d70f4fbee24d92963cf39118deb7df9 (diff) | |
fix osal_semaphore_wait & osal_queue_receive of osal_none's bug
- not assign error to TUSB_ERROR_NON if succeed
add code up to set device address for enumeration
Diffstat (limited to 'tinyusb')
| -rw-r--r-- | tinyusb/host/usbh.c | 35 | ||||
| -rw-r--r-- | tinyusb/osal/osal_none.h | 5 |
2 files changed, 31 insertions, 9 deletions
diff --git a/tinyusb/host/usbh.c b/tinyusb/host/usbh.c index 38d96597d..f60299a06 100644 --- a/tinyusb/host/usbh.c +++ b/tinyusb/host/usbh.c @@ -98,19 +98,38 @@ void usbh_enumeration_task(void) { tusb_std_request_t request_device_desc = { - .bmRequestType = - { - .direction = TUSB_DIR_DEV_TO_HOST, - .type = TUSB_REQUEST_TYPE_STANDARD, - .recipient = TUSB_REQUEST_RECIPIENT_DEVICE - }, - + .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 }; + hcd_pipe_control_xfer(device_addr0.pipe_hdl, &request_device_desc, enum_data_buffer); -// osal_sem_wait(); + osal_semaphore_wait(device_addr0.sem_hdl, OSAL_TIMEOUT_NORMAL, &error); // careful of local variable without static + TASK_ASSERT_STATUS(error); + } + + { + uint8_t new_addr = 0; + for (new_addr=0; new_addr<TUSB_CFG_HOST_DEVICE_MAX; new_addr++) + { + if (device_info_pool[new_addr].status == TUSB_DEVICE_STATUS_UNPLUG) + break; + } + + TASK_ASSERT(new_addr < TUSB_CFG_HOST_DEVICE_MAX); + + tusb_std_request_t request_set_address = + { + .bmRequestType = { .direction = TUSB_DIR_HOST_TO_DEV, .type = TUSB_REQUEST_TYPE_STANDARD, .recipient = TUSB_REQUEST_RECIPIENT_DEVICE }, + .bRequest = TUSB_REQUEST_SET_ADDRESS, + .wValue = (new_addr+1), + .wLength = 8 + }; + + hcd_pipe_control_xfer(device_addr0.pipe_hdl, &request_set_address, NULL); + osal_semaphore_wait(device_addr0.sem_hdl, OSAL_TIMEOUT_NORMAL, &error); // careful of local variable without static + TASK_ASSERT_STATUS(error); } diff --git a/tinyusb/osal/osal_none.h b/tinyusb/osal/osal_none.h index fafaadc3f..93f77d593 100644 --- a/tinyusb/osal/osal_none.h +++ b/tinyusb/osal/osal_none.h @@ -133,8 +133,10 @@ static inline tusb_error_t osal_semaphore_post(osal_semaphore_handle_t const se *(p_error) = TUSB_ERROR_OSAL_TIMEOUT;\ else\ return;\ - } else\ + } else{\ (*(sem_hdl))--; /*TODO mutex hal_interrupt_disable consideration*/\ + *(p_error) = TUSB_ERROR_NONE;\ + }\ }while(0) //--------------------------------------------------------------------+ @@ -202,6 +204,7 @@ static inline tusb_error_t osal_queue_send(osal_queue_handle_t const queue_hdl, queue_hdl->rd_idx = (queue_hdl->rd_idx + 1) % queue_hdl->depth;\ queue_hdl->count--;\ /*TODO mutex unlock hal_interrupt_enable */\ + *(p_error) = TUSB_ERROR_NONE;\ }\ }while(0) |
