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