summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2022-04-03 22:10:50 +0800
committersakumisu <[email protected]>2022-04-03 22:10:50 +0800
commit44c282580d2ce4fd71e706a762e4323973010312 (patch)
treec3e682c9770878300b5388f8e12939a1fc95d538
parent73549e74c40aa1e2cc508f5d098b1afdeceb2073 (diff)
sem return with -ETIMEDOUT when timeout
-rw-r--r--osal/usb_osal_freertos.c11
-rw-r--r--osal/usb_osal_rtthread.c28
2 files changed, 29 insertions, 10 deletions
diff --git a/osal/usb_osal_freertos.c b/osal/usb_osal_freertos.c
index 933833b6..4c190bef 100644
--- a/osal/usb_osal_freertos.c
+++ b/osal/usb_osal_freertos.c
@@ -21,6 +21,7 @@
*
*/
#include "usb_osal.h"
+#include "usb_errno.h"
#include <FreeRTOS.h>
#include "semphr.h"
#include "timers.h"
@@ -56,7 +57,7 @@ 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 : -1;
+ return (xSemaphoreTake((SemaphoreHandle_t)sem, pdMS_TO_TICKS(timeout)) == pdPASS) ? 0 : -ETIMEDOUT;
}
int usb_osal_sem_give(usb_osal_sem_t sem)
@@ -80,7 +81,7 @@ int usb_osal_sem_give(usb_osal_sem_t sem)
}
}
- return (ret == pdPASS) ? 0 : -1;
+ return (ret == pdPASS) ? 0 : -EINVAL;
}
usb_osal_mutex_t usb_osal_mutex_create(void)
@@ -95,12 +96,12 @@ void usb_osal_mutex_delete(usb_osal_mutex_t mutex)
int usb_osal_mutex_take(usb_osal_mutex_t mutex)
{
- return (xSemaphoreTake((SemaphoreHandle_t)mutex, portMAX_DELAY) == pdPASS) ? 0 : -1;
+ return (xSemaphoreTake((SemaphoreHandle_t)mutex, portMAX_DELAY) == pdPASS) ? 0 : -ETIMEDOUT;
}
int usb_osal_mutex_give(usb_osal_mutex_t mutex)
{
- return (xSemaphoreGive((SemaphoreHandle_t)mutex) == pdPASS) ? 0 : -1;
+ return (xSemaphoreGive((SemaphoreHandle_t)mutex) == pdPASS) ? 0 : -EINVAL;
}
usb_osal_event_t usb_osal_event_create(void)
@@ -128,7 +129,7 @@ int usb_osal_event_send(usb_osal_event_t event, uint32_t set)
if (ret == pdPASS) {
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}
- return (ret == pdPASS) ? 0 : -1;
+ return (ret == pdPASS) ? 0 : -EINVAL;
}
size_t usb_osal_enter_critical_section(void)
diff --git a/osal/usb_osal_rtthread.c b/osal/usb_osal_rtthread.c
index 5212f349..43155e65 100644
--- a/osal/usb_osal_rtthread.c
+++ b/osal/usb_osal_rtthread.c
@@ -21,7 +21,9 @@
*
*/
#include "usb_osal.h"
+#include "usb_errno.h"
#include <rtthread.h>
+#include <rthw.h>
usb_osal_thread_t usb_osal_thread_create(const char *name, uint32_t stack_size, uint32_t prio, usb_thread_entry_t entry, void *args)
{
@@ -53,7 +55,19 @@ void usb_osal_sem_delete(usb_osal_sem_t sem)
int usb_osal_sem_take(usb_osal_sem_t sem, uint32_t timeout)
{
- return (int)rt_sem_take((rt_sem_t)sem, rt_tick_from_millisecond(timeout));
+ int ret = 0;
+ rt_err_t result = RT_EOK;
+
+ result = rt_sem_take((rt_sem_t)sem, rt_tick_from_millisecond(timeout));
+ if (result == RT_ETIMEOUT) {
+ ret = -ETIMEDOUT;
+ } else if (result == RT_ERROR) {
+ ret = -EINVAL;
+ } else {
+ ret = 0;
+ }
+
+ return (int)ret;
}
int usb_osal_sem_give(usb_osal_sem_t sem)
@@ -96,9 +110,13 @@ int usb_osal_event_recv(usb_osal_event_t event, uint32_t set, uint32_t *recved)
int ret = 0;
rt_err_t result = RT_EOK;
- result = rt_event_recv((rt_event_t)event, set, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, RT_WAITING_FOREVER, recved);
- if (result != RT_EOK) {
- ret = -1;
+ result = rt_event_recv((rt_event_t)event, set, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, RT_WAITING_FOREVER, (rt_uint32_t *)recved);
+ if (result == RT_ETIMEOUT) {
+ ret = -ETIMEDOUT;
+ } else if (result == RT_ERROR) {
+ ret = -EINVAL;
+ } else {
+ ret = 0;
}
return ret;
@@ -111,7 +129,7 @@ int usb_osal_event_send(usb_osal_event_t event, uint32_t set)
result = rt_event_send((rt_event_t)event, set);
if (result != RT_EOK) {
- ret = -1;
+ ret = -EINVAL;
}
return ret;