Kris Scholte Lubberink
/
SSS_Ble
Ble for smart sOlutions
source/BleDevicePeripheral.cpp@10:d845189d146e, 2019-06-14 (annotated)
- 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?
User | Revision | Line number | New 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 | } |