rf.h
Go to the documentation of this file.
1 /*
2  Copyright 2015 Benjamin Vedder benjamin@vedder.se
3  Copyright 2015 Mikael Lovqvist devilholker@gmail.com
4 
5  This program is free software: you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation, either version 3 of the License, or
8  (at your option) any later version.
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with this program. If not, see <http://www.gnu.org/licenses/>.
17  */
18 
19 #ifndef RF_H_
20 #define RF_H_
21 
22 #include <stdint.h>
23 
24 // Data types
25 typedef enum {
29 } NRF_SPEED;
30 
31 typedef enum {
36 } NRF_POWER;
37 
38 typedef enum {
39  NRF_AW_3 = 0,
42 } NRF_AW;
43 
44 typedef enum {
48 } NRF_CRC;
49 
50 typedef enum {
68 
69 // Status register masks
70 #define NRF_STATUS_TX_FULL (1<<0)
71 #define NRF_STATUS_RX_P_NO (1<<1 | 1<<2 | 1<<3)
72 #define NRF_STATUS_MAX_RT (1<<4)
73 #define NRF_STATUS_TX_DS (1<<5)
74 #define NRF_STATUS_RX_DR (1<<6)
75 #define NRF_STATUS_IRQ (NRF_STATUS_MAX_RT | NRF_STATUS_TX_DS | NRF_STATUS_RX_DR)
76 
77 // Status register read macros
78 #define NRF_STATUS_GET_TX_FULL(s) (s & NRF_STATUS_TX_FULL)
79 #define NRF_STATUS_GET_RX_P_NO(s) ((s & NRF_STATUS_RX_P_NO) >> 1)
80 #define NRF_STATUS_GET_MAX_RT(s) ((s & NRF_STATUS_MAX_RT) >> 4)
81 #define NRF_STATUS_GET_TX_DS(s) ((s & NRF_STATUS_TX_DS) >> 5)
82 #define NRF_STATUS_GET_RX_DR(s) ((s & NRF_STATUS_RX_DR) >> 6)
83 
84 // FIFO register masks
85 #define NRF_FIFO_RX_EMPTY (1<<0)
86 #define NRF_FIFO_RX_FULL (1<<1)
87 #define NRF_FIFO_TX_EMPTY (1<<4)
88 #define NRF_FIFO_TX_FULL (1<<5)
89 
90 // Config register masks
91 #define NRF_CONFIG_PRIM_RX (1<<0)
92 #define NRF_CONFIG_PWR_UP (1<<1)
93 #define NRF_CONFIG_CRCO (1<<2)
94 #define NRF_CONFIG_EN_CRC (1<<3)
95 #define NRF_CONFIG_MASK_MAX_RT (1<<4)
96 #define NRF_CONFIG_MASK_TX_DS (1<<5)
97 #define NRF_CONFIG_MASK_RX_DR (1<<6)
98 
99 // Feature register masks
100 #define NRF_FEATURE_DYN_ACK (1<<0)
101 #define NRF_FEATURE_ACK_PAYLOAD (1<<1)
102 #define NRF_FEATURE_DPL (1<<2)
103 
104 // RF setup register masks
105 #define NRF_RF_SETUP_RF_DR_LOW (1<<5)
106 #define NRF_RF_SETUP_RF_DR_HIGH (1<<3)
107 #define NRF_RF_SETUP_RF_PWR (1<<1 | 1<<2)
108 
109 // RETR setup masks
110 #define NRF_SETUP_RETR_ARC (1<<0 | 1<<1 | 1<<2 | 1<<3)
111 #define NRF_SETUP_RETR_ARD (1<<4 | 1<<5 | 1<<6 | 1<<7)
112 
113 #define NRF_MASK_PIPE0 (1<<0)
114 #define NRF_MASK_PIPE1 (1<<1)
115 #define NRF_MASK_PIPE2 (1<<2)
116 #define NRF_MASK_PIPE3 (1<<3)
117 #define NRF_MASK_PIPE4 (1<<4)
118 #define NRF_MASK_PIPE5 (1<<5)
119 
120 // Commands
121 #define NRF_CMD_READ_REGISTER 0b00000000
122 #define NRF_CMD_WRITE_REGISTER 0b00100000
123 #define NRF_CMD_READ_RX_PAYLOAD 0b01100001 // Read RX-payload
124 #define NRF_CMD_WRITE_TX_PAYLOAD 0b10100000 // Write TX-payload
125 #define NRF_CMD_FLUSH_TX 0b11100001 // Flush TX FIFO
126 #define NRF_CMD_FLUSH_RX 0b11100010 // Flush RX FIFO
127 #define NRF_CMD_REUSE_TX 0b11100011 // Reuse last transmitted payload
128 #define NRF_CMD_ACTIVATE 0b01010000 // Activate features
129 #define NRF_CMD_READ_RX_PAYLOAD_WIDTH 0b01100000 // Read RX-payload width
130 #define NRF_CMD_WRITE_ACK_PAYLOAD 0b10101000 // Write payload for ACK packet
131 #define NRF_CMD_WRITE_TX_PAYLOAD_NO_ACK 0b10110000 // Disables AUTOACK on packet
132 #define NRF_CMD_NOP 0b11111111 // NOP
133 
134 // Registers
135 #define NRF_REG_CONFIG 0x00 // Configuration Register
136 #define NRF_REG_EN_AA 0x01 // Auto Acknowledgment
137 #define NRF_REG_EN_RXADDR 0x02 // Enabled RX Addresses
138 #define NRF_REG_SETUP_AW 0x03 // Setup of Address Widths
139 #define NRF_REG_SETUP_RETR 0x04 // Setup of Automatic Retransmission
140 #define NRF_REG_RF_CH 0x05 // RF Channel
141 #define NRF_REG_RF_SETUP 0x06 // RF Setup Register
142 #define NRF_REG_STATUS 0x07 // Status Register
143 #define NRF_REG_OBSERVE_TX 0x08 // Transmit observe register
144 #define NRF_REG_RPD 0x09 // Receive power detector
145 #define NRF_REG_RX_ADDR_P0 0x0A // Receive address data pipe 0
146 #define NRF_REG_RX_ADDR_P1 0x0B // Receive address data pipe 1
147 #define NRF_REG_RX_ADDR_P2 0x0C // Receive address data pipe 2
148 #define NRF_REG_RX_ADDR_P3 0x0D // Receive address data pipe 3
149 #define NRF_REG_RX_ADDR_P4 0x0E // Receive address data pipe 4
150 #define NRF_REG_RX_ADDR_P5 0x0F // Receive address data pipe 5
151 #define NRF_REG_TX_ADDR 0x10 // Transmit address
152 #define NRF_REG_RX_PW_P0 0x11 // Number of bytes in RX payload
153 #define NRF_REG_RX_PW_P1 0x12 // Number of bytes in RX payload
154 #define NRF_REG_RX_PW_P2 0x13 // Number of bytes in RX payload
155 #define NRF_REG_RX_PW_P3 0x14 // Number of bytes in RX payload
156 #define NRF_REG_RX_PW_P4 0x15 // Number of bytes in RX payload
157 #define NRF_REG_RX_PW_P5 0x16 // Number of bytes in RX payload
158 #define NRF_REG_FIFO_STATUS 0x17 // FIFO Status Register
159 #define NRF_REG_DYNPD 0x1C // Enable dynamic payload length
160 #define NRF_REG_FEATURE 0x1D // Feature Register
161 
162 // Functions
163 void rf_init(void);
164 void rf_set_speed(NRF_SPEED speed);
165 void rf_set_power(NRF_POWER power);
167 void rf_set_crc_type(NRF_CRC crc_type);
168 void rf_set_retr_retries(int retries);
170 void rf_set_rx_addr(int pipe, const char *address, int addr_len);
171 void rf_set_tx_addr(const char *address, int addr_len);
172 void rf_write_tx_payload(const char *data, int length);
173 void rf_write_tx_payload_no_ack(const char *data, int length);
174 void rf_write_ack_payload(int pipe, const char *data, int length);
175 void rf_read_rx_payload(char *data, int length);
176 void rf_set_frequency(int freq);
177 int rf_get_frequency(void);
178 int rf_get_address_width(void);
179 void rf_power_up(void);
180 void rf_power_down(void);
181 void rf_mode_tx(void);
182 void rf_mode_rx(void);
183 void rf_enable_pipe_autoack(int pipes);
184 void rf_enable_pipe_address(int pipes);
185 void rf_enable_pipe_dlp(int pipes);
186 void rf_enable_features(int features);
187 
188 void rf_flush_tx(void);
189 void rf_flush_rx(void);
190 void rf_flush_all(void);
191 
192 void rf_clear_irq(void);
193 void rf_clear_rx_irq(void);
194 void rf_clear_tx_irq(void);
195 void rf_clear_maxrt_irq(void);
196 int rf_get_payload_width(void);
197 int rf_status(void);
198 int rf_fifo_status(void);
199 int rf_rx_power_detect(void);
200 
201 void rf_write_reg(int reg, const char *data, int len);
202 void rf_write_reg_byte(int reg, char value);
203 void rf_read_reg(int reg, char *data, int len);
204 char rf_read_reg_byte(int reg);
205 
206 #endif /* RF_H_ */
void rf_set_tx_addr(const char *address, int addr_len)
Definition: rf.c:157
Definition: rf.h:39
void rf_mode_rx(void)
Definition: rf.c:244
Definition: rf.h:32
void rf_write_tx_payload_no_ack(const char *data, int length)
Definition: rf.c:171
void rf_clear_irq(void)
Definition: rf.c:307
Definition: rf.h:64
void rf_set_address_width(NRF_AW aw)
Definition: rf.c:98
Definition: rf.h:26
Definition: rf.h:60
Definition: rf.h:27
void rf_set_retr_delay(NRF_RETR_DELAY delay)
Definition: rf.c:141
Definition: rf.h:51
void rf_clear_maxrt_irq(void)
Definition: rf.c:319
void rf_flush_tx(void)
Definition: rf.c:288
Definition: rf.h:61
void rf_init(void)
Definition: rf.c:23
NRF_SPEED
Definition: rf.h:25
void rf_write_reg_byte(int reg, char value)
Definition: rf.c:358
Definition: rf.h:58
Definition: rf.h:28
Definition: rf.h:46
void rf_write_ack_payload(int pipe, const char *data, int length)
Definition: rf.c:181
int rf_get_address_width(void)
Definition: rf.c:212
NRF_AW
Definition: rf.h:38
void rf_set_frequency(int freq)
Definition: rf.c:201
int rf_get_payload_width(void)
Definition: rf.c:323
void rf_power_down(void)
Definition: rf.c:226
int rf_status(void)
Definition: rf.c:333
Definition: rf.h:52
Definition: rf.h:45
void rf_flush_rx(void)
Definition: rf.c:295
void rf_set_speed(NRF_SPEED speed)
Definition: rf.c:53
void rf_enable_pipe_dlp(int pipes)
Definition: rf.c:271
void rf_enable_features(int features)
Definition: rf.c:280
Definition: rf.h:40
Definition: rf.h:54
void rf_enable_pipe_autoack(int pipes)
Definition: rf.c:253
void rf_mode_tx(void)
Definition: rf.c:235
void rf_enable_pipe_address(int pipes)
Definition: rf.c:262
void rf_clear_rx_irq(void)
Definition: rf.c:311
Definition: rf.h:47
void rf_read_rx_payload(char *data, int length)
Definition: rf.c:191
NRF_RETR_DELAY
Definition: rf.h:50
Definition: rf.h:35
void rf_read_reg(int reg, char *data, int len)
Definition: rf.c:362
Definition: rf.h:55
Definition: rf.h:33
Definition: rf.h:41
Definition: rf.h:53
void rf_write_reg(int reg, const char *data, int len)
Definition: rf.c:349
Definition: rf.h:62
void rf_set_rx_addr(int pipe, const char *address, int addr_len)
Definition: rf.c:153
int rf_get_frequency(void)
Definition: rf.c:207
Definition: rf.h:34
char rf_read_reg_byte(int reg)
Definition: rf.c:371
int rf_fifo_status(void)
Definition: rf.c:341
int rf_rx_power_detect(void)
Definition: rf.c:345
void rf_set_power(NRF_POWER power)
Definition: rf.c:80
Definition: rf.h:65
Definition: rf.h:56
Definition: rf.h:66
void rf_power_up(void)
Definition: rf.c:217
void rf_write_tx_payload(const char *data, int length)
Definition: rf.c:161
void rf_clear_tx_irq(void)
Definition: rf.c:315
Definition: rf.h:57
NRF_POWER
Definition: rf.h:31
void rf_flush_all(void)
Definition: rf.c:302
Definition: rf.h:63
NRF_CRC
Definition: rf.h:44
Definition: rf.h:59
void rf_set_retr_retries(int retries)
Definition: rf.c:129
void rf_set_crc_type(NRF_CRC crc_type)
Definition: rf.c:102