aidanReceiver

Dependencies:   mbed BLE_API nRF51822

Committer:
jzabins2
Date:
Mon Apr 29 06:23:03 2019 +0000
Revision:
8:adf882069ec4
Parent:
7:435abd25362e
Receiver measuring average time to receive five messages

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"
jzabins2 8:adf882069ec4 3 #include <time.h>
khyein8154 3:ca23d318cb12 4
aidanjabb 0:50406b29435a 5 #define LED_RED p21
aidanjabb 0:50406b29435a 6 #define LED_GREEN p22
aidanjabb 0:50406b29435a 7 #define LED_BLUE p23
aidanjabb 0:50406b29435a 8 #define BUTTON_PIN p17
aidanjabb 0:50406b29435a 9 #define BATTERY_PIN p1
jzabins2 2:89b8aef35194 10
jzabins2 7:435abd25362e 11 #define NUM_UNIQUE_PACKETS 5
jzabins2 7:435abd25362e 12
jzabins2 8:adf882069ec4 13 Serial pc(USBTX, USBRX);
jzabins2 8:adf882069ec4 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;
jzabins2 8:adf882069ec4 19 //const static char DEVICE_NAME[] = "Receiver";
jzabins2 7:435abd25362e 20 volatile bool received[NUM_UNIQUE_PACKETS];
khyein8154 6:55c87c9bc90e 21
jzabins2 2:89b8aef35194 22 struct Data {
jzabins2 2:89b8aef35194 23 uint32_t seqNum;
jzabins2 2:89b8aef35194 24 };
aidanjabb 1:3ad5b46f9abc 25
aidanjabb 0:50406b29435a 26 // void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
jzabins2 2:89b8aef35194 27
aidanjabb 0:50406b29435a 28 void scanCallback(const Gap::AdvertisementCallbackParams_t *params)
aidanjabb 0:50406b29435a 29 {
jzabins2 8:adf882069ec4 30 static int numMeas;
jzabins2 8:adf882069ec4 31 static double avgMeas;
jzabins2 8:adf882069ec4 32
jzabins2 8:adf882069ec4 33 static clock_t clock1, clock2;
jzabins2 8:adf882069ec4 34
khyein8154 6:55c87c9bc90e 35 if (*(params->peerAddr) == (uint8_t) TRANSMITTER_MAC_ADDRESS) {
aidanjabb 0:50406b29435a 36
khyein8154 6:55c87c9bc90e 37 // BREDR_NOT_SUPPORTED = 0x04
khyein8154 6:55c87c9bc90e 38 // LE_GENERAL_DISCOVERABLE = 0x02
khyein8154 6:55c87c9bc90e 39 // COMPLETE_LOCAL_NAME = 0x09
khyein8154 6:55c87c9bc90e 40 // MANUFACTURER_SPECIFIC_DATA = 0xFF
khyein8154 6:55c87c9bc90e 41
khyein8154 6:55c87c9bc90e 42 // Data received: 02 ff (MANUFACTURER_SPECIFIC_DATA) 0 (Sequence Number)
khyein8154 6:55c87c9bc90e 43
jzabins2 8:adf882069ec4 44 // Turn off the blue led
jzabins2 8:adf882069ec4 45 blueLed = 1;
jzabins2 8:adf882069ec4 46
khyein8154 6:55c87c9bc90e 47 const uint8_t * data = params->advertisingData;
aidanjabb 0:50406b29435a 48
jzabins2 7:435abd25362e 49 int seqNum = (int)data[2];
jzabins2 7:435abd25362e 50 received[seqNum] = true;
jzabins2 8:adf882069ec4 51 // pc.printf("Received packet with seq num: %d\n", seqNum);
jzabins2 7:435abd25362e 52
jzabins2 7:435abd25362e 53 bool done = true;
jzabins2 7:435abd25362e 54 for(int i=0; i<NUM_UNIQUE_PACKETS; i++) {
jzabins2 8:adf882069ec4 55 done = done && received[i];
aidanjabb 0:50406b29435a 56 }
aidanjabb 0:50406b29435a 57
jzabins2 7:435abd25362e 58 if(done == true) {
jzabins2 8:adf882069ec4 59 // Set the blue LED
jzabins2 7:435abd25362e 60 blueLed = 0;
jzabins2 8:adf882069ec4 61
jzabins2 8:adf882069ec4 62 clock2 = clock1;
jzabins2 8:adf882069ec4 63 clock1 = clock();
jzabins2 8:adf882069ec4 64
jzabins2 8:adf882069ec4 65 // Print the time
jzabins2 8:adf882069ec4 66 if (clock2 != 0) {
jzabins2 8:adf882069ec4 67 double timeUsed = ((double) (clock1 - clock2)) / CLOCKS_PER_SEC;
jzabins2 8:adf882069ec4 68 printf("Time to get full set: %f\n", timeUsed);
jzabins2 8:adf882069ec4 69
jzabins2 8:adf882069ec4 70 avgMeas = ((float)numMeas * avgMeas + timeUsed) / (numMeas + 1);
jzabins2 8:adf882069ec4 71 numMeas++;
jzabins2 8:adf882069ec4 72 pc.printf("Average time: %f seconds\n", avgMeas);
jzabins2 8:adf882069ec4 73 }
jzabins2 8:adf882069ec4 74
jzabins2 8:adf882069ec4 75 // Reset the bool array
jzabins2 8:adf882069ec4 76 for (int i=0; i<NUM_UNIQUE_PACKETS; i++) {
jzabins2 8:adf882069ec4 77 received[i] = false;
jzabins2 8:adf882069ec4 78 }
jzabins2 7:435abd25362e 79 }
aidanjabb 0:50406b29435a 80 }
aidanjabb 0:50406b29435a 81 return;
aidanjabb 0:50406b29435a 82 }
jzabins2 2:89b8aef35194 83
jzabins2 2:89b8aef35194 84
aidanjabb 0:50406b29435a 85 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
aidanjabb 0:50406b29435a 86 {
khyein8154 6:55c87c9bc90e 87 BLE &localBle = params->ble;
aidanjabb 0:50406b29435a 88 ble_error_t error = params->error;
jzabins2 2:89b8aef35194 89
aidanjabb 0:50406b29435a 90 if (error != BLE_ERROR_NONE) {
aidanjabb 0:50406b29435a 91 return;
aidanjabb 0:50406b29435a 92 }
aidanjabb 0:50406b29435a 93
khyein8154 6:55c87c9bc90e 94 redLed = 1;
aidanjabb 0:50406b29435a 95 blueLed = 1;
aidanjabb 0:50406b29435a 96
aidanjabb 0:50406b29435a 97 /* Set up scanning prodedure */
khyein8154 6:55c87c9bc90e 98 localBle.gap().setScanParams(GapScanningParams::SCAN_INTERVAL_MAX, GapScanningParams::SCAN_WINDOW_MAX, 0, false);
khyein8154 6:55c87c9bc90e 99 localBle.gap().startScan(scanCallback);
khyein8154 6:55c87c9bc90e 100
jzabins2 7:435abd25362e 101 for(int i=0; i<NUM_UNIQUE_PACKETS; i++) {
jzabins2 7:435abd25362e 102 received[i] = false;
jzabins2 7:435abd25362e 103 }
jzabins2 8:adf882069ec4 104
khyein8154 6:55c87c9bc90e 105 pc.printf("Init Completed\n");
aidanjabb 0:50406b29435a 106 }
jzabins2 2:89b8aef35194 107
jzabins2 2:89b8aef35194 108
aidanjabb 0:50406b29435a 109 int main(void)
aidanjabb 0:50406b29435a 110 {
aidanjabb 0:50406b29435a 111 BLE& ble = BLE::Instance(BLE::DEFAULT_INSTANCE);
aidanjabb 0:50406b29435a 112 ble.init(bleInitComplete);
aidanjabb 0:50406b29435a 113
aidanjabb 0:50406b29435a 114 /* SpinWait for initialization to complete. This is necessary because the
aidanjabb 0:50406b29435a 115 * BLE object is used in the main loop below. */
khyein8154 6:55c87c9bc90e 116 while (ble.hasInitialized() == false) {
khyein8154 6:55c87c9bc90e 117 pc.printf("Intiailizing BLE\n");
khyein8154 6:55c87c9bc90e 118 }
aidanjabb 0:50406b29435a 119
jzabins2 7:435abd25362e 120 pc.printf("We are done initializing\n");
jzabins2 7:435abd25362e 121
aidanjabb 0:50406b29435a 122 while (1) {
aidanjabb 0:50406b29435a 123 ble.waitForEvent(); // low power wait for event
aidanjabb 0:50406b29435a 124 }
jzabins2 2:89b8aef35194 125 }