Ble for smart sOlutions

Dependencies:   Adafruit_WS2801

Revision:
6:ee9c86f06eae
Parent:
3:f594022fe519
Child:
7:9cda1b0f25ae
--- a/source/main.cpp	Sat Apr 20 11:04:45 2019 +0000
+++ b/source/main.cpp	Mon May 20 09:55:38 2019 +0200
@@ -20,40 +20,28 @@
 #include "ble/Gap.h"
 #include "GattCallbackParamTypes.h"
 #include "mbed.h"
-#include "Adafruit_WS2801.h"
+#include "Adafruit_WS2801/Adafruit_WS2801.h"
 
-#define STRIP_LENGTH 20
-static Adafruit_WS2801 mystrip(STRIP_LENGTH, p26,p27, WS2801_RGB);
 #include "ColorService.h"
-
-//Serial pc(USBTX, USBRX);
-
+#include "BleDeviceCentral.h"
+#include "BleDevicePeripheral.h"
+#define MBED_CONF_PLATFORM_ERROR_FILENAME_CAPTURE_ENABLED true
 DigitalOut led1(LED1, 1);
 
-const static char     DEVICE_NAME[] = "SSS-Wearable";
+//const static char     DEVICE_NAME[] = "SSS-Wearable";
 static const uint16_t uuid16_list[] = {0xF0C0FF};
-    
+
 int rainbow[] = {0xff00ff,0xff00cc,0xff0099,0xff0066,0xff0033,0xff0000,0xff3300,0xff6600,
                  0xff9900,0xffcc00,0xffff00,0xccff00,0x99ff00,0x66ff00,0x33ff00,0x00ff00,
                  0x00ff33,0x00ff66,0x00ff99,0x00ffcc};
-            
+
 
-static ColorService* colorServicePtr; 
+//static ColorService* colorServicePtr;
 
 static EventQueue eventQueue(/* event count */ 16 * EVENTS_EVENT_SIZE);
-void discoveryCallback(const Gap::AdvertisementCallbackParams_t *params)
-{
-}
-void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
-{
-    pc.printf("Found a device");
-}
-void connectionCallback(const Gap::ConnectionCallbackParams_t *params) 
-{
-    pc.printf("\r\n *******Got connection****** \r\n");
-}
+
 void updateSensorValue() {
-//    pc.printf("Right now, i should update sensor value. This runs only during connection \r\n");
+//    printf("Right now, i should update sensor value. This runs only during connection \r\n");
 //    colorServicePtr->updateColor((int[]){16711680, 16711682, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680});
 }
 
@@ -62,60 +50,27 @@
     //TODO: Every 
     led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */
     BLE &ble = BLE::Instance();
+
+
     if (ble.gap().getState().connected) {
         eventQueue.call(updateSensorValue);
     } else {
-        ble.gap().startAdvertising(); 
-//        wait_ms(20); 
-//        ble.gap().stopAdvertising();
-        pc.printf("Stopped advertisement");
-        
-//        ble::ScanParameters scan_params;
-//        scan_params.setOwnAddressType(ble::own_address_type_t::RANDOM);
-
-//        ble_error_t error = ble.gap().setScanParameters(scan_params);
-//        ble.gap().setScanParameters(scan_params);
- 
-//        if (error) {
-//            pc.printf("Error caused by Gap::setScanParameters\r\n");
-//            pc.printf("%d", error);
-//            return;
-//        }
-//          ble_error_t error = ble.gap().startScan(ble::scan_duration_t(100));
-
-//        if (error) {
-//            pc.printf("Error caused by Gap::startScan\r\n");
-//            return;
-//        }
-
-//        printf("Scanning started\r\n");
- 
-        
-//        iBeaconStartScan(); 
-//        wait(130); 
-//        ble.gap().stopScan(); 
+        ble.gap().startAdvertising();
+        printf("Stopped advertisement");
     }
 }
 
-/**
- * This function is called when the ble initialization process has failled
- */
-void onBleInitError(BLE &ble, ble_error_t error)
-{
-    /* Initialization error handling should go here */
-}
-
 void printMacAddress()
 {
     /* Print out device MAC address to the console*/
     Gap::AddressType_t addr_type;
     Gap::Address_t address;
     BLE::Instance().gap().getAddress(&addr_type, address);
-    pc.printf("DEVICE MAC ADDRESS: ");
+    printf("DEVICE MAC ADDRESS: ");
     for (int i = 5; i >= 1; i--){
-        pc.printf("%02x:", address[i]);
+        printf("%02x:", address[i]);
     }
-    pc.printf("%02x\r\n", address[0]);
+    printf("%02x\r\n", address[0]);
 }
 
 /**
@@ -123,68 +78,56 @@
  */
 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
 {
-    BLE&        ble   = params->ble;
-    ble_error_t error = params->error;
 
-    if (error != BLE_ERROR_NONE) {
-        /* In case of error, forward the error handling to onBleInitError */
-        onBleInitError(ble, error);
-        return;
-    }
-
-    /* Ensure that it is the default instance of BLE */
-    if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) {
-        return;
-    }
-
-    ble.gap().onDisconnection(disconnectionCallback);
-    ble.gap().onConnection(connectionCallback);
-    /* Setup primary service */
-    colorServicePtr = new ColorService(ble);
-
-    /* Setup advertising */
-    ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
-    ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *) uuid16_list, sizeof(uuid16_list));
-    ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *) DEVICE_NAME, sizeof(DEVICE_NAME));
-//    ble.gattServer().onDataRead(blinkCallback);
-    ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
-    ble.gap().setAdvertisingInterval(150); /* 1000ms */
-    pc.printf("Set up BLE \r\n");
-    printMacAddress();
 }
 
 
 void scheduleBleEventsProcessing(BLE::OnEventsToProcessCallbackContext* context) {
     BLE &ble = BLE::Instance();
     //TODO: Event handling; wel benieuwd naar wat er allemaal gebeurt
-
     eventQueue.call(Callback<void()>(&ble, &BLE::processEvents));
 }
 
 uint32_t colorMaker(uint8_t r, uint8_t g, uint8_t b){
-      uint32_t c;
-  c = r;
-  c <<= 8;
-  c |= g;
-  c <<= 8;
-  c |= b;
-  return c;    
+    uint32_t c;
+    c = r;
+    c <<= 8;
+    c |= g;
+    c <<= 8;
+    c |= b;
+    return c;
 }
 
 int main()
 {
-    pc.baud (115200);
+    printf("\r\n CENTRAL \r\n\r\n");
 
-    eventQueue.call_every(150, blinkCallback);
+    //TODO: Make
+//    mystrip.begin();
+//    mystrip.show();
+//    colorServicePtr->updateColor(rainbow);//(int[]){16711680, 16711682, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680});
+
+    BLE& ble = BLE::Instance();
+    events::EventQueue queue;
+    printf(" Is filename capture enabled? \t\t");
 
-    BLE &ble = BLE::Instance();
-    ble.onEventsToProcess(scheduleBleEventsProcessing);
-    ble.init(bleInitComplete);
-    mystrip.begin();
-    mystrip.show();
-    
-    colorServicePtr->updateColor((int[]){16711680, 16711682, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680, 16711680});
-    eventQueue.dispatch_forever();
+#if MBED_CONF_PLATFORM_ERROR_FILENAME_CAPTURE_ENABLED
+    printf(" Enabled filename capture");
+#endif
+
+
+    while(1) {
+        printf("\r\n PERIPHERAL \r\n\r\n");
+        BleDevicePeripheral peripheral(ble, queue);
+        peripheral.run(60000);
+        peripheral.stop();
+
+        printf("\r\n CENTRAL \r\n\r\n");
+        BleDeviceCentral central(ble, queue);
+        central.run(5000);
+        central.stop();
+
+    }
     return 0;
 }