RadioLib
Universal wireless communication library for Arduino
SX127x.h
1 #if !defined(_RADIOLIB_SX127X_H)
2 #define _RADIOLIB_SX127X_H
3 
4 #include "../../TypeDef.h"
5 
6 #if !defined(RADIOLIB_EXCLUDE_SX127X)
7 
8 #include "../../Module.h"
9 
10 #include "../../protocols/PhysicalLayer/PhysicalLayer.h"
11 
12 // SX127x physical layer properties
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.0
17 #define RADIOLIB_SX127X_DIV_EXPONENT 19
18 
19 // SX127x series common LoRa registers
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
66 
67 // SX127x common LoRa modem settings
68 // SX127X_REG_OP_MODE MSB LSB DESCRIPTION
69 #define RADIOLIB_SX127X_FSK_OOK 0b00000000 // 7 7 FSK/OOK mode
70 #define RADIOLIB_SX127X_LORA 0b10000000 // 7 7 LoRa mode
71 #define RADIOLIB_SX127X_ACCESS_SHARED_REG_OFF 0b00000000 // 6 6 access LoRa registers (0x0D:0x3F) in LoRa mode
72 #define RADIOLIB_SX127X_ACCESS_SHARED_REG_ON 0b01000000 // 6 6 access FSK registers (0x0D:0x3F) in LoRa mode
73 #define RADIOLIB_SX127X_SLEEP 0b00000000 // 2 0 sleep
74 #define RADIOLIB_SX127X_STANDBY 0b00000001 // 2 0 standby
75 #define RADIOLIB_SX127X_FSTX 0b00000010 // 2 0 frequency synthesis TX
76 #define RADIOLIB_SX127X_TX 0b00000011 // 2 0 transmit
77 #define RADIOLIB_SX127X_FSRX 0b00000100 // 2 0 frequency synthesis RX
78 #define RADIOLIB_SX127X_RXCONTINUOUS 0b00000101 // 2 0 receive continuous
79 #define RADIOLIB_SX127X_RXSINGLE 0b00000110 // 2 0 receive single
80 #define RADIOLIB_SX127X_CAD 0b00000111 // 2 0 channel activity detection
81 
82 // SX127X_REG_PA_CONFIG
83 #define RADIOLIB_SX127X_PA_SELECT_RFO 0b00000000 // 7 7 RFO pin output, power limited to +14 dBm
84 #define RADIOLIB_SX127X_PA_SELECT_BOOST 0b10000000 // 7 7 PA_BOOST pin output, power limited to +20 dBm
85 #define RADIOLIB_SX127X_OUTPUT_POWER 0b00001111 // 3 0 output power: P_out = 2 + OUTPUT_POWER [dBm] for PA_SELECT_BOOST
86  // P_out = -1 + OUTPUT_POWER [dBm] for PA_SELECT_RFO
87 
88 // SX127X_REG_OCP
89 #define RADIOLIB_SX127X_OCP_OFF 0b00000000 // 5 5 PA overload current protection disabled
90 #define RADIOLIB_SX127X_OCP_ON 0b00100000 // 5 5 PA overload current protection enabled
91 #define RADIOLIB_SX127X_OCP_TRIM 0b00001011 // 4 0 OCP current: I_max(OCP_TRIM = 0b1011) = 100 mA
92 
93 // SX127X_REG_LNA
94 #define RADIOLIB_SX127X_LNA_GAIN_1 0b00100000 // 7 5 LNA gain setting: max gain
95 #define RADIOLIB_SX127X_LNA_GAIN_2 0b01000000 // 7 5 .
96 #define RADIOLIB_SX127X_LNA_GAIN_3 0b01100000 // 7 5 .
97 #define RADIOLIB_SX127X_LNA_GAIN_4 0b10000000 // 7 5 .
98 #define RADIOLIB_SX127X_LNA_GAIN_5 0b10100000 // 7 5 .
99 #define RADIOLIB_SX127X_LNA_GAIN_6 0b11000000 // 7 5 min gain
100 #define RADIOLIB_SX127X_LNA_BOOST_OFF 0b00000000 // 1 0 default LNA current
101 #define RADIOLIB_SX127X_LNA_BOOST_ON 0b00000011 // 1 0 150% LNA current
102 
103 // SX127X_REG_MODEM_CONFIG_2
104 #define RADIOLIB_SX127X_SF_6 0b01100000 // 7 4 spreading factor: 64 chips/bit
105 #define RADIOLIB_SX127X_SF_7 0b01110000 // 7 4 128 chips/bit
106 #define RADIOLIB_SX127X_SF_8 0b10000000 // 7 4 256 chips/bit
107 #define RADIOLIB_SX127X_SF_9 0b10010000 // 7 4 512 chips/bit
108 #define RADIOLIB_SX127X_SF_10 0b10100000 // 7 4 1024 chips/bit
109 #define RADIOLIB_SX127X_SF_11 0b10110000 // 7 4 2048 chips/bit
110 #define RADIOLIB_SX127X_SF_12 0b11000000 // 7 4 4096 chips/bit
111 #define RADIOLIB_SX127X_TX_MODE_SINGLE 0b00000000 // 3 3 single TX
112 #define RADIOLIB_SX127X_TX_MODE_CONT 0b00001000 // 3 3 continuous TX
113 #define RADIOLIB_SX127X_RX_TIMEOUT_MSB 0b00000000 // 1 0
114 
115 // SX127X_REG_SYMB_TIMEOUT_LSB
116 #define RADIOLIB_SX127X_RX_TIMEOUT_LSB 0b01100100 // 7 0 10 bit RX operation timeout
117 
118 // SX127X_REG_PREAMBLE_MSB + REG_PREAMBLE_LSB
119 #define RADIOLIB_SX127X_PREAMBLE_LENGTH_MSB 0b00000000 // 7 0 2 byte preamble length setting: l_P = PREAMBLE_LENGTH + 4.25
120 #define RADIOLIB_SX127X_PREAMBLE_LENGTH_LSB 0b00001000 // 7 0 where l_p = preamble length
121 
122 // SX127X_REG_DETECT_OPTIMIZE
123 #define RADIOLIB_SX127X_DETECT_OPTIMIZE_SF_6 0b00000101 // 2 0 SF6 detection optimization
124 #define RADIOLIB_SX127X_DETECT_OPTIMIZE_SF_7_12 0b00000011 // 2 0 SF7 to SF12 detection optimization
125 
126 // SX127X_REG_INVERT_IQ
127 #define RADIOLIB_SX127X_INVERT_IQ_RXPATH_ON 0b01000000 // 6 6 I and Q signals are inverted
128 #define RADIOLIB_SX127X_INVERT_IQ_RXPATH_OFF 0b00000000 // 6 6 normal mode
129 #define RADIOLIB_SX127X_INVERT_IQ_TXPATH_ON 0b00000001 // 0 0 I and Q signals are inverted
130 #define RADIOLIB_SX127X_INVERT_IQ_TXPATH_OFF 0b00000000 // 0 0 normal mode
131 
132 // SX127X_REG_DETECTION_THRESHOLD
133 #define RADIOLIB_SX127X_DETECTION_THRESHOLD_SF_6 0b00001100 // 7 0 SF6 detection threshold
134 #define RADIOLIB_SX127X_DETECTION_THRESHOLD_SF_7_12 0b00001010 // 7 0 SF7 to SF12 detection threshold
135 
136 // SX127X_REG_PA_DAC
137 #define RADIOLIB_SX127X_PA_BOOST_OFF 0b00000100 // 2 0 PA_BOOST disabled
138 #define RADIOLIB_SX127X_PA_BOOST_ON 0b00000111 // 2 0 +20 dBm on PA_BOOST when OUTPUT_POWER = 0b1111
139 
140 // SX127X_REG_HOP_PERIOD
141 #define RADIOLIB_SX127X_HOP_PERIOD_OFF 0b00000000 // 7 0 number of periods between frequency hops; 0 = disabled
142 #define RADIOLIB_SX127X_HOP_PERIOD_MAX 0b11111111 // 7 0
143 
144 // SX127X_REG_IRQ_FLAGS
145 #define RADIOLIB_SX127X_CLEAR_IRQ_FLAG_RX_TIMEOUT 0b10000000 // 7 7 timeout
146 #define RADIOLIB_SX127X_CLEAR_IRQ_FLAG_RX_DONE 0b01000000 // 6 6 packet reception complete
147 #define RADIOLIB_SX127X_CLEAR_IRQ_FLAG_PAYLOAD_CRC_ERROR 0b00100000 // 5 5 payload CRC error
148 #define RADIOLIB_SX127X_CLEAR_IRQ_FLAG_VALID_HEADER 0b00010000 // 4 4 valid header received
149 #define RADIOLIB_SX127X_CLEAR_IRQ_FLAG_TX_DONE 0b00001000 // 3 3 payload transmission complete
150 #define RADIOLIB_SX127X_CLEAR_IRQ_FLAG_CAD_DONE 0b00000100 // 2 2 CAD complete
151 #define RADIOLIB_SX127X_CLEAR_IRQ_FLAG_FHSS_CHANGE_CHANNEL 0b00000010 // 1 1 FHSS change channel
152 #define RADIOLIB_SX127X_CLEAR_IRQ_FLAG_CAD_DETECTED 0b00000001 // 0 0 valid LoRa signal detected during CAD operation
153 
154 // SX127X_REG_IRQ_FLAGS_MASK
155 #define RADIOLIB_SX127X_MASK_IRQ_FLAG_RX_TIMEOUT 0b01111111 // 7 7 timeout
156 #define RADIOLIB_SX127X_MASK_IRQ_FLAG_RX_DONE 0b10111111 // 6 6 packet reception complete
157 #define RADIOLIB_SX127X_MASK_IRQ_FLAG_PAYLOAD_CRC_ERROR 0b11011111 // 5 5 payload CRC error
158 #define RADIOLIB_SX127X_MASK_IRQ_FLAG_VALID_HEADER 0b11101111 // 4 4 valid header received
159 #define RADIOLIB_SX127X_MASK_IRQ_FLAG_TX_DONE 0b11110111 // 3 3 payload transmission complete
160 #define RADIOLIB_SX127X_MASK_IRQ_FLAG_CAD_DONE 0b11111011 // 2 2 CAD complete
161 #define RADIOLIB_SX127X_MASK_IRQ_FLAG_FHSS_CHANGE_CHANNEL 0b11111101 // 1 1 FHSS change channel
162 #define RADIOLIB_SX127X_MASK_IRQ_FLAG_CAD_DETECTED 0b11111110 // 0 0 valid LoRa signal detected during CAD operation
163 
164 // SX127X_REG_FIFO_TX_BASE_ADDR
165 #define RADIOLIB_SX127X_FIFO_TX_BASE_ADDR_MAX 0b00000000 // 7 0 allocate the entire FIFO buffer for TX only
166 
167 // SX127X_REG_FIFO_RX_BASE_ADDR
168 #define RADIOLIB_SX127X_FIFO_RX_BASE_ADDR_MAX 0b00000000 // 7 0 allocate the entire FIFO buffer for RX only
169 
170 // SX127X_REG_SYNC_WORD
171 #define RADIOLIB_SX127X_SYNC_WORD 0x12 // 7 0 default LoRa sync word
172 #define RADIOLIB_SX127X_SYNC_WORD_LORAWAN 0x34 // 7 0 sync word reserved for LoRaWAN networks
173 
174 // SX127X_REG_INVERT_IQ2
175 #define RADIOLIB_SX127X_IQ2_ENABLE 0x19 // 7 0 enable optimize for inverted IQ
176 #define RADIOLIB_SX127X_IQ2_DISABLE 0x1D // 7 0 reset optimize for inverted IQ
177 
178 // SX127x series common FSK registers
179 // NOTE: FSK register names that are conflicting with LoRa registers are marked with "_FSK" suffix
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
232 
233 // SX127x common FSK modem settings
234 // SX127X_REG_OP_MODE
235 #define RADIOLIB_SX127X_MODULATION_FSK 0b00000000 // 6 5 FSK modulation scheme
236 #define RADIOLIB_SX127X_MODULATION_OOK 0b00100000 // 6 5 OOK modulation scheme
237 #define RADIOLIB_SX127X_RX 0b00000101 // 2 0 receiver mode
238 
239 // SX127X_REG_BITRATE_MSB + SX127X_REG_BITRATE_LSB
240 #define RADIOLIB_SX127X_BITRATE_MSB 0x1A // 7 0 bit rate setting: BitRate = F(XOSC)/(BITRATE + BITRATE_FRAC/16)
241 #define RADIOLIB_SX127X_BITRATE_LSB 0x0B // 7 0 default value: 4.8 kbps
242 
243 // SX127X_REG_FDEV_MSB + SX127X_REG_FDEV_LSB
244 #define RADIOLIB_SX127X_FDEV_MSB 0x00 // 5 0 frequency deviation: Fdev = Fstep * FDEV
245 #define RADIOLIB_SX127X_FDEV_LSB 0x52 // 7 0 default value: 5 kHz
246 
247 // SX127X_REG_RX_CONFIG
248 #define RADIOLIB_SX127X_RESTART_RX_ON_COLLISION_OFF 0b00000000 // 7 7 automatic receiver restart disabled (default)
249 #define RADIOLIB_SX127X_RESTART_RX_ON_COLLISION_ON 0b10000000 // 7 7 automatically restart receiver if it gets saturated or on packet collision
250 #define RADIOLIB_SX127X_RESTART_RX_WITHOUT_PLL_LOCK 0b01000000 // 6 6 manually restart receiver without frequency change
251 #define RADIOLIB_SX127X_RESTART_RX_WITH_PLL_LOCK 0b00100000 // 5 5 manually restart receiver with frequency change
252 #define RADIOLIB_SX127X_AFC_AUTO_OFF 0b00000000 // 4 4 no AFC performed (default)
253 #define RADIOLIB_SX127X_AFC_AUTO_ON 0b00010000 // 4 4 AFC performed at each receiver startup
254 #define RADIOLIB_SX127X_AGC_AUTO_OFF 0b00000000 // 3 3 LNA gain set manually by register
255 #define RADIOLIB_SX127X_AGC_AUTO_ON 0b00001000 // 3 3 LNA gain controlled by AGC
256 #define RADIOLIB_SX127X_RX_TRIGGER_NONE 0b00000000 // 2 0 receiver startup at: none
257 #define RADIOLIB_SX127X_RX_TRIGGER_RSSI_INTERRUPT 0b00000001 // 2 0 RSSI interrupt
258 #define RADIOLIB_SX127X_RX_TRIGGER_PREAMBLE_DETECT 0b00000110 // 2 0 preamble detected
259 #define RADIOLIB_SX127X_RX_TRIGGER_BOTH 0b00000111 // 2 0 RSSI interrupt and preamble detected
260 
261 // SX127X_REG_RSSI_CONFIG
262 #define RADIOLIB_SX127X_RSSI_SMOOTHING_SAMPLES_2 0b00000000 // 2 0 number of samples for RSSI average: 2
263 #define RADIOLIB_SX127X_RSSI_SMOOTHING_SAMPLES_4 0b00000001 // 2 0 4
264 #define RADIOLIB_SX127X_RSSI_SMOOTHING_SAMPLES_8 0b00000010 // 2 0 8 (default)
265 #define RADIOLIB_SX127X_RSSI_SMOOTHING_SAMPLES_16 0b00000011 // 2 0 16
266 #define RADIOLIB_SX127X_RSSI_SMOOTHING_SAMPLES_32 0b00000100 // 2 0 32
267 #define RADIOLIB_SX127X_RSSI_SMOOTHING_SAMPLES_64 0b00000101 // 2 0 64
268 #define RADIOLIB_SX127X_RSSI_SMOOTHING_SAMPLES_128 0b00000110 // 2 0 128
269 #define RADIOLIB_SX127X_RSSI_SMOOTHING_SAMPLES_256 0b00000111 // 2 0 256
270 
271 // SX127X_REG_RSSI_COLLISION
272 #define RADIOLIB_SX127X_RSSI_COLLISION_THRESHOLD 0x0A // 7 0 RSSI threshold in dB that will be considered a collision, default value: 10 dB
273 
274 // SX127X_REG_RSSI_THRESH
275 #define RADIOLIB_SX127X_RSSI_THRESHOLD 0xFF // 7 0 RSSI threshold that will trigger RSSI interrupt, RssiThreshold = RSSI_THRESHOLD / 2 [dBm]
276 
277 // SX127X_REG_RX_BW
278 #define RADIOLIB_SX127X_RX_BW_MANT_16 0b00000000 // 4 3 channel filter bandwidth: RxBw = F(XOSC) / (RxBwMant * 2^(RxBwExp + 2)) [kHz]
279 #define RADIOLIB_SX127X_RX_BW_MANT_20 0b00001000 // 4 3
280 #define RADIOLIB_SX127X_RX_BW_MANT_24 0b00010000 // 4 3 default RxBwMant parameter
281 #define RADIOLIB_SX127X_RX_BW_EXP 0b00000101 // 2 0 default RxBwExp parameter
282 
283 // SX127X_REG_AFC_BW
284 #define RADIOLIB_SX127X_RX_BW_MANT_AFC 0b00001000 // 4 3 default RxBwMant parameter used during AFC
285 #define RADIOLIB_SX127X_RX_BW_EXP_AFC 0b00000011 // 2 0 default RxBwExp parameter used during AFC
286 
287 // SX127X_REG_OOK_PEAK
288 #define RADIOLIB_SX127X_BIT_SYNC_OFF 0b00000000 // 5 5 bit synchronizer disabled (not allowed in packet mode)
289 #define RADIOLIB_SX127X_BIT_SYNC_ON 0b00100000 // 5 5 bit synchronizer enabled (default)
290 #define RADIOLIB_SX127X_OOK_THRESH_FIXED 0b00000000 // 4 3 OOK threshold type: fixed value
291 #define RADIOLIB_SX127X_OOK_THRESH_PEAK 0b00001000 // 4 3 peak mode (default)
292 #define RADIOLIB_SX127X_OOK_THRESH_AVERAGE 0b00010000 // 4 3 average mode
293 #define RADIOLIB_SX127X_OOK_PEAK_THRESH_STEP_0_5_DB 0b00000000 // 2 0 OOK demodulator step size: 0.5 dB (default)
294 #define RADIOLIB_SX127X_OOK_PEAK_THRESH_STEP_1_0_DB 0b00000001 // 2 0 1.0 dB
295 #define RADIOLIB_SX127X_OOK_PEAK_THRESH_STEP_1_5_DB 0b00000010 // 2 0 1.5 dB
296 #define RADIOLIB_SX127X_OOK_PEAK_THRESH_STEP_2_0_DB 0b00000011 // 2 0 2.0 dB
297 #define RADIOLIB_SX127X_OOK_PEAK_THRESH_STEP_3_0_DB 0b00000100 // 2 0 3.0 dB
298 #define RADIOLIB_SX127X_OOK_PEAK_THRESH_STEP_4_0_DB 0b00000101 // 2 0 4.0 dB
299 #define RADIOLIB_SX127X_OOK_PEAK_THRESH_STEP_5_0_DB 0b00000110 // 2 0 5.0 dB
300 #define RADIOLIB_SX127X_OOK_PEAK_THRESH_STEP_6_0_DB 0b00000111 // 2 0 6.0 dB
301 
302 // SX127X_REG_OOK_FIX
303 #define RADIOLIB_SX127X_OOK_FIXED_THRESHOLD 0x0C // 7 0 default fixed threshold for OOK data slicer
304 
305 // SX127X_REG_OOK_AVG
306 #define RADIOLIB_SX127X_OOK_PEAK_THRESH_DEC_1_1_CHIP 0b00000000 // 7 5 OOK demodulator step period: once per chip (default)
307 #define RADIOLIB_SX127X_OOK_PEAK_THRESH_DEC_1_2_CHIP 0b00100000 // 7 5 once every 2 chips
308 #define RADIOLIB_SX127X_OOK_PEAK_THRESH_DEC_1_4_CHIP 0b01000000 // 7 5 once every 4 chips
309 #define RADIOLIB_SX127X_OOK_PEAK_THRESH_DEC_1_8_CHIP 0b01100000 // 7 5 once every 8 chips
310 #define RADIOLIB_SX127X_OOK_PEAK_THRESH_DEC_2_1_CHIP 0b10000000 // 7 5 2 times per chip
311 #define RADIOLIB_SX127X_OOK_PEAK_THRESH_DEC_4_1_CHIP 0b10100000 // 7 5 4 times per chip
312 #define RADIOLIB_SX127X_OOK_PEAK_THRESH_DEC_8_1_CHIP 0b11000000 // 7 5 8 times per chip
313 #define RADIOLIB_SX127X_OOK_PEAK_THRESH_DEC_16_1_CHIP 0b11100000 // 7 5 16 times per chip
314 #define RADIOLIB_SX127X_OOK_AVERAGE_OFFSET_0_DB 0b00000000 // 3 2 OOK average threshold offset: 0.0 dB (default)
315 #define RADIOLIB_SX127X_OOK_AVERAGE_OFFSET_2_DB 0b00000100 // 3 2 2.0 dB
316 #define RADIOLIB_SX127X_OOK_AVERAGE_OFFSET_4_DB 0b00001000 // 3 2 4.0 dB
317 #define RADIOLIB_SX127X_OOK_AVERAGE_OFFSET_6_DB 0b00001100 // 3 2 6.0 dB
318 #define RADIOLIB_SX127X_OOK_AVG_THRESH_FILT_32_PI 0b00000000 // 1 0 OOK average filter coefficient: chip rate / 32*pi
319 #define RADIOLIB_SX127X_OOK_AVG_THRESH_FILT_8_PI 0b00000001 // 1 0 chip rate / 8*pi
320 #define RADIOLIB_SX127X_OOK_AVG_THRESH_FILT_4_PI 0b00000010 // 1 0 chip rate / 4*pi (default)
321 #define RADIOLIB_SX127X_OOK_AVG_THRESH_FILT_2_PI 0b00000011 // 1 0 chip rate / 2*pi
322 
323 // SX127X_REG_AFC_FEI
324 #define RADIOLIB_SX127X_AGC_START 0b00010000 // 4 4 manually start AGC sequence
325 #define RADIOLIB_SX127X_AFC_CLEAR 0b00000010 // 1 1 manually clear AFC register
326 #define RADIOLIB_SX127X_AFC_AUTO_CLEAR_OFF 0b00000000 // 0 0 AFC register will not be cleared at the start of AFC (default)
327 #define RADIOLIB_SX127X_AFC_AUTO_CLEAR_ON 0b00000001 // 0 0 AFC register will be cleared at the start of AFC
328 
329 // SX127X_REG_PREAMBLE_DETECT
330 #define RADIOLIB_SX127X_PREAMBLE_DETECTOR_OFF 0b00000000 // 7 7 preamble detection disabled
331 #define RADIOLIB_SX127X_PREAMBLE_DETECTOR_ON 0b10000000 // 7 7 preamble detection enabled (default)
332 #define RADIOLIB_SX127X_PREAMBLE_DETECTOR_1_BYTE 0b00000000 // 6 5 preamble detection size: 1 byte (default)
333 #define RADIOLIB_SX127X_PREAMBLE_DETECTOR_2_BYTE 0b00100000 // 6 5 2 bytes
334 #define RADIOLIB_SX127X_PREAMBLE_DETECTOR_3_BYTE 0b01000000 // 6 5 3 bytes
335 #define RADIOLIB_SX127X_PREAMBLE_DETECTOR_TOL 0x0A // 4 0 default number of tolerated errors per chip (4 chips per bit)
336 
337 // SX127X_REG_RX_TIMEOUT_1
338 #define RADIOLIB_SX127X_TIMEOUT_RX_RSSI_OFF 0x00 // 7 0 disable receiver timeout when RSSI interrupt doesn't occur (default)
339 
340 // SX127X_REG_RX_TIMEOUT_2
341 #define RADIOLIB_SX127X_TIMEOUT_RX_PREAMBLE_OFF 0x00 // 7 0 disable receiver timeout when preamble interrupt doesn't occur (default)
342 
343 // SX127X_REG_RX_TIMEOUT_3
344 #define RADIOLIB_SX127X_TIMEOUT_SIGNAL_SYNC_OFF 0x00 // 7 0 disable receiver timeout when sync address interrupt doesn't occur (default)
345 
346 // SX127X_REG_OSC
347 #define RADIOLIB_SX127X_RC_CAL_START 0b00000000 // 3 3 manually start RC oscillator calibration
348 #define RADIOLIB_SX127X_CLK_OUT_FXOSC 0b00000000 // 2 0 ClkOut frequency: F(XOSC)
349 #define RADIOLIB_SX127X_CLK_OUT_FXOSC_2 0b00000001 // 2 0 F(XOSC) / 2
350 #define RADIOLIB_SX127X_CLK_OUT_FXOSC_4 0b00000010 // 2 0 F(XOSC) / 4
351 #define RADIOLIB_SX127X_CLK_OUT_FXOSC_8 0b00000011 // 2 0 F(XOSC) / 8
352 #define RADIOLIB_SX127X_CLK_OUT_FXOSC_16 0b00000100 // 2 0 F(XOSC) / 16
353 #define RADIOLIB_SX127X_CLK_OUT_FXOSC_32 0b00000101 // 2 0 F(XOSC) / 32
354 #define RADIOLIB_SX127X_CLK_OUT_RC 0b00000110 // 2 0 RC
355 #define RADIOLIB_SX127X_CLK_OUT_OFF 0b00000111 // 2 0 disabled (default)
356 
357 // SX127X_REG_PREAMBLE_MSB_FSK + SX127X_REG_PREAMBLE_LSB_FSK
358 #define RADIOLIB_SX127X_PREAMBLE_SIZE_MSB 0x00 // 7 0 preamble size in bytes
359 #define RADIOLIB_SX127X_PREAMBLE_SIZE_LSB 0x03 // 7 0 default value: 3 bytes
360 
361 // SX127X_REG_SYNC_CONFIG
362 #define RADIOLIB_SX127X_AUTO_RESTART_RX_MODE_OFF 0b00000000 // 7 6 Rx mode restart after packet reception: disabled
363 #define RADIOLIB_SX127X_AUTO_RESTART_RX_MODE_NO_PLL 0b01000000 // 7 6 enabled, don't wait for PLL lock
364 #define RADIOLIB_SX127X_AUTO_RESTART_RX_MODE_PLL 0b10000000 // 7 6 enabled, wait for PLL lock (default)
365 #define RADIOLIB_SX127X_PREAMBLE_POLARITY_AA 0b00000000 // 5 5 preamble polarity: 0xAA = 0b10101010 (default)
366 #define RADIOLIB_SX127X_PREAMBLE_POLARITY_55 0b00100000 // 5 5 0x55 = 0b01010101
367 #define RADIOLIB_SX127X_SYNC_OFF 0b00000000 // 4 4 sync word disabled
368 #define RADIOLIB_SX127X_SYNC_ON 0b00010000 // 4 4 sync word enabled (default)
369 #define RADIOLIB_SX127X_SYNC_SIZE 0x03 // 2 0 sync word size in bytes, SyncSize = SYNC_SIZE + 1 bytes
370 
371 // SX127X_REG_SYNC_VALUE_1 - SX127X_REG_SYNC_VALUE_8
372 #define RADIOLIB_SX127X_SYNC_VALUE_1 0x01 // 7 0 sync word: 1st byte (MSB)
373 #define RADIOLIB_SX127X_SYNC_VALUE_2 0x01 // 7 0 2nd byte
374 #define RADIOLIB_SX127X_SYNC_VALUE_3 0x01 // 7 0 3rd byte
375 #define RADIOLIB_SX127X_SYNC_VALUE_4 0x01 // 7 0 4th byte
376 #define RADIOLIB_SX127X_SYNC_VALUE_5 0x01 // 7 0 5th byte
377 #define RADIOLIB_SX127X_SYNC_VALUE_6 0x01 // 7 0 6th byte
378 #define RADIOLIB_SX127X_SYNC_VALUE_7 0x01 // 7 0 7th byte
379 #define RADIOLIB_SX127X_SYNC_VALUE_8 0x01 // 7 0 8th byte (LSB)
380 
381 // SX127X_REG_PACKET_CONFIG_1
382 #define RADIOLIB_SX127X_PACKET_FIXED 0b00000000 // 7 7 packet format: fixed length
383 #define RADIOLIB_SX127X_PACKET_VARIABLE 0b10000000 // 7 7 variable length (default)
384 #define RADIOLIB_SX127X_DC_FREE_NONE 0b00000000 // 6 5 DC-free encoding: disabled (default)
385 #define RADIOLIB_SX127X_DC_FREE_MANCHESTER 0b00100000 // 6 5 Manchester
386 #define RADIOLIB_SX127X_DC_FREE_WHITENING 0b01000000 // 6 5 Whitening
387 #define RADIOLIB_SX127X_CRC_OFF 0b00000000 // 4 4 CRC disabled
388 #define RADIOLIB_SX127X_CRC_ON 0b00010000 // 4 4 CRC enabled (default)
389 #define RADIOLIB_SX127X_CRC_AUTOCLEAR_OFF 0b00001000 // 3 3 keep FIFO on CRC mismatch, issue payload ready interrupt
390 #define RADIOLIB_SX127X_CRC_AUTOCLEAR_ON 0b00000000 // 3 3 clear FIFO on CRC mismatch, do not issue payload ready interrupt
391 #define RADIOLIB_SX127X_ADDRESS_FILTERING_OFF 0b00000000 // 2 1 address filtering: none (default)
392 #define RADIOLIB_SX127X_ADDRESS_FILTERING_NODE 0b00000010 // 2 1 node
393 #define RADIOLIB_SX127X_ADDRESS_FILTERING_NODE_BROADCAST 0b00000100 // 2 1 node or broadcast
394 #define RADIOLIB_SX127X_CRC_WHITENING_TYPE_CCITT 0b00000000 // 0 0 CRC and whitening algorithms: CCITT CRC with standard whitening (default)
395 #define RADIOLIB_SX127X_CRC_WHITENING_TYPE_IBM 0b00000001 // 0 0 IBM CRC with alternate whitening
396 
397 // SX127X_REG_PACKET_CONFIG_2
398 #define RADIOLIB_SX127X_DATA_MODE_PACKET 0b01000000 // 6 6 data mode: packet (default)
399 #define RADIOLIB_SX127X_DATA_MODE_CONTINUOUS 0b00000000 // 6 6 continuous
400 #define RADIOLIB_SX127X_IO_HOME_OFF 0b00000000 // 5 5 io-homecontrol compatibility disabled (default)
401 #define RADIOLIB_SX127X_IO_HOME_ON 0b00100000 // 5 5 io-homecontrol compatibility enabled
402 
403 // SX127X_REG_FIFO_THRESH
404 #define RADIOLIB_SX127X_TX_START_FIFO_LEVEL 0b00000000 // 7 7 start packet transmission when: number of bytes in FIFO exceeds FIFO_THRESHOLD
405 #define RADIOLIB_SX127X_TX_START_FIFO_NOT_EMPTY 0b10000000 // 7 7 at least one byte in FIFO (default)
406 #define RADIOLIB_SX127X_FIFO_THRESH 0x1F // 5 0 FIFO level threshold
407 
408 // SX127X_REG_SEQ_CONFIG_1
409 #define RADIOLIB_SX127X_SEQUENCER_START 0b10000000 // 7 7 manually start sequencer
410 #define RADIOLIB_SX127X_SEQUENCER_STOP 0b01000000 // 6 6 manually stop sequencer
411 #define RADIOLIB_SX127X_IDLE_MODE_STANDBY 0b00000000 // 5 5 chip mode during sequencer idle mode: standby (default)
412 #define RADIOLIB_SX127X_IDLE_MODE_SLEEP 0b00100000 // 5 5 sleep
413 #define RADIOLIB_SX127X_FROM_START_LP_SELECTION 0b00000000 // 4 3 mode that will be set after starting sequencer: low power selection (default)
414 #define RADIOLIB_SX127X_FROM_START_RECEIVE 0b00001000 // 4 3 receive
415 #define RADIOLIB_SX127X_FROM_START_TRANSMIT 0b00010000 // 4 3 transmit
416 #define RADIOLIB_SX127X_FROM_START_TRANSMIT_FIFO_LEVEL 0b00011000 // 4 3 transmit on a FIFO level interrupt
417 #define RADIOLIB_SX127X_LP_SELECTION_SEQ_OFF 0b00000000 // 2 2 mode that will be set after exiting low power selection: sequencer off (default)
418 #define RADIOLIB_SX127X_LP_SELECTION_IDLE 0b00000100 // 2 2 idle state
419 #define RADIOLIB_SX127X_FROM_IDLE_TRANSMIT 0b00000000 // 1 1 mode that will be set after exiting idle mode: transmit (default)
420 #define RADIOLIB_SX127X_FROM_IDLE_RECEIVE 0b00000010 // 1 1 receive
421 #define RADIOLIB_SX127X_FROM_TRANSMIT_LP_SELECTION 0b00000000 // 0 0 mode that will be set after exiting transmit mode: low power selection (default)
422 #define RADIOLIB_SX127X_FROM_TRANSMIT_RECEIVE 0b00000001 // 0 0 receive
423 
424 // SX127X_REG_SEQ_CONFIG_2
425 #define RADIOLIB_SX127X_FROM_RECEIVE_PACKET_RECEIVED_PAYLOAD 0b00100000 // 7 5 mode that will be set after exiting receive mode: packet received on payload ready interrupt (default)
426 #define RADIOLIB_SX127X_FROM_RECEIVE_LP_SELECTION 0b01000000 // 7 5 low power selection
427 #define RADIOLIB_SX127X_FROM_RECEIVE_PACKET_RECEIVED_CRC_OK 0b01100000 // 7 5 packet received on CRC OK interrupt
428 #define RADIOLIB_SX127X_FROM_RECEIVE_SEQ_OFF_RSSI 0b10000000 // 7 5 sequencer off on RSSI interrupt
429 #define RADIOLIB_SX127X_FROM_RECEIVE_SEQ_OFF_SYNC_ADDR 0b10100000 // 7 5 sequencer off on sync address interrupt
430 #define RADIOLIB_SX127X_FROM_RECEIVE_SEQ_OFF_PREAMBLE_DETECT 0b11000000 // 7 5 sequencer off on preamble detect interrupt
431 #define RADIOLIB_SX127X_FROM_RX_TIMEOUT_RECEIVE 0b00000000 // 4 3 mode that will be set after Rx timeout: receive (default)
432 #define RADIOLIB_SX127X_FROM_RX_TIMEOUT_TRANSMIT 0b00001000 // 4 3 transmit
433 #define RADIOLIB_SX127X_FROM_RX_TIMEOUT_LP_SELECTION 0b00010000 // 4 3 low power selection
434 #define RADIOLIB_SX127X_FROM_RX_TIMEOUT_SEQ_OFF 0b00011000 // 4 3 sequencer off
435 #define RADIOLIB_SX127X_FROM_PACKET_RECEIVED_SEQ_OFF 0b00000000 // 2 0 mode that will be set after packet received: sequencer off (default)
436 #define RADIOLIB_SX127X_FROM_PACKET_RECEIVED_TRANSMIT 0b00000001 // 2 0 transmit
437 #define RADIOLIB_SX127X_FROM_PACKET_RECEIVED_LP_SELECTION 0b00000010 // 2 0 low power selection
438 #define RADIOLIB_SX127X_FROM_PACKET_RECEIVED_RECEIVE_FS 0b00000011 // 2 0 receive via FS
439 #define RADIOLIB_SX127X_FROM_PACKET_RECEIVED_RECEIVE 0b00000100 // 2 0 receive
440 
441 // SX127X_REG_TIMER_RESOL
442 #define RADIOLIB_SX127X_TIMER1_OFF 0b00000000 // 3 2 timer 1 resolution: disabled (default)
443 #define RADIOLIB_SX127X_TIMER1_RESOLUTION_64_US 0b00000100 // 3 2 64 us
444 #define RADIOLIB_SX127X_TIMER1_RESOLUTION_4_1_MS 0b00001000 // 3 2 4.1 ms
445 #define RADIOLIB_SX127X_TIMER1_RESOLUTION_262_MS 0b00001100 // 3 2 262 ms
446 #define RADIOLIB_SX127X_TIMER2_OFF 0b00000000 // 3 2 timer 2 resolution: disabled (default)
447 #define RADIOLIB_SX127X_TIMER2_RESOLUTION_64_US 0b00000001 // 3 2 64 us
448 #define RADIOLIB_SX127X_TIMER2_RESOLUTION_4_1_MS 0b00000010 // 3 2 4.1 ms
449 #define RADIOLIB_SX127X_TIMER2_RESOLUTION_262_MS 0b00000011 // 3 2 262 ms
450 
451 // SX127X_REG_TIMER1_COEF
452 #define RADIOLIB_SX127X_TIMER1_COEFFICIENT 0xF5 // 7 0 multiplication coefficient for timer 1
453 
454 // SX127X_REG_TIMER2_COEF
455 #define RADIOLIB_SX127X_TIMER2_COEFFICIENT 0x20 // 7 0 multiplication coefficient for timer 2
456 
457 // SX127X_REG_IMAGE_CAL
458 #define RADIOLIB_SX127X_AUTO_IMAGE_CAL_OFF 0b00000000 // 7 7 temperature calibration disabled (default)
459 #define RADIOLIB_SX127X_AUTO_IMAGE_CAL_ON 0b10000000 // 7 7 temperature calibration enabled
460 #define RADIOLIB_SX127X_IMAGE_CAL_START 0b01000000 // 6 6 start temperature calibration
461 #define RADIOLIB_SX127X_IMAGE_CAL_RUNNING 0b00100000 // 5 5 temperature calibration is on-going
462 #define RADIOLIB_SX127X_IMAGE_CAL_COMPLETE 0b00000000 // 5 5 temperature calibration finished
463 #define RADIOLIB_SX127X_TEMP_CHANGED 0b00001000 // 3 3 temperature changed more than TEMP_THRESHOLD since last calibration
464 #define RADIOLIB_SX127X_TEMP_THRESHOLD_5_DEG_C 0b00000000 // 2 1 temperature change threshold: 5 deg. C
465 #define RADIOLIB_SX127X_TEMP_THRESHOLD_10_DEG_C 0b00000010 // 2 1 10 deg. C (default)
466 #define RADIOLIB_SX127X_TEMP_THRESHOLD_15_DEG_C 0b00000100 // 2 1 15 deg. C
467 #define RADIOLIB_SX127X_TEMP_THRESHOLD_20_DEG_C 0b00000110 // 2 1 20 deg. C
468 #define RADIOLIB_SX127X_TEMP_MONITOR_ON 0b00000000 // 0 0 temperature monitoring enabled (default)
469 #define RADIOLIB_SX127X_TEMP_MONITOR_OFF 0b00000001 // 0 0 temperature monitoring disabled
470 
471 // SX127X_REG_LOW_BAT
472 #define RADIOLIB_SX127X_LOW_BAT_OFF 0b00000000 // 3 3 low battery detector disabled
473 #define RADIOLIB_SX127X_LOW_BAT_ON 0b00001000 // 3 3 low battery detector enabled
474 #define RADIOLIB_SX127X_LOW_BAT_TRIM_1_695_V 0b00000000 // 2 0 battery voltage threshold: 1.695 V
475 #define RADIOLIB_SX127X_LOW_BAT_TRIM_1_764_V 0b00000001 // 2 0 1.764 V
476 #define RADIOLIB_SX127X_LOW_BAT_TRIM_1_835_V 0b00000010 // 2 0 1.835 V (default)
477 #define RADIOLIB_SX127X_LOW_BAT_TRIM_1_905_V 0b00000011 // 2 0 1.905 V
478 #define RADIOLIB_SX127X_LOW_BAT_TRIM_1_976_V 0b00000100 // 2 0 1.976 V
479 #define RADIOLIB_SX127X_LOW_BAT_TRIM_2_045_V 0b00000101 // 2 0 2.045 V
480 #define RADIOLIB_SX127X_LOW_BAT_TRIM_2_116_V 0b00000110 // 2 0 2.116 V
481 #define RADIOLIB_SX127X_LOW_BAT_TRIM_2_185_V 0b00000111 // 2 0 2.185 V
482 
483 // SX127X_REG_IRQ_FLAGS_1
484 #define RADIOLIB_SX127X_FLAG_MODE_READY 0b10000000 // 7 7 requested mode is ready
485 #define RADIOLIB_SX127X_FLAG_RX_READY 0b01000000 // 6 6 reception ready (after RSSI, AGC, AFC)
486 #define RADIOLIB_SX127X_FLAG_TX_READY 0b00100000 // 5 5 transmission ready (after PA ramp-up)
487 #define RADIOLIB_SX127X_FLAG_PLL_LOCK 0b00010000 // 4 4 PLL locked
488 #define RADIOLIB_SX127X_FLAG_RSSI 0b00001000 // 3 3 RSSI value exceeds RSSI threshold
489 #define RADIOLIB_SX127X_FLAG_TIMEOUT 0b00000100 // 2 2 timeout occurred
490 #define RADIOLIB_SX127X_FLAG_PREAMBLE_DETECT 0b00000010 // 1 1 valid preamble was detected
491 #define RADIOLIB_SX127X_FLAG_SYNC_ADDRESS_MATCH 0b00000001 // 0 0 sync address matched
492 
493 // SX127X_REG_IRQ_FLAGS_2
494 #define RADIOLIB_SX127X_FLAG_FIFO_FULL 0b10000000 // 7 7 FIFO is full
495 #define RADIOLIB_SX127X_FLAG_FIFO_EMPTY 0b01000000 // 6 6 FIFO is empty
496 #define RADIOLIB_SX127X_FLAG_FIFO_LEVEL 0b00100000 // 5 5 number of bytes in FIFO exceeds FIFO_THRESHOLD
497 #define RADIOLIB_SX127X_FLAG_FIFO_OVERRUN 0b00010000 // 4 4 FIFO overrun occurred
498 #define RADIOLIB_SX127X_FLAG_PACKET_SENT 0b00001000 // 3 3 packet was successfully sent
499 #define RADIOLIB_SX127X_FLAG_PAYLOAD_READY 0b00000100 // 2 2 packet was successfully received
500 #define RADIOLIB_SX127X_FLAG_CRC_OK 0b00000010 // 1 1 CRC check passed
501 #define RADIOLIB_SX127X_FLAG_LOW_BAT 0b00000001 // 0 0 battery voltage dropped below threshold
502 
503 // SX127X_REG_DIO_MAPPING_1
504 #define RADIOLIB_SX127X_DIO0_LORA_RX_DONE 0b00000000 // 7 6
505 #define RADIOLIB_SX127X_DIO0_LORA_TX_DONE 0b01000000 // 7 6
506 #define RADIOLIB_SX127X_DIO0_LORA_CAD_DONE 0b10000000 // 7 6
507 #define RADIOLIB_SX127X_DIO0_CONT_MODE_READY 0b11000000 // 7 6
508 #define RADIOLIB_SX127X_DIO0_CONT_SYNC_ADDRESS 0b00000000 // 7 6
509 #define RADIOLIB_SX127X_DIO0_CONT_RSSI_PREAMBLE_DETECT 0b01000000 // 7 6
510 #define RADIOLIB_SX127X_DIO0_CONT_RX_READY 0b10000000 // 7 6
511 #define RADIOLIB_SX127X_DIO0_CONT_TX_READY 0b00000000 // 7 6
512 #define RADIOLIB_SX127X_DIO0_PACK_PAYLOAD_READY 0b00000000 // 7 6
513 #define RADIOLIB_SX127X_DIO0_PACK_PACKET_SENT 0b00000000 // 7 6
514 #define RADIOLIB_SX127X_DIO0_PACK_CRC_OK 0b01000000 // 7 6
515 #define RADIOLIB_SX127X_DIO0_PACK_TEMP_CHANGE_LOW_BAT 0b11000000 // 7 6
516 #define RADIOLIB_SX127X_DIO1_LORA_RX_TIMEOUT 0b00000000 // 5 4
517 #define RADIOLIB_SX127X_DIO1_LORA_FHSS_CHANGE_CHANNEL 0b00010000 // 5 4
518 #define RADIOLIB_SX127X_DIO1_LORA_CAD_DETECTED 0b00100000 // 5 4
519 #define RADIOLIB_SX127X_DIO1_CONT_DCLK 0b00000000 // 5 4
520 #define RADIOLIB_SX127X_DIO1_CONT_RSSI_PREAMBLE_DETECT 0b00010000 // 5 4
521 #define RADIOLIB_SX127X_DIO1_PACK_FIFO_LEVEL 0b00000000 // 5 4
522 #define RADIOLIB_SX127X_DIO1_PACK_FIFO_EMPTY 0b00010000 // 5 4
523 #define RADIOLIB_SX127X_DIO1_PACK_FIFO_FULL 0b00100000 // 5 4
524 #define RADIOLIB_SX127X_DIO2_LORA_FHSS_CHANGE_CHANNEL 0b00000000 // 3 2
525 #define RADIOLIB_SX127X_DIO2_CONT_DATA 0b00000000 // 3 2
526 #define RADIOLIB_SX127X_DIO2_PACK_FIFO_FULL 0b00000000 // 3 2
527 #define RADIOLIB_SX127X_DIO2_PACK_RX_READY 0b00000100 // 3 2
528 #define RADIOLIB_SX127X_DIO2_PACK_TIMEOUT 0b00001000 // 3 2
529 #define RADIOLIB_SX127X_DIO2_PACK_SYNC_ADDRESS 0b00011000 // 3 2
530 #define RADIOLIB_SX127X_DIO3_LORA_CAD_DONE 0b00000000 // 1 0
531 #define RADIOLIB_SX127X_DIO3_LORA_VALID_HEADER 0b00000001 // 1 0
532 #define RADIOLIB_SX127X_DIO3_LORA_PAYLOAD_CRC_ERROR 0b00000010 // 1 0
533 #define RADIOLIB_SX127X_DIO3_CONT_TIMEOUT 0b00000000 // 1 0
534 #define RADIOLIB_SX127X_DIO3_CONT_RSSI_PREAMBLE_DETECT 0b00000001 // 1 0
535 #define RADIOLIB_SX127X_DIO3_CONT_TEMP_CHANGE_LOW_BAT 0b00000011 // 1 0
536 #define RADIOLIB_SX127X_DIO3_PACK_FIFO_EMPTY 0b00000000 // 1 0
537 #define RADIOLIB_SX127X_DIO3_PACK_TX_READY 0b00000001 // 1 0
538 
539 // SX127X_REG_DIO_MAPPING_2
540 #define RADIOLIB_SX127X_DIO4_LORA_CAD_DETECTED 0b10000000 // 7 6
541 #define RADIOLIB_SX127X_DIO4_LORA_PLL_LOCK 0b01000000 // 7 6
542 #define RADIOLIB_SX127X_DIO4_CONT_TEMP_CHANGE_LOW_BAT 0b00000000 // 7 6
543 #define RADIOLIB_SX127X_DIO4_CONT_PLL_LOCK 0b01000000 // 7 6
544 #define RADIOLIB_SX127X_DIO4_CONT_TIMEOUT 0b10000000 // 7 6
545 #define RADIOLIB_SX127X_DIO4_CONT_MODE_READY 0b11000000 // 7 6
546 #define RADIOLIB_SX127X_DIO4_PACK_TEMP_CHANGE_LOW_BAT 0b00000000 // 7 6
547 #define RADIOLIB_SX127X_DIO4_PACK_PLL_LOCK 0b01000000 // 7 6
548 #define RADIOLIB_SX127X_DIO4_PACK_TIMEOUT 0b10000000 // 7 6
549 #define RADIOLIB_SX127X_DIO4_PACK_RSSI_PREAMBLE_DETECT 0b11000000 // 7 6
550 #define RADIOLIB_SX127X_DIO5_LORA_MODE_READY 0b00000000 // 5 4
551 #define RADIOLIB_SX127X_DIO5_LORA_CLK_OUT 0b00010000 // 5 4
552 #define RADIOLIB_SX127X_DIO5_CONT_CLK_OUT 0b00000000 // 5 4
553 #define RADIOLIB_SX127X_DIO5_CONT_PLL_LOCK 0b00010000 // 5 4
554 #define RADIOLIB_SX127X_DIO5_CONT_RSSI_PREAMBLE_DETECT 0b00100000 // 5 4
555 #define RADIOLIB_SX127X_DIO5_CONT_MODE_READY 0b00110000 // 5 4
556 #define RADIOLIB_SX127X_DIO5_PACK_CLK_OUT 0b00000000 // 5 4
557 #define RADIOLIB_SX127X_DIO5_PACK_PLL_LOCK 0b00010000 // 5 4
558 #define RADIOLIB_SX127X_DIO5_PACK_DATA 0b00100000 // 5 4
559 #define RADIOLIB_SX127X_DIO5_PACK_MODE_READY 0b00110000 // 5 4
560 #define RADIOLIB_SX127X_DIO_MAP_PREAMBLE_DETECT 0b00000001 // 0 0
561 #define RADIOLIB_SX127X_DIO_MAP_RSSI 0b00000000 // 0 0
562 
563 // SX1272_REG_PLL_HOP + SX1278_REG_PLL_HOP
564 #define RADIOLIB_SX127X_FAST_HOP_OFF 0b00000000 // 7 7 carrier frequency validated when FRF registers are written
565 #define RADIOLIB_SX127X_FAST_HOP_ON 0b10000000 // 7 7 carrier frequency validated when FS modes are requested
566 
567 // SX1272_REG_TCXO + SX1278_REG_TCXO
568 #define RADIOLIB_SX127X_TCXO_INPUT_EXTERNAL 0b00000000 // 4 4 use external crystal oscillator
569 #define RADIOLIB_SX127X_TCXO_INPUT_EXTERNAL_CLIPPED 0b00010000 // 4 4 use external crystal oscillator clipped sine connected to XTA pin
570 
571 // SX1272_REG_PLL + SX1278_REG_PLL
572 #define RADIOLIB_SX127X_PLL_BANDWIDTH_75_KHZ 0b00000000 // 7 6 PLL bandwidth: 75 kHz
573 #define RADIOLIB_SX127X_PLL_BANDWIDTH_150_KHZ 0b01000000 // 7 6 150 kHz
574 #define RADIOLIB_SX127X_PLL_BANDWIDTH_225_KHZ 0b10000000 // 7 6 225 kHz
575 #define RADIOLIB_SX127X_PLL_BANDWIDTH_300_KHZ 0b11000000 // 7 6 300 kHz (default)
576 
583 class SX127x: public PhysicalLayer {
584  public:
585  // introduce PhysicalLayer overloads
590 
591  // constructor
592 
598  SX127x(Module* mod);
599 
600  Module* getMod();
601 
602  // basic methods
603 
615  int16_t begin(uint8_t chipVersion, uint8_t syncWord, uint16_t preambleLength);
616 
620  virtual void reset() = 0;
621 
639  int16_t beginFSK(uint8_t chipVersion, float br, float freqDev, float rxBw, uint16_t preambleLength, bool enableOOK);
640 
653  int16_t transmit(uint8_t* data, size_t len, uint8_t addr = 0) override;
654 
665  int16_t receive(uint8_t* data, size_t len) override;
666 
672  int16_t scanChannel();
673 
680  int16_t sleep();
681 
687  int16_t standby() override;
688 
697  int16_t transmitDirect(uint32_t frf = 0) override;
698 
705  int16_t receiveDirect() override;
706 
712  int16_t packetMode();
713 
714  // interrupt methods
715 
723  void setDio0Action(void (*func)(void), RADIOLIB_INTERRUPT_STATUS dir = RISING);
724 
728  void clearDio0Action();
729 
737  void setDio1Action(void (*func)(void), RADIOLIB_INTERRUPT_STATUS dir = RISING);
738 
742  void clearDio1Action();
743 
749  void setFifoEmptyAction(void (*func)(void));
750 
754  void clearFifoEmptyAction();
755 
761  void setFifoFullAction(void (*func)(void));
762 
766  void clearFifoFullAction();
767 
779  bool fifoAdd(uint8_t* data, int totalLen, volatile int* remLen);
780 
792  bool fifoGet(volatile uint8_t* data, int totalLen, volatile int* rcvLen);
793 
805  int16_t startTransmit(uint8_t* data, size_t len, uint8_t addr = 0) override;
806 
812  int16_t finishTransmit() override;
813 
823  int16_t startReceive(uint8_t len = 0, uint8_t mode = RADIOLIB_SX127X_RXCONTINUOUS);
824 
835  int16_t readData(uint8_t* data, size_t len) override;
836 
843  int16_t startChannelScan();
844 
845  // configuration methods
846 
854  int16_t setSyncWord(uint8_t syncWord);
855 
863  int16_t setCurrentLimit(uint8_t currentLimit);
864 
872  int16_t setPreambleLength(uint16_t preambleLength);
873 
881  float getFrequencyError(bool autoCorrect = false);
882 
888  float getAFCError();
889 
895  float getSNR();
896 
902  float getDataRate() const;
903 
911  int16_t setBitRate(float br);
912 
920  int16_t setFrequencyDeviation(float freqDev) override;
921 
929  int16_t setRxBandwidth(float rxBw);
930 
938  int16_t setAFCBandwidth(float afcBw);
939 
947  int16_t setAFC(bool isEnabled);
948 
956  int16_t setAFCAGCTrigger(uint8_t trigger);
957 
967  int16_t setSyncWord(uint8_t* syncWord, size_t len);
968 
976  int16_t setNodeAddress(uint8_t nodeAddr);
977 
985  int16_t setBroadcastAddress(uint8_t broadAddr);
986 
992  int16_t disableAddressFiltering();
993 
1001  int16_t setOOK(bool enableOOK);
1002 
1010  int16_t setOokThresholdType(uint8_t type);
1011 
1019  int16_t setOokPeakThresholdDecrement(uint8_t value);
1020 
1028  int16_t setOokFixedOrFloorThreshold(uint8_t value);
1029 
1037  int16_t setOokPeakThresholdStep(uint8_t value);
1038 
1044  int16_t enableBitSync();
1045 
1051  int16_t disableBitSync();
1052 
1060  size_t getPacketLength(bool update = true) override;
1061 
1069  int16_t fixedPacketLengthMode(uint8_t len = RADIOLIB_SX127X_MAX_PACKET_LENGTH_FSK);
1070 
1078  int16_t variablePacketLengthMode(uint8_t maxLen = RADIOLIB_SX127X_MAX_PACKET_LENGTH_FSK);
1079 
1087  uint32_t getTimeOnAir(size_t len);
1088 
1096  int16_t setCrcFiltering(bool crcOn = true);
1097 
1108  int16_t setRSSIConfig(uint8_t smoothingSamples, int8_t offset = 0);
1109 
1118  int16_t setEncoding(uint8_t encoding) override;
1119 
1127  uint16_t getIRQFlags();
1128 
1134  uint8_t getModemStatus();
1135 
1142  int8_t getTempRaw();
1143 
1152  void setRfSwitchPins(RADIOLIB_PIN_TYPE rxEn, RADIOLIB_PIN_TYPE txEn);
1153 
1159  uint8_t randomByte();
1160 
1166  int16_t getChipVersion();
1167 
1175  int16_t invertIQ(bool invertIQ);
1176 
1177  #if !defined(RADIOLIB_EXCLUDE_DIRECT_RECEIVE)
1183  void setDirectAction(void (*func)(void));
1184 
1190  void readBit(RADIOLIB_PIN_TYPE pin);
1191  #endif
1192 
1200  int16_t setFHSSHoppingPeriod(uint8_t freqHoppingPeriod);
1201 
1207  uint8_t getFHSSHoppingPeriod(void);
1208 
1214  uint8_t getFHSSChannel(void);
1215 
1219  void clearFHSSInt(void);
1220 
1230  int16_t setDIOMapping(RADIOLIB_PIN_TYPE pin, uint8_t value);
1231 
1239  int16_t setDIOPreambleDetect(bool usePreambleDetect);
1240 
1248  int16_t setRSSIThreshold(float dbm);
1249 
1250 #if !defined(RADIOLIB_GODMODE) && !defined(RADIOLIB_LOW_LEVEL)
1251  protected:
1252 #endif
1253  Module* _mod;
1254 
1255 #if !defined(RADIOLIB_GODMODE)
1256  protected:
1257 #endif
1258 
1259  float _freq = 0;
1260  float _bw = 0;
1261  uint8_t _sf = 0;
1262  uint8_t _cr = 0;
1263  float _br = 0;
1264  bool _ook = false;
1265  bool _crcEnabled = false;
1266  bool _crcOn = true; // default value used in FSK mode
1267  size_t _packetLength = 0;
1268 
1269  int16_t setFrequencyRaw(float newFreq);
1270  int16_t config();
1271  int16_t configFSK();
1272  int16_t getActiveModem();
1273  int16_t directMode();
1274  int16_t setPacketMode(uint8_t mode, uint8_t len);
1275 
1276 #if !defined(RADIOLIB_GODMODE)
1277  private:
1278 #endif
1279  float _dataRate = 0;
1280  bool _packetLengthQueried = false; // FSK packet length is the first byte in FIFO, length can only be queried once
1281  uint8_t _packetLengthConfig = RADIOLIB_SX127X_PACKET_VARIABLE;
1282 
1283  bool findChip(uint8_t ver);
1284  int16_t setMode(uint8_t mode);
1285  int16_t setActiveModem(uint8_t modem);
1286  void clearIRQFlags();
1287  void clearFIFO(size_t count); // used mostly to clear remaining bytes in FIFO after a packet read
1295  static uint8_t calculateBWManExp(float bandwidth);
1296 
1297  virtual void errataFix(bool rx) = 0;
1298 };
1299 
1300 #endif
1301 
1302 #endif
Implements all common low-level methods to control the wireless module. Every module class contains o...
Definition: Module.h:16
Provides common interface for protocols that run on LoRa/FSK modules, such as RTTY or LoRaWAN....
Definition: PhysicalLayer.h:14
int16_t transmit(__FlashStringHelper *fstr, uint8_t addr=0)
Arduino Flash String transmit method.
Definition: PhysicalLayer.cpp:12
int16_t readData(String &str, size_t len=0)
Reads data that was received after calling startReceive method.
Definition: PhysicalLayer.cpp:61
int16_t startTransmit(String &str, uint8_t addr=0)
Interrupt-driven Arduino String transmit method. Unlike the standard transmit method,...
Definition: PhysicalLayer.cpp:53
int16_t receive(String &str, size_t len=0)
Arduino String receive method.
Definition: PhysicalLayer.cpp:104
Base class for SX127x series. All derived classes for SX127x (e.g. SX1278 or SX1272) inherit from thi...
Definition: SX127x.h:583
void readBit(RADIOLIB_PIN_TYPE pin)
Function to read and process data bit in direct reception mode.
Definition: SX127x.cpp:1523
int16_t packetMode()
Disables direct mode and enables packet mode, allowing the module to receive packets....
Definition: SX127x.cpp:358
void clearFifoFullAction()
Clears interrupt service routine to call when FIFO is full.
Definition: SX127x.cpp:460
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:1039
int16_t enableBitSync()
Enable Bit synchronizer.
Definition: SX127x.cpp:1063
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:1143
int16_t startChannelScan()
Interrupt-driven channel activity detection method. DIO0 will be activated when LoRa preamble is dete...
Definition: SX127x.cpp:663
int16_t invertIQ(bool invertIQ)
Enables/disables Invert the LoRa I and Q signals.
Definition: SX127x.cpp:1498
void setFifoFullAction(void(*func)(void))
Set interrupt service routine function to call when FIFO is full.
Definition: SX127x.cpp:451
int16_t setOOK(bool enableOOK)
Enables/disables OOK modulation instead of FSK.
Definition: SX127x.cpp:1071
bool fifoGet(volatile uint8_t *data, int totalLen, volatile int *rcvLen)
Set interrupt service routine function to call when FIFO is sufficently full to read.
Definition: SX127x.cpp:495
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:909
uint8_t getModemStatus()
Reads modem status. Only available in LoRa mode.
Definition: SX127x.cpp:1266
bool fifoAdd(uint8_t *data, int totalLen, volatile int *remLen)
Set interrupt service routine function to call when FIFO is empty.
Definition: SX127x.cpp:465
virtual void reset()=0
Reset method. Will reset the chip to the default state using RST pin. Declared pure virtual since SX1...
int16_t setCurrentLimit(uint8_t currentLimit)
Sets current limit for over current protection at transmitter amplifier. Allowed values range from 45...
Definition: SX127x.cpp:701
void clearFHSSInt(void)
Clear the FHSS interrupt.
Definition: SX127x.cpp:1540
int16_t setAFC(bool isEnabled)
Enables or disables FSK automatic frequency correction(AFC)
Definition: SX127x.cpp:941
int16_t sleep()
Sets the LoRa module to sleep to save power. Module will not be able to transmit or receive any data ...
Definition: SX127x.cpp:276
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:867
size_t getPacketLength(bool update=true) override
Query modem for the packet length of received payload.
Definition: SX127x.cpp:1111
int16_t setOokPeakThresholdStep(uint8_t value)
Size of each decrement of the RSSI threshold in the OOK demodulator.
Definition: SX127x.cpp:1055
float getAFCError()
Gets current AFC error.
Definition: SX127x.cpp:807
int16_t setRSSIThreshold(float dbm)
Sets the RSSI value above which the RSSI interrupt is signaled.
Definition: SX127x.cpp:1203
uint8_t getFHSSChannel(void)
Gets the FHSS channel in use.
Definition: SX127x.cpp:1536
int16_t begin(uint8_t chipVersion, uint8_t syncWord, uint16_t preambleLength)
Initialization method. Will be called with appropriate parameters when calling initialization method ...
Definition: SX127x.cpp:12
int16_t setBitRate(float br)
Sets FSK bit rate. Allowed values range from 1.2 to 300 kbps. Only available in FSK mode.
Definition: SX127x.cpp:838
int16_t setAFCBandwidth(float afcBw)
Sets FSK automatic frequency correction bandwidth. Allowed values range from 2.6 to 250 kHz....
Definition: SX127x.cpp:925
uint8_t randomByte()
Get one truly random byte from RSSI noise.
Definition: SX127x.cpp:1280
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:1139
void setFifoEmptyAction(void(*func)(void))
Set interrupt service routine function to call when FIFO is empty.
Definition: SX127x.cpp:442
void setDio0Action(void(*func)(void), RADIOLIB_INTERRUPT_STATUS dir=RISING)
Set interrupt service routine function to call when DIO0 activates.
Definition: SX127x.cpp:420
void clearDio0Action()
Clears interrupt service routine to call when DIO0 activates.
Definition: SX127x.cpp:424
int16_t standby() override
Sets the LoRa module to standby.
Definition: SX127x.cpp:284
int16_t setDIOPreambleDetect(bool usePreambleDetect)
Configure DIO mapping to use RSSI or Preamble Detect for pins that support it.
Definition: SX127x.cpp:1559
int16_t setFHSSHoppingPeriod(uint8_t freqHoppingPeriod)
Sets the hopping period and enables FHSS.
Definition: SX127x.cpp:1528
int16_t finishTransmit() override
Clean up after transmission is done.
Definition: SX127x.cpp:601
int16_t disableBitSync()
Disable Bit synchronizer (not allowed in Packet mode).
Definition: SX127x.cpp:1067
int16_t setOokThresholdType(uint8_t type)
Selects the type of threshold in the OOK data slicer.
Definition: SX127x.cpp:1031
int8_t getTempRaw()
Reads uncalibrated temperature value. This function will change operating mode and should not be call...
Definition: SX127x.cpp:1309
int16_t setCrcFiltering(bool crcOn=true)
Enable CRC filtering and generation.
Definition: SX127x.cpp:1193
void clearDio1Action()
Clears interrupt service routine to call when DIO1 activates.
Definition: SX127x.cpp:435
void setDirectAction(void(*func)(void))
Set interrupt service routine function to call when data bit is receveid in direct mode.
Definition: SX127x.cpp:1519
int16_t receiveDirect() override
Enables direct reception mode on pins DIO1 (clock) and DIO2 (data). While in direct mode,...
Definition: SX127x.cpp:321
void clearFifoEmptyAction()
Clears interrupt service routine to call when FIFO is empty.
Definition: SX127x.cpp:447
int16_t setOokPeakThresholdDecrement(uint8_t value)
Period of decrement of the RSSI threshold in the OOK demodulator.
Definition: SX127x.cpp:1047
int16_t setAFCAGCTrigger(uint8_t trigger)
Controls trigger of AFC and AGC.
Definition: SX127x.cpp:951
int16_t transmit(__FlashStringHelper *fstr, uint8_t addr=0)
Arduino Flash String transmit method.
Definition: PhysicalLayer.cpp:12
int16_t setPreambleLength(uint16_t preambleLength)
Sets LoRa or FSK preamble length. Allowed values range from 6 to 65535 in LoRa mode or 0 to 65535 in ...
Definition: SX127x.cpp:725
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:985
int16_t setEncoding(uint8_t encoding) override
Sets transmission encoding. Only available in FSK mode. Allowed values are RADIOLIB_ENCODING_NRZ,...
Definition: SX127x.cpp:1232
float getSNR()
Gets signal-to-noise ratio of the latest received packet. Only available in LoRa mode.
Definition: SX127x.cpp:823
int16_t setBroadcastAddress(uint8_t broadAddr)
Sets FSK broadcast address. Calling this method will enable address filtering. Only available in FSK ...
Definition: SX127x.cpp:999
int16_t setSyncWord(uint8_t syncWord)
Sets LoRa sync word. Only available in LoRa mode.
Definition: SX127x.cpp:688
uint16_t getIRQFlags()
Reads currently active IRQ flags, can be used to check which event caused an interrupt....
Definition: SX127x.cpp:1251
SX127x(Module *mod)
Default constructor. Called internally when creating new LoRa instance.
Definition: SX127x.cpp:4
int16_t setRSSIConfig(uint8_t smoothingSamples, int8_t offset=0)
Sets RSSI measurement configuration in FSK mode.
Definition: SX127x.cpp:1209
uint32_t getTimeOnAir(size_t len)
Get expected time-on-air for a given size of payload.
Definition: SX127x.cpp:1147
uint8_t getFHSSHoppingPeriod(void)
Gets FHSS hopping period.
Definition: SX127x.cpp:1532
int16_t scanChannel()
Performs scan for valid LoRa preamble in the current channel.
Definition: SX127x.cpp:260
int16_t setDIOMapping(RADIOLIB_PIN_TYPE pin, uint8_t value)
Configure DIO pin mapping to get a given signal on a DIO pin (if available).
Definition: SX127x.cpp:1549
float getDataRate() const
Get data rate of the latest transmitted packet.
Definition: SX127x.cpp:834
int16_t beginFSK(uint8_t chipVersion, float br, float freqDev, float rxBw, uint16_t preambleLength, bool enableOOK)
Initialization method for FSK modem. Will be called with appropriate parameters when calling FSK init...
Definition: SX127x.cpp:59
int16_t startReceive(uint8_t len=0, uint8_t mode=RADIOLIB_SX127X_RXCONTINUOUS)
Interrupt-driven receive method. DIO0 will be activated when full valid packet is received.
Definition: SX127x.cpp:367
void setDio1Action(void(*func)(void), RADIOLIB_INTERRUPT_STATUS dir=RISING)
Set interrupt service routine function to call when DIO1 activates.
Definition: SX127x.cpp:428
int16_t readData(String &str, size_t len=0)
Reads data that was received after calling startReceive method.
Definition: PhysicalLayer.cpp:61
void setRfSwitchPins(RADIOLIB_PIN_TYPE rxEn, RADIOLIB_PIN_TYPE txEn)
Some modules contain external RF switch controlled by two pins. This function gives RadioLib control ...
Definition: SX127x.cpp:1276
int16_t getChipVersion()
Read version SPI register. Should return SX1278_CHIP_VERSION (0x12) or SX1272_CHIP_VERSION (0x22) if ...
Definition: SX127x.cpp:1305
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:292
int16_t startTransmit(String &str, uint8_t addr=0)
Interrupt-driven Arduino String transmit method. Unlike the standard transmit method,...
Definition: PhysicalLayer.cpp:53
float getFrequencyError(bool autoCorrect=false)
Gets frequency error of the latest received packet.
Definition: SX127x.cpp:754
int16_t receive(String &str, size_t len=0)
Arduino String receive method.
Definition: PhysicalLayer.cpp:104
int16_t disableAddressFiltering()
Disables FSK address filtering.
Definition: SX127x.cpp:1013