Lancaster University's fork of the mbed BLE API. Lives on github, https://github.com/lancaster-university/BLE_API

Dependents:   microbit-dal microbit-dal microbit-ble-open microbit-dal ... more

Fork of BLE_API by Bluetooth Low Energy

Files at this revision

API Documentation at this revision

Comitter:
rgrover1
Date:
Mon Nov 02 09:09:07 2015 +0000
Parent:
859:2a1cb15098ba
Child:
861:2afa79e3ed0a
Commit message:
Synchronized with git rev 249cabae
Author: Rohit Grover
Merge pull request #82 from jrobeson/patch-1

use the github url public url in module.json

Changed in this revision

ble/BLE.h Show annotated file Show diff for this revision Revisions of this file
ble/BLEInstanceBase.h Show annotated file Show diff for this revision Revisions of this file
ble/Gap.h Show annotated file Show diff for this revision Revisions of this file
ble/UUID.h Show annotated file Show diff for this revision Revisions of this file
ble/blecommon.h Show annotated file Show diff for this revision Revisions of this file
ble/services/EddystoneConfigService.h Show annotated file Show diff for this revision Revisions of this file
ble/services/EddystoneService.h Show annotated file Show diff for this revision Revisions of this file
ble/services/HealthThermometerService.h Show annotated file Show diff for this revision Revisions of this file
ble/services/LinkLossService.h Show annotated file Show diff for this revision Revisions of this file
ble/services/UARTService.h Show annotated file Show diff for this revision Revisions of this file
ble/services/URIBeaconConfigService.h Show annotated file Show diff for this revision Revisions of this file
module.json Show annotated file Show diff for this revision Revisions of this file
source/BLE.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/ble/BLE.h	Mon Nov 02 09:09:07 2015 +0000
+++ b/ble/BLE.h	Mon Nov 02 09:09:07 2015 +0000
@@ -21,15 +21,9 @@
 #include "Gap.h"
 #include "GattServer.h"
 #include "GattClient.h"
+#include "BLEInstanceBase.h"
 
-#ifdef YOTTA_CFG_MBED_OS
-#include "mbed-drivers/mbed_error.h"
-#else
 #include "mbed_error.h"
-#endif
-
-/* forward declaration for the implementation class */
-class BLEInstanceBase;
 
 /**
  * The base class used to abstract away BLE capable radio transceivers or SOCs,
@@ -38,20 +32,6 @@
 class BLE
 {
 public:
-    typedef unsigned InstanceID_t; /** The type returned by BLE::getInstanceID(). */
-
-    /**
-     * The function signature for callbacks for initialization completion.
-     * @param  ble
-     *             A reference to the BLE instance being initialized.
-     * @param  error
-     *             This captures the result of initialization. It is set to
-     *             BLE_ERROR_NONE if initialization completed successfully. Else
-     *             the error value is implementation specific.
-     *
-     */
-    typedef void (*InitializationCompleteCallback_t)(BLE &ble, ble_error_t error);
-
     /**
      * Initialize the BLE controller. This should be called before using
      * anything else in the BLE_API.
@@ -62,44 +42,21 @@
      * system startup. It may not be safe to call init() from global static
      * context where ordering is compiler specific and can't be guaranteed--it
      * is safe to call BLE::init() from within main().
-     *
-     * @param  callback
-     *           A callback for when initialization completes for a BLE
-     *           instance. This is an optional parameter, if no callback is
-     *           setup the application can still determine the status of
-     *           initialization using BLE::hasInitialized() (see below).
-     *
-     * @return  BLE_ERROR_NONE if the initialization procedure was started
-     *     successfully.
-     *
-     * @note The underlying stack must invoke the initialization completion
-     *     callback in response to init(). In some cases, initialization is
-     *     instantaneous (or blocking); if so, it is acceptable for the stack-
-     *     specific implementation of init() to invoke the completion callback
-     *     directly--i.e. within its own context.
-     *
-     * @note Nearly all BLE APIs would return
-     *     BLE_ERROR_INITIALIZATION_INCOMPLETE if used on an instance before the
-     *     corresponding transport is initialized.
      */
-    ble_error_t init(InitializationCompleteCallback_t callback = NULL);
-
-    /**
-     * @return true if initialization has completed for the underlying BLE
-     *     transport.
-     *
-     * The application can setup a callback to signal completion of
-     * initialization when using init(). Otherwise, this method can be used to
-     * poll the state of initialization.
-     */
-    bool hasInitialized(void) const;
+    ble_error_t init();
 
     /**
      * Purge the BLE stack of GATT and GAP state. init() must be called
      * afterwards to re-instate services and GAP state. This API offers a way to
      * repopulate the GATT database with new services and characteristics.
      */
-    ble_error_t shutdown(void);
+    ble_error_t shutdown(void) {
+        clearAdvertisingPayload();
+        if (!transport) {
+            error("bad handle to underlying transport");
+        }
+        return transport->shutdown();
+    }
 
     /**
      * This call allows the application to get the BLE stack version information.
@@ -107,36 +64,81 @@
      * @return  A pointer to a const string representing the version.
      *          Note: The string is owned by the BLE_API.
      */
-    const char *getVersion(void);
+    const char *getVersion(void) {
+        if (!transport) {
+            error("bad handle to underlying transport");
+        }
+        return transport->getVersion();
+    }
 
     /*
      * Accessors to GAP. Please refer to Gap.h. All GAP related functionality requires
      * going through this accessor.
      */
-    const Gap &gap() const;
-    Gap &gap();
+    const Gap &gap() const {
+        if (!transport) {
+            error("bad handle to underlying transport");
+        }
+        return transport->getGap();
+    }
+    Gap &gap() {
+        if (!transport) {
+            error("bad handle to underlying transport");
+        }
+        return transport->getGap();
+    }
 
     /*
      * Accessors to GATT Server. Please refer to GattServer.h. All GATTServer related
      * functionality requires going through this accessor.
      */
-    const GattServer& gattServer() const;
-    GattServer& gattServer();
+    const GattServer& gattServer() const {
+        if (!transport) {
+            error("bad handle to underlying transport");
+        }
+        return transport->getGattServer();
+    }
+    GattServer& gattServer() {
+        if (!transport) {
+            error("bad handle to underlying transport");
+        }
+        return transport->getGattServer();
+    }
 
     /*
      * Accessors to GATT Client. Please refer to GattClient.h. All GATTClient related
      * functionality requires going through this accessor.
      */
-    const GattClient& gattClient() const;
-    GattClient& gattClient();
+    const GattClient& gattClient() const {
+        if (!transport) {
+            error("bad handle to underlying transport");
+        }
+        return transport->getGattClient();
+    }
+    GattClient& gattClient() {
+        if (!transport) {
+            error("bad handle to underlying transport");
+        }
+        return transport->getGattClient();
+    }
 
     /*
      * Accessors to Security Manager. Please refer to SecurityManager.h. All
      * SecurityManager related functionality requires going through this
      * accessor.
      */
-    const SecurityManager& securityManager() const;
-    SecurityManager& securityManager();
+    const SecurityManager& securityManager() const {
+        if (!transport) {
+            error("bad handle to underlying transport");
+        }
+        return transport->getSecurityManager();
+    }
+    SecurityManager& securityManager() {
+        if (!transport) {
+            error("bad handle to underlying transport");
+        }
+        return transport->getSecurityManager();
+    }
 
     /**
      * Yield control to the BLE stack or to other tasks waiting for events. This
@@ -145,9 +147,15 @@
      * returning (to service the stack). This is not always interchangeable with
      * WFE().
      */
-    void waitForEvent(void);
+    void waitForEvent(void) {
+        if (!transport) {
+            error("bad handle to underlying transport");
+        }
+        transport->waitForEvent();
+    }
 
 public:
+    typedef unsigned InstanceID_t;
     static const InstanceID_t DEFAULT_INSTANCE = 0;
 #ifndef YOTTA_CFG_BLE_INSTANCES_COUNT
     static const InstanceID_t NUM_INSTANCES = 1;
@@ -182,12 +190,6 @@
      */
     BLE(InstanceID_t instanceID = DEFAULT_INSTANCE);
 
-    /**
-     * Fetch the ID of a BLE instance. Typically there would only be the DEFAULT_INSTANCE.
-     */
-    InstanceID_t getInstanceID(void) const {
-        return instanceID;
-    }
 
     /*
      * Deprecation alert!
@@ -1392,7 +1394,6 @@
     BLE &operator=(const BLE &);
 
 private:
-    InstanceID_t     instanceID;
     BLEInstanceBase *transport; /* the device specific backend */
 };
 
--- a/ble/BLEInstanceBase.h	Mon Nov 02 09:09:07 2015 +0000
+++ b/ble/BLEInstanceBase.h	Mon Nov 02 09:09:07 2015 +0000
@@ -18,8 +18,6 @@
 #define __BLE_DEVICE_INSTANCE_BASE__
 
 #include "Gap.h"
-#include "ble/SecurityManager.h"
-#include "ble/BLE.h"
 
 /* forward declarations */
 class GattServer;
@@ -32,18 +30,17 @@
 class BLEInstanceBase
 {
 public:
-    virtual ble_error_t            init(BLE::InstanceID_t instanceID, BLE::InitializationCompleteCallback_t) = 0;
-    virtual bool                   hasInitialized(void) const = 0;
-    virtual ble_error_t            shutdown(void)             = 0;
-    virtual const char *           getVersion(void)           = 0;
-    virtual Gap&                   getGap()                   = 0;
-    virtual const Gap&             getGap() const             = 0;
-    virtual GattServer&            getGattServer()            = 0;
-    virtual const GattServer&      getGattServer() const      = 0;
-    virtual GattClient&            getGattClient()            = 0;
-    virtual SecurityManager&       getSecurityManager()       = 0;
+    virtual ble_error_t init(void)                  = 0;
+    virtual ble_error_t shutdown(void)              = 0;
+    virtual const char *getVersion(void)            = 0;
+    virtual Gap&        getGap()                    = 0;
+    virtual const Gap&  getGap() const              = 0;
+    virtual GattServer& getGattServer()             = 0;
+    virtual const GattServer& getGattServer() const = 0;
+    virtual GattClient& getGattClient()             = 0;
+    virtual SecurityManager& getSecurityManager()   = 0;
     virtual const SecurityManager& getSecurityManager() const = 0;
-    virtual void                   waitForEvent(void)         = 0;
+    virtual void        waitForEvent(void)         = 0;
 };
 
 /**
--- a/ble/Gap.h	Mon Nov 02 09:09:07 2015 +0000
+++ b/ble/Gap.h	Mon Nov 02 09:09:07 2015 +0000
@@ -867,8 +867,8 @@
     }
 
 private:
-    virtual ble_error_t setAdvertisingData(const GapAdvertisingData &advData, const GapAdvertisingData &scanResponse) = 0;
-    virtual ble_error_t startAdvertising(const GapAdvertisingParams &) = 0;
+    virtual ble_error_t setAdvertisingData(const GapAdvertisingData &, const GapAdvertisingData &) = 0;
+    virtual ble_error_t startAdvertising(const GapAdvertisingParams &)                             = 0;
 
 public:
     /**
--- a/ble/UUID.h	Mon Nov 02 09:09:07 2015 +0000
+++ b/ble/UUID.h	Mon Nov 02 09:09:07 2015 +0000
@@ -74,7 +74,7 @@
      *
      * @note we don't yet support 32-bit shortened UUIDs.
      */
-    UUID(ShortUUIDBytes_t _shortUUID) : type(UUID_TYPE_SHORT), baseUUID(), shortUUID(_shortUUID) {
+    UUID(ShortUUIDBytes_t shortUUID) : type(UUID_TYPE_SHORT), baseUUID(), shortUUID(shortUUID) {
         /* empty */
     }
 
--- a/ble/blecommon.h	Mon Nov 02 09:09:07 2015 +0000
+++ b/ble/blecommon.h	Mon Nov 02 09:09:07 2015 +0000
@@ -114,18 +114,16 @@
 */
 /**************************************************************************/
 enum ble_error_t {
-    BLE_ERROR_NONE                      = 0, /**< No error */
-    BLE_ERROR_BUFFER_OVERFLOW           = 1, /**< The requested action would cause a buffer overflow and has been aborted */
-    BLE_ERROR_NOT_IMPLEMENTED           = 2, /**< Requested a feature that isn't yet implement or isn't supported by the target HW */
-    BLE_ERROR_PARAM_OUT_OF_RANGE        = 3, /**< One of the supplied parameters is outside the valid range */
-    BLE_ERROR_INVALID_PARAM             = 4, /**< One of the supplied parameters is invalid */
-    BLE_STACK_BUSY                      = 5, /**< The stack is busy */
-    BLE_ERROR_INVALID_STATE             = 6, /**< Invalid state. */
-    BLE_ERROR_NO_MEM                    = 7, /**< Out of Memory */
-    BLE_ERROR_OPERATION_NOT_PERMITTED   = 8,
-    BLE_ERROR_INITIALIZATION_INCOMPLETE = 9,
-    BLE_ERROR_ALREADY_INITIALIZED       = 10,
-    BLE_ERROR_UNSPECIFIED               = 11, /**< Unknown error. */
+    BLE_ERROR_NONE                    = 0, /**< No error */
+    BLE_ERROR_BUFFER_OVERFLOW         = 1, /**< The requested action would cause a buffer overflow and has been aborted */
+    BLE_ERROR_NOT_IMPLEMENTED         = 2, /**< Requested a feature that isn't yet implement or isn't supported by the target HW */
+    BLE_ERROR_PARAM_OUT_OF_RANGE      = 3, /**< One of the supplied parameters is outside the valid range */
+    BLE_ERROR_INVALID_PARAM           = 4, /**< One of the supplied parameters is invalid */
+    BLE_STACK_BUSY                    = 5, /**< The stack is busy */
+    BLE_ERROR_INVALID_STATE           = 6, /**< Invalid state. */
+    BLE_ERROR_NO_MEM                  = 7, /**< Out of Memory */
+    BLE_ERROR_OPERATION_NOT_PERMITTED = 8,
+    BLE_ERROR_UNSPECIFIED             = 9, /**< Unknown error. */
 };
 
 /** @brief Default MTU size. */
--- a/ble/services/EddystoneConfigService.h	Mon Nov 02 09:09:07 2015 +0000
+++ b/ble/services/EddystoneConfigService.h	Mon Nov 02 09:09:07 2015 +0000
@@ -285,7 +285,7 @@
         ble.setTxPower(radioPowerLevels[params.txPowerMode]);
         ble.setDeviceName(reinterpret_cast<const uint8_t *>(&DEVICE_NAME));
         ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
-        ble.setAdvertisingInterval(ADVERTISING_INTERVAL_MSEC);
+        ble.setAdvertisingInterval(GapAdvertisingParams::MSEC_TO_ADVERTISEMENT_DURATION_UNITS(ADVERTISING_INTERVAL_MSEC));
     }
 
     /*
@@ -306,7 +306,7 @@
             eddyServ.setTLMFrameData(params.tlmVersion, params.tlmBeaconPeriod);
         }
         if (params.uriEnabled) {
-            eddyServ.setURLFrameEncodedData(params.advPowerLevels[params.txPowerMode], (const char *) params.uriData, params.uriDataLength, params.uriBeaconPeriod);
+            eddyServ.setURLFrameData(params.advPowerLevels[params.txPowerMode], (const char *) params.uriData, params.uriBeaconPeriod);
         }
         if (params.uidEnabled) {
             eddyServ.setUIDFrameData(params.advPowerLevels[params.txPowerMode],
@@ -340,7 +340,7 @@
         } else if (handle == uriDataChar.getValueHandle()) {
             params.uriDataLength = writeParams->len;
             memset(params.uriData, 0x00, URI_DATA_MAX);                      // clear URI string
-            memcpy(params.uriData, writeParams->data, writeParams->len); // set URI string
+            memcpy(params.uriData, writeParams->data, params.uriDataLength); // set URI string
             params.uriEnabled = true;
             INFO("URI = %s, URILen = %d", writeParams->data, writeParams->len);
         } else if (handle == flagsChar.getValueHandle()) {
--- a/ble/services/EddystoneService.h	Mon Nov 02 09:09:07 2015 +0000
+++ b/ble/services/EddystoneService.h	Mon Nov 02 09:09:07 2015 +0000
@@ -175,40 +175,16 @@
             urlIsSet = false;
             return false;
         }
+        defaultUrlPower = power;
         encodeURL(urlIn, defaultUriData, defaultUriDataLength); // encode URL to URL Formatting
         if (defaultUriDataLength > URI_DATA_MAX) {
             return true;                                        // error, URL is too big
         }
-        defaultUrlPower = power;
         urlAdvPeriod = urlAdvPeriodIn;
         urlIsSet     = true;
         return false;
     }
 
-    /**
-     *  Set Eddystone URL Frame information.
-     *  @param[in] power              TX Power in dB measured at 0 meters from the device.
-     *  @param[in] encodedUrlIn       Encoded URL
-     *  @param[in] encodedUrlInLength Length of the encoded URL
-     *  @param[in] urlAdvPeriodIn     How long to advertise the URL frame (measured in # of adv periods)
-     *  @return false on success, true on failure.
-     */
-    bool setURLFrameEncodedData(int8_t power, const char *encodedUrlIn, uint8_t encodedUrlInLength, uint32_t urlAdvPeriodIn) {
-        if (0 == urlAdvPeriodIn) {
-            urlIsSet = false;
-            return false;
-        }
-        memcpy(defaultUriData, encodedUrlIn, encodedUrlInLength);
-        if (defaultUriDataLength > URI_DATA_MAX) {
-            return true;                                        // error, URL is too big
-        }
-        defaultUrlPower      = power;
-        defaultUriDataLength = encodedUrlInLength;
-        urlAdvPeriod         = urlAdvPeriodIn;
-        urlIsSet             = true;
-        return false;
-    }
-
     /*
     *  Construct URL frame from private variables
     *  @param[in/out] Data pointer to array to store constructed frame in
@@ -260,10 +236,6 @@
     *  @return number of bytes used. negative number indicates error message.
     */
     int constructTLMFrame(uint8_t *Data, uint8_t maxSize) {
-        uint32_t now = timeSinceBootTimer.read_ms();
-        TlmTimeSinceBoot += (now - lastBootTimerRead) / 100;
-        lastBootTimerRead = now;
-
         int index = 0;
         Data[index++] = FRAME_TYPE_TLM;                    // Eddystone frame type = Telemetry
         Data[index++] = TlmVersion;                        // TLM Version Number
@@ -320,6 +292,14 @@
     }
 
     /*
+    *  callback function, called every 0.1s, incriments the TimeSinceBoot field in the TLM frame
+    *  @return nothing
+    */
+    void tsbCallback(void) {
+        TlmTimeSinceBoot++;
+    }
+
+    /*
     * Update advertising data
     * @return true on success, false on failure
     */
@@ -520,8 +500,7 @@
             // Make double sure the PDUCount and TimeSinceBoot fields are set to zero at reset
             updateTlmPduCount(0);
             updateTlmTimeSinceBoot(0);
-            lastBootTimerRead = 0;
-            timeSinceBootTimer.start();
+            timeSinceBootTick.attach(this, &EddystoneService::tsbCallback, 0.1); // incriment the TimeSinceBoot ticker every 0.1s
             tlmTicker.attach(this, &EddystoneService::tlmCallback, TlmAdvPeriod);
             DBG("attached tlmCallback every %d seconds", TlmAdvPeriod);
         }
@@ -540,8 +519,7 @@
     BLEDevice           &ble;
     uint16_t            advPeriodus;
     uint8_t             txPower;
-    Timer               timeSinceBootTimer;
-    volatile uint32_t   lastBootTimerRead;
+    Ticker              timeSinceBootTick;  // counter that counts time since boot
     volatile bool       advLock;
     volatile FrameTypes frameIndex;
     Timeout             stopAdv;
--- a/ble/services/HealthThermometerService.h	Mon Nov 02 09:09:07 2015 +0000
+++ b/ble/services/HealthThermometerService.h	Mon Nov 02 09:09:07 2015 +0000
@@ -17,7 +17,7 @@
 #ifndef __BLE_HEALTH_THERMOMETER_SERVICE_H__
 #define __BLE_HEALTH_THERMOMETER_SERVICE_H__
 
-#include "ble/BLE.h"
+#include "BLE.h"
 
 /**
 * @class HealthThermometerService
--- a/ble/services/LinkLossService.h	Mon Nov 02 09:09:07 2015 +0000
+++ b/ble/services/LinkLossService.h	Mon Nov 02 09:09:07 2015 +0000
@@ -17,7 +17,7 @@
 #ifndef __BLE_LINK_LOSS_SERVICE_H__
 #define __BLE_LINK_LOSS_SERVICE_H__
 
-#include "ble/Gap.h"
+#include "Gap.h"
 
 /**
 * @class LinkLossService
@@ -55,7 +55,7 @@
         ble.addService(linkLossService);
         serviceAdded = true;
 
-        ble.onDisconnection(this, &LinkLossService::onDisconnectionFilter);
+        ble.addToDisconnectionCallChain(this, &LinkLossService::onDisconnectionFilter);
         ble.onDataWritten(this, &LinkLossService::onDataWritten);
     }
 
@@ -86,7 +86,7 @@
         }
     }
 
-    void onDisconnectionFilter(const Gap::DisconnectionCallbackParams_t *params) {
+    void onDisconnectionFilter(void) {
         if (alertLevel != NO_ALERT) {
             callback(alertLevel);
         }
--- a/ble/services/UARTService.h	Mon Nov 02 09:09:07 2015 +0000
+++ b/ble/services/UARTService.h	Mon Nov 02 09:09:07 2015 +0000
@@ -17,13 +17,8 @@
 #ifndef __BLE_UART_SERVICE_H__
 #define __BLE_UART_SERVICE_H__
 
-#ifdef YOTTA_CFG_MBED_OS
-#include "mbed-drivers/mbed.h"
-#include "mbed-drivers/Stream.h"
-#else
 #include "mbed.h"
 #include "Stream.h"
-#endif
 
 #include "ble/UUID.h"
 #include "ble/BLE.h"
--- a/ble/services/URIBeaconConfigService.h	Mon Nov 02 09:09:07 2015 +0000
+++ b/ble/services/URIBeaconConfigService.h	Mon Nov 02 09:09:07 2015 +0000
@@ -18,12 +18,7 @@
 #define SERVICES_URIBEACONCONFIGSERVICE_H_
 
 #include "ble/BLE.h"
-
-#ifdef YOTTA_CFG_MBED_OS
-#include "mbed-drivers/mbed.h"
-#else
 #include "mbed.h"
-#endif
 
 extern const uint8_t UUID_URI_BEACON_SERVICE[UUID::LENGTH_OF_LONG_UUID];
 extern const uint8_t UUID_LOCK_STATE_CHAR[UUID::LENGTH_OF_LONG_UUID];
--- a/module.json	Mon Nov 02 09:09:07 2015 +0000
+++ b/module.json	Mon Nov 02 09:09:07 2015 +0000
@@ -1,6 +1,6 @@
 {
   "name": "ble",
-  "version": "1.1.0",
+  "version": "1.0.0",
   "description": "The BLE module offers a high level abstraction for using Bluetooth Low Energy on multiple platforms.",
   "keywords": [
     "Bluetooth",
@@ -10,7 +10,7 @@
   ],
   "author": "Rohit Grover",
   "repository": {
-    "url": "git@github.com:ARMmbed/ble.git",
+    "url": "https://github.com/ARMmbed/ble.git",
     "type": "git"
   },
   "homepage": "http://mbed.org/ble",
@@ -28,9 +28,6 @@
     "nrf51822": {
       "ble-nrf51822": "^1.0.0"
     },
-    "cordio": {
-      "ble-wicentric": "~0.0.0"
-    },
     "mbed-classic": {
       "mbed-classic": "~0.0.1"
     },
--- a/source/BLE.cpp	Mon Nov 02 09:09:07 2015 +0000
+++ b/source/BLE.cpp	Mon Nov 02 09:09:07 2015 +0000
@@ -15,16 +15,15 @@
  */
 
 #include "ble/BLE.h"
-#include "ble/BLEInstanceBase.h"
 
 #if defined(TARGET_OTA_ENABLED)
 #include "ble/services/DFUService.h"
 #endif
 
 ble_error_t
-BLE::init(BLE::InitializationCompleteCallback_t callback)
+BLE::init()
 {
-    ble_error_t err = transport->init(instanceID, callback);
+    ble_error_t err = transport->init();
     if (err != BLE_ERROR_NONE) {
         return err;
     }
@@ -106,7 +105,7 @@
     return badSingleton;
 }
 
-BLE::BLE(InstanceID_t instanceIDIn) : instanceID(instanceIDIn), transport()
+BLE::BLE(InstanceID_t instanceID) : transport()
 {
     static BLEInstanceBase *transportInstances[NUM_INSTANCES];
 
@@ -118,113 +117,4 @@
     } else {
         transport = NULL;
     }
-}
-
-bool BLE::hasInitialized(void) const
-{
-    if (!transport) {
-        error("bad handle to underlying transport");
-    }
-
-    return transport->hasInitialized();
-}
-
-ble_error_t BLE::shutdown(void)
-{
-    clearAdvertisingPayload();
-    if (!transport) {
-        error("bad handle to underlying transport");
-    }
-
-    return transport->shutdown();
-}
-
-const char *BLE::getVersion(void)
-{
-    if (!transport) {
-        error("bad handle to underlying transport");
-    }
-
-    return transport->getVersion();
-}
-
-const Gap &BLE::gap() const
-{
-    if (!transport) {
-        error("bad handle to underlying transport");
-    }
-
-    return transport->getGap();
-}
-
-Gap &BLE::gap()
-{
-    if (!transport) {
-        error("bad handle to underlying transport");
-    }
-
-    return transport->getGap();
-}
-
-const GattServer& BLE::gattServer() const
-{
-    if (!transport) {
-        error("bad handle to underlying transport");
-    }
-
-    return transport->getGattServer();
-}
-
-GattServer& BLE::gattServer()
-{
-    if (!transport) {
-        error("bad handle to underlying transport");
-    }
-
-    return transport->getGattServer();
-}
-
-const GattClient& BLE::gattClient() const
-{
-    if (!transport) {
-        error("bad handle to underlying transport");
-    }
-
-    return transport->getGattClient();
-}
-
-GattClient& BLE::gattClient()
-{
-    if (!transport) {
-        error("bad handle to underlying transport");
-    }
-
-    return transport->getGattClient();
-}
-
-const SecurityManager& BLE::securityManager() const
-{
-    if (!transport) {
-        error("bad handle to underlying transport");
-    }
-
-    return transport->getSecurityManager();
-}
-
-SecurityManager& BLE::securityManager()
-{
-    if (!transport) {
-        error("bad handle to underlying transport");
-    }
-
-    return transport->getSecurityManager();
-}
-
-void BLE::waitForEvent(void)
-{
-    if (!transport) {
-        error("bad handle to underlying transport");
-    }
-
-    transport->waitForEvent();
 }
\ No newline at end of file