fix(wifi): Add PSRAM failure fallback in WiFi Queue API's

This commit is contained in:
Nachiket Kukade
2024-08-12 14:24:52 +05:30
parent b9c58c550c
commit 94a915fd5c
6 changed files with 131 additions and 94 deletions

View File

@@ -252,22 +252,31 @@ static int32_t IRAM_ATTR mutex_unlock_wrapper(void *mutex)
static void *queue_create_wrapper(uint32_t queue_len, uint32_t item_size)
{
#if CONFIG_SPIRAM_USE_MALLOC
/* Use xQueueCreateWithCaps() to allocate from SPIRAM */
return (void *)xQueueCreateWithCaps(queue_len, item_size, MALLOC_CAP_SPIRAM);
#else
return (void *)xQueueCreate(queue_len, item_size);
#endif
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) {
#if CONFIG_SPIRAM_USE_MALLOC
vQueueDeleteWithCaps(queue);
#else
StaticQueue_t *queue_buffer = NULL;
xQueueGetStaticBuffers(queue, NULL, &queue_buffer);
vQueueDelete(queue);
#endif
if (queue_buffer) {
free(queue_buffer);
}
}
}