libukhasnet-rfm69
An RFM69 library maintained for UKHASnet
ukhasnet-rfm69.h
Go to the documentation of this file.
1 
9 #ifndef __RFM69_H__
10 #define __RFM69_H__
11 
12 #include <stdint.h>
13 #include <stdbool.h>
14 
15 /* Size of a register in the RFM */
16 typedef uint8_t rfm_reg_t;
17 
18 /* Status codes for return values from library functions */
19 typedef enum rfm_status_t { RFM_OK, RFM_FAIL, RFM_TIMEOUT } rfm_status_t;
20 
21 /* Write commands to the RFM have this bit set */
22 #define RFM69_SPI_WRITE_MASK 0x80
23 
24 /*
25  * This is the maximum message length that can be supported by this library.
26  * Limited by the single message length octet in the header.
27  * Yes, 255 is correct even though the FIFO size in the RF22 is only
28  * 64 octets. We use interrupts to refill the Tx FIFO during transmission
29  * and to empty theRx FIFO during reception
30  * Can be pre-defined to a smaller size (to save SRAM) prior to including
31  * this header
32  */
33 #define RFM69_MAX_MESSAGE_LEN 64
34 
35 /* Max number of octets the RFM69 FIFO can hold */
36 #define RFM69_FIFO_SIZE 64
37 
38 #define RFM69_MODE_SLEEP 0x00 /* 0.1uA */
39 #define RFM69_MODE_STDBY 0x04 /* 1.25mA */
40 #define RFM69_MODE_RX 0x10 /* 16mA */
41 #define RFM69_MODE_TX 0x0c /* >33mA */
42 
43 /*
44  * These values we set for FIFO thresholds are actually the same as the
45  * POR values
46  */
47 #define RF22_TXFFAEM_THRESHOLD 4
48 #define RF22_RXFFAFULL_THRESHOLD 55
49 
50 /* Register names */
51 #define RFM69_REG_00_FIFO 0x00
52 #define RFM69_REG_01_OPMODE 0x01
53 #define RFM69_REG_02_DATA_MODUL 0x02
54 #define RFM69_REG_03_BITRATE_MSB 0x03
55 #define RFM69_REG_04_BITRATE_LSB 0x04
56 #define RFM69_REG_05_FDEV_MSB 0x05
57 #define RFM69_REG_06_FDEV_LSB 0x06
58 #define RFM69_REG_07_FRF_MSB 0x07
59 #define RFM69_REG_08_FRF_MID 0x08
60 #define RFM69_REG_09_FRF_LSB 0x09
61 #define RFM69_REG_0A_OSC1 0x0A
62 #define RFM69_REG_0B_AFC_CTRL 0x0B
63 #define RFM69_REG_0D_LISTEN1 0x0D
64 #define RFM69_REG_0E_LISTEN2 0x0E
65 #define RFM69_REG_0F_LISTEN3 0x0F
66 #define RFM69_REG_10_VERSION 0x10
67 #define RFM69_REG_11_PA_LEVEL 0x11
68 #define RFM69_REG_12_PA_RAMP 0x12
69 #define RFM69_REG_13_OCP 0x13
70 #define RFM69_REG_18_LNA 0x18
71 #define RFM69_REG_19_RX_BW 0x19
72 #define RFM69_REG_1A_AFC_BW 0x1A
73 #define RFM69_REG_1B_OOK_PEAK 0x1B
74 #define RFM69_REG_1C_OOK_AVG 0x1C
75 #define RFM69_REG_1D_OOF_FIX 0x1D
76 #define RFM69_REG_1E_AFC_FEI 0x1E
77 #define RFM69_REG_1F_AFC_MSB 0x1F
78 #define RFM69_REG_20_AFC_LSB 0x20
79 #define RFM69_REG_21_FEI_MSB 0x21
80 #define RFM69_REG_22_FEI_LSB 0x22
81 #define RFM69_REG_23_RSSI_CONFIG 0x23
82 #define RFM69_REG_24_RSSI_VALUE 0x24
83 #define RFM69_REG_25_DIO_MAPPING1 0x25
84 #define RFM69_REG_26_DIO_MAPPING2 0x26
85 #define RFM69_REG_27_IRQ_FLAGS1 0x27
86 #define RFM69_REG_28_IRQ_FLAGS2 0x28
87 #define RFM69_REG_29_RSSI_THRESHOLD 0x29
88 #define RFM69_REG_2A_RX_TIMEOUT1 0x2A
89 #define RFM69_REG_2B_RX_TIMEOUT2 0x2B
90 #define RFM69_REG_2C_PREAMBLE_MSB 0x2C
91 #define RFM69_REG_2D_PREAMBLE_LSB 0x2D
92 #define RFM69_REG_2E_SYNC_CONFIG 0x2E
93 #define RFM69_REG_2F_SYNCVALUE1 0x2F
94 #define RFM69_REG_30_SYNCVALUE2 0x30
95 /* Sync values 1-8 go here */
96 #define RFM69_REG_37_PACKET_CONFIG1 0x37
97 #define RFM69_REG_38_PAYLOAD_LENGTH 0x38
98 /* Node address, broadcast address go here */
99 #define RFM69_REG_3B_AUTOMODES 0x3B
100 #define RFM69_REG_3C_FIFO_THRESHOLD 0x3C
101 #define RFM69_REG_3D_PACKET_CONFIG2 0x3D
102 /* AES Key 1-16 go here */
103 #define RFM69_REG_4E_TEMP1 0x4E
104 #define RFM69_REG_4F_TEMP2 0x4F
105 #define RFM69_REG_58_TEST_LNA 0x58
106 #define RFM69_REG_5A_TEST_PA1 0x5A
107 #define RFM69_REG_5C_TEST_PA2 0x5C
108 #define RFM69_REG_6F_TEST_DAGC 0x6F
109 #define RFM69_REG_71_TEST_AFC 0x71
110 
111 /******************************************************
112  * RF69/SX1231 bit control definition
113  ******************************************************
114  */
115 /* RegOpMode */
116 #define RF_OPMODE_SEQUENCER_OFF 0x80
117 #define RF_OPMODE_SEQUENCER_ON 0x00
118 
119 #define RF_OPMODE_LISTEN_ON 0x40
120 #define RF_OPMODE_LISTEN_OFF 0x00
121 
122 #define RF_OPMODE_LISTENABORT 0x20
123 
124 #define RF_OPMODE_SLEEP 0x00
125 #define RF_OPMODE_STANDBY 0x04
126 #define RF_OPMODE_SYNTHESIZER 0x08
127 #define RF_OPMODE_TRANSMITTER 0x0C
128 #define RF_OPMODE_RECEIVER 0x10
129 
130 /* RegDataModul */
131 #define RF_DATAMODUL_DATAMODE_PACKET 0x00
132 #define RF_DATAMODUL_DATAMODE_CONTINUOUS 0x40
133 #define RF_DATAMODUL_DATAMODE_CONTINUOUSNOBSYNC 0x60
134 
135 #define RF_DATAMODUL_MODULATIONTYPE_FSK 0x00
136 #define RF_DATAMODUL_MODULATIONTYPE_OOK 0x08
137 
138 #define RF_DATAMODUL_MODULATIONSHAPING_00 0x00
139 #define RF_DATAMODUL_MODULATIONSHAPING_01 0x01
140 #define RF_DATAMODUL_MODULATIONSHAPING_10 0x02
141 #define RF_DATAMODUL_MODULATIONSHAPING_11 0x03
142 
143 /* RegOsc1 */
144 #define RF_OSC1_RCCAL_START 0x80
145 #define RF_OSC1_RCCAL_DONE 0x40
146 
147 /* RegAfcCtrl */
148 #define RF_AFCLOWBETA_ON 0x20
149 #define RF_AFCLOWBETA_OFF 0x00
150 
151 /* RegLowBat */
152 #define RF_LOWBAT_MONITOR 0x10
153 #define RF_LOWBAT_ON 0x08
154 #define RF_LOWBAT_OFF 0x00
155 
156 #define RF_LOWBAT_TRIM_1695 0x00
157 #define RF_LOWBAT_TRIM_1764 0x01
158 #define RF_LOWBAT_TRIM_1835 0x02
159 #define RF_LOWBAT_TRIM_1905 0x03
160 #define RF_LOWBAT_TRIM_1976 0x04
161 #define RF_LOWBAT_TRIM_2045 0x05
162 #define RF_LOWBAT_TRIM_2116 0x06
163 #define RF_LOWBAT_TRIM_2185 0x07
164 
165 /* RegListen1 */
166 #define RF_LISTEN1_RESOL_64 0x50
167 #define RF_LISTEN1_RESOL_4100 0xA0
168 #define RF_LISTEN1_RESOL_262000 0xF0
169 
170 #define RF_LISTEN1_CRITERIA_RSSI 0x00
171 #define RF_LISTEN1_CRITERIA_RSSIANDSYNC 0x08
172 
173 #define RF_LISTEN1_END_00 0x00
174 #define RF_LISTEN1_END_01 0x02
175 #define RF_LISTEN1_END_10 0x04
176 
177 /* RegListen2 */
178 #define RF_LISTEN2_COEFIDLE_VALUE 0xF5
179 
180 /* RegListen3 */
181 #define RF_LISTEN3_COEFRX_VALUE 0x20
182 
183 /* RegPaLevel */
184 #define RF_PALEVEL_PA0_ON 0x80
185 #define RF_PALEVEL_PA0_OFF 0x00
186 #define RF_PALEVEL_PA1_ON 0x40
187 #define RF_PALEVEL_PA1_OFF 0x00
188 #define RF_PALEVEL_PA2_ON 0x20
189 #define RF_PALEVEL_PA2_OFF 0x00
190 
191 /* RegPaRamp */
192 #define RF_PARAMP_3400 0x00
193 #define RF_PARAMP_2000 0x01
194 #define RF_PARAMP_1000 0x02
195 #define RF_PARAMP_500 0x03
196 #define RF_PARAMP_250 0x04
197 #define RF_PARAMP_125 0x05
198 #define RF_PARAMP_100 0x06
199 #define RF_PARAMP_62 0x07
200 #define RF_PARAMP_50 0x08
201 #define RF_PARAMP_40 0x09
202 #define RF_PARAMP_31 0x0A
203 #define RF_PARAMP_25 0x0B
204 #define RF_PARAMP_20 0x0C
205 #define RF_PARAMP_15 0x0D
206 #define RF_PARAMP_12 0x0E
207 #define RF_PARAMP_10 0x0F
208 
209 /* RegOcp */
210 #define RF_OCP_OFF 0x0F
211 #define RF_OCP_ON 0x1A
212 
213 #define RF_OCP_TRIM_45 0x00
214 #define RF_OCP_TRIM_50 0x01
215 #define RF_OCP_TRIM_55 0x02
216 #define RF_OCP_TRIM_60 0x03
217 #define RF_OCP_TRIM_65 0x04
218 #define RF_OCP_TRIM_70 0x05
219 #define RF_OCP_TRIM_75 0x06
220 #define RF_OCP_TRIM_80 0x07
221 #define RF_OCP_TRIM_85 0x08
222 #define RF_OCP_TRIM_90 0x09
223 #define RF_OCP_TRIM_95 0x0A
224 #define RF_OCP_TRIM_100 0x0B
225 #define RF_OCP_TRIM_105 0x0C
226 #define RF_OCP_TRIM_110 0x0D
227 #define RF_OCP_TRIM_115 0x0E
228 #define RF_OCP_TRIM_120 0x0F
229 
230 /* RegAgcRef */
231 #define RF_AGCREF_AUTO_ON 0x40
232 #define RF_AGCREF_AUTO_OFF 0x00
233 
234 #define RF_AGCREF_LEVEL_MINUS80 0x00
235 #define RF_AGCREF_LEVEL_MINUS81 0x01
236 #define RF_AGCREF_LEVEL_MINUS82 0x02
237 #define RF_AGCREF_LEVEL_MINUS83 0x03
238 #define RF_AGCREF_LEVEL_MINUS84 0x04
239 #define RF_AGCREF_LEVEL_MINUS85 0x05
240 #define RF_AGCREF_LEVEL_MINUS86 0x06
241 #define RF_AGCREF_LEVEL_MINUS87 0x07
242 #define RF_AGCREF_LEVEL_MINUS88 0x08
243 #define RF_AGCREF_LEVEL_MINUS89 0x09
244 #define RF_AGCREF_LEVEL_MINUS90 0x0A
245 #define RF_AGCREF_LEVEL_MINUS91 0x0B
246 #define RF_AGCREF_LEVEL_MINUS92 0x0C
247 #define RF_AGCREF_LEVEL_MINUS93 0x0D
248 #define RF_AGCREF_LEVEL_MINUS94 0x0E
249 #define RF_AGCREF_LEVEL_MINUS95 0x0F
250 #define RF_AGCREF_LEVEL_MINUS96 0x10
251 #define RF_AGCREF_LEVEL_MINUS97 0x11
252 #define RF_AGCREF_LEVEL_MINUS98 0x12
253 #define RF_AGCREF_LEVEL_MINUS99 0x13
254 #define RF_AGCREF_LEVEL_MINUS100 0x14
255 #define RF_AGCREF_LEVEL_MINUS101 0x15
256 #define RF_AGCREF_LEVEL_MINUS102 0x16
257 #define RF_AGCREF_LEVEL_MINUS103 0x17
258 #define RF_AGCREF_LEVEL_MINUS104 0x18
259 #define RF_AGCREF_LEVEL_MINUS105 0x19
260 #define RF_AGCREF_LEVEL_MINUS106 0x1A
261 #define RF_AGCREF_LEVEL_MINUS107 0x1B
262 #define RF_AGCREF_LEVEL_MINUS108 0x1C
263 #define RF_AGCREF_LEVEL_MINUS109 0x1D
264 #define RF_AGCREF_LEVEL_MINUS110 0x1E
265 #define RF_AGCREF_LEVEL_MINUS111 0x1F
266 #define RF_AGCREF_LEVEL_MINUS112 0x20
267 #define RF_AGCREF_LEVEL_MINUS113 0x21
268 #define RF_AGCREF_LEVEL_MINUS114 0x22
269 #define RF_AGCREF_LEVEL_MINUS115 0x23
270 #define RF_AGCREF_LEVEL_MINUS116 0x24
271 #define RF_AGCREF_LEVEL_MINUS117 0x25
272 #define RF_AGCREF_LEVEL_MINUS118 0x26
273 #define RF_AGCREF_LEVEL_MINUS119 0x27
274 #define RF_AGCREF_LEVEL_MINUS120 0x28
275 #define RF_AGCREF_LEVEL_MINUS121 0x29
276 #define RF_AGCREF_LEVEL_MINUS122 0x2A
277 #define RF_AGCREF_LEVEL_MINUS123 0x2B
278 #define RF_AGCREF_LEVEL_MINUS124 0x2C
279 #define RF_AGCREF_LEVEL_MINUS125 0x2D
280 #define RF_AGCREF_LEVEL_MINUS126 0x2E
281 #define RF_AGCREF_LEVEL_MINUS127 0x2F
282 #define RF_AGCREF_LEVEL_MINUS128 0x30
283 #define RF_AGCREF_LEVEL_MINUS129 0x31
284 #define RF_AGCREF_LEVEL_MINUS130 0x32
285 #define RF_AGCREF_LEVEL_MINUS131 0x33
286 #define RF_AGCREF_LEVEL_MINUS132 0x34
287 #define RF_AGCREF_LEVEL_MINUS133 0x35
288 #define RF_AGCREF_LEVEL_MINUS134 0x36
289 #define RF_AGCREF_LEVEL_MINUS135 0x37
290 #define RF_AGCREF_LEVEL_MINUS136 0x38
291 #define RF_AGCREF_LEVEL_MINUS137 0x39
292 #define RF_AGCREF_LEVEL_MINUS138 0x3A
293 #define RF_AGCREF_LEVEL_MINUS139 0x3B
294 #define RF_AGCREF_LEVEL_MINUS140 0x3C
295 #define RF_AGCREF_LEVEL_MINUS141 0x3D
296 #define RF_AGCREF_LEVEL_MINUS142 0x3E
297 #define RF_AGCREF_LEVEL_MINUS143 0x3F
298 
299 /* RegAgcThresh1 */
300 #define RF_AGCTHRESH1_SNRMARGIN_000 0x00
301 #define RF_AGCTHRESH1_SNRMARGIN_001 0x20
302 #define RF_AGCTHRESH1_SNRMARGIN_010 0x40
303 #define RF_AGCTHRESH1_SNRMARGIN_011 0x60
304 #define RF_AGCTHRESH1_SNRMARGIN_100 0x80
305 #define RF_AGCTHRESH1_SNRMARGIN_101 0xA0
306 #define RF_AGCTHRESH1_SNRMARGIN_110 0xC0
307 #define RF_AGCTHRESH1_SNRMARGIN_111 0xE0
308 
309 #define RF_AGCTHRESH1_STEP1_0 0x00
310 #define RF_AGCTHRESH1_STEP1_1 0x01
311 #define RF_AGCTHRESH1_STEP1_2 0x02
312 #define RF_AGCTHRESH1_STEP1_3 0x03
313 #define RF_AGCTHRESH1_STEP1_4 0x04
314 #define RF_AGCTHRESH1_STEP1_5 0x05
315 #define RF_AGCTHRESH1_STEP1_6 0x06
316 #define RF_AGCTHRESH1_STEP1_7 0x07
317 #define RF_AGCTHRESH1_STEP1_8 0x08
318 #define RF_AGCTHRESH1_STEP1_9 0x09
319 #define RF_AGCTHRESH1_STEP1_10 0x0A
320 #define RF_AGCTHRESH1_STEP1_11 0x0B
321 #define RF_AGCTHRESH1_STEP1_12 0x0C
322 #define RF_AGCTHRESH1_STEP1_13 0x0D
323 #define RF_AGCTHRESH1_STEP1_14 0x0E
324 #define RF_AGCTHRESH1_STEP1_15 0x0F
325 #define RF_AGCTHRESH1_STEP1_16 0x10
326 #define RF_AGCTHRESH1_STEP1_17 0x11
327 #define RF_AGCTHRESH1_STEP1_18 0x12
328 #define RF_AGCTHRESH1_STEP1_19 0x13
329 #define RF_AGCTHRESH1_STEP1_20 0x14
330 #define RF_AGCTHRESH1_STEP1_21 0x15
331 #define RF_AGCTHRESH1_STEP1_22 0x16
332 #define RF_AGCTHRESH1_STEP1_23 0x17
333 #define RF_AGCTHRESH1_STEP1_24 0x18
334 #define RF_AGCTHRESH1_STEP1_25 0x19
335 #define RF_AGCTHRESH1_STEP1_26 0x1A
336 #define RF_AGCTHRESH1_STEP1_27 0x1B
337 #define RF_AGCTHRESH1_STEP1_28 0x1C
338 #define RF_AGCTHRESH1_STEP1_29 0x1D
339 #define RF_AGCTHRESH1_STEP1_30 0x1E
340 #define RF_AGCTHRESH1_STEP1_31 0x1F
341 
342 /* RegAgcThresh2 */
343 #define RF_AGCTHRESH2_STEP2_0 0x00
344 #define RF_AGCTHRESH2_STEP2_1 0x10
345 #define RF_AGCTHRESH2_STEP2_2 0x20
346 #define RF_AGCTHRESH2_STEP2_3 0x30
347 #define RF_AGCTHRESH2_STEP2_4 0x40
348 #define RF_AGCTHRESH2_STEP2_5 0x50
349 #define RF_AGCTHRESH2_STEP2_6 0x60
350 #define RF_AGCTHRESH2_STEP2_7 0x70
351 #define RF_AGCTHRESH2_STEP2_8 0x80
352 #define RF_AGCTHRESH2_STEP2_9 0x90
353 #define RF_AGCTHRESH2_STEP2_10 0xA0
354 #define RF_AGCTHRESH2_STEP2_11 0xB0
355 #define RF_AGCTHRESH2_STEP2_12 0xC0
356 #define RF_AGCTHRESH2_STEP2_13 0xD0
357 #define RF_AGCTHRESH2_STEP2_14 0xE0
358 #define RF_AGCTHRESH2_STEP2_15 0xF0
359 
360 #define RF_AGCTHRESH2_STEP3_0 0x00
361 #define RF_AGCTHRESH2_STEP3_1 0x01
362 #define RF_AGCTHRESH2_STEP3_2 0x02
363 #define RF_AGCTHRESH2_STEP3_3 0x03
364 #define RF_AGCTHRESH2_STEP3_4 0x04
365 #define RF_AGCTHRESH2_STEP3_5 0x05
366 #define RF_AGCTHRESH2_STEP3_6 0x06
367 #define RF_AGCTHRESH2_STEP3_7 0x07
368 #define RF_AGCTHRESH2_STEP3_8 0x08
369 #define RF_AGCTHRESH2_STEP3_9 0x09
370 #define RF_AGCTHRESH2_STEP3_10 0x0A
371 #define RF_AGCTHRESH2_STEP3_11 0x0B
372 #define RF_AGCTHRESH2_STEP3_12 0x0C
373 #define RF_AGCTHRESH2_STEP3_13 0x0D
374 #define RF_AGCTHRESH2_STEP3_14 0x0E
375 #define RF_AGCTHRESH2_STEP3_15 0x0F
376 
377 /* RegAgcThresh3 */
378 #define RF_AGCTHRESH3_STEP4_0 0x00
379 #define RF_AGCTHRESH3_STEP4_1 0x10
380 #define RF_AGCTHRESH3_STEP4_2 0x20
381 #define RF_AGCTHRESH3_STEP4_3 0x30
382 #define RF_AGCTHRESH3_STEP4_4 0x40
383 #define RF_AGCTHRESH3_STEP4_5 0x50
384 #define RF_AGCTHRESH3_STEP4_6 0x60
385 #define RF_AGCTHRESH3_STEP4_7 0x70
386 #define RF_AGCTHRESH3_STEP4_8 0x80
387 #define RF_AGCTHRESH3_STEP4_9 0x90
388 #define RF_AGCTHRESH3_STEP4_10 0xA0
389 #define RF_AGCTHRESH3_STEP4_11 0xB0
390 #define RF_AGCTHRESH3_STEP4_12 0xC0
391 #define RF_AGCTHRESH3_STEP4_13 0xD0
392 #define RF_AGCTHRESH3_STEP4_14 0xE0
393 #define RF_AGCTHRESH3_STEP4_15 0xF0
394 
395 #define RF_AGCTHRESH3_STEP5_0 0x00
396 #define RF_AGCTHRESH3_STEP5_1 0x01
397 #define RF_AGCTHRESH3_STEP5_2 0x02
398 #define RF_AGCTHRESH3_STEP5_3 0x03
399 #define RF_AGCTHRESH3_STEP5_4 0x04
400 #define RF_AGCTHRESH3_STEP5_5 0x05
401 #define RF_AGCTHRESH3_STEP5_6 0x06
402 #define RF_AGCTHRESH3_STEP5_7 0x07
403 #define RF_AGCTHRES33_STEP5_8 0x08
404 #define RF_AGCTHRESH3_STEP5_9 0x09
405 #define RF_AGCTHRESH3_STEP5_10 0x0A
406 #define RF_AGCTHRESH3_STEP5_11 0x0B
407 #define RF_AGCTHRESH3_STEP5_12 0x0C
408 #define RF_AGCTHRESH3_STEP5_13 0x0D
409 #define RF_AGCTHRESH3_STEP5_14 0x0E
410 #define RF_AGCTHRESH3_STEP5_15 0x0F
411 
412 /* RegLna */
413 #define RF_LNA_ZIN_50 0x00
414 #define RF_LNA_ZIN_200 0x80
415 
416 #define RF_LNA_LOWPOWER_OFF 0x00
417 #define RF_LNA_LOWPOWER_ON 0x40
418 
419 #define RF_LNA_CURRENTGAIN 0x38
420 
421 #define RF_LNA_GAINSELECT_AUTO 0x00
422 #define RF_LNA_GAINSELECT_MAX 0x01
423 #define RF_LNA_GAINSELECT_MAXMINUS6 0x02
424 #define RF_LNA_GAINSELECT_MAXMINUS12 0x03
425 #define RF_LNA_GAINSELECT_MAXMINUS24 0x04
426 #define RF_LNA_GAINSELECT_MAXMINUS36 0x05
427 #define RF_LNA_GAINSELECT_MAXMINUS48 0x06
428 
429 /* RegRxBw */
430 #define RF_RXBW_DCCFREQ_000 0x00
431 #define RF_RXBW_DCCFREQ_001 0x20
432 #define RF_RXBW_DCCFREQ_010 0x40
433 #define RF_RXBW_DCCFREQ_011 0x60
434 #define RF_RXBW_DCCFREQ_100 0x80
435 #define RF_RXBW_DCCFREQ_101 0xA0
436 #define RF_RXBW_DCCFREQ_110 0xC0
437 #define RF_RXBW_DCCFREQ_111 0xE0
438 
439 #define RF_RXBW_MANT_16 0x00
440 #define RF_RXBW_MANT_20 0x08
441 #define RF_RXBW_MANT_24 0x10
442 
443 #define RF_RXBW_EXP_0 0x00
444 #define RF_RXBW_EXP_1 0x01
445 #define RF_RXBW_EXP_2 0x02
446 #define RF_RXBW_EXP_3 0x03
447 #define RF_RXBW_EXP_4 0x04
448 #define RF_RXBW_EXP_5 0x05
449 #define RF_RXBW_EXP_6 0x06
450 #define RF_RXBW_EXP_7 0x07
451 
452 /* RegAfcBw */
453 #define RF_AFCBW_DCCFREQAFC_000 0x00
454 #define RF_AFCBW_DCCFREQAFC_001 0x20
455 #define RF_AFCBW_DCCFREQAFC_010 0x40
456 #define RF_AFCBW_DCCFREQAFC_011 0x60
457 #define RF_AFCBW_DCCFREQAFC_100 0x80
458 #define RF_AFCBW_DCCFREQAFC_101 0xA0
459 #define RF_AFCBW_DCCFREQAFC_110 0xC0
460 #define RF_AFCBW_DCCFREQAFC_111 0xE0
461 
462 #define RF_AFCBW_MANTAFC_16 0x00
463 #define RF_AFCBW_MANTAFC_20 0x08
464 #define RF_AFCBW_MANTAFC_24 0x10
465 
466 #define RF_AFCBW_EXPAFC_0 0x00
467 #define RF_AFCBW_EXPAFC_1 0x01
468 #define RF_AFCBW_EXPAFC_2 0x02
469 #define RF_AFCBW_EXPAFC_3 0x03
470 #define RF_AFCBW_EXPAFC_4 0x04
471 #define RF_AFCBW_EXPAFC_5 0x05
472 #define RF_AFCBW_EXPAFC_6 0x06
473 #define RF_AFCBW_EXPAFC_7 0x07
474 
475 /* RegOokPeak */
476 #define RF_OOKPEAK_THRESHTYPE_FIXED 0x00
477 #define RF_OOKPEAK_THRESHTYPE_PEAK 0x40
478 #define RF_OOKPEAK_THRESHTYPE_AVERAGE 0x80
479 
480 #define RF_OOKPEAK_PEAKTHRESHSTEP_000 0x00
481 #define RF_OOKPEAK_PEAKTHRESHSTEP_001 0x08
482 #define RF_OOKPEAK_PEAKTHRESHSTEP_010 0x10
483 #define RF_OOKPEAK_PEAKTHRESHSTEP_011 0x18
484 #define RF_OOKPEAK_PEAKTHRESHSTEP_100 0x20
485 #define RF_OOKPEAK_PEAKTHRESHSTEP_101 0x28
486 #define RF_OOKPEAK_PEAKTHRESHSTEP_110 0x30
487 #define RF_OOKPEAK_PEAKTHRESHSTEP_111 0x38
488 
489 #define RF_OOKPEAK_PEAKTHRESHDEC_000 0x00
490 #define RF_OOKPEAK_PEAKTHRESHDEC_001 0x01
491 #define RF_OOKPEAK_PEAKTHRESHDEC_010 0x02
492 #define RF_OOKPEAK_PEAKTHRESHDEC_011 0x03
493 #define RF_OOKPEAK_PEAKTHRESHDEC_100 0x04
494 #define RF_OOKPEAK_PEAKTHRESHDEC_101 0x05
495 #define RF_OOKPEAK_PEAKTHRESHDEC_110 0x06
496 #define RF_OOKPEAK_PEAKTHRESHDEC_111 0x07
497 
498 /* RegOokAvg */
499 #define RF_OOKAVG_AVERAGETHRESHFILT_00 0x00
500 #define RF_OOKAVG_AVERAGETHRESHFILT_01 0x40
501 #define RF_OOKAVG_AVERAGETHRESHFILT_10 0x80
502 #define RF_OOKAVG_AVERAGETHRESHFILT_11 0xC0
503 
504 /* RegOokFix */
505 #define RF_OOKFIX_FIXEDTHRESH_VALUE 0x06
506 
507 /* RegAfcFei */
508 #define RF_AFCFEI_FEI_DONE 0x40
509 #define RF_AFCFEI_FEI_START 0x20
510 #define RF_AFCFEI_AFC_DONE 0x10
511 #define RF_AFCFEI_AFCAUTOCLEAR_ON 0x08
512 #define RF_AFCFEI_AFCAUTOCLEAR_OFF 0x00
513 
514 #define RF_AFCFEI_AFCAUTO_ON 0x04
515 #define RF_AFCFEI_AFCAUTO_OFF 0x00
516 
517 #define RF_AFCFEI_AFC_CLEAR 0x02
518 #define RF_AFCFEI_AFC_START 0x01
519 
520 /* RegRssiConfig */
521 #define RF_RSSI_FASTRX_ON 0x08
522 #define RF_RSSI_FASTRX_OFF 0x00
523 #define RF_RSSI_DONE 0x02
524 #define RF_RSSI_START 0x01
525 
526 /* RegDioMapping1 */
527 #define RF_DIOMAPPING1_DIO0_00 0x00
528 #define RF_DIOMAPPING1_DIO0_01 0x40
529 #define RF_DIOMAPPING1_DIO0_10 0x80
530 #define RF_DIOMAPPING1_DIO0_11 0xC0
531 
532 #define RF_DIOMAPPING1_DIO1_00 0x00
533 #define RF_DIOMAPPING1_DIO1_01 0x10
534 #define RF_DIOMAPPING1_DIO1_10 0x20
535 #define RF_DIOMAPPING1_DIO1_11 0x30
536 
537 #define RF_DIOMAPPING1_DIO2_00 0x00
538 #define RF_DIOMAPPING1_DIO2_01 0x04
539 #define RF_DIOMAPPING1_DIO2_10 0x08
540 #define RF_DIOMAPPING1_DIO2_11 0x0C
541 
542 #define RF_DIOMAPPING1_DIO3_00 0x00
543 #define RF_DIOMAPPING1_DIO3_01 0x01
544 #define RF_DIOMAPPING1_DIO3_10 0x02
545 #define RF_DIOMAPPING1_DIO3_11 0x03
546 
547 /* RegDioMapping2 */
548 #define RF_DIOMAPPING2_DIO4_00 0x00
549 #define RF_DIOMAPPING2_DIO4_01 0x40
550 #define RF_DIOMAPPING2_DIO4_10 0x80
551 #define RF_DIOMAPPING2_DIO4_11 0xC0
552 
553 #define RF_DIOMAPPING2_DIO5_00 0x00
554 #define RF_DIOMAPPING2_DIO5_01 0x10
555 #define RF_DIOMAPPING2_DIO5_10 0x20
556 #define RF_DIOMAPPING2_DIO5_11 0x30
557 
558 #define RF_DIOMAPPING2_CLKOUT_32 0x00
559 #define RF_DIOMAPPING2_CLKOUT_16 0x01
560 #define RF_DIOMAPPING2_CLKOUT_8 0x02
561 #define RF_DIOMAPPING2_CLKOUT_4 0x03
562 #define RF_DIOMAPPING2_CLKOUT_2 0x04
563 #define RF_DIOMAPPING2_CLKOUT_1 0x05
564 #define RF_DIOMAPPING2_CLKOUT_RC 0x06
565 #define RF_DIOMAPPING2_CLKOUT_OFF 0x07
566 
567 /* RegIrqFlags1 */
568 #define RF_IRQFLAGS1_MODEREADY 0x80
569 #define RF_IRQFLAGS1_RXREADY 0x40
570 #define RF_IRQFLAGS1_TXREADY 0x20
571 #define RF_IRQFLAGS1_PLLLOCK 0x10
572 #define RF_IRQFLAGS1_RSSI 0x08
573 #define RF_IRQFLAGS1_TIMEOUT 0x04
574 #define RF_IRQFLAGS1_AUTOMODE 0x02
575 #define RF_IRQFLAGS1_SYNCADDRESSMATCH 0x01
576 
577 /* RegIrqFlags2 */
578 #define RF_IRQFLAGS2_FIFOFULL 0x80
579 #define RF_IRQFLAGS2_FIFONOTEMPTY 0x40
580 #define RF_IRQFLAGS2_FIFOLEVEL 0x20
581 #define RF_IRQFLAGS2_FIFOOVERRUN 0x10
582 #define RF_IRQFLAGS2_PACKETSENT 0x08
583 #define RF_IRQFLAGS2_PAYLOADREADY 0x04
584 #define RF_IRQFLAGS2_CRCOK 0x02
585 #define RF_IRQFLAGS2_LOWBAT 0x01
586 
587 /* RegRssiThresh */
588 #define RF_RSSITHRESH_VALUE 0xE4
589 
590 /* RegRxTimeout1 */
591 #define RF_RXTIMEOUT1_RXSTART_VALUE 0x00
592 
593 /* RegRxTimeout2 */
594 #define RF_RXTIMEOUT2_RSSITHRESH_VALUE 0x00
595 
596 /* RegPreamble */
597 #define RF_PREAMBLESIZE_MSB_VALUE 0x00
598 #define RF_PREAMBLESIZE_LSB_VALUE 0x03
599 
600 /* RegSyncConfig */
601 #define RF_SYNC_ON 0x80
602 #define RF_SYNC_OFF 0x00
603 
604 #define RF_SYNC_FIFOFILL_AUTO 0x00
605 #define RF_SYNC_FIFOFILL_MANUAL 0x40
606 
607 #define RF_SYNC_SIZE_1 0x00
608 #define RF_SYNC_SIZE_2 0x08
609 #define RF_SYNC_SIZE_3 0x10
610 #define RF_SYNC_SIZE_4 0x18
611 #define RF_SYNC_SIZE_5 0x20
612 #define RF_SYNC_SIZE_6 0x28
613 #define RF_SYNC_SIZE_7 0x30
614 #define RF_SYNC_SIZE_8 0x38
615 
616 #define RF_SYNC_TOL_0 0x00
617 #define RF_SYNC_TOL_1 0x01
618 #define RF_SYNC_TOL_2 0x02
619 #define RF_SYNC_TOL_3 0x03
620 #define RF_SYNC_TOL_4 0x04
621 #define RF_SYNC_TOL_5 0x05
622 #define RF_SYNC_TOL_6 0x06
623 #define RF_SYNC_TOL_7 0x07
624 
625 /* RegSyncValue1-8 */
626 #define RF_SYNC_BYTE1_VALUE 0x00
627 #define RF_SYNC_BYTE2_VALUE 0x00
628 #define RF_SYNC_BYTE3_VALUE 0x00
629 #define RF_SYNC_BYTE4_VALUE 0x00
630 #define RF_SYNC_BYTE5_VALUE 0x00
631 #define RF_SYNC_BYTE6_VALUE 0x00
632 #define RF_SYNC_BYTE7_VALUE 0x00
633 #define RF_SYNC_BYTE8_VALUE 0x00
634 
635 /* RegPacketConfig1 */
636 #define RF_PACKET1_FORMAT_FIXED 0x00
637 #define RF_PACKET1_FORMAT_VARIABLE 0x80
638 
639 #define RF_PACKET1_DCFREE_OFF 0x00
640 #define RF_PACKET1_DCFREE_MANCHESTER 0x20
641 #define RF_PACKET1_DCFREE_WHITENING 0x40
642 
643 #define RF_PACKET1_CRC_ON 0x10
644 #define RF_PACKET1_CRC_OFF 0x00
645 
646 #define RF_PACKET1_CRCAUTOCLEAR_ON 0x00
647 #define RF_PACKET1_CRCAUTOCLEAR_OFF 0x08
648 
649 #define RF_PACKET1_ADRSFILTERING_OFF 0x00
650 #define RF_PACKET1_ADRSFILTERING_NODE 0x02
651 #define RF_PACKET1_ADRSFILTERING_NODEBROADCAST 0x04
652 
653 /* RegPayloadLength */
654 #define RF_PAYLOADLENGTH_VALUE 0x40
655 
656 /* RegBroadcastAdrs */
657 #define RF_BROADCASTADDRESS_VALUE 0x00
658 
659 /* RegAutoModes */
660 #define RF_AUTOMODES_ENTER_OFF 0x00
661 #define RF_AUTOMODES_ENTER_FIFONOTEMPTY 0x20
662 #define RF_AUTOMODES_ENTER_FIFOLEVEL 0x40
663 #define RF_AUTOMODES_ENTER_CRCOK 0x60
664 #define RF_AUTOMODES_ENTER_PAYLOADREADY 0x80
665 #define RF_AUTOMODES_ENTER_SYNCADRSMATCH 0xA0
666 #define RF_AUTOMODES_ENTER_PACKETSENT 0xC0
667 #define RF_AUTOMODES_ENTER_FIFOEMPTY 0xE0
668 
669 #define RF_AUTOMODES_EXIT_OFF 0x00
670 #define RF_AUTOMODES_EXIT_FIFOEMPTY 0x04
671 #define RF_AUTOMODES_EXIT_FIFOLEVEL 0x08
672 #define RF_AUTOMODES_EXIT_CRCOK 0x0C
673 #define RF_AUTOMODES_EXIT_PAYLOADREADY 0x10
674 #define RF_AUTOMODES_EXIT_SYNCADRSMATCH 0x14
675 #define RF_AUTOMODES_EXIT_PACKETSENT 0x18
676 #define RF_AUTOMODES_EXIT_RXTIMEOUT 0x1C
677 
678 #define RF_AUTOMODES_INTERMEDIATE_SLEEP 0x00
679 #define RF_AUTOMODES_INTERMEDIATE_STANDBY 0x01
680 #define RF_AUTOMODES_INTERMEDIATE_RECEIVER 0x02
681 #define RF_AUTOMODES_INTERMEDIATE_TRANSMITTER 0x03
682 
683 /* RegFifoThresh */
684 #define RF_FIFOTHRESH_TXSTART_FIFOTHRESH 0x00
685 #define RF_FIFOTHRESH_TXSTART_FIFONOTEMPTY 0x80
686 
687 #define RF_FIFOTHRESH_VALUE 0x0F
688 
689 /* RegPacketConfig2 */
690 #define RF_PACKET2_RXRESTARTDELAY_1BIT 0x00
691 #define RF_PACKET2_RXRESTARTDELAY_2BITS 0x10
692 #define RF_PACKET2_RXRESTARTDELAY_4BITS 0x20
693 #define RF_PACKET2_RXRESTARTDELAY_8BITS 0x30
694 #define RF_PACKET2_RXRESTARTDELAY_16BITS 0x40
695 #define RF_PACKET2_RXRESTARTDELAY_32BITS 0x50
696 #define RF_PACKET2_RXRESTARTDELAY_64BITS 0x60
697 #define RF_PACKET2_RXRESTARTDELAY_128BITS 0x70
698 #define RF_PACKET2_RXRESTARTDELAY_256BITS 0x80
699 #define RF_PACKET2_RXRESTARTDELAY_512BITS 0x90
700 #define RF_PACKET2_RXRESTARTDELAY_1024BITS 0xA0
701 #define RF_PACKET2_RXRESTARTDELAY_2048BITS 0xB0
702 #define RF_PACKET2_RXRESTARTDELAY_NONE 0xC0
703 #define RF_PACKET2_RXRESTART 0x04
704 
705 #define RF_PACKET2_AUTORXRESTART_ON 0x02
706 #define RF_PACKET2_AUTORXRESTART_OFF 0x00
707 
708 #define RF_PACKET2_AES_ON 0x01
709 #define RF_PACKET2_AES_OFF 0x00
710 
711 /* RegAesKey1-16 */
712 #define RF_AESKEY1_VALUE 0x00
713 #define RF_AESKEY2_VALUE 0x00
714 #define RF_AESKEY3_VALUE 0x00
715 #define RF_AESKEY4_VALUE 0x00
716 #define RF_AESKEY5_VALUE 0x00
717 #define RF_AESKEY6_VALUE 0x00
718 #define RF_AESKEY7_VALUE 0x00
719 #define RF_AESKEY8_VALUE 0x00
720 #define RF_AESKEY9_VALUE 0x00
721 #define RF_AESKEY10_VALUE 0x00
722 #define RF_AESKEY11_VALUE 0x00
723 #define RF_AESKEY12_VALUE 0x00
724 #define RF_AESKEY13_VALUE 0x00
725 #define RF_AESKEY14_VALUE 0x00
726 #define RF_AESKEY15_VALUE 0x00
727 #define RF_AESKEY16_VALUE 0x00
728 
729 /* RegTemp1 */
730 #define RF_TEMP1_MEAS_START 0x08
731 #define RF_TEMP1_MEAS_RUNNING 0x04
732 #define RF_TEMP1_ADCLOWPOWER_ON 0x01
733 #define RF_TEMP1_ADCLOWPOWER_OFF 0x00
734 
735 /* RegTestDagc */
736 #define RF_DAGC_NORMAL 0x00
737 #define RF_DAGC_IMPROVED_LOWBETA1 0x20
738 #define RF_DAGC_IMPROVED_LOWBETA0 0x30
739 
740 /* RegTestLna */
741 #define RF_TESTLNA_NORMAL 0x1B
742 #define RF_TESTLNA_SENSITIVE 0x2D
743 
744 /* Public prototypes here */
745 rfm_status_t rf69_init(void);
746 rfm_status_t rf69_read_temp(int8_t* temperature);
747 rfm_status_t rf69_receive(rfm_reg_t* buf, rfm_reg_t* len, int16_t* lastrssi,
748  bool* rfm_packet_waiting);
749 rfm_status_t rf69_send(const rfm_reg_t* data, uint8_t len,
750  const uint8_t power);
751 rfm_status_t rf69_set_mode(const rfm_reg_t newMode);
752 
753 /* Private functions */
754 rfm_status_t _rf69_read(const rfm_reg_t reg, rfm_reg_t* result);
755 rfm_status_t _rf69_write(const rfm_reg_t reg, const rfm_reg_t val);
756 rfm_status_t _rf69_burst_read(const rfm_reg_t reg, rfm_reg_t* dest,
757  uint8_t len);
758 rfm_status_t _rf69_burst_write(rfm_reg_t reg, const rfm_reg_t* src,
759  uint8_t len);
760 rfm_status_t _rf69_fifo_write(const rfm_reg_t* src, uint8_t len);
761 rfm_status_t _rf69_clear_fifo(void);
762 rfm_status_t _rf69_sample_rssi(int16_t* rssi);
763 
769 rfm_status_t spi_init(void);
770 rfm_status_t spi_exchange_single(const rfm_reg_t out, rfm_reg_t* in);
771 rfm_status_t spi_ss_assert(void);
772 rfm_status_t spi_ss_deassert(void);
773 
774 #endif /* __RFM69_H__ */
775 
rfm_status_t _rf69_fifo_write(const rfm_reg_t *src, uint8_t len)
Definition: ukhasnet-rfm69.c:174
rfm_status_t rf69_init(void)
Definition: ukhasnet-rfm69.c:41
rfm_status_t rf69_send(const rfm_reg_t *data, uint8_t len, const uint8_t power)
Definition: ukhasnet-rfm69.c:258
rfm_status_t _rf69_write(const rfm_reg_t reg, const rfm_reg_t val)
Definition: ukhasnet-rfm69.c:98
rfm_status_t _rf69_sample_rssi(int16_t *rssi)
Definition: ukhasnet-rfm69.c:411
rfm_status_t _rf69_read(const rfm_reg_t reg, rfm_reg_t *result)
Definition: ukhasnet-rfm69.c:73
rfm_status_t _rf69_burst_read(const rfm_reg_t reg, rfm_reg_t *dest, uint8_t len)
Definition: ukhasnet-rfm69.c:123
rfm_status_t spi_init(void)
rfm_status_t _rf69_burst_write(rfm_reg_t reg, const rfm_reg_t *src, uint8_t len)
Definition: ukhasnet-rfm69.c:150
rfm_status_t rf69_receive(rfm_reg_t *buf, rfm_reg_t *len, int16_t *lastrssi, bool *rfm_packet_waiting)
Definition: ukhasnet-rfm69.c:221
rfm_status_t rf69_set_mode(const rfm_reg_t newMode)
Definition: ukhasnet-rfm69.c:202
rfm_status_t rf69_read_temp(int8_t *temperature)
Definition: ukhasnet-rfm69.c:352
rfm_status_t _rf69_clear_fifo(void)
Definition: ukhasnet-rfm69.c:336