arduino-audio-tools
Loading...
Searching...
No Matches
QueueRTOS.h
Go to the documentation of this file.
1#pragma once
3#include "AudioToolsConfig.h"
4
5#ifdef ESP32
6# include <freertos/queue.h>
7# include "freertos/FreeRTOS.h"
8#else
9#ifndef __linux__
10# include "FreeRTOS.h"
11# include "queue.h"
12#endif
13#endif
14
15namespace audio_tools {
16
26template <class T>
27class QueueRTOS {
28 public:
39
41 TRACED();
42 end();
43 }
44
46
48
50 bool resize(int size) {
51 bool result = true;
52 TRACED();
53 if (size != queue_size) {
54 end();
56 result = setup();
57 }
58 return result;
59 }
60
61 bool enqueue(T& data) {
62 TRACED();
63 if (xQueue==nullptr) return false;
64 return xQueueSend(xQueue, (void*)&data, (TickType_t)write_max_wait);
65 }
66
67 bool peek(T& data) {
68 TRACED();
69 if (xQueue==nullptr) return false;
71 }
72
73 bool dequeue(T& data) {
74 TRACED();
75 if (xQueue==nullptr) return false;
77 }
78
79 size_t size() { return queue_size; }
80
81 bool clear() {
82 TRACED();
83 if (xQueue==nullptr) return false;
85 return true;
86 }
87
88 bool empty() { return size() == 0; }
89
90 protected:
96 uint8_t* p_data = nullptr;
98
99 bool setup() {
100 if (queue_size > 0) {
101#if configSUPPORT_STATIC_ALLOCATION
102 p_data = (uint8_t*)p_allocator->allocate((queue_size + 1) * sizeof(T));
103 if (p_data == nullptr) return false;
105#else
106 xQueue = xQueueCreate(queue_size, sizeof(T));
107#endif
108 if (xQueue == nullptr) return false;
109 }
110 return true;
111 }
112
113 void end() {
114 if (xQueue != nullptr) vQueueDelete(xQueue);
115 if (p_data != nullptr) p_allocator->free(p_data);
116 }
117};
118
119} // namespace audio_tools
120
#define TRACED()
Definition AudioLoggerIDF.h:31
Memory allocateator which uses malloc.
Definition Allocator.h:23
virtual void free(void *memory)
frees memory
Definition Allocator.h:82
virtual void * allocate(size_t size)
Allocates memory.
Definition Allocator.h:70
FIFO Queue whch is based on the FreeRTOS queue API. The default allocator will allocate the memory fr...
Definition QueueRTOS.h:27
size_t size()
Definition QueueRTOS.h:79
TickType_t write_max_wait
Definition QueueRTOS.h:92
Allocator * p_allocator
Definition QueueRTOS.h:94
StaticQueue_t queue_buffer
Definition QueueRTOS.h:97
~QueueRTOS()
Definition QueueRTOS.h:40
bool empty()
Definition QueueRTOS.h:88
void setWriteMaxWait(TickType_t ticks)
Definition QueueRTOS.h:47
bool peek(T &data)
Definition QueueRTOS.h:67
bool dequeue(T &data)
Definition QueueRTOS.h:73
uint8_t * p_data
Definition QueueRTOS.h:96
bool resize(int size)
(Re-)defines the size
Definition QueueRTOS.h:50
bool clear()
Definition QueueRTOS.h:81
QueueHandle_t xQueue
Definition QueueRTOS.h:91
void setReadMaxWait(TickType_t ticks)
Definition QueueRTOS.h:45
void end()
Definition QueueRTOS.h:113
int queue_size
Definition QueueRTOS.h:95
bool enqueue(T &data)
Definition QueueRTOS.h:61
TickType_t read_max_wait
Definition QueueRTOS.h:93
QueueRTOS(int size, TickType_t writeMaxWait=portMAX_DELAY, TickType_t readMaxWait=portMAX_DELAY, Allocator &allocator=DefaultAllocator)
Definition QueueRTOS.h:29
bool setup()
Definition QueueRTOS.h:99
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioCodecsBase.h:10
static AllocatorExt DefaultAllocator
Definition Allocator.h:176
size_t writeData(Print *p_out, T *data, int samples, int maxSamples=512)
Definition AudioTypes.h:512