RadioLib
Universal wireless communication library for Arduino
Loading...
Searching...
No Matches
SX126x.h
1#if !defined(_RADIOLIB_SX126X_H)
2#define _RADIOLIB_SX126X_H
3
4#include "../../TypeDef.h"
5
6#if !RADIOLIB_EXCLUDE_SX126X
7
8#include "../../Module.h"
9
10#include "../../protocols/PhysicalLayer/PhysicalLayer.h"
11#include "../../utils/FEC.h"
12#include "../../utils/CRC.h"
13
14// SX126X physical layer properties
15#define RADIOLIB_SX126X_FREQUENCY_STEP_SIZE 0.9536743164
16#define RADIOLIB_SX126X_MAX_PACKET_LENGTH 255
17#define RADIOLIB_SX126X_CRYSTAL_FREQ 32.0f
18#define RADIOLIB_SX126X_DIV_EXPONENT 25
19
20// SX126X SPI commands
21// operational modes commands
22#define RADIOLIB_SX126X_CMD_NOP 0x00
23#define RADIOLIB_SX126X_CMD_SET_SLEEP 0x84
24#define RADIOLIB_SX126X_CMD_SET_STANDBY 0x80
25#define RADIOLIB_SX126X_CMD_SET_FS 0xC1
26#define RADIOLIB_SX126X_CMD_SET_TX 0x83
27#define RADIOLIB_SX126X_CMD_SET_RX 0x82
28#define RADIOLIB_SX126X_CMD_STOP_TIMER_ON_PREAMBLE 0x9F
29#define RADIOLIB_SX126X_CMD_SET_RX_DUTY_CYCLE 0x94
30#define RADIOLIB_SX126X_CMD_SET_CAD 0xC5
31#define RADIOLIB_SX126X_CMD_SET_TX_CONTINUOUS_WAVE 0xD1
32#define RADIOLIB_SX126X_CMD_SET_TX_INFINITE_PREAMBLE 0xD2
33#define RADIOLIB_SX126X_CMD_SET_REGULATOR_MODE 0x96
34#define RADIOLIB_SX126X_CMD_CALIBRATE 0x89
35#define RADIOLIB_SX126X_CMD_CALIBRATE_IMAGE 0x98
36#define RADIOLIB_SX126X_CMD_SET_PA_CONFIG 0x95
37#define RADIOLIB_SX126X_CMD_SET_RX_TX_FALLBACK_MODE 0x93
38
39// register and buffer access commands
40#define RADIOLIB_SX126X_CMD_WRITE_REGISTER 0x0D
41#define RADIOLIB_SX126X_CMD_READ_REGISTER 0x1D
42#define RADIOLIB_SX126X_CMD_WRITE_BUFFER 0x0E
43#define RADIOLIB_SX126X_CMD_READ_BUFFER 0x1E
44
45// DIO and IRQ control
46#define RADIOLIB_SX126X_CMD_SET_DIO_IRQ_PARAMS 0x08
47#define RADIOLIB_SX126X_CMD_GET_IRQ_STATUS 0x12
48#define RADIOLIB_SX126X_CMD_CLEAR_IRQ_STATUS 0x02
49#define RADIOLIB_SX126X_CMD_SET_DIO2_AS_RF_SWITCH_CTRL 0x9D
50#define RADIOLIB_SX126X_CMD_SET_DIO3_AS_TCXO_CTRL 0x97
51
52// RF, modulation and packet commands
53#define RADIOLIB_SX126X_CMD_SET_RF_FREQUENCY 0x86
54#define RADIOLIB_SX126X_CMD_SET_PACKET_TYPE 0x8A
55#define RADIOLIB_SX126X_CMD_GET_PACKET_TYPE 0x11
56#define RADIOLIB_SX126X_CMD_SET_TX_PARAMS 0x8E
57#define RADIOLIB_SX126X_CMD_SET_MODULATION_PARAMS 0x8B
58#define RADIOLIB_SX126X_CMD_SET_PACKET_PARAMS 0x8C
59#define RADIOLIB_SX126X_CMD_SET_CAD_PARAMS 0x88
60#define RADIOLIB_SX126X_CMD_SET_BUFFER_BASE_ADDRESS 0x8F
61#define RADIOLIB_SX126X_CMD_SET_LORA_SYMB_NUM_TIMEOUT 0xA0
62
63// status commands
64#define RADIOLIB_SX126X_CMD_GET_STATUS 0xC0
65#define RADIOLIB_SX126X_CMD_GET_RSSI_INST 0x15
66#define RADIOLIB_SX126X_CMD_GET_RX_BUFFER_STATUS 0x13
67#define RADIOLIB_SX126X_CMD_GET_PACKET_STATUS 0x14
68#define RADIOLIB_SX126X_CMD_GET_DEVICE_ERRORS 0x17
69#define RADIOLIB_SX126X_CMD_CLEAR_DEVICE_ERRORS 0x07
70#define RADIOLIB_SX126X_CMD_GET_STATS 0x10
71#define RADIOLIB_SX126X_CMD_RESET_STATS 0x00
72
73#define RADIOLIB_SX126X_CMD_PRAM_UPDATE 0xD9
74#define RADIOLIB_SX126X_CMD_SET_LBT_SCAN_PARAMS 0x9A
75#define RADIOLIB_SX126X_CMD_SET_SPECTR_SCAN_PARAMS 0x9B
76
77// SX126X register map
78#define RADIOLIB_SX126X_REG_RX_GAIN_RETENTION_0 0x029F // SX1268 datasheet v1.1, section 9.6
79#define RADIOLIB_SX126X_REG_RX_GAIN_RETENTION_1 0x02A0 // SX1268 datasheet v1.1, section 9.6
80#define RADIOLIB_SX126X_REG_RX_GAIN_RETENTION_2 0x02A1 // SX1268 datasheet v1.1, section 9.6
81#define RADIOLIB_SX126X_REG_VERSION_STRING 0x0320
82#define RADIOLIB_SX126X_REG_HOPPING_ENABLE 0x0385
83#define RADIOLIB_SX126X_REG_LR_FHSS_PACKET_LENGTH 0x0386
84#define RADIOLIB_SX126X_REG_LR_FHSS_NUM_HOPPING_BLOCKS 0x0387
85#define RADIOLIB_SX126X_REG_LR_FHSS_NUM_SYMBOLS_FREQX_MSB(X) (0x0388 + (X)*6)
86#define RADIOLIB_SX126X_REG_LR_FHSS_NUM_SYMBOLS_FREQX_LSB(X) (0x0389 + (X)*6)
87#define RADIOLIB_SX126X_REG_LR_FHSS_FREQX_0(X) (0x038A + (X)*6)
88#define RADIOLIB_SX126X_REG_LR_FHSS_FREQX_1(X) (0x038B + (X)*6)
89#define RADIOLIB_SX126X_REG_LR_FHSS_FREQX_2(X) (0x038C + (X)*6)
90#define RADIOLIB_SX126X_REG_LR_FHSS_FREQX_3(X) (0x038D + (X)*6)
91#define RADIOLIB_SX126X_REG_SPECTRAL_SCAN_RESULT 0x0401
92#define RADIOLIB_SX126X_REG_DIOX_OUT_ENABLE 0x0580
93#define RADIOLIB_SX126X_REG_DIOX_DRIVE_STRENGTH 0x0582
94#define RADIOLIB_SX126X_REG_DIOX_IN_ENABLE 0x0583
95#define RADIOLIB_SX126X_REG_DIOX_PULL_UP_CTRL 0x0584
96#define RADIOLIB_SX126X_REG_DIOX_PULL_DOWN_CTRL 0x0585
97#define RADIOLIB_SX126X_REG_TX_BITBANG_ENABLE_0 0x0587
98#define RADIOLIB_SX126X_REG_PATCH_UPDATE_ENABLE 0x0610
99#define RADIOLIB_SX126X_REG_TX_BITBANG_ENABLE_1 0x0680
100#define RADIOLIB_SX126X_REG_WHITENING_INITIAL_MSB 0x06B8
101#define RADIOLIB_SX126X_REG_WHITENING_INITIAL_LSB 0x06B9
102#define RADIOLIB_SX126X_REG_RX_TX_PLD_LEN 0x06BB
103#define RADIOLIB_SX126X_REG_CRC_INITIAL_MSB 0x06BC
104#define RADIOLIB_SX126X_REG_CRC_INITIAL_LSB 0x06BD
105#define RADIOLIB_SX126X_REG_CRC_POLYNOMIAL_MSB 0x06BE
106#define RADIOLIB_SX126X_REG_CRC_POLYNOMIAL_LSB 0x06BF
107#define RADIOLIB_SX126X_REG_SYNC_WORD_0 0x06C0
108#define RADIOLIB_SX126X_REG_SYNC_WORD_1 0x06C1
109#define RADIOLIB_SX126X_REG_SYNC_WORD_2 0x06C2
110#define RADIOLIB_SX126X_REG_SYNC_WORD_3 0x06C3
111#define RADIOLIB_SX126X_REG_SYNC_WORD_4 0x06C4
112#define RADIOLIB_SX126X_REG_SYNC_WORD_5 0x06C5
113#define RADIOLIB_SX126X_REG_SYNC_WORD_6 0x06C6
114#define RADIOLIB_SX126X_REG_SYNC_WORD_7 0x06C7
115#define RADIOLIB_SX126X_REG_NODE_ADDRESS 0x06CD
116#define RADIOLIB_SX126X_REG_BROADCAST_ADDRESS 0x06CE
117#define RADIOLIB_SX126X_REG_PAYLOAD_LENGTH 0x0702
118#define RADIOLIB_SX126X_REG_PACKET_PARAMS 0x0704
119#define RADIOLIB_SX126X_REG_LORA_SYNC_TIMEOUT 0x0706
120#define RADIOLIB_SX126X_REG_IQ_CONFIG 0x0736
121#define RADIOLIB_SX126X_REG_LORA_SYNC_WORD_MSB 0x0740
122#define RADIOLIB_SX126X_REG_LORA_SYNC_WORD_LSB 0x0741
123#define RADIOLIB_SX126X_REG_LORA_RX_CODING_RATE 0x0749
124#define RADIOLIB_SX126X_REG_FREQ_ERROR_RX_CRC 0x076B
125#define RADIOLIB_SX126X_REG_SPECTRAL_SCAN_STATUS 0x07CD
126#define RADIOLIB_SX126X_REG_RX_ADDR_PTR 0x0803
127#define RADIOLIB_SX126X_REG_RANDOM_NUMBER_0 0x0819
128#define RADIOLIB_SX126X_REG_RANDOM_NUMBER_1 0x081A
129#define RADIOLIB_SX126X_REG_RANDOM_NUMBER_2 0x081B
130#define RADIOLIB_SX126X_REG_RANDOM_NUMBER_3 0x081C
131#define RADIOLIB_SX126X_REG_SENSITIVITY_CONFIG 0x0889 // SX1268 datasheet v1.1, section 15.1
132#define RADIOLIB_SX126X_REG_RF_FREQUENCY_0 0x088B
133#define RADIOLIB_SX126X_REG_RF_FREQUENCY_1 0x088C
134#define RADIOLIB_SX126X_REG_RF_FREQUENCY_2 0x088D
135#define RADIOLIB_SX126X_REG_RF_FREQUENCY_3 0x088E
136#define RADIOLIB_SX126X_REG_RSSI_AVG_WINDOW 0x089B
137#define RADIOLIB_SX126X_REG_RX_GAIN 0x08AC
138#define RADIOLIB_SX126X_REG_TX_CLAMP_CONFIG 0x08D8
139#define RADIOLIB_SX126X_REG_ANA_LNA 0x08E2
140#define RADIOLIB_SX126X_REG_LNA_CAP_TUNE_N 0x08E3
141#define RADIOLIB_SX126X_REG_LNA_CAP_TUNE_P 0x08E4
142#define RADIOLIB_SX126X_REG_ANA_MIXER 0x08E5
143#define RADIOLIB_SX126X_REG_OCP_CONFIGURATION 0x08E7
144#define RADIOLIB_SX126X_REG_RTC_CTRL 0x0902
145#define RADIOLIB_SX126X_REG_XTA_TRIM 0x0911
146#define RADIOLIB_SX126X_REG_XTB_TRIM 0x0912
147#define RADIOLIB_SX126X_REG_DIO3_OUT_VOLTAGE_CTRL 0x0920
148#define RADIOLIB_SX126X_REG_EVENT_MASK 0x0944
149#define RADIOLIB_SX126X_REG_PATCH_MEMORY_BASE 0x8000
150
151// SX126X SPI command variables
152//RADIOLIB_SX126X_CMD_SET_SLEEP MSB LSB DESCRIPTION
153#define RADIOLIB_SX126X_SLEEP_START_COLD 0b00000000 // 2 2 sleep mode: cold start, configuration is lost (default)
154#define RADIOLIB_SX126X_SLEEP_START_WARM 0b00000100 // 2 2 warm start, configuration is retained
155#define RADIOLIB_SX126X_SLEEP_RTC_OFF 0b00000000 // 0 0 wake on RTC timeout: disabled
156#define RADIOLIB_SX126X_SLEEP_RTC_ON 0b00000001 // 0 0 enabled
157
158//RADIOLIB_SX126X_CMD_SET_STANDBY
159#define RADIOLIB_SX126X_STANDBY_RC 0x00 // 7 0 standby mode: 13 MHz RC oscillator
160#define RADIOLIB_SX126X_STANDBY_XOSC 0x01 // 7 0 32 MHz crystal oscillator
161
162//RADIOLIB_SX126X_CMD_SET_RX
163#define RADIOLIB_SX126X_RX_TIMEOUT_NONE 0x000000 // 23 0 Rx timeout duration: no timeout (Rx single mode)
164#define RADIOLIB_SX126X_RX_TIMEOUT_INF 0xFFFFFF // 23 0 infinite (Rx continuous mode)
165
166//RADIOLIB_SX126X_CMD_SET_TX
167#define RADIOLIB_SX126X_TX_TIMEOUT_NONE 0x000000 // 23 0 Tx timeout duration: no timeout (Tx single mode)
168
169//RADIOLIB_SX126X_CMD_STOP_TIMER_ON_PREAMBLE
170#define RADIOLIB_SX126X_STOP_ON_PREAMBLE_OFF 0x00 // 7 0 stop timer on: sync word or header (default)
171#define RADIOLIB_SX126X_STOP_ON_PREAMBLE_ON 0x01 // 7 0 preamble detection
172
173//RADIOLIB_SX126X_CMD_SET_REGULATOR_MODE
174#define RADIOLIB_SX126X_REGULATOR_LDO 0x00 // 7 0 set regulator mode: LDO (default)
175#define RADIOLIB_SX126X_REGULATOR_DC_DC 0x01 // 7 0 DC-DC
176
177//RADIOLIB_SX126X_CMD_CALIBRATE
178#define RADIOLIB_SX126X_CALIBRATE_IMAGE_OFF 0b00000000 // 6 6 image calibration: disabled
179#define RADIOLIB_SX126X_CALIBRATE_IMAGE_ON 0b01000000 // 6 6 enabled
180#define RADIOLIB_SX126X_CALIBRATE_ADC_BULK_P_OFF 0b00000000 // 5 5 ADC bulk P calibration: disabled
181#define RADIOLIB_SX126X_CALIBRATE_ADC_BULK_P_ON 0b00100000 // 5 5 enabled
182#define RADIOLIB_SX126X_CALIBRATE_ADC_BULK_N_OFF 0b00000000 // 4 4 ADC bulk N calibration: disabled
183#define RADIOLIB_SX126X_CALIBRATE_ADC_BULK_N_ON 0b00010000 // 4 4 enabled
184#define RADIOLIB_SX126X_CALIBRATE_ADC_PULSE_OFF 0b00000000 // 3 3 ADC pulse calibration: disabled
185#define RADIOLIB_SX126X_CALIBRATE_ADC_PULSE_ON 0b00001000 // 3 3 enabled
186#define RADIOLIB_SX126X_CALIBRATE_PLL_OFF 0b00000000 // 2 2 PLL calibration: disabled
187#define RADIOLIB_SX126X_CALIBRATE_PLL_ON 0b00000100 // 2 2 enabled
188#define RADIOLIB_SX126X_CALIBRATE_RC13M_OFF 0b00000000 // 1 1 13 MHz RC osc. calibration: disabled
189#define RADIOLIB_SX126X_CALIBRATE_RC13M_ON 0b00000010 // 1 1 enabled
190#define RADIOLIB_SX126X_CALIBRATE_RC64K_OFF 0b00000000 // 0 0 64 kHz RC osc. calibration: disabled
191#define RADIOLIB_SX126X_CALIBRATE_RC64K_ON 0b00000001 // 0 0 enabled
192#define RADIOLIB_SX126X_CALIBRATE_ALL 0b01111111 // 6 0 calibrate all blocks
193
194//RADIOLIB_SX126X_CMD_CALIBRATE_IMAGE
195#define RADIOLIB_SX126X_CAL_IMG_430_MHZ_1 0x6B
196#define RADIOLIB_SX126X_CAL_IMG_430_MHZ_2 0x6F
197#define RADIOLIB_SX126X_CAL_IMG_470_MHZ_1 0x75
198#define RADIOLIB_SX126X_CAL_IMG_470_MHZ_2 0x81
199#define RADIOLIB_SX126X_CAL_IMG_779_MHZ_1 0xC1
200#define RADIOLIB_SX126X_CAL_IMG_779_MHZ_2 0xC5
201#define RADIOLIB_SX126X_CAL_IMG_863_MHZ_1 0xD7
202#define RADIOLIB_SX126X_CAL_IMG_863_MHZ_2 0xDB
203#define RADIOLIB_SX126X_CAL_IMG_902_MHZ_1 0xE1
204#define RADIOLIB_SX126X_CAL_IMG_902_MHZ_2 0xE9
205#define RADIOLIB_SX126X_CAL_IMG_FREQ_TRIG_MHZ (20.0f)
206
207//RADIOLIB_SX126X_CMD_SET_PA_CONFIG
208#define RADIOLIB_SX126X_PA_CONFIG_HP_MAX 0x07
209#define RADIOLIB_SX126X_PA_CONFIG_PA_LUT 0x01
210#define RADIOLIB_SX126X_PA_CONFIG_SX1262_8 0x00
211
212//RADIOLIB_SX126X_CMD_SET_RX_TX_FALLBACK_MODE
213#define RADIOLIB_SX126X_RX_TX_FALLBACK_MODE_FS 0x40 // 7 0 after Rx/Tx go to: FS mode
214#define RADIOLIB_SX126X_RX_TX_FALLBACK_MODE_STDBY_XOSC 0x30 // 7 0 standby with crystal oscillator
215#define RADIOLIB_SX126X_RX_TX_FALLBACK_MODE_STDBY_RC 0x20 // 7 0 standby with RC oscillator (default)
216
217//RADIOLIB_SX126X_CMD_SET_DIO_IRQ_PARAMS
218#define RADIOLIB_SX126X_IRQ_LR_FHSS_HOP 0b0100000000000000 // 14 14 PA ramped up during LR-FHSS hop
219#define RADIOLIB_SX126X_IRQ_TIMEOUT 0b0000001000000000 // 9 9 Rx or Tx timeout
220#define RADIOLIB_SX126X_IRQ_CAD_DETECTED 0b0000000100000000 // 8 8 channel activity detected
221#define RADIOLIB_SX126X_IRQ_CAD_DONE 0b0000000010000000 // 7 7 channel activity detection finished
222#define RADIOLIB_SX126X_IRQ_CRC_ERR 0b0000000001000000 // 6 6 wrong CRC received
223#define RADIOLIB_SX126X_IRQ_HEADER_ERR 0b0000000000100000 // 5 5 LoRa header CRC error
224#define RADIOLIB_SX126X_IRQ_HEADER_VALID 0b0000000000010000 // 4 4 valid LoRa header received
225#define RADIOLIB_SX126X_IRQ_SYNC_WORD_VALID 0b0000000000001000 // 3 3 valid sync word detected
226#define RADIOLIB_SX126X_IRQ_PREAMBLE_DETECTED 0b0000000000000100 // 2 2 preamble detected
227#define RADIOLIB_SX126X_IRQ_RX_DONE 0b0000000000000010 // 1 1 packet received
228#define RADIOLIB_SX126X_IRQ_TX_DONE 0b0000000000000001 // 0 0 packet transmission completed
229#define RADIOLIB_SX126X_IRQ_ALL 0b0100001111111111 // 14 0 all interrupts
230#define RADIOLIB_SX126X_IRQ_NONE 0b0000000000000000 // 14 0 no interrupts
231
232//RADIOLIB_SX126X_CMD_SET_DIO2_AS_RF_SWITCH_CTRL
233#define RADIOLIB_SX126X_DIO2_AS_IRQ 0x00 // 7 0 DIO2 configuration: IRQ
234#define RADIOLIB_SX126X_DIO2_AS_RF_SWITCH 0x01 // 7 0 RF switch control
235
236//RADIOLIB_SX126X_CMD_SET_DIO3_AS_TCXO_CTRL
237#define RADIOLIB_SX126X_DIO3_OUTPUT_1_6 0x00 // 7 0 DIO3 voltage output for TCXO: 1.6 V
238#define RADIOLIB_SX126X_DIO3_OUTPUT_1_7 0x01 // 7 0 1.7 V
239#define RADIOLIB_SX126X_DIO3_OUTPUT_1_8 0x02 // 7 0 1.8 V
240#define RADIOLIB_SX126X_DIO3_OUTPUT_2_2 0x03 // 7 0 2.2 V
241#define RADIOLIB_SX126X_DIO3_OUTPUT_2_4 0x04 // 7 0 2.4 V
242#define RADIOLIB_SX126X_DIO3_OUTPUT_2_7 0x05 // 7 0 2.7 V
243#define RADIOLIB_SX126X_DIO3_OUTPUT_3_0 0x06 // 7 0 3.0 V
244#define RADIOLIB_SX126X_DIO3_OUTPUT_3_3 0x07 // 7 0 3.3 V
245
246//RADIOLIB_SX126X_CMD_SET_PACKET_TYPE
247#define RADIOLIB_SX126X_PACKET_TYPE_GFSK 0x00 // 7 0 packet type: GFSK
248#define RADIOLIB_SX126X_PACKET_TYPE_LORA 0x01 // 7 0 LoRa
249#define RADIOLIB_SX126X_PACKET_TYPE_LR_FHSS 0x03 // 7 0 LR-FHSS
250
251//RADIOLIB_SX126X_CMD_SET_TX_PARAMS
252#define RADIOLIB_SX126X_PA_RAMP_10U 0x00 // 7 0 ramp time: 10 us
253#define RADIOLIB_SX126X_PA_RAMP_20U 0x01 // 7 0 20 us
254#define RADIOLIB_SX126X_PA_RAMP_40U 0x02 // 7 0 40 us
255#define RADIOLIB_SX126X_PA_RAMP_80U 0x03 // 7 0 80 us
256#define RADIOLIB_SX126X_PA_RAMP_200U 0x04 // 7 0 200 us
257#define RADIOLIB_SX126X_PA_RAMP_800U 0x05 // 7 0 800 us
258#define RADIOLIB_SX126X_PA_RAMP_1700U 0x06 // 7 0 1700 us
259#define RADIOLIB_SX126X_PA_RAMP_3400U 0x07 // 7 0 3400 us
260
261//RADIOLIB_SX126X_CMD_SET_MODULATION_PARAMS
262#define RADIOLIB_SX126X_GFSK_FILTER_NONE 0x00 // 7 0 GFSK filter: none
263#define RADIOLIB_SX126X_GFSK_FILTER_GAUSS_0_3 0x08 // 7 0 Gaussian, BT = 0.3
264#define RADIOLIB_SX126X_GFSK_FILTER_GAUSS_0_5 0x09 // 7 0 Gaussian, BT = 0.5
265#define RADIOLIB_SX126X_GFSK_FILTER_GAUSS_0_7 0x0A // 7 0 Gaussian, BT = 0.7
266#define RADIOLIB_SX126X_GFSK_FILTER_GAUSS_1 0x0B // 7 0 Gaussian, BT = 1
267#define RADIOLIB_SX126X_GFSK_RX_BW_4_8 0x1F // 7 0 GFSK Rx bandwidth: 4.8 kHz
268#define RADIOLIB_SX126X_GFSK_RX_BW_5_8 0x17 // 7 0 5.8 kHz
269#define RADIOLIB_SX126X_GFSK_RX_BW_7_3 0x0F // 7 0 7.3 kHz
270#define RADIOLIB_SX126X_GFSK_RX_BW_9_7 0x1E // 7 0 9.7 kHz
271#define RADIOLIB_SX126X_GFSK_RX_BW_11_7 0x16 // 7 0 11.7 kHz
272#define RADIOLIB_SX126X_GFSK_RX_BW_14_6 0x0E // 7 0 14.6 kHz
273#define RADIOLIB_SX126X_GFSK_RX_BW_19_5 0x1D // 7 0 19.5 kHz
274#define RADIOLIB_SX126X_GFSK_RX_BW_23_4 0x15 // 7 0 23.4 kHz
275#define RADIOLIB_SX126X_GFSK_RX_BW_29_3 0x0D // 7 0 29.3 kHz
276#define RADIOLIB_SX126X_GFSK_RX_BW_39_0 0x1C // 7 0 39.0 kHz
277#define RADIOLIB_SX126X_GFSK_RX_BW_46_9 0x14 // 7 0 46.9 kHz
278#define RADIOLIB_SX126X_GFSK_RX_BW_58_6 0x0C // 7 0 58.6 kHz
279#define RADIOLIB_SX126X_GFSK_RX_BW_78_2 0x1B // 7 0 78.2 kHz
280#define RADIOLIB_SX126X_GFSK_RX_BW_93_8 0x13 // 7 0 93.8 kHz
281#define RADIOLIB_SX126X_GFSK_RX_BW_117_3 0x0B // 7 0 117.3 kHz
282#define RADIOLIB_SX126X_GFSK_RX_BW_156_2 0x1A // 7 0 156.2 kHz
283#define RADIOLIB_SX126X_GFSK_RX_BW_187_2 0x12 // 7 0 187.2 kHz
284#define RADIOLIB_SX126X_GFSK_RX_BW_234_3 0x0A // 7 0 234.3 kHz
285#define RADIOLIB_SX126X_GFSK_RX_BW_312_0 0x19 // 7 0 312.0 kHz
286#define RADIOLIB_SX126X_GFSK_RX_BW_373_6 0x11 // 7 0 373.6 kHz
287#define RADIOLIB_SX126X_GFSK_RX_BW_467_0 0x09 // 7 0 467.0 kHz
288#define RADIOLIB_SX126X_LORA_BW_7_8 0x00 // 7 0 LoRa bandwidth: 7.8 kHz
289#define RADIOLIB_SX126X_LORA_BW_10_4 0x08 // 7 0 10.4 kHz
290#define RADIOLIB_SX126X_LORA_BW_15_6 0x01 // 7 0 15.6 kHz
291#define RADIOLIB_SX126X_LORA_BW_20_8 0x09 // 7 0 20.8 kHz
292#define RADIOLIB_SX126X_LORA_BW_31_25 0x02 // 7 0 31.25 kHz
293#define RADIOLIB_SX126X_LORA_BW_41_7 0x0A // 7 0 41.7 kHz
294#define RADIOLIB_SX126X_LORA_BW_62_5 0x03 // 7 0 62.5 kHz
295#define RADIOLIB_SX126X_LORA_BW_125_0 0x04 // 7 0 125.0 kHz
296#define RADIOLIB_SX126X_LORA_BW_250_0 0x05 // 7 0 250.0 kHz
297#define RADIOLIB_SX126X_LORA_BW_500_0 0x06 // 7 0 500.0 kHz
298#define RADIOLIB_SX126X_LORA_CR_4_5 0x01 // 7 0 LoRa coding rate: 4/5
299#define RADIOLIB_SX126X_LORA_CR_4_6 0x02 // 7 0 4/6
300#define RADIOLIB_SX126X_LORA_CR_4_7 0x03 // 7 0 4/7
301#define RADIOLIB_SX126X_LORA_CR_4_8 0x04 // 7 0 4/8
302#define RADIOLIB_SX126X_LORA_LOW_DATA_RATE_OPTIMIZE_OFF 0x00 // 7 0 LoRa low data rate optimization: disabled
303#define RADIOLIB_SX126X_LORA_LOW_DATA_RATE_OPTIMIZE_ON 0x01 // 7 0 enabled
304
305//RADIOLIB_SX126X_CMD_SET_PACKET_PARAMS
306#define RADIOLIB_SX126X_GFSK_PREAMBLE_DETECT_OFF 0x00 // 7 0 GFSK minimum preamble length before reception starts: detector disabled
307#define RADIOLIB_SX126X_GFSK_PREAMBLE_DETECT_8 0x04 // 7 0 8 bits
308#define RADIOLIB_SX126X_GFSK_PREAMBLE_DETECT_16 0x05 // 7 0 16 bits
309#define RADIOLIB_SX126X_GFSK_PREAMBLE_DETECT_24 0x06 // 7 0 24 bits
310#define RADIOLIB_SX126X_GFSK_PREAMBLE_DETECT_32 0x07 // 7 0 32 bits
311#define RADIOLIB_SX126X_GFSK_ADDRESS_FILT_OFF 0x00 // 7 0 GFSK address filtering: disabled
312#define RADIOLIB_SX126X_GFSK_ADDRESS_FILT_NODE 0x01 // 7 0 node only
313#define RADIOLIB_SX126X_GFSK_ADDRESS_FILT_NODE_BROADCAST 0x02 // 7 0 node and broadcast
314#define RADIOLIB_SX126X_GFSK_PACKET_FIXED 0x00 // 7 0 GFSK packet type: fixed (payload length known in advance to both sides)
315#define RADIOLIB_SX126X_GFSK_PACKET_VARIABLE 0x01 // 7 0 variable (payload length added to packet)
316#define RADIOLIB_SX126X_GFSK_CRC_OFF 0x01 // 7 0 GFSK packet CRC: disabled
317#define RADIOLIB_SX126X_GFSK_CRC_1_BYTE 0x00 // 7 0 1 byte
318#define RADIOLIB_SX126X_GFSK_CRC_2_BYTE 0x02 // 7 0 2 byte
319#define RADIOLIB_SX126X_GFSK_CRC_1_BYTE_INV 0x04 // 7 0 1 byte, inverted
320#define RADIOLIB_SX126X_GFSK_CRC_2_BYTE_INV 0x06 // 7 0 2 byte, inverted
321#define RADIOLIB_SX126X_GFSK_WHITENING_OFF 0x00 // 7 0 GFSK data whitening: disabled
322#define RADIOLIB_SX126X_GFSK_WHITENING_ON 0x01 // 7 0 enabled
323#define RADIOLIB_SX126X_LORA_HEADER_EXPLICIT 0x00 // 7 0 LoRa header mode: explicit
324#define RADIOLIB_SX126X_LORA_HEADER_IMPLICIT 0x01 // 7 0 implicit
325#define RADIOLIB_SX126X_LORA_CRC_OFF 0x00 // 7 0 LoRa CRC mode: disabled
326#define RADIOLIB_SX126X_LORA_CRC_ON 0x01 // 7 0 enabled
327#define RADIOLIB_SX126X_LORA_IQ_STANDARD 0x00 // 7 0 LoRa IQ setup: standard
328#define RADIOLIB_SX126X_LORA_IQ_INVERTED 0x01 // 7 0 inverted
329
330//RADIOLIB_SX126X_CMD_SET_CAD_PARAMS
331#define RADIOLIB_SX126X_CAD_ON_1_SYMB 0x00 // 7 0 number of symbols used for CAD: 1
332#define RADIOLIB_SX126X_CAD_ON_2_SYMB 0x01 // 7 0 2
333#define RADIOLIB_SX126X_CAD_ON_4_SYMB 0x02 // 7 0 4
334#define RADIOLIB_SX126X_CAD_ON_8_SYMB 0x03 // 7 0 8
335#define RADIOLIB_SX126X_CAD_ON_16_SYMB 0x04 // 7 0 16
336#define RADIOLIB_SX126X_CAD_GOTO_STDBY 0x00 // 7 0 after CAD is done, always go to STDBY_RC mode
337#define RADIOLIB_SX126X_CAD_GOTO_RX 0x01 // 7 0 after CAD is done, go to Rx mode if activity is detected
338#define RADIOLIB_SX126X_CAD_PARAM_DEFAULT 0xFF // 7 0 used by the CAD methods to specify default parameter value
339#define RADIOLIB_SX126X_CAD_PARAM_DET_MIN 10 // 7 0 default detMin CAD parameter
340
341//RADIOLIB_SX126X_CMD_GET_STATUS
342#define RADIOLIB_SX126X_STATUS_MODE_STDBY_RC 0b00100000 // 6 4 current chip mode: STDBY_RC
343#define RADIOLIB_SX126X_STATUS_MODE_STDBY_XOSC 0b00110000 // 6 4 STDBY_XOSC
344#define RADIOLIB_SX126X_STATUS_MODE_FS 0b01000000 // 6 4 FS
345#define RADIOLIB_SX126X_STATUS_MODE_RX 0b01010000 // 6 4 RX
346#define RADIOLIB_SX126X_STATUS_MODE_TX 0b01100000 // 6 4 TX
347#define RADIOLIB_SX126X_STATUS_DATA_AVAILABLE 0b00000100 // 3 1 command status: packet received and data can be retrieved
348#define RADIOLIB_SX126X_STATUS_CMD_TIMEOUT 0b00000110 // 3 1 SPI command timed out
349#define RADIOLIB_SX126X_STATUS_CMD_INVALID 0b00001000 // 3 1 invalid SPI command
350#define RADIOLIB_SX126X_STATUS_CMD_FAILED 0b00001010 // 3 1 SPI command failed to execute
351#define RADIOLIB_SX126X_STATUS_TX_DONE 0b00001100 // 3 1 packet transmission done
352#define RADIOLIB_SX126X_STATUS_SPI_FAILED 0b11111111 // 7 0 SPI transaction failed
353
354//RADIOLIB_SX126X_CMD_GET_PACKET_STATUS
355#define RADIOLIB_SX126X_GFSK_RX_STATUS_PREAMBLE_ERR 0b10000000 // 7 7 GFSK Rx status: preamble error
356#define RADIOLIB_SX126X_GFSK_RX_STATUS_SYNC_ERR 0b01000000 // 6 6 sync word error
357#define RADIOLIB_SX126X_GFSK_RX_STATUS_ADRS_ERR 0b00100000 // 5 5 address error
358#define RADIOLIB_SX126X_GFSK_RX_STATUS_CRC_ERR 0b00010000 // 4 4 CRC error
359#define RADIOLIB_SX126X_GFSK_RX_STATUS_LENGTH_ERR 0b00001000 // 3 3 length error
360#define RADIOLIB_SX126X_GFSK_RX_STATUS_ABORT_ERR 0b00000100 // 2 2 abort error
361#define RADIOLIB_SX126X_GFSK_RX_STATUS_PACKET_RECEIVED 0b00000010 // 2 2 packet received
362#define RADIOLIB_SX126X_GFSK_RX_STATUS_PACKET_SENT 0b00000001 // 2 2 packet sent
363
364//RADIOLIB_SX126X_CMD_GET_DEVICE_ERRORS
365#define RADIOLIB_SX126X_PA_RAMP_ERR 0b100000000 // 8 8 device errors: PA ramping failed
366#define RADIOLIB_SX126X_PLL_LOCK_ERR 0b001000000 // 6 6 PLL failed to lock
367#define RADIOLIB_SX126X_XOSC_START_ERR 0b000100000 // 5 5 crystal oscillator failed to start
368#define RADIOLIB_SX126X_IMG_CALIB_ERR 0b000010000 // 4 4 image calibration failed
369#define RADIOLIB_SX126X_ADC_CALIB_ERR 0b000001000 // 3 3 ADC calibration failed
370#define RADIOLIB_SX126X_PLL_CALIB_ERR 0b000000100 // 2 2 PLL calibration failed
371#define RADIOLIB_SX126X_RC13M_CALIB_ERR 0b000000010 // 1 1 RC13M calibration failed
372#define RADIOLIB_SX126X_RC64K_CALIB_ERR 0b000000001 // 0 0 RC64K calibration failed
373
374//RADIOLIB_SX126X_CMD_SET_LBT_SCAN_PARAMS + RADIOLIB_SX126X_CMD_SET_SPECTR_SCAN_PARAMS
375#define RADIOLIB_SX126X_SCAN_INTERVAL_7_68_US 10 // 7 0 RSSI reading interval: 7.68 us
376#define RADIOLIB_SX126X_SCAN_INTERVAL_8_20_US 11 // 7 0 8.20 us
377#define RADIOLIB_SX126X_SCAN_INTERVAL_8_68_US 12 // 7 0 8.68 us
378
379// SX126X SPI register variables
380//RADIOLIB_SX126X_REG_HOPPING_ENABLE
381#define RADIOLIB_SX126X_HOPPING_ENABLED 0b00000001 // 0 0 intra-packet hopping for LR-FHSS: enabled
382#define RADIOLIB_SX126X_HOPPING_DISABLED 0b00000000 // 0 0 (disabled)
383
384//RADIOLIB_SX126X_REG_LORA_SYNC_WORD_MSB + LSB
385#define RADIOLIB_SX126X_SYNC_WORD_PUBLIC 0x34 // actually 0x3444 NOTE: The low nibbles in each byte (0x_4_4) are masked out since apparently, they're reserved.
386#define RADIOLIB_SX126X_SYNC_WORD_PRIVATE 0x12 // actually 0x1424 You couldn't make this up if you tried.
387
388// RADIOLIB_SX126X_REG_TX_BITBANG_ENABLE_1
389#define RADIOLIB_SX126X_TX_BITBANG_1_DISABLED 0b00000000 // 6 4 Tx bitbang: disabled (default)
390#define RADIOLIB_SX126X_TX_BITBANG_1_ENABLED 0b00010000 // 6 4 enabled
391
392// RADIOLIB_SX126X_REG_TX_BITBANG_ENABLE_0
393#define RADIOLIB_SX126X_TX_BITBANG_0_DISABLED 0b00000000 // 3 0 Tx bitbang: disabled (default)
394#define RADIOLIB_SX126X_TX_BITBANG_0_ENABLED 0b00001100 // 3 0 enabled
395
396// RADIOLIB_SX126X_REG_DIOX_OUT_ENABLE
397#define RADIOLIB_SX126X_DIO1_OUT_DISABLED 0b00000010 // 1 1 DIO1 output: disabled
398#define RADIOLIB_SX126X_DIO1_OUT_ENABLED 0b00000000 // 1 1 enabled
399#define RADIOLIB_SX126X_DIO2_OUT_DISABLED 0b00000100 // 2 2 DIO2 output: disabled
400#define RADIOLIB_SX126X_DIO2_OUT_ENABLED 0b00000000 // 2 2 enabled
401#define RADIOLIB_SX126X_DIO3_OUT_DISABLED 0b00001000 // 3 3 DIO3 output: disabled
402#define RADIOLIB_SX126X_DIO3_OUT_ENABLED 0b00000000 // 3 3 enabled
403
404// RADIOLIB_SX126X_REG_DIOX_IN_ENABLE
405#define RADIOLIB_SX126X_DIO1_IN_DISABLED 0b00000000 // 1 1 DIO1 input: disabled
406#define RADIOLIB_SX126X_DIO1_IN_ENABLED 0b00000010 // 1 1 enabled
407#define RADIOLIB_SX126X_DIO2_IN_DISABLED 0b00000000 // 2 2 DIO2 input: disabled
408#define RADIOLIB_SX126X_DIO2_IN_ENABLED 0b00000100 // 2 2 enabled
409#define RADIOLIB_SX126X_DIO3_IN_DISABLED 0b00000000 // 3 3 DIO3 input: disabled
410#define RADIOLIB_SX126X_DIO3_IN_ENABLED 0b00001000 // 3 3 enabled
411
412// RADIOLIB_SX126X_REG_RX_GAIN
413#define RADIOLIB_SX126X_RX_GAIN_BOOSTED 0x96 // 7 0 Rx gain: boosted
414#define RADIOLIB_SX126X_RX_GAIN_POWER_SAVING 0x94 // 7 0 power saving
415#define RADIOLIB_SX126X_RX_GAIN_SPECTRAL_SCAN 0xCB // 7 0 spectral scan
416
417// RADIOLIB_SX126X_REG_PATCH_UPDATE_ENABLE
418#define RADIOLIB_SX126X_PATCH_UPDATE_DISABLED 0b00000000 // 4 4 patch update: disabled
419#define RADIOLIB_SX126X_PATCH_UPDATE_ENABLED 0b00010000 // 4 4 enabled
420
421// RADIOLIB_SX126X_REG_SPECTRAL_SCAN_STATUS
422#define RADIOLIB_SX126X_SPECTRAL_SCAN_NONE 0x00 // 7 0 spectral scan status: none
423#define RADIOLIB_SX126X_SPECTRAL_SCAN_ONGOING 0x0F // 7 0 ongoing
424#define RADIOLIB_SX126X_SPECTRAL_SCAN_ABORTED 0xF0 // 7 0 aborted
425#define RADIOLIB_SX126X_SPECTRAL_SCAN_COMPLETED 0xFF // 7 0 completed
426
427// RADIOLIB_SX126X_REG_RSSI_AVG_WINDOW
428#define RADIOLIB_SX126X_SPECTRAL_SCAN_WINDOW_DEFAULT (0x05 << 2) // 7 0 default RSSI average window
429
430// RADIOLIB_SX126X_REG_ANA_LNA
431#define RADIOLIB_SX126X_LNA_RNG_DISABLED 0b00000001 // 0 0 random number: disabled
432#define RADIOLIB_SX126X_LNA_RNG_ENABLED 0b00000000 // 0 0 enabled
433
434// RADIOLIB_SX126X_REG_ANA_MIXER
435#define RADIOLIB_SX126X_MIXER_RNG_DISABLED 0b00000001 // 7 7 random number: disabled
436#define RADIOLIB_SX126X_MIXER_RNG_ENABLED 0b00000000 // 7 7 enabled
437
438// size of the spectral scan result
439#define RADIOLIB_SX126X_SPECTRAL_SCAN_RES_SIZE (33)
440
441// LR-FHSS configuration
442#define RADIOLIB_SX126X_LR_FHSS_CR_5_6 (0x00UL << 0) // 7 0 LR FHSS coding rate: 5/6
443#define RADIOLIB_SX126X_LR_FHSS_CR_2_3 (0x01UL << 0) // 7 0 2/3
444#define RADIOLIB_SX126X_LR_FHSS_CR_1_2 (0x02UL << 0) // 7 0 1/2
445#define RADIOLIB_SX126X_LR_FHSS_CR_1_3 (0x03UL << 0) // 7 0 1/3
446#define RADIOLIB_SX126X_LR_FHSS_MOD_TYPE_GMSK (0x00UL << 0) // 7 0 LR FHSS modulation: GMSK
447#define RADIOLIB_SX126X_LR_FHSS_GRID_STEP_FCC (0x00UL << 0) // 7 0 LR FHSS step size: 25.390625 kHz (FCC)
448#define RADIOLIB_SX126X_LR_FHSS_GRID_STEP_NON_FCC (0x01UL << 0) // 7 0 3.90625 kHz (non-FCC)
449#define RADIOLIB_SX126X_LR_FHSS_HOPPING_DISABLED (0x00UL << 0) // 7 0 LR FHSS hopping: disabled
450#define RADIOLIB_SX126X_LR_FHSS_HOPPING_ENABLED (0x01UL << 0) // 7 0 enabled
451#define RADIOLIB_SX126X_LR_FHSS_BW_39_06 (0x00UL << 0) // 7 0 LR FHSS bandwidth: 39.06 kHz
452#define RADIOLIB_SX126X_LR_FHSS_BW_85_94 (0x01UL << 0) // 7 0 85.94 kHz
453#define RADIOLIB_SX126X_LR_FHSS_BW_136_72 (0x02UL << 0) // 7 0 136.72 kHz
454#define RADIOLIB_SX126X_LR_FHSS_BW_183_59 (0x03UL << 0) // 7 0 183.59 kHz
455#define RADIOLIB_SX126X_LR_FHSS_BW_335_94 (0x04UL << 0) // 7 0 335.94 kHz
456#define RADIOLIB_SX126X_LR_FHSS_BW_386_72 (0x05UL << 0) // 7 0 386.72 kHz
457#define RADIOLIB_SX126X_LR_FHSS_BW_722_66 (0x06UL << 0) // 7 0 722.66 kHz
458#define RADIOLIB_SX126X_LR_FHSS_BW_773_44 (0x07UL << 0) // 7 0 773.44 kHz
459#define RADIOLIB_SX126X_LR_FHSS_BW_1523_4 (0x08UL << 0) // 7 0 1523.4 kHz
460#define RADIOLIB_SX126X_LR_FHSS_BW_1574_2 (0x09UL << 0) // 7 0 1574.2 kHz
461
462// LR-FHSS packet lengths
463#define RADIOLIB_SX126X_LR_FHSS_MAX_ENC_SIZE (608)
464#define RADIOLIB_SX126X_LR_FHSS_HEADER_BITS (114)
465#define RADIOLIB_SX126X_LR_FHSS_HDR_BYTES (10)
466#define RADIOLIB_SX126X_LR_FHSS_SYNC_WORD_BYTES (4)
467#define RADIOLIB_SX126X_LR_FHSS_FRAG_BITS (48)
468#define RADIOLIB_SX126X_LR_FHSS_BLOCK_PREAMBLE_BITS (2)
469#define RADIOLIB_SX126X_LR_FHSS_BLOCK_BITS (RADIOLIB_SX126X_LR_FHSS_FRAG_BITS + RADIOLIB_SX126X_LR_FHSS_BLOCK_PREAMBLE_BITS)
470
476class SX126x: public PhysicalLayer {
477 public:
478 // introduce PhysicalLayer overloads
484
489 explicit SX126x(Module* mod);
490
494 bool XTAL;
495
500
501 // basic methods
502
513 int16_t begin(uint8_t cr, uint8_t syncWord, uint16_t preambleLength, float tcxoVoltage, bool useRegulatorLDO = false);
514
526 int16_t beginFSK(float br, float freqDev, float rxBw, uint16_t preambleLength, float tcxoVoltage, bool useRegulatorLDO = false);
527
537 int16_t beginLRFHSS(uint8_t bw, uint8_t cr, bool narrowGrid, float tcxoVoltage, bool useRegulatorLDO = false);
538
547 int16_t setLrFhssConfig(uint8_t bw, uint8_t cr, uint8_t hdrCount = 3, uint16_t hopSeqId = 0x100);
548
555 int16_t reset(bool verify = true);
556
565 int16_t transmit(const uint8_t* data, size_t len, uint8_t addr = 0) override;
566
574 int16_t receive(uint8_t* data, size_t len) override;
575
581 int16_t transmitDirect(uint32_t frf = 0) override;
582
588 int16_t receiveDirect() override;
589
595 int16_t scanChannel() override;
596
602 int16_t scanChannel(const ChannelScanConfig_t &config) override;
603
609 int16_t sleep() override;
610
617 int16_t sleep(bool retainConfig);
618
623 int16_t standby() override;
624
632 int16_t standby(uint8_t mode, bool wakeup = true);
633
639 int16_t hopLRFHSS();
640
641 // interrupt methods
642
647 virtual void setDio1Action(void (*func)(void));
648
652 virtual void clearDio1Action();
653
658 void setPacketReceivedAction(void (*func)(void)) override;
659
663 void clearPacketReceivedAction() override;
664
669 void setPacketSentAction(void (*func)(void)) override;
670
674 void clearPacketSentAction() override;
675
680 void setChannelScanAction(void (*func)(void)) override;
681
685 void clearChannelScanAction() override;
686
691 int16_t finishTransmit() override;
692
699 int16_t startReceive() override;
700
713 int16_t startReceiveDutyCycle(uint32_t rxPeriod, uint32_t sleepPeriod, RadioLibIrqFlags_t irqFlags = RADIOLIB_IRQ_RX_DEFAULT_FLAGS, RadioLibIrqFlags_t irqMask = RADIOLIB_IRQ_RX_DEFAULT_MASK);
714
729 int16_t startReceiveDutyCycleAuto(uint16_t senderPreambleLength = 0, uint16_t minSymbols = 8, RadioLibIrqFlags_t irqFlags = RADIOLIB_IRQ_RX_DEFAULT_FLAGS, RadioLibIrqFlags_t irqMask = RADIOLIB_IRQ_RX_DEFAULT_MASK);
730
739 int16_t readData(uint8_t* data, size_t len) override;
740
746 int16_t startChannelScan() override;
747
754 int16_t startChannelScan(const ChannelScanConfig_t &config) override;
755
760 int16_t getChannelScanResult() override;
761
762 // configuration methods
763
769 virtual int16_t setBandwidth(float bw);
770
776 virtual int16_t setSpreadingFactor(uint8_t sf);
777
784 int16_t setCodingRate(uint8_t cr);
785
792 int16_t setSyncWord(uint8_t syncWord, uint8_t controlBits = 0x44);
793
799 int16_t setCurrentLimit(float currentLimit);
800
805 float getCurrentLimit();
806
816 int16_t setPreambleLength(size_t preambleLength) override;
817
823 int16_t setFrequencyDeviation(float freqDev) override;
824
830 int16_t setBitRate(float br) override;
831
837 int16_t setDataRate(DataRate_t dr) override;
838
844 int16_t checkDataRate(DataRate_t dr) override;
845
852 int16_t setRxBandwidth(float rxBw);
853
862 int16_t setRxBoostedGainMode(bool rxbgm, bool persist = true);
863
871 int16_t setDataShaping(uint8_t sh) override;
872
884 int16_t setSyncWord(uint8_t* syncWord, size_t len) override;
885
893 int16_t setSyncBits(uint8_t *syncWord, uint8_t bitsLen);
894
903 int16_t setCRC(uint8_t len, uint16_t initial = 0x1D0F, uint16_t polynomial = 0x1021, bool inverted = true);
904
912 int16_t setWhitening(bool enabled, uint16_t initial = 0x01FF);
913
923 int16_t setTCXO(float voltage, uint32_t delay = 5000);
924
929 int16_t setDio2AsRfSwitch(bool enable = true);
930
935 float getDataRate() const;
936
942 float getRSSI() override;
943
949 float getRSSI(bool packet);
950
955 float getSNR() override;
956
964 float getFrequencyError();
965
971 size_t getPacketLength(bool update = true) override;
972
979 size_t getPacketLength(bool update, uint8_t* offset);
980
987 int16_t getLoRaRxHeaderInfo(uint8_t* cr, bool* hasCRC);
988
994 int16_t fixedPacketLengthMode(uint8_t len = RADIOLIB_SX126X_MAX_PACKET_LENGTH);
995
1001 int16_t variablePacketLengthMode(uint8_t maxLen = RADIOLIB_SX126X_MAX_PACKET_LENGTH);
1002
1008 RadioLibTime_t getTimeOnAir(size_t len) override;
1009
1016
1021 uint32_t getIrqFlags() override;
1022
1028 int16_t setIrqFlags(uint32_t irq) override;
1029
1035 int16_t clearIrqFlags(uint32_t irq) override;
1036
1042 int16_t implicitHeader(size_t len);
1043
1048 int16_t explicitHeader();
1049
1054 int16_t setRegulatorLDO();
1055
1060 int16_t setRegulatorDCDC();
1061
1067 int16_t setEncoding(uint8_t encoding) override;
1068
1070 void setRfSwitchPins(uint32_t rxEn, uint32_t txEn);
1071
1073 void setRfSwitchTable(const uint32_t (&pins)[Module::RFSWITCH_MAX_PINS], const Module::RfSwitchMode_t table[]);
1074
1083 int16_t forceLDRO(bool enable);
1084
1091 int16_t autoLDRO();
1092
1097 uint8_t randomByte() override;
1098
1104 int16_t invertIQ(bool enable) override;
1105
1111 int16_t getModem(ModemType_t* modem) override;
1112
1114 int16_t stageMode(RadioModeType_t mode, RadioModeConfig_t* cfg) override;
1115
1117 int16_t launchMode() override;
1118
1119 #if !RADIOLIB_EXCLUDE_DIRECT_RECEIVE
1124 void setDirectAction(void (*func)(void)) override;
1125
1130 void readBit(uint32_t pin) override;
1131 #endif
1132
1142 int16_t uploadPatch(const uint32_t* patch, size_t len, bool nonvolatile = true);
1143
1151 int16_t spectralScanStart(uint16_t numSamples, uint8_t window = RADIOLIB_SX126X_SPECTRAL_SCAN_WINDOW_DEFAULT, uint8_t interval = RADIOLIB_SX126X_SCAN_INTERVAL_8_20_US);
1152
1156 void spectralScanAbort();
1157
1162 int16_t spectralScanGetStatus();
1163
1169 int16_t spectralScanGetResult(uint16_t* results);
1170
1182 int16_t setPaConfig(uint8_t paDutyCycle, uint8_t deviceSel, uint8_t hpMax = RADIOLIB_SX126X_PA_CONFIG_HP_MAX, uint8_t paLut = RADIOLIB_SX126X_PA_CONFIG_PA_LUT);
1183
1191 int16_t calibrateImage(float freq);
1192
1200 int16_t calibrateImageRejection(float freqMin, float freqMax);
1201
1206 int16_t setPaRampTime(uint8_t rampTime);
1207
1208#if !RADIOLIB_GODMODE && !RADIOLIB_LOW_LEVEL
1209 protected:
1210#endif
1211 Module* getMod() override;
1212
1213 // SX126x SPI command implementations
1214 int16_t setFs();
1215 int16_t setTx(uint32_t timeout = 0);
1216 int16_t setRx(uint32_t timeout);
1217 int16_t setCad(uint8_t symbolNum, uint8_t detPeak, uint8_t detMin, uint8_t exitMode, RadioLibTime_t timeout);
1218 int16_t writeRegister(uint16_t addr, const uint8_t* data, uint8_t numBytes);
1219 int16_t readRegister(uint16_t addr, uint8_t* data, uint8_t numBytes);
1220 int16_t writeBuffer(const uint8_t* data, uint8_t numBytes, uint8_t offset = 0x00);
1221 int16_t readBuffer(uint8_t* data, uint8_t numBytes, uint8_t offset = 0x00);
1222 int16_t setDioIrqParams(uint16_t irqMask, uint16_t dio1Mask, uint16_t dio2Mask = RADIOLIB_SX126X_IRQ_NONE, uint16_t dio3Mask = RADIOLIB_SX126X_IRQ_NONE);
1223 virtual int16_t clearIrqStatus(uint16_t clearIrqParams = RADIOLIB_SX126X_IRQ_ALL);
1224 int16_t setRfFrequency(uint32_t frf);
1225 int16_t calibrateImage(const uint8_t* data);
1226 uint8_t getPacketType();
1227 int16_t setTxParams(uint8_t power, uint8_t rampTime);
1228 int16_t setModulationParams(uint8_t sf, uint8_t bw, uint8_t cr, uint8_t ldro);
1229 int16_t setModulationParamsFSK(uint32_t br, uint8_t sh, uint8_t rxBw, uint32_t freqDev);
1230 int16_t setPacketParams(uint16_t preambleLen, uint8_t crcType, uint8_t payloadLen, uint8_t hdrType, uint8_t invertIQ);
1231 int16_t setPacketParamsFSK(uint16_t preambleLen, uint8_t preambleDetectorLen, uint8_t crcType, uint8_t syncWordLen, uint8_t addrCmp, uint8_t whiten, uint8_t packType = RADIOLIB_SX126X_GFSK_PACKET_VARIABLE, uint8_t payloadLen = 0xFF);
1232 int16_t setBufferBaseAddress(uint8_t txBaseAddress = 0x00, uint8_t rxBaseAddress = 0x00);
1233 int16_t setRegulatorMode(uint8_t mode);
1234 uint8_t getStatus();
1235 uint32_t getPacketStatus();
1236 uint16_t getDeviceErrors();
1237 int16_t clearDeviceErrors();
1238
1239#if !RADIOLIB_GODMODE
1240 protected:
1241#endif
1242 const char* chipType = NULL;
1243 uint8_t bandwidth = 0;
1244 float freqMHz = 0;
1245
1246 // Allow subclasses to define different TX modes
1247 uint8_t txMode = Module::MODE_TX;
1248
1249 int16_t setFrequencyRaw(float freq);
1250 int16_t fixPaClamping(bool enable = true);
1251
1252 // common low-level SPI interface
1253 static int16_t SPIparseStatus(uint8_t in);
1254
1255#if !RADIOLIB_GODMODE
1256 private:
1257#endif
1258 Module* mod;
1259
1260 uint8_t spreadingFactor = 0, codingRate = 0, ldrOptimize = 0, crcTypeLoRa = 0, headerType = 0;
1261 uint16_t preambleLengthLoRa = 0;
1262 float bandwidthKhz = 0;
1263 bool ldroAuto = true;
1264
1265 uint32_t bitRate = 0, frequencyDev = 0;
1266 uint8_t preambleDetLength = 0, rxBandwidth = 0, pulseShape = 0, crcTypeFSK = 0, syncWordLength = 0, whitening = 0, packetType = 0;
1267 uint16_t preambleLengthFSK = 0;
1268 float rxBandwidthKhz = 0;
1269
1270 float dataRateMeasured = 0;
1271
1272 uint32_t tcxoDelay = 0;
1273 uint8_t pwr = 0;
1274
1275 size_t implicitLen = 0;
1276 uint8_t invertIQEnabled = RADIOLIB_SX126X_LORA_IQ_STANDARD;
1277 uint32_t rxTimeout = 0;
1278
1279 // LR-FHSS stuff - there's a lot of it because all the encoding happens in software
1280 uint8_t lrFhssCr = RADIOLIB_SX126X_LR_FHSS_CR_2_3;
1281 uint8_t lrFhssBw = RADIOLIB_SX126X_LR_FHSS_BW_722_66;
1282 uint8_t lrFhssHdrCount = 3;
1283 uint8_t lrFhssSyncWord[RADIOLIB_SX126X_LR_FHSS_SYNC_WORD_BYTES] = { 0x12, 0xAD, 0x10, 0x1B };
1284 bool lrFhssGridNonFcc = false;
1285 uint16_t lrFhssNgrid = 0;
1286 uint16_t lrFhssLfsrState = 0;
1287 uint16_t lrFhssPoly = 0;
1288 uint16_t lrFhssSeed = 0;
1289 uint16_t lrFhssHopSeqId = 0;
1290 size_t lrFhssFrameBitsRem = 0;
1291 size_t lrFhssFrameHopsRem = 0;
1292 size_t lrFhssHopNum = 0;
1293
1294 int16_t modSetup(float tcxoVoltage, bool useRegulatorLDO, uint8_t modem);
1295 int16_t config(uint8_t modem);
1296 bool findChip(const char* verStr);
1297 int16_t startReceiveCommon(uint32_t timeout = RADIOLIB_SX126X_RX_TIMEOUT_INF, RadioLibIrqFlags_t irqFlags = RADIOLIB_IRQ_RX_DEFAULT_FLAGS, RadioLibIrqFlags_t irqMask = RADIOLIB_IRQ_RX_DEFAULT_MASK);
1298 int16_t setPacketMode(uint8_t mode, uint8_t len);
1299 int16_t setHeaderType(uint8_t hdrType, size_t len = 0xFF);
1300 int16_t directMode();
1301 int16_t packetMode();
1302
1303 // fixes to errata
1304 int16_t fixSensitivity();
1305 int16_t fixImplicitTimeout();
1306 int16_t fixInvertedIQ(uint8_t iqConfig);
1307
1308 // LR-FHSS utilities
1309 int16_t buildLRFHSSPacket(const uint8_t* in, size_t in_len, uint8_t* out, size_t* out_len, size_t* out_bits, size_t* out_hops);
1310 int16_t resetLRFHSS();
1311 uint16_t stepLRFHSS();
1312 int16_t setLRFHSSHop(uint8_t index);
1313
1314 void regdump();
1315 void effectEvalPre(uint8_t* buff, uint32_t start);
1316 void effectEvalPost(uint8_t* buff, uint32_t start);
1317 void effectEval();
1318};
1319
1320#endif
1321
1322#endif
Implements all common low-level methods to control the wireless module. Every module class contains o...
Definition Module.h:73
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:82
@ MODE_TX
Transmission mode.
Definition Module.h:119
Provides common interface for protocols that run on LoRa/FSK modules, such as RTTY or LoRaWAN....
Definition PhysicalLayer.h:216
virtual int16_t startReceive()
Sets module to received mode using its default configuration.
Definition PhysicalLayer.cpp:130
virtual int16_t readData(uint8_t *data, size_t len)
Reads data that was received after calling startReceive method.
Definition PhysicalLayer.cpp:220
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:155
virtual int16_t receive(uint8_t *data, size_t len)
Binary receive method. Must be implemented in module class.
Definition PhysicalLayer.cpp:111
Base class for SX126x series. All derived classes for SX126x (e.g. SX1262 or SX1268) inherit from thi...
Definition SX126x.h:476
int16_t startChannelScan() override
Interrupt-driven channel activity detection method. DIO1 will be activated when LoRa preamble is dete...
Definition SX126x.cpp:674
float getFrequencyError()
Gets frequency error of the latest received packet. WARNING: This functionality is based on SX128x im...
Definition SX126x.cpp:1280
void setRfSwitchPins(uint32_t rxEn, uint32_t txEn)
Some modules contain external RF switch controlled by pins. This function gives RadioLib control over...
Definition SX126x.cpp:1468
virtual void setDio1Action(void(*func)(void))
Sets interrupt service routine to call when DIO1 activates.
Definition SX126x.cpp:491
int16_t setPaConfig(uint8_t paDutyCycle, uint8_t deviceSel, uint8_t hpMax=RADIOLIB_SX126X_PA_CONFIG_HP_MAX, uint8_t paLut=RADIOLIB_SX126X_PA_CONFIG_PA_LUT)
Set the PA configuration. Allows user to optimize PA for a specific output power and matching network...
Definition SX126x.cpp:1923
int16_t getLoRaRxHeaderInfo(uint8_t *cr, bool *hasCRC)
Get LoRa header information from last received packet. Only valid in explicit header mode.
Definition SX126x.cpp:1334
RadioLibTime_t getTimeOnAir(size_t len) override
Get expected time-on-air for a given size of payload.
Definition SX126x.cpp:1356
uint8_t randomByte() override
Get one truly random byte from RSSI noise.
Definition SX126x.cpp:1497
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 SX126x.cpp:1427
int16_t setDataShaping(uint8_t sh) override
Sets time-bandwidth product of Gaussian filter applied for shaping. Allowed values are RADIOLIB_SHAPI...
Definition SX126x.cpp:1048
int16_t setRegulatorLDO()
Set regulator mode to LDO.
Definition SX126x.cpp:1456
int16_t invertIQ(bool enable) override
Enable/disable inversion of the I and Q signals.
Definition SX126x.cpp:1526
int16_t uploadPatch(const uint32_t *patch, size_t len, bool nonvolatile=true)
Upload binary patch into the SX126x device RAM. Patch is needed to e.g., enable spectral scan and mus...
Definition SX126x.cpp:1719
int16_t setEncoding(uint8_t encoding) override
Sets transmission encoding. Available in FSK mode only. Serves only as alias for PhysicalLayer compat...
Definition SX126x.cpp:1464
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 SX126x.cpp:1472
int16_t beginFSK(float br, float freqDev, float rxBw, uint16_t preambleLength, float tcxoVoltage, bool useRegulatorLDO=false)
Initialization method for FSK modem.
Definition SX126x.cpp:70
virtual int16_t setBandwidth(float bw)
Sets LoRa bandwidth. Allowed values are 7.8, 10.4, 15.6, 20.8, 31.25, 41.7, 62.5, 125....
Definition SX126x.cpp:734
int16_t readData(uint8_t *data, size_t len) override
Reads data received after calling startReceive method. When the packet length is not known in advance...
Definition SX126x.cpp:634
int16_t calibrateImage(float freq)
Perform image rejection calibration for the specified frequency. Will try to use Semtech-defined pres...
Definition SX126x.cpp:1970
int16_t explicitHeader()
Set explicit header mode for future reception/transmission.
Definition SX126x.cpp:1452
void clearChannelScanAction() override
Clears interrupt service routine to call when a channel scan is finished.
Definition SX126x.cpp:519
int16_t forceLDRO(bool enable)
Forces LoRa low data rate optimization. Only available in LoRa mode. After calling this method,...
Definition SX126x.cpp:1476
int16_t hopLRFHSS()
Handle LR-FHSS hop. When using LR-FHSS in interrupt-driven mode, this method MUST be called each time...
Definition SX126x.cpp:481
void setDirectAction(void(*func)(void)) override
Set interrupt service routine function to call when data bit is received in direct mode.
Definition SX126x.cpp:1710
int16_t setIrqFlags(uint32_t irq) override
Set interrupt on DIO1 to be sent on a specific IRQ bit (e.g. RxTimeout, CadDone).
Definition SX126x.cpp:1440
int16_t spectralScanGetStatus()
Read the status of spectral scan.
Definition SX126x.cpp:1787
void clearPacketReceivedAction() override
Clears interrupt service routine to call when a packet is received.
Definition SX126x.cpp:503
int16_t setTCXO(float voltage, uint32_t delay=5000)
Sets TCXO (Temperature Compensated Crystal Oscillator) configuration.
Definition SX126x.cpp:1807
float getSNR() override
Gets SNR (Signal to Noise Ratio) of the last received packet. Only available for LoRa modem.
Definition SX126x.cpp:1264
int16_t setRxBandwidth(float rxBw)
Sets FSK receiver bandwidth. Allowed values are 4.8, 5.8, 7.3, 9.7, 11.7, 14.6, 19....
Definition SX126x.cpp:969
int16_t setRegulatorDCDC()
Set regulator mode to DC-DC.
Definition SX126x.cpp:1460
int16_t transmit(const uint8_t *data, size_t len, uint8_t addr=0) override
Blocking binary transmit method. Overloads for string-based transmissions are implemented in Physical...
Definition SX126x.cpp:197
int16_t startReceive() override
Interrupt-driven receive method with default parameters. Implemented for compatibility with PhysicalL...
Definition SX126x.cpp:532
virtual void clearDio1Action()
Clears interrupt service routine to call when DIO1 activates.
Definition SX126x.cpp:495
int16_t checkDataRate(DataRate_t dr) override
Check the data rate can be configured by this module.
Definition SX126x.cpp:948
void setPacketReceivedAction(void(*func)(void)) override
Sets interrupt service routine to call when a packet is received.
Definition SX126x.cpp:499
float getRSSI() override
Gets recorded signal strength indicator. Overload with packet mode enabled for PhysicalLayer compatib...
Definition SX126x.cpp:1246
int16_t standby() override
Sets the module to standby mode (overload for PhysicalLayer compatibility, uses 13 MHz RC oscillator)...
Definition SX126x.cpp:462
int16_t setFrequencyDeviation(float freqDev) override
Sets FSK frequency deviation. Allowed values range from 0.0 to 200.0 kHz.
Definition SX126x.cpp:865
void spectralScanAbort()
Abort an ongoing spectral scan.
Definition SX126x.cpp:1783
int16_t getModem(ModemType_t *modem) override
Get modem currently in use by the radio.
Definition SX126x.cpp:1540
int16_t sleep() override
Sets the module to sleep mode. To wake the device up, call standby(). Overload with warm start enable...
Definition SX126x.cpp:442
int16_t receiveDirect() override
Starts direct mode reception. Only implemented for PhysicalLayer compatibility, as SX126x series does...
Definition SX126x.cpp:339
int16_t spectralScanStart(uint16_t numSamples, uint8_t window=RADIOLIB_SX126X_SPECTRAL_SCAN_WINDOW_DEFAULT, uint8_t interval=RADIOLIB_SX126X_SCAN_INTERVAL_8_20_US)
Start spectral scan. Requires binary path to be uploaded.
Definition SX126x.cpp:1767
int16_t finishTransmit() override
Clean up after transmission is done.
Definition SX126x.cpp:523
int16_t setCurrentLimit(float currentLimit)
Sets current protection limit. Can be set in 2.5 mA steps.
Definition SX126x.cpp:822
int16_t setRxBoostedGainMode(bool rxbgm, bool persist=true)
Enables or disables Rx Boosted Gain mode as described in SX126x datasheet section 9....
Definition SX126x.cpp:1032
int16_t transmitDirect(uint32_t frf=0) override
Starts direct mode transmission.
Definition SX126x.cpp:323
int16_t variablePacketLengthMode(uint8_t maxLen=RADIOLIB_SX126X_MAX_PACKET_LENGTH)
Set modem in variable packet length mode. Available in FSK mode only.
Definition SX126x.cpp:1352
int16_t begin(uint8_t cr, uint8_t syncWord, uint16_t preambleLength, float tcxoVoltage, bool useRegulatorLDO=false)
Initialization method for LoRa modem.
Definition SX126x.cpp:24
int16_t setCRC(uint8_t len, uint16_t initial=0x1D0F, uint16_t polynomial=0x1021, bool inverted=true)
Sets CRC configuration.
Definition SX126x.cpp:1146
int16_t reset(bool verify=true)
Reset method. Will reset the chip to the default state using RST pin.
Definition SX126x.cpp:164
int16_t setSyncWord(uint8_t syncWord, uint8_t controlBits=0x44)
Sets LoRa sync word.
Definition SX126x.cpp:811
int16_t setLrFhssConfig(uint8_t bw, uint8_t cr, uint8_t hdrCount=3, uint16_t hopSeqId=0x100)
Sets LR-FHSS configuration.
Definition SX126x.cpp:151
int16_t calibrateImageRejection(float freqMin, float freqMax)
Perform image rejection calibration for the specified frequency band. WARNING: Use at your own risk!...
Definition SX126x.cpp:2007
float getCurrentLimit()
Reads current protection limit.
Definition SX126x.cpp:835
int16_t launchMode() override
Launch previously staged mode.
Definition SX126x.cpp:1682
int16_t stageMode(RadioModeType_t mode, RadioModeConfig_t *cfg) override
Stage mode of the radio to be launched later using launchMode.
Definition SX126x.cpp:1559
int16_t clearIrqFlags(uint32_t irq) override
Clear interrupt on a specific IRQ bit (e.g. RxTimeout, CadDone).
Definition SX126x.cpp:1444
uint32_t getIrqFlags() override
Read currently active IRQ flags.
Definition SX126x.cpp:1434
int16_t autoLDRO()
Re-enables automatic LDRO configuration. Only available in LoRa mode. After calling this method,...
Definition SX126x.cpp:1488
int16_t fixedPacketLengthMode(uint8_t len=RADIOLIB_SX126X_MAX_PACKET_LENGTH)
Set modem in fixed packet length mode. Available in FSK mode only.
Definition SX126x.cpp:1348
int16_t setBitRate(float br) override
Sets FSK bit rate. Allowed values range from 0.6 to 300.0 kbps.
Definition SX126x.cpp:889
size_t getPacketLength(bool update=true) override
Query modem for the packet length of received payload.
Definition SX126x.cpp:1313
int16_t setSyncBits(uint8_t *syncWord, uint8_t bitsLen)
Sets FSK sync word in the form of array of up to 8 bytes.
Definition SX126x.cpp:1127
void setPacketSentAction(void(*func)(void)) override
Sets interrupt service routine to call when a packet is sent.
Definition SX126x.cpp:507
void readBit(uint32_t pin) override
Function to read and process data bit in direct reception mode.
Definition SX126x.cpp:1714
int16_t scanChannel() override
Performs scan for LoRa transmission in the current channel. Detects both preamble and payload....
Definition SX126x.cpp:413
float getDataRate() const
Gets effective data rate for the last transmitted packet. The value is calculated only for payload by...
Definition SX126x.cpp:1242
int16_t startReceiveDutyCycleAuto(uint16_t senderPreambleLength=0, uint16_t minSymbols=8, RadioLibIrqFlags_t irqFlags=RADIOLIB_IRQ_RX_DEFAULT_FLAGS, RadioLibIrqFlags_t irqMask=RADIOLIB_IRQ_RX_DEFAULT_MASK)
Calls startReceiveDutyCycle with rxPeriod and sleepPeriod set so the unit shouldn't miss any messages...
Definition SX126x.cpp:563
int16_t setPreambleLength(size_t preambleLength) override
Sets preamble length for LoRa or FSK modem. Allowed values range from 1 to 65535.
Definition SX126x.cpp:844
int16_t setPaRampTime(uint8_t rampTime)
Set PA ramp-up time. Set to 200us by default.
Definition SX126x.cpp:2015
bool XTAL
Whether the module has an XTAL (true) or TCXO (false). Defaults to false.
Definition SX126x.h:494
int16_t implicitHeader(size_t len)
Set implicit header mode for future reception/transmission.
Definition SX126x.cpp:1448
int16_t receive(uint8_t *data, size_t len) override
Blocking binary receive method. Overloads for string-based transmissions are implemented in PhysicalL...
Definition SX126x.cpp:252
int16_t setDio2AsRfSwitch(bool enable=true)
Set DIO2 to function as RF switch (default in Semtech example designs).
Definition SX126x.cpp:1860
int16_t spectralScanGetResult(uint16_t *results)
Read the result of spectral scan.
Definition SX126x.cpp:1795
int16_t setWhitening(bool enabled, uint16_t initial=0x01FF)
Sets FSK whitening parameters.
Definition SX126x.cpp:1205
virtual int16_t setSpreadingFactor(uint8_t sf)
Sets LoRa spreading factor. Allowed values range from 5 to 12.
Definition SX126x.cpp:785
bool standbyXOSC
Whether to use XOSC (true) or RC (false) oscillator in standby mode. Defaults to false.
Definition SX126x.h:499
void setChannelScanAction(void(*func)(void)) override
Sets interrupt service routine to call when a channel scan is finished.
Definition SX126x.cpp:515
int16_t setDataRate(DataRate_t dr) override
Set data.
Definition SX126x.cpp:910
void clearPacketSentAction() override
Clears interrupt service routine to call when a packet is sent.
Definition SX126x.cpp:511
int16_t beginLRFHSS(uint8_t bw, uint8_t cr, bool narrowGrid, float tcxoVoltage, bool useRegulatorLDO=false)
Initialization method for LR-FHSS modem. This modem only supports transmission!
Definition SX126x.cpp:123
int16_t startReceiveDutyCycle(uint32_t rxPeriod, uint32_t sleepPeriod, RadioLibIrqFlags_t irqFlags=RADIOLIB_IRQ_RX_DEFAULT_FLAGS, RadioLibIrqFlags_t irqMask=RADIOLIB_IRQ_RX_DEFAULT_MASK)
Interrupt-driven receive method where the device mostly sleeps and periodically wakes to listen....
Definition SX126x.cpp:536
int16_t setCodingRate(uint8_t cr)
Sets LoRa coding rate denominator. Allowed values range from 4 to 8. Note that a value of 4 means no ...
Definition SX126x.cpp:798
int16_t getChannelScanResult() override
Read the channel scan result.
Definition SX126x.cpp:715
unsigned long RadioLibTime_t
Type used for durations in RadioLib.
Definition TypeDef.h:642
uint32_t RadioLibIrqFlags_t
Type used for radio-agnostic IRQ flags. IRQ to enable corresponds to the bit index (RadioLibIrq_t)....
Definition TypeDef.h:648
Description of RF switch pin states for a single mode. See setRfSwitchTable for details.
Definition Module.h:89
Common channel scan configuration structure.
Definition PhysicalLayer.h:125
Common data rate structure.
Definition PhysicalLayer.h:74
Definition PhysicalLayer.h:168