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
29template <class T>
30class QueueRTOS {
31 public:
42
44 TRACED();
45 end();
46 }
47
49
51
53 bool resize(size_t size) {
54 bool result = true;
55 TRACED();
56 if (size != queue_size) {
57 end();
59 result = setup();
60 }
61 return result;
62 }
63
64 bool enqueue(T& data) {
65 TRACED();
66 if (xQueue==nullptr) return false;
67 return xQueueSend(xQueue, (void*)&data, (TickType_t)write_max_wait);
68 }
69
70 bool peek(T& data) {
71 TRACED();
72 if (xQueue==nullptr) return false;
74 }
75
76 bool dequeue(T& data) {
77 TRACED();
78 if (xQueue==nullptr) return false;
80 }
81
82 size_t size() { return queue_size; }
83
84 bool clear() {
85 TRACED();
86 if (xQueue==nullptr) return false;
88 return true;
89 }
90
91 bool empty() { return size() == 0; }
92
93 protected:
99 uint8_t* p_data = nullptr;
101
102 bool setup() {
103 if (queue_size > 0) {
104#if configSUPPORT_STATIC_ALLOCATION
105 p_data = (uint8_t*)p_allocator->allocate((queue_size + 1) * sizeof(T));
106 if (p_data == nullptr) return false;
108#else
109 xQueue = xQueueCreate(queue_size, sizeof(T));
110#endif
111 if (xQueue == nullptr) return false;
112 }
113 return true;
114 }
115
116 void end() {
117 if (xQueue != nullptr) vQueueDelete(xQueue);
118 if (p_data != nullptr) p_allocator->free(p_data);
119 }
120};
121
122} // namespace audio_tools
123
#define TRACED()
Definition AudioLoggerIDF.h:31
#define portMAX_DELAY
Definition QueueZephyr.h:14
uint32_t TickType_t
Definition QueueZephyr.h:11
Memory allocateator which uses malloc.
Definition Allocator.h:24
virtual void free(void *memory)
frees memory
Definition Allocator.h:83
virtual void * allocate(size_t size)
Allocates memory.
Definition Allocator.h:71
FIFO Queue whch is based on the FreeRTOS queue API. The default allocator will allocate the memory fr...
Definition QueueRTOS.h:30
size_t size()
Definition QueueRTOS.h:82
TickType_t write_max_wait
Definition QueueRTOS.h:95
Allocator * p_allocator
Definition QueueRTOS.h:97
StaticQueue_t queue_buffer
Definition QueueRTOS.h:100
~QueueRTOS()
Definition QueueRTOS.h:43
bool empty()
Definition QueueRTOS.h:91
void setWriteMaxWait(TickType_t ticks)
Definition QueueRTOS.h:50
bool peek(T &data)
Definition QueueRTOS.h:70
bool dequeue(T &data)
Definition QueueRTOS.h:76
uint8_t * p_data
Definition QueueRTOS.h:99
bool clear()
Definition QueueRTOS.h:84
QueueHandle_t xQueue
Definition QueueRTOS.h:94
void setReadMaxWait(TickType_t ticks)
Definition QueueRTOS.h:48
void end()
Definition QueueRTOS.h:116
int queue_size
Definition QueueRTOS.h:98
bool enqueue(T &data)
Definition QueueRTOS.h:64
TickType_t read_max_wait
Definition QueueRTOS.h:96
QueueRTOS(int size, TickType_t writeMaxWait=portMAX_DELAY, TickType_t readMaxWait=portMAX_DELAY, Allocator &allocator=DefaultAllocator)
Definition QueueRTOS.h:32
bool resize(size_t size)
(Re-)defines the size
Definition QueueRTOS.h:53
bool setup()
Definition QueueRTOS.h:102
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioCodecsBase.h:10
static TAllocatorExt DefaultAllocator
Definition Allocator.h:207
size_t writeData(Print *p_out, T *data, int samples, int maxSamples=512)
Definition AudioTypes.h:508