RFM73library
rfm73.h
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 //***************************************************************************//
14 //
15 // COPYRIGHT NOTICE (zlib license)
16 //
17 // Loosely based on the example application provided by HopeRF
18 //
19 // (c) Wouter van Ooijen - wouter@voti.nl
20 //
21 // This software is provided 'as-is', without any express or implied
22 // warranty. In no event will the authors be held liable for any damages
23 // arising from the use of this software.
24 //
25 // Permission is granted to anyone to use this software for any purpose,
26 // including commercial applications, and to alter it and redistribute it
27 // freely, subject to the following restrictions:
28 //
29 // 1. The origin of this software must not be misrepresented; you must not
30 // claim that you wrote the original software. If you use this software
31 // in a product, an acknowledgment in the product documentation would be
32 // appreciated but is not required.
33 // 2. Altered source versions must be plainly marked as such, and must not be
34 // misrepresented as being the original software.
35 // 3. This notice may not be removed or altered from any source distribution.
36 //
37 //***************************************************************************//
38 
39 #ifndef _RFM73_H_
40 #define _RFM73_H_
41 
42 //***************************************************************************//
43 //
65 //
66 //***************************************************************************//
67 
68 //***************************************************************************//
69 //
82 //
83 //***************************************************************************//
84 
85 
87 //
89 #define RFM73_LIB_VERSION "V1.04 (2013-06-14)"
90 
92 //
94 #define RFM73_MAX_PACKET_LEN 32
95 
97 //
99 typedef unsigned char rfm73_buffer [ RFM73_MAX_PACKET_LEN ];
100 
101 
102 //***************************************************************************//
103 //
104 // RFM73 SPI commands
105 //
106 //***************************************************************************//
107 
110 
112 #define RFM73_CMD_R_RX_PAYLOAD 0x61
113 
115 #define RFM73_CMD_W_TX_PAYLOAD 0xA0
116 
118 #define RFM73_CMD_FLUSH_TX 0xE1
119 
121 #define RFM73_CMD_FLUSH_RX 0xE2
122 
124 #define RFM73_CMD_REUSE_TX_PL 0xE3
125 
127 #define RFM73_CMD_W_TX_PAYLOAD_NOACK 0xB0
128 
130 #define RFM73_CMD_W_ACK_PAYLOAD 0xA8
131 
133 #define RFM73_CMD_ACTIVATE 0x50
134 
136 #define RFM73_CMD_R_RX_PL_WID 0x60
137 
139 #define RFM73_CMD_NOP 0xFF
140 
141 //***************************************************************************//
142 //
143 // RFM73 register addresses
144 //
145 //***************************************************************************//
146 
148 //
158 #define RFM73_REG_CONFIG 0x00
159 
161 //
170 #define RFM73_REG_EN_AA 0x01
171 
173 //
182 #define RFM73_REG_EN_RXADDR 0x02
183 
185 //
189 #define RFM73_REG_SETUP_AW 0x03
190 
192 //
196 #define RFM73_REG_SETUP_RETR 0x04
197 
199 //
201 #define RFM73_REG_RF_CH 0x05
202 
204 //
212 #define RFM73_REG_RF_SETUP 0x06
213 
215 //
231 #define RFM73_REG_STATUS 0x07
232 
234 //
244 #define RFM73_REG_OBSERVE_TX 0x08
245 
247 //
251 #define RFM73_REG_CD 0x09
252 
254 //
258 #define RFM73_REG_RX_ADDR_P0 0x0A
259 
261 //
265 #define RFM73_REG_RX_ADDR_P1 0x0B
266 
268 //
272 #define RFM73_REG_RX_ADDR_P2 0x0C
273 
275 //
279 #define RFM73_REG_RX_ADDR_P3 0x0D
280 
282 //
286 #define RFM73_REG_RX_ADDR_P4 0x0E
287 
289 //
293 #define RFM73_REG_RX_ADDR_P5 0x0F
294 
296 //
300 #define RFM73_REG_TX_ADDR 0x10
301 
303 //
306 #define RFM73_REG_RX_PW_P0 0x11
307 
309 //
312 #define RFM73_REG_RX_PW_P1 0x12
313 
315 //
318 #define RFM73_REG_RX_PW_P2 0x13
319 
321 //
324 #define RFM73_REG_RX_PW_P3 0x14
325 
327 //
330 #define RFM73_REG_RX_PW_P4 0x15
331 
333 //
336 #define RFM73_REG_RX_PW_P5 0x16
337 
339 //
348 #define RFM73_REG_FIFO_STATUS 0x17
349 
351 //
362 #define RFM73_REG_DYNPD 0x1C
363 
365 //
371 #define RFM73_REG_FEATURE 0x1D
372 
374 
375 
376 
377 
379 //
396 void rfm73_init( void );
397 
399 //
403 unsigned char rfm73_register_read( unsigned char reg );
404 
406 //
410 void rfm73_buffer_read(
411  unsigned char reg,
412  unsigned char buf[],
413  unsigned char length
414 );
415 
417 //
421 void rfm73_register_write( unsigned char reg, unsigned char val );
422 
424 //
429 void rfm73_buffer_write(
430  char reg,
431  const unsigned char buf[],
432  unsigned char length
433 );
434 
435 //***************************************************************************//
436 //
437 // high-level interface
438 //
439 //***************************************************************************//
440 
442 //
448 unsigned char rfm73_is_present( void );
449 
451 //
455 void rfm73_mode_transmit( void );
456 
458 //
462 void rfm73_mode_receive( void );
463 
465 //
473 void rfm73_mode_standby( void );
474 
476 //
481 void rfm73_mode_powerdown( void );
482 
484 //
488 void rfm73_lna_low( void );
489 
491 //
495 void rfm73_lna_high( void );
496 
498 //
505 void rfm73_channel( unsigned char ch );
506 
508 //
518 void rfm73_air_data_rate( unsigned char rate );
519 
521 //
529 void rfm73_crc_length( unsigned char len );
530 
532 //
539 void rfm73_address_length( unsigned char len );
540 
542 //
551 void rfm73_power( unsigned char level );
552 
554 //
570 void rfm73_retransmit_delay_attempts( unsigned char d, unsigned char n );
571 
573 //
578 unsigned char rfm73_retransmit_count( void );
579 
581 //
589 unsigned char rfm73_lost_packets_count( void );
590 
592 //
596 void rfm73_lost_packets_reset( void );
597 
599 //
606 void rfm73_pipe_autoack( unsigned char pipe, unsigned char enabled );
607 
609 //
615 void rfm73_pipe_enable( unsigned char d, unsigned char enabled );
616 
618 //
627 void rfm73_receive_address_p0( const unsigned char address[ 5 ] );
628 
630 //
639 void rfm73_receive_address_p1( const unsigned char address[ 5 ] );
640 
642 //
647 void rfm73_receive_address_pn( unsigned char channel, unsigned char address );
648 
650 //
657 void rfm73_channel_payload_size( unsigned char n, unsigned char size );
658 
660 //
664 void rfm73_transmit_address( const unsigned char address[] );
665 
667 //
670 unsigned char rfm73_transmit_fifo_full( void );
671 
673 //
676 unsigned char rfm73_receive_fifo_empty( void );
677 
679 //
695  const unsigned char buf[],
696  unsigned char length
697 );
698 
700 //
714  const unsigned char buf[],
715  unsigned char length
716 );
717 
719 //
726 unsigned char rfm73_receive_next_pipe( void );
727 
729 //
736 unsigned char rfm73_receive_next_length( void );
737 
739 //
754 unsigned char rfm73_receive(
755  unsigned char * pipe,
756  unsigned char buf[],
757  unsigned char * length
758 );
759 
760 
761 #endif
unsigned char rfm73_is_present(void)
report whether the rfm73 module is present
Definition: rfm73.c:527
void rfm73_pipe_enable(unsigned char d, unsigned char enabled)
enables or disables a pipe
Definition: rfm73.c:689
unsigned char rfm73_receive_fifo_empty(void)
report whether the receive fifo is empty
Definition: rfm73.c:646
unsigned char rfm73_receive_next_length(void)
get payload length of the next message in receive FIFO
Definition: rfm73.c:777
void rfm73_transmit_message(const unsigned char buf[], unsigned char length)
transmit a message
Definition: rfm73.c:752
void rfm73_channel_payload_size(unsigned char n, unsigned char size)
set the payload size for pipe n
Definition: rfm73.c:737
void rfm73_mode_transmit(void)
switch the rfm73 to transmit mode
Definition: rfm73.c:555
void rfm73_address_length(unsigned char len)
set the rfm73 address length
Definition: rfm73.c:630
void rfm73_buffer_read(unsigned char reg, unsigned char buf[], unsigned char length)
read a multi-byte command or register
Definition: rfm73.c:427
unsigned char rfm73_transmit_fifo_full(void)
report whether the transmit fifo is full
Definition: rfm73.c:640
unsigned char rfm73_buffer[RFM73_MAX_PACKET_LEN]
type of rfm73 (transmit or receive) buffer
Definition: rfm73.h:99
void rfm73_receive_address_p1(const unsigned char address[5])
set the rfm73 pipe 1 address
Definition: rfm73.c:656
unsigned char rfm73_lost_packets_count(void)
read rfm73 lost packets count
Definition: rfm73.c:672
#define RFM73_MAX_PACKET_LEN
maximum number of data bytes in a (received or transmitted) rfm73 packet
Definition: rfm73.h:94
unsigned char rfm73_receive(unsigned char *pipe, unsigned char buf[], unsigned char *length)
(try to) receive a message
Definition: rfm73.c:781
void rfm73_channel(unsigned char ch)
set the rfm73 channel frequency
Definition: rfm73.c:590
void rfm73_crc_length(unsigned char len)
set the rfm73 CRC length
Definition: rfm73.c:610
void rfm73_register_write(unsigned char reg, unsigned char val)
write a single-byte command or register
Definition: rfm73.c:405
void rfm73_mode_standby(void)
switch the rfm73 to standby mode
Definition: rfm73.c:574
void rfm73_mode_powerdown(void)
switch the rfm73 to power down mode
Definition: rfm73.c:582
void rfm73_transmit_address(const unsigned char address[])
set the rfm73 transmit address
Definition: rfm73.c:664
void rfm73_lost_packets_reset(void)
reset rfm73 lost packets count
Definition: rfm73.c:702
void rfm73_air_data_rate(unsigned char rate)
set the rfm73 air data rate (baudrate)
Definition: rfm73.c:595
void rfm73_transmit_message_once(const unsigned char buf[], unsigned char length)
transmit a message once
Definition: rfm73.c:762
unsigned char rfm73_retransmit_count(void)
read rfm73 retransmit count
Definition: rfm73.c:668
void rfm73_mode_receive(void)
switch the rfm73 to receive mode
Definition: rfm73.c:536
void rfm73_lna_low(void)
set the rfm73 lna gain to low
Definition: rfm73.c:718
void rfm73_power(unsigned char level)
set the rfm73 transmit power
Definition: rfm73.c:724
unsigned char rfm73_register_read(unsigned char reg)
read a single-byte command or register
Definition: rfm73.c:415
void rfm73_retransmit_delay_attempts(unsigned char d, unsigned char n)
set the retransmission delay and number of attempts
Definition: rfm73.c:707
void rfm73_init(void)
initialize the library and the rfm73 module
Definition: rfm73.c:796
void rfm73_buffer_write(char reg, const unsigned char buf[], unsigned char length)
write a multi-byte command or register
Definition: rfm73.c:444
unsigned char rfm73_receive_next_pipe(void)
get pipe number of the next message in receive FIFO
Definition: rfm73.c:772
void rfm73_receive_address_p0(const unsigned char address[5])
set the rfm73 pipe 0 address
Definition: rfm73.c:652
void rfm73_pipe_autoack(unsigned char pipe, unsigned char enabled)
enables or disables the autoack on a pipe
Definition: rfm73.c:676
void rfm73_receive_address_pn(unsigned char channel, unsigned char address)
set the rfm73 pipe n (2..5) address
Definition: rfm73.c:660
void rfm73_lna_high(void)
set the rfm73 lna gain to high
Definition: rfm73.c:712