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