aidanReceiver

Dependencies:   mbed BLE_API nRF51822

Committer:
jzabins2
Date:
Fri Apr 26 20:55:18 2019 +0000
Revision:
7:435abd25362e
Parent:
6:55c87c9bc90e
Child:
8:adf882069ec4
Receiver looking for 5 packets repeatedly

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
jzabins2 7:435abd25362e 15 #define NUM_UNIQUE_PACKETS 5
jzabins2 7:435abd25362e 16
khyein8154 6:55c87c9bc90e 17 DigitalOut redLed(LED_RED);
aidanjabb 0:50406b29435a 18 DigitalOut blueLed(LED_BLUE);
jzabins2 2:89b8aef35194 19
khyein8154 6:55c87c9bc90e 20 const uint8_t TRANSMITTER_MAC_ADDRESS = 0xF34F887FED4E;
khyein8154 6:55c87c9bc90e 21
khyein8154 6:55c87c9bc90e 22 const static char DEVICE_NAME[] = "Receiver";
jzabins2 7:435abd25362e 23 volatile bool received[NUM_UNIQUE_PACKETS];
khyein8154 6:55c87c9bc90e 24
khyein8154 6:55c87c9bc90e 25 int latestSeqNum;
aidanjabb 1:3ad5b46f9abc 26
jzabins2 2:89b8aef35194 27 struct Data {
jzabins2 2:89b8aef35194 28 uint32_t seqNum;
jzabins2 2:89b8aef35194 29 };
aidanjabb 1:3ad5b46f9abc 30
aidanjabb 0:50406b29435a 31 // void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
jzabins2 2:89b8aef35194 32
aidanjabb 0:50406b29435a 33 void scanCallback(const Gap::AdvertisementCallbackParams_t *params)
aidanjabb 0:50406b29435a 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
khyein8154 6:55c87c9bc90e 44 const uint8_t * data = params->advertisingData;
aidanjabb 0:50406b29435a 45
jzabins2 7:435abd25362e 46 int seqNum = (int)data[2];
jzabins2 7:435abd25362e 47 received[seqNum] = true;
jzabins2 7:435abd25362e 48 pc.printf("Seq num: %d\n", seqNum);
jzabins2 7:435abd25362e 49
jzabins2 7:435abd25362e 50 bool done = true;
jzabins2 7:435abd25362e 51 for(int i=0; i<NUM_UNIQUE_PACKETS; i++) {
jzabins2 7:435abd25362e 52 if(received[i] == false) {
jzabins2 7:435abd25362e 53 done = false;
jzabins2 7:435abd25362e 54 break;
khyein8154 6:55c87c9bc90e 55 }
aidanjabb 0:50406b29435a 56 }
aidanjabb 0:50406b29435a 57
jzabins2 7:435abd25362e 58 if(done == true) {
jzabins2 7:435abd25362e 59 blueLed = 0;
jzabins2 7:435abd25362e 60 }
aidanjabb 0:50406b29435a 61 }
aidanjabb 0:50406b29435a 62 return;
aidanjabb 0:50406b29435a 63 }
jzabins2 2:89b8aef35194 64
jzabins2 2:89b8aef35194 65
aidanjabb 0:50406b29435a 66 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
aidanjabb 0:50406b29435a 67 {
khyein8154 6:55c87c9bc90e 68 BLE &localBle = params->ble;
aidanjabb 0:50406b29435a 69 ble_error_t error = params->error;
jzabins2 2:89b8aef35194 70
aidanjabb 0:50406b29435a 71 if (error != BLE_ERROR_NONE) {
aidanjabb 0:50406b29435a 72 return;
aidanjabb 0:50406b29435a 73 }
aidanjabb 0:50406b29435a 74
khyein8154 6:55c87c9bc90e 75 redLed = 1;
aidanjabb 0:50406b29435a 76 blueLed = 1;
aidanjabb 0:50406b29435a 77
aidanjabb 0:50406b29435a 78 /* Set up scanning prodedure */
khyein8154 6:55c87c9bc90e 79 localBle.gap().setScanParams(GapScanningParams::SCAN_INTERVAL_MAX, GapScanningParams::SCAN_WINDOW_MAX, 0, false);
khyein8154 6:55c87c9bc90e 80 latestSeqNum = 0;
khyein8154 6:55c87c9bc90e 81 localBle.gap().startScan(scanCallback);
khyein8154 6:55c87c9bc90e 82
jzabins2 7:435abd25362e 83 for(int i=0; i<NUM_UNIQUE_PACKETS; i++) {
jzabins2 7:435abd25362e 84 received[i] = false;
jzabins2 7:435abd25362e 85 }
jzabins2 7:435abd25362e 86
khyein8154 6:55c87c9bc90e 87 pc.printf("Init Completed\n");
aidanjabb 0:50406b29435a 88 }
jzabins2 2:89b8aef35194 89
jzabins2 2:89b8aef35194 90
aidanjabb 0:50406b29435a 91 int main(void)
aidanjabb 0:50406b29435a 92 {
aidanjabb 0:50406b29435a 93 BLE& ble = BLE::Instance(BLE::DEFAULT_INSTANCE);
aidanjabb 0:50406b29435a 94 ble.init(bleInitComplete);
aidanjabb 0:50406b29435a 95
aidanjabb 0:50406b29435a 96 /* SpinWait for initialization to complete. This is necessary because the
aidanjabb 0:50406b29435a 97 * BLE object is used in the main loop below. */
khyein8154 6:55c87c9bc90e 98 while (ble.hasInitialized() == false) {
khyein8154 6:55c87c9bc90e 99 pc.printf("Intiailizing BLE\n");
khyein8154 6:55c87c9bc90e 100 }
aidanjabb 0:50406b29435a 101
jzabins2 7:435abd25362e 102 pc.printf("We are done initializing\n");
jzabins2 7:435abd25362e 103
aidanjabb 0:50406b29435a 104 while (1) {
aidanjabb 0:50406b29435a 105 ble.waitForEvent(); // low power wait for event
aidanjabb 0:50406b29435a 106 }
jzabins2 2:89b8aef35194 107 }