1#if !defined(_RADIOLIB_SI443X_H)
2#define _RADIOLIB_SI443X_H
4#include "../../TypeDef.h"
6#if !RADIOLIB_EXCLUDE_SI443X
8#include "../../Module.h"
10#include "../../protocols/PhysicalLayer/PhysicalLayer.h"
13#define RADIOLIB_SI443X_CRYSTAL_FREQ 10.0f
14#define RADIOLIB_SI443X_FREQUENCY_STEP_SIZE 156.25
15#define RADIOLIB_SI443X_MAX_PACKET_LENGTH 64
16#define RADIOLIB_SI4430_POUT_MIN -8
17#define RADIOLIB_SI4430_POUT_MAX 13
18#define RADIOLIB_SI4431_POUT_MIN -8
19#define RADIOLIB_SI4431_POUT_MAX 13
20#define RADIOLIB_SI4432_POUT_MIN -1
21#define RADIOLIB_SI4432_POUT_MAX 20
24#define RADIOLIB_SI443X_REG_DEVICE_TYPE 0x00
25#define RADIOLIB_SI443X_REG_DEVICE_VERSION 0x01
26#define RADIOLIB_SI443X_REG_DEVICE_STATUS 0x02
27#define RADIOLIB_SI443X_REG_INTERRUPT_STATUS_1 0x03
28#define RADIOLIB_SI443X_REG_INTERRUPT_STATUS_2 0x04
29#define RADIOLIB_SI443X_REG_INTERRUPT_ENABLE_1 0x05
30#define RADIOLIB_SI443X_REG_INTERRUPT_ENABLE_2 0x06
31#define RADIOLIB_SI443X_REG_OP_FUNC_CONTROL_1 0x07
32#define RADIOLIB_SI443X_REG_OP_FUNC_CONTROL_2 0x08
33#define RADIOLIB_SI443X_REG_XOSC_LOAD_CAPACITANCE 0x09
34#define RADIOLIB_SI443X_REG_MCU_OUTPUT_CLOCK 0x0A
35#define RADIOLIB_SI443X_REG_GPIO0_CONFIG 0x0B
36#define RADIOLIB_SI443X_REG_GPIO1_CONFIG 0x0C
37#define RADIOLIB_SI443X_REG_GPIO2_CONFIG 0x0D
38#define RADIOLIB_SI443X_REG_IO_PORT_CONFIG 0x0E
39#define RADIOLIB_SI443X_REG_ADC_CONFIG 0x0F
40#define RADIOLIB_SI443X_REG_ADC_SENSOR_AMP_OFFSET 0x10
41#define RADIOLIB_SI443X_REG_ADC_VALUE 0x11
42#define RADIOLIB_SI443X_REG_TEMP_SENSOR_CONTROL 0x12
43#define RADIOLIB_SI443X_REG_TEMP_VALUE_OFFSET 0x13
44#define RADIOLIB_SI443X_REG_WAKEUP_TIMER_PERIOD_1 0x14
45#define RADIOLIB_SI443X_REG_WAKEUP_TIMER_PERIOD_2 0x15
46#define RADIOLIB_SI443X_REG_WAKEUP_TIMER_PERIOD_3 0x16
47#define RADIOLIB_SI443X_REG_WAKEUP_TIMER_VALUE_1 0x17
48#define RADIOLIB_SI443X_REG_WAKEUP_TIMER_VALUE_2 0x18
49#define RADIOLIB_SI443X_REG_LOW_DC_MODE_DURATION 0x19
50#define RADIOLIB_SI443X_REG_LOW_BATT_DET_THRESHOLD 0x1A
51#define RADIOLIB_SI443X_REG_BATT_VOLTAGE_LEVEL 0x1B
52#define RADIOLIB_SI443X_REG_IF_FILTER_BANDWIDTH 0x1C
53#define RADIOLIB_SI443X_REG_AFC_LOOP_GEARSHIFT_OVERRIDE 0x1D
54#define RADIOLIB_SI443X_REG_AFC_TIMING_CONTROL 0x1E
55#define RADIOLIB_SI443X_REG_CLOCK_REC_GEARSHIFT_OVERRIDE 0x1F
56#define RADIOLIB_SI443X_REG_CLOCK_REC_OVERSAMP_RATIO 0x20
57#define RADIOLIB_SI443X_REG_CLOCK_REC_OFFSET_2 0x21
58#define RADIOLIB_SI443X_REG_CLOCK_REC_OFFSET_1 0x22
59#define RADIOLIB_SI443X_REG_CLOCK_REC_OFFSET_0 0x23
60#define RADIOLIB_SI443X_REG_CLOCK_REC_TIMING_LOOP_GAIN_1 0x24
61#define RADIOLIB_SI443X_REG_CLOCK_REC_TIMING_LOOP_GAIN_0 0x25
62#define RADIOLIB_SI443X_REG_RSSI 0x26
63#define RADIOLIB_SI443X_REG_RSSI_CLEAR_CHANNEL_THRESHOLD 0x27
64#define RADIOLIB_SI443X_REG_ANTENNA_DIVERSITY_1 0x28
65#define RADIOLIB_SI443X_REG_ANTENNA_DIVERSITY_2 0x29
66#define RADIOLIB_SI443X_REG_AFC_LIMITER 0x2A
67#define RADIOLIB_SI443X_REG_AFC_CORRECTION 0x2B
68#define RADIOLIB_SI443X_REG_OOK_COUNTER_1 0x2C
69#define RADIOLIB_SI443X_REG_OOK_COUNTER_2 0x2D
70#define RADIOLIB_SI443X_REG_SLICER_PEAK_HOLD 0x2E
71#define RADIOLIB_SI443X_REG_DATA_ACCESS_CONTROL 0x30
72#define RADIOLIB_SI443X_REG_EZMAC_STATUS 0x31
73#define RADIOLIB_SI443X_REG_HEADER_CONTROL_1 0x32
74#define RADIOLIB_SI443X_REG_HEADER_CONTROL_2 0x33
75#define RADIOLIB_SI443X_REG_PREAMBLE_LENGTH 0x34
76#define RADIOLIB_SI443X_REG_PREAMBLE_DET_CONTROL 0x35
77#define RADIOLIB_SI443X_REG_SYNC_WORD_3 0x36
78#define RADIOLIB_SI443X_REG_SYNC_WORD_2 0x37
79#define RADIOLIB_SI443X_REG_SYNC_WORD_1 0x38
80#define RADIOLIB_SI443X_REG_SYNC_WORD_0 0x39
81#define RADIOLIB_SI443X_REG_TRANSMIT_HEADER_3 0x3A
82#define RADIOLIB_SI443X_REG_TRANSMIT_HEADER_2 0x3B
83#define RADIOLIB_SI443X_REG_TRANSMIT_HEADER_1 0x3C
84#define RADIOLIB_SI443X_REG_TRANSMIT_HEADER_0 0x3D
85#define RADIOLIB_SI443X_REG_TRANSMIT_PACKET_LENGTH 0x3E
86#define RADIOLIB_SI443X_REG_CHECK_HEADER_3 0x3F
87#define RADIOLIB_SI443X_REG_CHECK_HEADER_2 0x40
88#define RADIOLIB_SI443X_REG_CHECK_HEADER_1 0x41
89#define RADIOLIB_SI443X_REG_CHECK_HEADER_0 0x42
90#define RADIOLIB_SI443X_REG_HEADER_ENABLE_3 0x43
91#define RADIOLIB_SI443X_REG_HEADER_ENABLE_2 0x44
92#define RADIOLIB_SI443X_REG_HEADER_ENABLE_1 0x45
93#define RADIOLIB_SI443X_REG_HEADER_ENABLE_0 0x46
94#define RADIOLIB_SI443X_REG_RECEIVED_HEADER_3 0x47
95#define RADIOLIB_SI443X_REG_RECEIVED_HEADER_2 0x48
96#define RADIOLIB_SI443X_REG_RECEIVED_HEADER_1 0x49
97#define RADIOLIB_SI443X_REG_RECEIVED_HEADER_0 0x4A
98#define RADIOLIB_SI443X_REG_RECEIVED_PACKET_LENGTH 0x4B
99#define RADIOLIB_SI443X_REG_ADC8_CONTROL 0x4F
100#define RADIOLIB_SI443X_REG_CHANNEL_FILTER_COEFF 0x60
101#define RADIOLIB_SI443X_REG_XOSC_CONTROL_TEST 0x62
102#define RADIOLIB_SI443X_REG_AGC_OVERRIDE_1 0x69
103#define RADIOLIB_SI443X_REG_TX_POWER 0x6D
104#define RADIOLIB_SI443X_REG_TX_DATA_RATE_1 0x6E
105#define RADIOLIB_SI443X_REG_TX_DATA_RATE_0 0x6F
106#define RADIOLIB_SI443X_REG_MODULATION_MODE_CONTROL_1 0x70
107#define RADIOLIB_SI443X_REG_MODULATION_MODE_CONTROL_2 0x71
108#define RADIOLIB_SI443X_REG_FREQUENCY_DEVIATION 0x72
109#define RADIOLIB_SI443X_REG_FREQUENCY_OFFSET_1 0x73
110#define RADIOLIB_SI443X_REG_FREQUENCY_OFFSET_2 0x74
111#define RADIOLIB_SI443X_REG_FREQUENCY_BAND_SELECT 0x75
112#define RADIOLIB_SI443X_REG_NOM_CARRIER_FREQUENCY_1 0x76
113#define RADIOLIB_SI443X_REG_NOM_CARRIER_FREQUENCY_0 0x77
114#define RADIOLIB_SI443X_REG_FREQUENCY_HOPPING_CHANNEL_SEL 0x79
115#define RADIOLIB_SI443X_REG_FREQUENCY_HOPPING_STEP_SIZE 0x7A
116#define RADIOLIB_SI443X_REG_TX_FIFO_CONTROL_1 0x7C
117#define RADIOLIB_SI443X_REG_TX_FIFO_CONTROL_2 0x7D
118#define RADIOLIB_SI443X_REG_RX_FIFO_CONTROL 0x7E
119#define RADIOLIB_SI443X_REG_FIFO_ACCESS 0x7F
122#define RADIOLIB_SI443X_DEVICE_TYPE 0x08
125#define RADIOLIB_SI443X_DEVICE_VERSION 0x06
128#define RADIOLIB_SI443X_RX_TX_FIFO_OVERFLOW 0b10000000
129#define RADIOLIB_SI443X_RX_TX_FIFO_UNDERFLOW 0b01000000
130#define RADIOLIB_SI443X_RX_FIFO_EMPTY 0b00100000
131#define RADIOLIB_SI443X_HEADER_ERROR 0b00010000
132#define RADIOLIB_SI443X_FREQUENCY_ERROR 0b00001000
133#define RADIOLIB_SI443X_TX 0b00000010
134#define RADIOLIB_SI443X_RX 0b00000001
135#define RADIOLIB_SI443X_IDLE 0b00000000
138#define RADIOLIB_SI443X_FIFO_LEVEL_ERROR_INTERRUPT 0b10000000 << 8
139#define RADIOLIB_SI443X_TX_FIFO_ALMOST_FULL_INTERRUPT 0b01000000 << 8
140#define RADIOLIB_SI443X_TX_FIFO_ALMOST_EMPTY_INTERRUPT 0b00100000 << 8
141#define RADIOLIB_SI443X_RX_FIFO_ALMOST_FULL_INTERRUPT 0b00010000 << 8
142#define RADIOLIB_SI443X_EXTERNAL_INTERRUPT 0b00001000 << 8
143#define RADIOLIB_SI443X_PACKET_SENT_INTERRUPT 0b00000100 << 8
144#define RADIOLIB_SI443X_VALID_PACKET_RECEIVED_INTERRUPT 0b00000010 << 8
145#define RADIOLIB_SI443X_CRC_ERROR_INTERRUPT 0b00000001 << 8
148#define RADIOLIB_SI443X_SYNC_WORD_DETECTED_INTERRUPT 0b10000000
149#define RADIOLIB_SI443X_VALID_PREAMBLE_DETECTED_INTERRUPT 0b01000000
150#define RADIOLIB_SI443X_INVALID_PREAMBLE_DETECTED_INTERRUPT 0b00100000
151#define RADIOLIB_SI443X_RSSI_INTERRUPT 0b00010000
152#define RADIOLIB_SI443X_WAKEUP_TIMER_INTERRUPT 0b00001000
153#define RADIOLIB_SI443X_LOW_BATTERY_INTERRUPT 0b00000100
154#define RADIOLIB_SI443X_CHIP_READY_INTERRUPT 0b00000010
155#define RADIOLIB_SI443X_POWER_ON_RESET_INTERRUPT 0b00000001
158#define RADIOLIB_SI443X_FIFO_LEVEL_ERROR_ENABLED 0b10000000
159#define RADIOLIB_SI443X_TX_FIFO_ALMOST_FULL_ENABLED 0b01000000
160#define RADIOLIB_SI443X_TX_FIFO_ALMOST_EMPTY_ENABLED 0b00100000
161#define RADIOLIB_SI443X_RX_FIFO_ALMOST_FULL_ENABLED 0b00010000
162#define RADIOLIB_SI443X_EXTERNAL_ENABLED 0b00001000
163#define RADIOLIB_SI443X_PACKET_SENT_ENABLED 0b00000100
164#define RADIOLIB_SI443X_VALID_PACKET_RECEIVED_ENABLED 0b00000010
165#define RADIOLIB_SI443X_CRC_ERROR_ENABLED 0b00000001
168#define RADIOLIB_SI443X_SYNC_WORD_DETECTED_ENABLED 0b10000000
169#define RADIOLIB_SI443X_VALID_PREAMBLE_DETECTED_ENABLED 0b01000000
170#define RADIOLIB_SI443X_INVALID_PREAMBLE_DETECTED_ENABLED 0b00100000
171#define RADIOLIB_SI443X_RSSI_ENABLED 0b00010000
172#define RADIOLIB_SI443X_WAKEUP_TIMER_ENABLED 0b00001000
173#define RADIOLIB_SI443X_LOW_BATTERY_ENABLED 0b00000100
174#define RADIOLIB_SI443X_CHIP_READY_ENABLED 0b00000010
175#define RADIOLIB_SI443X_POWER_ON_RESET_ENABLED 0b00000001
178#define RADIOLIB_SI443X_SOFTWARE_RESET 0b10000000
179#define RADIOLIB_SI443X_ENABLE_LOW_BATTERY_DETECT 0b01000000
180#define RADIOLIB_SI443X_ENABLE_WAKEUP_TIMER 0b00100000
181#define RADIOLIB_SI443X_32_KHZ_RC 0b00000000
182#define RADIOLIB_SI443X_32_KHZ_XOSC 0b00010000
183#define RADIOLIB_SI443X_TX_ON 0b00001000
184#define RADIOLIB_SI443X_RX_ON 0b00000100
185#define RADIOLIB_SI443X_PLL_ON 0b00000010
186#define RADIOLIB_SI443X_XTAL_OFF 0b00000000
187#define RADIOLIB_SI443X_XTAL_ON 0b00000001
190#define RADIOLIB_SI443X_ANT_DIV_TR_HL_IDLE_L 0b00000000
191#define RADIOLIB_SI443X_ANT_DIV_TR_LH_IDLE_L 0b00100000
192#define RADIOLIB_SI443X_ANT_DIV_TR_HL_IDLE_H 0b01000000
193#define RADIOLIB_SI443X_ANT_DIV_TR_LH_IDLE_H 0b01100000
194#define RADIOLIB_SI443X_ANT_DIV_TR_ALG_IDLE_L 0b10000000
195#define RADIOLIB_SI443X_ANT_DIV_TR_ALG_IDLE_H 0b10100000
196#define RADIOLIB_SI443X_ANT_DIV_TR_ALG_BEACON_IDLE_L 0b11000000
197#define RADIOLIB_SI443X_ANT_DIV_TR_ALG_BEACON_IDLE_H 0b11100000
198#define RADIOLIB_SI443X_RX_MULTIPACKET_OFF 0b00000000
199#define RADIOLIB_SI443X_RX_MULTIPACKET_ON 0b00010000
200#define RADIOLIB_SI443X_AUTO_TX_OFF 0b00000000
201#define RADIOLIB_SI443X_AUTO_TX_ON 0b00001000
202#define RADIOLIB_SI443X_LOW_DUTY_CYCLE_OFF 0b00000000
203#define RADIOLIB_SI443X_LOW_DUTY_CYCLE_ON 0b00000100
204#define RADIOLIB_SI443X_RX_FIFO_RESET 0b00000010
205#define RADIOLIB_SI443X_RX_FIFO_CLEAR 0b00000000
206#define RADIOLIB_SI443X_TX_FIFO_RESET 0b00000001
207#define RADIOLIB_SI443X_TX_FIFO_CLEAR 0b00000000
210#define RADIOLIB_SI443X_XTAL_SHIFT 0b00000000
211#define RADIOLIB_SI443X_XTAL_LOAD_CAPACITANCE 0b01111111
214#define RADIOLIB_SI443X_CLOCK_TAIL_CYCLES_OFF 0b00000000
215#define RADIOLIB_SI443X_CLOCK_TAIL_CYCLES_128 0b00010000
216#define RADIOLIB_SI443X_CLOCK_TAIL_CYCLES_256 0b00100000
217#define RADIOLIB_SI443X_CLOCK_TAIL_CYCLES_512 0b00110000
218#define RADIOLIB_SI443X_LOW_FREQ_CLOCK_OFF 0b00000000
219#define RADIOLIB_SI443X_LOW_FREQ_CLOCK_ON 0b00001000
220#define RADIOLIB_SI443X_MCU_CLOCK_30_MHZ 0b00000000
221#define RADIOLIB_SI443X_MCU_CLOCK_15_MHZ 0b00000001
222#define RADIOLIB_SI443X_MCU_CLOCK_10_MHZ 0b00000010
223#define RADIOLIB_SI443X_MCU_CLOCK_4_MHZ 0b00000011
224#define RADIOLIB_SI443X_MCU_CLOCK_3_MHZ 0b00000100
225#define RADIOLIB_SI443X_MCU_CLOCK_2_MHZ 0b00000101
226#define RADIOLIB_SI443X_MCU_CLOCK_1_MHZ 0b00000110
227#define RADIOLIB_SI443X_MCU_CLOCK_32_KHZ 0b00000111
230#define RADIOLIB_SI443X_GPIOX_DRIVE_STRENGTH 0b00000000
231#define RADIOLIB_SI443X_GPIOX_PULLUP_OFF 0b00000000
232#define RADIOLIB_SI443X_GPIOX_PULLUP_ON 0b00100000
233#define RADIOLIB_SI443X_GPIO0_POWER_ON_RESET_OUT 0b00000000
234#define RADIOLIB_SI443X_GPIO1_POWER_ON_RESET_INV_OUT 0b00000000
235#define RADIOLIB_SI443X_GPIO2_MCU_CLOCK_OUT 0b00000000
236#define RADIOLIB_SI443X_GPIOX_WAKEUP_OUT 0b00000001
237#define RADIOLIB_SI443X_GPIOX_LOW_BATTERY_OUT 0b00000010
238#define RADIOLIB_SI443X_GPIOX_DIGITAL_OUT 0b00000011
239#define RADIOLIB_SI443X_GPIOX_EXT_INT_FALLING_IN 0b00000100
240#define RADIOLIB_SI443X_GPIOX_EXT_INT_RISING_IN 0b00000101
241#define RADIOLIB_SI443X_GPIOX_EXT_INT_CHANGE_IN 0b00000110
242#define RADIOLIB_SI443X_GPIOX_ADC_IN 0b00000111
243#define RADIOLIB_SI443X_GPIOX_ANALOG_TEST_N_IN 0b00001000
244#define RADIOLIB_SI443X_GPIOX_ANALOG_TEST_P_IN 0b00001001
245#define RADIOLIB_SI443X_GPIOX_DIGITAL_IN 0b00001010
246#define RADIOLIB_SI443X_GPIOX_DIGITAL_TEST_OUT 0b00001011
247#define RADIOLIB_SI443X_GPIOX_ANALOG_TEST_N_OUT 0b00001100
248#define RADIOLIB_SI443X_GPIOX_ANALOG_TEST_P_OUT 0b00001101
249#define RADIOLIB_SI443X_GPIOX_REFERENCE_VOLTAGE_OUT 0b00001110
250#define RADIOLIB_SI443X_GPIOX_TX_RX_DATA_CLK_OUT 0b00001111
251#define RADIOLIB_SI443X_GPIOX_TX_DATA_IN 0b00010000
252#define RADIOLIB_SI443X_GPIOX_EXT_RETRANSMIT_REQUEST_IN 0b00010001
253#define RADIOLIB_SI443X_GPIOX_TX_STATE_OUT 0b00010010
254#define RADIOLIB_SI443X_GPIOX_TX_FIFO_ALMOST_FULL_OUT 0b00010011
255#define RADIOLIB_SI443X_GPIOX_RX_DATA_OUT 0b00010100
256#define RADIOLIB_SI443X_GPIOX_RX_STATE_OUT 0b00010101
257#define RADIOLIB_SI443X_GPIOX_RX_FIFO_ALMOST_FULL_OUT 0b00010110
258#define RADIOLIB_SI443X_GPIOX_ANT_DIV_1_OUT 0b00010111
259#define RADIOLIB_SI443X_GPIOX_ANT_DIV_2_OUT 0b00011000
260#define RADIOLIB_SI443X_GPIOX_VALID_PREAMBLE_OUT 0b00011001
261#define RADIOLIB_SI443X_GPIOX_INVALID_PREAMBLE_OUT 0b00011010
262#define RADIOLIB_SI443X_GPIOX_SYNC_WORD_DETECTED_OUT 0b00011011
263#define RADIOLIB_SI443X_GPIOX_CLEAR_CHANNEL_OUT 0b00011100
264#define RADIOLIB_SI443X_GPIOX_VDD 0b00011101
265#define RADIOLIB_SI443X_GPIOX_GND 0b00011110
268#define RADIOLIB_SI443X_GPIO2_EXT_INT_STATE_MASK 0b01000000
269#define RADIOLIB_SI443X_GPIO1_EXT_INT_STATE_MASK 0b00100000
270#define RADIOLIB_SI443X_GPIO0_EXT_INT_STATE_MASK 0b00010000
271#define RADIOLIB_SI443X_IRQ_BY_SDO_OFF 0b00000000
272#define RADIOLIB_SI443X_IRQ_BY_SDO_ON 0b00001000
273#define RADIOLIB_SI443X_GPIO2_DIGITAL_STATE_MASK 0b00000100
274#define RADIOLIB_SI443X_GPIO1_DIGITAL_STATE_MASK 0b00000010
275#define RADIOLIB_SI443X_GPIO0_DIGITAL_STATE_MASK 0b00000001
278#define RADIOLIB_SI443X_ADC_START 0b10000000
279#define RADIOLIB_SI443X_ADC_RUNNING 0b00000000
280#define RADIOLIB_SI443X_ADC_DONE 0b10000000
281#define RADIOLIB_SI443X_ADC_SOURCE_TEMPERATURE 0b00000000
282#define RADIOLIB_SI443X_ADC_SOURCE_GPIO0_SINGLE 0b00010000
283#define RADIOLIB_SI443X_ADC_SOURCE_GPIO1_SINGLE 0b00100000
284#define RADIOLIB_SI443X_ADC_SOURCE_GPIO2_SINGLE 0b00110000
285#define RADIOLIB_SI443X_ADC_SOURCE_GPIO01_DIFF 0b01000000
286#define RADIOLIB_SI443X_ADC_SOURCE_GPIO12_DIFF 0b01010000
287#define RADIOLIB_SI443X_ADC_SOURCE_GPIO02_DIFF 0b01100000
288#define RADIOLIB_SI443X_ADC_SOURCE_GND 0b01110000
289#define RADIOLIB_SI443X_ADC_REFERNCE_BAND_GAP 0b00000000
290#define RADIOLIB_SI443X_ADC_REFERNCE_VDD_3 0b00001000
291#define RADIOLIB_SI443X_ADC_REFERNCE_VDD_2 0b00001100
292#define RADIOLIB_SI443X_ADC_GAIN 0b00000000
295#define RADIOLIB_SI443X_ADC_OFFSET 0b00000000
298#define RADIOLIB_SI443X_TEMP_SENSOR_RANGE_64_TO_64_C 0b00000000
299#define RADIOLIB_SI443X_TEMP_SENSOR_RANGE_64_TO_192_C 0b01000000
300#define RADIOLIB_SI443X_TEMP_SENSOR_RANGE_0_TO_128_C 0b11000000
301#define RADIOLIB_SI443X_TEMP_SENSOR_RANGE_40_TO_216_F 0b10000000
302#define RADIOLIB_SI443X_TEMP_SENSOR_KELVIN_TO_CELSIUS_OFF 0b00000000
303#define RADIOLIB_SI443X_TEMP_SENSOR_KELVIN_TO_CELSIUS_ON 0b00100000
304#define RADIOLIB_SI443X_TEMP_SENSOR_TRIM_OFF 0b00000000
305#define RADIOLIB_SI443X_TEMP_SENSOR_TRIM_ON 0b00010000
306#define RADIOLIB_SI443X_TEMP_SENSOR_TRIM_VALUE 0b00000000
309#define RADIOLIB_SI443X_WAKEUP_TIMER_EXPONENT 0b00000011
312#define RADIOLIB_SI443X_WAKEUP_TIMER_MANTISSA_MSB 0x00
313#define RADIOLIB_SI443X_WAKEUP_TIMER_MANTISSA_LSB 0x01
316#define RADIOLIB_SI443X_LOW_DC_MODE_DURATION_MANTISSA 0x01
319#define RADIOLIB_SI443X_LOW_BATT_DET_THRESHOLD 0b00010100
322#define RADIOLIB_SI443X_BYPASS_DEC_BY_3_OFF 0b00000000
323#define RADIOLIB_SI443X_BYPASS_DEC_BY_3_ON 0b10000000
324#define RADIOLIB_SI443X_IF_FILTER_DEC_RATE 0b00000000
325#define RADIOLIB_SI443X_IF_FILTER_COEFF_SET 0b00000001
328#define RADIOLIB_SI443X_AFC_WIDEBAND_OFF 0b00000000
329#define RADIOLIB_SI443X_AFC_WIDEBAND_ON 0b10000000
330#define RADIOLIB_SI443X_AFC_OFF 0b00000000
331#define RADIOLIB_SI443X_AFC_ON 0b01000000
332#define RADIOLIB_SI443X_AFC_HIGH_GEAR_SETTING 0b00000000
333#define RADIOLIB_SI443X_SECOND_PHASE_BIAS_0_DB 0b00000100
334#define RADIOLIB_SI443X_SECOND_PHASE_BIAS_1_5_DB 0b00000000
335#define RADIOLIB_SI443X_MOVING_AVERAGE_TAP_8 0b00000010
336#define RADIOLIB_SI443X_MOVING_AVERAGE_TAP_4 0b00000000
337#define RADIOLIB_SI443X_ZERO_PHASE_RESET_5 0b00000000
338#define RADIOLIB_SI443X_ZERO_PHASE_RESET_2 0b00000001
341#define RADIOLIB_SI443X_SW_ANT_TIMER 0b00000000
342#define RADIOLIB_SI443X_SHORT_WAIT 0b00001000
343#define RADIOLIB_SI443X_ANTENNA_SWITCH_WAIT 0b00000010
346#define RADIOLIB_SI443X_CLOCK_RECOVER_FAST_GEARSHIFT 0b00000000
347#define RADIOLIB_SI443X_CLOCK_RECOVER_SLOW_GEARSHIFT 0b00000011
350#define RADIOLIB_SI443X_CLOCK_REC_OVERSAMP_RATIO_LSB 0b01100100
353#define RADIOLIB_SI443X_CLOCK_REC_OVERSAMP_RATIO_MSB 0b00000000
354#define RADIOLIB_SI443X_SECOND_PHASE_SKIP_THRESHOLD 0b00000000
355#define RADIOLIB_SI443X_NCO_OFFSET_MSB 0b00000001
358#define RADIOLIB_SI443X_NCO_OFFSET_MID 0b01000111
361#define RADIOLIB_SI443X_NCO_OFFSET_LSB 0b10101110
364#define RADIOLIB_SI443X_RX_COMPENSATION_OFF 0b00000000
365#define RADIOLIB_SI443X_RX_COMPENSATION_ON 0b00010000
366#define RADIOLIB_SI443X_CLOCK_REC_GAIN_DOUBLE_OFF 0b00000000
367#define RADIOLIB_SI443X_CLOCK_REC_GAIN_DOUBLE_ON 0b00001000
368#define RADIOLIB_SI443X_CLOCK_REC_LOOP_GAIN_MSB 0b00000010
371#define RADIOLIB_SI443X_CLOCK_REC_LOOP_GAIN_LSB 0b10001111
374#define RADIOLIB_SI443X_RSSI_CLEAR_CHANNEL_THRESHOLD 0b00011110
377#define RADIOLIB_SI443X_AFC_LIMITER 0x00
380#define RADIOLIB_SI443X_OOK_FREEZE_OFF 0b00000000
381#define RADIOLIB_SI443X_OOK_FREEZE_ON 0b00100000
382#define RADIOLIB_SI443X_PEAK_DETECTOR_OFF 0b00000000
383#define RADIOLIB_SI443X_PEAK_DETECTOR_ON 0b00010000
384#define RADIOLIB_SI443X_OOK_MOVING_AVERAGE_OFF 0b00000000
385#define RADIOLIB_SI443X_OOK_MOVING_AVERAGE_ON 0b00001000
386#define RADIOLIB_SI443X_OOK_COUNTER_MSB 0b00000000
389#define RADIOLIB_SI443X_OOK_COUNTER_LSB 0b10111100
392#define RADIOLIB_SI443X_PEAK_DETECTOR_ATTACK 0b00010000
393#define RADIOLIB_SI443X_PEAK_DETECTOR_DECAY 0b00001100
396#define RADIOLIB_SI443X_PACKET_RX_HANDLING_OFF 0b00000000
397#define RADIOLIB_SI443X_PACKET_RX_HANDLING_ON 0b10000000
398#define RADIOLIB_SI443X_LSB_FIRST_OFF 0b00000000
399#define RADIOLIB_SI443X_LSB_FIRST_ON 0b01000000
400#define RADIOLIB_SI443X_CRC_DATA_ONLY_OFF 0b00000000
401#define RADIOLIB_SI443X_CRC_DATA_ONLY_ON 0b00100000
402#define RADIOLIB_SI443X_SKIP_SECOND_PHASE_PREAMBLE_DET_OFF 0b00000000
403#define RADIOLIB_SI443X_SKIP_SECOND_PHASE_PREAMBLE_DET_ON 0b00010000
404#define RADIOLIB_SI443X_PACKET_TX_HANDLING_OFF 0b00000000
405#define RADIOLIB_SI443X_PACKET_TX_HANDLING_ON 0b00001000
406#define RADIOLIB_SI443X_CRC_OFF 0b00000000
407#define RADIOLIB_SI443X_CRC_ON 0b00000100
408#define RADIOLIB_SI443X_CRC_CCITT 0b00000000
409#define RADIOLIB_SI443X_CRC_IBM_CRC16 0b00000001
410#define RADIOLIB_SI443X_CRC_IEC16 0b00000010
411#define RADIOLIB_SI443X_CRC_BIACHEVA 0b00000011
414#define RADIOLIB_SI443X_CRC_ALL_ONE 0b01000000
415#define RADIOLIB_SI443X_PACKET_SEARCHING 0b00100000
416#define RADIOLIB_SI443X_PACKET_RECEIVING 0b00010000
417#define RADIOLIB_SI443X_VALID_PACKET_RECEIVED 0b00001000
418#define RADIOLIB_SI443X_CRC_ERROR 0b00000100
419#define RADIOLIB_SI443X_PACKET_TRANSMITTING 0b00000010
420#define RADIOLIB_SI443X_PACKET_SENT 0b00000001
423#define RADIOLIB_SI443X_BROADCAST_ADDR_CHECK_NONE 0b00000000
424#define RADIOLIB_SI443X_BROADCAST_ADDR_CHECK_BYTE0 0b00010000
425#define RADIOLIB_SI443X_BROADCAST_ADDR_CHECK_BYTE1 0b00100000
426#define RADIOLIB_SI443X_BROADCAST_ADDR_CHECK_BYTE2 0b01000000
427#define RADIOLIB_SI443X_BROADCAST_ADDR_CHECK_BYTE3 0b10000000
428#define RADIOLIB_SI443X_RECEIVED_HEADER_CHECK_NONE 0b00000000
429#define RADIOLIB_SI443X_RECEIVED_HEADER_CHECK_BYTE0 0b00000001
430#define RADIOLIB_SI443X_RECEIVED_HEADER_CHECK_BYTE1 0b00000010
431#define RADIOLIB_SI443X_RECEIVED_HEADER_CHECK_BYTE2 0b00000100
432#define RADIOLIB_SI443X_RECEIVED_HEADER_CHECK_BYTE3 0b00001000
435#define RADIOLIB_SI443X_SYNC_WORD_TIMEOUT_OFF 0b00000000
436#define RADIOLIB_SI443X_SYNC_WORD_TIMEOUT_ON 0b10000000
437#define RADIOLIB_SI443X_HEADER_LENGTH_HEADER_NONE 0b00000000
438#define RADIOLIB_SI443X_HEADER_LENGTH_HEADER_3 0b00010000
439#define RADIOLIB_SI443X_HEADER_LENGTH_HEADER_32 0b00100000
440#define RADIOLIB_SI443X_HEADER_LENGTH_HEADER_321 0b00110000
441#define RADIOLIB_SI443X_HEADER_LENGTH_HEADER_3210 0b01000000
442#define RADIOLIB_SI443X_FIXED_PACKET_LENGTH_OFF 0b00000000
443#define RADIOLIB_SI443X_FIXED_PACKET_LENGTH_ON 0b00001000
444#define RADIOLIB_SI443X_SYNC_LENGTH_SYNC_3 0b00000000
445#define RADIOLIB_SI443X_SYNC_LENGTH_SYNC_32 0b00000010
446#define RADIOLIB_SI443X_SYNC_LENGTH_SYNC_321 0b00000100
447#define RADIOLIB_SI443X_SYNC_LENGTH_SYNC_3210 0b00000110
448#define RADIOLIB_SI443X_PREAMBLE_LENGTH_MSB 0b00000000
451#define RADIOLIB_SI443X_PREAMBLE_LENGTH_LSB 0b00001000
454#define RADIOLIB_SI443X_PREAMBLE_DET_THRESHOLD 0b00101000
455#define RADIOLIB_SI443X_RSSI_OFFSET 0b00000010
458#define RADIOLIB_SI443X_SYNC_WORD_3 0x2D
459#define RADIOLIB_SI443X_SYNC_WORD_2 0xD4
460#define RADIOLIB_SI443X_SYNC_WORD_1 0x00
461#define RADIOLIB_SI443X_SYNC_WORD_0 0x00
464#define RADIOLIB_SI443X_INVALID_PREAMBLE_THRESHOLD 0b00000000
467#define RADIOLIB_SI443X_STATE_LOW_POWER 0b00000000
468#define RADIOLIB_SI443X_STATE_READY 0b00100000
469#define RADIOLIB_SI443X_STATE_TUNE 0b01100000
470#define RADIOLIB_SI443X_STATE_TX 0b01000000
471#define RADIOLIB_SI443X_STATE_RX 0b11100000
474#define RADIOLIB_SI443X_AGC_GAIN_INCREASE_OFF 0b00000000
475#define RADIOLIB_SI443X_AGC_GAIN_INCREASE_ON 0b01000000
476#define RADIOLIB_SI443X_AGC_OFF 0b00000000
477#define RADIOLIB_SI443X_AGC_ON 0b00100000
478#define RADIOLIB_SI443X_LNA_GAIN_MIN 0b00000000
479#define RADIOLIB_SI443X_LNA_GAIN_MAX 0b00010000
480#define RADIOLIB_SI443X_PGA_GAIN_OVERRIDE 0b00000000
483#define RADIOLIB_SI443X_LNA_SWITCH_OFF 0b00000000
484#define RADIOLIB_SI443X_LNA_SWITCH_ON 0b00001000
485#define RADIOLIB_SI443X_OUTPUT_POWER 0b00000000
488#define RADIOLIB_SI443X_DATA_RATE_MSB 0x0A
489#define RADIOLIB_SI443X_DATA_RATE_LSB 0x3D
492#define RADIOLIB_SI443X_HIGH_DATA_RATE_MODE 0b00000000
493#define RADIOLIB_SI443X_LOW_DATA_RATE_MODE 0b00100000
494#define RADIOLIB_SI443X_PACKET_HANDLER_POWER_DOWN_OFF 0b00000000
495#define RADIOLIB_SI443X_PACKET_HANDLER_POWER_DOWN_ON 0b00010000
496#define RADIOLIB_SI443X_MANCHESTER_PREAMBLE_POL_LOW 0b00000000
497#define RADIOLIB_SI443X_MANCHESTER_PREAMBLE_POL_HIGH 0b00001000
498#define RADIOLIB_SI443X_MANCHESTER_INVERTED_OFF 0b00000000
499#define RADIOLIB_SI443X_MANCHESTER_INVERTED_ON 0b00000100
500#define RADIOLIB_SI443X_MANCHESTER_OFF 0b00000000
501#define RADIOLIB_SI443X_MANCHESTER_ON 0b00000010
502#define RADIOLIB_SI443X_WHITENING_OFF 0b00000000
503#define RADIOLIB_SI443X_WHITENING_ON 0b00000001
506#define RADIOLIB_SI443X_TX_DATA_CLOCK_NONE 0b00000000
507#define RADIOLIB_SI443X_TX_DATA_CLOCK_GPIO 0b01000000
508#define RADIOLIB_SI443X_TX_DATA_CLOCK_SDI 0b10000000
509#define RADIOLIB_SI443X_TX_DATA_CLOCK_NIRQ 0b11000000
510#define RADIOLIB_SI443X_TX_DATA_SOURCE_GPIO 0b00000000
511#define RADIOLIB_SI443X_TX_DATA_SOURCE_SDI 0b00010000
512#define RADIOLIB_SI443X_TX_DATA_SOURCE_FIFO 0b00100000
513#define RADIOLIB_SI443X_TX_DATA_SOURCE_PN9 0b00110000
514#define RADIOLIB_SI443X_TX_RX_INVERTED_OFF 0b00000000
515#define RADIOLIB_SI443X_TX_RX_INVERTED_ON 0b00001000
516#define RADIOLIB_SI443X_FREQUENCY_DEVIATION_MSB 0b00000000
517#define RADIOLIB_SI443X_MODULATION_NONE 0b00000000
518#define RADIOLIB_SI443X_MODULATION_OOK 0b00000001
519#define RADIOLIB_SI443X_MODULATION_FSK 0b00000010
520#define RADIOLIB_SI443X_MODULATION_GFSK 0b00000011
523#define RADIOLIB_SI443X_FREQUENCY_DEVIATION_LSB 0b00100000
526#define RADIOLIB_SI443X_FREQUENCY_OFFSET_MSB 0x00
527#define RADIOLIB_SI443X_FREQUENCY_OFFSET_LSB 0x00
530#define RADIOLIB_SI443X_SIDE_BAND_SELECT_LOW 0b00000000
531#define RADIOLIB_SI443X_SIDE_BAND_SELECT_HIGH 0b01000000
532#define RADIOLIB_SI443X_BAND_SELECT_LOW 0b00000000
533#define RADIOLIB_SI443X_BAND_SELECT_HIGH 0b00100000
534#define RADIOLIB_SI443X_FREQUENCY_BAND_SELECT 0b00010101
537#define RADIOLIB_SI443X_NOM_CARRIER_FREQUENCY_MSB 0b10111011
538#define RADIOLIB_SI443X_NOM_CARRIER_FREQUENCY_LSB 0b10000000
541#define RADIOLIB_SI443X_FREQUENCY_HOPPING_CHANNEL 0x00
544#define RADIOLIB_SI443X_FREQUENCY_HOPPING_STEP_SIZE 0x00
547#define RADIOLIB_SI443X_TX_FIFO_ALMOST_FULL_THRESHOLD 0x37
550#define RADIOLIB_SI443X_TX_FIFO_ALMOST_EMPTY_THRESHOLD 0x04
553#define RADIOLIB_SI443X_RX_FIFO_ALMOST_FULL_THRESHOLD 0x37
586 int16_t
begin(uint32_t br, uint32_t freqDev, uint32_t rxBw, uint8_t preambleLen);
601 int16_t
transmit(
const uint8_t* data,
size_t len, uint8_t addr = 0)
override;
619 int16_t
sleep()
override;
632 int16_t
standby(uint8_t mode)
override;
662 int16_t
startTransmit(
const uint8_t* data,
size_t len, uint8_t addr = 0)
override;
684 int16_t
startReceive(uint32_t timeout, uint32_t irqFlags, uint32_t irqMask,
size_t len)
override;
694 int16_t
readData(uint8_t* data,
size_t len)
override;
730 int16_t
setSyncWord(uint8_t* syncWord,
size_t len)
override;
781 #if !RADIOLIB_EXCLUDE_DIRECT_RECEIVE
792 void readBit(uint32_t pin)
override;
828 int16_t
setCRC(
bool enable,
bool mode =
false);
830#if !RADIOLIB_GODMODE && !RADIOLIB_LOW_LEVEL
833 Module* getMod()
override;
838 int16_t setFrequencyRaw(uint32_t newFreq);
845 uint32_t bitRate = 0;
846 uint32_t frequencyDev = 0;
847 uint32_t frequency = 0;
849 size_t packetLength = 0;
850 bool packetLengthQueried =
false;
851 uint8_t packetLengthConfig = RADIOLIB_SI443X_FIXED_PACKET_LENGTH_ON;
852 bool crcEnabled =
false;
855 void clearIrqStatus();
856 void clearFIFO(
size_t count);
858 int16_t updateClockRecovery();
859 int16_t directMode();
860 int16_t setPacketMode(uint8_t mode, uint8_t len);
Implements all common low-level methods to control the wireless module. Every module class contains o...
Definition Module.h:74
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:83
virtual int16_t readData(uint8_t *data, size_t len)
Reads data that was received after calling startReceive method.
Definition PhysicalLayer.cpp:226
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:157
virtual int16_t receive(uint8_t *data, size_t len, RadioLibTime_t timeout=0)
Binary receive method. Must be implemented in module class.
Definition PhysicalLayer.cpp:111
PhysicalLayer()
Default constructor.
Definition PhysicalLayer.cpp:5
int16_t setEncoding(uint8_t encoding) override
Sets transmission encoding. Only available in FSK mode. Allowed values are RADIOLIB_ENCODING_NRZ,...
Definition Si443x.cpp:490
uint8_t randomByte() override
Get one truly random byte from RSSI noise.
Definition Si443x.cpp:533
int16_t receiveDirect() override
Enables direct reception mode. While in direct mode, the module will not be able to transmit or recei...
Definition Si443x.cpp:195
int16_t startTransmit(const uint8_t *data, size_t len, uint8_t addr=0) override
Interrupt-driven binary transmit method. Will start transmitting arbitrary binary data up to 64 bytes...
Definition Si443x.cpp:215
int16_t clearIrqFlags(uint32_t irq) override
Clear interrupt on a specific IRQ bit (e.g. RxTimeout, CadDone).
Definition Si443x.cpp:580
void readBit(uint32_t pin) override
Function to read and process data bit in direct reception mode.
Definition Si443x.cpp:561
size_t getPacketLength(bool update=true) override
Query modem for the packet length of received payload.
Definition Si443x.cpp:477
int16_t transmit(const uint8_t *data, size_t len, uint8_t addr=0) override
Binary transmit method. Will transmit arbitrary binary data up to 64 bytes long. For overloads to tra...
Definition Si443x.cpp:82
int16_t receive(uint8_t *data, size_t len, RadioLibTime_t timeout=0) override
Binary receive method. Will attempt to receive arbitrary binary data up to 64 bytes long....
Definition Si443x.cpp:103
void setRfSwitchPins(uint32_t rxEn, uint32_t txEn)
Some modules contain external RF switch controlled by pins. This function gives RadioLib control over...
Definition Si443x.cpp:525
void setDirectAction(void(*func)(void)) override
Set interrupt service routine function to call when data bit is received in direct mode.
Definition Si443x.cpp:557
int16_t getChipVersion()
Read version SPI register. Should return RADIOLIB_SI443X_DEVICE_VERSION (0x06) if Si443x is connected...
Definition Si443x.cpp:552
int16_t transmitDirect(uint32_t frf=0) override
Enables direct transmission mode. While in direct mode, the module will not be able to transmit or re...
Definition Si443x.cpp:153
int16_t packetMode()
Disables direct mode and enables packet mode, allowing the module to receive packets.
Definition Si443x.cpp:208
int16_t finishReceive() override
Clean up after reception is done.
Definition Si443x.cpp:332
int16_t finishTransmit() override
Clean up after transmission is done.
Definition Si443x.cpp:256
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 Si443x.cpp:529
int16_t setBitRate(uint32_t br) override
Sets FSK bit rate. Allowed values range from 123 bps to 256 kbps.
Definition Si443x.cpp:341
int16_t setFrequencyDeviation(uint32_t freqDev) override
Sets FSK frequency deviation from carrier frequency. Allowed values range from 625 Hz to 320 kHz.
Definition Si443x.cpp:370
int16_t sleep() override
Sets the module to sleep to save power. Module will not be able to transmit or receive any data while...
Definition Si443x.cpp:127
int16_t setPreambleLength(size_t len, size_t detLen=0) override
Sets preamble length.
Definition Si443x.cpp:459
int16_t setRxBandwidth(uint32_t rxBw)
Sets receiver bandwidth. Allowed values range from 2.6 to 620.7 kHz.
Definition Si443x.cpp:388
int16_t variablePacketLengthMode(uint8_t maxLen=RADIOLIB_SI443X_MAX_PACKET_LENGTH)
Set modem in variable packet length mode.
Definition Si443x.cpp:570
int16_t begin(uint32_t br, uint32_t freqDev, uint32_t rxBw, uint8_t preambleLen)
Initialization method.
Definition Si443x.cpp:12
int16_t standby() override
Sets the module to standby (with XTAL on).
Definition Si443x.cpp:143
int16_t setCRC(bool enable, bool mode=false)
Enables/disables CRC of transmitted or received packets.
Definition Si443x.cpp:586
int16_t readData(uint8_t *data, size_t len) override
Reads data that was received after calling startReceive method. When the packet length is not known i...
Definition Si443x.cpp:298
int16_t fixedPacketLengthMode(uint8_t len=RADIOLIB_SI443X_MAX_PACKET_LENGTH)
Set modem in fixed packet length mode.
Definition Si443x.cpp:566
uint32_t getIrqFlags() override
Read currently active IRQ flags.
Definition Si443x.cpp:574
int16_t setDataShaping(uint8_t sh) override
Sets Gaussian filter bandwidth-time product that will be used for data shaping. Only available in FSK...
Definition Si443x.cpp:509
int16_t startReceive() override
Interrupt-driven receive method. IRQ will be activated when full valid packet is received.
Definition Si443x.cpp:264
void reset()
Reset method. Will reset the chip to the default state using SDN pin.
Definition Si443x.cpp:74
Si443x(Module *mod)
Default constructor.
Definition Si443x.cpp:6
int16_t setSyncWord(uint8_t *syncWord, size_t len) override
Sets sync word. Up to 4 bytes can be set as sync word.
Definition Si443x.cpp:443
unsigned long RadioLibTime_t
Type used for durations in RadioLib.
Definition TypeDef.h:784
Description of RF switch pin states for a single mode. See setRfSwitchTable for details.
Definition Module.h:90