2 #include "AudioBasic/Collections/Allocator.h"
3 #include "AudioConfig.h"
5 #if defined(USE_CONCURRENCY)
7 # include <freertos/queue.h>
8 # include "freertos/FreeRTOS.h"
10 # include "FreeRTOS.h"
28 QueueRTOS(
int size, TickType_t writeMaxWait = portMAX_DELAY,
29 TickType_t readMaxWait = portMAX_DELAY,
30 Allocator& allocator = DefaultAllocator) {
32 p_allocator = &allocator;
33 read_max_wait = readMaxWait;
34 write_max_wait = writeMaxWait;
44 void setReadMaxWait(TickType_t ticks) { read_max_wait = ticks; }
46 void setWriteMaxWait(TickType_t ticks) { write_max_wait = ticks; }
52 if (size != queue_size) {
60 bool enqueue(T& data) {
62 if (xQueue==
nullptr)
return false;
63 return xQueueSend(xQueue, (
void*)&data, (TickType_t)write_max_wait);
68 if (xQueue==
nullptr)
return false;
69 return xQueuePeek(xQueue, &data, (TickType_t)read_max_wait);
72 bool dequeue(T& data) {
74 if (xQueue==
nullptr)
return false;
75 return xQueueReceive(xQueue, &data, (TickType_t)read_max_wait);
78 size_t size() {
return queue_size; }
82 if (xQueue==
nullptr)
return false;
87 bool empty() {
return size() == 0; }
90 QueueHandle_t xQueue =
nullptr;
91 TickType_t write_max_wait = portMAX_DELAY;
92 TickType_t read_max_wait = portMAX_DELAY;
93 Allocator* p_allocator =
nullptr;
95 uint8_t* p_data =
nullptr;
96 StaticQueue_t queue_buffer;
100 p_data = (uint8_t*)p_allocator->allocate((queue_size + 1) *
sizeof(T));
101 if (p_data ==
nullptr)
return false;
102 xQueue = xQueueCreateStatic(queue_size,
sizeof(T), p_data, &queue_buffer);
103 if (xQueue ==
nullptr)
return false;
109 if (xQueue !=
nullptr) vQueueDelete(xQueue);
110 if (p_data !=
nullptr) p_allocator->free(p_data);