Ble for smart sOlutions

Dependencies:   Adafruit_WS2801

source/main.cpp

Committer:
kris@kris-X682X
Date:
2019-05-20
Revision:
6:ee9c86f06eae
Parent:
3:f594022fe519
Child:
7:9cda1b0f25ae

File content as of revision 6:ee9c86f06eae:

/* mbed Microcontroller Library
 * Copyright (c) 2006-2014 ARM Limited
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include <events/mbed_events.h>
#include <mbed.h>
#include "ble/BLE.h"
#include "ble/Gap.h"
#include "GattCallbackParamTypes.h"
#include "mbed.h"
#include "Adafruit_WS2801/Adafruit_WS2801.h"

#include "ColorService.h"
#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";
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 updateSensorValue() {
//    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();
        printf("Stopped advertisement");
    }
}

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);
    printf("DEVICE MAC ADDRESS: ");
    for (int i = 5; i >= 1; i--){
        printf("%02x:", address[i]);
    }
    printf("%02x\r\n", address[0]);
}

/**
 * Callback triggered when the ble initialization process has finished
 */
void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
{

}


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()
{
    printf("\r\n CENTRAL \r\n\r\n");

    //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");

#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;
}