Ble for smart sOlutions

Dependencies:   Adafruit_WS2801

Revision:
3:f594022fe519
Parent:
1:9fc54848a198
Child:
6:ee9c86f06eae
--- a/source/main.cpp	Mon Mar 25 19:02:54 2019 +0000
+++ b/source/main.cpp	Sat Apr 20 11:02:35 2019 +0000
@@ -20,38 +20,80 @@
 #include "ble/Gap.h"
 #include "GattCallbackParamTypes.h"
 #include "mbed.h"
+#include "Adafruit_WS2801.h"
+
+#define STRIP_LENGTH 20
+static Adafruit_WS2801 mystrip(STRIP_LENGTH, p26,p27, WS2801_RGB);
 #include "ColorService.h"
 
-Serial pc(USBTX, USBRX);
+//Serial pc(USBTX, USBRX);
 
 DigitalOut led1(LED1, 1);
 
 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 EventQueue eventQueue(/* event count */ 16 * EVENTS_EVENT_SIZE);
-
+void discoveryCallback(const Gap::AdvertisementCallbackParams_t *params)
+{
+}
 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
 {
-    BLE::Instance().gap().startAdvertising();
+    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");
+//    pc.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});
 }
 
 void blinkCallback(void)
 {
+    //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(); 
     }
 }
 
@@ -106,29 +148,43 @@
     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(1000); /* 1000ms */
-    pc.printf("Advertising");
-    ble.gap().startAdvertising();
-
+    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;    
+}
+
 int main()
 {
     pc.baud (115200);
 
-    eventQueue.call_every(500, blinkCallback);
+    eventQueue.call_every(150, blinkCallback);
 
     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();
-
     return 0;
 }
+