diff options
| author | sakumisu <[email protected]> | 2024-11-06 20:13:24 +0800 |
|---|---|---|
| committer | sakumisu <[email protected]> | 2024-11-06 20:14:35 +0800 |
| commit | 6ea1e2f94ff550f3bb16c9ec726ad6c26f867ce0 (patch) | |
| tree | 8af0e87224229f300db79e787df09cd067b9d199 | |
| parent | 037c2a8323330340fb12ed292a0634743e08b2d7 (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.c | 27 | ||||
| -rw-r--r-- | osal/usb_osal_freertos.c | 27 |
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; + } } } |
