RadioLib Universal wireless communication library for Arduino

SX1278.h
1 #if !defined(_RADIOLIB_SX1278_H)
2 #define _RADIOLIB_SX1278_H
3
4 #include "../../TypeDef.h"
5
6 #if !defined(RADIOLIB_EXCLUDE_SX127X)
7
8 #include "../../Module.h"
9 #include "SX127x.h"
10
11 // SX1278 specific register map
12 #define RADIOLIB_SX1278_REG_MODEM_CONFIG_3 0x26
13 #define RADIOLIB_SX1278_REG_PLL_HOP 0x44
14 #define RADIOLIB_SX1278_REG_TCXO 0x4B
15 #define RADIOLIB_SX1278_REG_PA_DAC 0x4D
16 #define RADIOLIB_SX1278_REG_FORMER_TEMP 0x5B
17 #define RADIOLIB_SX1278_REG_BIT_RATE_FRAC 0x5D
18 #define RADIOLIB_SX1278_REG_AGC_REF 0x61
19 #define RADIOLIB_SX1278_REG_AGC_THRESH_1 0x62
20 #define RADIOLIB_SX1278_REG_AGC_THRESH_2 0x63
21 #define RADIOLIB_SX1278_REG_AGC_THRESH_3 0x64
22 #define RADIOLIB_SX1278_REG_PLL 0x70
23
24 // SX1278 LoRa modem settings
25 // RADIOLIB_SX1278_REG_OP_MODE MSB LSB DESCRIPTION
26 #define RADIOLIB_SX1278_HIGH_FREQ 0b00000000 // 3 3 access HF test registers
27 #define RADIOLIB_SX1278_LOW_FREQ 0b00001000 // 3 3 access LF test registers
28
29 // RADIOLIB_SX1278_REG_FRF_MSB + REG_FRF_MID + REG_FRF_LSB
30 #define RADIOLIB_SX1278_FRF_MSB 0x6C // 7 0 carrier frequency setting: f_RF = (F(XOSC) * FRF)/2^19
31 #define RADIOLIB_SX1278_FRF_MID 0x80 // 7 0 where F(XOSC) = 32 MHz
32 #define RADIOLIB_SX1278_FRF_LSB 0x00 // 7 0 FRF = 3 byte value of FRF registers
33
34 // RADIOLIB_SX1278_REG_PA_CONFIG
35 #define RADIOLIB_SX1278_MAX_POWER 0b01110000 // 6 4 max power: P_max = 10.8 + 0.6*MAX_POWER [dBm]; P_max(MAX_POWER = 0b111) = 15 dBm
36 #define RADIOLIB_SX1278_LOW_POWER 0b00100000 // 6 4
37
38 // RADIOLIB_SX1278_REG_LNA
39 #define RADIOLIB_SX1278_LNA_BOOST_LF_OFF 0b00000000 // 4 3 default LNA current
40
41 // SX127X_REG_MODEM_CONFIG_1
42 #define RADIOLIB_SX1278_BW_7_80_KHZ 0b00000000 // 7 4 bandwidth: 7.80 kHz
43 #define RADIOLIB_SX1278_BW_10_40_KHZ 0b00010000 // 7 4 10.40 kHz
44 #define RADIOLIB_SX1278_BW_15_60_KHZ 0b00100000 // 7 4 15.60 kHz
45 #define RADIOLIB_SX1278_BW_20_80_KHZ 0b00110000 // 7 4 20.80 kHz
46 #define RADIOLIB_SX1278_BW_31_25_KHZ 0b01000000 // 7 4 31.25 kHz
47 #define RADIOLIB_SX1278_BW_41_70_KHZ 0b01010000 // 7 4 41.70 kHz
48 #define RADIOLIB_SX1278_BW_62_50_KHZ 0b01100000 // 7 4 62.50 kHz
49 #define RADIOLIB_SX1278_BW_125_00_KHZ 0b01110000 // 7 4 125.00 kHz
50 #define RADIOLIB_SX1278_BW_250_00_KHZ 0b10000000 // 7 4 250.00 kHz
51 #define RADIOLIB_SX1278_BW_500_00_KHZ 0b10010000 // 7 4 500.00 kHz
52 #define RADIOLIB_SX1278_CR_4_5 0b00000010 // 3 1 error coding rate: 4/5
53 #define RADIOLIB_SX1278_CR_4_6 0b00000100 // 3 1 4/6
54 #define RADIOLIB_SX1278_CR_4_7 0b00000110 // 3 1 4/7
55 #define RADIOLIB_SX1278_CR_4_8 0b00001000 // 3 1 4/8
56 #define RADIOLIB_SX1278_HEADER_EXPL_MODE 0b00000000 // 0 0 explicit header mode
57 #define RADIOLIB_SX1278_HEADER_IMPL_MODE 0b00000001 // 0 0 implicit header mode
58
59 // SX127X_REG_MODEM_CONFIG_2
60 #define RADIOLIB_SX1278_RX_CRC_MODE_OFF 0b00000000 // 2 2 CRC disabled
61 #define RADIOLIB_SX1278_RX_CRC_MODE_ON 0b00000100 // 2 2 CRC enabled
62
63 // RADIOLIB_SX1278_REG_MODEM_CONFIG_3
64 #define RADIOLIB_SX1278_LOW_DATA_RATE_OPT_OFF 0b00000000 // 3 3 low data rate optimization disabled
65 #define RADIOLIB_SX1278_LOW_DATA_RATE_OPT_ON 0b00001000 // 3 3 low data rate optimization enabled
66 #define RADIOLIB_SX1278_AGC_AUTO_OFF 0b00000000 // 2 2 LNA gain set by REG_LNA
67 #define RADIOLIB_SX1278_AGC_AUTO_ON 0b00000100 // 2 2 LNA gain set by internal AGC loop
68
69 // SX127X_REG_VERSION
70 #define RADIOLIB_SX1278_CHIP_VERSION 0x12
71
72 // SX1278 FSK modem settings
73 // SX127X_REG_PA_RAMP
74 #define RADIOLIB_SX1278_NO_SHAPING 0b00000000 // 6 5 data shaping: no shaping (default)
75 #define RADIOLIB_SX1278_FSK_GAUSSIAN_1_0 0b00100000 // 6 5 FSK modulation Gaussian filter, BT = 1.0
76 #define RADIOLIB_SX1278_FSK_GAUSSIAN_0_5 0b01000000 // 6 5 FSK modulation Gaussian filter, BT = 0.5
77 #define RADIOLIB_SX1278_FSK_GAUSSIAN_0_3 0b01100000 // 6 5 FSK modulation Gaussian filter, BT = 0.3
78 #define RADIOLIB_SX1278_OOK_FILTER_BR 0b00100000 // 6 5 OOK modulation filter, f_cutoff = BR
79 #define RADIOLIB_SX1278_OOK_FILTER_2BR 0b01000000 // 6 5 OOK modulation filter, f_cutoff = 2*BR
80
81 // RADIOLIB_SX1278_REG_AGC_REF
82 #define RADIOLIB_SX1278_AGC_REFERENCE_LEVEL_LF 0x19 // 5 0 floor reference for AGC thresholds: AgcRef = -174 + 10*log(2*RxBw) + 8 + AGC_REFERENCE_LEVEL [dBm]: below 525 MHz
83 #define RADIOLIB_SX1278_AGC_REFERENCE_LEVEL_HF 0x1C // 5 0 above 779 MHz
84
85 // RADIOLIB_SX1278_REG_AGC_THRESH_1
86 #define RADIOLIB_SX1278_AGC_STEP_1_LF 0x0C // 4 0 1st AGC threshold: below 525 MHz
87 #define RADIOLIB_SX1278_AGC_STEP_1_HF 0x0E // 4 0 above 779 MHz
88
89 // RADIOLIB_SX1278_REG_AGC_THRESH_2
90 #define RADIOLIB_SX1278_AGC_STEP_2_LF 0x40 // 7 4 2nd AGC threshold: below 525 MHz
91 #define RADIOLIB_SX1278_AGC_STEP_2_HF 0x50 // 7 4 above 779 MHz
92 #define RADIOLIB_SX1278_AGC_STEP_3 0x0B // 3 0 3rd AGC threshold
93
94 // RADIOLIB_SX1278_REG_AGC_THRESH_3
95 #define RADIOLIB_SX1278_AGC_STEP_4 0xC0 // 7 4 4th AGC threshold
96 #define RADIOLIB_SX1278_AGC_STEP_5 0x0C // 4 0 5th AGC threshold
97
104 class SX1278: public SX127x {
105 public:
106
107 // constructor
108
114 SX1278(Module* mod);
115
116 // basic methods
117
141 int16_t begin(float freq = 434.0, float bw = 125.0, uint8_t sf = 9, uint8_t cr = 7, uint8_t syncWord = RADIOLIB_SX127X_SYNC_WORD, int8_t power = 10, uint16_t preambleLength = 8, uint8_t gain = 0);
142
163 int16_t beginFSK(float freq = 434.0, float br = 4.8, float freqDev = 5.0, float rxBw = 125.0, int8_t power = 10, uint16_t preambleLength = 16, bool enableOOK = false);
164
168 void reset() override;
169
170 // configuration methods
171
179 int16_t setFrequency(float freq);
180
188 int16_t setBandwidth(float bw);
189
197 int16_t setSpreadingFactor(uint8_t sf);
198
206 int16_t setCodingRate(uint8_t cr);
207
215 int16_t setBitRate(float br) override;
216
227 int16_t setOutputPower(int8_t power, bool useRfo = false);
228
237 int16_t setGain(uint8_t gain);
238
247 int16_t setDataShaping(uint8_t sh) override;
248
258 int16_t setDataShapingOOK(uint8_t sh);
259
269 float getRSSI(bool packet = true, bool skipReceive = false);
270
280 int16_t setCRC(bool enable, bool mode = false);
281
290 int16_t forceLDRO(bool enable);
291
298 int16_t autoLDRO();
299
307 int16_t implicitHeader(size_t len);
308
314 int16_t explicitHeader();
315
316 #if !defined(RADIOLIB_GODMODE)
317 protected:
318 #endif
319 int16_t setBandwidthRaw(uint8_t newBandwidth);
320 int16_t setSpreadingFactorRaw(uint8_t newSpreadingFactor);
321 int16_t setCodingRateRaw(uint8_t newCodingRate);
322 int16_t setHeaderType(uint8_t headerType, size_t len = 0xFF);
323
324 int16_t configFSK();
325 void errataFix(bool rx);
326
327 #if !defined(RADIOLIB_GODMODE)
328 private:
329 #endif
330 bool _ldroAuto = true;
331 bool _ldroEnabled = false;
332
333 };
334
335 #endif
336
337 #endif
Module
Implements all common low-level methods to control the wireless module. Every module class contains o...
Definition: Module.h:28
PhysicalLayer::getRSSI
virtual float getRSSI()
Gets RSSI (Recorded Signal Strength Indicator) of the last received packet.
Definition: PhysicalLayer.cpp:254
SX1278
Derived class for SX1278 modules. Also used as base class for SX1276, SX1277, SX1279,...
Definition: SX1278.h:104
SX1278::SX1278
SX1278(Module *mod)
Default constructor. Called from Arduino sketch when creating new LoRa instance.
Definition: SX1278.cpp:5
SX1278::setDataShapingOOK
int16_t setDataShapingOOK(uint8_t sh)
Sets filter cutoff frequency that will be used for data shaping. Allowed values are 1 for frequency e...
Definition: SX1278.cpp:356
SX1278::setBandwidth
int16_t setBandwidth(float bw)
Sets LoRa link bandwidth. Allowed values are 10.4, 15.6, 20.8, 31.25, 41.7, 62.5, 125,...
Definition: SX1278.cpp:93
SX1278::implicitHeader
int16_t implicitHeader(size_t len)
Set implicit header mode for future reception/transmission. Required for spreading factor 6.
Definition: SX1278.cpp:446
SX1278::setFrequency
int16_t setFrequency(float freq)
Sets carrier frequency. Allowed values range from 137.0 MHz to 525.0 MHz.
Definition: SX1278.cpp:82
SX1278::reset
void reset() override
Reset method. Will reset the chip to the default state using RST pin.
Definition: SX1278.cpp:74
SX1278::forceLDRO
int16_t forceLDRO(bool enable)
Forces LoRa low data rate optimization. Only available in LoRa mode. After calling this method,...
Definition: SX1278.cpp:424
SX1278::explicitHeader
int16_t explicitHeader()
Set explicit header mode for future reception/transmission.
Definition: SX1278.cpp:450
SX1278::setOutputPower
int16_t setOutputPower(int8_t power, bool useRfo=false)
Sets transmission output power. Allowed values range from -3 to 15 dBm (RFO pin) or +2 to +17 dBm (PA...
Definition: SX1278.cpp:237
SX1278::setCodingRate
int16_t setCodingRate(uint8_t cr)
Sets LoRa link coding rate denominator. Allowed values range from 5 to 8. Only available in LoRa mode...
Definition: SX1278.cpp:199
SX1278::beginFSK
int16_t beginFSK(float freq=434.0, float br=4.8, float freqDev=5.0, float rxBw=125.0, int8_t power=10, uint16_t preambleLength=16, bool enableOOK=false)
FSK modem initialization method. Must be called at least once from Arduino sketch to initialize the m...
Definition: SX1278.cpp:40
SX1278::begin
int16_t begin(float freq=434.0, float bw=125.0, uint8_t sf=9, uint8_t cr=7, uint8_t syncWord=RADIOLIB_SX127X_SYNC_WORD, int8_t power=10, uint16_t preambleLength=8, uint8_t gain=0)
LoRa modem initialization method. Must be called at least once from Arduino sketch to initialize the ...
Definition: SX1278.cpp:9
SX1278::setGain
int16_t setGain(uint8_t gain)
Sets gain of receiver LNA (low-noise amplifier). Can be set to any integer in range 1 to 6 where 1 is...
Definition: SX1278.cpp:285
SX1278::setCRC
int16_t setCRC(bool enable, bool mode=false)
Enables/disables CRC check of received packets.
Definition: SX1278.cpp:396
SX1278::autoLDRO
int16_t autoLDRO()
Re-enables automatic LDRO configuration. Only available in LoRa mode. After calling this method,...
Definition: SX1278.cpp:437
SX1278::setSpreadingFactor
int16_t setSpreadingFactor(uint8_t sf)
Sets LoRa link spreading factor. Allowed values range from 6 to 12. Only available in LoRa mode.
Definition: SX1278.cpp:145
SX1278::setDataShaping
int16_t setDataShaping(uint8_t sh) override
Sets Gaussian filter bandwidth-time product that will be used for data shaping. Only available in FSK...
Definition: SX1278.cpp:321
SX1278::setBitRate
int16_t setBitRate(float br) override
Sets FSK bit rate. Allowed values range from 0.5 to 300 kbps. Only available in FSK mode.
Definition: SX1278.cpp:233
SX127x
Base class for SX127x series. All derived classes for SX127x (e.g. SX1278 or SX1272) inherit from thi...
Definition: SX127x.h:583