1#if !defined(_RADIOLIB_SX127X_H)
2#define _RADIOLIB_SX127X_H
4#include "../../TypeDef.h"
6#if !RADIOLIB_EXCLUDE_SX127X
8#include "../../Module.h"
10#include "../../protocols/PhysicalLayer/PhysicalLayer.h"
13#define RADIOLIB_SX127X_FREQUENCY_STEP_SIZE 61.03515625
14#define RADIOLIB_SX127X_MAX_PACKET_LENGTH 255
15#define RADIOLIB_SX127X_MAX_PACKET_LENGTH_FSK 64
16#define RADIOLIB_SX127X_CRYSTAL_FREQ 32.0f
17#define RADIOLIB_SX127X_DIV_EXPONENT 19
20#define RADIOLIB_SX127X_REG_FIFO 0x00
21#define RADIOLIB_SX127X_REG_OP_MODE 0x01
22#define RADIOLIB_SX127X_REG_FRF_MSB 0x06
23#define RADIOLIB_SX127X_REG_FRF_MID 0x07
24#define RADIOLIB_SX127X_REG_FRF_LSB 0x08
25#define RADIOLIB_SX127X_REG_PA_CONFIG 0x09
26#define RADIOLIB_SX127X_REG_PA_RAMP 0x0A
27#define RADIOLIB_SX127X_REG_OCP 0x0B
28#define RADIOLIB_SX127X_REG_LNA 0x0C
29#define RADIOLIB_SX127X_REG_FIFO_ADDR_PTR 0x0D
30#define RADIOLIB_SX127X_REG_FIFO_TX_BASE_ADDR 0x0E
31#define RADIOLIB_SX127X_REG_FIFO_RX_BASE_ADDR 0x0F
32#define RADIOLIB_SX127X_REG_FIFO_RX_CURRENT_ADDR 0x10
33#define RADIOLIB_SX127X_REG_IRQ_FLAGS_MASK 0x11
34#define RADIOLIB_SX127X_REG_IRQ_FLAGS 0x12
35#define RADIOLIB_SX127X_REG_RX_NB_BYTES 0x13
36#define RADIOLIB_SX127X_REG_RX_HEADER_CNT_VALUE_MSB 0x14
37#define RADIOLIB_SX127X_REG_RX_HEADER_CNT_VALUE_LSB 0x15
38#define RADIOLIB_SX127X_REG_RX_PACKET_CNT_VALUE_MSB 0x16
39#define RADIOLIB_SX127X_REG_RX_PACKET_CNT_VALUE_LSB 0x17
40#define RADIOLIB_SX127X_REG_MODEM_STAT 0x18
41#define RADIOLIB_SX127X_REG_PKT_SNR_VALUE 0x19
42#define RADIOLIB_SX127X_REG_PKT_RSSI_VALUE 0x1A
43#define RADIOLIB_SX127X_REG_RSSI_VALUE 0x1B
44#define RADIOLIB_SX127X_REG_HOP_CHANNEL 0x1C
45#define RADIOLIB_SX127X_REG_MODEM_CONFIG_1 0x1D
46#define RADIOLIB_SX127X_REG_MODEM_CONFIG_2 0x1E
47#define RADIOLIB_SX127X_REG_SYMB_TIMEOUT_LSB 0x1F
48#define RADIOLIB_SX127X_REG_PREAMBLE_MSB 0x20
49#define RADIOLIB_SX127X_REG_PREAMBLE_LSB 0x21
50#define RADIOLIB_SX127X_REG_PAYLOAD_LENGTH 0x22
51#define RADIOLIB_SX127X_REG_MAX_PAYLOAD_LENGTH 0x23
52#define RADIOLIB_SX127X_REG_HOP_PERIOD 0x24
53#define RADIOLIB_SX127X_REG_FIFO_RX_BYTE_ADDR 0x25
54#define RADIOLIB_SX127X_REG_FEI_MSB 0x28
55#define RADIOLIB_SX127X_REG_FEI_MID 0x29
56#define RADIOLIB_SX127X_REG_FEI_LSB 0x2A
57#define RADIOLIB_SX127X_REG_RSSI_WIDEBAND 0x2C
58#define RADIOLIB_SX127X_REG_DETECT_OPTIMIZE 0x31
59#define RADIOLIB_SX127X_REG_INVERT_IQ 0x33
60#define RADIOLIB_SX127X_REG_DETECTION_THRESHOLD 0x37
61#define RADIOLIB_SX127X_REG_SYNC_WORD 0x39
62#define RADIOLIB_SX127X_REG_INVERT_IQ2 0x3B
63#define RADIOLIB_SX127X_REG_DIO_MAPPING_1 0x40
64#define RADIOLIB_SX127X_REG_DIO_MAPPING_2 0x41
65#define RADIOLIB_SX127X_REG_VERSION 0x42
69#define RADIOLIB_SX127X_FSK_OOK 0b00000000
70#define RADIOLIB_SX127X_LORA 0b10000000
71#define RADIOLIB_SX127X_ACCESS_SHARED_REG_OFF 0b00000000
72#define RADIOLIB_SX127X_ACCESS_SHARED_REG_ON 0b01000000
73#define RADIOLIB_SX127X_SLEEP 0b00000000
74#define RADIOLIB_SX127X_STANDBY 0b00000001
75#define RADIOLIB_SX127X_FSTX 0b00000010
76#define RADIOLIB_SX127X_TX 0b00000011
77#define RADIOLIB_SX127X_FSRX 0b00000100
78#define RADIOLIB_SX127X_RXCONTINUOUS 0b00000101
79#define RADIOLIB_SX127X_RXSINGLE 0b00000110
80#define RADIOLIB_SX127X_CAD 0b00000111
83#define RADIOLIB_SX127X_PA_SELECT_RFO 0b00000000
84#define RADIOLIB_SX127X_PA_SELECT_BOOST 0b10000000
85#define RADIOLIB_SX127X_OUTPUT_POWER 0b00001111
89#define RADIOLIB_SX127X_OCP_OFF 0b00000000
90#define RADIOLIB_SX127X_OCP_ON 0b00100000
91#define RADIOLIB_SX127X_OCP_TRIM 0b00001011
94#define RADIOLIB_SX127X_LNA_GAIN_1 0b00100000
95#define RADIOLIB_SX127X_LNA_GAIN_2 0b01000000
96#define RADIOLIB_SX127X_LNA_GAIN_3 0b01100000
97#define RADIOLIB_SX127X_LNA_GAIN_4 0b10000000
98#define RADIOLIB_SX127X_LNA_GAIN_5 0b10100000
99#define RADIOLIB_SX127X_LNA_GAIN_6 0b11000000
100#define RADIOLIB_SX127X_LNA_BOOST_OFF 0b00000000
101#define RADIOLIB_SX127X_LNA_BOOST_ON 0b00000011
104#define RADIOLIB_SX127X_SF_6 0b01100000
105#define RADIOLIB_SX127X_SF_7 0b01110000
106#define RADIOLIB_SX127X_SF_8 0b10000000
107#define RADIOLIB_SX127X_SF_9 0b10010000
108#define RADIOLIB_SX127X_SF_10 0b10100000
109#define RADIOLIB_SX127X_SF_11 0b10110000
110#define RADIOLIB_SX127X_SF_12 0b11000000
111#define RADIOLIB_SX127X_TX_MODE_SINGLE 0b00000000
112#define RADIOLIB_SX127X_TX_MODE_CONT 0b00001000
113#define RADIOLIB_SX127X_RX_TIMEOUT_MSB 0b00000000
116#define RADIOLIB_SX127X_RX_TIMEOUT_LSB 0b01100100
119#define RADIOLIB_SX127X_PREAMBLE_LENGTH_MSB 0b00000000
120#define RADIOLIB_SX127X_PREAMBLE_LENGTH_LSB 0b00001000
123#define RADIOLIB_SX127X_DETECT_OPTIMIZE_SF_6 0b00000101
124#define RADIOLIB_SX127X_DETECT_OPTIMIZE_SF_7_12 0b00000011
127#define RADIOLIB_SX127X_INVERT_IQ_RXPATH_ON 0b01000000
128#define RADIOLIB_SX127X_INVERT_IQ_RXPATH_OFF 0b00000000
129#define RADIOLIB_SX127X_INVERT_IQ_TXPATH_ON 0b00000001
130#define RADIOLIB_SX127X_INVERT_IQ_TXPATH_OFF 0b00000000
133#define RADIOLIB_SX127X_DETECTION_THRESHOLD_SF_6 0b00001100
134#define RADIOLIB_SX127X_DETECTION_THRESHOLD_SF_7_12 0b00001010
137#define RADIOLIB_SX127X_PA_BOOST_OFF 0b00000100
138#define RADIOLIB_SX127X_PA_BOOST_ON 0b00000111
141#define RADIOLIB_SX127X_HOP_PERIOD_OFF 0b00000000
142#define RADIOLIB_SX127X_HOP_PERIOD_MAX 0b11111111
145#define RADIOLIB_SX127X_CLEAR_IRQ_FLAG_RX_TIMEOUT 0b10000000
146#define RADIOLIB_SX127X_CLEAR_IRQ_FLAG_RX_DONE 0b01000000
147#define RADIOLIB_SX127X_CLEAR_IRQ_FLAG_PAYLOAD_CRC_ERROR 0b00100000
148#define RADIOLIB_SX127X_CLEAR_IRQ_FLAG_VALID_HEADER 0b00010000
149#define RADIOLIB_SX127X_CLEAR_IRQ_FLAG_TX_DONE 0b00001000
150#define RADIOLIB_SX127X_CLEAR_IRQ_FLAG_CAD_DONE 0b00000100
151#define RADIOLIB_SX127X_CLEAR_IRQ_FLAG_FHSS_CHANGE_CHANNEL 0b00000010
152#define RADIOLIB_SX127X_CLEAR_IRQ_FLAG_CAD_DETECTED 0b00000001
155#define RADIOLIB_SX127X_MASK_IRQ_FLAG_RX_TIMEOUT 0b01111111
156#define RADIOLIB_SX127X_MASK_IRQ_FLAG_RX_DONE 0b10111111
157#define RADIOLIB_SX127X_MASK_IRQ_FLAG_PAYLOAD_CRC_ERROR 0b11011111
158#define RADIOLIB_SX127X_MASK_IRQ_FLAG_VALID_HEADER 0b11101111
159#define RADIOLIB_SX127X_MASK_IRQ_FLAG_TX_DONE 0b11110111
160#define RADIOLIB_SX127X_MASK_IRQ_FLAG_CAD_DONE 0b11111011
161#define RADIOLIB_SX127X_MASK_IRQ_FLAG_FHSS_CHANGE_CHANNEL 0b11111101
162#define RADIOLIB_SX127X_MASK_IRQ_FLAG_CAD_DETECTED 0b11111110
165#define RADIOLIB_SX127X_FIFO_TX_BASE_ADDR_MAX 0b00000000
168#define RADIOLIB_SX127X_FIFO_RX_BASE_ADDR_MAX 0b00000000
171#define RADIOLIB_SX127X_SYNC_WORD 0x12
172#define RADIOLIB_SX127X_SYNC_WORD_LORAWAN 0x34
175#define RADIOLIB_SX127X_IQ2_ENABLE 0x19
176#define RADIOLIB_SX127X_IQ2_DISABLE 0x1D
180#define RADIOLIB_SX127X_REG_BITRATE_MSB 0x02
181#define RADIOLIB_SX127X_REG_BITRATE_LSB 0x03
182#define RADIOLIB_SX127X_REG_FDEV_MSB 0x04
183#define RADIOLIB_SX127X_REG_FDEV_LSB 0x05
184#define RADIOLIB_SX127X_REG_RX_CONFIG 0x0D
185#define RADIOLIB_SX127X_REG_RSSI_CONFIG 0x0E
186#define RADIOLIB_SX127X_REG_RSSI_COLLISION 0x0F
187#define RADIOLIB_SX127X_REG_RSSI_THRESH 0x10
188#define RADIOLIB_SX127X_REG_RSSI_VALUE_FSK 0x11
189#define RADIOLIB_SX127X_REG_RX_BW 0x12
190#define RADIOLIB_SX127X_REG_AFC_BW 0x13
191#define RADIOLIB_SX127X_REG_OOK_PEAK 0x14
192#define RADIOLIB_SX127X_REG_OOK_FIX 0x15
193#define RADIOLIB_SX127X_REG_OOK_AVG 0x16
194#define RADIOLIB_SX127X_REG_AFC_FEI 0x1A
195#define RADIOLIB_SX127X_REG_AFC_MSB 0x1B
196#define RADIOLIB_SX127X_REG_AFC_LSB 0x1C
197#define RADIOLIB_SX127X_REG_FEI_MSB_FSK 0x1D
198#define RADIOLIB_SX127X_REG_FEI_LSB_FSK 0x1E
199#define RADIOLIB_SX127X_REG_PREAMBLE_DETECT 0x1F
200#define RADIOLIB_SX127X_REG_RX_TIMEOUT_1 0x20
201#define RADIOLIB_SX127X_REG_RX_TIMEOUT_2 0x21
202#define RADIOLIB_SX127X_REG_RX_TIMEOUT_3 0x22
203#define RADIOLIB_SX127X_REG_RX_DELAY 0x23
204#define RADIOLIB_SX127X_REG_OSC 0x24
205#define RADIOLIB_SX127X_REG_PREAMBLE_MSB_FSK 0x25
206#define RADIOLIB_SX127X_REG_PREAMBLE_LSB_FSK 0x26
207#define RADIOLIB_SX127X_REG_SYNC_CONFIG 0x27
208#define RADIOLIB_SX127X_REG_SYNC_VALUE_1 0x28
209#define RADIOLIB_SX127X_REG_SYNC_VALUE_2 0x29
210#define RADIOLIB_SX127X_REG_SYNC_VALUE_3 0x2A
211#define RADIOLIB_SX127X_REG_SYNC_VALUE_4 0x2B
212#define RADIOLIB_SX127X_REG_SYNC_VALUE_5 0x2C
213#define RADIOLIB_SX127X_REG_SYNC_VALUE_6 0x2D
214#define RADIOLIB_SX127X_REG_SYNC_VALUE_7 0x2E
215#define RADIOLIB_SX127X_REG_SYNC_VALUE_8 0x2F
216#define RADIOLIB_SX127X_REG_PACKET_CONFIG_1 0x30
217#define RADIOLIB_SX127X_REG_PACKET_CONFIG_2 0x31
218#define RADIOLIB_SX127X_REG_PAYLOAD_LENGTH_FSK 0x32
219#define RADIOLIB_SX127X_REG_NODE_ADRS 0x33
220#define RADIOLIB_SX127X_REG_BROADCAST_ADRS 0x34
221#define RADIOLIB_SX127X_REG_FIFO_THRESH 0x35
222#define RADIOLIB_SX127X_REG_SEQ_CONFIG_1 0x36
223#define RADIOLIB_SX127X_REG_SEQ_CONFIG_2 0x37
224#define RADIOLIB_SX127X_REG_TIMER_RESOL 0x38
225#define RADIOLIB_SX127X_REG_TIMER1_COEF 0x39
226#define RADIOLIB_SX127X_REG_TIMER2_COEF 0x3A
227#define RADIOLIB_SX127X_REG_IMAGE_CAL 0x3B
228#define RADIOLIB_SX127X_REG_TEMP 0x3C
229#define RADIOLIB_SX127X_REG_LOW_BAT 0x3D
230#define RADIOLIB_SX127X_REG_IRQ_FLAGS_1 0x3E
231#define RADIOLIB_SX127X_REG_IRQ_FLAGS_2 0x3F
235#define RADIOLIB_SX127X_MODULATION_FSK 0b00000000
236#define RADIOLIB_SX127X_MODULATION_OOK 0b00100000
237#define RADIOLIB_SX127X_RX 0b00000101
240#define RADIOLIB_SX127X_BITRATE_MSB 0x1A
241#define RADIOLIB_SX127X_BITRATE_LSB 0x0B
244#define RADIOLIB_SX127X_FDEV_MSB 0x00
245#define RADIOLIB_SX127X_FDEV_LSB 0x52
248#define RADIOLIB_SX127X_RESTART_RX_ON_COLLISION_OFF 0b00000000
249#define RADIOLIB_SX127X_RESTART_RX_ON_COLLISION_ON 0b10000000
250#define RADIOLIB_SX127X_RESTART_RX_WITHOUT_PLL_LOCK 0b01000000
251#define RADIOLIB_SX127X_RESTART_RX_WITH_PLL_LOCK 0b00100000
252#define RADIOLIB_SX127X_AFC_AUTO_OFF 0b00000000
253#define RADIOLIB_SX127X_AFC_AUTO_ON 0b00010000
254#define RADIOLIB_SX127X_AGC_AUTO_OFF 0b00000000
255#define RADIOLIB_SX127X_AGC_AUTO_ON 0b00001000
256#define RADIOLIB_SX127X_RX_TRIGGER_NONE 0b00000000
257#define RADIOLIB_SX127X_RX_TRIGGER_RSSI_INTERRUPT 0b00000001
258#define RADIOLIB_SX127X_RX_TRIGGER_PREAMBLE_DETECT 0b00000110
259#define RADIOLIB_SX127X_RX_TRIGGER_BOTH 0b00000111
262#define RADIOLIB_SX127X_RSSI_SMOOTHING_SAMPLES_2 0b00000000
263#define RADIOLIB_SX127X_RSSI_SMOOTHING_SAMPLES_4 0b00000001
264#define RADIOLIB_SX127X_RSSI_SMOOTHING_SAMPLES_8 0b00000010
265#define RADIOLIB_SX127X_RSSI_SMOOTHING_SAMPLES_16 0b00000011
266#define RADIOLIB_SX127X_RSSI_SMOOTHING_SAMPLES_32 0b00000100
267#define RADIOLIB_SX127X_RSSI_SMOOTHING_SAMPLES_64 0b00000101
268#define RADIOLIB_SX127X_RSSI_SMOOTHING_SAMPLES_128 0b00000110
269#define RADIOLIB_SX127X_RSSI_SMOOTHING_SAMPLES_256 0b00000111
272#define RADIOLIB_SX127X_RSSI_COLLISION_THRESHOLD 0x0A
275#define RADIOLIB_SX127X_RSSI_THRESHOLD 0xFF
278#define RADIOLIB_SX127X_RX_BW_MANT_16 0b00000000
279#define RADIOLIB_SX127X_RX_BW_MANT_20 0b00001000
280#define RADIOLIB_SX127X_RX_BW_MANT_24 0b00010000
281#define RADIOLIB_SX127X_RX_BW_EXP 0b00000101
282#define RADIOLIB_SX127X_RX_BW_2_6 (RADIOLIB_SX127X_RX_BW_MANT_24 | 0x07)
283#define RADIOLIB_SX127X_RX_BW_3_1 (RADIOLIB_SX127X_RX_BW_MANT_20 | 0x07)
284#define RADIOLIB_SX127X_RX_BW_3_9 (RADIOLIB_SX127X_RX_BW_MANT_16 | 0x07)
285#define RADIOLIB_SX127X_RX_BW_5_2 (RADIOLIB_SX127X_RX_BW_MANT_24 | 0x06)
286#define RADIOLIB_SX127X_RX_BW_6_3 (RADIOLIB_SX127X_RX_BW_MANT_20 | 0x06)
287#define RADIOLIB_SX127X_RX_BW_7_8 (RADIOLIB_SX127X_RX_BW_MANT_16 | 0x06)
288#define RADIOLIB_SX127X_RX_BW_10_4 (RADIOLIB_SX127X_RX_BW_MANT_24 | 0x05)
289#define RADIOLIB_SX127X_RX_BW_12_5 (RADIOLIB_SX127X_RX_BW_MANT_20 | 0x05)
290#define RADIOLIB_SX127X_RX_BW_15_6 (RADIOLIB_SX127X_RX_BW_MANT_16 | 0x05)
291#define RADIOLIB_SX127X_RX_BW_20_8 (RADIOLIB_SX127X_RX_BW_MANT_24 | 0x04)
292#define RADIOLIB_SX127X_RX_BW_25_0 (RADIOLIB_SX127X_RX_BW_MANT_20 | 0x04)
293#define RADIOLIB_SX127X_RX_BW_31_3 (RADIOLIB_SX127X_RX_BW_MANT_16 | 0x04)
294#define RADIOLIB_SX127X_RX_BW_41_7 (RADIOLIB_SX127X_RX_BW_MANT_24 | 0x03)
295#define RADIOLIB_SX127X_RX_BW_50_0 (RADIOLIB_SX127X_RX_BW_MANT_20 | 0x03)
296#define RADIOLIB_SX127X_RX_BW_62_5 (RADIOLIB_SX127X_RX_BW_MANT_16 | 0x03)
297#define RADIOLIB_SX127X_RX_BW_83_3 (RADIOLIB_SX127X_RX_BW_MANT_24 | 0x02)
298#define RADIOLIB_SX127X_RX_BW_100 (RADIOLIB_SX127X_RX_BW_MANT_20 | 0x02)
299#define RADIOLIB_SX127X_RX_BW_125 (RADIOLIB_SX127X_RX_BW_MANT_16 | 0x02)
300#define RADIOLIB_SX127X_RX_BW_167 (RADIOLIB_SX127X_RX_BW_MANT_24 | 0x01)
301#define RADIOLIB_SX127X_RX_BW_200 (RADIOLIB_SX127X_RX_BW_MANT_20 | 0x01)
302#define RADIOLIB_SX127X_RX_BW_250 (RADIOLIB_SX127X_RX_BW_MANT_16 | 0x01)
305#define RADIOLIB_SX127X_RX_BW_MANT_AFC 0b00001000
306#define RADIOLIB_SX127X_RX_BW_EXP_AFC 0b00000011
309#define RADIOLIB_SX127X_BIT_SYNC_OFF 0b00000000
310#define RADIOLIB_SX127X_BIT_SYNC_ON 0b00100000
311#define RADIOLIB_SX127X_OOK_THRESH_FIXED 0b00000000
312#define RADIOLIB_SX127X_OOK_THRESH_PEAK 0b00001000
313#define RADIOLIB_SX127X_OOK_THRESH_AVERAGE 0b00010000
314#define RADIOLIB_SX127X_OOK_PEAK_THRESH_STEP_0_5_DB 0b00000000
315#define RADIOLIB_SX127X_OOK_PEAK_THRESH_STEP_1_0_DB 0b00000001
316#define RADIOLIB_SX127X_OOK_PEAK_THRESH_STEP_1_5_DB 0b00000010
317#define RADIOLIB_SX127X_OOK_PEAK_THRESH_STEP_2_0_DB 0b00000011
318#define RADIOLIB_SX127X_OOK_PEAK_THRESH_STEP_3_0_DB 0b00000100
319#define RADIOLIB_SX127X_OOK_PEAK_THRESH_STEP_4_0_DB 0b00000101
320#define RADIOLIB_SX127X_OOK_PEAK_THRESH_STEP_5_0_DB 0b00000110
321#define RADIOLIB_SX127X_OOK_PEAK_THRESH_STEP_6_0_DB 0b00000111
324#define RADIOLIB_SX127X_OOK_FIXED_THRESHOLD 0x0C
327#define RADIOLIB_SX127X_OOK_PEAK_THRESH_DEC_1_1_CHIP 0b00000000
328#define RADIOLIB_SX127X_OOK_PEAK_THRESH_DEC_1_2_CHIP 0b00100000
329#define RADIOLIB_SX127X_OOK_PEAK_THRESH_DEC_1_4_CHIP 0b01000000
330#define RADIOLIB_SX127X_OOK_PEAK_THRESH_DEC_1_8_CHIP 0b01100000
331#define RADIOLIB_SX127X_OOK_PEAK_THRESH_DEC_2_1_CHIP 0b10000000
332#define RADIOLIB_SX127X_OOK_PEAK_THRESH_DEC_4_1_CHIP 0b10100000
333#define RADIOLIB_SX127X_OOK_PEAK_THRESH_DEC_8_1_CHIP 0b11000000
334#define RADIOLIB_SX127X_OOK_PEAK_THRESH_DEC_16_1_CHIP 0b11100000
335#define RADIOLIB_SX127X_OOK_AVERAGE_OFFSET_0_DB 0b00000000
336#define RADIOLIB_SX127X_OOK_AVERAGE_OFFSET_2_DB 0b00000100
337#define RADIOLIB_SX127X_OOK_AVERAGE_OFFSET_4_DB 0b00001000
338#define RADIOLIB_SX127X_OOK_AVERAGE_OFFSET_6_DB 0b00001100
339#define RADIOLIB_SX127X_OOK_AVG_THRESH_FILT_32_PI 0b00000000
340#define RADIOLIB_SX127X_OOK_AVG_THRESH_FILT_8_PI 0b00000001
341#define RADIOLIB_SX127X_OOK_AVG_THRESH_FILT_4_PI 0b00000010
342#define RADIOLIB_SX127X_OOK_AVG_THRESH_FILT_2_PI 0b00000011
345#define RADIOLIB_SX127X_AGC_START 0b00010000
346#define RADIOLIB_SX127X_AFC_CLEAR 0b00000010
347#define RADIOLIB_SX127X_AFC_AUTO_CLEAR_OFF 0b00000000
348#define RADIOLIB_SX127X_AFC_AUTO_CLEAR_ON 0b00000001
351#define RADIOLIB_SX127X_PREAMBLE_DETECTOR_OFF 0b00000000
352#define RADIOLIB_SX127X_PREAMBLE_DETECTOR_ON 0b10000000
353#define RADIOLIB_SX127X_PREAMBLE_DETECTOR_1_BYTE 0b00000000
354#define RADIOLIB_SX127X_PREAMBLE_DETECTOR_2_BYTE 0b00100000
355#define RADIOLIB_SX127X_PREAMBLE_DETECTOR_3_BYTE 0b01000000
356#define RADIOLIB_SX127X_PREAMBLE_DETECTOR_TOL 0x0A
359#define RADIOLIB_SX127X_TIMEOUT_RX_RSSI_OFF 0x00
362#define RADIOLIB_SX127X_TIMEOUT_RX_PREAMBLE_OFF 0x00
365#define RADIOLIB_SX127X_TIMEOUT_SIGNAL_SYNC_OFF 0x00
368#define RADIOLIB_SX127X_RC_CAL_START 0b00000000
369#define RADIOLIB_SX127X_CLK_OUT_FXOSC 0b00000000
370#define RADIOLIB_SX127X_CLK_OUT_FXOSC_2 0b00000001
371#define RADIOLIB_SX127X_CLK_OUT_FXOSC_4 0b00000010
372#define RADIOLIB_SX127X_CLK_OUT_FXOSC_8 0b00000011
373#define RADIOLIB_SX127X_CLK_OUT_FXOSC_16 0b00000100
374#define RADIOLIB_SX127X_CLK_OUT_FXOSC_32 0b00000101
375#define RADIOLIB_SX127X_CLK_OUT_RC 0b00000110
376#define RADIOLIB_SX127X_CLK_OUT_OFF 0b00000111
379#define RADIOLIB_SX127X_PREAMBLE_SIZE_MSB 0x00
380#define RADIOLIB_SX127X_PREAMBLE_SIZE_LSB 0x03
383#define RADIOLIB_SX127X_AUTO_RESTART_RX_MODE_OFF 0b00000000
384#define RADIOLIB_SX127X_AUTO_RESTART_RX_MODE_NO_PLL 0b01000000
385#define RADIOLIB_SX127X_AUTO_RESTART_RX_MODE_PLL 0b10000000
386#define RADIOLIB_SX127X_PREAMBLE_POLARITY_AA 0b00000000
387#define RADIOLIB_SX127X_PREAMBLE_POLARITY_55 0b00100000
388#define RADIOLIB_SX127X_SYNC_OFF 0b00000000
389#define RADIOLIB_SX127X_SYNC_ON 0b00010000
390#define RADIOLIB_SX127X_SYNC_SIZE 0x03
393#define RADIOLIB_SX127X_SYNC_VALUE_1 0x01
394#define RADIOLIB_SX127X_SYNC_VALUE_2 0x01
395#define RADIOLIB_SX127X_SYNC_VALUE_3 0x01
396#define RADIOLIB_SX127X_SYNC_VALUE_4 0x01
397#define RADIOLIB_SX127X_SYNC_VALUE_5 0x01
398#define RADIOLIB_SX127X_SYNC_VALUE_6 0x01
399#define RADIOLIB_SX127X_SYNC_VALUE_7 0x01
400#define RADIOLIB_SX127X_SYNC_VALUE_8 0x01
403#define RADIOLIB_SX127X_PACKET_FIXED 0b00000000
404#define RADIOLIB_SX127X_PACKET_VARIABLE 0b10000000
405#define RADIOLIB_SX127X_DC_FREE_NONE 0b00000000
406#define RADIOLIB_SX127X_DC_FREE_MANCHESTER 0b00100000
407#define RADIOLIB_SX127X_DC_FREE_WHITENING 0b01000000
408#define RADIOLIB_SX127X_CRC_OFF 0b00000000
409#define RADIOLIB_SX127X_CRC_ON 0b00010000
410#define RADIOLIB_SX127X_CRC_AUTOCLEAR_OFF 0b00001000
411#define RADIOLIB_SX127X_CRC_AUTOCLEAR_ON 0b00000000
412#define RADIOLIB_SX127X_ADDRESS_FILTERING_OFF 0b00000000
413#define RADIOLIB_SX127X_ADDRESS_FILTERING_NODE 0b00000010
414#define RADIOLIB_SX127X_ADDRESS_FILTERING_NODE_BROADCAST 0b00000100
415#define RADIOLIB_SX127X_CRC_WHITENING_TYPE_CCITT 0b00000000
416#define RADIOLIB_SX127X_CRC_WHITENING_TYPE_IBM 0b00000001
419#define RADIOLIB_SX127X_DATA_MODE_PACKET 0b01000000
420#define RADIOLIB_SX127X_DATA_MODE_CONTINUOUS 0b00000000
421#define RADIOLIB_SX127X_IO_HOME_OFF 0b00000000
422#define RADIOLIB_SX127X_IO_HOME_ON 0b00100000
425#define RADIOLIB_SX127X_TX_START_FIFO_LEVEL 0b00000000
426#define RADIOLIB_SX127X_TX_START_FIFO_NOT_EMPTY 0b10000000
427#define RADIOLIB_SX127X_FIFO_THRESH 0x1F
430#define RADIOLIB_SX127X_SEQUENCER_START 0b10000000
431#define RADIOLIB_SX127X_SEQUENCER_STOP 0b01000000
432#define RADIOLIB_SX127X_IDLE_MODE_STANDBY 0b00000000
433#define RADIOLIB_SX127X_IDLE_MODE_SLEEP 0b00100000
434#define RADIOLIB_SX127X_FROM_START_LP_SELECTION 0b00000000
435#define RADIOLIB_SX127X_FROM_START_RECEIVE 0b00001000
436#define RADIOLIB_SX127X_FROM_START_TRANSMIT 0b00010000
437#define RADIOLIB_SX127X_FROM_START_TRANSMIT_FIFO_LEVEL 0b00011000
438#define RADIOLIB_SX127X_LP_SELECTION_SEQ_OFF 0b00000000
439#define RADIOLIB_SX127X_LP_SELECTION_IDLE 0b00000100
440#define RADIOLIB_SX127X_FROM_IDLE_TRANSMIT 0b00000000
441#define RADIOLIB_SX127X_FROM_IDLE_RECEIVE 0b00000010
442#define RADIOLIB_SX127X_FROM_TRANSMIT_LP_SELECTION 0b00000000
443#define RADIOLIB_SX127X_FROM_TRANSMIT_RECEIVE 0b00000001
446#define RADIOLIB_SX127X_FROM_RECEIVE_PACKET_RECEIVED_PAYLOAD 0b00100000
447#define RADIOLIB_SX127X_FROM_RECEIVE_LP_SELECTION 0b01000000
448#define RADIOLIB_SX127X_FROM_RECEIVE_PACKET_RECEIVED_CRC_OK 0b01100000
449#define RADIOLIB_SX127X_FROM_RECEIVE_SEQ_OFF_RSSI 0b10000000
450#define RADIOLIB_SX127X_FROM_RECEIVE_SEQ_OFF_SYNC_ADDR 0b10100000
451#define RADIOLIB_SX127X_FROM_RECEIVE_SEQ_OFF_PREAMBLE_DETECT 0b11000000
452#define RADIOLIB_SX127X_FROM_RX_TIMEOUT_RECEIVE 0b00000000
453#define RADIOLIB_SX127X_FROM_RX_TIMEOUT_TRANSMIT 0b00001000
454#define RADIOLIB_SX127X_FROM_RX_TIMEOUT_LP_SELECTION 0b00010000
455#define RADIOLIB_SX127X_FROM_RX_TIMEOUT_SEQ_OFF 0b00011000
456#define RADIOLIB_SX127X_FROM_PACKET_RECEIVED_SEQ_OFF 0b00000000
457#define RADIOLIB_SX127X_FROM_PACKET_RECEIVED_TRANSMIT 0b00000001
458#define RADIOLIB_SX127X_FROM_PACKET_RECEIVED_LP_SELECTION 0b00000010
459#define RADIOLIB_SX127X_FROM_PACKET_RECEIVED_RECEIVE_FS 0b00000011
460#define RADIOLIB_SX127X_FROM_PACKET_RECEIVED_RECEIVE 0b00000100
463#define RADIOLIB_SX127X_TIMER1_OFF 0b00000000
464#define RADIOLIB_SX127X_TIMER1_RESOLUTION_64_US 0b00000100
465#define RADIOLIB_SX127X_TIMER1_RESOLUTION_4_1_MS 0b00001000
466#define RADIOLIB_SX127X_TIMER1_RESOLUTION_262_MS 0b00001100
467#define RADIOLIB_SX127X_TIMER2_OFF 0b00000000
468#define RADIOLIB_SX127X_TIMER2_RESOLUTION_64_US 0b00000001
469#define RADIOLIB_SX127X_TIMER2_RESOLUTION_4_1_MS 0b00000010
470#define RADIOLIB_SX127X_TIMER2_RESOLUTION_262_MS 0b00000011
473#define RADIOLIB_SX127X_TIMER1_COEFFICIENT 0xF5
476#define RADIOLIB_SX127X_TIMER2_COEFFICIENT 0x20
479#define RADIOLIB_SX127X_AUTO_IMAGE_CAL_OFF 0b00000000
480#define RADIOLIB_SX127X_AUTO_IMAGE_CAL_ON 0b10000000
481#define RADIOLIB_SX127X_IMAGE_CAL_START 0b01000000
482#define RADIOLIB_SX127X_IMAGE_CAL_RUNNING 0b00100000
483#define RADIOLIB_SX127X_IMAGE_CAL_COMPLETE 0b00000000
484#define RADIOLIB_SX127X_TEMP_CHANGED 0b00001000
485#define RADIOLIB_SX127X_TEMP_THRESHOLD_5_DEG_C 0b00000000
486#define RADIOLIB_SX127X_TEMP_THRESHOLD_10_DEG_C 0b00000010
487#define RADIOLIB_SX127X_TEMP_THRESHOLD_15_DEG_C 0b00000100
488#define RADIOLIB_SX127X_TEMP_THRESHOLD_20_DEG_C 0b00000110
489#define RADIOLIB_SX127X_TEMP_MONITOR_ON 0b00000000
490#define RADIOLIB_SX127X_TEMP_MONITOR_OFF 0b00000001
493#define RADIOLIB_SX127X_LOW_BAT_OFF 0b00000000
494#define RADIOLIB_SX127X_LOW_BAT_ON 0b00001000
495#define RADIOLIB_SX127X_LOW_BAT_THRESHOLD_1_695_V 0b00000000
496#define RADIOLIB_SX127X_LOW_BAT_THRESHOLD_1_764_V 0b00000001
497#define RADIOLIB_SX127X_LOW_BAT_THRESHOLD_1_835_V 0b00000010
498#define RADIOLIB_SX127X_LOW_BAT_THRESHOLD_1_905_V 0b00000011
499#define RADIOLIB_SX127X_LOW_BAT_THRESHOLD_1_976_V 0b00000100
500#define RADIOLIB_SX127X_LOW_BAT_THRESHOLD_2_045_V 0b00000101
501#define RADIOLIB_SX127X_LOW_BAT_THRESHOLD_2_116_V 0b00000110
502#define RADIOLIB_SX127X_LOW_BAT_THRESHOLD_2_185_V 0b00000111
505#define RADIOLIB_SX127X_FLAG_MODE_READY 0b10000000
506#define RADIOLIB_SX127X_FLAG_RX_READY 0b01000000
507#define RADIOLIB_SX127X_FLAG_TX_READY 0b00100000
508#define RADIOLIB_SX127X_FLAG_PLL_LOCK 0b00010000
509#define RADIOLIB_SX127X_FLAG_RSSI 0b00001000
510#define RADIOLIB_SX127X_FLAG_TIMEOUT 0b00000100
511#define RADIOLIB_SX127X_FLAG_PREAMBLE_DETECT 0b00000010
512#define RADIOLIB_SX127X_FLAG_SYNC_ADDRESS_MATCH 0b00000001
515#define RADIOLIB_SX127X_FLAG_FIFO_FULL 0b10000000
516#define RADIOLIB_SX127X_FLAG_FIFO_EMPTY 0b01000000
517#define RADIOLIB_SX127X_FLAG_FIFO_LEVEL 0b00100000
518#define RADIOLIB_SX127X_FLAG_FIFO_OVERRUN 0b00010000
519#define RADIOLIB_SX127X_FLAG_PACKET_SENT 0b00001000
520#define RADIOLIB_SX127X_FLAG_PAYLOAD_READY 0b00000100
521#define RADIOLIB_SX127X_FLAG_CRC_OK 0b00000010
522#define RADIOLIB_SX127X_FLAG_LOW_BAT 0b00000001
523#define RADIOLIB_SX127X_FLAGS_ALL 0xFFFF
526#define RADIOLIB_SX127X_DIO0_LORA_RX_DONE 0b00000000
527#define RADIOLIB_SX127X_DIO0_LORA_TX_DONE 0b01000000
528#define RADIOLIB_SX127X_DIO0_LORA_CAD_DONE 0b10000000
529#define RADIOLIB_SX127X_DIO0_CONT_MODE_READY 0b11000000
530#define RADIOLIB_SX127X_DIO0_CONT_SYNC_ADDRESS 0b00000000
531#define RADIOLIB_SX127X_DIO0_CONT_RSSI_PREAMBLE_DETECT 0b01000000
532#define RADIOLIB_SX127X_DIO0_CONT_RX_READY 0b10000000
533#define RADIOLIB_SX127X_DIO0_CONT_TX_READY 0b00000000
534#define RADIOLIB_SX127X_DIO0_PACK_PAYLOAD_READY 0b00000000
535#define RADIOLIB_SX127X_DIO0_PACK_PACKET_SENT 0b00000000
536#define RADIOLIB_SX127X_DIO0_PACK_CRC_OK 0b01000000
537#define RADIOLIB_SX127X_DIO0_PACK_TEMP_CHANGE_LOW_BAT 0b11000000
538#define RADIOLIB_SX127X_DIO1_LORA_RX_TIMEOUT 0b00000000
539#define RADIOLIB_SX127X_DIO1_LORA_FHSS_CHANGE_CHANNEL 0b00010000
540#define RADIOLIB_SX127X_DIO1_LORA_CAD_DETECTED 0b00100000
541#define RADIOLIB_SX127X_DIO1_CONT_DCLK 0b00000000
542#define RADIOLIB_SX127X_DIO1_CONT_RSSI_PREAMBLE_DETECT 0b00010000
543#define RADIOLIB_SX127X_DIO1_PACK_FIFO_LEVEL 0b00000000
544#define RADIOLIB_SX127X_DIO1_PACK_FIFO_EMPTY 0b00010000
545#define RADIOLIB_SX127X_DIO1_PACK_FIFO_FULL 0b00100000
546#define RADIOLIB_SX127X_DIO2_LORA_FHSS_CHANGE_CHANNEL 0b00000000
547#define RADIOLIB_SX127X_DIO2_CONT_DATA 0b00000000
548#define RADIOLIB_SX127X_DIO2_PACK_FIFO_FULL 0b00000000
549#define RADIOLIB_SX127X_DIO2_PACK_RX_READY 0b00000100
550#define RADIOLIB_SX127X_DIO2_PACK_TIMEOUT 0b00001000
551#define RADIOLIB_SX127X_DIO2_PACK_SYNC_ADDRESS 0b00011000
552#define RADIOLIB_SX127X_DIO3_LORA_CAD_DONE 0b00000000
553#define RADIOLIB_SX127X_DIO3_LORA_VALID_HEADER 0b00000001
554#define RADIOLIB_SX127X_DIO3_LORA_PAYLOAD_CRC_ERROR 0b00000010
555#define RADIOLIB_SX127X_DIO3_CONT_TIMEOUT 0b00000000
556#define RADIOLIB_SX127X_DIO3_CONT_RSSI_PREAMBLE_DETECT 0b00000001
557#define RADIOLIB_SX127X_DIO3_CONT_TEMP_CHANGE_LOW_BAT 0b00000011
558#define RADIOLIB_SX127X_DIO3_PACK_FIFO_EMPTY 0b00000000
559#define RADIOLIB_SX127X_DIO3_PACK_TX_READY 0b00000001
562#define RADIOLIB_SX127X_DIO4_LORA_CAD_DETECTED 0b10000000
563#define RADIOLIB_SX127X_DIO4_LORA_PLL_LOCK 0b01000000
564#define RADIOLIB_SX127X_DIO4_CONT_TEMP_CHANGE_LOW_BAT 0b00000000
565#define RADIOLIB_SX127X_DIO4_CONT_PLL_LOCK 0b01000000
566#define RADIOLIB_SX127X_DIO4_CONT_TIMEOUT 0b10000000
567#define RADIOLIB_SX127X_DIO4_CONT_MODE_READY 0b11000000
568#define RADIOLIB_SX127X_DIO4_PACK_TEMP_CHANGE_LOW_BAT 0b00000000
569#define RADIOLIB_SX127X_DIO4_PACK_PLL_LOCK 0b01000000
570#define RADIOLIB_SX127X_DIO4_PACK_TIMEOUT 0b10000000
571#define RADIOLIB_SX127X_DIO4_PACK_RSSI_PREAMBLE_DETECT 0b11000000
572#define RADIOLIB_SX127X_DIO5_LORA_MODE_READY 0b00000000
573#define RADIOLIB_SX127X_DIO5_LORA_CLK_OUT 0b00010000
574#define RADIOLIB_SX127X_DIO5_CONT_CLK_OUT 0b00000000
575#define RADIOLIB_SX127X_DIO5_CONT_PLL_LOCK 0b00010000
576#define RADIOLIB_SX127X_DIO5_CONT_RSSI_PREAMBLE_DETECT 0b00100000
577#define RADIOLIB_SX127X_DIO5_CONT_MODE_READY 0b00110000
578#define RADIOLIB_SX127X_DIO5_PACK_CLK_OUT 0b00000000
579#define RADIOLIB_SX127X_DIO5_PACK_PLL_LOCK 0b00010000
580#define RADIOLIB_SX127X_DIO5_PACK_DATA 0b00100000
581#define RADIOLIB_SX127X_DIO5_PACK_MODE_READY 0b00110000
582#define RADIOLIB_SX127X_DIO_MAP_PREAMBLE_DETECT 0b00000001
583#define RADIOLIB_SX127X_DIO_MAP_RSSI 0b00000000
586#define RADIOLIB_SX127X_FAST_HOP_OFF 0b00000000
587#define RADIOLIB_SX127X_FAST_HOP_ON 0b10000000
590#define RADIOLIB_SX127X_TCXO_INPUT_EXTERNAL 0b00000000
591#define RADIOLIB_SX127X_TCXO_INPUT_EXTERNAL_CLIPPED 0b00010000
594#define RADIOLIB_SX127X_PLL_BANDWIDTH_75_KHZ 0b00000000
595#define RADIOLIB_SX127X_PLL_BANDWIDTH_150_KHZ 0b01000000
596#define RADIOLIB_SX127X_PLL_BANDWIDTH_225_KHZ 0b10000000
597#define RADIOLIB_SX127X_PLL_BANDWIDTH_300_KHZ 0b11000000
644 int16_t
begin(
const uint8_t* chipVersions, uint8_t numVersions, uint8_t syncWord, uint16_t preambleLength);
649 virtual void reset();
660 int16_t
beginFSK(
const uint8_t* chipVersions, uint8_t numVersions,
float freqDev,
float rxBw, uint16_t preambleLength);
670 int16_t
transmit(
const uint8_t* data,
size_t len, uint8_t addr = 0)
override;
701 int16_t
sleep()
override;
714 int16_t
standby(uint8_t mode)
override;
833 bool fifoAdd(uint8_t* data,
int totalLen,
int* remLen);
842 bool fifoGet(
volatile uint8_t* data,
int totalLen,
volatile int* rcvLen);
865 int16_t
readData(uint8_t* data,
size_t len)
override;
969 int16_t
setAFC(
bool isEnabled);
984 int16_t
setSyncWord(uint8_t* syncWord,
size_t len)
override;
1011 int16_t
setOOK(
bool enable);
1153 int16_t
setRSSIConfig(uint8_t smoothingSamples, int8_t offset = 0);
1207 int16_t
invertIQ(
bool enable)
override;
1214 int16_t
getModem(ModemType_t* modem)
override;
1222 #if !RADIOLIB_EXCLUDE_DIRECT_RECEIVE
1233 void readBit(uint32_t pin)
override;
1292#if !RADIOLIB_GODMODE && !RADIOLIB_LOW_LEVEL
1295 Module* getMod()
override;
1297#if !RADIOLIB_GODMODE
1300 float frequency = 0;
1301 float bandwidth = 125;
1302 uint8_t spreadingFactor = 9;
1303 size_t packetLength = 0;
1304 uint8_t codingRate = 0;
1305 bool crcEnabled =
false;
1306 bool ookEnabled =
false;
1307 bool implicitHdr =
false;
1308 bool ldroAuto =
true;
1309 bool ldroEnabled =
false;
1311 virtual int16_t configFSK();
1312 int16_t getActiveModem();
1313 int16_t setFrequencyRaw(
float newFreq);
1314 int16_t setBitRateCommon(
float br, uint8_t fracRegAddr);
1315 float getRSSICommon(
bool packet,
bool skipReceive, int16_t offset);
1316 int16_t setHeaderType(uint8_t headerType, uint8_t bitIndex,
size_t len = 0xFF);
1318#if !RADIOLIB_GODMODE
1323 float bitRate = 0, frequencyDev = 0;
1325 bool packetLengthQueried =
false;
1326 uint8_t packetLengthConfig = RADIOLIB_SX127X_PACKET_VARIABLE;
1327 uint8_t rxMode = RADIOLIB_SX127X_RXCONTINUOUS;
1330 int16_t directMode();
1331 int16_t setPacketMode(uint8_t mode, uint8_t len);
1332 bool findChip(
const uint8_t* vers, uint8_t num);
1333 int16_t setMode(uint8_t mode);
1334 int16_t setActiveModem(uint8_t modem);
1335 void clearFIFO(
size_t count);
1336 int16_t findRxBw(
float rxBw,
const uint8_t* lut,
size_t lutSize,
float rxBwMax, uint8_t* val);
1337 int16_t setRxBw(
float rxBw,
bool afc);
1339 virtual void errataFix(
bool rx);
Implements all common low-level methods to control the wireless module. Every module class contains o...
Definition Module.h:69
static const size_t RFSWITCH_MAX_PINS
The maximum number of pins supported by the RF switch code. Note: It is not recommended to use this c...
Definition Module.h:78
Provides common interface for protocols that run on LoRa/FSK modules, such as RTTY or LoRaWAN....
Definition PhysicalLayer.h:390
virtual int16_t startReceive()
Sets module to received mode using its default configuration.
Definition PhysicalLayer.cpp:131
virtual int16_t readData(uint8_t *data, size_t len)
Reads data that was received after calling startReceive method.
Definition PhysicalLayer.cpp:225
int16_t transmit(const char *str, uint8_t addr=0)
C-string transmit method.
Definition PhysicalLayer.cpp:53
int16_t startTransmit(const char *str, uint8_t addr=0)
Interrupt-driven Arduino String transmit method. Unlike the standard transmit method,...
Definition PhysicalLayer.cpp:156
virtual int16_t receive(uint8_t *data, size_t len, RadioLibTime_t timeout=0)
Binary receive method. Must be implemented in module class.
Definition PhysicalLayer.cpp:111
Base class for SX127x series. All derived classes for SX127x (e.g. SX1278 or SX1272) inherit from thi...
Definition SX127x.h:604
int16_t packetMode()
Disables direct mode and enables packet mode, allowing the module to receive packets....
Definition SX127x.cpp:374
void clearChannelScanAction() override
Clears interrupt service routine to call when a channel scan is finished.
Definition SX127x.cpp:429
void readBit(uint32_t pin) override
Function to read and process data bit in direct reception mode.
Definition SX127x.cpp:1919
void clearFifoFullAction()
Clears interrupt service routine to call when FIFO is full.
Definition SX127x.cpp:455
int16_t setDIOMapping(uint32_t pin, uint32_t value)
Configure DIO pin mapping to get a given signal on a DIO pin (if available).
Definition SX127x.cpp:1945
int16_t scanChannel() override
Performs scan for valid LoRa preamble in the current channel.
Definition SX127x.cpp:258
virtual void reset()
Reset method. Will reset the chip to the default state using RST pin. Should be implemented in derive...
Definition SX127x.cpp:254
int16_t setOokFixedOrFloorThreshold(uint8_t value)
Fixed threshold for the Data Slicer in OOK mode or floor threshold for the Data Slicer in OOK when Pe...
Definition SX127x.cpp:1054
int16_t enableBitSync()
Enable Bit synchronizer.
Definition SX127x.cpp:1078
int16_t variablePacketLengthMode(uint8_t maxLen=RADIOLIB_SX127X_MAX_PACKET_LENGTH_FSK)
Set modem in variable packet length mode. Available in FSK mode only.
Definition SX127x.cpp:1173
int16_t sleep() override
Sets the LoRa module to sleep to save power. Module will not be able to transmit or receive any data ...
Definition SX127x.cpp:282
void setFifoFullAction(void(*func)(void))
Set interrupt service routine function to call when FIFO is full.
Definition SX127x.cpp:446
uint32_t getIrqFlags() override
Read currently active IRQ flags.
Definition SX127x.cpp:1288
bool fifoGet(volatile uint8_t *data, int totalLen, volatile int *rcvLen)
Set interrupt service routine function to call when FIFO is sufficiently full to read.
Definition SX127x.cpp:488
int16_t setRxBandwidth(float rxBw)
Sets FSK receiver bandwidth. Allowed values range from 2.6 to 250 kHz. Only available in FSK mode.
Definition SX127x.cpp:860
uint8_t getModemStatus()
Reads modem status. Only available in LoRa mode.
Definition SX127x.cpp:1488
void clearPacketSentAction() override
Clears interrupt service routine to call when a packet is sent.
Definition SX127x.cpp:421
int16_t getModem(ModemType_t *modem) override
Get modem currently in use by the radio.
Definition SX127x.cpp:1734
void setPacketSentAction(void(*func)(void)) override
Sets interrupt service routine to call when a packet is sent.
Definition SX127x.cpp:417
int16_t invertIQ(bool enable) override
Enable/disable inversion of the I and Q signals.
Definition SX127x.cpp:1712
bool fifoAdd(uint8_t *data, int totalLen, int *remLen)
Set interrupt service routine function to call when FIFO is empty.
Definition SX127x.cpp:465
int16_t stageMode(RadioModeType_t mode, RadioModeConfig_t *cfg) override
Stage mode of the radio to be launched later using launchMode.
Definition SX127x.cpp:1750
int16_t setCurrentLimit(uint8_t currentLimit)
Sets current limit for over current protection at transmitter amplifier. Allowed values range from 45...
Definition SX127x.cpp:641
void clearFHSSInt(void)
Clear the FHSS interrupt.
Definition SX127x.cpp:1936
int16_t setAFC(bool isEnabled)
Enables or disables FSK automatic frequency correction(AFC)
Definition SX127x.cpp:940
int16_t setFrequencyDeviation(float freqDev) override
Sets FSK frequency deviation from carrier frequency. Allowed values depend on bit rate setting and mu...
Definition SX127x.cpp:829
int16_t getLoRaRxHeaderInfo(uint8_t *cr, bool *hasCRC)
Get LoRa header information from last received packet. Only valid in explicit header mode.
Definition SX127x.cpp:1155
size_t getPacketLength(bool update=true) override
Query modem for the packet length of received payload.
Definition SX127x.cpp:1127
float getSNR() override
Gets signal-to-noise ratio of the latest received packet. Only available in LoRa mode.
Definition SX127x.cpp:782
int16_t setOokPeakThresholdStep(uint8_t value)
Size of each decrement of the RSSI threshold in the OOK demodulator.
Definition SX127x.cpp:1070
float getAFCError()
Gets current AFC error.
Definition SX127x.cpp:766
int16_t setRSSIThreshold(float dbm)
Sets the RSSI value above which the RSSI interrupt is signaled.
Definition SX127x.cpp:1419
int16_t launchMode() override
Launch previously staged mode.
Definition SX127x.cpp:1891
int16_t receive(uint8_t *data, size_t len, RadioLibTime_t timeout=0) override
Binary receive method. Will attempt to receive arbitrary binary data up to 255 bytes long using LoRa ...
Definition SX127x.cpp:207
uint8_t getFHSSChannel(void)
Gets the FHSS channel in use.
Definition SX127x.cpp:1932
int16_t invertPreamble(bool enable)
Invert FSK preamble polarity. The default (non-inverted) is 0x55, the inverted is 0xAA.
Definition SX127x.cpp:694
int16_t setAFCBandwidth(float afcBw)
Sets FSK automatic frequency correction bandwidth. Allowed values range from 2.6 to 250 kHz....
Definition SX127x.cpp:864
float getNumSymbols(size_t len, DataRate_t dr, PacketConfig_t pc)
Convert from bytes to LoRa symbols.
Definition SX127x.cpp:1177
void clearPacketReceivedAction() override
Clears interrupt service routine to call when a packet is received.
Definition SX127x.cpp:413
int16_t startChannelScan() override
Interrupt-driven channel activity detection method. DIO1 will be activated when LoRa preamble is dete...
Definition SX127x.cpp:588
int16_t fixedPacketLengthMode(uint8_t len=RADIOLIB_SX127X_MAX_PACKET_LENGTH_FSK)
Set modem in fixed packet length mode. Available in FSK mode only.
Definition SX127x.cpp:1169
void setFifoEmptyAction(void(*func)(void))
Set interrupt service routine function to call when FIFO is empty.
Definition SX127x.cpp:433
void clearDio0Action()
Clears interrupt service routine to call when DIO0 activates.
Definition SX127x.cpp:391
int16_t transmit(const uint8_t *data, size_t len, uint8_t addr=0) override
Binary transmit method. Will transmit arbitrary binary data up to 255 bytes long using LoRa or up to ...
Definition SX127x.cpp:167
int16_t standby() override
Sets the LoRa module to standby.
Definition SX127x.cpp:295
void setDio1Action(void(*func)(void), uint32_t dir)
Set interrupt service routine function to call when DIO1 activates.
Definition SX127x.cpp:395
int16_t setDIOPreambleDetect(bool usePreambleDetect)
Configure DIO mapping to use RSSI or Preamble Detect for pins that support it.
Definition SX127x.cpp:1955
void setFifoThreshold(uint8_t threshold)
Set FIFO threshold level. Be aware that threshold is also set in setFifoFullAction method....
Definition SX127x.cpp:442
int16_t begin(const uint8_t *chipVersions, uint8_t numVersions, uint8_t syncWord, uint16_t preambleLength)
Initialization method. Will be called with appropriate parameters when calling initialization method ...
Definition SX127x.cpp:11
int16_t setFHSSHoppingPeriod(uint8_t freqHoppingPeriod)
Sets the hopping period and enables FHSS.
Definition SX127x.cpp:1924
int16_t finishTransmit() override
Clean up after transmission is done.
Definition SX127x.cpp:510
int16_t disableBitSync()
Disable Bit synchronizer (not allowed in Packet mode).
Definition SX127x.cpp:1082
int16_t getChannelScanResult() override
Read the channel scan result.
Definition SX127x.cpp:621
int16_t setPreambleLength(size_t preambleLength) override
Sets LoRa or FSK preamble length. Allowed values range from 6 to 65535 in LoRa mode or 0 to 65535 in ...
Definition SX127x.cpp:665
int16_t setOokThresholdType(uint8_t type)
Selects the type of threshold in the OOK data slicer.
Definition SX127x.cpp:1046
void setRfSwitchPins(uint32_t rxEn, uint32_t txEn)
Some modules contain external RF switch controlled by pins. This function gives RadioLib control over...
Definition SX127x.cpp:1498
int8_t getTempRaw()
Reads uncalibrated temperature value. This function will change operating mode and should not be call...
Definition SX127x.cpp:1535
uint8_t randomByte() override
Get one truly random byte from RSSI noise.
Definition SX127x.cpp:1506
RadioLibTime_t calculateTimeOnAir(ModemType_t modem, DataRate_t dr, PacketConfig_t pc, size_t len) override
Calculate the expected time-on-air for a given modem, data rate, packet configuration and payload siz...
Definition SX127x.cpp:1197
void clearDio1Action()
Clears interrupt service routine to call when DIO1 activates.
Definition SX127x.cpp:402
int16_t setLowBatteryThreshold(int8_t level, uint32_t pin=RADIOLIB_NC)
Set low battery indicator threshold.
Definition SX127x.cpp:2020
RadioLibTime_t getTimeOnAir(size_t len) override
Get expected time-on-air for a given size of payload.
Definition SX127x.cpp:1219
int16_t clearIrqFlags(uint32_t irq) override
Clear interrupt on a specific IRQ bit (e.g. RxTimeout, CadDone).
Definition SX127x.cpp:1394
int16_t receiveDirect() override
Enables direct reception mode on pins DIO1 (clock) and DIO2 (data). While in direct mode,...
Definition SX127x.cpp:337
void clearFifoEmptyAction()
Clears interrupt service routine to call when FIFO is empty.
Definition SX127x.cpp:438
int16_t beginFSK(const uint8_t *chipVersions, uint8_t numVersions, float freqDev, float rxBw, uint16_t preambleLength)
Initialization method for FSK modem. Will be called with appropriate parameters when calling FSK init...
Definition SX127x.cpp:71
int16_t setOokPeakThresholdDecrement(uint8_t value)
Period of decrement of the RSSI threshold in the OOK demodulator.
Definition SX127x.cpp:1062
int16_t setIrqFlags(uint32_t irq) override
Set interrupt on DIO1 to be sent on a specific IRQ bit (e.g. RxTimeout, CadDone). NOTE: Unlike other ...
Definition SX127x.cpp:1292
int16_t setAFCAGCTrigger(uint8_t trigger)
Controls trigger of AFC and AGC.
Definition SX127x.cpp:950
int16_t setCrcFiltering(bool enable=true)
Enable CRC filtering and generation.
Definition SX127x.cpp:1409
void setRfSwitchTable(const uint32_t(&pins)[Module::RFSWITCH_MAX_PINS], const Module::RfSwitchMode_t table[])
Some modules contain external RF switch controlled by pins. This function gives RadioLib control over...
Definition SX127x.cpp:1502
int16_t setNodeAddress(uint8_t nodeAddr)
Sets FSK node address. Calling this method will enable address filtering. Only available in FSK mode.
Definition SX127x.cpp:1000
int16_t setEncoding(uint8_t encoding) override
Sets transmission encoding. Only available in FSK mode. Allowed values are RADIOLIB_ENCODING_NRZ,...
Definition SX127x.cpp:1454
int16_t startReceive() override
Interrupt-driven receive method with default parameters. Implemented for compatibility with PhysicalL...
Definition SX127x.cpp:383
int16_t setBroadcastAddress(uint8_t broadAddr)
Sets FSK broadcast address. Calling this method will enable address filtering. Only available in FSK ...
Definition SX127x.cpp:1014
int16_t readData(uint8_t *data, size_t len) override
Reads data that was received after calling startReceive method. When the packet length is not known i...
Definition SX127x.cpp:523
void setChannelScanAction(void(*func)(void)) override
Sets interrupt service routine to call when a channel scan is finished.
Definition SX127x.cpp:425
int16_t setSyncWord(uint8_t syncWord)
Sets LoRa sync word. Only available in LoRa mode.
Definition SX127x.cpp:628
uint16_t getIRQFlags()
Reads currently active IRQ flags, can be used to check which event caused an interrupt....
Definition SX127x.cpp:1473
int16_t finishReceive() override
Clean up after reception is done.
Definition SX127x.cpp:579
int16_t setRSSIConfig(uint8_t smoothingSamples, int8_t offset=0)
Sets RSSI measurement configuration in FSK mode.
Definition SX127x.cpp:1425
uint8_t getFHSSHoppingPeriod(void)
Gets FHSS hopping period.
Definition SX127x.cpp:1928
RadioLibTime_t calculateRxTimeout(RadioLibTime_t timeoutUs) override
Calculate the timeout value for this specific module / series (in number of symbols or units of time)
Definition SX127x.cpp:1270
void setPacketReceivedAction(void(*func)(void)) override
Sets interrupt service routine to call when a packet is received.
Definition SX127x.cpp:409
int16_t setOOK(bool enable)
Enables/disables OOK modulation instead of FSK.
Definition SX127x.cpp:1086
void setDirectAction(void(*func)(void)) override
Set interrupt service routine function to call when data bit is received in direct mode.
Definition SX127x.cpp:1915
void setDio0Action(void(*func)(void), uint32_t dir)
Set interrupt service routine function to call when DIO0 activates.
Definition SX127x.cpp:387
int16_t getChipVersion()
Read version SPI register. Should return SX1278_CHIP_VERSION (0x12) or SX1272_CHIP_VERSION (0x22) if ...
Definition SX127x.cpp:1531
int16_t transmitDirect(uint32_t frf=0) override
Enables direct transmission mode on pins DIO1 (clock) and DIO2 (data). While in direct mode,...
Definition SX127x.cpp:308
float getFrequencyError(bool autoCorrect=false)
Gets frequency error of the latest received packet.
Definition SX127x.cpp:713
int16_t disableAddressFiltering()
Disables FSK address filtering.
Definition SX127x.cpp:1028
bool enableOOK
Use OOK modulation instead of FSK.
Definition SX127x.h:632
uint8_t gain
Gain of receiver LNA (low-noise amplifier). Can be set to any integer in range 1 to 6 where 1 is the ...
Definition SX127x.h:626
unsigned long RadioLibTime_t
Type used for durations in RadioLib.
Definition TypeDef.h:679
Description of RF switch pin states for a single mode. See setRfSwitchTable for details.
Definition Module.h:85
Common channel scan configuration structure.
Definition PhysicalLayer.h:165
Common data rate structure.
Definition PhysicalLayer.h:74
Common packet configuration structure.
Definition PhysicalLayer.h:119
Definition PhysicalLayer.h:208