![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
aidanReceiver
Dependencies: mbed BLE_API nRF51822
receiver_main.cpp@8:adf882069ec4, 2019-04-29 (annotated)
- 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?
User | Revision | Line number | New 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 | } |