Ble for smart sOlutions

Dependencies:   Adafruit_WS2801

Committer:
kris@kris-X682X
Date:
Mon May 20 09:55:38 2019 +0200
Revision:
6:ee9c86f06eae
Child:
7:9cda1b0f25ae
WIP

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