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 void 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);
55 void setReadMaxWait(TickType_t ticks){
56 available_buffers.setReadMaxWait(ticks);
57 filled_buffers.setReadMaxWait(ticks);
60 void setWriteMaxWait(TickType_t ticks){
61 available_buffers.setWriteMaxWait(ticks);
62 filled_buffers.setWriteMaxWait(ticks);
69 int bufferCountFilled() {
70 return filled_buffers.size();
73 int bufferCountEmpty() {
74 return available_buffers.size();
81 size_t read_max_wait, write_max_wait;
82 int buffer_size = 0, buffer_count = 0;
88 while (available_buffers.dequeue(buffer)){
91 while (filled_buffers.dequeue(buffer)){
99 return available_buffers.dequeue(result) ? result :
nullptr;
102 bool addAvailableBuffer(BaseBuffer<T> *buffer) {
104 return available_buffers.enqueue(buffer);
107 BaseBuffer<T> *getNextFilledBuffer() {
109 BaseBuffer<T>* result;
110 return filled_buffers.dequeue(result) ? result :
nullptr;
113 bool addFilledBuffer(BaseBuffer<T> *buffer) {
115 return filled_buffers.enqueue(buffer);