A simple wireless protocol to let my examples communicate each other. ssWi stands for Shared Slotted Wireless protocol

Dependents:   rover_car rover_pc supervisor watering_unit ... more

This library aims at implementing a simple communication protocol among nodes, abstracting from the hardware. The name ssWi stands for Shared Slotted Wireless. Wireless is part of the name, even though the library abstracts from the hardware, as the first version was entirely focused on the XBee modules and then the name has not been changed.

The communication channel is represented by ssWiChannel, an abstract class which models the channel that the transceivers access to. The concrete classes must implement the functions: init, read and write. The protocol automatically sends and receives data through the selected channel, exploiting the operting system timers. Addresses are not considered as the communication lays on broadcast transmissions.

The protocol provides the ssWiPort abstraction which is like memory areas shared among all the connected nodes. Reading from one port lets the node retrieve the last written value from the other nodes. Writing on one port means sending such value to other nodes.

Objects instantiated from ssWiSocket are the interface for allowing nodes to access the protocol ports.

/media/uploads/mariob/scheme.png

TODO:

  • improve the parsing of the received messages
  • communication tests with many nodes (so far, only 2 nodes have been tested)
Committer:
mariob
Date:
Wed Mar 06 08:21:41 2013 +0000
Revision:
13:69ff47a83260
Parent:
4:dbbf82c966c2
Child:
24:80345e511574
added comments; MB

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mariob 4:dbbf82c966c2 1 /** \file ssWiPort.hpp
mariob 4:dbbf82c966c2 2 * \brief Header for introducing the dual head port
mariob 4:dbbf82c966c2 3 *
mariob 4:dbbf82c966c2 4 */
mariob 4:dbbf82c966c2 5
mariob 0:cc7218c5e5f7 6 #ifndef __SHARED_SLOTTED_WIRELESS_PORT_HPP__
mariob 0:cc7218c5e5f7 7 #define __SHARED_SLOTTED_WIRELESS_PORT_HPP__
mariob 0:cc7218c5e5f7 8
mariob 4:dbbf82c966c2 9 #include "rtos.h"
mariob 0:cc7218c5e5f7 10
mariob 4:dbbf82c966c2 11 #include "ssWiTypes.hpp"
mariob 0:cc7218c5e5f7 12
mariob 2:5228774a6b99 13
mariob 2:5228774a6b99 14 /** \brief Internal type which represents a logical flow
mariob 2:5228774a6b99 15 *
mariob 3:1adc077d4906 16 * Ports are used internally to model a virtual memory are of the network.
mariob 3:1adc077d4906 17 * Note that a port is a dual gate memory area which means that if you write
mariob 3:1adc077d4906 18 * on it, the reading operation does not read that value but the one received
mariob 13:69ff47a83260 19 * through the network
mariob 2:5228774a6b99 20 */
mariob 0:cc7218c5e5f7 21 class ssWiPort
mariob 0:cc7218c5e5f7 22 {
mariob 4:dbbf82c966c2 23 /** \brief receiving buffer */
mariob 0:cc7218c5e5f7 24 PortValue valueRX;
mariob 4:dbbf82c966c2 25 /** \brief receiving mutex */
mariob 0:cc7218c5e5f7 26 Mutex mutexRX;
mariob 4:dbbf82c966c2 27
mariob 4:dbbf82c966c2 28 /** \brief transmission buffer */
mariob 0:cc7218c5e5f7 29 PortValue valueTX;
mariob 4:dbbf82c966c2 30 /** \brief transmission mutex */
mariob 0:cc7218c5e5f7 31 Mutex mutexTX;
mariob 3:1adc077d4906 32
mariob 4:dbbf82c966c2 33 /** \brief modification flag (if true a new value has to be sent) */
mariob 0:cc7218c5e5f7 34 bool modified;
mariob 0:cc7218c5e5f7 35
mariob 0:cc7218c5e5f7 36 public:
mariob 0:cc7218c5e5f7 37
mariob 4:dbbf82c966c2 38 /** \brief constructor */
mariob 0:cc7218c5e5f7 39 ssWiPort () {
mariob 0:cc7218c5e5f7 40 modified = false;
mariob 0:cc7218c5e5f7 41 valueTX = 0;
mariob 0:cc7218c5e5f7 42 valueRX = 0;
mariob 0:cc7218c5e5f7 43 }
mariob 0:cc7218c5e5f7 44
mariob 4:dbbf82c966c2 45 /** \brief get the value to be sent
mariob 4:dbbf82c966c2 46 */
mariob 0:cc7218c5e5f7 47 PortValue getTXValue();
mariob 4:dbbf82c966c2 48
mariob 4:dbbf82c966c2 49 /** \brief write a value to be sent
mariob 4:dbbf82c966c2 50 */
mariob 0:cc7218c5e5f7 51 void setTXValue(PortValue tmp);
mariob 4:dbbf82c966c2 52
mariob 4:dbbf82c966c2 53 /** \brief true if there is a value to be sent
mariob 4:dbbf82c966c2 54 */
mariob 0:cc7218c5e5f7 55 bool isModified();
mariob 0:cc7218c5e5f7 56
mariob 4:dbbf82c966c2 57 /** \brief Read the last received value
mariob 4:dbbf82c966c2 58 */
mariob 0:cc7218c5e5f7 59 PortValue getRXValue();
mariob 4:dbbf82c966c2 60
mariob 4:dbbf82c966c2 61 /** \brief Write the last received value
mariob 4:dbbf82c966c2 62 */
mariob 0:cc7218c5e5f7 63 void setRXValue(PortValue tmp);
mariob 0:cc7218c5e5f7 64
mariob 0:cc7218c5e5f7 65 };
mariob 0:cc7218c5e5f7 66
mariob 0:cc7218c5e5f7 67 #endif //__SHARED_SLOTTED_WIRELESS_PORT_HPP__