1 #if !defined(_RADIOLIB_CC1101_H) && !defined(RADIOLIB_EXCLUDE_CC1101)
2 #define _RADIOLIB_CC1101_H
4 #include "../../TypeDef.h"
5 #include "../../Module.h"
7 #include "../../protocols/PhysicalLayer/PhysicalLayer.h"
10 #define RADIOLIB_CC1101_FREQUENCY_STEP_SIZE 396.7285156
11 #define RADIOLIB_CC1101_MAX_PACKET_LENGTH 255
12 #define RADIOLIB_CC1101_CRYSTAL_FREQ 26.0
13 #define RADIOLIB_CC1101_DIV_EXPONENT 16
14 #define RADIOLIB_CC1101_FIFO_SIZE 64
17 #define RADIOLIB_CC1101_CMD_READ 0b10000000
18 #define RADIOLIB_CC1101_CMD_WRITE 0b00000000
19 #define RADIOLIB_CC1101_CMD_BURST 0b01000000
20 #define RADIOLIB_CC1101_CMD_ACCESS_STATUS_REG 0b01000000
21 #define RADIOLIB_CC1101_CMD_FIFO_RX 0b10000000
22 #define RADIOLIB_CC1101_CMD_FIFO_TX 0b00000000
23 #define RADIOLIB_CC1101_CMD_RESET 0x30
24 #define RADIOLIB_CC1101_CMD_FSTXON 0x31
25 #define RADIOLIB_CC1101_CMD_XOFF 0x32
26 #define RADIOLIB_CC1101_CMD_CAL 0x33
27 #define RADIOLIB_CC1101_CMD_RX 0x34
28 #define RADIOLIB_CC1101_CMD_TX 0x35
29 #define RADIOLIB_CC1101_CMD_IDLE 0x36
30 #define RADIOLIB_CC1101_CMD_WOR 0x38
31 #define RADIOLIB_CC1101_CMD_POWER_DOWN 0x39
32 #define RADIOLIB_CC1101_CMD_FLUSH_RX 0x3A
33 #define RADIOLIB_CC1101_CMD_FLUSH_TX 0x3B
34 #define RADIOLIB_CC1101_CMD_WOR_RESET 0x3C
35 #define RADIOLIB_CC1101_CMD_NOP 0x3D
38 #define RADIOLIB_CC1101_REG_IOCFG2 0x00
39 #define RADIOLIB_CC1101_REG_IOCFG1 0x01
40 #define RADIOLIB_CC1101_REG_IOCFG0 0x02
41 #define RADIOLIB_CC1101_REG_FIFOTHR 0x03
42 #define RADIOLIB_CC1101_REG_SYNC1 0x04
43 #define RADIOLIB_CC1101_REG_SYNC0 0x05
44 #define RADIOLIB_CC1101_REG_PKTLEN 0x06
45 #define RADIOLIB_CC1101_REG_PKTCTRL1 0x07
46 #define RADIOLIB_CC1101_REG_PKTCTRL0 0x08
47 #define RADIOLIB_CC1101_REG_ADDR 0x09
48 #define RADIOLIB_CC1101_REG_CHANNR 0x0A
49 #define RADIOLIB_CC1101_REG_FSCTRL1 0x0B
50 #define RADIOLIB_CC1101_REG_FSCTRL0 0x0C
51 #define RADIOLIB_CC1101_REG_FREQ2 0x0D
52 #define RADIOLIB_CC1101_REG_FREQ1 0x0E
53 #define RADIOLIB_CC1101_REG_FREQ0 0x0F
54 #define RADIOLIB_CC1101_REG_MDMCFG4 0x10
55 #define RADIOLIB_CC1101_REG_MDMCFG3 0x11
56 #define RADIOLIB_CC1101_REG_MDMCFG2 0x12
57 #define RADIOLIB_CC1101_REG_MDMCFG1 0x13
58 #define RADIOLIB_CC1101_REG_MDMCFG0 0x14
59 #define RADIOLIB_CC1101_REG_DEVIATN 0x15
60 #define RADIOLIB_CC1101_REG_MCSM2 0x16
61 #define RADIOLIB_CC1101_REG_MCSM1 0x17
62 #define RADIOLIB_CC1101_REG_MCSM0 0x18
63 #define RADIOLIB_CC1101_REG_FOCCFG 0x19
64 #define RADIOLIB_CC1101_REG_BSCFG 0x1A
65 #define RADIOLIB_CC1101_REG_AGCCTRL2 0x1B
66 #define RADIOLIB_CC1101_REG_AGCCTRL1 0x1C
67 #define RADIOLIB_CC1101_REG_AGCCTRL0 0x1D
68 #define RADIOLIB_CC1101_REG_WOREVT1 0x1E
69 #define RADIOLIB_CC1101_REG_WOREVT0 0x1F
70 #define RADIOLIB_CC1101_REG_WORCTRL 0x20
71 #define RADIOLIB_CC1101_REG_FREND1 0x21
72 #define RADIOLIB_CC1101_REG_FREND0 0x22
73 #define RADIOLIB_CC1101_REG_FSCAL3 0x23
74 #define RADIOLIB_CC1101_REG_FSCAL2 0x24
75 #define RADIOLIB_CC1101_REG_FSCAL1 0x25
76 #define RADIOLIB_CC1101_REG_FSCAL0 0x26
77 #define RADIOLIB_CC1101_REG_RCCTRL1 0x27
78 #define RADIOLIB_CC1101_REG_RCCTRL0 0x28
79 #define RADIOLIB_CC1101_REG_FSTEST 0x29
80 #define RADIOLIB_CC1101_REG_PTEST 0x2A
81 #define RADIOLIB_CC1101_REG_AGCTEST 0x2B
82 #define RADIOLIB_CC1101_REG_TEST2 0x2C
83 #define RADIOLIB_CC1101_REG_TEST1 0x2D
84 #define RADIOLIB_CC1101_REG_TEST0 0x2E
85 #define RADIOLIB_CC1101_REG_PARTNUM 0x30
86 #define RADIOLIB_CC1101_REG_VERSION 0x31
87 #define RADIOLIB_CC1101_REG_FREQEST 0x32
88 #define RADIOLIB_CC1101_REG_LQI 0x33
89 #define RADIOLIB_CC1101_REG_RSSI 0x34
90 #define RADIOLIB_CC1101_REG_MARCSTATE 0x35
91 #define RADIOLIB_CC1101_REG_WORTIME1 0x36
92 #define RADIOLIB_CC1101_REG_WORTIME0 0x37
93 #define RADIOLIB_CC1101_REG_PKTSTATUS 0x38
94 #define RADIOLIB_CC1101_REG_VCO_VC_DAC 0x39
95 #define RADIOLIB_CC1101_REG_TXBYTES 0x3A
96 #define RADIOLIB_CC1101_REG_RXBYTES 0x3B
97 #define RADIOLIB_CC1101_REG_RCCTRL1_STATUS 0x3C
98 #define RADIOLIB_CC1101_REG_RCCTRL0_STATUS 0x3D
99 #define RADIOLIB_CC1101_REG_PATABLE 0x3E
100 #define RADIOLIB_CC1101_REG_FIFO 0x3F
103 #define RADIOLIB_CC1101_STATUS_CHIP_READY 0b00000000
104 #define RADIOLIB_CC1101_STATUS_CHIP_NOT_READY 0b10000000
105 #define RADIOLIB_CC1101_STATUS_IDLE 0b00000000
106 #define RADIOLIB_CC1101_STATUS_RX 0b00010000
107 #define RADIOLIB_CC1101_STATUS_TX 0b00100000
108 #define RADIOLIB_CC1101_STATUS_FSTXON 0b00110000
109 #define RADIOLIB_CC1101_STATUS_CALIBRATE 0b01000000
110 #define RADIOLIB_CC1101_STATUS_SETTLING 0b01010000
111 #define RADIOLIB_CC1101_STATUS_RXFIFO_OVERFLOW 0b01100000
112 #define RADIOLIB_CC1101_STATUS_TXFIFO_UNDERFLOW 0b01110000
115 #define RADIOLIB_CC1101_GDO2_NORM 0b00000000
116 #define RADIOLIB_CC1101_GDO2_INV 0b01000000
119 #define RADIOLIB_CC1101_GDO1_DS_LOW 0b00000000
120 #define RADIOLIB_CC1101_GDO1_DS_HIGH 0b10000000
121 #define RADIOLIB_CC1101_GDO1_NORM 0b00000000
122 #define RADIOLIB_CC1101_GDO1_INV 0b01000000
125 #define RADIOLIB_CC1101_GDO0_TEMP_SENSOR_OFF 0b00000000
126 #define RADIOLIB_CC1101_GDO0_TEMP_SENSOR_ON 0b10000000
127 #define RADIOLIB_CC1101_GDO0_NORM 0b00000000
128 #define RADIOLIB_CC1101_GDO0_INV 0b01000000
131 #define RADIOLIB_CC1101_GDOX_RX_FIFO_FULL 0x00
132 #define RADIOLIB_CC1101_GDOX_RX_FIFO_FULL_OR_PKT_END 0x01
133 #define RADIOLIB_CC1101_GDOX_TX_FIFO_ABOVE_THR 0x02
134 #define RADIOLIB_CC1101_GDOX_TX_FIFO_FULL 0x03
135 #define RADIOLIB_CC1101_GDOX_RX_FIFO_OVERFLOW 0x04
136 #define RADIOLIB_CC1101_GDOX_TX_FIFO_UNDERFLOW 0x05
137 #define RADIOLIB_CC1101_GDOX_SYNC_WORD_SENT_OR_PKT_RECEIVED 0x06
138 #define RADIOLIB_CC1101_GDOX_PKT_RECEIVED_CRC_OK 0x07
139 #define RADIOLIB_CC1101_GDOX_PREAMBLE_QUALITY_REACHED 0x08
140 #define RADIOLIB_CC1101_GDOX_CHANNEL_CLEAR 0x09
141 #define RADIOLIB_CC1101_GDOX_PLL_LOCKED 0x0A
142 #define RADIOLIB_CC1101_GDOX_SERIAL_CLOCK 0x0B
143 #define RADIOLIB_CC1101_GDOX_SERIAL_DATA_SYNC 0x0C
144 #define RADIOLIB_CC1101_GDOX_SERIAL_DATA_ASYNC 0x0D
145 #define RADIOLIB_CC1101_GDOX_CARRIER_SENSE 0x0E
146 #define RADIOLIB_CC1101_GDOX_CRC_OK 0x0F
147 #define RADIOLIB_CC1101_GDOX_RX_HARD_DATA1 0x16
148 #define RADIOLIB_CC1101_GDOX_RX_HARD_DATA0 0x17
149 #define RADIOLIB_CC1101_GDOX_PA_PD 0x1B
150 #define RADIOLIB_CC1101_GDOX_LNA_PD 0x1C
151 #define RADIOLIB_CC1101_GDOX_RX_SYMBOL_TICK 0x1D
152 #define RADIOLIB_CC1101_GDOX_WOR_EVNT0 0x24
153 #define RADIOLIB_CC1101_GDOX_WOR_EVNT1 0x25
154 #define RADIOLIB_CC1101_GDOX_CLK_256 0x26
155 #define RADIOLIB_CC1101_GDOX_CLK_32K 0x27
156 #define RADIOLIB_CC1101_GDOX_CHIP_RDYN 0x29
157 #define RADIOLIB_CC1101_GDOX_XOSC_STABLE 0x2B
158 #define RADIOLIB_CC1101_GDOX_HIGH_Z 0x2E
159 #define RADIOLIB_CC1101_GDOX_HW_TO_0 0x2F
160 #define RADIOLIB_CC1101_GDOX_CLOCK_XOSC_1 0x30
161 #define RADIOLIB_CC1101_GDOX_CLOCK_XOSC_1_5 0x31
162 #define RADIOLIB_CC1101_GDOX_CLOCK_XOSC_2 0x32
163 #define RADIOLIB_CC1101_GDOX_CLOCK_XOSC_3 0x33
164 #define RADIOLIB_CC1101_GDOX_CLOCK_XOSC_4 0x34
165 #define RADIOLIB_CC1101_GDOX_CLOCK_XOSC_6 0x35
166 #define RADIOLIB_CC1101_GDOX_CLOCK_XOSC_8 0x36
167 #define RADIOLIB_CC1101_GDOX_CLOCK_XOSC_12 0x37
168 #define RADIOLIB_CC1101_GDOX_CLOCK_XOSC_16 0x38
169 #define RADIOLIB_CC1101_GDOX_CLOCK_XOSC_24 0x39
170 #define RADIOLIB_CC1101_GDOX_CLOCK_XOSC_32 0x3A
171 #define RADIOLIB_CC1101_GDOX_CLOCK_XOSC_48 0x3B
172 #define RADIOLIB_CC1101_GDOX_CLOCK_XOSC_64 0x3C
173 #define RADIOLIB_CC1101_GDOX_CLOCK_XOSC_96 0x3D
174 #define RADIOLIB_CC1101_GDOX_CLOCK_XOSC_128 0x3E
175 #define RADIOLIB_CC1101_GDOX_CLOCK_XOSC_192 0x3F
178 #define RADIOLIB_CC1101_ADC_RETENTION_OFF 0b00000000
179 #define RADIOLIB_CC1101_ADC_RETENTION_ON 0b01000000
180 #define RADIOLIB_CC1101_RX_ATTEN_0_DB 0b00000000
181 #define RADIOLIB_CC1101_RX_ATTEN_6_DB 0b00010000
182 #define RADIOLIB_CC1101_RX_ATTEN_12_DB 0b00100000
183 #define RADIOLIB_CC1101_RX_ATTEN_18_DB 0b00110000
184 #define RADIOLIB_CC1101_FIFO_THR_TX_61_RX_4 0b00000000
185 #define RADIOLIB_CC1101_FIFO_THR_TX_33_RX_32 0b00000111
186 #define RADIOLIB_CC1101_FIFO_THRESH_TX 33
187 #define RADIOLIB_CC1101_FIFO_THRESH_RX 32
190 #define RADIOLIB_CC1101_SYNC_WORD_MSB 0xD3
193 #define RADIOLIB_CC1101_SYNC_WORD_LSB 0x91
196 #define RADIOLIB_CC1101_PACKET_LENGTH 0xFF
199 #define RADIOLIB_CC1101_PQT 0x00
200 #define RADIOLIB_CC1101_CRC_AUTOFLUSH_OFF 0b00000000
201 #define RADIOLIB_CC1101_CRC_AUTOFLUSH_ON 0b00001000
202 #define RADIOLIB_CC1101_APPEND_STATUS_OFF 0b00000000
203 #define RADIOLIB_CC1101_APPEND_STATUS_ON 0b00000100
204 #define RADIOLIB_CC1101_ADR_CHK_NONE 0b00000000
205 #define RADIOLIB_CC1101_ADR_CHK_NO_BROADCAST 0b00000001
206 #define RADIOLIB_CC1101_ADR_CHK_SINGLE_BROADCAST 0b00000010
207 #define RADIOLIB_CC1101_ADR_CHK_DOUBLE_BROADCAST 0b00000011
210 #define RADIOLIB_CC1101_WHITE_DATA_OFF 0b00000000
211 #define RADIOLIB_CC1101_WHITE_DATA_ON 0b01000000
212 #define RADIOLIB_CC1101_PKT_FORMAT_NORMAL 0b00000000
213 #define RADIOLIB_CC1101_PKT_FORMAT_SYNCHRONOUS 0b00010000
214 #define RADIOLIB_CC1101_PKT_FORMAT_RANDOM 0b00100000
215 #define RADIOLIB_CC1101_PKT_FORMAT_ASYNCHRONOUS 0b00110000
216 #define RADIOLIB_CC1101_CRC_OFF 0b00000000
217 #define RADIOLIB_CC1101_CRC_ON 0b00000100
218 #define RADIOLIB_CC1101_LENGTH_CONFIG_FIXED 0b00000000
219 #define RADIOLIB_CC1101_LENGTH_CONFIG_VARIABLE 0b00000001
220 #define RADIOLIB_CC1101_LENGTH_CONFIG_INFINITE 0b00000010
223 #define RADIOLIB_CC1101_DEVICE_ADDR 0x00
226 #define RADIOLIB_CC1101_CHAN 0x00
229 #define RADIOLIB_CC1101_FREQ_IF 0x0F
232 #define RADIOLIB_CC1101_FREQOFF 0x00
235 #define RADIOLIB_CC1101_FREQ_MSB 0x1E
236 #define RADIOLIB_CC1101_FREQ_MID 0xC4
237 #define RADIOLIB_CC1101_FREQ_LSB 0xEC
240 #define RADIOLIB_CC1101_CHANBW_E 0b10000000
241 #define RADIOLIB_CC1101_CHANBW_M 0b00000000
242 #define RADIOLIB_CC1101_DRATE_E 0x0C
245 #define RADIOLIB_CC1101_DRATE_M 0x22
248 #define RADIOLIB_CC1101_DEM_DCFILT_OFF 0b10000000
249 #define RADIOLIB_CC1101_DEM_DCFILT_ON 0b00000000
250 #define RADIOLIB_CC1101_MOD_FORMAT_2_FSK 0b00000000
251 #define RADIOLIB_CC1101_MOD_FORMAT_GFSK 0b00010000
252 #define RADIOLIB_CC1101_MOD_FORMAT_ASK_OOK 0b00110000
253 #define RADIOLIB_CC1101_MOD_FORMAT_4_FSK 0b01000000
254 #define RADIOLIB_CC1101_MOD_FORMAT_MFSK 0b01110000
255 #define RADIOLIB_CC1101_MANCHESTER_EN_OFF 0b00000000
256 #define RADIOLIB_CC1101_MANCHESTER_EN_ON 0b00001000
257 #define RADIOLIB_CC1101_SYNC_MODE_NONE 0b00000000
258 #define RADIOLIB_CC1101_SYNC_MODE_15_16 0b00000001
259 #define RADIOLIB_CC1101_SYNC_MODE_16_16 0b00000010
260 #define RADIOLIB_CC1101_SYNC_MODE_30_32 0b00000011
261 #define RADIOLIB_CC1101_SYNC_MODE_NONE_THR 0b00000100
262 #define RADIOLIB_CC1101_SYNC_MODE_15_16_THR 0b00000101
263 #define RADIOLIB_CC1101_SYNC_MODE_16_16_THR 0b00000110
264 #define RADIOLIB_CC1101_SYNC_MODE_30_32_THR 0b00000111
267 #define RADIOLIB_CC1101_FEC_OFF 0b00000000
268 #define RADIOLIB_CC1101_FEC_ON 0b10000000
269 #define RADIOLIB_CC1101_NUM_PREAMBLE_2 0b00000000
270 #define RADIOLIB_CC1101_NUM_PREAMBLE_3 0b00010000
271 #define RADIOLIB_CC1101_NUM_PREAMBLE_4 0b00100000
272 #define RADIOLIB_CC1101_NUM_PREAMBLE_6 0b00110000
273 #define RADIOLIB_CC1101_NUM_PREAMBLE_8 0b01000000
274 #define RADIOLIB_CC1101_NUM_PREAMBLE_12 0b01010000
275 #define RADIOLIB_CC1101_NUM_PREAMBLE_16 0b01100000
276 #define RADIOLIB_CC1101_NUM_PREAMBLE_24 0b01110000
277 #define RADIOLIB_CC1101_CHANSPC_E 0x02
280 #define RADIOLIB_CC1101_CHANSPC_M 0xF8
283 #define RADIOLIB_CC1101_DEVIATION_E 0b01000000
284 #define RADIOLIB_CC1101_DEVIATION_M 0b00000111
285 #define RADIOLIB_CC1101_MSK_PHASE_CHANGE_PERIOD 0x07
288 #define RADIOLIB_CC1101_RX_TIMEOUT_RSSI_OFF 0b00000000
289 #define RADIOLIB_CC1101_RX_TIMEOUT_RSSI_ON 0b00010000
290 #define RADIOLIB_CC1101_RX_TIMEOUT_QUAL_OFF 0b00000000
291 #define RADIOLIB_CC1101_RX_TIMEOUT_QUAL_ON 0b00001000
292 #define RADIOLIB_CC1101_RX_TIMEOUT_OFF 0b00000111
293 #define RADIOLIB_CC1101_RX_TIMEOUT_MAX 0b00000000
296 #define RADIOLIB_CC1101_CCA_MODE_ALWAYS 0b00000000
297 #define RADIOLIB_CC1101_CCA_MODE_RSSI_THR 0b00010000
298 #define RADIOLIB_CC1101_CCA_MODE_RX_PKT 0b00100000
299 #define RADIOLIB_CC1101_CCA_MODE_RSSI_THR_RX_PKT 0b00110000
300 #define RADIOLIB_CC1101_RXOFF_IDLE 0b00000000
301 #define RADIOLIB_CC1101_RXOFF_FSTXON 0b00000100
302 #define RADIOLIB_CC1101_RXOFF_TX 0b00001000
303 #define RADIOLIB_CC1101_RXOFF_RX 0b00001100
304 #define RADIOLIB_CC1101_TXOFF_IDLE 0b00000000
305 #define RADIOLIB_CC1101_TXOFF_FSTXON 0b00000001
306 #define RADIOLIB_CC1101_TXOFF_TX 0b00000010
307 #define RADIOLIB_CC1101_TXOFF_RX 0b00000011
310 #define RADIOLIB_CC1101_FS_AUTOCAL_NEVER 0b00000000
311 #define RADIOLIB_CC1101_FS_AUTOCAL_IDLE_TO_RXTX 0b00010000
312 #define RADIOLIB_CC1101_FS_AUTOCAL_RXTX_TO_IDLE 0b00100000
313 #define RADIOLIB_CC1101_FS_AUTOCAL_RXTX_TO_IDLE_4TH 0b00110000
314 #define RADIOLIB_CC1101_PO_TIMEOUT_COUNT_1 0b00000000
315 #define RADIOLIB_CC1101_PO_TIMEOUT_COUNT_16 0b00000100
316 #define RADIOLIB_CC1101_PO_TIMEOUT_COUNT_64 0b00001000
317 #define RADIOLIB_CC1101_PO_TIMEOUT_COUNT_256 0b00001100
318 #define RADIOLIB_CC1101_PIN_CTRL_OFF 0b00000000
319 #define RADIOLIB_CC1101_PIN_CTRL_ON 0b00000010
320 #define RADIOLIB_CC1101_XOSC_FORCE_OFF 0b00000000
321 #define RADIOLIB_CC1101_XOSC_FORCE_ON 0b00000001
324 #define RADIOLIB_CC1101_FOC_BS_CS_GATE_OFF 0b00000000
325 #define RADIOLIB_CC1101_FOC_BS_CS_GATE_ON 0b00100000
326 #define RADIOLIB_CC1101_FOC_PRE_K 0b00000000
327 #define RADIOLIB_CC1101_FOC_PRE_2K 0b00001000
328 #define RADIOLIB_CC1101_FOC_PRE_3K 0b00010000
329 #define RADIOLIB_CC1101_FOC_PRE_4K 0b00011000
330 #define RADIOLIB_CC1101_FOC_POST_K 0b00000000
331 #define RADIOLIB_CC1101_FOC_POST_K_2 0b00000100
332 #define RADIOLIB_CC1101_FOC_LIMIT_NO_COMPENSATION 0b00000000
333 #define RADIOLIB_CC1101_FOC_LIMIT_BW_CHAN_8 0b00000001
334 #define RADIOLIB_CC1101_FOC_LIMIT_BW_CHAN_4 0b00000010
335 #define RADIOLIB_CC1101_FOC_LIMIT_BW_CHAN_2 0b00000011
338 #define RADIOLIB_CC1101_BS_PRE_KI 0b00000000
339 #define RADIOLIB_CC1101_BS_PRE_2KI 0b01000000
340 #define RADIOLIB_CC1101_BS_PRE_3KI 0b10000000
341 #define RADIOLIB_CC1101_BS_PRE_4KI 0b11000000
342 #define RADIOLIB_CC1101_BS_PRE_KP 0b00000000
343 #define RADIOLIB_CC1101_BS_PRE_2KP 0b00010000
344 #define RADIOLIB_CC1101_BS_PRE_3KP 0b00100000
345 #define RADIOLIB_CC1101_BS_PRE_4KP 0b00110000
346 #define RADIOLIB_CC1101_BS_POST_KI 0b00000000
347 #define RADIOLIB_CC1101_BS_POST_KI_2 0b00001000
348 #define RADIOLIB_CC1101_BS_POST_KP 0b00000000
349 #define RADIOLIB_CC1101_BS_POST_KP_1 0b00000100
350 #define RADIOLIB_CC1101_BS_LIMIT_NO_COMPENSATION 0b00000000
351 #define RADIOLIB_CC1101_BS_LIMIT_3_125 0b00000001
352 #define RADIOLIB_CC1101_BS_LIMIT_6_25 0b00000010
353 #define RADIOLIB_CC1101_BS_LIMIT_12_5 0b00000011
356 #define RADIOLIB_CC1101_MAX_DVGA_GAIN_0 0b00000000
357 #define RADIOLIB_CC1101_MAX_DVGA_GAIN_1 0b01000000
358 #define RADIOLIB_CC1101_MAX_DVGA_GAIN_2 0b10000000
359 #define RADIOLIB_CC1101_MAX_DVGA_GAIN_3 0b11000000
360 #define RADIOLIB_CC1101_LNA_GAIN_REDUCE_0_DB 0b00000000
361 #define RADIOLIB_CC1101_LNA_GAIN_REDUCE_2_6_DB 0b00001000
362 #define RADIOLIB_CC1101_LNA_GAIN_REDUCE_6_1_DB 0b00010000
363 #define RADIOLIB_CC1101_LNA_GAIN_REDUCE_7_4_DB 0b00011000
364 #define RADIOLIB_CC1101_LNA_GAIN_REDUCE_9_2_DB 0b00100000
365 #define RADIOLIB_CC1101_LNA_GAIN_REDUCE_11_5_DB 0b00101000
366 #define RADIOLIB_CC1101_LNA_GAIN_REDUCE_14_6_DB 0b00110000
367 #define RADIOLIB_CC1101_LNA_GAIN_REDUCE_17_1_DB 0b00111000
368 #define RADIOLIB_CC1101_MAGN_TARGET_24_DB 0b00000000
369 #define RADIOLIB_CC1101_MAGN_TARGET_27_DB 0b00000001
370 #define RADIOLIB_CC1101_MAGN_TARGET_30_DB 0b00000010
371 #define RADIOLIB_CC1101_MAGN_TARGET_33_DB 0b00000011
372 #define RADIOLIB_CC1101_MAGN_TARGET_36_DB 0b00000100
373 #define RADIOLIB_CC1101_MAGN_TARGET_38_DB 0b00000101
374 #define RADIOLIB_CC1101_MAGN_TARGET_40_DB 0b00000110
375 #define RADIOLIB_CC1101_MAGN_TARGET_42_DB 0b00000111
378 #define RADIOLIB_CC1101_AGC_LNA_PRIORITY_LNA2 0b00000000
379 #define RADIOLIB_CC1101_AGC_LNA_PRIORITY_LNA 0b01000000
380 #define RADIOLIB_CC1101_CARRIER_SENSE_REL_THR_OFF 0b00000000
381 #define RADIOLIB_CC1101_CARRIER_SENSE_REL_THR_6_DB 0b00010000
382 #define RADIOLIB_CC1101_CARRIER_SENSE_REL_THR_10_DB 0b00100000
383 #define RADIOLIB_CC1101_CARRIER_SENSE_REL_THR_14_DB 0b00110000
384 #define RADIOLIB_CC1101_CARRIER_SENSE_ABS_THR 0x00
387 #define RADIOLIB_CC1101_HYST_LEVEL_NONE 0b00000000
388 #define RADIOLIB_CC1101_HYST_LEVEL_LOW 0b01000000
389 #define RADIOLIB_CC1101_HYST_LEVEL_MEDIUM 0b10000000
390 #define RADIOLIB_CC1101_HYST_LEVEL_HIGH 0b11000000
391 #define RADIOLIB_CC1101_WAIT_TIME_8_SAMPLES 0b00000000
392 #define RADIOLIB_CC1101_WAIT_TIME_16_SAMPLES 0b00010000
393 #define RADIOLIB_CC1101_WAIT_TIME_24_SAMPLES 0b00100000
394 #define RADIOLIB_CC1101_WAIT_TIME_32_SAMPLES 0b00110000
395 #define RADIOLIB_CC1101_AGC_FREEZE_NEVER 0b00000000
396 #define RADIOLIB_CC1101_AGC_FREEZE_SYNC_WORD 0b00000100
397 #define RADIOLIB_CC1101_AGC_FREEZE_MANUAL_A 0b00001000
398 #define RADIOLIB_CC1101_AGC_FREEZE_MANUAL_AD 0b00001100
399 #define RADIOLIB_CC1101_FILTER_LENGTH_8 0b00000000
400 #define RADIOLIB_CC1101_FILTER_LENGTH_16 0b00000001
401 #define RADIOLIB_CC1101_FILTER_LENGTH_32 0b00000010
402 #define RADIOLIB_CC1101_FILTER_LENGTH_64 0b00000011
403 #define RADIOLIB_CC1101_ASK_OOK_BOUNDARY_4_DB 0b00000000
404 #define RADIOLIB_CC1101_ASK_OOK_BOUNDARY_8_DB 0b00000001
405 #define RADIOLIB_CC1101_ASK_OOK_BOUNDARY_12_DB 0b00000010
406 #define RADIOLIB_CC1101_ASK_OOK_BOUNDARY_16_DB 0b00000011
409 #define RADIOLIB_CC1101_EVENT0_TIMEOUT_MSB 0x87
410 #define RADIOLIB_CC1101_EVENT0_TIMEOUT_LSB 0x6B
413 #define RADIOLIB_CC1101_RC_POWER_UP 0b00000000
414 #define RADIOLIB_CC1101_RC_POWER_DOWN 0b10000000
415 #define RADIOLIB_CC1101_EVENT1_TIMEOUT_4 0b00000000
416 #define RADIOLIB_CC1101_EVENT1_TIMEOUT_6 0b00010000
417 #define RADIOLIB_CC1101_EVENT1_TIMEOUT_8 0b00100000
418 #define RADIOLIB_CC1101_EVENT1_TIMEOUT_12 0b00110000
419 #define RADIOLIB_CC1101_EVENT1_TIMEOUT_16 0b01000000
420 #define RADIOLIB_CC1101_EVENT1_TIMEOUT_24 0b01010000
421 #define RADIOLIB_CC1101_EVENT1_TIMEOUT_32 0b01100000
422 #define RADIOLIB_CC1101_EVENT1_TIMEOUT_48 0b01110000
423 #define RADIOLIB_CC1101_RC_CAL_OFF 0b00000000
424 #define RADIOLIB_CC1101_RC_CAL_ON 0b00001000
425 #define RADIOLIB_CC1101_WOR_RES_1 0b00000000
426 #define RADIOLIB_CC1101_WOR_RES_2_5 0b00000001
427 #define RADIOLIB_CC1101_WOR_RES_2_10 0b00000010
428 #define RADIOLIB_CC1101_WOR_RES_2_15 0b00000011
431 #define RADIOLIB_CC1101_LNA_CURRENT 0x01
432 #define RADIOLIB_CC1101_LNA2MIX_CURRENT 0x01
433 #define RADIOLIB_CC1101_LODIV_BUF_CURRENT_RX 0x01
434 #define RADIOLIB_CC1101_MIX_CURRENT 0x02
437 #define RADIOLIB_CC1101_LODIV_BUF_CURRENT_TX 0x01
438 #define RADIOLIB_CC1101_PA_POWER 0x00
441 #define RADIOLIB_CC1101_CHP_CURR_CAL_OFF 0b00000000
442 #define RADIOLIB_CC1101_CHP_CURR_CAL_ON 0b00100000
443 #define RADIOLIB_CC1101_FSCAL3 0x09
446 #define RADIOLIB_CC1101_VCO_CORE_LOW 0b00000000
447 #define RADIOLIB_CC1101_VCO_CORE_HIGH 0b00100000
448 #define RADIOLIB_CC1101_FSCAL2 0x0A
451 #define RADIOLIB_CC1101_FSCAL1 0x20
454 #define RADIOLIB_CC1101_FSCAL0 0x0D
457 #define RADIOLIB_CC1101_RCCTRL1 0x41
460 #define RADIOLIB_CC1101_RCCTRL0 0x00
463 #define RADIOLIB_CC1101_TEMP_SENS_IDLE_OFF 0x7F
464 #define RADIOLIB_CC1101_TEMP_SENS_IDLE_ON 0xBF
467 #define RADIOLIB_CC1101_VCO_SEL_CAL_OFF 0b00000000
468 #define RADIOLIB_CC1101_VCO_SEL_CAL_ON 0b00000010
471 #define RADIOLIB_CC1101_PARTNUM 0x00
474 #define RADIOLIB_CC1101_VERSION_CURRENT 0x14
475 #define RADIOLIB_CC1101_VERSION_LEGACY 0x04
476 #define RADIOLIB_CC1101_VERSION_CLONE 0x17
479 #define RADIOLIB_CC1101_MARC_STATE_SLEEP 0x00
480 #define RADIOLIB_CC1101_MARC_STATE_IDLE 0x01
481 #define RADIOLIB_CC1101_MARC_STATE_XOFF 0x02
482 #define RADIOLIB_CC1101_MARC_STATE_VCOON_MC 0x03
483 #define RADIOLIB_CC1101_MARC_STATE_REGON_MC 0x04
484 #define RADIOLIB_CC1101_MARC_STATE_MANCAL 0x05
485 #define RADIOLIB_CC1101_MARC_STATE_VCOON 0x06
486 #define RADIOLIB_CC1101_MARC_STATE_REGON 0x07
487 #define RADIOLIB_CC1101_MARC_STATE_STARTCAL 0x08
488 #define RADIOLIB_CC1101_MARC_STATE_BWBOOST 0x09
489 #define RADIOLIB_CC1101_MARC_STATE_FS_LOCK 0x0A
490 #define RADIOLIB_CC1101_MARC_STATE_IFADCON 0x0B
491 #define RADIOLIB_CC1101_MARC_STATE_ENDCAL 0x0C
492 #define RADIOLIB_CC1101_MARC_STATE_RX 0x0D
493 #define RADIOLIB_CC1101_MARC_STATE_RX_END 0x0E
494 #define RADIOLIB_CC1101_MARC_STATE_RX_RST 0x0F
495 #define RADIOLIB_CC1101_MARC_STATE_TXRX_SWITCH 0x10
496 #define RADIOLIB_CC1101_MARC_STATE_RXFIFO_OVERFLOW 0x11
497 #define RADIOLIB_CC1101_MARC_STATE_FSTXON 0x12
498 #define RADIOLIB_CC1101_MARC_STATE_TX 0x13
499 #define RADIOLIB_CC1101_MARC_STATE_TX_END 0x14
500 #define RADIOLIB_CC1101_MARC_STATE_RXTX_SWITCH 0x15
501 #define RADIOLIB_CC1101_MARC_STATE_TXFIFO_UNDERFLOW 0x16
504 #define RADIOLIB_CC1101_WORTIME_MSB 0x00
505 #define RADIOLIB_CC1101_WORTIME_LSB 0x00
508 #define RADIOLIB_CC1101_CRC_OK 0b10000000
509 #define RADIOLIB_CC1101_CRC_ERROR 0b00000000
510 #define RADIOLIB_CC1101_CS 0b01000000
511 #define RADIOLIB_CC1101_PQT_REACHED 0b00100000
512 #define RADIOLIB_CC1101_CCA 0b00010000
513 #define RADIOLIB_CC1101_SFD 0b00001000
514 #define RADIOLIB_CC1101_GDO2_ACTIVE 0b00000100
515 #define RADIOLIB_CC1101_GDO0_ACTIVE 0b00000001
518 #define RADIOLIB_CC1101_DEFAULT_FREQ 434.0
519 #define RADIOLIB_CC1101_DEFAULT_BR 4.8
520 #define RADIOLIB_CC1101_DEFAULT_FREQDEV 5.0
521 #define RADIOLIB_CC1101_DEFAULT_RXBW 135.0
522 #define RADIOLIB_CC1101_DEFAULT_POWER 10
523 #define RADIOLIB_CC1101_DEFAULT_PREAMBLELEN 16
524 #define RADIOLIB_CC1101_DEFAULT_SW {0x12, 0xAD}
525 #define RADIOLIB_CC1101_DEFAULT_SW_LEN 2
560 float freq = RADIOLIB_CC1101_DEFAULT_FREQ,
561 float br = RADIOLIB_CC1101_DEFAULT_BR,
562 float freqDev = RADIOLIB_CC1101_DEFAULT_FREQDEV,
563 float rxBw = RADIOLIB_CC1101_DEFAULT_RXBW,
564 int8_t pwr = RADIOLIB_CC1101_DEFAULT_POWER,
565 uint8_t preambleLength = RADIOLIB_CC1101_DEFAULT_PREAMBLELEN);
580 int16_t
transmit(uint8_t* data,
size_t len, uint8_t addr = 0)
override;
589 int16_t
receive(uint8_t* data,
size_t len)
override;
602 int16_t
standby(uint8_t mode)
override;
670 int16_t
startTransmit(uint8_t* data,
size_t len, uint8_t addr = 0)
override;
692 int16_t
startReceive(uint32_t timeout, uint16_t irqFlags, uint16_t irqMask,
size_t len);
701 int16_t
readData(uint8_t* data,
size_t len)
override;
756 int16_t
setSyncWord(uint8_t syncH, uint8_t syncL, uint8_t maxErrBits = 0,
bool requireCarrierSense =
false);
766 int16_t
setSyncWord(uint8_t* syncWord, uint8_t len, uint8_t maxErrBits = 0,
bool requireCarrierSense =
false);
782 int16_t
setNodeAddress(uint8_t nodeAddr, uint8_t numBroadcastAddrs = 0);
795 int16_t
setOOK(
bool enableOOK);
902 #if !defined(RADIOLIB_EXCLUDE_DIRECT_RECEIVE)
924 #if !defined(RADIOLIB_GODMODE) && !defined(RADIOLIB_LOW_LEVEL)
930 int16_t SPIgetRegValue(uint8_t reg, uint8_t msb = 7, uint8_t lsb = 0);
931 int16_t SPIsetRegValue(uint8_t reg, uint8_t value, uint8_t msb = 7, uint8_t lsb = 0, uint8_t checkInterval = 2);
932 void SPIreadRegisterBurst(uint8_t reg, uint8_t numBytes, uint8_t* inBytes);
933 uint8_t SPIreadRegister(uint8_t reg);
934 void SPIwriteRegisterBurst(uint8_t reg, uint8_t* data,
size_t len);
935 void SPIwriteRegister(uint8_t reg, uint8_t data);
937 void SPIsendCommand(uint8_t cmd);
939 #if !defined(RADIOLIB_GODMODE)
943 float frequency = RADIOLIB_CC1101_DEFAULT_FREQ;
944 float bitRate = RADIOLIB_CC1101_DEFAULT_BR;
947 uint8_t modulation = RADIOLIB_CC1101_MOD_FORMAT_2_FSK;
949 size_t packetLength = 0;
950 bool packetLengthQueried =
false;
951 uint8_t packetLengthConfig = RADIOLIB_CC1101_LENGTH_CONFIG_VARIABLE;
953 bool promiscuous =
false;
955 bool directModeEnabled =
true;
957 int8_t power = RADIOLIB_CC1101_DEFAULT_POWER;
962 int16_t directMode(
bool sync);
963 static void getExpMant(
float target, uint16_t mantOffset, uint8_t divExp, uint8_t expMax, uint8_t& exp, uint8_t& mant);
964 int16_t setPacketMode(uint8_t mode, uint16_t len);
Control class for CC1101 module.
Definition: CC1101.h:531
int16_t setDIOMapping(uint32_t pin, uint32_t value)
Configure DIO pin mapping to get a given signal on a DIO pin (if available).
Definition: CC1101.cpp:1015
int16_t setPromiscuousMode(bool enable=true)
Set modem in "sniff" mode: no packet filtering (e.g., no preamble, sync word, address,...
Definition: CC1101.cpp:894
int16_t setFrequencyDeviation(float freqDev) override
Sets frequency deviation. Allowed values range from 1.587 to 380.8 kHz.
Definition: CC1101.cpp:549
size_t getPacketLength(bool update=true) override
Query modem for the packet length of received payload.
Definition: CC1101.cpp:824
void reset()
Reset method - resets the chip using manual reset sequence (without RESET pin).
Definition: CC1101.cpp:94
void readBit(uint32_t pin)
Function to read and process data bit in direct reception mode.
Definition: CC1101.cpp:1010
int16_t transmitDirect(uint32_t frf=0) override
Starts direct mode transmission.
Definition: CC1101.cpp:178
int16_t getChipVersion()
Read version SPI register. Should return CC1101_VERSION_LEGACY (0x04) or CC1101_VERSION_CURRENT (0x14...
Definition: CC1101.cpp:1001
virtual int16_t readData(uint8_t *data, size_t len)
Reads data that was received after calling startReceive method.
Definition: PhysicalLayer.cpp:205
int16_t setRxBandwidth(float rxBw)
Sets receiver bandwidth. Allowed values range from 58.0 to 812.0 kHz.
Definition: CC1101.cpp:528
int16_t packetMode()
Stops direct mode. It is required to call this method to switch from direct transmissions to packet-b...
Definition: CC1101.cpp:229
int16_t setSyncWord(uint8_t syncH, uint8_t syncL, uint8_t maxErrBits=0, bool requireCarrierSense=false)
Sets 16-bit sync word as a two byte value.
Definition: CC1101.cpp:700
float getRSSI()
Gets RSSI (Recorded Signal Strength Indicator) of the last received packet. In asynchronous direct mo...
Definition: CC1101.cpp:797
int16_t transmit(const char *str, uint8_t addr=0)
C-string transmit method.
Definition: PhysicalLayer.cpp:52
int16_t disableSyncWordFiltering(bool requireCarrierSense=false)
Disable preamble and sync word filtering and generation.
Definition: CC1101.cpp:879
int16_t setOutputPower(int8_t pwr)
Sets output power. Allowed values are -30, -20, -15, -10, 0, 5, 7 or 10 dBm.
Definition: CC1101.cpp:601
int16_t variablePacketLengthMode(uint8_t maxLen=RADIOLIB_CC1101_MAX_PACKET_LENGTH)
Set modem in variable packet length mode.
Definition: CC1101.cpp:856
void setDirectAction(void(*func)(void))
Set interrupt service routine function to call when data bit is receveid in direct mode.
Definition: CC1101.cpp:1006
uint8_t getLQI() const
Gets LQI (Link Quality Indicator) of the last received packet.
Definition: CC1101.cpp:820
void setRfSwitchPins(uint32_t rxEn, uint32_t txEn)
Some modules contain external RF switch controlled by pins. This function gives RadioLib control over...
Definition: CC1101.cpp:973
int16_t setCrcFiltering(bool enable=true)
Enable CRC filtering and generation.
Definition: CC1101.cpp:884
CC1101(Module *module)
Default constructor.
Definition: CC1101.cpp:5
int16_t setNodeAddress(uint8_t nodeAddr, uint8_t numBroadcastAddrs=0)
Sets node and broadcast addresses. Calling this method will also enable address filtering.
Definition: CC1101.cpp:747
int16_t enableSyncWordFiltering(uint8_t maxErrBits=0, bool requireCarrierSense=false)
Enable sync word filtering and generation.
Definition: CC1101.cpp:860
int16_t standby() override
Sets the module to standby mode.
Definition: CC1101.cpp:164
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: CC1101.cpp:977
uint8_t randomByte()
Get one truly random byte from RSSI noise.
Definition: CC1101.cpp:981
int16_t startTransmit(const char *str, uint8_t addr=0)
Interrupt-driven Arduino String transmit method. Unlike the standard transmit method,...
Definition: PhysicalLayer.cpp:145
int16_t setFrequency(float freq)
Sets carrier frequency. Allowed values are in bands 300.0 to 348.0 MHz, 387.0 to 464....
Definition: CC1101.cpp:482
int16_t disableAddressFiltering()
Disables address filtering. Calling this method will also erase previously set addresses.
Definition: CC1101.cpp:758
void setGdo0Action(void(*func)(void), uint32_t dir)
Sets interrupt service routine to call when GDO0 activates.
Definition: CC1101.cpp:236
int16_t receiveDirectAsync()
Starts asynchronous direct mode reception.
Definition: CC1101.cpp:212
int16_t setBitRate(float br)
Sets bit rate. Allowed values range from 0.025 to 600.0 kbps.
Definition: CC1101.cpp:508
int16_t receiveDirect() override
Starts direct mode reception.
Definition: CC1101.cpp:208
int16_t setEncoding(uint8_t encoding) override
Sets transmission encoding. Allowed values are RADIOLIB_ENCODING_NRZ, RADIOLIB_ENCODING_MANCHESTER,...
Definition: CC1101.cpp:949
void clearGdo0Action()
Clears interrupt service routine to call when GDO0 activates.
Definition: CC1101.cpp:240
virtual int16_t receive(uint8_t *data, size_t len)
Binary receive method. Must be implemented in module class.
Definition: PhysicalLayer.cpp:112
int16_t getFrequencyDeviation(float *freqDev)
Gets frequency deviation.
Definition: CC1101.cpp:576
void clearGdo2Action()
Clears interrupt service routine to call when GDO0 activates.
Definition: CC1101.cpp:252
int16_t fixedPacketLengthMode(uint8_t len=RADIOLIB_CC1101_MAX_PACKET_LENGTH)
Set modem in fixed packet length mode.
Definition: CC1101.cpp:846
void setGdo2Action(void(*func)(void), uint32_t dir)
Sets interrupt service routine to call when GDO2 activates.
Definition: CC1101.cpp:244
int16_t begin(float freq=RADIOLIB_CC1101_DEFAULT_FREQ, float br=RADIOLIB_CC1101_DEFAULT_BR, float freqDev=RADIOLIB_CC1101_DEFAULT_FREQDEV, float rxBw=RADIOLIB_CC1101_DEFAULT_RXBW, int8_t pwr=RADIOLIB_CC1101_DEFAULT_POWER, uint8_t preambleLength=RADIOLIB_CC1101_DEFAULT_PREAMBLELEN)
Initialization method.
Definition: CC1101.cpp:13
int16_t setDataShaping(uint8_t sh) override
Sets Gaussian filter bandwidth-time product that will be used for data shaping. Allowed value is RADI...
Definition: CC1101.cpp:930
int16_t setPreambleLength(uint8_t preambleLength, uint8_t qualityThreshold)
Sets preamble length.
Definition: CC1101.cpp:705
bool getPromiscuousMode()
Get whether the modem is in promiscuous mode: no packet filtering (e.g., no preamble,...
Definition: CC1101.cpp:926
int16_t transmitDirectAsync(uint32_t frf=0)
Starts asynchronous direct mode transmission.
Definition: CC1101.cpp:182
int16_t finishTransmit() override
Clean up after transmission is done.
Definition: CC1101.cpp:350
int16_t startReceive()
Interrupt-driven receive method. GDO0 will be activated when full packet is received.
Definition: CC1101.cpp:361
int16_t setOOK(bool enableOOK)
Enables/disables OOK modulation instead of FSK.
Definition: CC1101.cpp:768
Implements all common low-level methods to control the wireless module. Every module class contains o...
Definition: Module.h:28
static const size_t RFSWITCH_MAX_PINS
The maximum number of pins supported by the RF switch code.
Definition: Module.h:39
Provides common interface for protocols that run on LoRa/FSK modules, such as RTTY or LoRaWAN....
Definition: PhysicalLayer.h:15
virtual int16_t readData(uint8_t *data, size_t len)
Reads data that was received after calling startReceive method.
Definition: PhysicalLayer.cpp:205
int16_t transmit(const char *str, uint8_t addr=0)
C-string transmit method.
Definition: PhysicalLayer.cpp:52
int16_t startTransmit(const char *str, uint8_t addr=0)
Interrupt-driven Arduino String transmit method. Unlike the standard transmit method,...
Definition: PhysicalLayer.cpp:145
virtual int16_t receive(uint8_t *data, size_t len)
Binary receive method. Must be implemented in module class.
Definition: PhysicalLayer.cpp:112