aidanReceiver
Dependencies: mbed BLE_API nRF51822
receiver_main.cpp@7:435abd25362e, 2019-04-26 (annotated)
- 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?
User | Revision | Line number | New 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 | } |