arduino-audio-tools
Loading...
Searching...
No Matches
src
AudioTools
Communication
AudioLoRa.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
AudioTools/CoreAudio/Buffers.h
"
4
#include "
AudioTools/CoreAudio/BaseStream.h
"
5
#include "LoRa.h"
6
7
// define the default pins used by the transceiver module
8
#define ss 8
9
#define rst 12
10
#define dio0 14
11
12
namespace
audio_tools
{
13
31
struct
AudioLoRaConfig
:
public
AudioInfo
{
32
int32_t
spi_speed
= 8
E6
;
33
int
max_size
= 200;
34
int
frequency
= 868
E6
;
// (433E6, 868E6, 915E6)
35
int
sync_word
= 0xF3;
36
int
tx_power
= 20;
// 2-20;
37
int
spreading_factor
= 12;
// 6-12
38
int
signal_bandwidth
=
39
7.8E3;
// 7.8E3, 10.4E3, 15.6E3, 20.8E3, 31.25E3, 41.7E3,
40
// 62.5E3, 125E3, 250E3, and 500E3.
41
int
pin_ss
=
ss
;
42
int
pin_rst
=
rst
;
43
int
pin_dio0
=
dio0
;
44
bool
process_audio_info
=
true
;
45
};
46
53
class
AudioLoRa
:
public
AudioStream
{
54
public
:
55
AudioLoRaConfig
defaultConfig
() {
56
AudioLoRaConfig
rc
;
57
return
rc
;
58
}
59
60
void
setAudioInfo
(
AudioInfo
info
) {
61
cfg
.
sample_rate
=
info
.
sample_rate
;
62
cfg
.
channels
=
info
.
channels
;
63
cfg
.
bits_per_sample
=
info
.
bits_per_sample
;
64
AudioStream::setAudioInfo
(
info
);
65
}
66
67
bool
begin
(
AudioLoRaConfig
config) {
68
cfg
= config;
69
AudioStream::setAudioInfo
(config);
70
return
begin
();
71
}
72
73
bool
begin
() {
74
TRACEI
();
75
buffer
.
resize
(
cfg
.
max_size
);
76
LoRa
.setSignalBandwidth(
cfg
.
signal_bandwidth
);
77
LoRa
.setSpreadingFactor(
cfg
.
spreading_factor
);
78
LoRa
.setTxPower(
cfg
.
tx_power
);
79
LoRa
.setSPIFrequency(
cfg
.
spi_speed
);
80
LoRa
.setPins(
cfg
.
pin_ss
,
cfg
.
pin_rst
,
cfg
.
pin_dio0
);
81
LoRa
.setSyncWord(
cfg
.
sync_word
);
82
bool
rc
=
LoRa
.begin(
cfg
.
frequency
);
83
if
(
cfg
.
process_audio_info
) {
84
writeAudioInfo
();
85
}
86
return
rc
;
87
}
88
89
void
end
() {
LoRa
.end(); }
90
91
size_t
readBytes
(
uint8_t
* data,
size_t
len) {
92
TRACEI
();
93
size_t
packetSize
=
LoRa
.parsePacket();
94
if
(
cfg
.
process_audio_info
&&
packetSize
==
sizeof
(
AudioInfo
)) {
95
readAudioInfo
();
96
packetSize
=
LoRa
.parsePacket();
97
}
98
int
toRead
= min(len,
packetSize
);
99
int
read =
LoRa
.readBytes(data,
toRead
);
100
return
read;
101
}
102
103
int
available
() {
return
cfg
.
max_size
; }
104
105
int
availableForWrite
() {
return
cfg
.
max_size
; }
106
107
size_t
write
(
const
uint8_t
* data,
size_t
len) {
108
TRACEI
();
109
for
(
int
j
= 0;
j
< len;
j
++) {
110
buffer
.
write
(data[
j
]);
111
if
(
buffer
.
isFull
()) {
112
LoRa
.beginPacket();
113
LoRa
.write(
buffer
.
data
(),
buffer
.
available
());
114
LoRa
.endPacket();
115
buffer
.
clear
();
116
}
117
}
118
return
len;
119
}
120
121
protected
:
122
AudioLoRaConfig
cfg
;
123
SingleBuffer<uint8_t>
buffer
;
124
125
void
readAudioInfo
() {
126
AudioInfo
tmp;
127
int
read =
LoRa
.readBytes((
uint8_t
*)&tmp,
sizeof
(
AudioInfo
));
128
setAudioInfo
(tmp);
129
}
130
131
void
writeAudioInfo
() {
132
LoRa
.beginPacket();
133
AudioInfo
ai
=
audioInfo
();
134
LoRa
.write((
uint8_t
*)&
ai
,
sizeof
(
ai
));
135
LoRa
.endPacket();
136
}
137
};
138
139
}
// namespace audio_tools
dio0
#define dio0
Definition
AudioLoRa.h:10
ss
#define ss
Definition
AudioLoRa.h:8
rst
#define rst
Definition
AudioLoRa.h:9
TRACEI
#define TRACEI()
Definition
AudioLoggerIDF.h:32
BaseStream.h
Buffers.h
audio_tools::AudioLoRa
LoRa Audio Sending and Receiving.
Definition
AudioLoRa.h:53
audio_tools::AudioLoRa::readAudioInfo
void readAudioInfo()
Definition
AudioLoRa.h:125
audio_tools::AudioLoRa::begin
bool begin(AudioLoRaConfig config)
Definition
AudioLoRa.h:67
audio_tools::AudioLoRa::available
int available()
Definition
AudioLoRa.h:103
audio_tools::AudioLoRa::setAudioInfo
void setAudioInfo(AudioInfo info)
Defines the input AudioInfo.
Definition
AudioLoRa.h:60
audio_tools::AudioLoRa::begin
bool begin()
Definition
AudioLoRa.h:73
audio_tools::AudioLoRa::defaultConfig
AudioLoRaConfig defaultConfig()
Definition
AudioLoRa.h:55
audio_tools::AudioLoRa::writeAudioInfo
void writeAudioInfo()
Definition
AudioLoRa.h:131
audio_tools::AudioLoRa::availableForWrite
int availableForWrite()
Definition
AudioLoRa.h:105
audio_tools::AudioLoRa::readBytes
size_t readBytes(uint8_t *data, size_t len)
Definition
AudioLoRa.h:91
audio_tools::AudioLoRa::buffer
SingleBuffer< uint8_t > buffer
Definition
AudioLoRa.h:123
audio_tools::AudioLoRa::end
void end()
Definition
AudioLoRa.h:89
audio_tools::AudioLoRa::cfg
AudioLoRaConfig cfg
Definition
AudioLoRa.h:122
audio_tools::AudioLoRa::write
size_t write(const uint8_t *data, size_t len)
Definition
AudioLoRa.h:107
audio_tools::AudioStream
Base class for all Audio Streams. It support the boolean operator to test if the object is ready with...
Definition
BaseStream.h:123
audio_tools::AudioStream::info
AudioInfo info
Definition
BaseStream.h:174
audio_tools::AudioStream::setAudioInfo
virtual void setAudioInfo(AudioInfo newInfo) override
Defines the input AudioInfo.
Definition
BaseStream.h:131
audio_tools::AudioStream::audioInfo
virtual AudioInfo audioInfo() override
provides the actual input AudioInfo
Definition
BaseStream.h:154
audio_tools::BaseBuffer::clear
void clear()
same as reset
Definition
Buffers.h:95
audio_tools::SingleBuffer
A simple Buffer implementation which just uses a (dynamically sized) array.
Definition
Buffers.h:172
audio_tools::SingleBuffer::write
bool write(T sample) override
write add an entry to the buffer
Definition
Buffers.h:206
audio_tools::SingleBuffer::available
int available() override
provides the number of entries that are available to read
Definition
Buffers.h:233
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
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
audio_tools::AudioInfo
Basic Audio information which drives e.g. I2S.
Definition
AudioTypes.h:55
audio_tools::AudioInfo::sample_rate
sample_rate_t sample_rate
Sample Rate: e.g 44100.
Definition
AudioTypes.h:57
audio_tools::AudioInfo::channels
uint16_t channels
Number of channels: 2=stereo, 1=mono.
Definition
AudioTypes.h:59
audio_tools::AudioInfo::bits_per_sample
uint8_t bits_per_sample
Number of bits per sample (int16_t = 16 bits)
Definition
AudioTypes.h:61
audio_tools::AudioLoRaConfig
LoRa Audio Configuration with default values maximised for speed.
Definition
AudioLoRa.h:31
audio_tools::AudioLoRaConfig::frequency
int frequency
Definition
AudioLoRa.h:34
audio_tools::AudioLoRaConfig::pin_rst
int pin_rst
Definition
AudioLoRa.h:42
audio_tools::AudioLoRaConfig::tx_power
int tx_power
Definition
AudioLoRa.h:36
audio_tools::AudioLoRaConfig::signal_bandwidth
int signal_bandwidth
Definition
AudioLoRa.h:38
audio_tools::AudioLoRaConfig::spreading_factor
int spreading_factor
Definition
AudioLoRa.h:37
audio_tools::AudioLoRaConfig::spi_speed
int32_t spi_speed
Definition
AudioLoRa.h:32
audio_tools::AudioLoRaConfig::pin_ss
int pin_ss
Definition
AudioLoRa.h:41
audio_tools::AudioLoRaConfig::max_size
int max_size
Definition
AudioLoRa.h:33
audio_tools::AudioLoRaConfig::pin_dio0
int pin_dio0
Definition
AudioLoRa.h:43
audio_tools::AudioLoRaConfig::sync_word
int sync_word
Definition
AudioLoRa.h:35
audio_tools::AudioLoRaConfig::process_audio_info
bool process_audio_info
Definition
AudioLoRa.h:44
Generated by
1.9.8