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