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