This project aims to design and optimize a solution for an optimistic network using Arduino and [XBee](https://www.digi.com/xbee).
The base scenario takes place in a mesh network of similar <u>nodes</u> ; each being subject to real-time motion. Every node has to transmit logging data (*i.e. periodically*) to a special node : the **well ** ; the well is unique in the network and is the only one that actually receives data, every other node has the same source code and behavior.
**Main goals :**
1. Optimize network usage : limit duplicates and retransmissions
2. Maximize relative space-awareness throughout time : avoid losses and retransmissions
> The project bundles its required libraries - for compatibility purposes - inside the `libraries/` folder. Symbolic links make them available for each sub-project.
----
## III. Algorithm
#### 1) Data structure
Every communication follows a consistent data format which can be split into 2 types ; the first *byte* (*i.e. called opcode*) allows receivers to identity the data type.
##### Discover Request
The `discover` data format is used to propagate the relative distances throughout the network. The **well** is the only node that can initiate a discover request, other nodes only make sure of the propagation.
```c++
struct discover {
uint8_t opcode; // opcode = 0
uint8_t wave; // id de la wave
uint8_t dist; // current node's distance
};
```
##### Data Message
The `data` format is sent by nodes to submit messagesca to the well.