Ported Arduino RF24Network library.
Sync.h@1:b5836d9f8de5, 2015-03-09 (annotated)
- 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?
User | Revision | Line number | New 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 |