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
Sync.cpp@4:75c5aa56411f, 2016-04-21 (annotated)
- 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?
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 | 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 |