mirror of
https://github.com/espressif/esp-idf.git
synced 2025-11-03 00:21:44 +01:00
fix(wifi): Add PSRAM failure fallback in WiFi Queue API's
This commit is contained in:
@@ -253,7 +253,32 @@ static int32_t IRAM_ATTR mutex_unlock_wrapper(void *mutex)
|
||||
|
||||
static void *queue_create_wrapper(uint32_t queue_len, uint32_t item_size)
|
||||
{
|
||||
return (void *)xQueueCreate(queue_len, item_size);
|
||||
StaticQueue_t *queue_buffer = heap_caps_malloc_prefer(sizeof(StaticQueue_t) + (queue_len * item_size), 2,
|
||||
MALLOC_CAP_DEFAULT | MALLOC_CAP_SPIRAM,
|
||||
MALLOC_CAP_DEFAULT | MALLOC_CAP_INTERNAL);
|
||||
if (!queue_buffer) {
|
||||
return NULL;
|
||||
}
|
||||
QueueHandle_t queue_handle = xQueueCreateStatic(queue_len, item_size, (uint8_t *)queue_buffer + sizeof(StaticQueue_t),
|
||||
queue_buffer);
|
||||
if (!queue_handle) {
|
||||
free(queue_buffer);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return (void *)queue_handle;
|
||||
}
|
||||
|
||||
static void queue_delete_wrapper(void *queue)
|
||||
{
|
||||
if (queue) {
|
||||
StaticQueue_t *queue_buffer = NULL;
|
||||
xQueueGetStaticBuffers(queue, NULL, &queue_buffer);
|
||||
vQueueDelete(queue);
|
||||
if (queue_buffer) {
|
||||
free(queue_buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int32_t queue_send_wrapper(void *queue, void *item, uint32_t block_time_tick)
|
||||
@@ -668,7 +693,7 @@ wifi_osi_funcs_t g_wifi_osi_funcs = {
|
||||
._mutex_lock = mutex_lock_wrapper,
|
||||
._mutex_unlock = mutex_unlock_wrapper,
|
||||
._queue_create = queue_create_wrapper,
|
||||
._queue_delete = (void(*)(void *))vQueueDelete,
|
||||
._queue_delete = queue_delete_wrapper,
|
||||
._queue_send = queue_send_wrapper,
|
||||
._queue_send_from_isr = queue_send_from_isr_wrapper,
|
||||
._queue_send_to_back = queue_send_to_back_wrapper,
|
||||
|
||||
Reference in New Issue
Block a user