summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2024-11-06 20:13:24 +0800
committersakumisu <[email protected]>2024-11-06 20:14:35 +0800
commit6ea1e2f94ff550f3bb16c9ec726ad6c26f867ce0 (patch)
tree8af0e87224229f300db79e787df09cd067b9d199
parent037c2a8323330340fb12ed292a0634743e08b2d7 (diff)
update(osal/freertos): update usb_osal_mq_recv and usb_osal_mq_send for isr api
-rw-r--r--osal/idf/usb_osal_idf.c27
-rw-r--r--osal/usb_osal_freertos.c27
2 files changed, 42 insertions, 12 deletions
diff --git a/osal/idf/usb_osal_idf.c b/osal/idf/usb_osal_idf.c
index 73cd306a..b64539d9 100644
--- a/osal/idf/usb_osal_idf.c
+++ b/osal/idf/usb_osal_idf.c
@@ -101,9 +101,13 @@ int usb_osal_mq_send(usb_osal_mq_t mq, uintptr_t addr)
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
int ret;
- ret = xQueueSendFromISR((usb_osal_mq_t)mq, &addr, &xHigherPriorityTaskWoken);
- if (ret == pdPASS) {
- portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
+ if (xPortInIsrContext()) {
+ ret = xQueueSendFromISR((usb_osal_mq_t)mq, &addr, &xHigherPriorityTaskWoken);
+ if (ret == pdPASS) {
+ portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
+ }
+ } else {
+ ret = xQueueSend((usb_osal_mq_t)mq, &addr, 0xffffffff);
}
return (ret == pdPASS) ? 0 : -USB_ERR_TIMEOUT;
@@ -111,10 +115,21 @@ 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)
{
- if (timeout == USB_OSAL_WAITING_FOREVER) {
- return (xQueueReceive((usb_osal_mq_t)mq, addr, portMAX_DELAY) == pdPASS) ? 0 : -USB_ERR_TIMEOUT;
+ BaseType_t xHigherPriorityTaskWoken = pdFALSE;
+ int ret;
+
+ if (xPortInIsrContext()) {
+ ret = xQueueReceiveFromISR((usb_osal_mq_t)mq, addr, &xHigherPriorityTaskWoken);
+ if (ret == pdPASS) {
+ portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
+ }
+ return (ret == pdPASS) ? 0 : -USB_ERR_TIMEOUT;
} else {
- return (xQueueReceive((usb_osal_mq_t)mq, addr, pdMS_TO_TICKS(timeout)) == pdPASS) ? 0 : -USB_ERR_TIMEOUT;
+ if (timeout == USB_OSAL_WAITING_FOREVER) {
+ return (xQueueReceive((usb_osal_mq_t)mq, addr, portMAX_DELAY) == pdPASS) ? 0 : -USB_ERR_TIMEOUT;
+ } else {
+ return (xQueueReceive((usb_osal_mq_t)mq, addr, pdMS_TO_TICKS(timeout)) == pdPASS) ? 0 : -USB_ERR_TIMEOUT;
+ }
}
}
diff --git a/osal/usb_osal_freertos.c b/osal/usb_osal_freertos.c
index 20bfa1f2..e03275c1 100644
--- a/osal/usb_osal_freertos.c
+++ b/osal/usb_osal_freertos.c
@@ -118,9 +118,13 @@ int usb_osal_mq_send(usb_osal_mq_t mq, uintptr_t addr)
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
int ret;
- ret = xQueueSendFromISR((usb_osal_mq_t)mq, &addr, &xHigherPriorityTaskWoken);
- if (ret == pdPASS) {
- portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
+ if (xPortIsInsideInterrupt()) {
+ ret = xQueueSendFromISR((usb_osal_mq_t)mq, &addr, &xHigherPriorityTaskWoken);
+ if (ret == pdPASS) {
+ portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
+ }
+ } else {
+ ret = xQueueSend((usb_osal_mq_t)mq, &addr, 0xffffffff);
}
return (ret == pdPASS) ? 0 : -USB_ERR_TIMEOUT;
@@ -128,10 +132,21 @@ 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)
{
- if (timeout == USB_OSAL_WAITING_FOREVER) {
- return (xQueueReceive((usb_osal_mq_t)mq, addr, portMAX_DELAY) == pdPASS) ? 0 : -USB_ERR_TIMEOUT;
+ BaseType_t xHigherPriorityTaskWoken = pdFALSE;
+ int ret;
+
+ if (xPortIsInsideInterrupt()) {
+ ret = xQueueReceiveFromISR((usb_osal_mq_t)mq, addr, &xHigherPriorityTaskWoken);
+ if (ret == pdPASS) {
+ portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
+ }
+ return (ret == pdPASS) ? 0 : -USB_ERR_TIMEOUT;
} else {
- return (xQueueReceive((usb_osal_mq_t)mq, addr, pdMS_TO_TICKS(timeout)) == pdPASS) ? 0 : -USB_ERR_TIMEOUT;
+ if (timeout == USB_OSAL_WAITING_FOREVER) {
+ return (xQueueReceive((usb_osal_mq_t)mq, addr, portMAX_DELAY) == pdPASS) ? 0 : -USB_ERR_TIMEOUT;
+ } else {
+ return (xQueueReceive((usb_osal_mq_t)mq, addr, pdMS_TO_TICKS(timeout)) == pdPASS) ? 0 : -USB_ERR_TIMEOUT;
+ }
}
}