From d4ba2eef5779c9f1259668ff4f51430419c3ad2d Mon Sep 17 00:00:00 2001 From: Zhihong Chen Date: Thu, 12 Oct 2023 10:23:51 +0800 Subject: [PATCH] osal: add USB_OSAL_WAITING_FOREVER for Semaphore and Queue use - add USB_OSAL_WAITING_FOREVER for Semaphore and Queue use Signed-off-by: Zhihong Chen --- class/hub/usbh_hub.c | 2 +- class/msc/usbd_msc.c | 2 +- osal/usb_osal.h | 2 ++ osal/usb_osal_freertos.c | 12 ++++++++++-- osal/usb_osal_rtthread.c | 12 ++++++++++-- osal/usb_osal_yoc.c | 12 ++++++++++-- third_party/FreeRTOS-10.4/rndis_host/rndis_host.c | 2 +- third_party/rt-thread-4.1.1/rndis_host/rndis_host.c | 4 ++-- .../rndis_host/rndis_host_lwip2.1.2.c | 4 ++-- 9 files changed, 39 insertions(+), 13 deletions(-) diff --git a/class/hub/usbh_hub.c b/class/hub/usbh_hub.c index 6917bd2d..25038234 100644 --- a/class/hub/usbh_hub.c +++ b/class/hub/usbh_hub.c @@ -642,7 +642,7 @@ static void usbh_hub_thread(void *argument) usb_hc_init(); while (1) { - ret = usb_osal_mq_recv(hub_mq, (uintptr_t *)&hub, 0xffffffff); + ret = usb_osal_mq_recv(hub_mq, (uintptr_t *)&hub, USB_OSAL_WAITING_FOREVER); if (ret < 0) { continue; } diff --git a/class/msc/usbd_msc.c b/class/msc/usbd_msc.c index d6955219..f30c6fba 100644 --- a/class/msc/usbd_msc.c +++ b/class/msc/usbd_msc.c @@ -845,7 +845,7 @@ static void usbdev_msc_thread(void *argument) int ret; while (1) { - ret = usb_osal_mq_recv(g_usbd_msc.usbd_msc_mq, (uintptr_t *)&event, 0xffffffff); + ret = usb_osal_mq_recv(g_usbd_msc.usbd_msc_mq, (uintptr_t *)&event, USB_OSAL_WAITING_FOREVER); if (ret < 0) { continue; } diff --git a/osal/usb_osal.h b/osal/usb_osal.h index af65186a..560b73ab 100644 --- a/osal/usb_osal.h +++ b/osal/usb_osal.h @@ -9,6 +9,8 @@ #include #include +#define USB_OSAL_WAITING_FOREVER (0xFFFFFFFFU) + typedef void *usb_osal_thread_t; typedef void *usb_osal_sem_t; typedef void *usb_osal_mutex_t; diff --git a/osal/usb_osal_freertos.c b/osal/usb_osal_freertos.c index de448d2d..2c4ed542 100644 --- a/osal/usb_osal_freertos.c +++ b/osal/usb_osal_freertos.c @@ -35,7 +35,11 @@ void usb_osal_sem_delete(usb_osal_sem_t sem) int usb_osal_sem_take(usb_osal_sem_t sem, uint32_t timeout) { - return (xSemaphoreTake((SemaphoreHandle_t)sem, pdMS_TO_TICKS(timeout)) == pdPASS) ? 0 : -ETIMEDOUT; + if (timeout == USB_OSAL_WAITING_FOREVER) { + return (xSemaphoreTake((SemaphoreHandle_t)sem, portMAX_DELAY) == pdPASS) ? 0 : -ETIMEDOUT; + } else { + return (xSemaphoreTake((SemaphoreHandle_t)sem, pdMS_TO_TICKS(timeout)) == pdPASS) ? 0 : -ETIMEDOUT; + } } int usb_osal_sem_give(usb_osal_sem_t sem) @@ -95,7 +99,11 @@ int usb_osal_mq_send(usb_osal_mq_t mq, uintptr_t addr) int usb_osal_mq_recv(usb_osal_mq_t mq, uintptr_t *addr, uint32_t timeout) { - return (xQueueReceive((usb_osal_mq_t)mq, addr, timeout) == pdPASS) ? 0 : -ETIMEDOUT; + if (timeout == USB_OSAL_WAITING_FOREVER) { + return (xQueueReceive((usb_osal_mq_t)mq, addr, portMAX_DELAY) == pdPASS) ? 0 : -ETIMEDOUT; + } else { + return (xQueueReceive((usb_osal_mq_t)mq, addr, pdMS_TO_TICKS(timeout)) == pdPASS) ? 0 : -ETIMEDOUT; + } } size_t usb_osal_enter_critical_section(void) diff --git a/osal/usb_osal_rtthread.c b/osal/usb_osal_rtthread.c index a0f7563c..964c1a7f 100644 --- a/osal/usb_osal_rtthread.c +++ b/osal/usb_osal_rtthread.c @@ -40,7 +40,11 @@ int usb_osal_sem_take(usb_osal_sem_t sem, uint32_t timeout) int ret = 0; rt_err_t result = RT_EOK; - result = rt_sem_take((rt_sem_t)sem, rt_tick_from_millisecond(timeout)); + if (timeout == USB_OSAL_WAITING_FOREVER) { + result = rt_sem_take((rt_sem_t)sem, RT_WAITING_FOREVER); + } else { + result = rt_sem_take((rt_sem_t)sem, rt_tick_from_millisecond(timeout)); + } if (result == -RT_ETIMEOUT) { ret = -ETIMEDOUT; } else if (result == -RT_ERROR) { @@ -92,7 +96,11 @@ int usb_osal_mq_recv(usb_osal_mq_t mq, uintptr_t *addr, uint32_t timeout) int ret = 0; rt_err_t result = RT_EOK; - result = rt_mq_recv((rt_mq_t)mq, addr, sizeof(uintptr_t), rt_tick_from_millisecond(timeout)); + if (timeout == USB_OSAL_WAITING_FOREVER) { + result = rt_mq_recv((rt_mq_t)mq, addr, sizeof(uintptr_t), RT_WAITING_FOREVER); + } else { + result = rt_mq_recv((rt_mq_t)mq, addr, sizeof(uintptr_t), rt_tick_from_millisecond(timeout)); + } if (result == -RT_ETIMEOUT) { ret = -ETIMEDOUT; } else if (result == -RT_ERROR) { diff --git a/osal/usb_osal_yoc.c b/osal/usb_osal_yoc.c index 962f9021..b782b296 100644 --- a/osal/usb_osal_yoc.c +++ b/osal/usb_osal_yoc.c @@ -38,7 +38,11 @@ void usb_osal_sem_delete(usb_osal_sem_t sem) int usb_osal_sem_take(usb_osal_sem_t sem, uint32_t timeout) { - return aos_sem_wait((aos_sem_t *)&sem, timeout); + if (timeout == USB_OSAL_WAITING_FOREVER) { + return aos_sem_wait((aos_sem_t *)&sem, AOS_WAIT_FOREVER); + } else { + return aos_sem_wait((aos_sem_t *)&sem, timeout); + } } int usb_osal_sem_give(usb_osal_sem_t sem) @@ -88,7 +92,11 @@ int usb_osal_mq_send(usb_osal_mq_t mq, uintptr_t addr) int usb_osal_mq_recv(usb_osal_mq_t mq, uintptr_t *addr, uint32_t timeout) { size_t recv_size; - return aos_queue_recv((aos_queue_t *)&mq, timeout, addr, &recv_size); + if (timeout == USB_OSAL_WAITING_FOREVER) { + return aos_queue_recv((aos_queue_t *)&mq, AOS_WAIT_FOREVER, addr, &recv_size); + } else { + return aos_queue_recv((aos_queue_t *)&mq, timeout, addr, &recv_size); + } } size_t usb_osal_enter_critical_section(void) diff --git a/third_party/FreeRTOS-10.4/rndis_host/rndis_host.c b/third_party/FreeRTOS-10.4/rndis_host/rndis_host.c index a0cf21f0..a006d144 100644 --- a/third_party/FreeRTOS-10.4/rndis_host/rndis_host.c +++ b/third_party/FreeRTOS-10.4/rndis_host/rndis_host.c @@ -159,7 +159,7 @@ static void lwip_rx_handle(void *pdata) while (1) { pmg_offset = 0; payload_offset = 0; - ret = usbh_rndis_bulk_in_transfer(rndis_class, rx_buf_ptr, RNDIS_RXETH_BUFFER_LEN, portMAX_DELAY); + ret = usbh_rndis_bulk_in_transfer(rndis_class, rx_buf_ptr, RNDIS_RXETH_BUFFER_LEN, USB_OSAL_WAITING_FOREVER); if (ret <= 0) { vTaskDelay(1); continue; diff --git a/third_party/rt-thread-4.1.1/rndis_host/rndis_host.c b/third_party/rt-thread-4.1.1/rndis_host/rndis_host.c index e8c4cfbf..b6d2ad98 100644 --- a/third_party/rt-thread-4.1.1/rndis_host/rndis_host.c +++ b/third_party/rt-thread-4.1.1/rndis_host/rndis_host.c @@ -158,7 +158,7 @@ static rt_err_t rndis_msg_data_recv(struct usbh_user_rndis *rndis_class, rt_uint if (rndis_class == RT_NULL) { return -RT_ERROR; } - ret = usbh_rndis_bulk_in_transfer(rndis_class->rndis_class, buffer, nbytes, RT_WAITING_FOREVER); + ret = usbh_rndis_bulk_in_transfer(rndis_class->rndis_class, buffer, nbytes, USB_OSAL_WAITING_FOREVER); return ret; } @@ -197,7 +197,7 @@ void rt_usbh_rndis_data_recv_entry(void *pdata) int ret = 0; int pmg_offset = 0; int payload_offset = 0; - ret = usbh_rndis_bulk_in_transfer(rndis_class->rndis_class, device->rx_buf_ptr, RNDIS_ETH_BUFFER_LEN, RT_WAITING_FOREVER); + ret = usbh_rndis_bulk_in_transfer(rndis_class->rndis_class, device->rx_buf_ptr, RNDIS_ETH_BUFFER_LEN, USB_OSAL_WAITING_FOREVER); if (ret <= 0) { rt_thread_mdelay(1); continue; diff --git a/third_party/rt-thread-4.1.1/rndis_host/rndis_host_lwip2.1.2.c b/third_party/rt-thread-4.1.1/rndis_host/rndis_host_lwip2.1.2.c index c6db885b..624dc735 100644 --- a/third_party/rt-thread-4.1.1/rndis_host/rndis_host_lwip2.1.2.c +++ b/third_party/rt-thread-4.1.1/rndis_host/rndis_host_lwip2.1.2.c @@ -164,7 +164,7 @@ static rt_err_t rndis_msg_data_recv(struct usbh_user_rndis *rndis_class, rt_uint if (rndis_class == RT_NULL) { return -RT_ERROR; } - ret = usbh_rndis_bulk_in_transfer(rndis_class->rndis_class, buffer, nbytes, RT_WAITING_FOREVER); + ret = usbh_rndis_bulk_in_transfer(rndis_class->rndis_class, buffer, nbytes, USB_OSAL_WAITING_FOREVER); return ret; } @@ -242,7 +242,7 @@ void rt_usbh_rndis_data_recv_entry(void *pdata) while (1) { pmg_offset = 0; payload_offset = 0; - ret = usbh_rndis_bulk_in_transfer(rndis_class->rndis_class, device->rx_buf_ptr, RNDIS_ETH_BUFFER_LEN, RT_WAITING_FOREVER); + ret = usbh_rndis_bulk_in_transfer(rndis_class->rndis_class, device->rx_buf_ptr, RNDIS_ETH_BUFFER_LEN, USB_OSAL_WAITING_FOREVER); if (ret <= 0) { rt_thread_mdelay(1); continue;