arduino-audio-tools
Loading...
Searching...
No Matches
AudioLoRa.h
Go to the documentation of this file.
1#pragma once
2
5#include "LoRa.h" // 👉 https://github.com/sandeepmistry/arduino-LoRa
6
7// define the default pins used by the transceiver module
8#define ss 8
9#define rst 12
10#define dio0 14
11
12namespace audio_tools {
13
61struct AudioLoRaConfig : public AudioInfo {
62 int32_t spi_speed = 8E6;
63 int max_size = 200; // LoRa's payload cap is ~256 bytes
64 int frequency = 868E6; // (433E6, 868E6, 915E6)
65 int sync_word = 0xF3;
66 int tx_power = 20; // 2-20;
67 int spreading_factor = 6; // 6 (fastest/shortest range) - 12 (slowest/longest range)
69 500E3; // 7.8E3 (slowest/longest range) - 500E3 (fastest/shortest range):
70 // 7.8E3, 10.4E3, 15.6E3, 20.8E3, 31.25E3, 41.7E3,
71 // 62.5E3, 125E3, 250E3, 500E3.
72 int pin_ss = ss;
73 int pin_rst = rst;
77 bool process_audio_info = true;
78};
79
141class AudioLoRa : public AudioStream {
142 public:
145 return rc;
146 }
147
154
155 bool begin(AudioLoRaConfig config) {
156 cfg = config;
158 return begin();
159 }
160
161 bool begin() {
162 TRACEI();
164 LoRa.setSignalBandwidth(cfg.signal_bandwidth);
165 LoRa.setSpreadingFactor(cfg.spreading_factor);
166 LoRa.setTxPower(cfg.tx_power);
167 LoRa.setSPIFrequency(cfg.spi_speed);
168 LoRa.setPins(cfg.pin_ss, cfg.pin_rst, cfg.pin_dio0);
169 LoRa.setSyncWord(cfg.sync_word);
170 bool rc = LoRa.begin(cfg.frequency);
173 }
174 return rc;
175 }
176
177 void end() { LoRa.end(); }
178
179 size_t readBytes(uint8_t* data, size_t len) {
180 TRACEI();
181 size_t packetSize = LoRa.parsePacket();
182 if (cfg.process_audio_info && packetSize == sizeof(AudioInfo)) {
184 packetSize = LoRa.parsePacket();
185 }
186 int toRead = min(len, packetSize);
187 int read = LoRa.readBytes(data, toRead);
188 return read;
189 }
190
191 int available() { return cfg.max_size; }
192
194
195 size_t write(const uint8_t* data, size_t len) {
196 TRACEI();
197 for (int j = 0; j < len; j++) {
198 buffer.write(data[j]);
199 if (buffer.isFull()) {
200 LoRa.beginPacket();
201 LoRa.write(buffer.data(), buffer.available());
202 LoRa.endPacket();
203 buffer.clear();
204 }
205 }
206 return len;
207 }
208
209 protected:
212
214 AudioInfo tmp;
215 int read = LoRa.readBytes((uint8_t*)&tmp, sizeof(AudioInfo));
216 setAudioInfo(tmp);
217 }
218
220 LoRa.beginPacket();
221 AudioInfo ai = audioInfo();
222 LoRa.write((uint8_t*)&ai, sizeof(ai));
223 LoRa.endPacket();
224 }
225};
226
227} // namespace audio_tools
#define dio0
Definition AudioLoRa.h:10
#define ss
Definition AudioLoRa.h:8
#define rst
Definition AudioLoRa.h:9
#define TRACEI()
Definition AudioLoggerIDF.h:32
Sends and receives audio over a LoRa radio link (via the sandeepmistry/arduino-LoRa library) as a reg...
Definition AudioLoRa.h:141
void readAudioInfo()
Definition AudioLoRa.h:213
bool begin(AudioLoRaConfig config)
Definition AudioLoRa.h:155
int available()
Definition AudioLoRa.h:191
void setAudioInfo(AudioInfo info)
Defines the input AudioInfo.
Definition AudioLoRa.h:148
bool begin()
Definition AudioLoRa.h:161
AudioLoRaConfig defaultConfig()
Definition AudioLoRa.h:143
void writeAudioInfo()
Definition AudioLoRa.h:219
int availableForWrite()
Definition AudioLoRa.h:193
size_t readBytes(uint8_t *data, size_t len)
Definition AudioLoRa.h:179
SingleBuffer< uint8_t > buffer
Definition AudioLoRa.h:211
void end()
Definition AudioLoRa.h:177
AudioLoRaConfig cfg
Definition AudioLoRa.h:210
size_t write(const uint8_t *data, size_t len)
Definition AudioLoRa.h:195
Base class for all Audio Streams. It support the boolean operator to test if the object is ready with...
Definition BaseStream.h:120
AudioInfo info
Definition BaseStream.h:171
virtual void setAudioInfo(AudioInfo newInfo) override
Defines the input AudioInfo.
Definition BaseStream.h:128
virtual AudioInfo audioInfo() override
provides the actual input AudioInfo
Definition BaseStream.h:151
void clear()
same as reset
Definition Buffers.h:96
A simple Buffer implementation which just uses a (dynamically sized) array.
Definition Buffers.h:184
bool write(T sample) override
write add an entry to the buffer
Definition Buffers.h:218
int available() override
provides the number of entries that are available to read
Definition Buffers.h:245
bool isFull() override
checks if the buffer is full
Definition Buffers.h:252
T * data()
Provides address of actual data.
Definition Buffers.h:296
bool resize(size_t size)
Resizes the buffer if supported: returns false if not supported.
Definition Buffers.h:317
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition LMSEchoCancellationStream.h:6
Basic Audio information which drives e.g. I2S.
Definition AudioTypes.h:51
sample_rate_t sample_rate
Sample Rate: e.g 44100.
Definition AudioTypes.h:53
uint16_t channels
Number of channels: 2=stereo, 1=mono.
Definition AudioTypes.h:55
uint8_t bits_per_sample
Number of bits per sample (int16_t = 16 bits)
Definition AudioTypes.h:57
Configuration for AudioLoRa.
Definition AudioLoRa.h:61
int frequency
Definition AudioLoRa.h:64
int pin_rst
Definition AudioLoRa.h:73
int tx_power
Definition AudioLoRa.h:66
int signal_bandwidth
Definition AudioLoRa.h:68
int spreading_factor
Definition AudioLoRa.h:67
int32_t spi_speed
Definition AudioLoRa.h:62
int pin_ss
Definition AudioLoRa.h:72
int max_size
Definition AudioLoRa.h:63
int pin_dio0
Definition AudioLoRa.h:74
int sync_word
Definition AudioLoRa.h:65
bool process_audio_info
Definition AudioLoRa.h:77