sem return with -ETIMEDOUT when timeout

This commit is contained in:
sakumisu
2022-04-03 22:10:50 +08:00
parent 73549e74c4
commit 44c282580d
2 changed files with 29 additions and 10 deletions

View File

@@ -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)

View File

@@ -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;