fd

Dependents:   xtoff3 CYS_Receiver

Fork of RF24Network by Akash Vibhute

Committer:
akashvibhute
Date:
Thu Apr 21 03:43:13 2016 +0000
Revision:
4:75c5aa56411f
Parent:
0:c3db0798d9aa
Child:
5:b1110d26a900
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 0:c3db0798d9aa 18 // STL headers
akashvibhute 0:c3db0798d9aa 19 // C headers
akashvibhute 0:c3db0798d9aa 20 #include <stdlib.h>
akashvibhute 0:c3db0798d9aa 21 // Framework headers
akashvibhute 0:c3db0798d9aa 22 // Library headers
akashvibhute 0:c3db0798d9aa 23 #include <RF24Network.h>
akashvibhute 0:c3db0798d9aa 24 // Project headers
akashvibhute 0:c3db0798d9aa 25 // This component's header
akashvibhute 0:c3db0798d9aa 26 #include <Sync.h>
akashvibhute 0:c3db0798d9aa 27
akashvibhute 0:c3db0798d9aa 28 /****************************************************************************/
akashvibhute 0:c3db0798d9aa 29
akashvibhute 0:c3db0798d9aa 30 void Sync::update(void)
akashvibhute 0:c3db0798d9aa 31 {
akashvibhute 0:c3db0798d9aa 32 // Pump the network
akashvibhute 0:c3db0798d9aa 33 network.update();
akashvibhute 0:c3db0798d9aa 34
akashvibhute 0:c3db0798d9aa 35 // Look for changes to the data
akashvibhute 0:c3db0798d9aa 36 uint8_t message[32];
akashvibhute 0:c3db0798d9aa 37 uint8_t *mptr = message;
akashvibhute 0:c3db0798d9aa 38 unsigned at = 0;
akashvibhute 0:c3db0798d9aa 39 while ( at < len )
akashvibhute 0:c3db0798d9aa 40 {
akashvibhute 0:c3db0798d9aa 41 if ( app_data && internal_data && app_data[at] != internal_data[at] )
akashvibhute 0:c3db0798d9aa 42 {
akashvibhute 0:c3db0798d9aa 43 // Compose a message with the deltas
akashvibhute 0:c3db0798d9aa 44 *mptr++ = at + 1;
akashvibhute 0:c3db0798d9aa 45 *mptr++ = app_data[at];
akashvibhute 0:c3db0798d9aa 46
akashvibhute 0:c3db0798d9aa 47 // Update our internal view
akashvibhute 0:c3db0798d9aa 48 internal_data[at] = app_data[at];
akashvibhute 0:c3db0798d9aa 49 }
akashvibhute 0:c3db0798d9aa 50 ++at;
akashvibhute 0:c3db0798d9aa 51 }
akashvibhute 0:c3db0798d9aa 52 // Zero out the remainder
akashvibhute 0:c3db0798d9aa 53 while ( at++ < sizeof(message) )
akashvibhute 0:c3db0798d9aa 54 *mptr++ = 0;
akashvibhute 0:c3db0798d9aa 55
akashvibhute 0:c3db0798d9aa 56 // If changes, send a message
akashvibhute 0:c3db0798d9aa 57 if ( *message )
akashvibhute 0:c3db0798d9aa 58 {
akashvibhute 0:c3db0798d9aa 59 // TODO handle the case where this has to be broken into
akashvibhute 0:c3db0798d9aa 60 // multiple messages
akashvibhute 0:c3db0798d9aa 61 RF24NetworkHeader header(/*to node*/ to_node, /*type*/ 'S' /*Sync*/);
akashvibhute 0:c3db0798d9aa 62 network.write(header,message,sizeof(message));
akashvibhute 0:c3db0798d9aa 63 }
akashvibhute 0:c3db0798d9aa 64
akashvibhute 0:c3db0798d9aa 65 // Look for messages from the network
akashvibhute 0:c3db0798d9aa 66 // Is there anything ready for us?
akashvibhute 0:c3db0798d9aa 67 if ( network.available() )
akashvibhute 0:c3db0798d9aa 68 {
akashvibhute 0:c3db0798d9aa 69 // If so, take a look at it
akashvibhute 0:c3db0798d9aa 70 RF24NetworkHeader header;
akashvibhute 0:c3db0798d9aa 71 network.peek(header);
akashvibhute 0:c3db0798d9aa 72
akashvibhute 0:c3db0798d9aa 73 switch (header.type)
akashvibhute 0:c3db0798d9aa 74 {
akashvibhute 0:c3db0798d9aa 75 case 'S':
akashvibhute 0:c3db0798d9aa 76 //IF_SERIAL_DEBUG(printf_P(PSTR("%lu: SYN Received sync message\n\r"),millis()));
akashvibhute 4:75c5aa56411f 77 IF_SERIAL_DEBUG(printf_P(PSTR("SYN Received sync message\n\r")));
akashvibhute 0:c3db0798d9aa 78
akashvibhute 0:c3db0798d9aa 79 network.read(header,&message,sizeof(message));
akashvibhute 0:c3db0798d9aa 80 // Parse the message and update the vars
akashvibhute 0:c3db0798d9aa 81 mptr = message;
akashvibhute 0:c3db0798d9aa 82 at = 0;
akashvibhute 0:c3db0798d9aa 83 while ( mptr < message + sizeof(message) )
akashvibhute 0:c3db0798d9aa 84 {
akashvibhute 0:c3db0798d9aa 85 // A '0' in the first position means we are done
akashvibhute 0:c3db0798d9aa 86 if ( !*mptr )
akashvibhute 0:c3db0798d9aa 87 break;
akashvibhute 0:c3db0798d9aa 88 uint8_t pos = (*mptr++) - 1;
akashvibhute 0:c3db0798d9aa 89 uint8_t val = *mptr++;
akashvibhute 0:c3db0798d9aa 90
akashvibhute 0:c3db0798d9aa 91 //IF_SERIAL_DEBUG(printf_P(PSTR("%lu: SYN Updated position %u to value %u\n\r"),millis(),pos,val));
akashvibhute 4:75c5aa56411f 92 IF_SERIAL_DEBUG(printf_P(PSTR("%SYN Updated position %u to value %u\n\r"),pos,val));
akashvibhute 0:c3db0798d9aa 93
akashvibhute 0:c3db0798d9aa 94 app_data[pos] = val;
akashvibhute 0:c3db0798d9aa 95 internal_data[pos] = val;
akashvibhute 0:c3db0798d9aa 96 }
akashvibhute 0:c3db0798d9aa 97 break;
akashvibhute 0:c3db0798d9aa 98 default:
akashvibhute 0:c3db0798d9aa 99 // Leave other messages for the app
akashvibhute 0:c3db0798d9aa 100 break;
akashvibhute 0:c3db0798d9aa 101 };
akashvibhute 0:c3db0798d9aa 102 }
akashvibhute 0:c3db0798d9aa 103 }
akashvibhute 0:c3db0798d9aa 104 // vim:cin:ai:sts=2 sw=2 ft=cpp
akashvibhute 4:75c5aa56411f 105
akashvibhute 4:75c5aa56411f 106