Просмотр исходного кода

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 <zhihong.chen@hpmicro.com>
Zhihong Chen 2 лет назад
Родитель
Сommit
d4ba2eef57

+ 1 - 1
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;
         }

+ 1 - 1
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;
         }

+ 2 - 0
osal/usb_osal.h

@@ -9,6 +9,8 @@
 #include <stdint.h>
 #include <string.h>
 
+#define USB_OSAL_WAITING_FOREVER (0xFFFFFFFFU)
+
 typedef void *usb_osal_thread_t;
 typedef void *usb_osal_sem_t;
 typedef void *usb_osal_mutex_t;

+ 10 - 2
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)

+ 10 - 2
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) {

+ 10 - 2
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)

+ 1 - 1
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;

+ 2 - 2
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;

+ 2 - 2
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;