aidanReceiver

Dependencies:   mbed BLE_API nRF51822

Committer:
khyein8154
Date:
Fri Apr 19 07:07:21 2019 +0000
Revision:
6:55c87c9bc90e
Parent:
5:45c48a82f202
Child:
7:435abd25362e
Only printing out packets with new sequence number

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aidanjabb 0:50406b29435a 1 #include "mbed.h"
aidanjabb 0:50406b29435a 2 #include "ble/BLE.h"
khyein8154 4:25c53ae0ae04 3 #include <string>
khyein8154 4:25c53ae0ae04 4
khyein8154 4:25c53ae0ae04 5 using namespace std;
jzabins2 2:89b8aef35194 6
khyein8154 3:ca23d318cb12 7 Serial pc(USBTX, USBRX);
khyein8154 3:ca23d318cb12 8
aidanjabb 0:50406b29435a 9 #define LED_RED p21
aidanjabb 0:50406b29435a 10 #define LED_GREEN p22
aidanjabb 0:50406b29435a 11 #define LED_BLUE p23
aidanjabb 0:50406b29435a 12 #define BUTTON_PIN p17
aidanjabb 0:50406b29435a 13 #define BATTERY_PIN p1
jzabins2 2:89b8aef35194 14
khyein8154 6:55c87c9bc90e 15 DigitalOut redLed(LED_RED);
aidanjabb 0:50406b29435a 16 DigitalOut blueLed(LED_BLUE);
jzabins2 2:89b8aef35194 17
khyein8154 6:55c87c9bc90e 18 const uint8_t TRANSMITTER_MAC_ADDRESS = 0xF34F887FED4E;
khyein8154 6:55c87c9bc90e 19
khyein8154 6:55c87c9bc90e 20 const static char DEVICE_NAME[] = "Receiver";
khyein8154 6:55c87c9bc90e 21
khyein8154 6:55c87c9bc90e 22 int latestSeqNum;
aidanjabb 1:3ad5b46f9abc 23
jzabins2 2:89b8aef35194 24 struct Data {
jzabins2 2:89b8aef35194 25 uint32_t seqNum;
jzabins2 2:89b8aef35194 26 };
aidanjabb 1:3ad5b46f9abc 27
aidanjabb 0:50406b29435a 28 // void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
jzabins2 2:89b8aef35194 29
aidanjabb 0:50406b29435a 30 void scanCallback(const Gap::AdvertisementCallbackParams_t *params)
aidanjabb 0:50406b29435a 31 {
khyein8154 6:55c87c9bc90e 32 if (*(params->peerAddr) == (uint8_t) TRANSMITTER_MAC_ADDRESS) {
aidanjabb 0:50406b29435a 33
khyein8154 6:55c87c9bc90e 34 // BREDR_NOT_SUPPORTED = 0x04
khyein8154 6:55c87c9bc90e 35 // LE_GENERAL_DISCOVERABLE = 0x02
khyein8154 6:55c87c9bc90e 36 // COMPLETE_LOCAL_NAME = 0x09
khyein8154 6:55c87c9bc90e 37 // MANUFACTURER_SPECIFIC_DATA = 0xFF
khyein8154 6:55c87c9bc90e 38
khyein8154 6:55c87c9bc90e 39 // Data received: 02 ff (MANUFACTURER_SPECIFIC_DATA) 0 (Sequence Number)
khyein8154 6:55c87c9bc90e 40
khyein8154 6:55c87c9bc90e 41 const uint8_t * data = params->advertisingData;
aidanjabb 0:50406b29435a 42
khyein8154 6:55c87c9bc90e 43 //only print when new packet received!
khyein8154 6:55c87c9bc90e 44 if (latestSeqNum < (int)data[2]) {
khyein8154 6:55c87c9bc90e 45 pc.printf("%d bytes data received from transmitter\n", params->advertisingDataLen);
khyein8154 6:55c87c9bc90e 46
khyein8154 6:55c87c9bc90e 47 for (int i = 0; i < params->advertisingDataLen; i++) {
khyein8154 6:55c87c9bc90e 48 if ( i >= params->advertisingDataLen-2 && data[i] == 'n' ) {
khyein8154 6:55c87c9bc90e 49 blueLed = 0;
khyein8154 6:55c87c9bc90e 50 }
khyein8154 6:55c87c9bc90e 51 pc.printf("%x ", data[i]);
khyein8154 6:55c87c9bc90e 52 }
khyein8154 6:55c87c9bc90e 53 pc.printf("Seq num: %d", (int)data[2]);
khyein8154 6:55c87c9bc90e 54 pc.printf("\n");
khyein8154 6:55c87c9bc90e 55 latestSeqNum = (int)data[2];
aidanjabb 0:50406b29435a 56 }
aidanjabb 0:50406b29435a 57
khyein8154 6:55c87c9bc90e 58 redLed = 0;
aidanjabb 0:50406b29435a 59 }
aidanjabb 0:50406b29435a 60 return;
aidanjabb 0:50406b29435a 61 }
jzabins2 2:89b8aef35194 62
jzabins2 2:89b8aef35194 63
aidanjabb 0:50406b29435a 64 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
aidanjabb 0:50406b29435a 65 {
khyein8154 6:55c87c9bc90e 66 BLE &localBle = params->ble;
aidanjabb 0:50406b29435a 67 ble_error_t error = params->error;
jzabins2 2:89b8aef35194 68
aidanjabb 0:50406b29435a 69 if (error != BLE_ERROR_NONE) {
aidanjabb 0:50406b29435a 70 return;
aidanjabb 0:50406b29435a 71 }
aidanjabb 0:50406b29435a 72
khyein8154 6:55c87c9bc90e 73 redLed = 1;
aidanjabb 0:50406b29435a 74 blueLed = 1;
aidanjabb 0:50406b29435a 75
aidanjabb 0:50406b29435a 76 /* Set up scanning prodedure */
khyein8154 6:55c87c9bc90e 77 localBle.gap().setScanParams(GapScanningParams::SCAN_INTERVAL_MAX, GapScanningParams::SCAN_WINDOW_MAX, 0, false);
khyein8154 6:55c87c9bc90e 78 latestSeqNum = 0;
khyein8154 6:55c87c9bc90e 79 localBle.gap().startScan(scanCallback);
khyein8154 6:55c87c9bc90e 80
khyein8154 6:55c87c9bc90e 81 pc.printf("Init Completed\n");
aidanjabb 0:50406b29435a 82 }
jzabins2 2:89b8aef35194 83
jzabins2 2:89b8aef35194 84
aidanjabb 0:50406b29435a 85 int main(void)
aidanjabb 0:50406b29435a 86 {
aidanjabb 0:50406b29435a 87 BLE& ble = BLE::Instance(BLE::DEFAULT_INSTANCE);
aidanjabb 0:50406b29435a 88 ble.init(bleInitComplete);
aidanjabb 0:50406b29435a 89
aidanjabb 0:50406b29435a 90 /* SpinWait for initialization to complete. This is necessary because the
aidanjabb 0:50406b29435a 91 * BLE object is used in the main loop below. */
khyein8154 6:55c87c9bc90e 92 while (ble.hasInitialized() == false) {
khyein8154 6:55c87c9bc90e 93 pc.printf("Intiailizing BLE\n");
khyein8154 6:55c87c9bc90e 94 }
aidanjabb 0:50406b29435a 95
aidanjabb 0:50406b29435a 96 while (1) {
aidanjabb 0:50406b29435a 97 ble.waitForEvent(); // low power wait for event
aidanjabb 0:50406b29435a 98 }
jzabins2 2:89b8aef35194 99 }