Ble for smart sOlutions

Dependencies:   Adafruit_WS2801

Committer:
kris@kris-X682X
Date:
Thu Jun 20 13:20:24 2019 +0200
Revision:
11:d6ed1437c2ee
Parent:
10:d845189d146e
Refactored

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