RFM70library
rfm70.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 _RFM70_H_
40 #define _RFM70_H_
41 
42 //***************************************************************************//
43 //
65 //
66 //***************************************************************************//
67 
68 //***************************************************************************//
69 //
82 //
83 //***************************************************************************//
84 
85 
87 //
89 #define RFM70_LIB_VERSION "V1.02 (2011-12-31)"
90 
92 //
94 #define RFM70_MAX_PACKET_LEN 32
95 
97 //
99 typedef unsigned char rfm70_buffer [ RFM70_MAX_PACKET_LEN ];
100 
101 
102 //***************************************************************************//
103 //
104 // RFM70 SPI commands
105 //
106 //***************************************************************************//
107 
110 
112 #define RFM70_CMD_R_RX_PAYLOAD 0x61
113 
115 #define RFM70_CMD_W_TX_PAYLOAD 0xA0
116 
118 #define RFM70_CMD_FLUSH_TX 0xE1
119 
121 #define RFM70_CMD_FLUSH_RX 0xE2
122 
124 #define RFM70_CMD_REUSE_TX_PL 0xE3
125 
127 #define RFM70_CMD_W_TX_PAYLOAD_NOACK 0xB0
128 
130 #define RFM70_CMD_W_ACK_PAYLOAD 0xA8
131 
133 #define RFM70_CMD_ACTIVATE 0x50
134 
136 #define RFM70_CMD_R_RX_PL_WID 0x60
137 
139 #define RFM70_CMD_NOP 0xFF
140 
141 //***************************************************************************//
142 //
143 // RFM70 register addresses
144 //
145 //***************************************************************************//
146 
148 //
158 #define RFM70_REG_CONFIG 0x00
159 
161 //
170 #define RFM70_REG_EN_AA 0x01
171 
173 //
182 #define RFM70_REG_EN_RXADDR 0x02
183 
185 //
189 #define RFM70_REG_SETUP_AW 0x03
190 
192 //
196 #define RFM70_REG_SETUP_RETR 0x04
197 
199 //
201 #define RFM70_REG_RF_CH 0x05
202 
204 //
210 #define RFM70_REG_RF_SETUP 0x06
211 
213 //
229 #define RFM70_REG_STATUS 0x07
230 
232 //
242 #define RFM70_REG_OBSERVE_TX 0x08
243 
245 //
249 #define RFM70_REG_CD 0x09
250 
252 //
256 #define RFM70_REG_RX_ADDR_P0 0x0A
257 
259 //
263 #define RFM70_REG_RX_ADDR_P1 0x0B
264 
266 //
270 #define RFM70_REG_RX_ADDR_P2 0x0C
271 
273 //
277 #define RFM70_REG_RX_ADDR_P3 0x0D
278 
280 //
284 #define RFM70_REG_RX_ADDR_P4 0x0E
285 
287 //
291 #define RFM70_REG_RX_ADDR_P5 0x0F
292 
294 //
298 #define RFM70_REG_TX_ADDR 0x10
299 
301 //
304 #define RFM70_REG_RX_PW_P0 0x11
305 
307 //
310 #define RFM70_REG_RX_PW_P1 0x12
311 
313 //
316 #define RFM70_REG_RX_PW_P2 0x13
317 
319 //
322 #define RFM70_REG_RX_PW_P3 0x14
323 
325 //
328 #define RFM70_REG_RX_PW_P4 0x15
329 
331 //
334 #define RFM70_REG_RX_PW_P5 0x16
335 
337 //
346 #define RFM70_REG_FIFO_STATUS 0x17
347 
349 //
360 #define RFM70_REG_DYNPD 0x1C
361 
363 //
369 #define RFM70_REG_FEATURE 0x1D
370 
372 
373 
374 
375 
377 //
394 void rfm70_init( void );
395 
397 //
401 unsigned char rfm70_register_read( unsigned char reg );
402 
404 //
408 void rfm70_buffer_read(
409  unsigned char reg,
410  unsigned char *buf,
411  unsigned char length
412 );
413 
415 //
419 void rfm70_register_write( unsigned char reg, unsigned char val );
420 
422 //
427 void rfm70_buffer_write(
428  char reg,
429  const unsigned char *buf,
430  unsigned char length
431 );
432 
433 //***************************************************************************//
434 //
435 // high-level interface
436 //
437 //***************************************************************************//
438 
440 //
446 unsigned char rfm70_is_present( void );
447 
449 //
453 void rfm70_mode_transmit( void );
454 
456 //
460 void rfm70_mode_receive( void );
461 
463 //
471 void rfm70_mode_standby( void );
472 
474 //
479 void rfm70_mode_powerdown( void );
480 
482 //
486 void rfm70_lna_low( void );
487 
489 //
493 void rfm70_lna_high( void );
494 
496 //
503 void rfm70_channel( unsigned char ch );
504 
506 //
517 void rfm70_air_data_rate( unsigned char rate );
518 
520 //
528 void rfm70_crc_length( unsigned char len );
529 
531 //
538 void rfm70_address_length( unsigned char len );
539 
541 //
550 void rfm70_power( unsigned char level );
551 
553 //
569 void rfm70_retransmit_delay_attempts( unsigned char d, unsigned char n );
570 
572 //
577 unsigned char rfm70_retransmit_count( void );
578 
580 //
588 unsigned char rfm70_lost_packets_count( void );
589 
591 //
595 void rfm70_lost_packets_reset( void );
596 
598 //
605 void rfm70_pipe_autoack( unsigned char pipe, unsigned char enabled );
606 
608 //
614 void rfm70_pipe_enable( unsigned char d, unsigned char enabled );
615 
617 //
626 void rfm70_receive_address_p0( const unsigned char address[ 5 ] );
627 
629 //
638 void rfm70_receive_address_p1( const unsigned char address[ 5 ] );
639 
641 //
646 void rfm70_receive_address_pn( unsigned char channel, unsigned char address );
647 
649 //
656 void rfm70_channel_payload_size( unsigned char n, unsigned char size );
657 
659 //
663 void rfm70_transmit_address( const unsigned char *address );
664 
666 //
669 unsigned char rfm70_transmit_fifo_full( void );
670 
672 //
675 unsigned char rfm70_receive_fifo_empty( void );
676 
678 //
694  const unsigned char *buf,
695  unsigned char length
696 );
697 
699 //
713  const unsigned char *buf,
714  unsigned char length
715 );
716 
718 //
725 unsigned char rfm70_receive_next_pipe( void );
726 
728 //
735 unsigned char rfm70_receive_next_length( void );
736 
738 //
753 unsigned char rfm70_receive(
754  unsigned char * pipe,
755  unsigned char *buf,
756  unsigned char * length
757 );
758 
759 
760 #endif
unsigned char rfm70_receive_next_pipe(void)
get pipe number of the next message in receive FIFO
Definition: rfm70.c:777
void rfm70_channel(unsigned char ch)
set the rfm70 channel frequency
Definition: rfm70.c:598
void rfm70_transmit_message_once(const unsigned char *buf, unsigned char length)
transmit a message once
Definition: rfm70.c:767
unsigned char rfm70_buffer[RFM70_MAX_PACKET_LEN]
type of rfm70 (transmit or receive) buffer
Definition: rfm70.h:99
unsigned char rfm70_receive_fifo_empty(void)
report whether the receive fifo is empty
Definition: rfm70.c:651
void rfm70_crc_length(unsigned char len)
set the rfm70 CRC length
Definition: rfm70.c:615
void rfm70_lna_low(void)
set the rfm70 lna gain to low
Definition: rfm70.c:723
void rfm70_mode_standby(void)
switch the rfm70 to standby mode
Definition: rfm70.c:582
void rfm70_retransmit_delay_attempts(unsigned char d, unsigned char n)
set the retransmission delay and number of attempts
Definition: rfm70.c:712
unsigned char rfm70_lost_packets_count(void)
read rfm70 lost packets count
Definition: rfm70.c:677
unsigned char rfm70_receive(unsigned char *pipe, unsigned char *buf, unsigned char *length)
(try to) receive a message
Definition: rfm70.c:786
unsigned char rfm70_receive_next_length(void)
get payload length of the next message in receive FIFO
Definition: rfm70.c:782
void rfm70_transmit_address(const unsigned char *address)
set the rfm70 transmit address
Definition: rfm70.c:669
void rfm70_init(void)
initialize the library and the rfm70 module
Definition: rfm70.c:801
#define RFM70_MAX_PACKET_LEN
maximum number of data bytes in a (received or transmitted) rfm70 packet
Definition: rfm70.h:94
void rfm70_receive_address_p1(const unsigned char address[5])
set the rfm70 pipe 1 address
Definition: rfm70.c:661
void rfm70_pipe_autoack(unsigned char pipe, unsigned char enabled)
enables or disables the autoack on a pipe
Definition: rfm70.c:681
unsigned char rfm70_register_read(unsigned char reg)
read a single-byte command or register
Definition: rfm70.c:423
void rfm70_air_data_rate(unsigned char rate)
set the rfm70 air data rate (baudrate)
Definition: rfm70.c:603
void rfm70_pipe_enable(unsigned char d, unsigned char enabled)
enables or disables a pipe
Definition: rfm70.c:694
void rfm70_lna_high(void)
set the rfm70 lna gain to high
Definition: rfm70.c:717
void rfm70_power(unsigned char level)
set the rfm70 transmit power
Definition: rfm70.c:729
void rfm70_receive_address_p0(const unsigned char address[5])
set the rfm70 pipe 0 address
Definition: rfm70.c:657
void rfm70_mode_powerdown(void)
switch the rfm70 to power down mode
Definition: rfm70.c:590
void rfm70_channel_payload_size(unsigned char n, unsigned char size)
set the payload size for pipe n
Definition: rfm70.c:742
void rfm70_register_write(unsigned char reg, unsigned char val)
write a single-byte command or register
Definition: rfm70.c:413
void rfm70_receive_address_pn(unsigned char channel, unsigned char address)
set the rfm70 pipe n (2..5) address
Definition: rfm70.c:665
void rfm70_buffer_write(char reg, const unsigned char *buf, unsigned char length)
write a multi-byte command or register
Definition: rfm70.c:452
unsigned char rfm70_transmit_fifo_full(void)
report whether the transmit fifo is full
Definition: rfm70.c:645
void rfm70_address_length(unsigned char len)
set the rfm70 address length
Definition: rfm70.c:635
unsigned char rfm70_retransmit_count(void)
read rfm70 retransmit count
Definition: rfm70.c:673
void rfm70_mode_receive(void)
switch the rfm70 to receive mode
Definition: rfm70.c:544
void rfm70_mode_transmit(void)
switch the rfm70 to transmit mode
Definition: rfm70.c:563
void rfm70_buffer_read(unsigned char reg, unsigned char *buf, unsigned char length)
read a multi-byte command or register
Definition: rfm70.c:435
unsigned char rfm70_is_present(void)
report whether the rfm70 module is present
Definition: rfm70.c:535
void rfm70_lost_packets_reset(void)
reset rfm70 lost packets count
Definition: rfm70.c:707
void rfm70_transmit_message(const unsigned char *buf, unsigned char length)
transmit a message
Definition: rfm70.c:757