Maniacbug's RF24 arduino library ported to mbed. Tested, it works for Nucleo F411

Dependents:   RF24Network_Send RF24Network_Receive maple_chotobot_rf_motores Thesis_Verzender ... more

Committer:
akashvibhute
Date:
Thu Apr 21 04:10:31 2016 +0000
Revision:
5:b1110d26a900
Parent:
4:75c5aa56411f
Library re-ported with all the latest and greatest stuff from Manicbug; Synced with TMRh20's RF24 library on Apr/18/2015 from https://github.com/TMRh20

Who changed what in which revision?

UserRevisionLine numberNew 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 4:75c5aa56411f 8
akashvibhute 4:75c5aa56411f 9 /*
akashvibhute 4:75c5aa56411f 10 * Mbed support added by Akash Vibhute <akash.roboticist@gmail.com>
akashvibhute 4:75c5aa56411f 11 * Porting completed on Nov/05/2015
akashvibhute 4:75c5aa56411f 12 *
akashvibhute 4:75c5aa56411f 13 * Updated 1: Synced with TMRh20's RF24 library on Nov/04/2015 from https://github.com/TMRh20
akashvibhute 4:75c5aa56411f 14 * Updated 2: Synced with TMRh20's RF24 library on Apr/18/2015 from https://github.com/TMRh20
akashvibhute 4:75c5aa56411f 15 *
akashvibhute 4:75c5aa56411f 16 */
akashvibhute 4:75c5aa56411f 17
akashvibhute 5:b1110d26a900 18
akashvibhute 0:c3db0798d9aa 19 #ifndef __SYNC_H__
akashvibhute 0:c3db0798d9aa 20 #define __SYNC_H__
akashvibhute 0:c3db0798d9aa 21
akashvibhute 0:c3db0798d9aa 22 // STL headers
akashvibhute 0:c3db0798d9aa 23 // C headers
akashvibhute 0:c3db0798d9aa 24 #include <stdlib.h>
akashvibhute 0:c3db0798d9aa 25 #include <string.h>
akashvibhute 0:c3db0798d9aa 26 // Framework headers
akashvibhute 0:c3db0798d9aa 27 // Library headers
akashvibhute 0:c3db0798d9aa 28 #include <RF24Network_config.h>
akashvibhute 0:c3db0798d9aa 29 // Project headers
akashvibhute 0:c3db0798d9aa 30
akashvibhute 0:c3db0798d9aa 31 class RF24Network;
akashvibhute 0:c3db0798d9aa 32
akashvibhute 0:c3db0798d9aa 33 /**
akashvibhute 0:c3db0798d9aa 34 * Synchronizes a shared set of variables between multiple nodes
akashvibhute 0:c3db0798d9aa 35 */
akashvibhute 0:c3db0798d9aa 36
akashvibhute 0:c3db0798d9aa 37 class Sync
akashvibhute 0:c3db0798d9aa 38 {
akashvibhute 0:c3db0798d9aa 39 private:
akashvibhute 0:c3db0798d9aa 40 RF24Network& network;
akashvibhute 0:c3db0798d9aa 41 uint8_t* app_data; /**< Application's copy of the data */
akashvibhute 0:c3db0798d9aa 42 uint8_t* internal_data; /**< Our copy of the data */
akashvibhute 0:c3db0798d9aa 43 size_t len; /**< Length of the data in bytes */
akashvibhute 0:c3db0798d9aa 44 uint16_t to_node; /**< The other node we're syncing with */
akashvibhute 0:c3db0798d9aa 45
akashvibhute 0:c3db0798d9aa 46 protected:
akashvibhute 0:c3db0798d9aa 47 public:
akashvibhute 0:c3db0798d9aa 48 /**
akashvibhute 0:c3db0798d9aa 49 * Constructor
akashvibhute 0:c3db0798d9aa 50 *
akashvibhute 0:c3db0798d9aa 51 * @param _network Which network to syncrhonize over
akashvibhute 0:c3db0798d9aa 52 */
akashvibhute 0:c3db0798d9aa 53 Sync(RF24Network& _network): network(_network), app_data(NULL),
akashvibhute 0:c3db0798d9aa 54 internal_data(NULL), len(0), to_node(0)
akashvibhute 0:c3db0798d9aa 55 {
akashvibhute 0:c3db0798d9aa 56 }
akashvibhute 0:c3db0798d9aa 57 /**
akashvibhute 0:c3db0798d9aa 58 * Begin the object
akashvibhute 0:c3db0798d9aa 59 *
akashvibhute 0:c3db0798d9aa 60 * @param _to_node Which node we are syncing with
akashvibhute 0:c3db0798d9aa 61 */
akashvibhute 0:c3db0798d9aa 62 void begin(uint16_t _to_node)
akashvibhute 0:c3db0798d9aa 63 {
akashvibhute 0:c3db0798d9aa 64 to_node = _to_node;
akashvibhute 0:c3db0798d9aa 65 }
akashvibhute 0:c3db0798d9aa 66 /**
akashvibhute 0:c3db0798d9aa 67 * Declare the shared data set
akashvibhute 0:c3db0798d9aa 68 *
akashvibhute 0:c3db0798d9aa 69 * @param _data Location of shared data to be syncrhonized
akashvibhute 0:c3db0798d9aa 70 */
akashvibhute 0:c3db0798d9aa 71 template <class T>
akashvibhute 0:c3db0798d9aa 72 void register_me(T& _data)
akashvibhute 0:c3db0798d9aa 73 {
akashvibhute 0:c3db0798d9aa 74 app_data = reinterpret_cast<uint8_t*>(&_data);
akashvibhute 0:c3db0798d9aa 75 len = sizeof(_data);
akashvibhute 0:c3db0798d9aa 76 internal_data = reinterpret_cast<uint8_t*>(malloc(len));
akashvibhute 0:c3db0798d9aa 77 reset();
akashvibhute 0:c3db0798d9aa 78 }
akashvibhute 0:c3db0798d9aa 79
akashvibhute 0:c3db0798d9aa 80 /**
akashvibhute 0:c3db0798d9aa 81 * Reset the internal copy of the shared data set
akashvibhute 0:c3db0798d9aa 82 */
akashvibhute 0:c3db0798d9aa 83 void reset(void)
akashvibhute 0:c3db0798d9aa 84 {
akashvibhute 0:c3db0798d9aa 85 memcpy(internal_data,app_data,len);
akashvibhute 0:c3db0798d9aa 86 }
akashvibhute 0:c3db0798d9aa 87
akashvibhute 0:c3db0798d9aa 88 /**
akashvibhute 0:c3db0798d9aa 89 * Update the network and the shared data set
akashvibhute 0:c3db0798d9aa 90 */
akashvibhute 0:c3db0798d9aa 91 void update(void);
akashvibhute 0:c3db0798d9aa 92 };
akashvibhute 0:c3db0798d9aa 93
akashvibhute 0:c3db0798d9aa 94 #endif // __SYNC_H__
akashvibhute 0:c3db0798d9aa 95 // vim:cin:ai:sts=2 sw=2 ft=cpp
akashvibhute 4:75c5aa56411f 96
akashvibhute 4:75c5aa56411f 97