1#if !defined(_RADIOLIB_SX128X_H)
2#define _RADIOLIB_SX128X_H
4#include "../../TypeDef.h"
6#if !RADIOLIB_EXCLUDE_SX128X
8#include "../../Module.h"
10#include "../../protocols/PhysicalLayer/PhysicalLayer.h"
13#define RADIOLIB_SX128X_FREQUENCY_STEP_SIZE 198.3642578
14#define RADIOLIB_SX128X_MAX_PACKET_LENGTH 255
15#define RADIOLIB_SX128X_CRYSTAL_FREQ 52.0f
16#define RADIOLIB_SX128X_DIV_EXPONENT 18
19#define RADIOLIB_SX128X_CMD_NOP 0x00
20#define RADIOLIB_SX128X_CMD_GET_STATUS 0xC0
21#define RADIOLIB_SX128X_CMD_WRITE_REGISTER 0x18
22#define RADIOLIB_SX128X_CMD_READ_REGISTER 0x19
23#define RADIOLIB_SX128X_CMD_WRITE_BUFFER 0x1A
24#define RADIOLIB_SX128X_CMD_READ_BUFFER 0x1B
25#define RADIOLIB_SX128X_CMD_SAVE_CONTEXT 0xD5
26#define RADIOLIB_SX128X_CMD_SET_SLEEP 0x84
27#define RADIOLIB_SX128X_CMD_SET_STANDBY 0x80
28#define RADIOLIB_SX128X_CMD_SET_FS 0xC1
29#define RADIOLIB_SX128X_CMD_SET_TX 0x83
30#define RADIOLIB_SX128X_CMD_SET_RX 0x82
31#define RADIOLIB_SX128X_CMD_SET_RX_DUTY_CYCLE 0x94
32#define RADIOLIB_SX128X_CMD_SET_CAD 0xC5
33#define RADIOLIB_SX128X_CMD_SET_TX_CONTINUOUS_WAVE 0xD1
34#define RADIOLIB_SX128X_CMD_SET_TX_CONTINUOUS_PREAMBLE 0xD2
35#define RADIOLIB_SX128X_CMD_SET_PACKET_TYPE 0x8A
36#define RADIOLIB_SX128X_CMD_GET_PACKET_TYPE 0x03
37#define RADIOLIB_SX128X_CMD_SET_RF_FREQUENCY 0x86
38#define RADIOLIB_SX128X_CMD_SET_TX_PARAMS 0x8E
39#define RADIOLIB_SX128X_CMD_SET_CAD_PARAMS 0x88
40#define RADIOLIB_SX128X_CMD_SET_BUFFER_BASE_ADDRESS 0x8F
41#define RADIOLIB_SX128X_CMD_SET_MODULATION_PARAMS 0x8B
42#define RADIOLIB_SX128X_CMD_SET_PACKET_PARAMS 0x8C
43#define RADIOLIB_SX128X_CMD_GET_RX_BUFFER_STATUS 0x17
44#define RADIOLIB_SX128X_CMD_GET_PACKET_STATUS 0x1D
45#define RADIOLIB_SX128X_CMD_GET_RSSI_INST 0x1F
46#define RADIOLIB_SX128X_CMD_SET_DIO_IRQ_PARAMS 0x8D
47#define RADIOLIB_SX128X_CMD_GET_IRQ_STATUS 0x15
48#define RADIOLIB_SX128X_CMD_CLEAR_IRQ_STATUS 0x97
49#define RADIOLIB_SX128X_CMD_SET_REGULATOR_MODE 0x96
50#define RADIOLIB_SX128X_CMD_SET_SAVE_CONTEXT 0xD5
51#define RADIOLIB_SX128X_CMD_SET_AUTO_TX 0x98
52#define RADIOLIB_SX128X_CMD_SET_AUTO_FS 0x9E
53#define RADIOLIB_SX128X_CMD_SET_PERF_COUNTER_MODE 0x9C
54#define RADIOLIB_SX128X_CMD_SET_LONG_PREAMBLE 0x9B
55#define RADIOLIB_SX128X_CMD_SET_UART_SPEED 0x9D
56#define RADIOLIB_SX128X_CMD_SET_RANGING_ROLE 0xA3
57#define RADIOLIB_SX128X_CMD_SET_ADVANCED_RANGING 0x9A
60#define RADIOLIB_SX128X_REG_GAIN_MODE 0x0891
61#define RADIOLIB_SX128X_REG_MANUAL_GAIN_CONTROL_ENABLE_2 0x0895
62#define RADIOLIB_SX128X_REG_MANUAL_GAIN_SETTING 0x089E
63#define RADIOLIB_SX128X_REG_MANUAL_GAIN_CONTROL_ENABLE_1 0x089F
64#define RADIOLIB_SX128X_REG_SYNCH_PEAK_ATTENUATION 0x08C2
65#define RADIOLIB_SX128X_REG_LORA_FIXED_PAYLOAD_LENGTH 0x0901
66#define RADIOLIB_SX128X_REG_LORA_HEADER_MODE 0x0903
67#define RADIOLIB_SX128X_REG_MASTER_RANGING_ADDRESS_BYTE_3 0x0912
68#define RADIOLIB_SX128X_REG_MASTER_RANGING_ADDRESS_BYTE_2 0x0913
69#define RADIOLIB_SX128X_REG_MASTER_RANGING_ADDRESS_BYTE_1 0x0914
70#define RADIOLIB_SX128X_REG_MASTER_RANGING_ADDRESS_BYTE_0 0x0915
71#define RADIOLIB_SX128X_REG_SLAVE_RANGING_ADDRESS_BYTE_3 0x0916
72#define RADIOLIB_SX128X_REG_SLAVE_RANGING_ADDRESS_BYTE_2 0x0917
73#define RADIOLIB_SX128X_REG_SLAVE_RANGING_ADDRESS_BYTE_1 0x0918
74#define RADIOLIB_SX128X_REG_SLAVE_RANGING_ADDRESS_BYTE_0 0x0919
75#define RADIOLIB_SX128X_REG_RANGING_FILTER_WINDOW_SIZE 0x091E
76#define RADIOLIB_SX128X_REG_RANGING_FILTER_RESET 0x0923
77#define RADIOLIB_SX128X_REG_RANGING_TYPE 0x0924
78#define RADIOLIB_SX128X_REG_LORA_SF_CONFIG 0x0925
79#define RADIOLIB_SX128X_REG_RANGING_ADDRESS_SWITCH 0x0927
80#define RADIOLIB_SX128X_REG_RANGING_CALIBRATION_BYTE_2 0x092B
81#define RADIOLIB_SX128X_REG_RANGING_CALIBRATION_MSB 0x092C
82#define RADIOLIB_SX128X_REG_RANGING_CALIBRATION_LSB 0x092D
83#define RADIOLIB_SX128X_REG_SLAVE_RANGING_ADDRESS_WIDTH 0x0931
84#define RADIOLIB_SX128X_REG_FREQ_ERROR_CORRECTION 0x093C
85#define RADIOLIB_SX128X_REG_LORA_SYNC_WORD_MSB 0x0944
86#define RADIOLIB_SX128X_REG_LORA_SYNC_WORD_LSB 0x0945
87#define RADIOLIB_SX128X_REG_RANGING_FILTER_RSSI_OFFSET 0x0953
88#define RADIOLIB_SX128X_REG_FEI_MSB 0x0954
89#define RADIOLIB_SX128X_REG_FEI_MID 0x0955
90#define RADIOLIB_SX128X_REG_FEI_LSB 0x0956
91#define RADIOLIB_SX128X_REG_RANGING_ADDRESS_MSB 0x095F
92#define RADIOLIB_SX128X_REG_RANGING_ADDRESS_LSB 0x0960
93#define RADIOLIB_SX128X_REG_RANGING_RESULT_MSB 0x0961
94#define RADIOLIB_SX128X_REG_RANGING_RESULT_MID 0x0962
95#define RADIOLIB_SX128X_REG_RANGING_RESULT_LSB 0x0963
96#define RADIOLIB_SX128X_REG_RANGING_RSSI 0x0964
97#define RADIOLIB_SX128X_REG_RANGING_LORA_CLOCK_ENABLE 0x097F
98#define RADIOLIB_SX128X_REG_PACKET_PREAMBLE_SETTINGS 0x09C1
99#define RADIOLIB_SX128X_REG_WHITENING_INITIAL_VALUE 0x09C5
100#define RADIOLIB_SX128X_REG_CRC_POLYNOMIAL_MSB 0x09C6
101#define RADIOLIB_SX128X_REG_CRC_POLYNOMIAL_LSB 0x09C7
102#define RADIOLIB_SX128X_REG_CRC_INITIAL_MSB 0x09C8
103#define RADIOLIB_SX128X_REG_CRC_INITIAL_LSB 0x09C9
104#define RADIOLIB_SX128X_REG_BLE_CRC_INITIAL_MSB 0x09C7
105#define RADIOLIB_SX128X_REG_BLE_CRC_INITIAL_MID (RADIOLIB_SX128X_REG_CRC_INITIAL_MSB)
106#define RADIOLIB_SX128X_REG_BLE_CRC_INITIAL_LSB (RADIOLIB_SX128X_REG_CRC_INITIAL_LSB)
107#define RADIOLIB_SX128X_REG_SYNCH_ADDRESS_CONTROL 0x09CD
108#define RADIOLIB_SX128X_REG_SYNC_WORD_1_BYTE_4 0x09CE
109#define RADIOLIB_SX128X_REG_SYNC_WORD_1_BYTE_3 0x09CF
110#define RADIOLIB_SX128X_REG_SYNC_WORD_1_BYTE_2 0x09D0
111#define RADIOLIB_SX128X_REG_SYNC_WORD_1_BYTE_1 0x09D1
112#define RADIOLIB_SX128X_REG_SYNC_WORD_1_BYTE_0 0x09D2
113#define RADIOLIB_SX128X_REG_SYNC_WORD_2_BYTE_4 0x09D3
114#define RADIOLIB_SX128X_REG_SYNC_WORD_2_BYTE_3 0x09D4
115#define RADIOLIB_SX128X_REG_SYNC_WORD_2_BYTE_2 0x09D5
116#define RADIOLIB_SX128X_REG_SYNC_WORD_2_BYTE_1 0x09D6
117#define RADIOLIB_SX128X_REG_SYNC_WORD_2_BYTE_0 0x09D7
118#define RADIOLIB_SX128X_REG_SYNC_WORD_3_BYTE_4 0x09D8
119#define RADIOLIB_SX128X_REG_SYNC_WORD_3_BYTE_3 0x09D9
120#define RADIOLIB_SX128X_REG_SYNC_WORD_3_BYTE_2 0x09DA
121#define RADIOLIB_SX128X_REG_SYNC_WORD_3_BYTE_1 0x09DB
122#define RADIOLIB_SX128X_REG_SYNC_WORD_3_BYTE_0 0x09DC
123#define RADIOLIB_SX128X_REG_ACCESS_ADDRESS_BYTE_3 (RADIOLIB_SX128X_REG_SYNC_WORD_1_BYTE_3)
124#define RADIOLIB_SX128X_REG_ACCESS_ADDRESS_BYTE_2 (RADIOLIB_SX128X_REG_SYNC_WORD_1_BYTE_2)
125#define RADIOLIB_SX128X_REG_ACCESS_ADDRESS_BYTE_1 (RADIOLIB_SX128X_REG_SYNC_WORD_1_BYTE_1)
126#define RADIOLIB_SX128X_REG_ACCESS_ADDRESS_BYTE_0 (RADIOLIB_SX128X_REG_SYNC_WORD_1_BYTE_0)
130#define RADIOLIB_SX128X_STATUS_MODE_STDBY_RC 0b01000000
131#define RADIOLIB_SX128X_STATUS_MODE_STDBY_XOSC 0b01100000
132#define RADIOLIB_SX128X_STATUS_MODE_FS 0b10000000
133#define RADIOLIB_SX128X_STATUS_MODE_RX 0b10100000
134#define RADIOLIB_SX128X_STATUS_MODE_TX 0b11000000
135#define RADIOLIB_SX128X_STATUS_CMD_PROCESSED 0b00000100
136#define RADIOLIB_SX128X_STATUS_DATA_AVAILABLE 0b00001000
137#define RADIOLIB_SX128X_STATUS_CMD_TIMEOUT 0b00001100
138#define RADIOLIB_SX128X_STATUS_CMD_ERROR 0b00010000
139#define RADIOLIB_SX128X_STATUS_CMD_FAILED 0b00010100
140#define RADIOLIB_SX128X_STATUS_TX_DONE 0b00011000
141#define RADIOLIB_SX128X_STATUS_BUSY 0b00000001
142#define RADIOLIB_SX128X_STATUS_SPI_FAILED 0b11111111
145#define RADIOLIB_SX128X_SLEEP_DATA_BUFFER_FLUSH 0b00000000
146#define RADIOLIB_SX128X_SLEEP_DATA_BUFFER_RETAIN 0b00000010
147#define RADIOLIB_SX128X_SLEEP_DATA_RAM_FLUSH 0b00000000
148#define RADIOLIB_SX128X_SLEEP_DATA_RAM_RETAIN 0b00000001
151#define RADIOLIB_SX128X_STANDBY_RC 0x00
152#define RADIOLIB_SX128X_STANDBY_XOSC 0x01
155#define RADIOLIB_SX128X_PERIOD_BASE_15_625_US 0x00
156#define RADIOLIB_SX128X_PERIOD_BASE_62_5_US 0x01
157#define RADIOLIB_SX128X_PERIOD_BASE_1_MS 0x02
158#define RADIOLIB_SX128X_PERIOD_BASE_4_MS 0x03
161#define RADIOLIB_SX128X_TX_TIMEOUT_NONE 0x0000
164#define RADIOLIB_SX128X_RX_TIMEOUT_NONE 0x0000
165#define RADIOLIB_SX128X_RX_TIMEOUT_INF 0xFFFF
168#define RADIOLIB_SX128X_PACKET_TYPE_GFSK 0x00
169#define RADIOLIB_SX128X_PACKET_TYPE_LORA 0x01
170#define RADIOLIB_SX128X_PACKET_TYPE_RANGING 0x02
171#define RADIOLIB_SX128X_PACKET_TYPE_FLRC 0x03
172#define RADIOLIB_SX128X_PACKET_TYPE_BLE 0x04
175#define RADIOLIB_SX128X_PA_RAMP_02_US 0x00
176#define RADIOLIB_SX128X_PA_RAMP_04_US 0x20
177#define RADIOLIB_SX128X_PA_RAMP_06_US 0x40
178#define RADIOLIB_SX128X_PA_RAMP_08_US 0x60
179#define RADIOLIB_SX128X_PA_RAMP_10_US 0x80
180#define RADIOLIB_SX128X_PA_RAMP_12_US 0xA0
181#define RADIOLIB_SX128X_PA_RAMP_16_US 0xC0
182#define RADIOLIB_SX128X_PA_RAMP_20_US 0xE0
185#define RADIOLIB_SX128X_CAD_ON_1_SYMB 0x00
186#define RADIOLIB_SX128X_CAD_ON_2_SYMB 0x20
187#define RADIOLIB_SX128X_CAD_ON_4_SYMB 0x40
188#define RADIOLIB_SX128X_CAD_ON_8_SYMB 0x60
189#define RADIOLIB_SX128X_CAD_ON_16_SYMB 0x80
190#define RADIOLIB_SX128X_CAD_PARAM_DEFAULT RADIOLIB_SX128X_CAD_ON_8_SYMB
193#define RADIOLIB_SX128X_BLE_GFSK_BR_2_000_BW_2_4 0x04
194#define RADIOLIB_SX128X_BLE_GFSK_BR_1_600_BW_2_4 0x28
195#define RADIOLIB_SX128X_BLE_GFSK_BR_1_000_BW_2_4 0x4C
196#define RADIOLIB_SX128X_BLE_GFSK_BR_1_000_BW_1_2 0x45
197#define RADIOLIB_SX128X_BLE_GFSK_BR_0_800_BW_2_4 0x70
198#define RADIOLIB_SX128X_BLE_GFSK_BR_0_800_BW_1_2 0x69
199#define RADIOLIB_SX128X_BLE_GFSK_BR_0_500_BW_1_2 0x8D
200#define RADIOLIB_SX128X_BLE_GFSK_BR_0_500_BW_0_6 0x86
201#define RADIOLIB_SX128X_BLE_GFSK_BR_0_400_BW_1_2 0xB1
202#define RADIOLIB_SX128X_BLE_GFSK_BR_0_400_BW_0_6 0xAA
203#define RADIOLIB_SX128X_BLE_GFSK_BR_0_250_BW_0_6 0xCE
204#define RADIOLIB_SX128X_BLE_GFSK_BR_0_250_BW_0_3 0xC7
205#define RADIOLIB_SX128X_BLE_GFSK_BR_0_125_BW_0_3 0xEF
206#define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_0_35 0x00
207#define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_0_50 0x01
208#define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_0_75 0x02
209#define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_1_00 0x03
210#define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_1_25 0x04
211#define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_1_50 0x05
212#define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_1_75 0x06
213#define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_2_00 0x07
214#define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_2_25 0x08
215#define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_2_50 0x09
216#define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_2_75 0x0A
217#define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_3_00 0x0B
218#define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_3_25 0x0C
219#define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_3_50 0x0D
220#define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_3_75 0x0E
221#define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_4_00 0x0F
222#define RADIOLIB_SX128X_BLE_GFSK_BT_OFF 0x00
223#define RADIOLIB_SX128X_BLE_GFSK_BT_1_0 0x10
224#define RADIOLIB_SX128X_BLE_GFSK_BT_0_5 0x20
225#define RADIOLIB_SX128X_FLRC_BR_1_300_BW_1_2 0x45
226#define RADIOLIB_SX128X_FLRC_BR_1_000_BW_1_2 0x69
227#define RADIOLIB_SX128X_FLRC_BR_0_650_BW_0_6 0x86
228#define RADIOLIB_SX128X_FLRC_BR_0_520_BW_0_6 0xAA
229#define RADIOLIB_SX128X_FLRC_BR_0_325_BW_0_3 0xC7
230#define RADIOLIB_SX128X_FLRC_BR_0_260_BW_0_3 0xEB
231#define RADIOLIB_SX128X_FLRC_CR_1_2 0x00
232#define RADIOLIB_SX128X_FLRC_CR_3_4 0x02
233#define RADIOLIB_SX128X_FLRC_CR_1_0 0x04
234#define RADIOLIB_SX128X_FLRC_BT_OFF 0x00
235#define RADIOLIB_SX128X_FLRC_BT_1_0 0x10
236#define RADIOLIB_SX128X_FLRC_BT_0_5 0x20
237#define RADIOLIB_SX128X_LORA_SF_5 0x50
238#define RADIOLIB_SX128X_LORA_SF_6 0x60
239#define RADIOLIB_SX128X_LORA_SF_7 0x70
240#define RADIOLIB_SX128X_LORA_SF_8 0x80
241#define RADIOLIB_SX128X_LORA_SF_9 0x90
242#define RADIOLIB_SX128X_LORA_SF_10 0xA0
243#define RADIOLIB_SX128X_LORA_SF_11 0xB0
244#define RADIOLIB_SX128X_LORA_SF_12 0xC0
245#define RADIOLIB_SX128X_LORA_BW_1625_00 0x0A
246#define RADIOLIB_SX128X_LORA_BW_812_50 0x18
247#define RADIOLIB_SX128X_LORA_BW_406_25 0x26
248#define RADIOLIB_SX128X_LORA_BW_203_125 0x34
249#define RADIOLIB_SX128X_LORA_CR_4_5 0x01
250#define RADIOLIB_SX128X_LORA_CR_4_6 0x02
251#define RADIOLIB_SX128X_LORA_CR_4_7 0x03
252#define RADIOLIB_SX128X_LORA_CR_4_8 0x04
253#define RADIOLIB_SX128X_LORA_CR_4_5_LI 0x05
254#define RADIOLIB_SX128X_LORA_CR_4_6_LI 0x06
255#define RADIOLIB_SX128X_LORA_CR_4_7_LI 0x07
258#define RADIOLIB_SX128X_GFSK_FLRC_SYNC_WORD_OFF 0x00
259#define RADIOLIB_SX128X_GFSK_FLRC_SYNC_WORD_1 0x10
260#define RADIOLIB_SX128X_GFSK_FLRC_SYNC_WORD_2 0x20
261#define RADIOLIB_SX128X_GFSK_FLRC_SYNC_WORD_1_2 0x30
262#define RADIOLIB_SX128X_GFSK_FLRC_SYNC_WORD_3 0x40
263#define RADIOLIB_SX128X_GFSK_FLRC_SYNC_WORD_1_3 0x50
264#define RADIOLIB_SX128X_GFSK_FLRC_SYNC_WORD_2_3 0x60
265#define RADIOLIB_SX128X_GFSK_FLRC_SYNC_WORD_1_2_3 0x70
266#define RADIOLIB_SX128X_GFSK_FLRC_PACKET_FIXED 0x00
267#define RADIOLIB_SX128X_GFSK_FLRC_PACKET_VARIABLE 0x20
268#define RADIOLIB_SX128X_GFSK_FLRC_CRC_OFF 0x00
269#define RADIOLIB_SX128X_GFSK_FLRC_CRC_1_BYTE 0x10
270#define RADIOLIB_SX128X_GFSK_FLRC_CRC_2_BYTE 0x20
271#define RADIOLIB_SX128X_GFSK_FLRC_CRC_3_BYTE 0x30
272#define RADIOLIB_SX128X_GFSK_BLE_WHITENING_ON 0x00
273#define RADIOLIB_SX128X_GFSK_BLE_WHITENING_OFF 0x08
274#define RADIOLIB_SX128X_BLE_PAYLOAD_LENGTH_MAX_31 0x00
275#define RADIOLIB_SX128X_BLE_PAYLOAD_LENGTH_MAX_37 0x20
276#define RADIOLIB_SX128X_BLE_PAYLOAD_LENGTH_TEST 0x40
277#define RADIOLIB_SX128X_BLE_PAYLOAD_LENGTH_MAX_255 0x80
278#define RADIOLIB_SX128X_BLE_CRC_OFF 0x00
279#define RADIOLIB_SX128X_BLE_CRC_3_BYTE 0x10
280#define RADIOLIB_SX128X_BLE_PRBS_9 0x00
281#define RADIOLIB_SX128X_BLE_EYELONG 0x04
282#define RADIOLIB_SX128X_BLE_EYESHORT 0x08
283#define RADIOLIB_SX128X_BLE_PRBS_15 0x0C
284#define RADIOLIB_SX128X_BLE_ALL_1 0x10
285#define RADIOLIB_SX128X_BLE_ALL_0 0x14
286#define RADIOLIB_SX128X_BLE_EYELONG_INV 0x18
287#define RADIOLIB_SX128X_BLE_EYESHORT_INV 0x1C
288#define RADIOLIB_SX128X_FLRC_SYNC_WORD_OFF 0x00
289#define RADIOLIB_SX128X_FLRC_SYNC_WORD_ON 0x04
290#define RADIOLIB_SX128X_LORA_HEADER_EXPLICIT 0x00
291#define RADIOLIB_SX128X_LORA_HEADER_IMPLICIT 0x80
292#define RADIOLIB_SX128X_LORA_CRC_OFF 0x00
293#define RADIOLIB_SX128X_LORA_CRC_ON 0x20
294#define RADIOLIB_SX128X_LORA_IQ_STANDARD 0x40
295#define RADIOLIB_SX128X_LORA_IQ_INVERTED 0x00
298#define RADIOLIB_SX128X_PACKET_STATUS_SYNC_ERROR 0b01000000
299#define RADIOLIB_SX128X_PACKET_STATUS_LENGTH_ERROR 0b00100000
300#define RADIOLIB_SX128X_PACKET_STATUS_CRC_ERROR 0b00010000
301#define RADIOLIB_SX128X_PACKET_STATUS_ABORT_ERROR 0b00001000
302#define RADIOLIB_SX128X_PACKET_STATUS_HEADER_RECEIVED 0b00000100
303#define RADIOLIB_SX128X_PACKET_STATUS_PACKET_RECEIVED 0b00000010
304#define RADIOLIB_SX128X_PACKET_STATUS_PACKET_CTRL_BUSY 0b00000001
305#define RADIOLIB_SX128X_PACKET_STATUS_RX_PID 0b11000000
306#define RADIOLIB_SX128X_PACKET_STATUS_NO_ACK 0b00100000
307#define RADIOLIB_SX128X_PACKET_STATUS_RX_PID_ERROR 0b00010000
308#define RADIOLIB_SX128X_PACKET_STATUS_PACKET_SENT 0b00000001
309#define RADIOLIB_SX128X_PACKET_STATUS_SYNC_DET_ERROR 0b00000000
310#define RADIOLIB_SX128X_PACKET_STATUS_SYNC_DET_1 0b00000001
311#define RADIOLIB_SX128X_PACKET_STATUS_SYNC_DET_2 0b00000010
312#define RADIOLIB_SX128X_PACKET_STATUS_SYNC_DET_3 0b00000100
315#define RADIOLIB_SX128X_IRQ_PREAMBLE_DETECTED 0x8000
316#define RADIOLIB_SX128X_IRQ_ADVANCED_RANGING_DONE 0x8000
317#define RADIOLIB_SX128X_IRQ_RX_TX_TIMEOUT 0x4000
318#define RADIOLIB_SX128X_IRQ_CAD_DETECTED 0x2000
319#define RADIOLIB_SX128X_IRQ_CAD_DONE 0x1000
320#define RADIOLIB_SX128X_IRQ_RANGING_SLAVE_REQ_VALID 0x0800
321#define RADIOLIB_SX128X_IRQ_RANGING_MASTER_TIMEOUT 0x0400
322#define RADIOLIB_SX128X_IRQ_RANGING_MASTER_RES_VALID 0x0200
323#define RADIOLIB_SX128X_IRQ_RANGING_SLAVE_REQ_DISCARD 0x0100
324#define RADIOLIB_SX128X_IRQ_RANGING_SLAVE_RESP_DONE 0x0080
325#define RADIOLIB_SX128X_IRQ_CRC_ERROR 0x0040
326#define RADIOLIB_SX128X_IRQ_HEADER_ERROR 0x0020
327#define RADIOLIB_SX128X_IRQ_HEADER_VALID 0x0010
328#define RADIOLIB_SX128X_IRQ_SYNC_WORD_ERROR 0x0008
329#define RADIOLIB_SX128X_IRQ_SYNC_WORD_VALID 0x0004
330#define RADIOLIB_SX128X_IRQ_RX_DONE 0x0002
331#define RADIOLIB_SX128X_IRQ_TX_DONE 0x0001
332#define RADIOLIB_SX128X_IRQ_NONE 0x0000
333#define RADIOLIB_SX128X_IRQ_ALL 0xFFFF
336#define RADIOLIB_SX128X_REGULATOR_LDO 0x00
337#define RADIOLIB_SX128X_REGULATOR_DC_DC 0x01
340#define RADIOLIB_SX128X_RANGING_ROLE_MASTER 0x01
341#define RADIOLIB_SX128X_RANGING_ROLE_SLAVE 0x00
344#define RADIOLIB_SX128X_SYNC_WORD_PRIVATE 0x12
379 int16_t
begin(
float freq = 2400.0,
float bw = 812.5, uint8_t sf = 9, uint8_t cr = 7, uint8_t syncWord = RADIOLIB_SX128X_SYNC_WORD_PRIVATE, int8_t pwr = 10, uint16_t preambleLength = 12);
390 int16_t
beginGFSK(
float freq = 2400.0, uint16_t br = 800,
float freqDev = 400.0, int8_t pwr = 10, uint16_t preambleLength = 16);
401 int16_t
beginBLE(
float freq = 2400.0, uint16_t br = 800,
float freqDev = 400.0, int8_t pwr = 10, uint8_t dataShaping =
RADIOLIB_SHAPING_0_5);
413 int16_t
beginFLRC(
float freq = 2400.0, uint16_t br = 650, uint8_t cr = 3, int8_t pwr = 10, uint16_t preambleLength = 16, uint8_t dataShaping =
RADIOLIB_SHAPING_0_5);
421 int16_t
reset(
bool verify =
true);
431 int16_t
transmit(
const uint8_t* data,
size_t len, uint8_t addr = 0)
override;
440 int16_t
receive(uint8_t* data,
size_t len)
override;
474 int16_t
sleep()
override;
482 int16_t
sleep(
bool retainConfig);
497 int16_t
standby(uint8_t mode,
bool wakeup =
false);
562 int16_t
readData(uint8_t* data,
size_t len)
override;
635 int16_t
setCodingRate(uint8_t cr,
bool longInterleaving =
false);
658 int16_t
setModem(ModemType_t modem)
override;
665 int16_t
getModem(ModemType_t* modem)
override;
711 int16_t
setSyncWord(
const uint8_t* syncWord, uint8_t len);
719 int16_t
setSyncWord(uint8_t syncWord, uint8_t controlBits = 0x44);
728 int16_t
setCRC(uint8_t len, uint32_t initial = 0x1D0F, uint16_t polynomial = 0x1021);
842 int16_t
invertIQ(
bool enable)
override;
850 #if !RADIOLIB_EXCLUDE_DIRECT_RECEIVE
861 void readBit(uint32_t pin)
override;
864#if !RADIOLIB_GODMODE && !RADIOLIB_LOW_LEVEL
867 Module* getMod()
override;
870 float bandwidthKhz = 0;
871 uint8_t bandwidth = 0, spreadingFactor = 0, codingRateLoRa = 0;
872 uint8_t preambleLengthLoRa = 0, headerType = 0, payloadLen = 0, crcLoRa = 0;
876 int16_t writeRegister(uint16_t addr,
const uint8_t* data, uint8_t numBytes);
877 int16_t readRegister(uint16_t addr, uint8_t* data, uint8_t numBytes);
878 int16_t writeBuffer(
const uint8_t* data, uint8_t numBytes, uint8_t offset = 0x00);
879 int16_t readBuffer(uint8_t* data, uint8_t numBytes, uint8_t offset = 0x00);
880 int16_t setTx(uint16_t periodBaseCount = RADIOLIB_SX128X_TX_TIMEOUT_NONE, uint8_t periodBase = RADIOLIB_SX128X_PERIOD_BASE_15_625_US);
881 int16_t setRx(uint16_t periodBaseCount, uint8_t periodBase = RADIOLIB_SX128X_PERIOD_BASE_15_625_US);
882 int16_t setCad(uint8_t symbolNum);
883 uint8_t getPacketType();
884 int16_t setRfFrequency(uint32_t frf);
885 int16_t setTxParams(uint8_t pwr, uint8_t rampTime = RADIOLIB_SX128X_PA_RAMP_10_US);
886 int16_t setBufferBaseAddress(uint8_t txBaseAddress = 0x00, uint8_t rxBaseAddress = 0x00);
887 int16_t setModulationParams(uint8_t modParam1, uint8_t modParam2, uint8_t modParam3);
888 int16_t setPacketParamsGFSK(uint8_t preambleLen, uint8_t syncLen, uint8_t syncMatch, uint8_t crcLen, uint8_t whiten, uint8_t payLen = 0xFF, uint8_t hdrType = RADIOLIB_SX128X_GFSK_FLRC_PACKET_VARIABLE);
889 int16_t setPacketParamsBLE(uint8_t connState, uint8_t crcLen, uint8_t bleTest, uint8_t whiten);
890 int16_t setPacketParamsLoRa(uint8_t preambleLen, uint8_t hdrType, uint8_t payLen, uint8_t crc, uint8_t invIQ = RADIOLIB_SX128X_LORA_IQ_STANDARD);
891 int16_t setDioIrqParams(uint16_t irqMask, uint16_t dio1Mask, uint16_t dio2Mask = RADIOLIB_SX128X_IRQ_NONE, uint16_t dio3Mask = RADIOLIB_SX128X_IRQ_NONE);
892 int16_t clearIrqStatus(uint16_t clearIrqParams = RADIOLIB_SX128X_IRQ_ALL);
893 int16_t setRangingRole(uint8_t role);
894 int16_t setPacketType(uint8_t type);
902 static int16_t SPIparseStatus(uint8_t in);
906 uint32_t rxTimeout = 0;
909 uint8_t invertIQEnabled = RADIOLIB_SX128X_LORA_IQ_STANDARD;
912 float modIndexReal = 0;
913 uint16_t bitRateKbps = 0;
914 uint8_t bitRate = 0, modIndex = 0, shaping = 0;
915 uint8_t preambleLengthGFSK = 0, syncWordLen = 0, syncWordMatch = 0, crcGFSK = 0, whitening = 0;
918 uint8_t codingRateFLRC = 0;
921 uint8_t connectionState = 0, crcBLE = 0, bleTestPayload = 0;
923 int16_t config(uint8_t modem);
924 int16_t setHeaderType(uint8_t hdrType,
size_t len = 0xFF);
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
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 SX128x series. All derived classes for SX128x (e.g. SX1280 or SX1281) inherit from thi...
Definition SX128x.h:351
void setDio1Action(void(*func)(void))
Sets interrupt service routine to call when DIO1 activates.
Definition SX128x.cpp:494
int16_t setPreambleLength(uint32_t preambleLength)
Sets preamble length for currently active modem. Allowed values range from 1 to 65535.
Definition SX128x.cpp:788
int16_t setOutputPower(int8_t pwr) override
Sets output power. Allowed values are in range from -18 to 13 dBm.
Definition SX128x.cpp:742
void setPacketSentAction(void(*func)(void)) override
Sets interrupt service routine to call when a packet is sent.
Definition SX128x.cpp:510
int16_t setModem(ModemType_t modem) override
Set modem for the radio to use. Will perform full reset and reconfigure the radio using its default p...
Definition SX128x.cpp:759
void setDirectAction(void(*func)(void)) override
Dummy method, to ensure PhysicalLayer compatibility.
Definition SX128x.cpp:1514
float getRSSI() override
Gets RSSI (Recorded Signal Strength Indicator) of the last received packet.
Definition SX128x.cpp:1179
int16_t reset(bool verify=true)
Reset method. Will reset the chip to the default state using RST pin.
Definition SX128x.cpp:283
int16_t setFrequencyDeviation(float freqDev) override
Sets FSK frequency deviation. Allowed values range from 0.0 to 3200.0 kHz.
Definition SX128x.cpp:909
int16_t begin(float freq=2400.0, float bw=812.5, uint8_t sf=9, uint8_t cr=7, uint8_t syncWord=RADIOLIB_SX128X_SYNC_WORD_PRIVATE, int8_t pwr=10, uint16_t preambleLength=12)
Initialization method for LoRa modem.
Definition SX128x.cpp:21
float getFrequencyError()
Gets frequency error of the latest received packet.
Definition SX128x.cpp:1234
int16_t standby() override
Sets the module to standby mode (overload for PhysicalLayer compatibility, uses 13 MHz RC oscillator)...
Definition SX128x.cpp:476
int16_t beginFLRC(float freq=2400.0, uint16_t br=650, uint8_t cr=3, int8_t pwr=10, uint16_t preambleLength=16, uint8_t dataShaping=RADIOLIB_SHAPING_0_5)
Initialization method for FLRC modem.
Definition SX128x.cpp:215
int16_t scanChannel() override
Performs scan for LoRa transmission in the current channel. Detects both preamble and payload.
Definition SX128x.cpp:425
int16_t receive(uint8_t *data, size_t len) override
Blocking binary receive method. Overloads for string-based transmissions are implemented in PhysicalL...
Definition SX128x.cpp:353
int16_t setGainControl(uint8_t gain=0)
Enables or disables receiver manual gain control.
Definition SX128x.cpp:1143
size_t getPacketLength(bool update=true) override
Query modem for the packet length of received payload.
Definition SX128x.cpp:1267
int16_t finishTransmit() override
Clean up after transmission is done.
Definition SX128x.cpp:518
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 SX128x.cpp:316
int16_t invertIQ(bool enable) override
Enable/disable inversion of the I and Q signals.
Definition SX128x.cpp:1377
int16_t transmitDirect(uint32_t frf=0) override
Starts direct mode transmission.
Definition SX128x.cpp:402
void setRfSwitchPins(uint32_t rxEn, uint32_t txEn)
Some modules contain external RF switch controlled by pins. This function gives RadioLib control over...
Definition SX128x.cpp:1363
int16_t checkOutputPower(int8_t pwr, int8_t *clipped) override
Check if output power is configurable.
Definition SX128x.cpp:751
int16_t stageMode(RadioModeType_t mode, RadioModeConfig_t *cfg) override
Stage mode of the radio to be launched later using launchMode.
Definition SX128x.cpp:1391
int16_t setIrqFlags(uint32_t irq) override
Set interrupt on DIO1 to be sent on a specific IRQ bit (e.g. RxTimeout, CadDone).
Definition SX128x.cpp:573
int16_t setHighSensitivityMode(bool enable)
Enables or disables receiver high sensitivity mode.
Definition SX128x.cpp:1126
int16_t beginGFSK(float freq=2400.0, uint16_t br=800, float freqDev=400.0, int8_t pwr=10, uint16_t preambleLength=16)
Initialization method for GFSK modem.
Definition SX128x.cpp:85
int16_t startReceive() override
Interrupt-driven receive method with default parameters. Implemented for compatibility with PhysicalL...
Definition SX128x.cpp:526
int16_t setEncoding(uint8_t encoding) override
Sets transmission encoding. Serves only as alias for PhysicalLayer compatibility.
Definition SX128x.cpp:1359
int16_t setWhitening(bool enabled)
Sets whitening parameters, not available for LoRa or FLRC modem.
Definition SX128x.cpp:1095
uint8_t randomByte() override
Dummy random method, to ensure PhysicalLayer compatibility.
Definition SX128x.cpp:1371
int16_t setAccessAddress(uint32_t addr)
Sets BLE access address.
Definition SX128x.cpp:1115
int16_t startChannelScan() override
Interrupt-driven channel activity detection method. DIO1 will be activated when LoRa preamble is dete...
Definition SX128x.cpp:581
int16_t explicitHeader()
Set explicit header mode for future reception/transmission.
Definition SX128x.cpp:1355
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 SX128x.cpp:530
int16_t setDataShaping(uint8_t sh) override
Sets time-bandwidth product of Gaussian filter applied for shaping. Allowed values are RADIOLIB_SHAPI...
Definition SX128x.cpp:942
int16_t setCodingRate(uint8_t cr, bool longInterleaving=false)
Sets LoRa coding rate denominator. Allowed values range from 5 to 8.
Definition SX128x.cpp:714
uint32_t getIrqFlags() override
Read currently active IRQ flags.
Definition SX128x.cpp:569
int16_t setCRC(uint8_t len, uint32_t initial=0x1D0F, uint16_t polynomial=0x1021)
Sets CRC configuration.
Definition SX128x.cpp:1031
int16_t sleep() override
Sets the module to sleep mode. To wake the device up, call standby(). Overload for PhysicalLayer comp...
Definition SX128x.cpp:454
void clearPacketSentAction() override
Clears interrupt service routine to call when a packet is sent.
Definition SX128x.cpp:514
void clearDio1Action()
Clears interrupt service routine to call when DIO1 activates.
Definition SX128x.cpp:498
int16_t setFrequency(float freq) override
Sets carrier frequency. Allowed values are in range from 2400.0 to 2500.0 MHz.
Definition SX128x.cpp:642
int16_t getChannelScanResult() override
Read the channel scan result.
Definition SX128x.cpp:621
int16_t implicitHeader(size_t len)
Set implicit header mode for future reception/transmission.
Definition SX128x.cpp:1351
void clearPacketReceivedAction() override
Clears interrupt service routine to call when a packet is received.
Definition SX128x.cpp:506
int16_t beginBLE(float freq=2400.0, uint16_t br=800, float freqDev=400.0, int8_t pwr=10, uint8_t dataShaping=RADIOLIB_SHAPING_0_5)
Initialization method for BLE modem.
Definition SX128x.cpp:157
int16_t launchMode() override
Launch previously staged mode.
Definition SX128x.cpp:1485
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 SX128x.cpp:1367
int16_t setBitRate(float br) override
Sets FSK or FLRC bit rate. Allowed values are 125, 250, 400, 500, 800, 1000, 1600 and 2000 kbps (for ...
Definition SX128x.cpp:852
int16_t getModem(ModemType_t *modem) override
Get modem currently in use by the radio.
Definition SX128x.cpp:772
int16_t setSyncWord(const uint8_t *syncWord, uint8_t len)
Sets FSK/FLRC sync word in the form of array of up to 5 bytes (FSK). For FLRC modem,...
Definition SX128x.cpp:972
void setPacketReceivedAction(void(*func)(void)) override
Sets interrupt service routine to call when a packet is received.
Definition SX128x.cpp:502
int16_t setDataRate(DataRate_t dr) override
Set data rate.
Definition SX128x.cpp:836
float getSNR() override
Gets SNR (Signal to Noise Ratio) of the last received packet. Only available for LoRa or ranging mode...
Definition SX128x.cpp:1214
uint16_t getIrqStatus()
Reads the current IRQ status.
Definition SX128x.cpp:1629
int16_t setSpreadingFactor(uint8_t sf)
Sets LoRa spreading factor. Allowed values range from 5 to 12.
Definition SX128x.cpp:680
RadioLibTime_t getTimeOnAir(size_t len) override
Get expected time-on-air for a given size of payload.
Definition SX128x.cpp:1287
int16_t setBandwidth(float bw)
Sets LoRa bandwidth. Allowed values are 203.125, 406.25, 812.5 and 1625.0 kHz.
Definition SX128x.cpp:650
void readBit(uint32_t pin) override
Dummy method, to ensure PhysicalLayer compatibility.
Definition SX128x.cpp:1520
int16_t clearIrqFlags(uint32_t irq) override
Clear interrupt on a specific IRQ bit (e.g. RxTimeout, CadDone).
Definition SX128x.cpp:577
int16_t receiveDirect() override
Starts direct mode reception. Only implemented for PhysicalLayer compatibility, as SX128x series does...
Definition SX128x.cpp:417
#define RADIOLIB_SHAPING_0_5
Gaussian shaping filter, BT = 0.5.
Definition TypeDef.h:27
unsigned long RadioLibTime_t
Type used for durations in RadioLib.
Definition TypeDef.h:642
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