RadioLib Universal wireless communication library for Arduino

SX128x.h
1 #if !defined(_RADIOLIB_SX128X_H)
2 #define _RADIOLIB_SX128X_H
3
4 #include "../../TypeDef.h"
5
6 #if !defined(RADIOLIB_EXCLUDE_SX128X)
7
8 #include "../../Module.h"
9
10 #include "../../protocols/PhysicalLayer/PhysicalLayer.h"
11
12 // SX128X physical layer properties
13 #define RADIOLIB_SX128X_FREQUENCY_STEP_SIZE 198.3642578
14 #define RADIOLIB_SX128X_MAX_PACKET_LENGTH 255
15 #define RADIOLIB_SX128X_CRYSTAL_FREQ 52.0
16 #define RADIOLIB_SX128X_DIV_EXPONENT 18
17
18 // SX128X SPI commands
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_SET_SLEEP 0x84
26 #define RADIOLIB_SX128X_CMD_SET_STANDBY 0x80
27 #define RADIOLIB_SX128X_CMD_SET_FS 0xC1
28 #define RADIOLIB_SX128X_CMD_SET_TX 0x83
29 #define RADIOLIB_SX128X_CMD_SET_RX 0x82
30 #define RADIOLIB_SX128X_CMD_SET_RX_DUTY_CYCLE 0x94
31 #define RADIOLIB_SX128X_CMD_SET_CAD 0xC5
32 #define RADIOLIB_SX128X_CMD_SET_TX_CONTINUOUS_WAVE 0xD1
33 #define RADIOLIB_SX128X_CMD_SET_TX_CONTINUOUS_PREAMBLE 0xD2
34 #define RADIOLIB_SX128X_CMD_SET_PACKET_TYPE 0x8A
35 #define RADIOLIB_SX128X_CMD_GET_PACKET_TYPE 0x03
36 #define RADIOLIB_SX128X_CMD_SET_RF_FREQUENCY 0x86
37 #define RADIOLIB_SX128X_CMD_SET_TX_PARAMS 0x8E
38 #define RADIOLIB_SX128X_CMD_SET_CAD_PARAMS 0x88
39 #define RADIOLIB_SX128X_CMD_SET_BUFFER_BASE_ADDRESS 0x8F
40 #define RADIOLIB_SX128X_CMD_SET_MODULATION_PARAMS 0x8B
41 #define RADIOLIB_SX128X_CMD_SET_PACKET_PARAMS 0x8C
42 #define RADIOLIB_SX128X_CMD_GET_RX_BUFFER_STATUS 0x17
43 #define RADIOLIB_SX128X_CMD_GET_PACKET_STATUS 0x1D
44 #define RADIOLIB_SX128X_CMD_GET_RSSI_INST 0x1F
45 #define RADIOLIB_SX128X_CMD_SET_DIO_IRQ_PARAMS 0x8D
46 #define RADIOLIB_SX128X_CMD_GET_IRQ_STATUS 0x15
47 #define RADIOLIB_SX128X_CMD_CLEAR_IRQ_STATUS 0x97
48 #define RADIOLIB_SX128X_CMD_SET_REGULATOR_MODE 0x96
49 #define RADIOLIB_SX128X_CMD_SET_SAVE_CONTEXT 0xD5
50 #define RADIOLIB_SX128X_CMD_SET_AUTO_TX 0x98
51 #define RADIOLIB_SX128X_CMD_SET_AUTO_FS 0x9E
52 #define RADIOLIB_SX128X_CMD_SET_PERF_COUNTER_MODE 0x9C
53 #define RADIOLIB_SX128X_CMD_SET_LONG_PREAMBLE 0x9B
54 #define RADIOLIB_SX128X_CMD_SET_UART_SPEED 0x9D
55 #define RADIOLIB_SX128X_CMD_SET_RANGING_ROLE 0xA3
56 #define RADIOLIB_SX128X_CMD_SET_ADVANCED_RANGING 0x9A
57
58 // SX128X register map
59 #define RADIOLIB_SX128X_REG_GAIN_MODE 0x0891
60 #define RADIOLIB_SX128X_REG_MANUAL_GAIN_CONTROL_ENABLE_2 0x0895
61 #define RADIOLIB_SX128X_REG_MANUAL_GAIN_SETTING 0x089E
62 #define RADIOLIB_SX128X_REG_MANUAL_GAIN_CONTROL_ENABLE_1 0x089F
63 #define RADIOLIB_SX128X_REG_SYNCH_PEAK_ATTENUATION 0x08C2
64 #define RADIOLIB_SX128X_REG_LORA_FIXED_PAYLOAD_LENGTH 0x0901
65 #define RADIOLIB_SX128X_REG_LORA_HEADER_MODE 0x0903
66 #define RADIOLIB_SX128X_REG_MASTER_RANGING_ADDRESS_BYTE_3 0x0912
67 #define RADIOLIB_SX128X_REG_MASTER_RANGING_ADDRESS_BYTE_2 0x0913
68 #define RADIOLIB_SX128X_REG_MASTER_RANGING_ADDRESS_BYTE_1 0x0914
69 #define RADIOLIB_SX128X_REG_MASTER_RANGING_ADDRESS_BYTE_0 0x0915
70 #define RADIOLIB_SX128X_REG_SLAVE_RANGING_ADDRESS_BYTE_3 0x0916
71 #define RADIOLIB_SX128X_REG_SLAVE_RANGING_ADDRESS_BYTE_2 0x0917
72 #define RADIOLIB_SX128X_REG_SLAVE_RANGING_ADDRESS_BYTE_1 0x0918
73 #define RADIOLIB_SX128X_REG_SLAVE_RANGING_ADDRESS_BYTE_0 0x0919
74 #define RADIOLIB_SX128X_REG_RANGING_FILTER_WINDOW_SIZE 0x091E
75 #define RADIOLIB_SX128X_REG_RANGING_FILTER_RESET 0x0923
76 #define RADIOLIB_SX128X_REG_RANGING_TYPE 0x0924
77 #define RADIOLIB_SX128X_REG_LORA_SF_CONFIG 0x0925
78 #define RADIOLIB_SX128X_REG_RANGING_ADDRESS_SWITCH 0x0927
79 #define RADIOLIB_SX128X_REG_RANGING_CALIBRATION_BYTE_2 0x092B
80 #define RADIOLIB_SX128X_REG_RANGING_CALIBRATION_MSB 0x092C
81 #define RADIOLIB_SX128X_REG_RANGING_CALIBRATION_LSB 0x092D
82 #define RADIOLIB_SX128X_REG_SLAVE_RANGING_ADDRESS_WIDTH 0x0931
83 #define RADIOLIB_SX128X_REG_FREQ_ERROR_CORRECTION 0x093C
84 #define RADIOLIB_SX128X_REG_LORA_SYNC_WORD_MSB 0x0944
85 #define RADIOLIB_SX128X_REG_LORA_SYNC_WORD_LSB 0x0945
86 #define RADIOLIB_SX128X_REG_RANGING_FILTER_RSSI_OFFSET 0x0953
87 #define RADIOLIB_SX128X_REG_FEI_MSB 0x0954
88 #define RADIOLIB_SX128X_REG_FEI_MID 0x0955
89 #define RADIOLIB_SX128X_REG_FEI_LSB 0x0956
90 #define RADIOLIB_SX128X_REG_RANGING_ADDRESS_MSB 0x095F
91 #define RADIOLIB_SX128X_REG_RANGING_ADDRESS_LSB 0x0960
92 #define RADIOLIB_SX128X_REG_RANGING_RESULT_MSB 0x0961
93 #define RADIOLIB_SX128X_REG_RANGING_RESULT_MID 0x0962
94 #define RADIOLIB_SX128X_REG_RANGING_RESULT_LSB 0x0963
95 #define RADIOLIB_SX128X_REG_RANGING_RSSI 0x0964
96 #define RADIOLIB_SX128X_REG_RANGING_LORA_CLOCK_ENABLE 0x097F
97 #define RADIOLIB_SX128X_REG_PACKET_PREAMBLE_SETTINGS 0x09C1
98 #define RADIOLIB_SX128X_REG_WHITENING_INITIAL_VALUE 0x09C5
99 #define RADIOLIB_SX128X_REG_CRC_POLYNOMIAL_MSB 0x09C6
100 #define RADIOLIB_SX128X_REG_CRC_POLYNOMIAL_LSB 0x09C7
101 #define RADIOLIB_SX128X_REG_CRC_INITIAL_MSB 0x09C8
102 #define RADIOLIB_SX128X_REG_CRC_INITIAL_LSB 0x09C9
103 #define RADIOLIB_SX128X_REG_BLE_CRC_INITIAL_MSB 0x09C7
104 #define RADIOLIB_SX128X_REG_BLE_CRC_INITIAL_MID (RADIOLIB_SX128X_REG_CRC_INITIAL_MSB)
105 #define RADIOLIB_SX128X_REG_BLE_CRC_INITIAL_LSB (RADIOLIB_SX128X_REG_CRC_INITIAL_LSB)
106 #define RADIOLIB_SX128X_REG_SYNCH_ADDRESS_CONTROL 0x09CD
107 #define RADIOLIB_SX128X_REG_SYNC_WORD_1_BYTE_4 0x09CE
108 #define RADIOLIB_SX128X_REG_SYNC_WORD_1_BYTE_3 0x09CF
109 #define RADIOLIB_SX128X_REG_SYNC_WORD_1_BYTE_2 0x09D0
110 #define RADIOLIB_SX128X_REG_SYNC_WORD_1_BYTE_1 0x09D1
111 #define RADIOLIB_SX128X_REG_SYNC_WORD_1_BYTE_0 0x09D2
112 #define RADIOLIB_SX128X_REG_SYNC_WORD_2_BYTE_4 0x09D3
113 #define RADIOLIB_SX128X_REG_SYNC_WORD_2_BYTE_3 0x09D4
114 #define RADIOLIB_SX128X_REG_SYNC_WORD_2_BYTE_2 0x09D5
115 #define RADIOLIB_SX128X_REG_SYNC_WORD_2_BYTE_1 0x09D6
116 #define RADIOLIB_SX128X_REG_SYNC_WORD_2_BYTE_0 0x09D7
117 #define RADIOLIB_SX128X_REG_SYNC_WORD_3_BYTE_4 0x09D8
118 #define RADIOLIB_SX128X_REG_SYNC_WORD_3_BYTE_3 0x09D9
119 #define RADIOLIB_SX128X_REG_SYNC_WORD_3_BYTE_2 0x09DA
120 #define RADIOLIB_SX128X_REG_SYNC_WORD_3_BYTE_1 0x09DB
121 #define RADIOLIB_SX128X_REG_SYNC_WORD_3_BYTE_0 0x09DC
122 #define RADIOLIB_SX128X_REG_ACCESS_ADDRESS_BYTE_3 (RADIOLIB_SX128X_REG_SYNC_WORD_1_BYTE_3)
123 #define RADIOLIB_SX128X_REG_ACCESS_ADDRESS_BYTE_2 (RADIOLIB_SX128X_REG_SYNC_WORD_1_BYTE_2)
124 #define RADIOLIB_SX128X_REG_ACCESS_ADDRESS_BYTE_1 (RADIOLIB_SX128X_REG_SYNC_WORD_1_BYTE_1)
125 #define RADIOLIB_SX128X_REG_ACCESS_ADDRESS_BYTE_0 (RADIOLIB_SX128X_REG_SYNC_WORD_1_BYTE_0)
126
127 // SX128X SPI command variables
128 //RADIOLIB_SX128X_CMD_GET_STATUS MSB LSB DESCRIPTION
129 #define RADIOLIB_SX128X_STATUS_MODE_STDBY_RC 0b01000000 // 7 5 current chip mode: STDBY_RC
130 #define RADIOLIB_SX128X_STATUS_MODE_STDBY_XOSC 0b01100000 // 7 5 STDBY_XOSC
131 #define RADIOLIB_SX128X_STATUS_MODE_FS 0b10000000 // 7 5 FS
132 #define RADIOLIB_SX128X_STATUS_MODE_RX 0b10100000 // 7 5 Rx
133 #define RADIOLIB_SX128X_STATUS_MODE_TX 0b11000000 // 7 5 Tx
134 #define RADIOLIB_SX128X_STATUS_CMD_PROCESSED 0b00000100 // 4 2 command status: processing OK
135 #define RADIOLIB_SX128X_STATUS_DATA_AVAILABLE 0b00001000 // 4 2 data available
136 #define RADIOLIB_SX128X_STATUS_CMD_TIMEOUT 0b00001100 // 4 2 timeout
137 #define RADIOLIB_SX128X_STATUS_CMD_ERROR 0b00010000 // 4 2 processing error
138 #define RADIOLIB_SX128X_STATUS_CMD_FAILED 0b00010100 // 4 2 failed to execute
139 #define RADIOLIB_SX128X_STATUS_TX_DONE 0b00011000 // 4 2 transmission finished
140 #define RADIOLIB_SX128X_STATUS_BUSY 0b00000001 // 0 0 chip busy
141 #define RADIOLIB_SX128X_STATUS_SPI_FAILED 0b11111111 // 7 0 SPI transaction failed
142
143 //RADIOLIB_SX128X_CMD_SET_SLEEP
144 #define RADIOLIB_SX128X_SLEEP_DATA_BUFFER_FLUSH 0b00000000 // 1 1 data buffer behavior in sleep mode: flush
145 #define RADIOLIB_SX128X_SLEEP_DATA_BUFFER_RETAIN 0b00000010 // 1 1 retain
146 #define RADIOLIB_SX128X_SLEEP_DATA_RAM_FLUSH 0b00000000 // 0 0 data RAM (configuration) behavior in sleep mode: flush
147 #define RADIOLIB_SX128X_SLEEP_DATA_RAM_RETAIN 0b00000001 // 0 0 retain
148
149 //RADIOLIB_SX128X_CMD_SET_STANDBY
150 #define RADIOLIB_SX128X_STANDBY_RC 0x00 // 7 0 standby mode: 13 MHz RC oscillator
151 #define RADIOLIB_SX128X_STANDBY_XOSC 0x01 // 7 0 52 MHz crystal oscillator
152
153 //RADIOLIB_SX128X_CMD_SET_TX + RADIOLIB_SX128X_CMD_SET_RX + RADIOLIB_SX128X_CMD_SET_RX_DUTY_CYCLE
154 #define RADIOLIB_SX128X_PERIOD_BASE_15_625_US 0x00 // 7 0 time period step: 15.625 us
155 #define RADIOLIB_SX128X_PERIOD_BASE_62_5_US 0x01 // 7 0 62.5 us
156 #define RADIOLIB_SX128X_PERIOD_BASE_1_MS 0x02 // 7 0 1 ms
157 #define RADIOLIB_SX128X_PERIOD_BASE_4_MS 0x03 // 7 0 4 ms
158
159 //RADIOLIB_SX128X_CMD_SET_TX
160 #define RADIOLIB_SX128X_TX_TIMEOUT_NONE 0x0000 // 15 0 Tx timeout duration: no timeout (Tx single mode)
161
162 //RADIOLIB_SX128X_CMD_SET_RX
163 #define RADIOLIB_SX128X_RX_TIMEOUT_NONE 0x0000 // 15 0 Rx timeout duration: no timeout (Rx single mode)
164 #define RADIOLIB_SX128X_RX_TIMEOUT_INF 0xFFFF // 15 0 infinite (Rx continuous mode)
165
166 //RADIOLIB_SX128X_CMD_SET_PACKET_TYPE
167 #define RADIOLIB_SX128X_PACKET_TYPE_GFSK 0x00 // 7 0 packet type: (G)FSK
168 #define RADIOLIB_SX128X_PACKET_TYPE_LORA 0x01 // 7 0 LoRa
169 #define RADIOLIB_SX128X_PACKET_TYPE_RANGING 0x02 // 7 0 ranging engine
170 #define RADIOLIB_SX128X_PACKET_TYPE_FLRC 0x03 // 7 0 FLRC
171 #define RADIOLIB_SX128X_PACKET_TYPE_BLE 0x04 // 7 0 BLE
172
173 //RADIOLIB_SX128X_CMD_SET_TX_PARAMS
174 #define RADIOLIB_SX128X_PA_RAMP_02_US 0x00 // 7 0 PA ramp time: 2 us
175 #define RADIOLIB_SX128X_PA_RAMP_04_US 0x20 // 7 0 4 us
176 #define RADIOLIB_SX128X_PA_RAMP_06_US 0x40 // 7 0 6 us
177 #define RADIOLIB_SX128X_PA_RAMP_08_US 0x60 // 7 0 8 us
178 #define RADIOLIB_SX128X_PA_RAMP_10_US 0x80 // 7 0 10 us
179 #define RADIOLIB_SX128X_PA_RAMP_12_US 0xA0 // 7 0 12 us
180 #define RADIOLIB_SX128X_PA_RAMP_16_US 0xC0 // 7 0 16 us
181 #define RADIOLIB_SX128X_PA_RAMP_20_US 0xE0 // 7 0 20 us
182
183 //RADIOLIB_SX128X_CMD_SET_CAD_PARAMS
184 #define RADIOLIB_SX128X_CAD_ON_1_SYMB 0x00 // 7 0 number of symbols used for CAD: 1
185 #define RADIOLIB_SX128X_CAD_ON_2_SYMB 0x20 // 7 0 2
186 #define RADIOLIB_SX128X_CAD_ON_4_SYMB 0x40 // 7 0 4
187 #define RADIOLIB_SX128X_CAD_ON_8_SYMB 0x60 // 7 0 8
188 #define RADIOLIB_SX128X_CAD_ON_16_SYMB 0x80 // 7 0 16
189
190 //RADIOLIB_SX128X_CMD_SET_MODULATION_PARAMS
191 #define RADIOLIB_SX128X_BLE_GFSK_BR_2_000_BW_2_4 0x04 // 7 0 GFSK/BLE bit rate and bandwidth setting: 2.0 Mbps 2.4 MHz
192 #define RADIOLIB_SX128X_BLE_GFSK_BR_1_600_BW_2_4 0x28 // 7 0 1.6 Mbps 2.4 MHz
193 #define RADIOLIB_SX128X_BLE_GFSK_BR_1_000_BW_2_4 0x4C // 7 0 1.0 Mbps 2.4 MHz
194 #define RADIOLIB_SX128X_BLE_GFSK_BR_1_000_BW_1_2 0x45 // 7 0 1.0 Mbps 1.2 MHz
195 #define RADIOLIB_SX128X_BLE_GFSK_BR_0_800_BW_2_4 0x70 // 7 0 0.8 Mbps 2.4 MHz
196 #define RADIOLIB_SX128X_BLE_GFSK_BR_0_800_BW_1_2 0x69 // 7 0 0.8 Mbps 1.2 MHz
197 #define RADIOLIB_SX128X_BLE_GFSK_BR_0_500_BW_1_2 0x8D // 7 0 0.5 Mbps 1.2 MHz
198 #define RADIOLIB_SX128X_BLE_GFSK_BR_0_500_BW_0_6 0x86 // 7 0 0.5 Mbps 0.6 MHz
199 #define RADIOLIB_SX128X_BLE_GFSK_BR_0_400_BW_1_2 0xB1 // 7 0 0.4 Mbps 1.2 MHz
200 #define RADIOLIB_SX128X_BLE_GFSK_BR_0_400_BW_0_6 0xAA // 7 0 0.4 Mbps 0.6 MHz
201 #define RADIOLIB_SX128X_BLE_GFSK_BR_0_250_BW_0_6 0xCE // 7 0 0.25 Mbps 0.6 MHz
202 #define RADIOLIB_SX128X_BLE_GFSK_BR_0_250_BW_0_3 0xC7 // 7 0 0.25 Mbps 0.3 MHz
203 #define RADIOLIB_SX128X_BLE_GFSK_BR_0_125_BW_0_3 0xEF // 7 0 0.125 Mbps 0.3 MHz
204 #define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_0_35 0x00 // 7 0 GFSK/BLE modulation index: 0.35
205 #define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_0_50 0x01 // 7 0 0.50
206 #define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_0_75 0x02 // 7 0 0.75
207 #define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_1_00 0x03 // 7 0 1.00
208 #define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_1_25 0x04 // 7 0 1.25
209 #define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_1_50 0x05 // 7 0 1.50
210 #define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_1_75 0x06 // 7 0 1.75
211 #define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_2_00 0x07 // 7 0 2.00
212 #define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_2_25 0x08 // 7 0 2.25
213 #define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_2_50 0x09 // 7 0 2.50
214 #define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_2_75 0x0A // 7 0 2.75
215 #define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_3_00 0x0B // 7 0 3.00
216 #define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_3_25 0x0C // 7 0 3.25
217 #define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_3_50 0x0D // 7 0 3.50
218 #define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_3_75 0x0E // 7 0 3.75
219 #define RADIOLIB_SX128X_BLE_GFSK_MOD_IND_4_00 0x0F // 7 0 4.00
220 #define RADIOLIB_SX128X_BLE_GFSK_BT_OFF 0x00 // 7 0 GFSK Gaussian filter BT product: filter disabled
221 #define RADIOLIB_SX128X_BLE_GFSK_BT_1_0 0x10 // 7 0 1.0
222 #define RADIOLIB_SX128X_BLE_GFSK_BT_0_5 0x20 // 7 0 0.5
223 #define RADIOLIB_SX128X_FLRC_BR_1_300_BW_1_2 0x45 // 7 0 FLRC bit rate and bandwidth setting: 1.3 Mbps 1.2 MHz
224 #define RADIOLIB_SX128X_FLRC_BR_1_000_BW_1_2 0x69 // 7 0 1.04 Mbps 1.2 MHz
225 #define RADIOLIB_SX128X_FLRC_BR_0_650_BW_0_6 0x86 // 7 0 0.65 Mbps 0.6 MHz
226 #define RADIOLIB_SX128X_FLRC_BR_0_520_BW_0_6 0xAA // 7 0 0.52 Mbps 0.6 MHz
227 #define RADIOLIB_SX128X_FLRC_BR_0_325_BW_0_3 0xC7 // 7 0 0.325 Mbps 0.3 MHz
228 #define RADIOLIB_SX128X_FLRC_BR_0_260_BW_0_3 0xEB // 7 0 0.260 Mbps 0.3 MHz
229 #define RADIOLIB_SX128X_FLRC_CR_1_2 0x00 // 7 0 FLRC coding rate: 1/2
230 #define RADIOLIB_SX128X_FLRC_CR_3_4 0x02 // 7 0 3/4
231 #define RADIOLIB_SX128X_FLRC_CR_1_0 0x04 // 7 0 1/1
232 #define RADIOLIB_SX128X_FLRC_BT_OFF 0x00 // 7 0 FLRC Gaussian filter BT product: filter disabled
233 #define RADIOLIB_SX128X_FLRC_BT_1_0 0x10 // 7 0 1.0
234 #define RADIOLIB_SX128X_FLRC_BT_0_5 0x20 // 7 0 0.5
235 #define RADIOLIB_SX128X_LORA_SF_5 0x50 // 7 0 LoRa spreading factor: 5
236 #define RADIOLIB_SX128X_LORA_SF_6 0x60 // 7 0 6
237 #define RADIOLIB_SX128X_LORA_SF_7 0x70 // 7 0 7
238 #define RADIOLIB_SX128X_LORA_SF_8 0x80 // 7 0 8
239 #define RADIOLIB_SX128X_LORA_SF_9 0x90 // 7 0 9
240 #define RADIOLIB_SX128X_LORA_SF_10 0xA0 // 7 0 10
241 #define RADIOLIB_SX128X_LORA_SF_11 0xB0 // 7 0 11
242 #define RADIOLIB_SX128X_LORA_SF_12 0xC0 // 7 0 12
243 #define RADIOLIB_SX128X_LORA_BW_1625_00 0x0A // 7 0 LoRa bandwidth: 1625.0 kHz
244 #define RADIOLIB_SX128X_LORA_BW_812_50 0x18 // 7 0 812.5 kHz
245 #define RADIOLIB_SX128X_LORA_BW_406_25 0x26 // 7 0 406.25 kHz
246 #define RADIOLIB_SX128X_LORA_BW_203_125 0x34 // 7 0 203.125 kHz
247 #define RADIOLIB_SX128X_LORA_CR_4_5 0x01 // 7 0 LoRa coding rate: 4/5
248 #define RADIOLIB_SX128X_LORA_CR_4_6 0x02 // 7 0 4/6
249 #define RADIOLIB_SX128X_LORA_CR_4_7 0x03 // 7 0 4/7
250 #define RADIOLIB_SX128X_LORA_CR_4_8 0x04 // 7 0 4/8
251 #define RADIOLIB_SX128X_LORA_CR_4_5_LI 0x05 // 7 0 4/5, long interleaving
252 #define RADIOLIB_SX128X_LORA_CR_4_6_LI 0x06 // 7 0 4/6, long interleaving
253 #define RADIOLIB_SX128X_LORA_CR_4_7_LI 0x07 // 7 0 4/7, long interleaving
254
255 //RADIOLIB_SX128X_CMD_SET_PACKET_PARAMS
256 #define RADIOLIB_SX128X_GFSK_FLRC_SYNC_WORD_OFF 0x00 // 7 0 GFSK/FLRC sync word used: none
257 #define RADIOLIB_SX128X_GFSK_FLRC_SYNC_WORD_1 0x10 // 7 0 sync word 1
258 #define RADIOLIB_SX128X_GFSK_FLRC_SYNC_WORD_2 0x20 // 7 0 sync word 2
259 #define RADIOLIB_SX128X_GFSK_FLRC_SYNC_WORD_1_2 0x30 // 7 0 sync words 1 and 2
260 #define RADIOLIB_SX128X_GFSK_FLRC_SYNC_WORD_3 0x40 // 7 0 sync word 3
261 #define RADIOLIB_SX128X_GFSK_FLRC_SYNC_WORD_1_3 0x50 // 7 0 sync words 1 and 3
262 #define RADIOLIB_SX128X_GFSK_FLRC_SYNC_WORD_2_3 0x60 // 7 0 sync words 2 and 3
263 #define RADIOLIB_SX128X_GFSK_FLRC_SYNC_WORD_1_2_3 0x70 // 7 0 sync words 1, 2 and 3
264 #define RADIOLIB_SX128X_GFSK_FLRC_PACKET_FIXED 0x00 // 7 0 GFSK/FLRC packet length mode: fixed
265 #define RADIOLIB_SX128X_GFSK_FLRC_PACKET_VARIABLE 0x20 // 7 0 variable
266 #define RADIOLIB_SX128X_GFSK_FLRC_CRC_OFF 0x00 // 7 0 GFSK/FLRC packet CRC: none
267 #define RADIOLIB_SX128X_GFSK_FLRC_CRC_1_BYTE 0x10 // 7 0 1 byte
268 #define RADIOLIB_SX128X_GFSK_FLRC_CRC_2_BYTE 0x20 // 7 0 2 bytes
269 #define RADIOLIB_SX128X_GFSK_FLRC_CRC_3_BYTE 0x30 // 7 0 3 bytes (FLRC only)
270 #define RADIOLIB_SX128X_GFSK_BLE_WHITENING_ON 0x00 // 7 0 GFSK/BLE whitening: enabled
271 #define RADIOLIB_SX128X_GFSK_BLE_WHITENING_OFF 0x08 // 7 0 disabled
272 #define RADIOLIB_SX128X_BLE_PAYLOAD_LENGTH_MAX_31 0x00 // 7 0 BLE maximum payload length: 31 bytes
273 #define RADIOLIB_SX128X_BLE_PAYLOAD_LENGTH_MAX_37 0x20 // 7 0 37 bytes
274 #define RADIOLIB_SX128X_BLE_PAYLOAD_LENGTH_TEST 0x40 // 7 0 63 bytes (test mode)
275 #define RADIOLIB_SX128X_BLE_PAYLOAD_LENGTH_MAX_255 0x80 // 7 0 255 bytes (Bluetooth 4.2 and above)
276 #define RADIOLIB_SX128X_BLE_CRC_OFF 0x00 // 7 0 BLE packet CRC: none
277 #define RADIOLIB_SX128X_BLE_CRC_3_BYTE 0x10 // 7 0 3 byte
278 #define RADIOLIB_SX128X_BLE_PRBS_9 0x00 // 7 0 BLE test payload contents: PRNG sequence using x^9 + x^5 + x
279 #define RADIOLIB_SX128X_BLE_EYELONG 0x04 // 7 0 repeated 0xF0
280 #define RADIOLIB_SX128X_BLE_EYESHORT 0x08 // 7 0 repeated 0xAA
281 #define RADIOLIB_SX128X_BLE_PRBS_15 0x0C // 7 0 PRNG sequence using x^15 + x^14 + x^13 + x^12 + x^2 + x + 1
282 #define RADIOLIB_SX128X_BLE_ALL_1 0x10 // 7 0 repeated 0xFF
283 #define RADIOLIB_SX128X_BLE_ALL_0 0x14 // 7 0 repeated 0x00
284 #define RADIOLIB_SX128X_BLE_EYELONG_INV 0x18 // 7 0 repeated 0x0F
285 #define RADIOLIB_SX128X_BLE_EYESHORT_INV 0x1C // 7 0 repeated 0x55
286 #define RADIOLIB_SX128X_FLRC_SYNC_WORD_OFF 0x00 // 7 0 FLRC sync word: disabled
287 #define RADIOLIB_SX128X_FLRC_SYNC_WORD_ON 0x04 // 7 0 enabled
288 #define RADIOLIB_SX128X_LORA_HEADER_EXPLICIT 0x00 // 7 0 LoRa header mode: explicit
289 #define RADIOLIB_SX128X_LORA_HEADER_IMPLICIT 0x80 // 7 0 implicit
290 #define RADIOLIB_SX128X_LORA_CRC_OFF 0x00 // 7 0 LoRa packet CRC: disabled
291 #define RADIOLIB_SX128X_LORA_CRC_ON 0x20 // 7 0 enabled
292 #define RADIOLIB_SX128X_LORA_IQ_STANDARD 0x40 // 7 0 LoRa IQ: standard
293 #define RADIOLIB_SX128X_LORA_IQ_INVERTED 0x00 // 7 0 inverted
294
295 //RADIOLIB_SX128X_CMD_GET_PACKET_STATUS
296 #define RADIOLIB_SX128X_PACKET_STATUS_SYNC_ERROR 0b01000000 // 6 6 packet status errors byte: sync word error
297 #define RADIOLIB_SX128X_PACKET_STATUS_LENGTH_ERROR 0b00100000 // 5 5 packet length error
298 #define RADIOLIB_SX128X_PACKET_STATUS_CRC_ERROR 0b00010000 // 4 4 CRC error
299 #define RADIOLIB_SX128X_PACKET_STATUS_ABORT_ERROR 0b00001000 // 3 3 packet reception aborted
300 #define RADIOLIB_SX128X_PACKET_STATUS_HEADER_RECEIVED 0b00000100 // 2 2 header received
301 #define RADIOLIB_SX128X_PACKET_STATUS_PACKET_RECEIVED 0b00000010 // 1 1 packet received
302 #define RADIOLIB_SX128X_PACKET_STATUS_PACKET_CTRL_BUSY 0b00000001 // 0 0 packet controller is busy
303 #define RADIOLIB_SX128X_PACKET_STATUS_RX_PID 0b11000000 // 7 6 packet status status byte: PID field of the received packet
304 #define RADIOLIB_SX128X_PACKET_STATUS_NO_ACK 0b00100000 // 5 5 NO_ACK field of the received packet
305 #define RADIOLIB_SX128X_PACKET_STATUS_RX_PID_ERROR 0b00010000 // 4 4 PID field error
306 #define RADIOLIB_SX128X_PACKET_STATUS_PACKET_SENT 0b00000001 // 0 0 packet sent
307 #define RADIOLIB_SX128X_PACKET_STATUS_SYNC_DET_ERROR 0b00000000 // 2 0 packet status sync byte: sync word detection error
308 #define RADIOLIB_SX128X_PACKET_STATUS_SYNC_DET_1 0b00000001 // 2 0 detected sync word 1
309 #define RADIOLIB_SX128X_PACKET_STATUS_SYNC_DET_2 0b00000010 // 2 0 detected sync word 2
310 #define RADIOLIB_SX128X_PACKET_STATUS_SYNC_DET_3 0b00000100 // 2 0 detected sync word 3
311
312 //RADIOLIB_SX128X_CMD_SET_DIO_IRQ_PARAMS
313 #define RADIOLIB_SX128X_IRQ_RADIOLIB_PREAMBLE_DETECTED 0x8000 // 15 15 interrupt source: preamble detected
314 #define RADIOLIB_SX128X_IRQ_ADVANCED_RANGING_DONE 0x8000 // 15 15 advanced ranging done
315 #define RADIOLIB_SX128X_IRQ_RX_TX_TIMEOUT 0x4000 // 14 14 Rx or Tx timeout
316 #define RADIOLIB_SX128X_IRQ_CAD_DETECTED 0x2000 // 13 13 channel activity detected
317 #define RADIOLIB_SX128X_IRQ_CAD_DONE 0x1000 // 12 12 CAD finished
318 #define RADIOLIB_SX128X_IRQ_RANGING_SLAVE_REQ_VALID 0x0800 // 11 11 ranging request valid (slave)
319 #define RADIOLIB_SX128X_IRQ_RANGING_MASTER_TIMEOUT 0x0400 // 10 10 ranging timeout (master)
320 #define RADIOLIB_SX128X_IRQ_RANGING_MASTER_RES_VALID 0x0200 // 9 9 ranging result valid (master)
321 #define RADIOLIB_SX128X_IRQ_RANGING_SLAVE_REQ_DISCARD 0x0100 // 8 8 ranging result valid (master)
322 #define RADIOLIB_SX128X_IRQ_RANGING_SLAVE_RESP_DONE 0x0080 // 7 7 ranging response complete (slave)
323 #define RADIOLIB_SX128X_IRQ_CRC_ERROR 0x0040 // 6 6 CRC error
324 #define RADIOLIB_SX128X_IRQ_HEADER_ERROR 0x0020 // 5 5 header error
325 #define RADIOLIB_SX128X_IRQ_HEADER_VALID 0x0010 // 4 4 header valid
326 #define RADIOLIB_SX128X_IRQ_SYNC_WORD_ERROR 0x0008 // 3 3 sync word error
327 #define RADIOLIB_SX128X_IRQ_SYNC_WORD_VALID 0x0004 // 2 2 sync word valid
328 #define RADIOLIB_SX128X_IRQ_RX_DONE 0x0002 // 1 1 Rx done
329 #define RADIOLIB_SX128X_IRQ_TX_DONE 0x0001 // 0 0 Tx done
330 #define RADIOLIB_SX128X_IRQ_RX_DEFAULT 0x4062 // 15 0 default for Rx (RX_DONE, RX_TX_TIMEOUT, CRC_ERROR and HEADER_ERROR)
331 #define RADIOLIB_SX128X_IRQ_NONE 0x0000 // 15 0 none
332 #define RADIOLIB_SX128X_IRQ_ALL 0xFFFF // 15 0 all
333
334 //RADIOLIB_SX128X_CMD_SET_REGULATOR_MODE
335 #define RADIOLIB_SX128X_REGULATOR_LDO 0x00 // 7 0 set regulator mode: LDO (default)
336 #define RADIOLIB_SX128X_REGULATOR_DC_DC 0x01 // 7 0 DC-DC
337
338 //RADIOLIB_SX128X_CMD_SET_RANGING_ROLE
339 #define RADIOLIB_SX128X_RANGING_ROLE_MASTER 0x01 // 7 0 ranging role: master
340 #define RADIOLIB_SX128X_RANGING_ROLE_SLAVE 0x00 // 7 0 slave
341
342 //RADIOLIB_SX128X_REG_LORA_SYNC_WORD_1 - RADIOLIB_SX128X_REG_LORA_SYNC_WORD_2
343 #define RADIOLIB_SX128X_SYNC_WORD_PRIVATE 0x12
344
350 class SX128x: public PhysicalLayer {
351 public:
352 // introduce PhysicalLayer overloads
353 using PhysicalLayer::transmit;
354 using PhysicalLayer::receive;
355 using PhysicalLayer::startTransmit;
356 using PhysicalLayer::readData;
357
362 SX128x(Module* mod);
363
364 Module* getMod();
365
366 // basic methods
367
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);
380
390 int16_t beginGFSK(float freq = 2400.0, uint16_t br = 800, float freqDev = 400.0, int8_t pwr = 10, uint16_t preambleLength = 16);
391
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);
402
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);
414
421 int16_t reset(bool verify = true);
422
431 int16_t transmit(uint8_t* data, size_t len, uint8_t addr = 0) override;
432
440 int16_t receive(uint8_t* data, size_t len) override;
441
447 int16_t transmitDirect(uint32_t frf = 0) override;
448
454 int16_t receiveDirect() override;
455
460 int16_t scanChannel();
461
468 int16_t sleep(bool retainConfig = true);
469
474 int16_t standby() override;
475
483 int16_t standby(uint8_t mode, bool wakeup = false);
484
485 // interrupt methods
486
491 void setDio1Action(void (*func)(void));
492
496 void clearDio1Action();
497
502 void setPacketReceivedAction(void (*func)(void));
503
507 void clearPacketReceivedAction();
508
513 void setPacketSentAction(void (*func)(void));
514
518 void clearPacketSentAction();
519
528 int16_t startTransmit(uint8_t* data, size_t len, uint8_t addr = 0) override;
529
534 int16_t finishTransmit() override;
535
542 int16_t startReceive();
543
556 int16_t startReceive(uint16_t timeout, uint16_t irqFlags = RADIOLIB_SX128X_IRQ_RX_DEFAULT, uint16_t irqMask = RADIOLIB_SX128X_IRQ_RX_DONE, size_t len = 0);
557
562 uint16_t getIrqStatus();
563
572 int16_t readData(uint8_t* data, size_t len) override;
573
574 // configuration methods
575
581 int16_t setFrequency(float freq);
582
588 int16_t setBandwidth(float bw);
589
595 int16_t setSpreadingFactor(uint8_t sf);
596
604 int16_t setCodingRate(uint8_t cr, bool longInterleaving = false);
605
611 int16_t setOutputPower(int8_t pwr);
612
618 int16_t setPreambleLength(uint32_t preambleLength);
619
626 int16_t setBitRate(float br);
627
633 int16_t setFrequencyDeviation(float freqDev) override;
634
641 int16_t setDataShaping(uint8_t sh) override;
642
650 int16_t setSyncWord(uint8_t* syncWord, uint8_t len);
651
658 int16_t setSyncWord(uint8_t syncWord, uint8_t controlBits = 0x44);
659
667 int16_t setCRC(uint8_t len, uint32_t initial = 0x1D0F, uint16_t polynomial = 0x1021);
668
674 int16_t setWhitening(bool enabled);
675
681 int16_t setAccessAddress(uint32_t addr);
682
688 int16_t setHighSensitivityMode(bool enable);
689
695 int16_t setGainControl(uint8_t gain = 0);
696
701 float getRSSI();
702
707 float getSNR();
708
713 float getFrequencyError();
714
720 size_t getPacketLength(bool update = true) override;
721
727 uint32_t getTimeOnAir(size_t len);
728
733 int16_t implicitHeader(size_t len);
734
740 int16_t explicitHeader();
741
747 int16_t setEncoding(uint8_t encoding) override;
748
750 void setRfSwitchPins(uint32_t rxEn, uint32_t txEn);
751
753 void setRfSwitchTable(const uint32_t (&pins)[Module::RFSWITCH_MAX_PINS], const Module::RfSwitchMode_t table[]);
754
759 uint8_t randomByte();
760
766 int16_t invertIQ(bool enable);
767
768 #if !defined(RADIOLIB_EXCLUDE_DIRECT_RECEIVE)
773 void setDirectAction(void (*func)(void));
774
779 void readBit(uint32_t pin);
780 #endif
781
782 #if !defined(RADIOLIB_GODMODE) && !defined(RADIOLIB_LOW_LEVEL)
783 protected:
784 #endif
785 Module* mod;
786
787 #if !defined(RADIOLIB_GODMODE)
788 protected:
789 #endif
790
791 // cached LoRa parameters
792 float bandwidthKhz = 0;
793 uint8_t bandwidth = 0, spreadingFactor = 0, codingRateLoRa = 0;
794 uint8_t preambleLengthLoRa = 0, headerType = 0, payloadLen = 0, crcLoRa = 0;
795
796 // SX128x SPI command implementations
797 uint8_t getStatus();
798 int16_t writeRegister(uint16_t addr, uint8_t* data, uint8_t numBytes);
799 int16_t readRegister(uint16_t addr, uint8_t* data, uint8_t numBytes);
800 int16_t writeBuffer(uint8_t* data, uint8_t numBytes, uint8_t offset = 0x00);
801 int16_t readBuffer(uint8_t* data, uint8_t numBytes);
802 int16_t setTx(uint16_t periodBaseCount = RADIOLIB_SX128X_TX_TIMEOUT_NONE, uint8_t periodBase = RADIOLIB_SX128X_PERIOD_BASE_15_625_US);
803 int16_t setRx(uint16_t periodBaseCount, uint8_t periodBase = RADIOLIB_SX128X_PERIOD_BASE_15_625_US);
804 int16_t setCad();
805 uint8_t getPacketType();
806 int16_t setRfFrequency(uint32_t frf);
807 int16_t setTxParams(uint8_t pwr, uint8_t rampTime = RADIOLIB_SX128X_PA_RAMP_10_US);
808 int16_t setBufferBaseAddress(uint8_t txBaseAddress = 0x00, uint8_t rxBaseAddress = 0x00);
809 int16_t setModulationParams(uint8_t modParam1, uint8_t modParam2, uint8_t modParam3);
810 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);
811 int16_t setPacketParamsBLE(uint8_t connState, uint8_t crcLen, uint8_t bleTest, uint8_t whiten);
812 int16_t setPacketParamsLoRa(uint8_t preambleLen, uint8_t hdrType, uint8_t payLen, uint8_t crc, uint8_t invIQ = RADIOLIB_SX128X_LORA_IQ_STANDARD);
813 int16_t setDioIrqParams(uint16_t irqMask, uint16_t dio1Mask, uint16_t dio2Mask = RADIOLIB_SX128X_IRQ_NONE, uint16_t dio3Mask = RADIOLIB_SX128X_IRQ_NONE);
814 int16_t clearIrqStatus(uint16_t clearIrqParams = RADIOLIB_SX128X_IRQ_ALL);
815 int16_t setRangingRole(uint8_t role);
816 int16_t setPacketType(uint8_t type);
817
818 int16_t setHeaderType(uint8_t hdrType, size_t len = 0xFF);
819
820 #if !defined(RADIOLIB_GODMODE) && !defined(RADIOLIB_LOW_LEVEL)
821 private:
822 #endif
823
824 // common low-level SPI interface
825 static int16_t SPIparseStatus(uint8_t in);
826
827 #if !defined(RADIOLIB_GODMODE)
828 private:
829 #endif
830 // common parameters
831 uint8_t power = 0;
832
833 // cached LoRa parameters
834 uint8_t invertIQEnabled = RADIOLIB_SX128X_LORA_IQ_STANDARD;
835
836 // cached GFSK parameters
837 float modIndexReal = 0;
838 uint16_t bitRateKbps = 0;
839 uint8_t bitRate = 0, modIndex = 0, shaping = 0;
840 uint8_t preambleLengthGFSK = 0, syncWordLen = 0, syncWordMatch = 0, crcGFSK = 0, whitening = 0;
841
842 // cached FLRC parameters
843 uint8_t codingRateFLRC = 0;
844
845 // cached BLE parameters
846 uint8_t connectionState = 0, crcBLE = 0, bleTestPayload = 0;
847
848 int16_t config(uint8_t modem);
849 };
850
851 #endif
852
853 #endif
Module
Implements all common low-level methods to control the wireless module. Every module class contains o...
Definition: Module.h:31
Module::RFSWITCH_MAX_PINS
static const size_t RFSWITCH_MAX_PINS
The maximum number of pins supported by the RF switch code.
Definition: Module.h:42
PhysicalLayer
Provides common interface for protocols that run on LoRa/FSK modules, such as RTTY or LoRaWAN....
Definition: PhysicalLayer.h:34
PhysicalLayer::readData
virtual int16_t readData(uint8_t *data, size_t len)
Reads data that was received after calling startReceive method.
Definition: PhysicalLayer.cpp:209
PhysicalLayer::transmit
int16_t transmit(const char *str, uint8_t addr=0)
C-string transmit method.
Definition: PhysicalLayer.cpp:52
PhysicalLayer::startTransmit
int16_t startTransmit(const char *str, uint8_t addr=0)
Interrupt-driven Arduino String transmit method. Unlike the standard transmit method,...
Definition: PhysicalLayer.cpp:149
PhysicalLayer::receive
virtual int16_t receive(uint8_t *data, size_t len)
Binary receive method. Must be implemented in module class.
Definition: PhysicalLayer.cpp:112
PhysicalLayer::sleep
virtual int16_t sleep()
Sets module to sleep.
Definition: PhysicalLayer.cpp:118
SX128x
Base class for SX128x series. All derived classes for SX128x (e.g. SX1280 or SX1281) inherit from thi...
Definition: SX128x.h:350
SX128x::setDio1Action
void setDio1Action(void(*func)(void))
Sets interrupt service routine to call when DIO1 activates.
Definition: SX128x.cpp:485
SX128x::setSyncWord
int16_t setSyncWord(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:935
SX128x::invertIQ
int16_t invertIQ(bool enable)
Enable/disable inversion of the I and Q signals.
Definition: SX128x.cpp:1322
SX128x::setPreambleLength
int16_t setPreambleLength(uint32_t preambleLength)
Sets preamble length for currently active modem. Allowed values range from 1 to 65535.
Definition: SX128x.cpp:767
SX128x::setFrequency
int16_t setFrequency(float freq)
Sets carrier frequency. Allowed values are in range from 2400.0 to 2500.0 MHz.
Definition: SX128x.cpp:661
SX128x::clearPacketReceivedAction
void clearPacketReceivedAction()
Clears interrupt service routine to call when a packet is received.
Definition: SX128x.cpp:497
SX128x::getTimeOnAir
uint32_t getTimeOnAir(size_t len)
Get expected time-on-air for a given size of payload.
Definition: SX128x.cpp:1232
SX128x::reset
int16_t reset(bool verify=true)
Reset method. Will reset the chip to the default state using RST pin.
Definition: SX128x.cpp:263
SX128x::setFrequencyDeviation
int16_t setFrequencyDeviation(float freqDev) override
Sets FSK frequency deviation. Allowed values range from 0.0 to 3200.0 kHz.
Definition: SX128x.cpp:872
SX128x::begin
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:13
SX128x::getFrequencyError
float getFrequencyError()
Gets frequency error of the latest received packet.
Definition: SX128x.cpp:1186
SX128x::standby
int16_t standby() override
Sets the module to standby mode (overload for PhysicalLayer compatibility, uses 13 MHz RC oscillator)...
Definition: SX128x.cpp:468
SX128x::beginFLRC
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:198
SX128x::readData
virtual int16_t readData(uint8_t *data, size_t len)
Reads data that was received after calling startReceive method.
Definition: PhysicalLayer.cpp:209
SX128x::setGainControl
int16_t setGainControl(uint8_t gain=0)
Enables or disables receiver manual gain control.
Definition: SX128x.cpp:1106
SX128x::getPacketLength
size_t getPacketLength(bool update=true) override
Query modem for the packet length of received payload.
Definition: SX128x.cpp:1219
SX128x::finishTransmit
int16_t finishTransmit() override
Clean up after transmission is done.
Definition: SX128x.cpp:573
SX128x::setBitRate
int16_t setBitRate(float br)
Sets FSK or FLRC bit rate. Allowed values are 125, 250, 400, 500, 800, 1000, 1600 and 2000 kbps (for ...
Definition: SX128x.cpp:815
SX128x::transmit
int16_t transmit(const char *str, uint8_t addr=0)
C-string transmit method.
Definition: PhysicalLayer.cpp:52
SX128x::transmitDirect
int16_t transmitDirect(uint32_t frf=0) override
Starts direct mode transmission.
Definition: SX128x.cpp:384
SX128x::setRfSwitchPins
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:1308
SX128x::setPacketReceivedAction
void setPacketReceivedAction(void(*func)(void))
Sets interrupt service routine to call when a packet is received.
Definition: SX128x.cpp:493
SX128x::setHighSensitivityMode
int16_t setHighSensitivityMode(bool enable)
Enables or disables receiver high sensitivity mode.
Definition: SX128x.cpp:1089
SX128x::beginGFSK
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:74
SX128x::clearPacketSentAction
void clearPacketSentAction()
Clears interrupt service routine to call when a packet is sent.
Definition: SX128x.cpp:505
SX128x::setEncoding
int16_t setEncoding(uint8_t encoding) override
Sets transmission encoding. Serves only as alias for PhysicalLayer compatibility.
Definition: SX128x.cpp:1304
SX128x::scanChannel
int16_t scanChannel()
Performs scan for LoRa transmission in the current channel. Detects both preamble and payload.
Definition: SX128x.cpp:407
SX128x::getSNR
float getSNR()
Gets SNR (Signal to Noise Ratio) of the last received packet. Only available for LoRa or ranging mode...
Definition: SX128x.cpp:1166
SX128x::setWhitening
int16_t setWhitening(bool enabled)
Sets whitening parameters, not available for LoRa or FLRC modem.
Definition: SX128x.cpp:1058
SX128x::startTransmit
int16_t startTransmit(const char *str, uint8_t addr=0)
Interrupt-driven Arduino String transmit method. Unlike the standard transmit method,...
Definition: PhysicalLayer.cpp:149
SX128x::setAccessAddress
int16_t setAccessAddress(uint32_t addr)
Sets BLE access address.
Definition: SX128x.cpp:1078
SX128x::explicitHeader
int16_t explicitHeader()
Set explicit header mode for future reception/transmission.
Definition: SX128x.cpp:1300
SX128x::getRSSI
float getRSSI()
Gets RSSI (Recorded Signal Strength Indicator) of the last received packet.
Definition: SX128x.cpp:1142
SX128x::randomByte
uint8_t randomByte()
Dummy random method, to ensure PhysicalLayer compatibility.
Definition: SX128x.cpp:1316
SX128x::setDataShaping
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:905
SX128x::SX128x
SX128x(Module *mod)
Default constructor.
Definition: SX128x.cpp:5
SX128x::setCodingRate
int16_t setCodingRate(uint8_t cr, bool longInterleaving=false)
Sets LoRa coding rate denominator. Allowed values range from 5 to 8.
Definition: SX128x.cpp:733
SX128x::setCRC
int16_t setCRC(uint8_t len, uint32_t initial=0x1D0F, uint16_t polynomial=0x1021)
Sets CRC configuration.
Definition: SX128x.cpp:994
SX128x::receive
virtual int16_t receive(uint8_t *data, size_t len)
Binary receive method. Must be implemented in module class.
Definition: PhysicalLayer.cpp:112
SX128x::clearDio1Action
void clearDio1Action()
Clears interrupt service routine to call when DIO1 activates.
Definition: SX128x.cpp:489
SX128x::implicitHeader
int16_t implicitHeader(size_t len)
Set implicit header mode for future reception/transmission.
Definition: SX128x.cpp:1296
SX128x::setPacketSentAction
void setPacketSentAction(void(*func)(void))
Sets interrupt service routine to call when a packet is sent.
Definition: SX128x.cpp:501
SX128x::beginBLE
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:143
SX128x::readBit
void readBit(uint32_t pin)
Dummy method, to ensure PhysicalLayer compatibility.
Definition: SX128x.cpp:1343
SX128x::setRfSwitchTable
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:1312
SX128x::setOutputPower
int16_t setOutputPower(int8_t pwr)
Sets output power. Allowed values are in range from -18 to 13 dBm.
Definition: SX128x.cpp:761
SX128x::getIrqStatus
uint16_t getIrqStatus()
Reads the current IRQ status.
Definition: SX128x.cpp:1443
SX128x::setSpreadingFactor
int16_t setSpreadingFactor(uint8_t sf)
Sets LoRa spreading factor. Allowed values range from 5 to 12.
Definition: SX128x.cpp:699
SX128x::setBandwidth
int16_t setBandwidth(float bw)
Sets LoRa bandwidth. Allowed values are 203.125, 406.25, 812.5 and 1625.0 kHz.
Definition: SX128x.cpp:669
SX128x::startReceive
int16_t startReceive()
Interrupt-driven receive method with default parameters. Implemented for compatibility with PhysicalL...
Definition: SX128x.cpp:581
SX128x::setDirectAction
void setDirectAction(void(*func)(void))
Dummy method, to ensure PhysicalLayer compatibility.
Definition: SX128x.cpp:1337
SX128x::receiveDirect
int16_t receiveDirect() override
Starts direct mode reception. Only implemented for PhysicalLayer compatibility, as SX128x series does...
Definition: SX128x.cpp:399
RADIOLIB_SHAPING_0_5
#define RADIOLIB_SHAPING_0_5
Gaussian shaping filter, BT = 0.5.
Definition: TypeDef.h:27
Module::RfSwitchMode_t
Definition: Module.h:49