acid-drop- Hacking the planet from a LilyGo T-Deck using custom firmware |
git clone git://git.acid.vegas/acid-drop.git |
Log | Files | Refs | Archive | README | LICENSE |
Si443x.h (60362B)
1 #if !defined(_RADIOLIB_SI443X_H) 2 #define _RADIOLIB_SI443X_H 3 4 #include "../../TypeDef.h" 5 6 #if !defined(RADIOLIB_EXCLUDE_SI443X) 7 8 #include "../../Module.h" 9 10 #include "../../protocols/PhysicalLayer/PhysicalLayer.h" 11 12 // Si443x physical layer properties 13 #define RADIOLIB_SI443X_FREQUENCY_STEP_SIZE 156.25 14 #define RADIOLIB_SI443X_MAX_PACKET_LENGTH 64 15 16 // Si443x series common registers 17 #define RADIOLIB_SI443X_REG_DEVICE_TYPE 0x00 18 #define RADIOLIB_SI443X_REG_DEVICE_VERSION 0x01 19 #define RADIOLIB_SI443X_REG_DEVICE_STATUS 0x02 20 #define RADIOLIB_SI443X_REG_INTERRUPT_STATUS_1 0x03 21 #define RADIOLIB_SI443X_REG_INTERRUPT_STATUS_2 0x04 22 #define RADIOLIB_SI443X_REG_INTERRUPT_ENABLE_1 0x05 23 #define RADIOLIB_SI443X_REG_INTERRUPT_ENABLE_2 0x06 24 #define RADIOLIB_SI443X_REG_OP_FUNC_CONTROL_1 0x07 25 #define RADIOLIB_SI443X_REG_OP_FUNC_CONTROL_2 0x08 26 #define RADIOLIB_SI443X_REG_XOSC_LOAD_CAPACITANCE 0x09 27 #define RADIOLIB_SI443X_REG_MCU_OUTPUT_CLOCK 0x0A 28 #define RADIOLIB_SI443X_REG_GPIO0_CONFIG 0x0B 29 #define RADIOLIB_SI443X_REG_GPIO1_CONFIG 0x0C 30 #define RADIOLIB_SI443X_REG_GPIO2_CONFIG 0x0D 31 #define RADIOLIB_SI443X_REG_IO_PORT_CONFIG 0x0E 32 #define RADIOLIB_SI443X_REG_ADC_CONFIG 0x0F 33 #define RADIOLIB_SI443X_REG_ADC_SENSOR_AMP_OFFSET 0x10 34 #define RADIOLIB_SI443X_REG_ADC_VALUE 0x11 35 #define RADIOLIB_SI443X_REG_TEMP_SENSOR_CONTROL 0x12 36 #define RADIOLIB_SI443X_REG_TEMP_VALUE_OFFSET 0x13 37 #define RADIOLIB_SI443X_REG_WAKEUP_TIMER_PERIOD_1 0x14 38 #define RADIOLIB_SI443X_REG_WAKEUP_TIMER_PERIOD_2 0x15 39 #define RADIOLIB_SI443X_REG_WAKEUP_TIMER_PERIOD_3 0x16 40 #define RADIOLIB_SI443X_REG_WAKEUP_TIMER_VALUE_1 0x17 41 #define RADIOLIB_SI443X_REG_WAKEUP_TIMER_VALUE_2 0x18 42 #define RADIOLIB_SI443X_REG_LOW_DC_MODE_DURATION 0x19 43 #define RADIOLIB_SI443X_REG_LOW_BATT_DET_THRESHOLD 0x1A 44 #define RADIOLIB_SI443X_REG_BATT_VOLTAGE_LEVEL 0x1B 45 #define RADIOLIB_SI443X_REG_IF_FILTER_BANDWIDTH 0x1C 46 #define RADIOLIB_SI443X_REG_AFC_LOOP_GEARSHIFT_OVERRIDE 0x1D 47 #define RADIOLIB_SI443X_REG_AFC_TIMING_CONTROL 0x1E 48 #define RADIOLIB_SI443X_REG_CLOCK_REC_GEARSHIFT_OVERRIDE 0x1F 49 #define RADIOLIB_SI443X_REG_CLOCK_REC_OVERSAMP_RATIO 0x20 50 #define RADIOLIB_SI443X_REG_CLOCK_REC_OFFSET_2 0x21 51 #define RADIOLIB_SI443X_REG_CLOCK_REC_OFFSET_1 0x22 52 #define RADIOLIB_SI443X_REG_CLOCK_REC_OFFSET_0 0x23 53 #define RADIOLIB_SI443X_REG_CLOCK_REC_TIMING_LOOP_GAIN_1 0x24 54 #define RADIOLIB_SI443X_REG_CLOCK_REC_TIMING_LOOP_GAIN_0 0x25 55 #define RADIOLIB_SI443X_REG_RSSI 0x26 56 #define RADIOLIB_SI443X_REG_RSSI_CLEAR_CHANNEL_THRESHOLD 0x27 57 #define RADIOLIB_SI443X_REG_ANTENNA_DIVERSITY_1 0x28 58 #define RADIOLIB_SI443X_REG_ANTENNA_DIVERSITY_2 0x29 59 #define RADIOLIB_SI443X_REG_AFC_LIMITER 0x2A 60 #define RADIOLIB_SI443X_REG_AFC_CORRECTION 0x2B 61 #define RADIOLIB_SI443X_REG_OOK_COUNTER_1 0x2C 62 #define RADIOLIB_SI443X_REG_OOK_COUNTER_2 0x2D 63 #define RADIOLIB_SI443X_REG_SLICER_PEAK_HOLD 0x2E 64 #define RADIOLIB_SI443X_REG_DATA_ACCESS_CONTROL 0x30 65 #define RADIOLIB_SI443X_REG_EZMAC_STATUS 0x31 66 #define RADIOLIB_SI443X_REG_HEADER_CONTROL_1 0x32 67 #define RADIOLIB_SI443X_REG_HEADER_CONTROL_2 0x33 68 #define RADIOLIB_SI443X_REG_PREAMBLE_LENGTH 0x34 69 #define RADIOLIB_SI443X_REG_PREAMBLE_DET_CONTROL 0x35 70 #define RADIOLIB_SI443X_REG_SYNC_WORD_3 0x36 71 #define RADIOLIB_SI443X_REG_SYNC_WORD_2 0x37 72 #define RADIOLIB_SI443X_REG_SYNC_WORD_1 0x38 73 #define RADIOLIB_SI443X_REG_SYNC_WORD_0 0x39 74 #define RADIOLIB_SI443X_REG_TRANSMIT_HEADER_3 0x3A 75 #define RADIOLIB_SI443X_REG_TRANSMIT_HEADER_2 0x3B 76 #define RADIOLIB_SI443X_REG_TRANSMIT_HEADER_1 0x3C 77 #define RADIOLIB_SI443X_REG_TRANSMIT_HEADER_0 0x3D 78 #define RADIOLIB_SI443X_REG_TRANSMIT_PACKET_LENGTH 0x3E 79 #define RADIOLIB_SI443X_REG_CHECK_HEADER_3 0x3F 80 #define RADIOLIB_SI443X_REG_CHECK_HEADER_2 0x40 81 #define RADIOLIB_SI443X_REG_CHECK_HEADER_1 0x41 82 #define RADIOLIB_SI443X_REG_CHECK_HEADER_0 0x42 83 #define RADIOLIB_SI443X_REG_HEADER_ENABLE_3 0x43 84 #define RADIOLIB_SI443X_REG_HEADER_ENABLE_2 0x44 85 #define RADIOLIB_SI443X_REG_HEADER_ENABLE_1 0x45 86 #define RADIOLIB_SI443X_REG_HEADER_ENABLE_0 0x46 87 #define RADIOLIB_SI443X_REG_RECEIVED_HEADER_3 0x47 88 #define RADIOLIB_SI443X_REG_RECEIVED_HEADER_2 0x48 89 #define RADIOLIB_SI443X_REG_RECEIVED_HEADER_1 0x49 90 #define RADIOLIB_SI443X_REG_RECEIVED_HEADER_0 0x4A 91 #define RADIOLIB_SI443X_REG_RECEIVED_PACKET_LENGTH 0x4B 92 #define RADIOLIB_SI443X_REG_ADC8_CONTROL 0x4F 93 #define RADIOLIB_SI443X_REG_CHANNEL_FILTER_COEFF 0x60 94 #define RADIOLIB_SI443X_REG_XOSC_CONTROL_TEST 0x62 95 #define RADIOLIB_SI443X_REG_AGC_OVERRIDE_1 0x69 96 #define RADIOLIB_SI443X_REG_TX_POWER 0x6D 97 #define RADIOLIB_SI443X_REG_TX_DATA_RATE_1 0x6E 98 #define RADIOLIB_SI443X_REG_TX_DATA_RATE_0 0x6F 99 #define RADIOLIB_SI443X_REG_MODULATION_MODE_CONTROL_1 0x70 100 #define RADIOLIB_SI443X_REG_MODULATION_MODE_CONTROL_2 0x71 101 #define RADIOLIB_SI443X_REG_FREQUENCY_DEVIATION 0x72 102 #define RADIOLIB_SI443X_REG_FREQUENCY_OFFSET_1 0x73 103 #define RADIOLIB_SI443X_REG_FREQUENCY_OFFSET_2 0x74 104 #define RADIOLIB_SI443X_REG_FREQUENCY_BAND_SELECT 0x75 105 #define RADIOLIB_SI443X_REG_NOM_CARRIER_FREQUENCY_1 0x76 106 #define RADIOLIB_SI443X_REG_NOM_CARRIER_FREQUENCY_0 0x77 107 #define RADIOLIB_SI443X_REG_FREQUENCY_HOPPING_CHANNEL_SEL 0x79 108 #define RADIOLIB_SI443X_REG_FREQUENCY_HOPPING_STEP_SIZE 0x7A 109 #define RADIOLIB_SI443X_REG_TX_FIFO_CONTROL_1 0x7C 110 #define RADIOLIB_SI443X_REG_TX_FIFO_CONTROL_2 0x7D 111 #define RADIOLIB_SI443X_REG_RX_FIFO_CONTROL 0x7E 112 #define RADIOLIB_SI443X_REG_FIFO_ACCESS 0x7F 113 114 // RADIOLIB_SI443X_REG_DEVICE_TYPE MSB LSB DESCRIPTION 115 #define RADIOLIB_SI443X_DEVICE_TYPE 0x08 // 4 0 device identification register 116 117 // RADIOLIB_SI443X_REG_DEVICE_VERSION 118 #define RADIOLIB_SI443X_DEVICE_VERSION 0x06 // 4 0 chip version register 119 120 // RADIOLIB_SI443X_REG_DEVICE_STATUS 121 #define RADIOLIB_SI443X_RX_TX_FIFO_OVERFLOW 0b10000000 // 7 7 Rx/Tx FIFO overflow flag 122 #define RADIOLIB_SI443X_RX_TX_FIFO_UNDERFLOW 0b01000000 // 6 6 Rx/Tx FIFO underflow flag 123 #define RADIOLIB_SI443X_RX_FIFO_EMPTY 0b00100000 // 5 5 Rx FIFO empty flag 124 #define RADIOLIB_SI443X_HEADER_ERROR 0b00010000 // 4 4 header error flag 125 #define RADIOLIB_SI443X_FREQUENCY_ERROR 0b00001000 // 3 3 frequency error flag (frequency outside allowed range) 126 #define RADIOLIB_SI443X_TX 0b00000010 // 1 0 power state: Tx 127 #define RADIOLIB_SI443X_RX 0b00000001 // 1 0 Rx 128 #define RADIOLIB_SI443X_IDLE 0b00000000 // 1 0 idle 129 130 // RADIOLIB_SI443X_REG_INTERRUPT_STATUS_1 131 #define RADIOLIB_SI443X_FIFO_LEVEL_ERROR_INTERRUPT 0b10000000 // 7 7 Tx/Rx FIFO overflow or underflow 132 #define RADIOLIB_SI443X_TX_FIFO_ALMOST_FULL_INTERRUPT 0b01000000 // 6 6 Tx FIFO almost full 133 #define RADIOLIB_SI443X_TX_FIFO_ALMOST_EMPTY_INTERRUPT 0b00100000 // 5 5 Tx FIFO almost empty 134 #define RADIOLIB_SI443X_RX_FIFO_ALMOST_FULL_INTERRUPT 0b00010000 // 4 4 Rx FIFO almost full 135 #define RADIOLIB_SI443X_EXTERNAL_INTERRUPT 0b00001000 // 3 3 external interrupt occurred on GPIOx 136 #define RADIOLIB_SI443X_PACKET_SENT_INTERRUPT 0b00000100 // 2 2 packet transmission done 137 #define RADIOLIB_SI443X_VALID_PACKET_RECEIVED_INTERRUPT 0b00000010 // 1 1 valid packet has been received 138 #define RADIOLIB_SI443X_CRC_ERROR_INTERRUPT 0b00000001 // 0 0 CRC failed 139 140 // RADIOLIB_SI443X_REG_INTERRUPT_STATUS_2 141 #define RADIOLIB_SI443X_SYNC_WORD_DETECTED_INTERRUPT 0b10000000 // 7 7 sync word has been detected 142 #define RADIOLIB_SI443X_VALID_RADIOLIB_PREAMBLE_DETECTED_INTERRUPT 0b01000000 // 6 6 valid preamble has been detected 143 #define RADIOLIB_SI443X_INVALID_RADIOLIB_PREAMBLE_DETECTED_INTERRUPT 0b00100000 // 5 5 invalid preamble has been detected 144 #define RADIOLIB_SI443X_RSSI_INTERRUPT 0b00010000 // 4 4 RSSI exceeded programmed threshold 145 #define RADIOLIB_SI443X_WAKEUP_TIMER_INTERRUPT 0b00001000 // 3 3 wake-up timer expired 146 #define RADIOLIB_SI443X_LOW_BATTERY_INTERRUPT 0b00000100 // 2 2 low battery detected 147 #define RADIOLIB_SI443X_CHIP_READY_INTERRUPT 0b00000010 // 1 1 chip ready event detected 148 #define RADIOLIB_SI443X_POWER_ON_RESET_INTERRUPT 0b00000001 // 0 0 power-on-reset detected 149 150 // RADIOLIB_SI443X_REG_INTERRUPT_ENABLE_1 151 #define RADIOLIB_SI443X_FIFO_LEVEL_ERROR_ENABLED 0b10000000 // 7 7 Tx/Rx FIFO overflow or underflow interrupt enabled 152 #define RADIOLIB_SI443X_TX_FIFO_ALMOST_FULL_ENABLED 0b01000000 // 6 6 Tx FIFO almost full interrupt enabled 153 #define RADIOLIB_SI443X_TX_FIFO_ALMOST_EMPTY_ENABLED 0b00100000 // 5 5 Tx FIFO almost empty interrupt enabled 154 #define RADIOLIB_SI443X_RX_FIFO_ALMOST_FULL_ENABLED 0b00010000 // 4 4 Rx FIFO almost full interrupt enabled 155 #define RADIOLIB_SI443X_EXTERNAL_ENABLED 0b00001000 // 3 3 external interrupt interrupt enabled 156 #define RADIOLIB_SI443X_PACKET_SENT_ENABLED 0b00000100 // 2 2 packet transmission done interrupt enabled 157 #define RADIOLIB_SI443X_VALID_PACKET_RECEIVED_ENABLED 0b00000010 // 1 1 valid packet received interrupt enabled 158 #define RADIOLIB_SI443X_CRC_ERROR_ENABLED 0b00000001 // 0 0 CRC failed interrupt enabled 159 160 // RADIOLIB_SI443X_REG_INTERRUPT_ENABLE_2 161 #define RADIOLIB_SI443X_SYNC_WORD_DETECTED_ENABLED 0b10000000 // 7 7 sync word interrupt enabled 162 #define RADIOLIB_SI443X_VALID_RADIOLIB_PREAMBLE_DETECTED_ENABLED 0b01000000 // 6 6 valid preamble interrupt enabled 163 #define RADIOLIB_SI443X_INVALID_RADIOLIB_PREAMBLE_DETECTED_ENABLED 0b00100000 // 5 5 invalid preamble interrupt enabled 164 #define RADIOLIB_SI443X_RSSI_ENABLED 0b00010000 // 4 4 RSSI exceeded programmed threshold interrupt enabled 165 #define RADIOLIB_SI443X_WAKEUP_TIMER_ENABLED 0b00001000 // 3 3 wake-up timer interrupt enabled 166 #define RADIOLIB_SI443X_LOW_BATTERY_ENABLED 0b00000100 // 2 2 low battery interrupt enabled 167 #define RADIOLIB_SI443X_CHIP_READY_ENABLED 0b00000010 // 1 1 chip ready event interrupt enabled 168 #define RADIOLIB_SI443X_POWER_ON_RESET_ENABLED 0b00000001 // 0 0 power-on-reset interrupt enabled 169 170 // RADIOLIB_SI443X_REG_OP_FUNC_CONTROL_1 171 #define RADIOLIB_SI443X_SOFTWARE_RESET 0b10000000 // 7 7 reset all registers to default values 172 #define RADIOLIB_SI443X_ENABLE_LOW_BATTERY_DETECT 0b01000000 // 6 6 enable low battery detection 173 #define RADIOLIB_SI443X_ENABLE_WAKEUP_TIMER 0b00100000 // 5 5 enable wakeup timer 174 #define RADIOLIB_SI443X_32_KHZ_RC 0b00000000 // 4 4 32.768 kHz source: RC oscillator (default) 175 #define RADIOLIB_SI443X_32_KHZ_XOSC 0b00010000 // 4 4 crystal oscillator 176 #define RADIOLIB_SI443X_TX_ON 0b00001000 // 3 3 Tx on in manual transmit mode 177 #define RADIOLIB_SI443X_RX_ON 0b00000100 // 2 2 Rx on in manual receive mode 178 #define RADIOLIB_SI443X_PLL_ON 0b00000010 // 1 1 PLL on (tune mode) 179 #define RADIOLIB_SI443X_XTAL_OFF 0b00000000 // 0 0 crystal oscillator: off (standby mode) 180 #define RADIOLIB_SI443X_XTAL_ON 0b00000001 // 0 0 on (ready mode) 181 182 // RADIOLIB_SI443X_REG_OP_FUNC_CONTROL_2 183 #define RADIOLIB_SI443X_ANT_DIV_TR_HL_IDLE_L 0b00000000 // 7 5 GPIO1/2 states: Tx/Rx GPIO1 H, GPIO2 L; idle low (default) 184 #define RADIOLIB_SI443X_ANT_DIV_TR_LH_IDLE_L 0b00100000 // 7 5 Tx/Rx GPIO1 L, GPIO2 H; idle low 185 #define RADIOLIB_SI443X_ANT_DIV_TR_HL_IDLE_H 0b01000000 // 7 5 Tx/Rx GPIO1 H, GPIO2 L; idle high 186 #define RADIOLIB_SI443X_ANT_DIV_TR_LH_IDLE_H 0b01100000 // 7 5 Tx/Rx GPIO1 L, GPIO2 H; idle high 187 #define RADIOLIB_SI443X_ANT_DIV_TR_ALG_IDLE_L 0b10000000 // 7 5 Tx/Rx diversity algorithm; idle low 188 #define RADIOLIB_SI443X_ANT_DIV_TR_ALG_IDLE_H 0b10100000 // 7 5 Tx/Rx diversity algorithm; idle high 189 #define RADIOLIB_SI443X_ANT_DIV_TR_ALG_BEACON_IDLE_L 0b11000000 // 7 5 Tx/Rx diversity algorithm (beacon); idle low 190 #define RADIOLIB_SI443X_ANT_DIV_TR_ALG_BEACON_IDLE_H 0b11100000 // 7 5 Tx/Rx diversity algorithm (beacon); idle high 191 #define RADIOLIB_SI443X_RX_MULTIPACKET_OFF 0b00000000 // 4 4 Rx multipacket: disabled (default) 192 #define RADIOLIB_SI443X_RX_MULTIPACKET_ON 0b00010000 // 4 4 enabled 193 #define RADIOLIB_SI443X_AUTO_TX_OFF 0b00000000 // 3 3 Tx autotransmit on FIFO almost full: disabled (default) 194 #define RADIOLIB_SI443X_AUTO_TX_ON 0b00001000 // 3 3 enabled 195 #define RADIOLIB_SI443X_LOW_DUTY_CYCLE_OFF 0b00000000 // 2 2 low duty cycle mode: disabled (default) 196 #define RADIOLIB_SI443X_LOW_DUTY_CYCLE_ON 0b00000100 // 2 2 enabled 197 #define RADIOLIB_SI443X_RX_FIFO_RESET 0b00000010 // 1 1 Rx FIFO reset/clear: reset (call first) 198 #define RADIOLIB_SI443X_RX_FIFO_CLEAR 0b00000000 // 1 1 clear (call second) 199 #define RADIOLIB_SI443X_TX_FIFO_RESET 0b00000001 // 0 0 Tx FIFO reset/clear: reset (call first) 200 #define RADIOLIB_SI443X_TX_FIFO_CLEAR 0b00000000 // 0 0 clear (call second) 201 202 // RADIOLIB_SI443X_REG_XOSC_LOAD_CAPACITANCE 203 #define RADIOLIB_SI443X_XTAL_SHIFT 0b00000000 // 7 7 crystal capacitance configuration: 204 #define RADIOLIB_SI443X_XTAL_LOAD_CAPACITANCE 0b01111111 // 6 0 C_int = 1.8 pF + 0.085 pF * RADIOLIB_SI443X_XTAL_LOAD_CAPACITANCE + 3.7 pF * RADIOLIB_SI443X_XTAL_SHIFT 205 206 // RADIOLIB_SI443X_REG_MCU_OUTPUT_CLOCK 207 #define RADIOLIB_SI443X_CLOCK_TAIL_CYCLES_OFF 0b00000000 // 5 4 additional clock cycles: none (default) 208 #define RADIOLIB_SI443X_CLOCK_TAIL_CYCLES_128 0b00010000 // 5 4 128 209 #define RADIOLIB_SI443X_CLOCK_TAIL_CYCLES_256 0b00100000 // 5 4 256 210 #define RADIOLIB_SI443X_CLOCK_TAIL_CYCLES_512 0b00110000 // 5 4 512 211 #define RADIOLIB_SI443X_LOW_FREQ_CLOCK_OFF 0b00000000 // 3 3 32.768 kHz clock output: disabled (default) 212 #define RADIOLIB_SI443X_LOW_FREQ_CLOCK_ON 0b00001000 // 3 3 enabled 213 #define RADIOLIB_SI443X_MCU_CLOCK_30_MHZ 0b00000000 // 2 0 GPIO clock output: 30 MHz 214 #define RADIOLIB_SI443X_MCU_CLOCK_15_MHZ 0b00000001 // 2 0 15 MHz 215 #define RADIOLIB_SI443X_MCU_CLOCK_10_MHZ 0b00000010 // 2 0 10 MHz 216 #define RADIOLIB_SI443X_MCU_CLOCK_4_MHZ 0b00000011 // 2 0 4 MHz 217 #define RADIOLIB_SI443X_MCU_CLOCK_3_MHZ 0b00000100 // 2 0 3 MHz 218 #define RADIOLIB_SI443X_MCU_CLOCK_2_MHZ 0b00000101 // 2 0 2 MHz 219 #define RADIOLIB_SI443X_MCU_CLOCK_1_MHZ 0b00000110 // 2 0 1 MHz (default) 220 #define RADIOLIB_SI443X_MCU_CLOCK_32_KHZ 0b00000111 // 2 0 32.768 kHz 221 222 // RADIOLIB_SI443X_REG_GPIO0_CONFIG + RADIOLIB_SI443X_REG_GPIO1_CONFIG + RADIOLIB_SI443X_REG_GPIO2_CONFIG 223 #define RADIOLIB_SI443X_GPIOX_DRIVE_STRENGTH 0b00000000 // 7 6 GPIOx drive strength (higher number = stronger drive) 224 #define RADIOLIB_SI443X_GPIOX_PULLUP_OFF 0b00000000 // 5 5 GPIOx internal 200k pullup: disabled (default) 225 #define RADIOLIB_SI443X_GPIOX_PULLUP_ON 0b00100000 // 5 5 enabled 226 #define RADIOLIB_SI443X_GPIO0_POWER_ON_RESET_OUT 0b00000000 // 4 0 GPIOx function: power-on-reset output (GPIO0 only, default) 227 #define RADIOLIB_SI443X_GPIO1_POWER_ON_RESET_INV_OUT 0b00000000 // 4 0 inverted power-on-reset output (GPIO1 only, default) 228 #define RADIOLIB_SI443X_GPIO2_MCU_CLOCK_OUT 0b00000000 // 4 0 MCU clock output (GPIO2 only, default) 229 #define RADIOLIB_SI443X_GPIOX_WAKEUP_OUT 0b00000001 // 4 0 wakeup timer expired output 230 #define RADIOLIB_SI443X_GPIOX_LOW_BATTERY_OUT 0b00000010 // 4 0 low battery detect output 231 #define RADIOLIB_SI443X_GPIOX_DIGITAL_OUT 0b00000011 // 4 0 direct digital output 232 #define RADIOLIB_SI443X_GPIOX_EXT_INT_FALLING_IN 0b00000100 // 4 0 external interrupt, falling edge 233 #define RADIOLIB_SI443X_GPIOX_EXT_INT_RISING_IN 0b00000101 // 4 0 external interrupt, rising edge 234 #define RADIOLIB_SI443X_GPIOX_EXT_INT_CHANGE_IN 0b00000110 // 4 0 external interrupt, state change 235 #define RADIOLIB_SI443X_GPIOX_ADC_IN 0b00000111 // 4 0 ADC analog input 236 #define RADIOLIB_SI443X_GPIOX_ANALOG_TEST_N_IN 0b00001000 // 4 0 analog test N input 237 #define RADIOLIB_SI443X_GPIOX_ANALOG_TEST_P_IN 0b00001001 // 4 0 analog test P input 238 #define RADIOLIB_SI443X_GPIOX_DIGITAL_IN 0b00001010 // 4 0 direct digital input 239 #define RADIOLIB_SI443X_GPIOX_DIGITAL_TEST_OUT 0b00001011 // 4 0 digital test output 240 #define RADIOLIB_SI443X_GPIOX_ANALOG_TEST_N_OUT 0b00001100 // 4 0 analog test N output 241 #define RADIOLIB_SI443X_GPIOX_ANALOG_TEST_P_OUT 0b00001101 // 4 0 analog test P output 242 #define RADIOLIB_SI443X_GPIOX_REFERENCE_VOLTAGE_OUT 0b00001110 // 4 0 reference voltage output 243 #define RADIOLIB_SI443X_GPIOX_TX_RX_DATA_CLK_OUT 0b00001111 // 4 0 Tx/Rx clock output in direct mode 244 #define RADIOLIB_SI443X_GPIOX_TX_DATA_IN 0b00010000 // 4 0 Tx data input direct mode 245 #define RADIOLIB_SI443X_GPIOX_EXT_RETRANSMIT_REQUEST_IN 0b00010001 // 4 0 external retransmission request input 246 #define RADIOLIB_SI443X_GPIOX_TX_STATE_OUT 0b00010010 // 4 0 Tx state output 247 #define RADIOLIB_SI443X_GPIOX_TX_FIFO_ALMOST_FULL_OUT 0b00010011 // 4 0 Tx FIFO almost full output 248 #define RADIOLIB_SI443X_GPIOX_RX_DATA_OUT 0b00010100 // 4 0 Rx data output 249 #define RADIOLIB_SI443X_GPIOX_RX_STATE_OUT 0b00010101 // 4 0 Rx state output 250 #define RADIOLIB_SI443X_GPIOX_RX_FIFO_ALMOST_FULL_OUT 0b00010110 // 4 0 Rx FIFO almost full output 251 #define RADIOLIB_SI443X_GPIOX_ANT_DIV_1_OUT 0b00010111 // 4 0 antenna diversity output 1 252 #define RADIOLIB_SI443X_GPIOX_ANT_DIV_2_OUT 0b00011000 // 4 0 antenna diversity output 2 253 #define RADIOLIB_SI443X_GPIOX_VALID_PREAMBLE_OUT 0b00011001 // 4 0 valid preamble detected output 254 #define RADIOLIB_SI443X_GPIOX_INVALID_PREAMBLE_OUT 0b00011010 // 4 0 invalid preamble detected output 255 #define RADIOLIB_SI443X_GPIOX_SYNC_WORD_DETECTED_OUT 0b00011011 // 4 0 sync word detected output 256 #define RADIOLIB_SI443X_GPIOX_CLEAR_CHANNEL_OUT 0b00011100 // 4 0 clear channel assessment output 257 #define RADIOLIB_SI443X_GPIOX_VDD 0b00011101 // 4 0 VDD 258 #define RADIOLIB_SI443X_GPIOX_GND 0b00011110 // 4 0 GND 259 260 // RADIOLIB_SI443X_REG_IO_PORT_CONFIG 261 #define RADIOLIB_SI443X_GPIO2_EXT_INT_STATE_MASK 0b01000000 // 6 6 external interrupt state mask for: GPIO2 262 #define RADIOLIB_SI443X_GPIO1_EXT_INT_STATE_MASK 0b00100000 // 5 5 GPIO1 263 #define RADIOLIB_SI443X_GPIO0_EXT_INT_STATE_MASK 0b00010000 // 4 4 GPIO0 264 #define RADIOLIB_SI443X_IRQ_BY_SDO_OFF 0b00000000 // 3 3 output IRQ state on SDO pin: disabled (default) 265 #define RADIOLIB_SI443X_IRQ_BY_SDO_ON 0b00001000 // 3 3 enabled 266 #define RADIOLIB_SI443X_GPIO2_DIGITAL_STATE_MASK 0b00000100 // 2 2 digital state mask for: GPIO2 267 #define RADIOLIB_SI443X_GPIO1_DIGITAL_STATE_MASK 0b00000010 // 1 1 GPIO1 268 #define RADIOLIB_SI443X_GPIO0_DIGITAL_STATE_MASK 0b00000001 // 0 0 GPIO0 269 270 // RADIOLIB_SI443X_REG_ADC_CONFIG 271 #define RADIOLIB_SI443X_ADC_START 0b10000000 // 7 7 ADC control: start measurement 272 #define RADIOLIB_SI443X_ADC_RUNNING 0b00000000 // 7 7 measurement in progress 273 #define RADIOLIB_SI443X_ADC_DONE 0b10000000 // 7 7 done 274 #define RADIOLIB_SI443X_ADC_SOURCE_TEMPERATURE 0b00000000 // 6 4 ADC source: internal temperature sensor (default) 275 #define RADIOLIB_SI443X_ADC_SOURCE_GPIO0_SINGLE 0b00010000 // 6 4 single-ended on GPIO0 276 #define RADIOLIB_SI443X_ADC_SOURCE_GPIO1_SINGLE 0b00100000 // 6 4 single-ended on GPIO1 277 #define RADIOLIB_SI443X_ADC_SOURCE_GPIO2_SINGLE 0b00110000 // 6 4 single-ended on GPIO2 278 #define RADIOLIB_SI443X_ADC_SOURCE_GPIO01_DIFF 0b01000000 // 6 4 differential on GPIO0 (+) and GPIO1 (-) 279 #define RADIOLIB_SI443X_ADC_SOURCE_GPIO12_DIFF 0b01010000 // 6 4 differential on GPIO1 (+) and GPIO2 (-) 280 #define RADIOLIB_SI443X_ADC_SOURCE_GPIO02_DIFF 0b01100000 // 6 4 differential on GPIO0 (+) and GPIO2 (-) 281 #define RADIOLIB_SI443X_ADC_SOURCE_GND 0b01110000 // 6 4 GND 282 #define RADIOLIB_SI443X_ADC_REFERNCE_BAND_GAP 0b00000000 // 3 2 ADC reference: internal bandgap 1.2 V (default) 283 #define RADIOLIB_SI443X_ADC_REFERNCE_VDD_3 0b00001000 // 3 2 VDD/3 284 #define RADIOLIB_SI443X_ADC_REFERNCE_VDD_2 0b00001100 // 3 2 VDD/2 285 #define RADIOLIB_SI443X_ADC_GAIN 0b00000000 // 1 0 ADC amplifier gain 286 287 // RADIOLIB_SI443X_REG_ADC_SENSOR_AMP_OFFSET 288 #define RADIOLIB_SI443X_ADC_OFFSET 0b00000000 // 3 0 ADC offset 289 290 // RADIOLIB_SI443X_REG_TEMP_SENSOR_CONTROL 291 #define RADIOLIB_SI443X_TEMP_SENSOR_RANGE_64_TO_64_C 0b00000000 // 7 6 temperature sensor range: -64 to 64 deg. C, 0.5 deg. C resolution (default) 292 #define RADIOLIB_SI443X_TEMP_SENSOR_RANGE_64_TO_192_C 0b01000000 // 7 6 -64 to 192 deg. C, 1.0 deg. C resolution 293 #define RADIOLIB_SI443X_TEMP_SENSOR_RANGE_0_TO_128_C 0b11000000 // 7 6 0 to 128 deg. C, 0.5 deg. C resolution 294 #define RADIOLIB_SI443X_TEMP_SENSOR_RANGE_40_TO_216_F 0b10000000 // 7 6 -40 to 216 deg. F, 1.0 deg. F resolution 295 #define RADIOLIB_SI443X_TEMP_SENSOR_KELVIN_TO_CELSIUS_OFF 0b00000000 // 5 5 Kelvin to Celsius offset: disabled 296 #define RADIOLIB_SI443X_TEMP_SENSOR_KELVIN_TO_CELSIUS_ON 0b00100000 // 5 5 enabled (default) 297 #define RADIOLIB_SI443X_TEMP_SENSOR_TRIM_OFF 0b00000000 // 4 4 temperature sensor trim: disabled (default) 298 #define RADIOLIB_SI443X_TEMP_SENSOR_TRIM_ON 0b00010000 // 4 4 enabled 299 #define RADIOLIB_SI443X_TEMP_SENSOR_TRIM_VALUE 0b00000000 // 3 0 temperature sensor trim value 300 301 // RADIOLIB_SI443X_REG_WAKEUP_TIMER_PERIOD_1 302 #define RADIOLIB_SI443X_WAKEUP_TIMER_EXPONENT 0b00000011 // 4 0 wakeup timer value exponent 303 304 // RADIOLIB_SI443X_REG_WAKEUP_TIMER_PERIOD_2 + RADIOLIB_SI443X_REG_WAKEUP_TIMER_PERIOD_3 305 #define RADIOLIB_SI443X_WAKEUP_TIMER_MANTISSA_MSB 0x00 // 7 0 wakeup timer value: 306 #define RADIOLIB_SI443X_WAKEUP_TIMER_MANTISSA_LSB 0x01 // 7 0 T = (4 * RADIOLIB_SI443X_WAKEUP_TIMER_MANTISSA * 2 ^ RADIOLIB_SI443X_WAKEUP_TIMER_EXPONENT) / 32.768 ms 307 308 // RADIOLIB_SI443X_REG_LOW_DC_MODE_DURATION 309 #define RADIOLIB_SI443X_LOW_DC_MODE_DURATION_MANTISSA 0x01 // 7 0 low duty cycle mode duration: T = (4 * RADIOLIB_SI443X_LOW_DC_MODE_DURATION_MANTISSA * 2 ^ RADIOLIB_SI443X_WAKEUP_TIMER_EXPONENT) / 32.768 ms 310 311 // RADIOLIB_SI443X_REG_LOW_BATT_DET_THRESHOLD 312 #define RADIOLIB_SI443X_LOW_BATT_DET_THRESHOLD 0b00010100 // 4 0 low battery detection threshold: Vth = 1.7 + RADIOLIB_SI443X_LOW_BATT_DET_THRESHOLD * 0.05 V (defaults to 2.7 V) 313 314 // RADIOLIB_SI443X_REG_IF_FILTER_BANDWIDTH 315 #define RADIOLIB_SI443X_BYPASS_DEC_BY_3_OFF 0b00000000 // 7 7 bypass decimate-by-3 stage: disabled (default) 316 #define RADIOLIB_SI443X_BYPASS_DEC_BY_3_ON 0b10000000 // 7 7 enabled 317 #define RADIOLIB_SI443X_IF_FILTER_DEC_RATE 0b00000000 // 6 4 IF filter decimation rate 318 #define RADIOLIB_SI443X_IF_FILTER_COEFF_SET 0b00000001 // 3 0 IF filter coefficient set selection 319 320 // RADIOLIB_SI443X_REG_AFC_LOOP_GEARSHIFT_OVERRIDE 321 #define RADIOLIB_SI443X_AFC_WIDEBAND_OFF 0b00000000 // 7 7 AFC wideband: disabled (default) 322 #define RADIOLIB_SI443X_AFC_WIDEBAND_ON 0b10000000 // 7 7 enabled 323 #define RADIOLIB_SI443X_AFC_OFF 0b00000000 // 6 6 AFC: disabled 324 #define RADIOLIB_SI443X_AFC_ON 0b01000000 // 6 6 enabled (default) 325 #define RADIOLIB_SI443X_AFC_HIGH_GEAR_SETTING 0b00000000 // 5 3 AFC high gear setting 326 #define RADIOLIB_SI443X_SECOND_PHASE_BIAS_0_DB 0b00000100 // 2 2 second phase antenna selection bias: 0 dB (default) 327 #define RADIOLIB_SI443X_SECOND_PHASE_BIAS_1_5_DB 0b00000000 // 2 2 1.5 dB 328 #define RADIOLIB_SI443X_MOVING_AVERAGE_TAP_8 0b00000010 // 1 1 moving average filter tap length: 8*Tb 329 #define RADIOLIB_SI443X_MOVING_AVERAGE_TAP_4 0b00000000 // 1 1 4*Tb after first preamble (default) 330 #define RADIOLIB_SI443X_ZERO_PHASE_RESET_5 0b00000000 // 0 0 reset preamble detector after: 5 zero phases (default) 331 #define RADIOLIB_SI443X_ZERO_PHASE_RESET_2 0b00000001 // 0 0 3 zero phases 332 333 // RADIOLIB_SI443X_REG_AFC_TIMING_CONTROL 334 #define RADIOLIB_SI443X_SW_ANT_TIMER 0b00000000 // 7 6 number of periods to wait for RSSI to stabilize during antenna switching 335 #define RADIOLIB_SI443X_SHORT_WAIT 0b00001000 // 5 3 period to wait after AFC correction 336 #define RADIOLIB_SI443X_ANTENNA_SWITCH_WAIT 0b00000010 // 2 0 antenna switching wait time 337 338 // RADIOLIB_SI443X_REG_CLOCK_REC_GEARSHIFT_OVERRIDE 339 #define RADIOLIB_SI443X_CLOCK_RECOVER_FAST_GEARSHIFT 0b00000000 // 5 3 clock recovery fast gearshift value 340 #define RADIOLIB_SI443X_CLOCK_RECOVER_SLOW_GEARSHIFT 0b00000011 // 2 0 clock recovery slow gearshift value 341 342 // RADIOLIB_SI443X_REG_CLOCK_REC_OVERSAMP_RATIO 343 #define RADIOLIB_SI443X_CLOCK_REC_OVERSAMP_RATIO_LSB 0b01100100 // 7 0 oversampling rate LSB, defaults to 12.5 clock cycles per bit 344 345 // RADIOLIB_SI443X_REG_CLOCK_REC_OFFSET_2 346 #define RADIOLIB_SI443X_CLOCK_REC_OVERSAMP_RATIO_MSB 0b00000000 // 7 5 oversampling rate MSB, defaults to 12.5 clock cycles per bit 347 #define RADIOLIB_SI443X_SECOND_PHASE_SKIP_THRESHOLD 0b00000000 // 4 4 skip seconds phase antenna diversity threshold 348 #define RADIOLIB_SI443X_NCO_OFFSET_MSB 0b00000001 // 3 0 NCO offset MSB 349 350 // RADIOLIB_SI443X_REG_CLOCK_REC_OFFSET_1 351 #define RADIOLIB_SI443X_NCO_OFFSET_MID 0b01000111 // 7 0 NCO offset MID 352 353 // RADIOLIB_SI443X_REG_CLOCK_REC_OFFSET_0 354 #define RADIOLIB_SI443X_NCO_OFFSET_LSB 0b10101110 // 7 0 NCO offset LSB 355 356 // RADIOLIB_SI443X_REG_CLOCK_REC_TIMING_LOOP_GAIN_1 357 #define RADIOLIB_SI443X_RX_COMPENSATION_OFF 0b00000000 // 4 4 Rx compensation for high data rate: disabled (default) 358 #define RADIOLIB_SI443X_RX_COMPENSATION_ON 0b00010000 // 4 4 enabled 359 #define RADIOLIB_SI443X_CLOCK_REC_GAIN_DOUBLE_OFF 0b00000000 // 3 3 clock recovery gain doubling: disabled (default) 360 #define RADIOLIB_SI443X_CLOCK_REC_GAIN_DOUBLE_ON 0b00001000 // 3 3 enabled 361 #define RADIOLIB_SI443X_CLOCK_REC_LOOP_GAIN_MSB 0b00000010 // 2 0 clock recovery timing loop gain MSB 362 363 // RADIOLIB_SI443X_REG_CLOCK_REC_TIMING_LOOP_GAIN_0 364 #define RADIOLIB_SI443X_CLOCK_REC_LOOP_GAIN_LSB 0b10001111 // 7 0 clock recovery timing loop gain LSB 365 366 // RADIOLIB_SI443X_REG_RSSI_CLEAR_CHANNEL_THRESHOLD 367 #define RADIOLIB_SI443X_RSSI_CLEAR_CHANNEL_THRESHOLD 0b00011110 // 7 0 RSSI clear channel interrupt threshold 368 369 // RADIOLIB_SI443X_REG_AFC_LIMITER 370 #define RADIOLIB_SI443X_AFC_LIMITER 0x00 // 7 0 AFC limiter value 371 372 // RADIOLIB_SI443X_REG_OOK_COUNTER_1 373 #define RADIOLIB_SI443X_OOK_FREEZE_OFF 0b00000000 // 5 5 OOK moving average detector freeze: disabled (default) 374 #define RADIOLIB_SI443X_OOK_FREEZE_ON 0b00100000 // 5 5 enabled 375 #define RADIOLIB_SI443X_PEAK_DETECTOR_OFF 0b00000000 // 4 4 peak detector: disabled 376 #define RADIOLIB_SI443X_PEAK_DETECTOR_ON 0b00010000 // 4 4 enabled (default) 377 #define RADIOLIB_SI443X_OOK_MOVING_AVERAGE_OFF 0b00000000 // 3 3 OOK moving average: disabled 378 #define RADIOLIB_SI443X_OOK_MOVING_AVERAGE_ON 0b00001000 // 3 3 enabled (default) 379 #define RADIOLIB_SI443X_OOK_COUNTER_MSB 0b00000000 // 2 0 OOK counter MSB 380 381 // RADIOLIB_SI443X_REG_OOK_COUNTER_2 382 #define RADIOLIB_SI443X_OOK_COUNTER_LSB 0b10111100 // 7 0 OOK counter LSB 383 384 // RADIOLIB_SI443X_REG_SLICER_PEAK_HOLD 385 #define RADIOLIB_SI443X_PEAK_DETECTOR_ATTACK 0b00010000 // 6 4 OOK peak detector attach time 386 #define RADIOLIB_SI443X_PEAK_DETECTOR_DECAY 0b00001100 // 3 0 OOK peak detector decay time 387 388 // RADIOLIB_SI443X_REG_DATA_ACCESS_CONTROL 389 #define RADIOLIB_SI443X_PACKET_RX_HANDLING_OFF 0b00000000 // 7 7 packet Rx handling: disabled 390 #define RADIOLIB_SI443X_PACKET_RX_HANDLING_ON 0b10000000 // 7 7 enabled (default) 391 #define RADIOLIB_SI443X_LSB_FIRST_OFF 0b00000000 // 6 6 LSB first transmission: disabled (default) 392 #define RADIOLIB_SI443X_LSB_FIRST_ON 0b01000000 // 6 6 enabled 393 #define RADIOLIB_SI443X_CRC_DATA_ONLY_OFF 0b00000000 // 5 5 CRC calculated only from data fields: disabled (default) 394 #define RADIOLIB_SI443X_CRC_DATA_ONLY_ON 0b00100000 // 5 5 enabled 395 #define RADIOLIB_SI443X_SKIP_SECOND_PHASE_PREAMBLE_DET_OFF 0b00000000 // 4 4 skip second phase of preamble detection: disabled (default) 396 #define RADIOLIB_SI443X_SKIP_SECOND_PHASE_PREAMBLE_DET_ON 0b00010000 // 4 4 enabled 397 #define RADIOLIB_SI443X_PACKET_TX_HANDLING_OFF 0b00000000 // 3 3 packet Tx handling: disabled 398 #define RADIOLIB_SI443X_PACKET_TX_HANDLING_ON 0b00001000 // 3 3 enabled (default) 399 #define RADIOLIB_SI443X_CRC_OFF 0b00000000 // 2 2 CRC: disabled 400 #define RADIOLIB_SI443X_CRC_ON 0b00000100 // 2 2 enabled (default) 401 #define RADIOLIB_SI443X_CRC_CCITT 0b00000000 // 1 0 CRC type: CCITT 402 #define RADIOLIB_SI443X_CRC_IBM_CRC16 0b00000001 // 1 0 IBM CRC-16 (default) 403 #define RADIOLIB_SI443X_CRC_IEC16 0b00000010 // 1 0 IEC-16 404 #define RADIOLIB_SI443X_CRC_BIACHEVA 0b00000011 // 1 0 Biacheva 405 406 // RADIOLIB_SI443X_REG_EZMAC_STATUS 407 #define RADIOLIB_SI443X_CRC_ALL_ONE 0b01000000 // 6 6 last received CRC was all ones 408 #define RADIOLIB_SI443X_PACKET_SEARCHING 0b00100000 // 5 5 radio is searching for a valid packet 409 #define RADIOLIB_SI443X_PACKET_RECEIVING 0b00010000 // 4 4 radio is currently receiving packet 410 #define RADIOLIB_SI443X_VALID_PACKET_RECEIVED 0b00001000 // 3 3 valid packet was received 411 #define RADIOLIB_SI443X_CRC_ERROR 0b00000100 // 2 2 CRC check failed 412 #define RADIOLIB_SI443X_PACKET_TRANSMITTING 0b00000010 // 1 1 radio is currently transmitting packet 413 #define RADIOLIB_SI443X_PACKET_SENT 0b00000001 // 0 0 packet sent 414 415 // RADIOLIB_SI443X_REG_HEADER_CONTROL_1 416 #define RADIOLIB_SI443X_BROADCAST_ADDR_CHECK_NONE 0b00000000 // 7 4 broadcast address check: none (default) 417 #define RADIOLIB_SI443X_BROADCAST_ADDR_CHECK_BYTE0 0b00010000 // 7 4 on byte 0 418 #define RADIOLIB_SI443X_BROADCAST_ADDR_CHECK_BYTE1 0b00100000 // 7 4 on byte 1 419 #define RADIOLIB_SI443X_BROADCAST_ADDR_CHECK_BYTE2 0b01000000 // 7 4 on byte 2 420 #define RADIOLIB_SI443X_BROADCAST_ADDR_CHECK_BYTE3 0b10000000 // 7 4 on byte 3 421 #define RADIOLIB_SI443X_RECEIVED_HEADER_CHECK_NONE 0b00000000 // 3 0 received header check: none 422 #define RADIOLIB_SI443X_RECEIVED_HEADER_CHECK_BYTE0 0b00000001 // 3 0 on byte 0 423 #define RADIOLIB_SI443X_RECEIVED_HEADER_CHECK_BYTE1 0b00000010 // 3 0 on byte 1 424 #define RADIOLIB_SI443X_RECEIVED_HEADER_CHECK_BYTE2 0b00000100 // 3 0 on byte 2 (default) 425 #define RADIOLIB_SI443X_RECEIVED_HEADER_CHECK_BYTE3 0b00001000 // 3 0 on byte 3 (default) 426 427 // RADIOLIB_SI443X_REG_HEADER_CONTROL_2 428 #define RADIOLIB_SI443X_SYNC_WORD_TIMEOUT_OFF 0b00000000 // 7 7 ignore timeout period when searching for sync word: disabled (default) 429 #define RADIOLIB_SI443X_SYNC_WORD_TIMEOUT_ON 0b10000000 // 7 7 enabled 430 #define RADIOLIB_SI443X_HEADER_LENGTH_HEADER_NONE 0b00000000 // 6 4 header length: none 431 #define RADIOLIB_SI443X_HEADER_LENGTH_HEADER_3 0b00010000 // 6 4 header 3 432 #define RADIOLIB_SI443X_HEADER_LENGTH_HEADER_32 0b00100000 // 6 4 header 3 and 2 433 #define RADIOLIB_SI443X_HEADER_LENGTH_HEADER_321 0b00110000 // 6 4 header 3, 2 and 1 (default) 434 #define RADIOLIB_SI443X_HEADER_LENGTH_HEADER_3210 0b01000000 // 6 4 header 3, 2, 1, and 0 435 #define RADIOLIB_SI443X_FIXED_PACKET_LENGTH_OFF 0b00000000 // 3 3 fixed packet length mode: disabled (default) 436 #define RADIOLIB_SI443X_FIXED_PACKET_LENGTH_ON 0b00001000 // 3 3 enabled 437 #define RADIOLIB_SI443X_SYNC_LENGTH_SYNC_3 0b00000000 // 2 1 sync word length: sync 3 438 #define RADIOLIB_SI443X_SYNC_LENGTH_SYNC_32 0b00000010 // 2 1 sync 3 and 2 (default) 439 #define RADIOLIB_SI443X_SYNC_LENGTH_SYNC_321 0b00000100 // 2 1 sync 3, 2 and 1 440 #define RADIOLIB_SI443X_SYNC_LENGTH_SYNC_3210 0b00000110 // 2 1 sync 3, 2, 1 and 0 441 #define RADIOLIB_SI443X_PREAMBLE_LENGTH_MSB 0b00000000 // 0 0 preamble length MSB 442 443 // RADIOLIB_SI443X_REG_PREAMBLE_LENGTH 444 #define RADIOLIB_SI443X_PREAMBLE_LENGTH_LSB 0b00001000 // 0 0 preamble length LSB, defaults to 32 bits 445 446 // RADIOLIB_SI443X_REG_PREAMBLE_DET_CONTROL 447 #define RADIOLIB_SI443X_PREAMBLE_DET_THRESHOLD 0b00101000 // 7 3 number of 4-bit nibbles in valid preamble, defaults to 20 bits 448 #define RADIOLIB_SI443X_RSSI_OFFSET 0b00000010 // 2 0 RSSI calculation offset, defaults to +8 dB 449 450 // RADIOLIB_SI443X_REG_SYNC_WORD_3 - RADIOLIB_SI443X_REG_SYNC_WORD_0 451 #define RADIOLIB_SI443X_SYNC_WORD_3 0x2D // 7 0 sync word: 4th byte (MSB) 452 #define RADIOLIB_SI443X_SYNC_WORD_2 0xD4 // 7 0 3rd byte 453 #define RADIOLIB_SI443X_SYNC_WORD_1 0x00 // 7 0 2nd byte 454 #define RADIOLIB_SI443X_SYNC_WORD_0 0x00 // 7 0 1st byte (LSB) 455 456 // RADIOLIB_SI443X_REG_CHANNEL_FILTER_COEFF 457 #define RADIOLIB_SI443X_INVALID_PREAMBLE_THRESHOLD 0b00000000 // 7 4 invalid preamble threshold in nibbles 458 459 // RADIOLIB_SI443X_REG_XOSC_CONTROL_TEST 460 #define RADIOLIB_SI443X_STATE_LOW_POWER 0b00000000 // 7 5 chip power state: low power 461 #define RADIOLIB_SI443X_STATE_READY 0b00100000 // 7 5 ready 462 #define RADIOLIB_SI443X_STATE_TUNE 0b01100000 // 7 5 tune 463 #define RADIOLIB_SI443X_STATE_TX 0b01000000 // 7 5 Tx 464 #define RADIOLIB_SI443X_STATE_RX 0b11100000 // 7 5 Rx 465 466 // RADIOLIB_SI443X_REG_AGC_OVERRIDE_1 467 #define RADIOLIB_SI443X_AGC_GAIN_INCREASE_OFF 0b00000000 // 6 6 AGC gain increase override: disabled (default) 468 #define RADIOLIB_SI443X_AGC_GAIN_INCREASE_ON 0b01000000 // 6 6 enabled 469 #define RADIOLIB_SI443X_AGC_OFF 0b00000000 // 5 5 AGC loop: disabled 470 #define RADIOLIB_SI443X_AGC_ON 0b00100000 // 5 5 enabled (default) 471 #define RADIOLIB_SI443X_LNA_GAIN_MIN 0b00000000 // 4 4 LNA gain select: 5 dB (default) 472 #define RADIOLIB_SI443X_LNA_GAIN_MAX 0b00010000 // 4 4 25 dB 473 #define RADIOLIB_SI443X_PGA_GAIN_OVERRIDE 0b00000000 // 3 0 PGA gain override, gain = RADIOLIB_SI443X_PGA_GAIN_OVERRIDE * 3 dB 474 475 // RADIOLIB_SI443X_REG_TX_POWER 476 #define RADIOLIB_SI443X_LNA_SWITCH_OFF 0b00000000 // 3 3 LNA switch control: disabled 477 #define RADIOLIB_SI443X_LNA_SWITCH_ON 0b00001000 // 3 3 enabled (default) 478 #define RADIOLIB_SI443X_OUTPUT_POWER 0b00000000 // 2 0 output power in 3 dB steps, 0 is chip min, 7 is chip max 479 480 // RADIOLIB_SI443X_REG_TX_DATA_RATE_1 + RADIOLIB_SI443X_REG_TX_DATA_RATE_0 481 #define RADIOLIB_SI443X_DATA_RATE_MSB 0x0A // 7 0 data rate: DR = 10^6 * (RADIOLIB_SI443X_DATA_RATE / 2^16) in high data rate mode or 482 #define RADIOLIB_SI443X_DATA_RATE_LSB 0x3D // 7 0 DR = 10^6 * (RADIOLIB_SI443X_DATA_RATE / 2^21) in low data rate mode (defaults to 40 kbps) 483 484 // RADIOLIB_SI443X_REG_MODULATION_MODE_CONTROL_1 485 #define RADIOLIB_SI443X_HIGH_DATA_RATE_MODE 0b00000000 // 5 5 data rate: above 30 kbps (default) 486 #define RADIOLIB_SI443X_LOW_DATA_RATE_MODE 0b00100000 // 5 5 below 30 kbps 487 #define RADIOLIB_SI443X_PACKET_HANDLER_POWER_DOWN_OFF 0b00000000 // 4 4 power off packet handler in low power mode: disabled (default) 488 #define RADIOLIB_SI443X_PACKET_HANDLER_POWER_DOWN_ON 0b00010000 // 4 4 enabled 489 #define RADIOLIB_SI443X_MANCHESTER_PREAMBLE_POL_LOW 0b00000000 // 3 3 preamble polarity in Manchester mode: low 490 #define RADIOLIB_SI443X_MANCHESTER_PREAMBLE_POL_HIGH 0b00001000 // 3 3 high (default) 491 #define RADIOLIB_SI443X_MANCHESTER_INVERTED_OFF 0b00000000 // 2 2 inverted Manchester encoding: disabled 492 #define RADIOLIB_SI443X_MANCHESTER_INVERTED_ON 0b00000100 // 2 2 enabled (default) 493 #define RADIOLIB_SI443X_MANCHESTER_OFF 0b00000000 // 1 1 Manchester encoding: disabled (default) 494 #define RADIOLIB_SI443X_MANCHESTER_ON 0b00000010 // 1 1 enabled 495 #define RADIOLIB_SI443X_WHITENING_OFF 0b00000000 // 0 0 data whitening: disabled (default) 496 #define RADIOLIB_SI443X_WHITENING_ON 0b00000001 // 0 0 enabled 497 498 // RADIOLIB_SI443X_REG_MODULATION_MODE_CONTROL_2 499 #define RADIOLIB_SI443X_TX_DATA_CLOCK_NONE 0b00000000 // 7 6 Tx data clock: disabled (default) 500 #define RADIOLIB_SI443X_TX_DATA_CLOCK_GPIO 0b01000000 // 7 6 GPIO pin 501 #define RADIOLIB_SI443X_TX_DATA_CLOCK_SDI 0b10000000 // 7 6 SDI pin 502 #define RADIOLIB_SI443X_TX_DATA_CLOCK_NIRQ 0b11000000 // 7 6 nIRQ pin 503 #define RADIOLIB_SI443X_TX_DATA_SOURCE_GPIO 0b00000000 // 5 4 Tx data source in direct mode: GPIO pin (default) 504 #define RADIOLIB_SI443X_TX_DATA_SOURCE_SDI 0b00010000 // 5 4 SDI pin 505 #define RADIOLIB_SI443X_TX_DATA_SOURCE_FIFO 0b00100000 // 5 4 FIFO 506 #define RADIOLIB_SI443X_TX_DATA_SOURCE_PN9 0b00110000 // 5 4 PN9 internal 507 #define RADIOLIB_SI443X_TX_RX_INVERTED_OFF 0b00000000 // 3 3 Tx/Rx data inverted: disabled (default) 508 #define RADIOLIB_SI443X_TX_RX_INVERTED_ON 0b00001000 // 3 3 enabled 509 #define RADIOLIB_SI443X_FREQUENCY_DEVIATION_MSB 0b00000000 // 2 2 frequency deviation MSB 510 #define RADIOLIB_SI443X_MODULATION_NONE 0b00000000 // 1 0 modulation type: unmodulated carrier (default) 511 #define RADIOLIB_SI443X_MODULATION_OOK 0b00000001 // 1 0 OOK 512 #define RADIOLIB_SI443X_MODULATION_FSK 0b00000010 // 1 0 FSK 513 #define RADIOLIB_SI443X_MODULATION_GFSK 0b00000011 // 1 0 GFSK 514 515 // RADIOLIB_SI443X_REG_FREQUENCY_DEVIATION 516 #define RADIOLIB_SI443X_FREQUENCY_DEVIATION_LSB 0b00100000 // 7 0 frequency deviation LSB, Fd = 625 Hz * RADIOLIB_SI443X_FREQUENCY_DEVIATION, defaults to 20 kHz 517 518 // RADIOLIB_SI443X_REG_FREQUENCY_OFFSET_1 + RADIOLIB_SI443X_REG_FREQUENCY_OFFSET_2 519 #define RADIOLIB_SI443X_FREQUENCY_OFFSET_MSB 0x00 // 7 0 frequency offset: 520 #define RADIOLIB_SI443X_FREQUENCY_OFFSET_LSB 0x00 // 1 0 Foff = 156.25 Hz * (RADIOLIB_SI443X_BAND_SELECT + 1) * RADIOLIB_SI443X_FREQUENCY_OFFSET, defaults to 156.25 Hz 521 522 // RADIOLIB_SI443X_REG_FREQUENCY_BAND_SELECT 523 #define RADIOLIB_SI443X_SIDE_BAND_SELECT_LOW 0b00000000 // 6 6 Rx LO tuning: below channel frequency (default) 524 #define RADIOLIB_SI443X_SIDE_BAND_SELECT_HIGH 0b01000000 // 6 6 above channel frequency 525 #define RADIOLIB_SI443X_BAND_SELECT_LOW 0b00000000 // 5 5 band select: low, 240 - 479.9 MHz 526 #define RADIOLIB_SI443X_BAND_SELECT_HIGH 0b00100000 // 5 5 high, 480 - 960 MHz (default) 527 #define RADIOLIB_SI443X_FREQUENCY_BAND_SELECT 0b00010101 // 4 0 frequency band select 528 529 // RADIOLIB_SI443X_REG_NOM_CARRIER_FREQUENCY_1 + RADIOLIB_SI443X_REG_NOM_CARRIER_FREQUENCY_0 530 #define RADIOLIB_SI443X_NOM_CARRIER_FREQUENCY_MSB 0b10111011 // 7 0 nominal carrier frequency: 531 #define RADIOLIB_SI443X_NOM_CARRIER_FREQUENCY_LSB 0b10000000 // 7 0 Fc = (RADIOLIB_SI443X_BAND_SELECT + 1)*10*(RADIOLIB_SI443X_FREQUENCY_BAND_SELECT + 24) + (RADIOLIB_SI443X_NOM_CARRIER_FREQUENCY - RADIOLIB_SI443X_FREQUENCY_OFFSET)/6400 [MHz] 532 533 // RADIOLIB_SI443X_REG_FREQUENCY_HOPPING_CHANNEL_SEL 534 #define RADIOLIB_SI443X_FREQUENCY_HOPPING_CHANNEL 0x00 // 7 0 frequency hopping channel number 535 536 // RADIOLIB_SI443X_REG_FREQUENCY_HOPPING_STEP_SIZE 537 #define RADIOLIB_SI443X_FREQUENCY_HOPPING_STEP_SIZE 0x00 // 7 0 frequency hopping step size 538 539 // RADIOLIB_SI443X_REG_TX_FIFO_CONTROL_1 540 #define RADIOLIB_SI443X_TX_FIFO_ALMOST_FULL_THRESHOLD 0x37 // 5 0 Tx FIFO almost full threshold 541 542 // RADIOLIB_SI443X_REG_TX_FIFO_CONTROL_2 543 #define RADIOLIB_SI443X_TX_FIFO_ALMOST_EMPTY_THRESHOLD 0x04 // 5 0 Tx FIFO almost full threshold 544 545 // RADIOLIB_SI443X_REG_RX_FIFO_CONTROL 546 #define RADIOLIB_SI443X_RX_FIFO_ALMOST_FULL_THRESHOLD 0x37 // 5 0 Rx FIFO almost full threshold 547 548 /*! 549 \class Si443x 550 551 \brief Base class for Si443x series. All derived classes for Si443x (e.g. Si4431 or Si4432) inherit from this base class. 552 This class should not be instantiated directly from Arduino sketch, only from its derived classes. 553 */ 554 class Si443x: public PhysicalLayer { 555 public: 556 // introduce PhysicalLayer overloads 557 using PhysicalLayer::transmit; 558 using PhysicalLayer::receive; 559 using PhysicalLayer::startTransmit; 560 using PhysicalLayer::readData; 561 562 // constructor 563 564 /*! 565 \brief Default constructor. 566 567 \param mod Instance of Module that will be used to communicate with the radio. 568 */ 569 Si443x(Module* mod); 570 571 Module* getMod(); 572 573 // basic methods 574 575 /*! 576 \brief Initialization method. 577 578 \param br Bit rate of the FSK transmission in kbps (kilobits per second). 579 580 \param freqDev Frequency deviation of the FSK transmission in kHz. 581 582 \param rxBw Receiver bandwidth in kHz. 583 584 \param preambleLen Preamble Length in bits. 585 586 \returns \ref status_codes 587 */ 588 int16_t begin(float br, float freqDev, float rxBw, uint8_t preambleLen); 589 590 /*! 591 \brief Reset method. Will reset the chip to the default state using SDN pin. 592 */ 593 void reset(); 594 595 /*! 596 \brief Binary transmit method. Will transmit arbitrary binary data up to 64 bytes long. 597 For overloads to transmit Arduino String or C-string, see PhysicalLayer::transmit. 598 599 \param data Binary data that will be transmitted. 600 601 \param len Length of binary data to transmit (in bytes). 602 603 \param addr Node address to transmit the packet to. 604 605 \returns \ref status_codes 606 */ 607 int16_t transmit(uint8_t* data, size_t len, uint8_t addr = 0) override; 608 609 /*! 610 \brief Binary receive method. Will attempt to receive arbitrary binary data up to 64 bytes long. 611 For overloads to receive Arduino String, see PhysicalLayer::receive. 612 613 \param data Pointer to array to save the received binary data. 614 615 \param len Number of bytes that will be received. Must be known in advance for binary transmissions. 616 617 \returns \ref status_codes 618 */ 619 int16_t receive(uint8_t* data, size_t len) override; 620 621 /*! 622 \brief Sets the module to sleep to save power. %Module will not be able to transmit or receive any data while in sleep mode. 623 %Module will wake up automatically when methods like transmit or receive are called. 624 625 \returns \ref status_codes 626 */ 627 int16_t sleep(); 628 629 /*! 630 \brief Sets the module to standby. 631 632 \returns \ref status_codes 633 */ 634 int16_t standby() override; 635 636 /*! 637 \brief Enables direct transmission mode. While in direct mode, the module will not be able to transmit or receive packets. 638 639 \param FRF 24-bit raw frequency value to start transmitting at. Required for quick frequency shifts in RTTY. 640 641 \returns \ref status_codes 642 */ 643 int16_t transmitDirect(uint32_t frf = 0) override; 644 645 /*! 646 \brief Enables direct reception mode. While in direct mode, the module will not be able to transmit or receive packets. 647 648 \returns \ref status_codes 649 */ 650 int16_t receiveDirect() override; 651 652 /*! 653 \brief Disables direct mode and enables packet mode, allowing the module to receive packets. 654 655 \returns \ref status_codes 656 */ 657 int16_t packetMode(); 658 659 // interrupt methods 660 661 /*! 662 \brief Sets interrupt service routine to call when IRQ activates. 663 664 \param func ISR to call. 665 */ 666 void setIrqAction(void (*func)(void)); 667 668 /*! 669 \brief Clears interrupt service routine to call when IRQ activates. 670 */ 671 void clearIrqAction(); 672 673 /*! 674 \brief Interrupt-driven binary transmit method. Will start transmitting arbitrary binary data up to 64 bytes long. 675 676 \param data Binary data that will be transmitted. 677 678 \param len Length of binary data to transmit (in bytes). 679 680 \param addr Node address to transmit the packet to. 681 682 \returns \ref status_codes 683 */ 684 int16_t startTransmit(uint8_t* data, size_t len, uint8_t addr = 0) override; 685 686 /*! 687 \brief Interrupt-driven receive method. IRQ will be activated when full valid packet is received. 688 689 \returns \ref status_codes 690 */ 691 int16_t startReceive(); 692 693 /*! 694 \brief Reads data that was received after calling startReceive method. This method reads len characters. 695 696 \param data Pointer to array to save the received binary data. 697 698 \param len Number of bytes that will be read. When set to 0, the packet length will be retreived automatically. 699 When more bytes than received are requested, only the number of bytes requested will be returned. 700 701 \returns \ref status_codes 702 */ 703 int16_t readData(uint8_t* data, size_t len) override; 704 705 // configuration methods 706 707 /*! 708 \brief Sets FSK bit rate. Allowed values range from 0.123 to 256.0 kbps. 709 710 \param br Bit rate to be set (in kbps). 711 712 \returns \ref status_codes 713 */ 714 int16_t setBitRate(float br); 715 716 /*! 717 \brief Sets FSK frequency deviation from carrier frequency. Allowed values range from 0.625 to 320.0 kHz. 718 719 \param freqDev Frequency deviation to be set (in kHz). 720 721 \returns \ref status_codes 722 */ 723 int16_t setFrequencyDeviation(float freqDev) override; 724 725 /*! 726 \brief Sets receiver bandwidth. Allowed values range from 2.6 to 620.7 kHz. 727 728 \param rxBw Receiver bandwidth to be set in kHz. 729 730 \returns \ref status_codes 731 */ 732 int16_t setRxBandwidth(float rxBw); 733 734 /*! 735 \brief Sets sync word. Up to 4 bytes can be set as sync word. 736 737 \param syncWord Pointer to the array of sync word bytes. 738 739 \param len Sync word length in bytes. 740 */ 741 int16_t setSyncWord(uint8_t* syncWord, size_t len); 742 743 /*! 744 \brief Sets preamble length. 745 746 \param preambleLen Preamble length to be set (in bits). 747 748 \returns \ref status_codes 749 */ 750 int16_t setPreambleLength(uint8_t preambleLen); 751 752 /*! 753 \brief Query modem for the packet length of received payload. 754 755 \param update Update received packet length. Will return cached value when set to false. 756 757 \returns Length of last received packet in bytes. 758 */ 759 size_t getPacketLength(bool update = true) override; 760 761 /*! 762 \brief Sets transmission encoding. Only available in FSK mode. 763 Allowed values are RADIOLIB_ENCODING_NRZ, RADIOLIB_ENCODING_MANCHESTER and RADIOLIB_ENCODING_WHITENING. 764 765 \param encoding Encoding to be used. 766 767 \returns \ref status_codes 768 */ 769 int16_t setEncoding(uint8_t encoding) override; 770 771 /*! 772 \brief Sets Gaussian filter bandwidth-time product that will be used for data shaping. Only available in FSK mode with FSK modulation. 773 Allowed values are RADIOLIB_SHAPING_0_3, RADIOLIB_SHAPING_0_5 or RADIOLIB_SHAPING_1_0. Set to RADIOLIB_SHAPING_NONE to disable data shaping. 774 775 \param sh Gaussian shaping bandwidth-time product that will be used for data shaping 776 777 \returns \ref status_codes 778 */ 779 int16_t setDataShaping(uint8_t sh) override; 780 781 /*! 782 \brief Some modules contain external RF switch controlled by two pins. This function gives RadioLib control over those two pins to automatically switch Rx and Tx state. 783 When using automatic RF switch control, DO NOT change the pin mode of rxEn or txEn from Arduino sketch! 784 785 \param rxEn RX enable pin. 786 787 \param txEn TX enable pin. 788 */ 789 void setRfSwitchPins(RADIOLIB_PIN_TYPE rxEn, RADIOLIB_PIN_TYPE txEn); 790 791 /*! 792 \brief Get one truly random byte from RSSI noise. 793 794 \returns TRNG byte. 795 */ 796 uint8_t randomByte(); 797 798 /*! 799 \brief Read version SPI register. Should return RADIOLIB_SI443X_DEVICE_VERSION (0x06) if Si443x is connected and working. 800 801 \returns Version register contents or \ref status_codes 802 */ 803 int16_t getChipVersion(); 804 805 #if !defined(RADIOLIB_EXCLUDE_DIRECT_RECEIVE) 806 /*! 807 \brief Set interrupt service routine function to call when data bit is receveid in direct mode. 808 809 \param func Pointer to interrupt service routine. 810 */ 811 void setDirectAction(void (*func)(void)); 812 813 /*! 814 \brief Function to read and process data bit in direct reception mode. 815 816 \param pin Pin on which to read. 817 */ 818 void readBit(RADIOLIB_PIN_TYPE pin); 819 #endif 820 821 /*! 822 \brief Set modem in fixed packet length mode. 823 824 \param len Packet length. 825 826 \returns \ref status_codes 827 */ 828 int16_t fixedPacketLengthMode(uint8_t len = RADIOLIB_SI443X_MAX_PACKET_LENGTH); 829 830 /*! 831 \brief Set modem in variable packet length mode. 832 833 \param len Maximum packet length. 834 835 \returns \ref status_codes 836 */ 837 int16_t variablePacketLengthMode(uint8_t maxLen = RADIOLIB_SI443X_MAX_PACKET_LENGTH); 838 839 #if !defined(RADIOLIB_GODMODE) && !defined(RADIOLIB_LOW_LEVEL) 840 protected: 841 #endif 842 Module* _mod; 843 844 #if !defined(RADIOLIB_GODMODE) 845 protected: 846 #endif 847 848 float _br = 0; 849 float _freqDev = 0; 850 float _freq = 0; 851 852 size_t _packetLength = 0; 853 bool _packetLengthQueried = false; 854 uint8_t _packetLengthConfig = RADIOLIB_SI443X_FIXED_PACKET_LENGTH_ON; 855 856 int16_t setFrequencyRaw(float newFreq); 857 int16_t setPacketMode(uint8_t mode, uint8_t len); 858 859 #if !defined(RADIOLIB_GODMODE) 860 private: 861 #endif 862 bool findChip(); 863 void clearIRQFlags(); 864 void clearFIFO(size_t count); 865 int16_t config(); 866 int16_t updateClockRecovery(); 867 int16_t directMode(); 868 }; 869 870 #endif 871 872 #endif