High level Bluetooth Low Energy API and radio abstraction layer

Dependents:   BLE_ANCS_SDAPI BLE_temperature BLE_HeartRate BLE_ANCS_SDAPI_IRC ... more

Overview

The BLE_API is a high level abstraction for using Bluetooth Low Energy on multiple platforms. For details and examples using the BLE_API please see the BLE_API Summary Page. Or click on the API Documentation tab above.

Supported Services

Supported services can be found in the BLE_API/services folder.

Files at this revision

API Documentation at this revision

Comitter:
rgrover1
Date:
Tue Sep 29 09:49:24 2015 +0100
Parent:
820:3cb854c7f930
Child:
822:a0f080d1e836
Commit message:
Synchronized with git rev cc3db850
Author: Rohit Grover
minor improvement to comment header for GattServer::onDataRead()

Changed in this revision

ble/BLE.h 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	Tue Sep 29 09:49:23 2015 +0100
+++ b/ble/BLE.h	Tue Sep 29 09:49:24 2015 +0100
@@ -154,43 +154,6 @@
         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;
-#else
-    static const InstanceID_t NUM_INSTANCES = YOTTA_CFG_BLE_INSTANCES_COUNT;
-#endif
-
-    /**
-     * Get a reference to the BLE singleton corresponding to a given interface.
-     * There is a static array of BLE singletons.
-     *
-     * @Note: Calling Instance() is preferred over constructing a BLE object
-     * directly, as it returns references to singletons.
-     *
-     * @param[in] id
-     *              Instance-ID. This should be less than NUM_INSTANCES in order
-     *              for the returned BLE singleton to be useful.
-     *
-     * @return a reference to a single object
-     */
-    static BLE &Instance(InstanceID_t id = DEFAULT_INSTANCE);
-
-    /**
-     * Constructor for a handle to a BLE instance (i.e. BLE stack). BLE handles
-     * are thin wrappers around a transport object (i.e. ptr. to
-     * BLEInstanceBase).
-     *
-     * BLE objects are are better created as singletons accessed through the
-     * Instance() method. If multiple BLE handles are constructed for the same
-     * interface (using this constructor), they will share the same underlying
-     * transport object.
-     */
-    BLE(InstanceID_t instanceID = DEFAULT_INSTANCE);
-
-
     /*
      * Deprecation alert!
      * All of the following are deprecated and may be dropped in a future
@@ -1399,12 +1362,17 @@
         return securityManager().onPasskeyDisplay(callback);
     }
 
+public:
+    BLE() : transport(createBLEInstance()) {
+        /* empty */
+    }
+
 private:
     BLE(const BLE&);
     BLE &operator=(const BLE &);
 
 private:
-    BLEInstanceBase *transport; /* the device specific backend */
+    BLEInstanceBase *const transport; /* the device specific backend */
 };
 
 typedef BLE BLEDevice; /* DEPRECATED. This type alias is retained for the sake of compatibility with older
--- a/source/BLE.cpp	Tue Sep 29 09:49:23 2015 +0100
+++ b/source/BLE.cpp	Tue Sep 29 09:49:24 2015 +0100
@@ -35,77 +35,4 @@
 #endif // TARGET_OTA_ENABLED
 
     return BLE_ERROR_NONE;
-}
-
-/**
- * BLE::Instance() and BLE constructor rely upon a static array of initializers
- * to create actual BLE transport instances. A description of these instances
- * and initializers is supposed to be put in some .json file contributing to
- * yotta's configuration (typically the target.json). Here's a sample:
- *
- *  "config": {
- *    ...
- *    "ble_instances": {
- *      "count": 1,
- *      "0" : {
- *        "initializer" : "createBLEInstance"
- *      }
- *    }
- *  }
- *
- * The following macros result in translating the above config into a static
- * array: instanceConstructors.
- */
-#ifdef YOTTA_CFG_BLE_INSTANCES_COUNT
-#define CONCATENATE(A, B) A ## B
-#define EXPAND(X) X /* this adds a level of indirection needed to allow macro-expansion following a token-paste operation (see use of CONCATENATE() below). */
-
-#define INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS_1 YOTTA_CFG_BLE_INSTANCES_0_INITIALIZER
-#define INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS_2 INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS_1, YOTTA_CFG_BLE_INSTANCES_1_INITIALIZER
-#define INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS_3 INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS_2, YOTTA_CFG_BLE_INSTANCES_2_INITIALIZER
-#define INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS_4 INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS_3, YOTTA_CFG_BLE_INSTANCES_3_INITIALIZER
-#define INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS_5 INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS_4, YOTTA_CFG_BLE_INSTANCES_4_INITIALIZER
-/* ... add more of the above if ever needed */
-
-#define INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS(N) EXPAND(CONCATENATE(INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS_, N))
-#endif /* YOTTA_CFG_BLE_INSTANCES_COUNT */
-
-typedef BLEInstanceBase *(*InstanceConstructor_t)(void);
-static const InstanceConstructor_t instanceConstructors[BLE::NUM_INSTANCES] = {
-#ifndef YOTTA_CFG_BLE_INSTANCES_COUNT
-    createBLEInstance
-#else
-    INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS(YOTTA_CFG_BLE_INSTANCES_COUNT)
-#endif
-};
-
-BLE &
-BLE::Instance(InstanceID_t id)
-{
-    static BLE *singletons[NUM_INSTANCES];
-    if (id < NUM_INSTANCES) {
-        if (singletons[id] == NULL) {
-            singletons[id] = new BLE(id); /* This object will never be freed. */
-        }
-
-        return *singletons[id];
-    }
-
-    /* we come here only in the case of a bad interfaceID. */
-    static BLE badSingleton(NUM_INSTANCES /* this is a bad index; and will result in a NULL transport. */);
-    return badSingleton;
-}
-
-BLE::BLE(InstanceID_t instanceID) : transport()
-{
-    static BLEInstanceBase *transportInstances[NUM_INSTANCES];
-
-    if (instanceID < NUM_INSTANCES) {
-        if (!transportInstances[instanceID]) {
-            transportInstances[instanceID] = instanceConstructors[instanceID](); /* Call the stack's initializer for the transport object. */
-        }
-        transport = transportInstances[instanceID];
-    } else {
-        transport = NULL;
-    }
 }
\ No newline at end of file