Ported Arduino RF24Network library.

Committer:
zcw607
Date:
Mon Mar 09 21:23:56 2015 +0000
Revision:
1:b5836d9f8de5
Parent:
0:df0a8886a0e9
Clean up errors

Who changed what in which revision?

UserRevisionLine numberNew contents of line
zcw607 0:df0a8886a0e9 1 /*
zcw607 0:df0a8886a0e9 2 Copyright (C) 2011 J. Coliz <maniacbug@ymail.com>
zcw607 0:df0a8886a0e9 3
zcw607 0:df0a8886a0e9 4 This program is free software; you can redistribute it and/or
zcw607 0:df0a8886a0e9 5 modify it under the terms of the GNU General Public License
zcw607 0:df0a8886a0e9 6 version 2 as published by the Free Software Foundation.
zcw607 0:df0a8886a0e9 7 */
zcw607 0:df0a8886a0e9 8
zcw607 0:df0a8886a0e9 9 #ifndef __SYNC_H__
zcw607 0:df0a8886a0e9 10 #define __SYNC_H__
zcw607 0:df0a8886a0e9 11
zcw607 0:df0a8886a0e9 12 // STL headers
zcw607 0:df0a8886a0e9 13 // C headers
zcw607 0:df0a8886a0e9 14 #include <stdlib.h>
zcw607 0:df0a8886a0e9 15 #include <string.h>
zcw607 0:df0a8886a0e9 16 // Framework headers
zcw607 0:df0a8886a0e9 17 // Library headers
zcw607 0:df0a8886a0e9 18 #include <RF24Network_config.h>
zcw607 0:df0a8886a0e9 19 // Project headers
zcw607 0:df0a8886a0e9 20
zcw607 0:df0a8886a0e9 21 class RF24Network;
zcw607 0:df0a8886a0e9 22
zcw607 0:df0a8886a0e9 23 /**
zcw607 0:df0a8886a0e9 24 * Synchronizes a shared set of variables between multiple nodes
zcw607 0:df0a8886a0e9 25 */
zcw607 0:df0a8886a0e9 26
zcw607 0:df0a8886a0e9 27 class Sync
zcw607 0:df0a8886a0e9 28 {
zcw607 0:df0a8886a0e9 29 private:
zcw607 0:df0a8886a0e9 30 RF24Network& network;
zcw607 0:df0a8886a0e9 31 uint8_t* app_data; /**< Application's copy of the data */
zcw607 0:df0a8886a0e9 32 uint8_t* internal_data; /**< Our copy of the data */
zcw607 0:df0a8886a0e9 33 size_t len; /**< Length of the data in bytes */
zcw607 0:df0a8886a0e9 34 uint16_t to_node; /**< The other node we're syncing with */
zcw607 0:df0a8886a0e9 35
zcw607 0:df0a8886a0e9 36 protected:
zcw607 0:df0a8886a0e9 37 public:
zcw607 0:df0a8886a0e9 38 /**
zcw607 0:df0a8886a0e9 39 * Constructor
zcw607 0:df0a8886a0e9 40 *
zcw607 0:df0a8886a0e9 41 * @param _network Which network to syncrhonize over
zcw607 0:df0a8886a0e9 42 */
zcw607 0:df0a8886a0e9 43 Sync(RF24Network& _network): network(_network), app_data(NULL),
zcw607 0:df0a8886a0e9 44 internal_data(NULL), len(0), to_node(0)
zcw607 0:df0a8886a0e9 45 {
zcw607 0:df0a8886a0e9 46 }
zcw607 0:df0a8886a0e9 47 /**
zcw607 0:df0a8886a0e9 48 * Begin the object
zcw607 0:df0a8886a0e9 49 *
zcw607 0:df0a8886a0e9 50 * @param _to_node Which node we are syncing with
zcw607 0:df0a8886a0e9 51 */
zcw607 0:df0a8886a0e9 52 void begin(uint16_t _to_node)
zcw607 0:df0a8886a0e9 53 {
zcw607 0:df0a8886a0e9 54 to_node = _to_node;
zcw607 0:df0a8886a0e9 55 }
zcw607 0:df0a8886a0e9 56 /**
zcw607 0:df0a8886a0e9 57 * Declare the shared data set
zcw607 0:df0a8886a0e9 58 *
zcw607 0:df0a8886a0e9 59 * @param _data Location of shared data to be syncrhonized
zcw607 0:df0a8886a0e9 60 */
zcw607 0:df0a8886a0e9 61 template <class T>
zcw607 0:df0a8886a0e9 62 void register_me(T& _data)
zcw607 0:df0a8886a0e9 63 {
zcw607 0:df0a8886a0e9 64 app_data = reinterpret_cast<uint8_t*>(&_data);
zcw607 0:df0a8886a0e9 65 len = sizeof(_data);
zcw607 0:df0a8886a0e9 66 internal_data = reinterpret_cast<uint8_t*>(malloc(len));
zcw607 0:df0a8886a0e9 67 reset();
zcw607 0:df0a8886a0e9 68 }
zcw607 0:df0a8886a0e9 69
zcw607 0:df0a8886a0e9 70 /**
zcw607 0:df0a8886a0e9 71 * Reset the internal copy of the shared data set
zcw607 0:df0a8886a0e9 72 */
zcw607 0:df0a8886a0e9 73 void reset(void)
zcw607 0:df0a8886a0e9 74 {
zcw607 0:df0a8886a0e9 75 memcpy(internal_data,app_data,len);
zcw607 0:df0a8886a0e9 76 }
zcw607 0:df0a8886a0e9 77
zcw607 0:df0a8886a0e9 78 /**
zcw607 0:df0a8886a0e9 79 * Update the network and the shared data set
zcw607 0:df0a8886a0e9 80 */
zcw607 0:df0a8886a0e9 81 void update(void);
zcw607 0:df0a8886a0e9 82 };
zcw607 0:df0a8886a0e9 83
zcw607 0:df0a8886a0e9 84 #endif // __SYNC_H__
zcw607 0:df0a8886a0e9 85 // vim:cin:ai:sts=2 sw=2 ft=cpp