3#ifndef __RF24GATEWAY_H__
4#define __RF24GATEWAY_H__
11#include "net/if_arp.h"
16#include <sys/socket.h>
17#include <netinet/in.h>
19#include <linux/if_tun.h>
29#include <RF24Network/RF24Network.h>
30#include <RF24Mesh/RF24Mesh.h>
32#ifndef IFF_MULTI_QUEUE
33 #define IFF_MULTI_QUEUE 0x0100
44template<
class radio_t>
47template<
class network_t,
class radio_t>
64template<
class mesh_t = ESBMesh<ESBNetwork<RF24>, RF24>,
class network_t = ESBNetwork<RF24>,
class radio_t = RF24>
85 ESBGateway(radio_t& _radio, network_t& _network, mesh_t& _mesh);
97 void begin(uint8_t nodeID = 0, uint8_t channel = 97, rf24_datarate_e data_rate = RF24_1MBPS);
112 void begin(uint16_t address, uint8_t channel = 97, rf24_datarate_e data_rate = RF24_1MBPS,
bool meshEnable = 0, uint8_t nodeID = 0);
122 int setIP(
char* ip_addr,
char* mask);
141 void poll(uint32_t waitDelay = 3);
168 return droppedIncoming;
171 void sendUDP(uint8_t nodeID, RF24NetworkFrame frame);
231 bool begin(
bool configTUN,
bool meshEnable, uint16_t address, uint8_t mesh_nodeID, rf24_datarate_e data_rate, uint8_t _channel);
234 uint32_t droppedIncoming;
237 rf24_datarate_e dataRate;
238 char tunName[IFNAMSIZ];
241 unsigned long packets_sent;
242 uint32_t interfaceInTimer;
244 void handleRadioOut();
245 void handleRadioIn();
246 void handleRX(uint32_t waitDelay = 0);
248 volatile bool interruptInProgress;
249 volatile bool interruptsEnabled;
251 int configDevice(uint16_t address);
252 int allocateTunDevice(
char* dev,
int flags, uint16_t address);
256 std::uint8_t message[MAX_PAYLOAD_SIZE];
260 std::queue<msgStruct> rxQueue;
261 std::queue<msgStruct> txQueue;
268 struct sockaddr_in addr;
269 struct in_addr getLocalIP();
271 void loadRoutingTable();
int setIP(char *ip_addr, char *mask)
routeStruct routingStruct[256]
void interrupts(bool enable=1)
void poll(uint32_t waitDelay=3)
void begin(uint8_t nodeID=0, uint8_t channel=97, rf24_datarate_e data_rate=RF24_1MBPS)
void update(bool interrupts=0)
void sendUDP(uint8_t nodeID, RF24NetworkFrame frame)