make the 'protocol.h' definition shared with symlinks

This commit is contained in:
Adrien Marquès 2018-12-01 18:30:09 +01:00
parent 8d18ba1ec4
commit f917275cbc
3 changed files with 57 additions and 58 deletions

52
protocol.h Normal file
View File

@ -0,0 +1,52 @@
#ifndef _PROTOCOL_H_
#define _PROTOCOL_H_
#define DISCOVER_TTL 10000
#define DISCOVER_SIZE sizeof(int)*2
// discover request (c.f. class node)
struct discover {
uint8_t opcode; // opcode = 0
uint8_t wave; // id de la wave
uint8_t dist; // current node's distance
};
struct data {
uint8_t opcode; // opcode = 1
uint8_t dist; // distance of the last sender
uint8_t ttl; // time to live default = 10
uint8_t size; // size of message in bytes
uint8_t message[]; // actual message
};
// A <node> object is held by each node which values are determined thanks
// to the DISCOVER requests it receives; each node broadcasts a DISCOVER
// request every DISCOVER_TTL milliseconds
class node{
private:
// unique id of the node : MAC ADDR
int id;
// last received wave id
uint8_t last_wave;
// relative node-distance to the well
// WELL : dist = 0
// NODE1 can reach WELL : dist = 1
// NODE2 can reach NODE1 : dist = 2
// and so on...
uint8_t dist;
public:
// send a discover request
bool discover();
// update the current node according to a (received)
// discover request
bool update(struct discover req);
};
#endif

View File

@ -3,8 +3,6 @@
#include "protocol.h" #include "protocol.h"
#include <LiquidCrystal_I2C.h> #include <LiquidCrystal_I2C.h>
// CONSTANTS
#define WAVE_TIMEOUT 5000 // send wave every (in ms)
// Peripherals // Peripherals
LiquidCrystal_I2C screen(0x27, 16, 2); LiquidCrystal_I2C screen(0x27, 16, 2);
@ -12,7 +10,7 @@ XBee xbee = XBee();
// ACTUAL DATA // ACTUAL DATA
uint8_t wave_id = 250; uint8_t wave_id = 250;
struct discover req = {0,0,0}; struct discover dsc = {0,0,0};
void setup() { void setup() {
Serial.begin(38400); Serial.begin(38400);
@ -32,13 +30,13 @@ void loop() {
delay(WAVE_TIMEOUT); delay(WAVE_TIMEOUT);
// increment wave id (will overflow from 255 to 0) // increment wave id (will overflow from 255 to 0)
req.wave = ++wave_id; // set wave id dsc.wave = ++wave_id; // set wave id
screen.clear(); screen.clear();
screen.print("+ wave"); screen.print("+ wave");
screen.print(req.wave); screen.print(dsc.wave);
uint8_t payload[3] = {req.opcode, req.wave, req.dist}; uint8_t payload[3] = {dsc.opcode, dsc.wave, dsc.dist};
XBeeAddress64 addr64 = XBeeAddress64(0x00000000, 0x0000FFFF); XBeeAddress64 addr64 = XBeeAddress64(0x00000000, 0x0000FFFF);
Tx64Request tx = Tx64Request(addr64, payload, sizeof(payload)); Tx64Request tx = Tx64Request(addr64, payload, sizeof(payload));

View File

@ -1,52 +0,0 @@
#ifndef _PROTOCOL_H_
#define _PROTOCOL_H_
#define DISCOVER_TTL 10000
#define DISCOVER_SIZE sizeof(int)*2
// discover request (c.f. class node)
struct discover {
uint8_t opcode; // opcode = 0
uint8_t wave; // id de la wave
uint8_t dist; // current node's distance
};
struct data {
uint8_t opcode; // opcode = 1
uint8_t dist; // distance of the last sender
uint8_t ttl; // time to live default = 10
uint8_t size; // size of message in bytes
uint8_t message[]; // actual message
};
// A <node> object is held by each node which values are determined thanks
// to the DISCOVER requests it receives; each node broadcasts a DISCOVER
// request every DISCOVER_TTL milliseconds
class node{
private:
// unique id of the node : MAC ADDR
int id;
// last received wave id
uint8_t last_wave;
// relative node-distance to the well
// WELL : dist = 0
// NODE1 can reach WELL : dist = 1
// NODE2 can reach NODE1 : dist = 2
// and so on...
uint8_t dist;
public:
// send a discover request
bool discover();
// update the current node according to a (received)
// discover request
bool update(struct discover req);
};
#endif

1
well/main/protocol.h Symbolic link
View File

@ -0,0 +1 @@
../../protocol.h