Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of BLE-GAP by
Diff: source/main.cpp
- Revision:
- 10:6f1c573093c1
- Parent:
- 1:d4bb1e33950e
- Child:
- 11:37872bf83624
--- a/source/main.cpp Tue Sep 04 14:30:21 2018 +0100 +++ b/source/main.cpp Wed Sep 26 15:00:23 2018 +0100 @@ -89,10 +89,22 @@ static const size_t ADV_PARAM_SET_MAX = sizeof(advertising_params) / sizeof(GapAdvertisingParams); +static const char* to_string(Gap::Phy_t phy) { + switch(phy.value()) { + case Gap::Phy_t::LE_1M: + return "LE 1M"; + case Gap::Phy_t::LE_2M: + return "LE 2M"; + case Gap::Phy_t::LE_CODED: + return "LE coded"; + default: + return "invalid PHY"; + } +} /** Demonstrate advertising, scanning and connecting */ -class GAPDevice : private mbed::NonCopyable<GAPDevice> +class GAPDevice : private mbed::NonCopyable<GAPDevice>, public Gap::EventHandler { public: GAPDevice() : @@ -132,6 +144,9 @@ makeFunctionPointer(this, &GAPDevice::on_timeout) ); + /* handle gap events */ + _ble.gap().setEventHandler(this); + error = _ble.init(this, &GAPDevice::on_init_complete); if (error) { @@ -162,6 +177,14 @@ printf("Device address: %02x:%02x:%02x:%02x:%02x:%02x\r\n", addr[5], addr[4], addr[3], addr[2], addr[1], addr[0]); + /* setup the default phy used in connection to 2M to reduce power consumption */ + Gap::Phys_t tx_phys = { /* 1M */ false, /* 2M */ true, /* coded */ false }; + Gap::Phys_t rx_phys = { /* 1M */ false, /* 2M */ true, /* coded */ false }; + ble_error_t err = _ble.gap().setPreferedPhys(&tx_phys, &rx_phys); + if (err) { + printf("INFO: GAP::setPreferedPhys failed with error code %s", BLE::errorToString(err)); + } + /* all calls are serialised on the user thread through the event queue */ _event_queue.call(this, &GAPDevice::demo_mode_start); }; @@ -378,6 +401,56 @@ _event_queue.call(this, &GAPDevice::demo_mode_end); }; + /** + * Implementation of Gap::EventHandler::onReadPhy + */ + virtual void onReadPhy( + ble_error_t error, + Gap::Handle_t connectionHandle, + Gap::Phy_t txPhy, + Gap::Phy_t rxPhy + ) { + if (error) { + printf( + "Phy read on connection %d failed with error code %s\r\n", + connectionHandle, + BLE::errorToString(error) + ); + } else { + printf( + "Phy read on connection %d - Tx Phy: %s, Rx Phy: %s\r\n", + connectionHandle, + to_string(txPhy), + to_string(rxPhy) + ); + } + } + + /** + * Implementation of Gap::EventHandler::onPhyUpdateComplete + */ + virtual void onPhyUpdateComplete( + ble_error_t error, + Gap::Handle_t connectionHandle, + Gap::Phy_t txPhy, + Gap::Phy_t rxPhy + ) { + if (error) { + printf( + "Phy update on connection: %d failed with error code %s\r\n", + connectionHandle, + BLE::errorToString(error) + ); + } else { + printf( + "Phy update on connection %d - Tx Phy: %s, Rx Phy: %s\r\n", + connectionHandle, + to_string(txPhy), + to_string(rxPhy) + ); + } + } + /** called if timeout is reached during advertising, scanning * or connection initiation */ void on_timeout(const Gap::TimeoutSource_t source)