17 SynchronizedNBufferRTOST(
int bufferSize,
int bufferCount,
int writeMaxWait=portMAX_DELAY,
int readMaxWait=portMAX_DELAY) {
19 read_max_wait = readMaxWait;
20 write_max_wait = writeMaxWait;
21 resize(bufferSize, bufferCount);
27 bool resize(
int bufferSize,
int bufferCount) {
29 if (buffer_size == bufferSize && buffer_count == bufferCount){
33 max_size = bufferSize * bufferCount;
38 available_buffers.resize(bufferCount);
39 filled_buffers.resize(bufferCount);
41 setReadMaxWait(read_max_wait);
42 setWriteMaxWait(write_max_wait);
45 for (
int j = 0; j < bufferCount; j++) {
48 available_buffers.enqueue(tmp);
50 LOGE(
"Not Enough Memory for buffer %d", j);
27 bool resize(
int bufferSize,
int bufferCount) {
…}
57 void setReadMaxWait(TickType_t ticks){
58 available_buffers.setReadMaxWait(ticks);
59 filled_buffers.setReadMaxWait(ticks);
62 void setWriteMaxWait(TickType_t ticks){
63 available_buffers.setWriteMaxWait(ticks);
64 filled_buffers.setWriteMaxWait(ticks);
72 return filled_buffers.size();
76 return available_buffers.size();
81 QueueRTOS<BaseBuffer<T>*> filled_buffers{0,portMAX_DELAY,0};
83 size_t read_max_wait, write_max_wait;
84 int buffer_size = 0, buffer_count = 0;
90 while (available_buffers.dequeue(buffer)){
93 while (filled_buffers.dequeue(buffer)){
101 return available_buffers.dequeue(result) ? result :
nullptr;
104 bool addAvailableBuffer(BaseBuffer<T> *buffer) {
106 return available_buffers.enqueue(buffer);
109 BaseBuffer<T> *getNextFilledBuffer() {
111 BaseBuffer<T>* result;
112 return filled_buffers.dequeue(result) ? result :
nullptr;
115 bool addFilledBuffer(BaseBuffer<T> *buffer) {
117 return filled_buffers.enqueue(buffer);