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.
GAPPeripheral.h@11:dbc310addbf6, 2019-03-19 (annotated)
- Committer:
- loicguibert
- Date:
- Tue Mar 19 20:48:48 2019 +0000
- Revision:
- 11:dbc310addbf6
- Child:
- 12:856286ad4cdc
Point 5 done
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
loicguibert | 11:dbc310addbf6 | 1 | #pragma once |
loicguibert | 11:dbc310addbf6 | 2 | |
loicguibert | 11:dbc310addbf6 | 3 | // mbed os |
loicguibert | 11:dbc310addbf6 | 4 | #include <mbed.h> |
loicguibert | 11:dbc310addbf6 | 5 | #include "ble/BLE.h" |
loicguibert | 11:dbc310addbf6 | 6 | |
loicguibert | 11:dbc310addbf6 | 7 | // stl |
loicguibert | 11:dbc310addbf6 | 8 | #include <string> |
loicguibert | 11:dbc310addbf6 | 9 | #include <list> |
loicguibert | 11:dbc310addbf6 | 10 | |
loicguibert | 11:dbc310addbf6 | 11 | // local |
loicguibert | 11:dbc310addbf6 | 12 | #include "IDevKit.h" |
loicguibert | 11:dbc310addbf6 | 13 | #include "Logger.h" |
loicguibert | 11:dbc310addbf6 | 14 | |
loicguibert | 11:dbc310addbf6 | 15 | class GAPPeripheral : |
loicguibert | 11:dbc310addbf6 | 16 | private mbed::NonCopyable<GAPPeripheral>, |
loicguibert | 11:dbc310addbf6 | 17 | public ble::Gap::EventHandler { |
loicguibert | 11:dbc310addbf6 | 18 | public: |
loicguibert | 11:dbc310addbf6 | 19 | // constructor |
loicguibert | 11:dbc310addbf6 | 20 | GAPPeripheral(BLE& ble, |
loicguibert | 11:dbc310addbf6 | 21 | IDevKit& devKit, |
loicguibert | 11:dbc310addbf6 | 22 | const string& deviceName, |
loicguibert | 11:dbc310addbf6 | 23 | #ifdef _BLE_MBED_511 |
loicguibert | 11:dbc310addbf6 | 24 | ble::advertising_type_t advType, |
loicguibert | 11:dbc310addbf6 | 25 | #else |
loicguibert | 11:dbc310addbf6 | 26 | GapAdvertisingParams::AdvertisingType_t advType, |
loicguibert | 11:dbc310addbf6 | 27 | #endif |
loicguibert | 11:dbc310addbf6 | 28 | events::EventQueue& eventQueue, |
loicguibert | 11:dbc310addbf6 | 29 | Logger& logger); |
loicguibert | 11:dbc310addbf6 | 30 | |
loicguibert | 11:dbc310addbf6 | 31 | // destructor |
loicguibert | 11:dbc310addbf6 | 32 | ~GAPPeripheral(); |
loicguibert | 11:dbc310addbf6 | 33 | |
loicguibert | 11:dbc310addbf6 | 34 | #if defined(_BLE_MBED_511) |
loicguibert | 11:dbc310addbf6 | 35 | // called for starting advertising |
loicguibert | 11:dbc310addbf6 | 36 | void advertise(UUID serviceUUIDArray[], size_t arraySize); |
loicguibert | 11:dbc310addbf6 | 37 | #else |
loicguibert | 11:dbc310addbf6 | 38 | // called for starting advertising |
loicguibert | 11:dbc310addbf6 | 39 | void advertise(void); |
loicguibert | 11:dbc310addbf6 | 40 | #endif |
loicguibert | 11:dbc310addbf6 | 41 | |
loicguibert | 11:dbc310addbf6 | 42 | protected: |
loicguibert | 11:dbc310addbf6 | 43 | // protected methods (can be redefined by inheriting classes) |
loicguibert | 11:dbc310addbf6 | 44 | |
loicguibert | 11:dbc310addbf6 | 45 | // This is called when BLE interface is initialised |
loicguibert | 11:dbc310addbf6 | 46 | virtual void onInitComplete(BLE::InitializationCompleteCallbackContext *event); |
loicguibert | 11:dbc310addbf6 | 47 | |
loicguibert | 11:dbc310addbf6 | 48 | // methods used for setting the advertising data payload for a specific service |
loicguibert | 11:dbc310addbf6 | 49 | #if defined(_BLE_MBED_511) |
loicguibert | 11:dbc310addbf6 | 50 | void setServiceData(UUID serviceUUID, uint8_t* pServiceData, uint16_t serviceDataLength); |
loicguibert | 11:dbc310addbf6 | 51 | #else |
loicguibert | 11:dbc310addbf6 | 52 | static const int SERVICE_DATA_LENGTH = 8; |
loicguibert | 11:dbc310addbf6 | 53 | struct ServiceDataPayload { |
loicguibert | 11:dbc310addbf6 | 54 | uint16_t serviceUUID; |
loicguibert | 11:dbc310addbf6 | 55 | uint8_t serviceData[SERVICE_DATA_LENGTH]; |
loicguibert | 11:dbc310addbf6 | 56 | uint16_t serviceDataLength; |
loicguibert | 11:dbc310addbf6 | 57 | }; |
loicguibert | 11:dbc310addbf6 | 58 | void setAdvertisementServiceData(ServiceDataPayload* serviceDataPayloadArray, |
loicguibert | 11:dbc310addbf6 | 59 | uint8_t nbrOfServices); |
loicguibert | 11:dbc310addbf6 | 60 | #endif |
loicguibert | 11:dbc310addbf6 | 61 | static void uint16_encode(const uint16_t value, uint8_t* p_encoded_data); |
loicguibert | 11:dbc310addbf6 | 62 | static void int16_encode(const int16_t value, uint8_t* p_encoded_data); |
loicguibert | 11:dbc310addbf6 | 63 | static void uint32_encode(const uint32_t value, uint8_t* p_encoded_data); |
loicguibert | 11:dbc310addbf6 | 64 | |
loicguibert | 11:dbc310addbf6 | 65 | private: |
loicguibert | 11:dbc310addbf6 | 66 | // private methods |
loicguibert | 11:dbc310addbf6 | 67 | |
loicguibert | 11:dbc310addbf6 | 68 | #if defined(_BLE_MBED_511) |
loicguibert | 11:dbc310addbf6 | 69 | // methods used for setting the list of service uuids in the advertising packet |
loicguibert | 11:dbc310addbf6 | 70 | ble_error_t setLocalServiceList(UUID* serviceUUIDArray, uint8_t arraySize); |
loicguibert | 11:dbc310addbf6 | 71 | #endif |
loicguibert | 11:dbc310addbf6 | 72 | |
loicguibert | 11:dbc310addbf6 | 73 | // Schedule processing of events from the BLE middleware in the event queue. */ |
loicguibert | 11:dbc310addbf6 | 74 | void scheduleBleEvents(BLE::OnEventsToProcessCallbackContext *context); |
loicguibert | 11:dbc310addbf6 | 75 | |
loicguibert | 11:dbc310addbf6 | 76 | // called if timeout is reached during advertising, scanning or connection initiation |
loicguibert | 11:dbc310addbf6 | 77 | void onTimeOut(const Gap::TimeoutSource_t source); |
loicguibert | 11:dbc310addbf6 | 78 | |
loicguibert | 11:dbc310addbf6 | 79 | // This is called when BLE interface receives a connection request |
loicguibert | 11:dbc310addbf6 | 80 | void onConnect(const Gap::ConnectionCallbackParams_t *connection_event); |
loicguibert | 11:dbc310addbf6 | 81 | |
loicguibert | 11:dbc310addbf6 | 82 | // Set up and start advertising |
loicguibert | 11:dbc310addbf6 | 83 | void startAdvertising(void); |
loicguibert | 11:dbc310addbf6 | 84 | |
loicguibert | 11:dbc310addbf6 | 85 | protected: |
loicguibert | 11:dbc310addbf6 | 86 | // protected data members |
loicguibert | 11:dbc310addbf6 | 87 | IDevKit& m_devKit; |
loicguibert | 11:dbc310addbf6 | 88 | |
loicguibert | 11:dbc310addbf6 | 89 | private: |
loicguibert | 11:dbc310addbf6 | 90 | // private data members |
loicguibert | 11:dbc310addbf6 | 91 | BLE& m_ble; |
loicguibert | 11:dbc310addbf6 | 92 | const string& m_deviceName; |
loicguibert | 11:dbc310addbf6 | 93 | #ifdef _BLE_MBED_511 |
loicguibert | 11:dbc310addbf6 | 94 | ble::advertising_type_t m_advType; |
loicguibert | 11:dbc310addbf6 | 95 | #else |
loicguibert | 11:dbc310addbf6 | 96 | GapAdvertisingParams::AdvertisingType_t m_advType; |
loicguibert | 11:dbc310addbf6 | 97 | #endif |
loicguibert | 11:dbc310addbf6 | 98 | events::EventQueue& m_eventQueue; |
loicguibert | 11:dbc310addbf6 | 99 | |
loicguibert | 11:dbc310addbf6 | 100 | // blink interval |
loicguibert | 11:dbc310addbf6 | 101 | static const int BLINK_INTERVAL = 1000; |
loicguibert | 11:dbc310addbf6 | 102 | |
loicguibert | 11:dbc310addbf6 | 103 | // advertising interval |
loicguibert | 11:dbc310addbf6 | 104 | static const int ADVERTISING_INTERVAL = 200; |
loicguibert | 11:dbc310addbf6 | 105 | |
loicguibert | 11:dbc310addbf6 | 106 | #ifdef _BLE_MBED_511 |
loicguibert | 11:dbc310addbf6 | 107 | // buffer and builder used for advertising payload |
loicguibert | 11:dbc310addbf6 | 108 | uint16_t m_advertisingBufferSize; |
loicguibert | 11:dbc310addbf6 | 109 | uint8_t* m_pAdvertisingBuffer; |
loicguibert | 11:dbc310addbf6 | 110 | ble::AdvertisingDataBuilder* m_pAdvertisingDataBuilder; |
loicguibert | 11:dbc310addbf6 | 111 | #endif |
loicguibert | 11:dbc310addbf6 | 112 | // logger instance |
loicguibert | 11:dbc310addbf6 | 113 | Logger& m_logger; |
loicguibert | 11:dbc310addbf6 | 114 | }; |