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
Revision 819:3d50ed3cda4b, committed 2015-09-29
- Comitter:
- rgrover1
- Date:
- Tue Sep 29 09:49:23 2015 +0100
- Parent:
- 818:61c62a287194
- Child:
- 820:3cb854c7f930
- Commit message:
- Synchronized with git rev ce482107
Author: Rohit Grover
handle the case of a NULL transport pointer for BLE.
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:23 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:23 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 &
-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
