Kris Scholte Lubberink
/
SSS_Ble
Ble for smart sOlutions
source/BleDevicePeripheral.cpp@11:d6ed1437c2ee, 2019-06-20 (annotated)
- 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?
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 | 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 | } |