From c62a9e5f2cae7bd0437ac040d18a20c739db6be2 Mon Sep 17 00:00:00 2001 From: Mahavir Jain Date: Mon, 9 Nov 2020 15:38:29 +0530 Subject: [PATCH] freertos: add `xQueueGenericReceive` for backward compatibility Add `xQueueGenericReceive` as that has been removed in FreeRTOS10. This in turn breaks pre-builts libraries with earlier IDF releases relying on this API. Closes https://github.com/espressif/esp-wolfssl/issues/6 --- components/freertos/CMakeLists.txt | 3 ++- components/freertos/freertos_v8_compat.c | 33 ++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 components/freertos/freertos_v8_compat.c diff --git a/components/freertos/CMakeLists.txt b/components/freertos/CMakeLists.txt index 732d643573..4ab86e3a47 100644 --- a/components/freertos/CMakeLists.txt +++ b/components/freertos/CMakeLists.txt @@ -54,7 +54,8 @@ list(APPEND srcs "tasks.c" "timers.c" "stream_buffer.c" - "FreeRTOS-openocd.c") + "FreeRTOS-openocd.c" + "freertos_v8_compat.c") if(CONFIG_ESP32_IRAM_AS_8BIT_ACCESSIBLE_MEMORY) list(APPEND srcs "port/xtensa/xtensa_loadstore_handler.S") diff --git a/components/freertos/freertos_v8_compat.c b/components/freertos/freertos_v8_compat.c new file mode 100644 index 0000000000..fe8d689125 --- /dev/null +++ b/components/freertos/freertos_v8_compat.c @@ -0,0 +1,33 @@ +// Copyright 2020 Espressif Systems (Shanghai) Co., Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FreeRTOS.h" +#include "queue.h" +#include "semphr.h" + +/* This API is kept for backward ABI compatibility with prebuilt libraries against FreeRTOS v8/v9 in ESP-IDF */ +BaseType_t xQueueGenericReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait, const BaseType_t xPeek ) +{ + if ( xPeek == pdTRUE ) + { + return xQueuePeek( xQueue, pvBuffer, xTicksToWait ); + } + + if ( pvBuffer == NULL ) + { + return xQueueSemaphoreTake( xQueue, xTicksToWait ); + } + + return xQueueReceive( xQueue, pvBuffer, xTicksToWait ); +}