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