diff options
| author | Zhihong Chen <[email protected]> | 2023-10-12 10:23:51 +0800 |
|---|---|---|
| committer | sakumisu <[email protected]> | 2023-10-12 14:38:13 +0800 |
| commit | d4ba2eef5779c9f1259668ff4f51430419c3ad2d (patch) | |
| tree | a0347dfe2dd2a1cafb5403d46b3ebb6413e8151b /osal | |
| parent | 3d96f64f940ed6123a73433e7ce333de0f10d5bb (diff) | |
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 <[email protected]>
Diffstat (limited to 'osal')
| -rw-r--r-- | osal/usb_osal.h | 2 | ||||
| -rw-r--r-- | osal/usb_osal_freertos.c | 12 | ||||
| -rw-r--r-- | osal/usb_osal_rtthread.c | 12 | ||||
| -rw-r--r-- | osal/usb_osal_yoc.c | 12 |
4 files changed, 32 insertions, 6 deletions
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 <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; 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) |
