embedded-software
reusable software modules for embedded systems
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
nrf24network.h
Go to the documentation of this file.
1 
40 #ifndef NRF24NETWORK_H
41 #define NRF24NETWORK_H
42 
43 #include "project_settings.h"
44 #include <stdint.h>
45 #include "timing.h"
46 #include "nrf24.h"
47 
49 typedef void (*nrf24_handler_fn_t)(uint8_t * data, uint8_t len, uint8_t from);
50 
54 typedef union {
55  uint16_t word;
56  uint8_t b[2];
57  struct {
58  uint16_t to_leaf: 3;
59  uint16_t to_branch: 3;
60  uint16_t from_leaf: 3;
61  uint16_t from_branch: 3;
62  uint16_t multi_msg: 1;
63  uint16_t msg_len: 3;
64  };
65  struct {
66  uint16_t to: 6;
67  uint16_t from: 6;
68  uint16_t reserved: 4;
69  };
71 
72 #define NRF24_CHANNEL_BRANCH_1 30
73 #define NRF24_CHANNEL_BRANCH_2 34
74 #define NRF24_CHANNEL_BRANCH_3 38
75 #define NRF24_CHANNEL_BRANCH_4 42
76 #define NRF24_CHANNEL_BRANCH_5 46
77 #define NRF24_CHANNEL_BRANCH_6 50
78 
79 #define NRF24_ADDRESS_MASK 0x6C6C6C7800
80 
81 #define NRF24_MIN_WINDOW_MS 8 //TODO change this to 4
82 #define NRF24_BRANCH_WINDOW_MS 7 //TODO change this to 4
83 #define NRF24_TICK_MS 2 //TODO change this to 1
84 #define NRF24_MISSING_NODE_TIMEOUT 100 //TODO make this larger
85 
86 // The third payload byte (after the two address bytes) will be the message ID
88  SYSTEM_MSG = 0,
96 };
97 
99  NULL_MSG = 0,
103 };
104 
105 // The fourth payload byte of control messages will be a control message sub-ID
110 };
111 
112 // The fourth payload byte of sensor messages will be a sensor message sub-ID
116 };
117 
126 };
127 
129  // assign fixed node addresses
130  MASTER = 0x00,
131  SCRUM_PUN = 0x08,
135  MOUSE_TRAP = 0x10,
136  ULTRASONIC = 0x18,
140  SUPREME = 0x20,
145  OGLAZERBOIZ = 0x28,
149  MIKE = 0x30,
154  ALL_ALL = 0x3F
155 };
156 
161  };
162 
164 
169 };
170 
171 typedef struct {
172  uint8_t length;
173  uint8_t child; // child 0xFF means unused buffer slot
174  uint8_t age; // how long this msg has been on the buffer (relative, 0 is newest)
175  uint8_t data[32];
176 } nrfnet_msg_t;
177 
178 #define NRFNET_MSG_BUFFER_LENGTH 16
179 typedef struct nrfnet_s {
181  uint8_t sys_id;
182  uint8_t node;
183  char name[5];
186  volatile uint8_t current_child;
187  uint32_t child_time[6];
190  uint8_t channel[6];
195 } nrfnet_t;
196 
207 void nrf24_NetworkInit(void (*ce)(uint8_t), void (*csn)(uint8_t), uint8_t spi_channel);
208 void nrf24_NetworkInitN(nrfnet_t * net, void (*ce)(uint8_t), void (*csn)(uint8_t), uint8_t spi_channel, uint8_t node);
209 
233 void nrf24_RegisterMsgHandlerN(nrfnet_t * net, enum nrf24_msg_id msg_id, nrf24_handler_fn_t fn_ptr);
234 
244 void nrf24_SendMsg(uint8_t to, enum nrf24_msg_id msg_id, uint8_t * data, uint8_t len);
245 void nrf24_SendMsgN(nrfnet_t * net, uint8_t to, enum nrf24_msg_id msg_id, uint8_t * data, uint8_t len);
246 
258 
270 
271 void nrf24_NetworkISRHandler(void);
272 #define nrf24_NetworkISRHandlerN(net) nRF24_ISR(&net.radio)
273 
274 void nrf24_Ping(uint8_t to);
275 
281 char * NameFromAddress(uint8_t address);
282 
288 uint8_t AddressFromName(char * name);
289 
292 // possible additions:
293 // - add method to send a control message
294 // - add method to request sensor data
295 // - add method to support automatic response of sensor data request
296 // - add network level nack for undeliverable packets
297 
298 #endif /* NRF24NETWORK_H */
uint32_t child_time[6]
Definition: nrf24network.h:187
nrf24_handler_fn_t sensor_handler[LAST_SENSOR_ID]
Definition: nrf24network.h:194
nrf24_msg_id
Definition: nrf24network.h:87
Thing->Brainframe, data is score (1 great job)
Definition: nrf24network.h:122
uint8_t channel[6]
Definition: nrf24network.h:190
void nrf24_NetworkInitN(nrfnet_t *net, void(*ce)(uint8_t), void(*csn)(uint8_t), uint8_t spi_channel, uint8_t node)
Definition: nrf24network.c:139
Definition: nrf24network.h:154
void nrf24_RegisterSensorHandler(enum nrf24_sensor_msg sensor_id, nrf24_handler_fn_t fn_ptr)
Definition: nrf24network.c:284
uint8_t sys_id
Definition: nrf24network.h:181
Brainframe->Thing, data is difficulty.
Definition: nrf24network.h:120
Definition: nrf24network.h:101
Definition: nrf24network.h:168
reserved name to determine number of messages supported
Definition: nrf24network.h:125
Definition: nrf24network.h:107
built-in / Jon W.
Definition: nrf24network.h:91
nrf24_system_msg
Definition: nrf24network.h:98
Definition: nrf24network.h:150
Definition: nrf24network.h:152
Definition: nrf24network.h:151
Branch 5 - Muhlbaier's Fav. Clinic.
Definition: nrf24network.h:145
Definition: nrf24network.h:114
nrfnet_msg_t msg_buf[NRFNET_MSG_BUFFER_LENGTH]
Definition: nrf24network.h:191
Used to remotely kill (reset) a node on the network.
Definition: nrf24network.h:93
reserved name to determine number of control msgs supported
Definition: nrf24network.h:109
uint8_t child
Definition: nrf24network.h:173
Definition: nrf24network.h:134
nrf24_handler_fn_t handler[LAST_MSG_ID]
Definition: nrf24network.h:192
Definition: nrf24network.h:139
Brainframe->Thing, data is difficulty.
Definition: nrf24network.h:119
reserved name to determine number of message IDs supported
Definition: nrf24network.h:95
Branch 2 - RedBulls.
Definition: nrf24network.h:135
uint16_t word
Definition: nrf24network.h:55
enum pipe_status_e child_status[6]
Definition: nrf24network.h:189
Definition: nrf24network.h:146
volatile uint8_t current_child
Definition: nrf24network.h:186
Definition: nrf24network.h:160
void nrf24_RegisterControlHandler(enum nrf24_control_msg control_id, nrf24_handler_fn_t fn_ptr)
Definition: nrf24network.c:275
general sensor msg / max payload 4+ bytes
Definition: nrf24network.h:90
nrf24_sensor_msg
Definition: nrf24network.h:113
Thing->Brainframe, data is error code (TBD)
Definition: nrf24network.h:123
void nrf24_RegisterSensorHandlerN(nrfnet_t *net, enum nrf24_sensor_msg sensor_id, nrf24_handler_fn_t fn_ptr)
Definition: nrf24network.c:287
Definition: nrf24network.h:108
Definition: nrf24network.h:153
nrf24_t radio
Definition: nrf24network.h:180
Definition: nrf24network.h:138
void nrf24_NetworkInit(void(*ce)(uint8_t), void(*csn)(uint8_t), uint8_t spi_channel)
Initialize nRF24 Network Module.
Definition: nrf24network.c:136
void nrf24_SendMsgN(nrfnet_t *net, uint8_t to, enum nrf24_msg_id msg_id, uint8_t *data, uint8_t len)
Definition: nrf24network.c:220
uint8_t node
Definition: nrf24network.h:182
Definition: nrf24network.h:148
pipe_status_e
Definition: nrf24network.h:165
Definition: nrf24network.h:137
char name[5]
Definition: nrf24network.h:183
Branch 6 - Scrumshank Redemption.
Definition: nrf24network.h:149
nrfstate_e
Definition: nrf24network.h:157
Definition: nrf24network.h:158
Definition: nrf24network.h:132
nrfrole_e
Definition: nrf24network.h:163
#define NRFNET_MSG_BUFFER_LENGTH
Definition: nrf24network.h:178
reserved name to determine number of sensors supported
Definition: nrf24network.h:115
Definition: nrf24.h:37
Definition: nrf24network.h:99
Brainframe->Thing, data is difficulty.
Definition: nrf24network.h:124
void nrf24_RegisterControlHandlerN(nrfnet_t *net, enum nrf24_control_msg control_id, nrf24_handler_fn_t fn_ptr)
Definition: nrf24network.c:278
struct nrfnet_s nrfnet_t
nrf24_thief_msg
Definition: nrf24network.h:118
uint8_t length
Definition: nrf24network.h:172
Branch 4 - TeamSupreme.
Definition: nrf24network.h:140
Definition: nrf24network.h:100
Definition: nrf24network.h:163
Definition: nrf24network.h:142
enum nrfrole_e role
Definition: nrf24network.h:184
nrf24_handler_fn_t control_handler[LAST_CONTROL_ID]
Definition: nrf24network.h:193
Definition: nrf24network.h:144
uint32_t switch_to_tx_time
Definition: nrf24network.h:188
void nrf24_Ping(uint8_t to)
Definition: nrf24network.c:499
Definition: nrf24network.h:54
nrf24_address
Definition: nrf24network.h:128
Definition: nrf24network.h:133
uint8_t age
Definition: nrf24network.h:174
Definition: nrf24network.h:167
Definition: nrf24network.h:102
Branch 3 - SmartHomies.
Definition: nrf24network.h:136
char * NameFromAddress(uint8_t address)
Definition: nrf24network.c:526
void nrf24_SendMsg(uint8_t to, enum nrf24_msg_id msg_id, uint8_t *data, uint8_t len)
Definition: nrf24network.c:216
Definition: nrf24network.h:179
Used for testing the network.
Definition: nrf24network.h:92
Used to support the Theif class project.
Definition: nrf24network.h:94
void nrf24_RegisterMsgHandlerN(nrfnet_t *net, enum nrf24_msg_id msg_id, nrf24_handler_fn_t fn_ptr)
Definition: nrf24network.c:206
Thing->Brainframe, data is score (1 barely tripped)
Definition: nrf24network.h:121
uint8_t AddressFromName(char *name)
Definition: nrf24network.c:533
Definition: nrf24network.h:159
Definition: nrf24network.h:143
Definition: nrf24network.h:166
Branch 1 - ScrumPun.
Definition: nrf24network.h:131
Definition: nrf24network.h:171
void nrf24_NetworkISRHandler(void)
Definition: nrf24network.c:890
general control msg / max payload 5+ bytes
Definition: nrf24network.h:89
void nrf24_RegisterMsgHandler(enum nrf24_msg_id msg_id, nrf24_handler_fn_t fn_ptr)
Definition: nrf24network.c:203
built-in / MM
Definition: nrf24network.h:88
Definition: nrf24network.h:163
Brainframe / Scrumshank Redemption.
Definition: nrf24network.h:130
void(* nrf24_handler_fn_t)(uint8_t *data, uint8_t len, uint8_t from)
Definition: nrf24network.h:49
Definition: nrf24network.h:163
Definition: nrf24network.h:147
Definition: nrf24network.h:141
enum nrfstate_e state
Definition: nrf24network.h:185
nrf24_control_msg
Definition: nrf24network.h:106