Ble for smart sOlutions

Dependencies:   Adafruit_WS2801

Committer:
kris@kris-X682X
Date:
Fri Jun 14 10:24:57 2019 +0200
Revision:
10:d845189d146e
Parent:
7:9cda1b0f25ae
Child:
11:d6ed1437c2ee
WS2801 working, fancy lightshows

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kris@kris-X682X 6:ee9c86f06eae 1 #include "BleDevicePeripheral.h"
kris@kris-X682X 6:ee9c86f06eae 2
kris@kris-X682X 10:d845189d146e 3 void ledStuff(){
kris@kris-X682X 7:9cda1b0f25ae 4
kris@kris-X682X 10:d845189d146e 5 MyStripSingleton::getInstance()->connectionFlash();
kris@kris-X682X 10:d845189d146e 6 MyStripSingleton::getInstance()->resetColor();
kris@kris-X682X 10:d845189d146e 7 }
kris@kris-X682X 6:ee9c86f06eae 8 void BleDevicePeripheral::onConnectionComplete(const ble::ConnectionCompleteEvent &event) {
kris@kris-X682X 6:ee9c86f06eae 9 // ble_error_t error;
kris@kris-X682X 6:ee9c86f06eae 10 /* remember the device that connects to us now so we can connect to it
kris@kris-X682X 6:ee9c86f06eae 11 * during the next demonstration */
kris@kris-X682X 6:ee9c86f06eae 12 // memcpy(_peer_address, event.getPeerAddress().data(), sizeof(_peer_address));
kris@kris-X682X 6:ee9c86f06eae 13 //TODO: Connecting to the device breaks the event queue; it should. BUT there should start some new stuff
kris@kris-X682X 6:ee9c86f06eae 14 printf("[PERIPHERAL]\t Connected to peer: ");
kris@kris-X682X 6:ee9c86f06eae 15 print_address(event.getPeerAddress().data());
kris@kris-X682X 6:ee9c86f06eae 16 _handle = event.getConnectionHandle();
kris@kris-X682X 6:ee9c86f06eae 17 printf("[PERIPHERAL]\t I'm connected to someone, what should i do now?");
kris@kris-X682X 6:ee9c86f06eae 18 //Dispatch forever makes sure that we stay in this state until explicitly told otherwise (on disconnect).
kris@kris-X682X 10:d845189d146e 19
kris@kris-X682X 10:d845189d146e 20
kris@kris-X682X 10:d845189d146e 21 // MyStripSingleton::getInstance()->connectionFlash();
kris@kris-X682X 10:d845189d146e 22 // MyStripSingleton::getInstance()->resetColor();
kris@kris-X682X 10:d845189d146e 23 // _event_queue.call(callback(ledStuff));
kris@kris-X682X 6:ee9c86f06eae 24 _event_queue.dispatch_forever();
kris@kris-X682X 10:d845189d146e 25
kris@kris-X682X 6:ee9c86f06eae 26 }
kris@kris-X682X 6:ee9c86f06eae 27
kris@kris-X682X 6:ee9c86f06eae 28 void BleDevicePeripheral::stop() {
kris@kris-X682X 6:ee9c86f06eae 29 printf("[PERIPHERAL]\t Stopping \r\n");
kris@kris-X682X 6:ee9c86f06eae 30 _ble.gap().stopAdvertising(ble::LEGACY_ADVERTISING_HANDLE);
kris@kris-X682X 6:ee9c86f06eae 31 delete cs;
kris@kris-X682X 6:ee9c86f06eae 32 delete is;
kris@kris-X682X 10:d845189d146e 33 MyStripSingleton::getInstance()->resetColor();
kris@kris-X682X 6:ee9c86f06eae 34 if (_ble.hasInitialized()) {
kris@kris-X682X 6:ee9c86f06eae 35 _ble.shutdown();
kris@kris-X682X 6:ee9c86f06eae 36 }
kris@kris-X682X 6:ee9c86f06eae 37 }
kris@kris-X682X 6:ee9c86f06eae 38
kris@kris-X682X 7:9cda1b0f25ae 39 BleDevicePeripheral::~BleDevicePeripheral() {
kris@kris-X682X 7:9cda1b0f25ae 40 printf("[PERIPHERAL]\t Destructing the peripheral\r\n");
kris@kris-X682X 7:9cda1b0f25ae 41 }
kris@kris-X682X 7:9cda1b0f25ae 42
kris@kris-X682X 6:ee9c86f06eae 43 void BleDevicePeripheral::start() {
kris@kris-X682X 6:ee9c86f06eae 44
kris@kris-X682X 7:9cda1b0f25ae 45 ble_error_t error;
kris@kris-X682X 10:d845189d146e 46 /* Set up and start advertising */
kris@kris-X682X 10:d845189d146e 47 uint8_t adv_buffer[ble::LEGACY_ADVERTISING_MAX_SIZE];
kris@kris-X682X 10:d845189d146e 48 /* use the helper to build the payload */
kris@kris-X682X 10:d845189d146e 49 ble::AdvertisingDataBuilder adv_data_builder(
kris@kris-X682X 10:d845189d146e 50 adv_buffer
kris@kris-X682X 10:d845189d146e 51 );
kris@kris-X682X 6:ee9c86f06eae 52
kris@kris-X682X 10:d845189d146e 53 adv_data_builder.setFlags();
kris@kris-X682X 10:d845189d146e 54 adv_data_builder.setName("SSS BLE", true);
kris@kris-X682X 10:d845189d146e 55 ble::AdvertisingParameters adv_parameters(
kris@kris-X682X 10:d845189d146e 56 ble::advertising_type_t::CONNECTABLE_UNDIRECTED,
kris@kris-X682X 10:d845189d146e 57 ble::adv_interval_t(ble::millisecond_t(50))
kris@kris-X682X 10:d845189d146e 58 );
kris@kris-X682X 6:ee9c86f06eae 59
kris@kris-X682X 10:d845189d146e 60 error = _ble.gap().setAdvertisingParameters(
kris@kris-X682X 10:d845189d146e 61 ble::LEGACY_ADVERTISING_HANDLE,
kris@kris-X682X 10:d845189d146e 62 adv_parameters
kris@kris-X682X 10:d845189d146e 63 );
kris@kris-X682X 10:d845189d146e 64 if (error) {
kris@kris-X682X 10:d845189d146e 65 print_error(error, "[PERIPHERAL]\t Gap::setAdvertisingParameters() failed");
kris@kris-X682X 10:d845189d146e 66 return;
kris@kris-X682X 10:d845189d146e 67 }
kris@kris-X682X 10:d845189d146e 68 /* Set payload for the set */
kris@kris-X682X 10:d845189d146e 69 error = _ble.gap().setAdvertisingPayload(
kris@kris-X682X 10:d845189d146e 70 ble::LEGACY_ADVERTISING_HANDLE,
kris@kris-X682X 10:d845189d146e 71 adv_data_builder.getAdvertisingData()
kris@kris-X682X 10:d845189d146e 72 );
kris@kris-X682X 7:9cda1b0f25ae 73
kris@kris-X682X 10:d845189d146e 74 if (error) {
kris@kris-X682X 10:d845189d146e 75 print_error(error, "Gap::setAdvertisingPayload() failed");
kris@kris-X682X 10:d845189d146e 76 _event_queue.break_dispatch();
kris@kris-X682X 10:d845189d146e 77 return;
kris@kris-X682X 10:d845189d146e 78 }
kris@kris-X682X 6:ee9c86f06eae 79
kris@kris-X682X 6:ee9c86f06eae 80
kris@kris-X682X 6:ee9c86f06eae 81
kris@kris-X682X 10:d845189d146e 82 cs = new ColorService(_ble);
kris@kris-X682X 10:d845189d146e 83 is = new InterestService(_ble);
kris@kris-X682X 7:9cda1b0f25ae 84 printf("[PERIPHERAL]\t Starting advertising \r\n");
kris@kris-X682X 6:ee9c86f06eae 85
kris@kris-X682X 6:ee9c86f06eae 86 error = _ble.gap().startAdvertising(ble::LEGACY_ADVERTISING_HANDLE);
kris@kris-X682X 6:ee9c86f06eae 87
kris@kris-X682X 6:ee9c86f06eae 88 if (error) {
kris@kris-X682X 6:ee9c86f06eae 89 print_error(error, "[PERIPHERAL]\t Gap::startAdvertising() failed");
kris@kris-X682X 6:ee9c86f06eae 90 return;
kris@kris-X682X 6:ee9c86f06eae 91 }
kris@kris-X682X 6:ee9c86f06eae 92
kris@kris-X682X 6:ee9c86f06eae 93 printf("[PERIPHERAL]\t Set up BLE. I should now be advertising \r\n");
kris@kris-X682X 6:ee9c86f06eae 94 printf("[PERIPHERAL]\t Please connect a device\r\n");
kris@kris-X682X 6:ee9c86f06eae 95 }
kris@kris-X682X 6:ee9c86f06eae 96
kris@kris-X682X 6:ee9c86f06eae 97 BleDevicePeripheral::BleDevicePeripheral(const BLE &ble, EventQueue &eventQueue)
kris@kris-X682X 6:ee9c86f06eae 98 : BleDevice(ble, eventQueue){
kris@kris-X682X 6:ee9c86f06eae 99 }