A scanner framework that receives advertisements, filters them by MAC, and prints out some data as CSV over the serial port

Dependencies:   BLE_API mbed nRF51822

Fork of BasicScanner by Mobius IoT

Committer:
budoguyiii
Date:
Wed Jun 01 20:36:08 2016 +0000
Revision:
13:8999c8b2e18e
Parent:
12:dbbf0ddc9b12
Child:
14:d8f4a49c9fb3
test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rgrover1 0:332983584a9c 1
rgrover1 0:332983584a9c 2 #include "mbed.h"
rgrover1 9:69a2ad0bcdb7 3 #include "ble/BLE.h"
sunsmile2015 7:91324daa3bfa 4 #include "TMP_nrf51/TMP_nrf51.h"
sunsmile2015 7:91324daa3bfa 5
budoguyiii 12:dbbf0ddc9b12 6
budoguyiii 12:dbbf0ddc9b12 7 #include "UARTService.h"
budoguyiii 12:dbbf0ddc9b12 8
budoguyiii 12:dbbf0ddc9b12 9
budoguyiii 12:dbbf0ddc9b12 10 #define UART_TX p9
budoguyiii 12:dbbf0ddc9b12 11 #define UART_RX p11
budoguyiii 12:dbbf0ddc9b12 12
budoguyiii 12:dbbf0ddc9b12 13 #define LOG(...) { pc.printf(__VA_ARGS__); }
budoguyiii 12:dbbf0ddc9b12 14
budoguyiii 13:8999c8b2e18e 15 #define SCAN_INTERVAL 500
budoguyiii 13:8999c8b2e18e 16 #define SCAN_WINDOW 500
budoguyiii 13:8999c8b2e18e 17
budoguyiii 13:8999c8b2e18e 18 //Baud rate: for the TinyBLE use 115200 for term or 4000000 for internal energy monitoring
budoguyiii 13:8999c8b2e18e 19 #define BAUD_RATE 115200
budoguyiii 13:8999c8b2e18e 20
rgrover1 9:69a2ad0bcdb7 21 DigitalOut alivenessLED(LED1, 1);
andresag 11:16f67d5752e1 22 Ticker ticker;
rgrover1 0:332983584a9c 23
budoguyiii 12:dbbf0ddc9b12 24 Serial pc(UART_TX, UART_RX);
budoguyiii 12:dbbf0ddc9b12 25
budoguyiii 12:dbbf0ddc9b12 26 UARTService *uartServicePtr;
budoguyiii 12:dbbf0ddc9b12 27
budoguyiii 12:dbbf0ddc9b12 28
budoguyiii 12:dbbf0ddc9b12 29
rgrover1 0:332983584a9c 30 void periodicCallback(void)
rgrover1 0:332983584a9c 31 {
rgrover1 9:69a2ad0bcdb7 32 alivenessLED = !alivenessLED; /* Do blinky on LED1 while we're waiting for BLE events. This is optional. */
rgrover1 0:332983584a9c 33 }
rgrover1 0:332983584a9c 34
rgrover1 9:69a2ad0bcdb7 35 /*
rgrover1 9:69a2ad0bcdb7 36 * This function is called every time we scan an advertisement.
rgrover1 9:69a2ad0bcdb7 37 */
sunsmile2015 6:850f44146c9f 38 void advertisementCallback(const Gap::AdvertisementCallbackParams_t *params)
sunsmile2015 6:850f44146c9f 39 {
budoguyiii 13:8999c8b2e18e 40 // Here is what we do when we receive a packet
budoguyiii 12:dbbf0ddc9b12 41
rgrover1 9:69a2ad0bcdb7 42 /* Search for the manufacturer specific data with matching application-ID */
budoguyiii 12:dbbf0ddc9b12 43 int addr_length = 6;
budoguyiii 12:dbbf0ddc9b12 44
budoguyiii 13:8999c8b2e18e 45 if(params->peerAddr[addr_length-1] == 0xaa)
budoguyiii 13:8999c8b2e18e 46 {
budoguyiii 12:dbbf0ddc9b12 47 LOG("\nFrom: ");
budoguyiii 12:dbbf0ddc9b12 48 for(int i=0; i<addr_length; i++)
budoguyiii 12:dbbf0ddc9b12 49 LOG("%02x:", params->peerAddr[addr_length-i-1]);
budoguyiii 12:dbbf0ddc9b12 50 //print payload
budoguyiii 13:8999c8b2e18e 51 LOG(" RSSI: %d", params->rssi);
budoguyiii 13:8999c8b2e18e 52 LOG("\n Payload: ");
budoguyiii 12:dbbf0ddc9b12 53 for(int i=0; i < params->advertisingDataLen; i++)
budoguyiii 12:dbbf0ddc9b12 54 LOG(" %02x", params->advertisingData[i]);
budoguyiii 12:dbbf0ddc9b12 55
budoguyiii 12:dbbf0ddc9b12 56 //print close of round
budoguyiii 12:dbbf0ddc9b12 57 LOG("\n\n");
budoguyiii 13:8999c8b2e18e 58 }
rgrover1 0:332983584a9c 59 }
rgrover1 0:332983584a9c 60
andresag 11:16f67d5752e1 61 /**
andresag 11:16f67d5752e1 62 * This function is called when the ble initialization process has failed
andresag 11:16f67d5752e1 63 */
andresag 11:16f67d5752e1 64 void onBleInitError(BLE &ble, ble_error_t error)
andresag 11:16f67d5752e1 65 {
andresag 11:16f67d5752e1 66 /* Initialization error handling should go here */
budoguyiii 12:dbbf0ddc9b12 67 LOG("Crap, the BLE radio is broken\n");
andresag 11:16f67d5752e1 68 }
andresag 11:16f67d5752e1 69
andresag 11:16f67d5752e1 70 /**
andresag 11:16f67d5752e1 71 * Callback triggered when the ble initialization process has finished
andresag 11:16f67d5752e1 72 */
andresag 11:16f67d5752e1 73 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
andresag 11:16f67d5752e1 74 {
andresag 11:16f67d5752e1 75 BLE& ble = params->ble;
andresag 11:16f67d5752e1 76 ble_error_t error = params->error;
andresag 11:16f67d5752e1 77
andresag 11:16f67d5752e1 78 if (error != BLE_ERROR_NONE) {
andresag 11:16f67d5752e1 79 /* In case of error, forward the error handling to onBleInitError */
andresag 11:16f67d5752e1 80 onBleInitError(ble, error);
andresag 11:16f67d5752e1 81 return;
andresag 11:16f67d5752e1 82 }
andresag 11:16f67d5752e1 83
andresag 11:16f67d5752e1 84 /* Ensure that it is the default instance of BLE */
andresag 11:16f67d5752e1 85 if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) {
andresag 11:16f67d5752e1 86 return;
andresag 11:16f67d5752e1 87 }
andresag 11:16f67d5752e1 88
andresag 11:16f67d5752e1 89 /* Setup and start scanning */
budoguyiii 13:8999c8b2e18e 90 ble.gap().setScanParams(SCAN_INTERVAL /* scan interval */, SCAN_WINDOW /* scan window */);
andresag 11:16f67d5752e1 91 ble.gap().startScan(advertisementCallback);
andresag 11:16f67d5752e1 92 }
andresag 11:16f67d5752e1 93
rgrover1 0:332983584a9c 94 int main(void)
rgrover1 0:332983584a9c 95 {
budoguyiii 13:8999c8b2e18e 96
budoguyiii 13:8999c8b2e18e 97 pc.baud(BAUD_RATE);
budoguyiii 12:dbbf0ddc9b12 98
budoguyiii 13:8999c8b2e18e 99 LOG("---- Basic Scanner ACTIVIZE ----\n");
budoguyiii 13:8999c8b2e18e 100
budoguyiii 12:dbbf0ddc9b12 101
budoguyiii 12:dbbf0ddc9b12 102 ticker.attach(periodicCallback, 1); /* flash the LED because reasons */
rgrover1 0:332983584a9c 103
budoguyiii 12:dbbf0ddc9b12 104 LOG("Bring up the BLE radio\n");
andresag 11:16f67d5752e1 105 BLE &ble = BLE::Instance();
andresag 11:16f67d5752e1 106 ble.init(bleInitComplete);
rgrover1 0:332983584a9c 107
budoguyiii 12:dbbf0ddc9b12 108 UARTService uartService(ble);
budoguyiii 12:dbbf0ddc9b12 109 uartServicePtr = &uartService;
budoguyiii 12:dbbf0ddc9b12 110 //uartService.retargetStdout();
budoguyiii 12:dbbf0ddc9b12 111
rgrover1 0:332983584a9c 112 while (true) {
rgrover1 0:332983584a9c 113 ble.waitForEvent();
rgrover1 0:332983584a9c 114 }
rgrover1 0:332983584a9c 115 }