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_API by
Diff: hw/BLEDevice.h
- Revision:
- 41:7ae5c71cd44c
- Parent:
- 40:d405c9b1419d
- Child:
- 42:06e75fee52cf
--- a/hw/BLEDevice.h Thu May 22 15:02:40 2014 +0100
+++ b/hw/BLEDevice.h Fri May 23 08:56:31 2014 +0100
@@ -22,18 +22,27 @@
#include "hw/Gap.h"
#include "hw/GattServer.h"
-/**************************************************************************/
-/*!
- \brief
- The base class used to abstract away BLE capable radio transceivers
- or SOCs, to enable this BLE API to work with any radio transparently.
-*/
-/**************************************************************************/
+class BLEDeviceInstanceBase; /* forward declaration */
+
+/**
+ * BLEDevice uses composition to hide an interface object encapsulating the
+ * backend transport.
+ *
+ * The following API is used to create the singleton interface object. An
+ * implementation for this function must be provided by the device-specific
+ * library, otherwise there will be a linker error.
+ */
+extern BLEDeviceInstanceBase *createBLEDeviceInstance(void);
+
+/**
+ * The base class used to abstract away BLE capable radio transceivers or SOCs,
+ * to enable this BLE API to work with any radio transparently.
+ */
class BLEDevice
{
public:
- virtual ble_error_t init() = 0;
- virtual ble_error_t reset(void) = 0;
+ ble_error_t init();
+ ble_error_t reset(void);
/* GAP specific APIs */
public:
@@ -50,41 +59,72 @@
ble_error_t stopAdvertising(void);
ble_error_t disconnect(void);
-public: /* TODO: to be made private soon */
+public:
+ BLEDevice() : transport(createBLEDeviceInstance()) {
+ /* empty */
+ }
+
+private:
+ BLEDeviceInstanceBase *transport;
+};
+
+/**
+ * The interface for the transport object to be created by the target library's
+ * createBLEDeviceInstance().
+ */
+class BLEDeviceInstanceBase
+{
+public:
virtual Gap& getGap() = 0;
virtual GattServer& getGattServer() = 0;
+ virtual ble_error_t init(void) = 0;
+ virtual ble_error_t reset(void) = 0;
};
+
+/* BLEDevice methods. Most of these simply forward the calls to the underlying
+ * transport.*/
+
+inline ble_error_t
+BLEDevice::init() {
+ return transport->init();
+}
+
+inline ble_error_t
+BLEDevice::reset(void) {
+ return transport->reset();
+}
+
inline ble_error_t
BLEDevice::setAddress(Gap::addr_type_t type, const uint8_t address[6]) {
- return getGap().setAddress(type, address);
+ return transport->getGap().setAddress(type, address);
}
inline ble_error_t
BLEDevice::setAdvertisingData(const GapAdvertisingData &ADStructures,
const GapAdvertisingData &scanResponse) {
- return getGap().setAdvertisingData(ADStructures, scanResponse);
+ return transport->getGap().setAdvertisingData(ADStructures, scanResponse);
}
inline ble_error_t
BLEDevice::setAdvertisingData(const GapAdvertisingData &ADStructures) {
GapAdvertisingData scanResponse;
- return getGap().setAdvertisingData(ADStructures, scanResponse);
+ return transport->getGap().setAdvertisingData(ADStructures, scanResponse);
}
inline ble_error_t
BLEDevice::startAdvertising(GapAdvertisingParams &advParams) {
- return getGap().startAdvertising(advParams);
+ return transport->getGap().startAdvertising(advParams);
}
inline ble_error_t
BLEDevice::stopAdvertising(void) {
- return getGap().stopAdvertising();
+ return transport->getGap().stopAdvertising();
}
inline ble_error_t
BLEDevice::disconnect(void) {
- return getGap().disconnect();
+ return transport->getGap().disconnect();
}
#endif // ifndef __BLE_DEVICE_H__
