arduino-audio-tools
Loading...
Searching...
No Matches
src
AudioTools
Communication
ReedSolomonFEC.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
AudioToolsConfig.h
"
4
#include "
AudioTools/CoreAudio/BaseStream.h
"
5
#include "
FEC/ReedSolomon/rs.hpp
"
6
7
namespace
audio_tools
{
8
16
template
<
int
byte
count,
int
additional_
byte
s>
17
class
ReedSolomonFEC
:
public
BaseStream
{
18
public
:
19
20
ReedSolomonFEC
(
Stream
&stream){
21
p_stream
= &stream;
22
p_print
= &stream;
23
}
24
25
ReedSolomonFEC
(
Print
&print){
26
p_print
= &print;
27
}
28
29
int
availableForWrite
()
override
{
30
return
bytecount
;
31
}
32
33
size_t
write
(
const
uint8_t
* data,
size_t
len)
override
{
34
if
(
p_print
==
nullptr
)
return
0;
35
for
(
int
j
=0;
j
<len;
j
++){
36
raw
.
write
(data[
j
]);
37
if
(
raw
.
availableForWrite
()==0){
38
rs
.
Encode
(
raw
.
data
(),
encoded
.
data
());
39
p_print
->
write
(
encoded
.
data
(),
bytecount
+
additional_bytes
);
40
raw
.
reset
();
41
}
42
}
43
return
len;
44
}
45
46
int
available
()
override
{
47
return
bytecount
;
48
}
49
50
size_t
readBytes
(
uint8_t
* data,
size_t
len)
override
{
51
if
(
p_stream
==
nullptr
)
return
0;
52
if
(
encoded
.
isEmpty
()){
53
int
read_len
=
bytecount
+
additional_bytes
;
54
p_stream
->
readBytes
(
encoded
.
data
(),
read_len
);
55
encoded
.
setAvailable
(
read_len
);
56
}
57
return
encoded
.
readArray
(data, len);
58
}
59
60
61
protected
:
62
SingleBuffer<uint8_t>
raw
{
bytecount
};
63
SingleBuffer<uint8_t>
encoded
{
bytecount
+
additional_bytes
};
64
RS::ReedSolomon<bytecount, additional_bytes>
rs
;
65
Stream
*
p_stream
=
nullptr
;
66
Print
*
p_print
=
nullptr
;
67
68
};
69
70
}
AudioToolsConfig.h
BaseStream.h
RS::ReedSolomon
Definition
rs.hpp:28
RS::ReedSolomon::Encode
void Encode(const void *src, void *dst)
Definition
rs.hpp:120
audio_tools::BaseBuffer::readArray
virtual int readArray(T data[], int len)
reads multiple values
Definition
Buffers.h:33
audio_tools::BaseBuffer::isEmpty
bool isEmpty()
Definition
Buffers.h:86
audio_tools::BaseStream
Base class for all Streams. It relies on write(const uint8_t *buffer, size_t size) and readBytes(uint...
Definition
BaseStream.h:36
audio_tools::Print
Definition
NoArduino.h:62
audio_tools::Print::write
virtual size_t write(const uint8_t *data, size_t len)
Definition
NoArduino.h:126
audio_tools::ReedSolomonFEC
Forward error correction using Reed-Solomon: write is encoding and readBytes does the decoding.
Definition
ReedSolomonFEC.h:17
audio_tools::ReedSolomonFEC::ReedSolomonFEC
ReedSolomonFEC(Print &print)
Definition
ReedSolomonFEC.h:25
audio_tools::ReedSolomonFEC::readBytes
size_t readBytes(uint8_t *data, size_t len) override
Definition
ReedSolomonFEC.h:50
audio_tools::ReedSolomonFEC::encoded
SingleBuffer< uint8_t > encoded
Definition
ReedSolomonFEC.h:63
audio_tools::ReedSolomonFEC::available
int available() override
Definition
ReedSolomonFEC.h:46
audio_tools::ReedSolomonFEC::write
size_t write(const uint8_t *data, size_t len) override
Definition
ReedSolomonFEC.h:33
audio_tools::ReedSolomonFEC::p_stream
Stream * p_stream
Definition
ReedSolomonFEC.h:65
audio_tools::ReedSolomonFEC::availableForWrite
int availableForWrite() override
Definition
ReedSolomonFEC.h:29
audio_tools::ReedSolomonFEC::p_print
Print * p_print
Definition
ReedSolomonFEC.h:66
audio_tools::ReedSolomonFEC::ReedSolomonFEC
ReedSolomonFEC(Stream &stream)
Definition
ReedSolomonFEC.h:20
audio_tools::ReedSolomonFEC::rs
RS::ReedSolomon< bytecount, additional_bytes > rs
Definition
ReedSolomonFEC.h:64
audio_tools::ReedSolomonFEC::raw
SingleBuffer< uint8_t > raw
Definition
ReedSolomonFEC.h:62
audio_tools::SingleBuffer
A simple Buffer implementation which just uses a (dynamically sized) array.
Definition
Buffers.h:172
audio_tools::SingleBuffer::setAvailable
size_t setAvailable(size_t available_size)
Definition
Buffers.h:296
audio_tools::SingleBuffer::write
bool write(T sample) override
write add an entry to the buffer
Definition
Buffers.h:206
audio_tools::SingleBuffer::availableForWrite
int availableForWrite() override
provides the number of entries that are available to write
Definition
Buffers.h:238
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
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
rs.hpp
Generated by
1.9.8