arduino-audio-tools
Loading...
Searching...
No Matches
SynchronizedStream.h
Go to the documentation of this file.
1#pragma once
3#include "LockGuard.h"
4#include "Mutex.h"
5#include "Stream.h"
6
7namespace audio_tools {
8
19class SynchronizedStream : public Stream {
20 public:
22 p_stream = &stream;
23 p_mutex = &mutex;
24 }
25
26 // reads a single value
27 int read() override {
28 if (read_buffer.isEmpty()) {
31 }
32 return read_buffer.read();
33 }
34
35 // peeks the actual entry from the buffer
36 int peek() override {
38 return p_stream->peek();
39 }
40
41 // write add an entry to the buffer
42 size_t write(uint8_t data) override {
43 write_buffer.write(data);
44 if (write_buffer.isFull()) {
46 size_t written = p_stream->write((const uint8_t *)write_buffer.data(),
48 assert(written == write_buffer.size());
50 }
51 return 1;
52 }
53
54 // provides the number of entries that are available to read
55 int available() override {
57 return p_stream->available();
58 }
59
60 // provides the number of entries that are available to write
61 int availableForWrite() override {
64 }
65
67 void setBufferSize(int size) {
68 read_buffer.resize(size);
69 write_buffer.resize(size);
70 }
71
72 protected:
73 Stream *p_stream = nullptr;
74 MutexBase *p_mutex = nullptr;
77};
78
79} // namespace audio_tools
#define assert(T)
Definition avr.h:10
bool isEmpty()
Definition Buffers.h:86
RAII implementaion using a Mutex: Only a few microcontrollers provide lock guards,...
Definition LockGuard.h:17
Empty Mutex implementation which does nothing.
Definition Mutex.h:18
virtual int availableForWrite()
Definition NoArduino.h:134
virtual size_t write(const uint8_t *data, size_t len)
Definition NoArduino.h:126
A simple Buffer implementation which just uses a (dynamically sized) array.
Definition Buffers.h:172
size_t size() override
Definition Buffers.h:303
bool write(T sample) override
write add an entry to the buffer
Definition Buffers.h:206
bool read(T &result) override
reads a single value
Definition Buffers.h:215
T * address() override
Provides address to beginning of the buffer.
Definition Buffers.h:281
bool isFull() override
checks if the buffer is full
Definition Buffers.h:240
bool resize(int size)
Resizes the buffer if supported: returns false if not supported.
Definition Buffers.h:305
T * data()
Provides address of actual data.
Definition Buffers.h:284
void reset() override
clears the buffer
Definition Buffers.h:286
Definition NoArduino.h:142
virtual size_t readBytes(uint8_t *data, size_t len)
Definition NoArduino.h:147
virtual int available()
Definition NoArduino.h:146
Wrapper class that can turn any Stream into a thread save implementation. This is done by adding a Mu...
Definition SynchronizedStream.h:19
SingleBuffer< uint8_t > write_buffer
Definition SynchronizedStream.h:76
MutexBase * p_mutex
Definition SynchronizedStream.h:74
int peek() override
Definition SynchronizedStream.h:36
int available() override
Definition SynchronizedStream.h:55
SingleBuffer< uint8_t > read_buffer
Definition SynchronizedStream.h:75
Stream * p_stream
Definition SynchronizedStream.h:73
int availableForWrite() override
Definition SynchronizedStream.h:61
int read() override
Definition SynchronizedStream.h:27
void setBufferSize(int size)
Defines the size of the internal buffers.
Definition SynchronizedStream.h:67
SynchronizedStream(Stream &stream, MutexBase &mutex)
Definition SynchronizedStream.h:21
size_t write(uint8_t data) override
Definition SynchronizedStream.h:42
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioCodecsBase.h:10
size_t writeData(Print *p_out, T *data, int samples, int maxSamples=512)
Definition AudioTypes.h:512