No changes
Fork of nRF51822 by
Diff: source/nRF5xn.h
- Revision:
- 570:f162898cb6c4
- Parent:
- 566:e425ad9e5d6e
- Child:
- 571:bbf6410b6a89
--- a/source/nRF5xn.h Mon Jan 11 10:19:20 2016 +0000 +++ b/source/nRF5xn.h Mon Jan 11 10:19:21 2016 +0000 @@ -41,32 +41,153 @@ virtual ble_error_t shutdown(void); virtual const char *getVersion(void); + /** + * Accessors to GAP. This function checks whether gapInstance points to an + * object. If if does not, then the gapInstance is updated to + * &_getInstance before returning. + * + * @return A reference to GattServer. + * + * @note Unlike the GattClient, GattServer and SecurityManager, Gap is + * always needed in a BLE application. Therefore it is allocated + * statically. + */ virtual Gap &getGap() { - return nRF5xGap::getInstance(); + if (gapInstance == NULL) { + gapInstance = &_gapInstance; + } + return *gapInstance; + }; + + /** + * Accessors to GATT Server. This function checks whether a GattServer + * object was previously instantiated. If such object does not exist, then + * it is created before returning. + * + * @return A reference to GattServer. + */ + virtual GattServer &getGattServer() { + if (gattServerInstance == NULL) { + gattServerInstance = new nRF5xGattServer(); + } + return *gattServerInstance; }; + + /** + * Accessors to GATT Client. This function checks whether a GattClient + * object was previously instantiated. If such object does not exist, then + * it is created before returning. + * + * @return A reference to GattClient. + */ + virtual GattClient &getGattClient() { + if (gattClientInstance == NULL) { + gattClientInstance = new nRF5xGattClient(); + } + return *gattClientInstance; + } + + /** + * Accessors to Security Manager. This function checks whether a SecurityManager + * object was previously instantiated. If such object does not exist, then + * it is created before returning. + * + * @return A reference to GattServer. + */ + virtual SecurityManager &getSecurityManager() { + if (securityManagerInstance == NULL) { + securityManagerInstance = new nRF5xSecurityManager(); + } + return *securityManagerInstance; + } + + /** + * Accessors to GAP. This function checks whether gapInstance points to an + * object. If if does not, then the gapInstance is updated to + * &_getInstance before returning. + * + * @return A const reference to GattServer. + * + * @note Unlike the GattClient, GattServer and SecurityManager, Gap is + * always needed in a BLE application. Therefore it is allocated + * statically. + * + * @note The accessor is able to modify the object's state because the + * internal pointer has been declared mutable. + */ virtual const Gap &getGap() const { - return nRF5xGap::getInstance(); + if (gapInstance == NULL) { + gapInstance = &_gapInstance; + } + return *gapInstance; }; - virtual GattServer &getGattServer() { - return nRF5xGattServer::getInstance(); - }; + + /** + * Accessors to GATT Server. This function checks whether a GattServer + * object was previously instantiated. If such object does not exist, then + * it is created before returning. + * + * @return A const reference to GattServer. + * + * @note The accessor is able to modify the object's state because the + * internal pointer has been declared mutable. + */ virtual const GattServer &getGattServer() const { - return nRF5xGattServer::getInstance(); + if (gattServerInstance == NULL) { + gattServerInstance = new nRF5xGattServer(); + } + return *gattServerInstance; }; - virtual GattClient &getGattClient() { - return nRF5xGattClient::getInstance(); - } + + /** + * Accessors to Security Manager. This function checks whether a SecurityManager + * object was previously instantiated. If such object does not exist, then + * it is created before returning. + * + * @return A const reference to GattServer. + * + * @note The accessor is able to modify the object's state because the + * internal pointer has been declared mutable. + */ virtual const SecurityManager &getSecurityManager() const { - return nRF5xSecurityManager::getInstance(); + if (securityManagerInstance == NULL) { + securityManagerInstance = new nRF5xSecurityManager(); + } + return *securityManagerInstance; } - virtual SecurityManager &getSecurityManager() { - return nRF5xSecurityManager::getInstance(); - } + virtual void waitForEvent(void); +public: + static nRF5xn& Instance(BLE::InstanceID_t instanceId); + private: bool initialized; BLE::InstanceID_t instanceID; + +private: + static nRF5xGap _gapInstance; /**< Gap instance whose reference is returned from a call to + * getGap(). Unlike the GattClient, GattServer and + * SecurityManager, Gap is always needed in a BLE application. + * Therefore it is allocated statically. */ + +private: + mutable nRF5xGap *gapInstance; /**< Pointer to the Gap object instance. + * If NULL, then Gap has not been initialized. + * The pointer has been declared as 'mutable' so that + * it can be assigned inside a 'const' function. */ + mutable nRF5xGattServer *gattServerInstance; /**< Pointer to the GattServer object instance. + * If NULL, then GattServer has not been initialized. + * The pointer has been declared as 'mutable' so that + * it can be assigned inside a 'const' function. */ + mutable nRF5xGattClient *gattClientInstance; /**< Pointer to the GattClient object instance. + * If NULL, then GattClient has not been initialized. + * The pointer has been declared as 'mutable' so that + * it can be assigned inside a 'const' function. */ + mutable nRF5xSecurityManager *securityManagerInstance; /**< Pointer to the SecurityManager object instance. + * If NULL, then SecurityManager has not been initialized. + * The pointer has been declared as 'mutable' so that + * it can be assigned inside a 'const' function. */ }; #endif \ No newline at end of file