arduino-audio-tools
Loading...
Searching...
No Matches
AudioLoRa.h
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
12namespace audio_tools {
13
31struct AudioLoRaConfig : public AudioInfo {
32 int32_t spi_speed = 8E6;
33 int max_size = 200;
34 int frequency = 868E6; // (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
53class AudioLoRa : public AudioStream {
54 public:
55 AudioLoRaConfig defaultConfig() {
57 return rc;
58 }
59
61 cfg.sample_rate = info.sample_rate;
62 cfg.channels = info.channels;
65 }
66
67 bool begin(AudioLoRaConfig config) {
68 cfg = 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
LoRa Audio Sending and Receiving.
Definition AudioLoRa.h:53
void setAudioInfo(AudioInfo info)
Defines the input AudioInfo.
Definition AudioLoRa.h:60
Base class for all Audio Streams. It support the boolean operator to test if the object is ready with...
Definition BaseStream.h:122
virtual void setAudioInfo(AudioInfo newInfo) override
Defines the input AudioInfo.
Definition BaseStream.h:130
virtual AudioInfo audioInfo() override
provides the actual input AudioInfo
Definition BaseStream.h:153
void clear()
same as reset
Definition Buffers.h:95
bool write(T sample) override
write add an entry to the buffer
Definition Buffers.h:206
int available() override
provides the number of entries that are available to read
Definition Buffers.h:233
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
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioCodecsBase.h:10
Basic Audio information which drives e.g. I2S.
Definition AudioTypes.h:55
sample_rate_t sample_rate
Sample Rate: e.g 44100.
Definition AudioTypes.h:57
uint16_t channels
Number of channels: 2=stereo, 1=mono.
Definition AudioTypes.h:59
uint8_t bits_per_sample
Number of bits per sample (int16_t = 16 bits)
Definition AudioTypes.h:61
LoRa Audio Configuration with default values maximised for speed.
Definition AudioLoRa.h:31