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 nRF51822 by
Revision 571:bbf6410b6a89, committed 2016-01-11
- Comitter:
- vcoubard
- Date:
- Mon Jan 11 10:19:22 2016 +0000
- Parent:
- 570:f162898cb6c4
- Child:
- 572:b726baee23c2
- Commit message:
- Synchronized with git rev 752e2ba4
Author: Rohit Grover
Merge pull request #88 from rgrover/develop
follow the extraction of address related types from Gap.h into BLEProtocol.h
Changed in this revision
--- a/source/btle/btle.cpp Mon Jan 11 10:19:21 2016 +0000
+++ b/source/btle/btle.cpp Mon Jan 11 10:19:22 2016 +0000
@@ -27,7 +27,9 @@
#include "custom/custom_helper.h"
#include "ble/GapEvents.h"
-#include "nRF5xn.h"
+#include "nRF5xGap.h"
+#include "nRF5xGattServer.h"
+#include "nRF5xSecurityManager.h"
extern "C" {
#include "pstorage.h"
@@ -136,11 +138,6 @@
bleGattcEventHandler(p_ble_evt);
#endif
- nRF5xn &ble = nRF5xn::Instance(BLE::DEFAULT_INSTANCE);
- nRF5xGap &gap = (nRF5xGap &) ble.getGap();
- nRF5xGattServer &gattServer = (nRF5xGattServer &) ble.getGattServer();
- nRF5xSecurityManager &securityManager = (nRF5xSecurityManager &) ble.getSecurityManager();
-
/* Custom event handler */
switch (p_ble_evt->header.evt_id) {
case BLE_GAP_EVT_CONNECTED: {
@@ -151,14 +148,14 @@
#else
Gap::Role_t role = static_cast<Gap::Role_t>(p_ble_evt->evt.gap_evt.params.connected.role);
#endif
- gap.setConnectionHandle(handle);
+ nRF5xGap::getInstance().setConnectionHandle(handle);
const Gap::ConnectionParams_t *params = reinterpret_cast<Gap::ConnectionParams_t *>(&(p_ble_evt->evt.gap_evt.params.connected.conn_params));
const ble_gap_addr_t *peer = &p_ble_evt->evt.gap_evt.params.connected.peer_addr;
const ble_gap_addr_t *own = &p_ble_evt->evt.gap_evt.params.connected.own_addr;
- gap.processConnectionEvent(handle,
+ nRF5xGap::getInstance().processConnectionEvent(handle,
role,
- static_cast<Gap::AddressType_t>(peer->addr_type), peer->addr,
- static_cast<Gap::AddressType_t>(own->addr_type), own->addr,
+ static_cast<BLEProtocol::AddressType::Type>(peer->addr_type), peer->addr,
+ static_cast<BLEProtocol::AddressType::Type>(own->addr_type), own->addr,
params);
break;
}
@@ -167,7 +164,7 @@
Gap::Handle_t handle = p_ble_evt->evt.gap_evt.conn_handle;
// Since we are not in a connection and have not started advertising,
// store bonds
- gap.setConnectionHandle (BLE_CONN_HANDLE_INVALID);
+ nRF5xGap::getInstance().setConnectionHandle (BLE_CONN_HANDLE_INVALID);
Gap::DisconnectionReason_t reason;
switch (p_ble_evt->evt.gap_evt.params.disconnected.reason) {
@@ -186,16 +183,16 @@
reason = static_cast<Gap::DisconnectionReason_t>(p_ble_evt->evt.gap_evt.params.disconnected.reason);
break;
}
- gap.processDisconnectionEvent(handle, reason);
+ nRF5xGap::getInstance().processDisconnectionEvent(handle, reason);
break;
}
case BLE_GAP_EVT_PASSKEY_DISPLAY:
- securityManager.processPasskeyDisplayEvent(p_ble_evt->evt.gap_evt.conn_handle, p_ble_evt->evt.gap_evt.params.passkey_display.passkey);
+ nRF5xSecurityManager::getInstance().processPasskeyDisplayEvent(p_ble_evt->evt.gap_evt.conn_handle, p_ble_evt->evt.gap_evt.params.passkey_display.passkey);
break;
case BLE_GAP_EVT_TIMEOUT:
- gap.processTimeoutEvent(static_cast<Gap::TimeoutSource_t>(p_ble_evt->evt.gap_evt.params.timeout.src));
+ nRF5xGap::getInstance().processTimeoutEvent(static_cast<Gap::TimeoutSource_t>(p_ble_evt->evt.gap_evt.params.timeout.src));
break;
case BLE_GATTC_EVT_TIMEOUT:
@@ -207,12 +204,12 @@
case BLE_GAP_EVT_ADV_REPORT: {
const ble_gap_evt_adv_report_t *advReport = &p_ble_evt->evt.gap_evt.params.adv_report;
- gap.processAdvertisementReport(advReport->peer_addr.addr,
- advReport->rssi,
- advReport->scan_rsp,
- static_cast<GapAdvertisingParams::AdvertisingType_t>(advReport->type),
- advReport->dlen,
- advReport->data);
+ nRF5xGap::getInstance().processAdvertisementReport(advReport->peer_addr.addr,
+ advReport->rssi,
+ advReport->scan_rsp,
+ static_cast<GapAdvertisingParams::AdvertisingType_t>(advReport->type),
+ advReport->dlen,
+ advReport->data);
break;
}
@@ -220,7 +217,7 @@
break;
}
- gattServer.hwCallback(p_ble_evt);
+ nRF5xGattServer::getInstance().hwCallback(p_ble_evt);
}
/*! @brief Callback when an error occurs inside the SoftDevice */
--- a/source/btle/btle_discovery.cpp Mon Jan 11 10:19:21 2016 +0000
+++ b/source/btle/btle_discovery.cpp Mon Jan 11 10:19:22 2016 +0000
@@ -14,15 +14,13 @@
* limitations under the License.
*/
-#include "nRF5xn.h"
+#include "nRF5xServiceDiscovery.h"
+#include "nRF5xGattClient.h"
#if !defined(TARGET_MCU_NRF51_16K_S110) && !defined(TARGET_MCU_NRF51_32K_S110)
void bleGattcEventHandler(const ble_evt_t *p_ble_evt)
{
- nRF5xn &ble = nRF5xn::Instance(BLE::DEFAULT_INSTANCE);
- nRF5xGap &gap = (nRF5xGap &) ble.getGap();
- nRF5xGattClient &gattClient = (nRF5xGattClient &) ble.getGattClient();
- nRF5xServiceDiscovery &sdSingleton = gattClient.discovery;
+ nRF5xServiceDiscovery &sdSingleton = nRF5xGattClient::getInstance().discovery;
switch (p_ble_evt->header.evt_id) {
case BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP:
@@ -65,7 +63,7 @@
.len = p_ble_evt->evt.gattc_evt.params.read_rsp.len,
.data = p_ble_evt->evt.gattc_evt.params.read_rsp.data,
};
- gattClient.processReadResponse(&response);
+ nRF5xGattClient::getInstance().processReadResponse(&response);
}
break;
@@ -78,7 +76,7 @@
.len = p_ble_evt->evt.gattc_evt.params.write_rsp.len,
.data = p_ble_evt->evt.gattc_evt.params.write_rsp.data,
};
- gattClient.processWriteResponse(&response);
+ nRF5xGattClient::getInstance().processWriteResponse(&response);
}
break;
@@ -90,7 +88,7 @@
params.len = p_ble_evt->evt.gattc_evt.params.hvx.len;
params.data = p_ble_evt->evt.gattc_evt.params.hvx.data;
- gattClient.processHVXEvent(¶ms);
+ nRF5xGattClient::getInstance().processHVXEvent(¶ms);
}
break;
}
--- a/source/btle/btle_security.cpp Mon Jan 11 10:19:21 2016 +0000
+++ b/source/btle/btle_security.cpp Mon Jan 11 10:19:22 2016 +0000
@@ -16,7 +16,8 @@
#include "btle.h"
-#include "nRF5xn.h"
+#include "nRF5xGap.h"
+#include "nRF5xSecurityManager.h"
extern "C" {
#include "pstorage.h"
@@ -203,20 +204,17 @@
ret_code_t
dm_handler(dm_handle_t const *p_handle, dm_event_t const *p_event, ret_code_t event_result)
{
- nRF5xn &ble = nRF5xn::Instance(BLE::DEFAULT_INSTANCE);
- nRF5xSecurityManager &securityManager = (nRF5xSecurityManager &) ble.getSecurityManager();
-
switch (p_event->event_id) {
case DM_EVT_SECURITY_SETUP: /* started */ {
const ble_gap_sec_params_t *peerParams = &p_event->event_param.p_gap_param->params.sec_params_request.peer_params;
- securityManager.processSecuritySetupInitiatedEvent(p_event->event_param.p_gap_param->conn_handle,
+ nRF5xSecurityManager::getInstance().processSecuritySetupInitiatedEvent(p_event->event_param.p_gap_param->conn_handle,
peerParams->bond,
peerParams->mitm,
(SecurityManager::SecurityIOCapabilities_t)peerParams->io_caps);
break;
}
case DM_EVT_SECURITY_SETUP_COMPLETE:
- securityManager.
+ nRF5xSecurityManager::getInstance().
processSecuritySetupCompletedEvent(p_event->event_param.p_gap_param->conn_handle,
(SecurityManager::SecurityCompletionStatus_t)(p_event->event_param.p_gap_param->params.auth_status.auth_status));
break;
@@ -250,11 +248,11 @@
break;
}
- securityManager.processLinkSecuredEvent(p_event->event_param.p_gap_param->conn_handle, resolvedSecurityMode);
+ nRF5xSecurityManager::getInstance().processLinkSecuredEvent(p_event->event_param.p_gap_param->conn_handle, resolvedSecurityMode);
break;
}
case DM_EVT_DEVICE_CONTEXT_STORED:
- securityManager.processSecurityContextStoredEvent(p_event->event_param.p_gap_param->conn_handle);
+ nRF5xSecurityManager::getInstance().processSecurityContextStoredEvent(p_event->event_param.p_gap_param->conn_handle);
break;
default:
break;
--- a/source/nRF5xGap.cpp Mon Jan 11 10:19:21 2016 +0000
+++ b/source/nRF5xGap.cpp Mon Jan 11 10:19:22 2016 +0000
@@ -14,17 +14,20 @@
* limitations under the License.
*/
-#include "nRF5xn.h"
+#include "nRF5xGap.h"
#include "mbed.h"
-#include "ble/BLE.h"
#include "common/common.h"
#include "ble_advdata.h"
#include "ble_hci.h"
+nRF5xGap &nRF5xGap::getInstance() {
+ static nRF5xGap m_instance;
+ return m_instance;
+}
+
void radioNotificationStaticCallback(bool param) {
- nRF5xGap &gap = (nRF5xGap &) nRF5xn::Instance(BLE::DEFAULT_INSTANCE).getGap();
- gap.processRadioNotificationEvent(param);
+ nRF5xGap::getInstance().processRadioNotificationEvent(param);
}
/**************************************************************************/
@@ -335,29 +338,6 @@
/**************************************************************************/
/*!
- @brief Clear nRF5xGap's state.
-
- @returns ble_error_t
-
- @retval BLE_ERROR_NONE
- Everything executed properly
-*/
-/**************************************************************************/
-ble_error_t nRF5xGap::reset(void)
-{
- /* Clear all state that is from the parent, including private members */
- if (Gap::reset() != BLE_ERROR_NONE) {
- return BLE_ERROR_INVALID_STATE;
- }
-
- /* Clear derived class members */
- m_connectionHandle = BLE_CONN_HANDLE_INVALID;
-
- return BLE_ERROR_NONE;
-}
-
-/**************************************************************************/
-/*!
@brief Sets the 16-bit connection handle
*/
/**************************************************************************/
@@ -387,7 +367,7 @@
@code
uint8_t device_address[6] = { 0xca, 0xfe, 0xf0, 0xf0, 0xf0, 0xf0 };
- nrf.getGap().setAddress(Gap::ADDR_TYPE_RANDOM_STATIC, device_address);
+ nrf.getGap().setAddress(Gap::BLEProtocol::AddressType::RANDOM_STATIC, device_address);
@endcode
*/
@@ -401,12 +381,12 @@
When using Random Private addresses, the cycle mode must be Auto.
In auto mode, the given address is ignored.
*/
- if ((type == ADDR_TYPE_PUBLIC) || (type == ADDR_TYPE_RANDOM_STATIC))
+ if ((type == BLEProtocol::AddressType::PUBLIC) || (type == BLEProtocol::AddressType::RANDOM_STATIC))
{
cycle_mode = BLE_GAP_ADDR_CYCLE_MODE_NONE;
memcpy(dev_addr.addr, address, ADDR_LEN);
}
- else if ((type == ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE) || (type == ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE))
+ else if ((type == BLEProtocol::AddressType::RANDOM_PRIVATE_RESOLVABLE) || (type == BLEProtocol::AddressType::RANDOM_PRIVATE_NON_RESOLVABLE))
{
cycle_mode = BLE_GAP_ADDR_CYCLE_MODE_AUTO;
// address is ignored when in auto mode
--- a/source/nRF5xGap.h Mon Jan 11 10:19:21 2016 +0000
+++ b/source/nRF5xGap.h Mon Jan 11 10:19:22 2016 +0000
@@ -44,6 +44,8 @@
class nRF5xGap : public Gap
{
public:
+ static nRF5xGap &getInstance();
+
/* Functions that must be implemented from Gap */
virtual ble_error_t setAddress(AddressType_t type, const Address_t address);
virtual ble_error_t getAddress(AddressType_t *typeP, Address_t address);
@@ -74,8 +76,6 @@
virtual ble_error_t setPreferredConnectionParams(const ConnectionParams_t *params);
virtual ble_error_t updateConnectionParams(Handle_t handle, const ConnectionParams_t *params);
- virtual ble_error_t reset(void);
-
virtual ble_error_t initRadioNotification(void) {
if (ble_radio_notification_init(NRF_APP_PRIORITY_HIGH, NRF_RADIO_NOTIFICATION_DISTANCE_800US, radioNotificationStaticCallback) == NRF_SUCCESS) {
return BLE_ERROR_NONE;
@@ -196,12 +196,6 @@
private:
uint16_t m_connectionHandle;
-
- /*
- * Allow instantiation from nRF5xn when required.
- */
- friend class nRF5xn;
-
nRF5xGap() {
m_connectionHandle = BLE_CONN_HANDLE_INVALID;
}
--- a/source/nRF5xGattClient.cpp Mon Jan 11 10:19:21 2016 +0000
+++ b/source/nRF5xGattClient.cpp Mon Jan 11 10:19:22 2016 +0000
@@ -16,6 +16,15 @@
#include "nRF5xGattClient.h"
+nRF5xGattClient &
+nRF5xGattClient::getInstance(void) {
+ static nRF5xGattClient* nRFGattClientSingleton = NULL;
+ if (nRFGattClientSingleton == NULL) {
+ nRFGattClientSingleton = new nRF5xGattClient();
+ }
+ return *nRFGattClientSingleton;
+}
+
#if !defined(TARGET_MCU_NRF51_16K_S110) && !defined(TARGET_MCU_NRF51_32K_S110)
ble_error_t
nRF5xGattClient::launchServiceDiscovery(Gap::Handle_t connectionHandle,
--- a/source/nRF5xGattClient.h Mon Jan 11 10:19:21 2016 +0000
+++ b/source/nRF5xGattClient.h Mon Jan 11 10:19:22 2016 +0000
@@ -23,6 +23,8 @@
class nRF5xGattClient : public GattClient
{
public:
+ static nRF5xGattClient &getInstance();
+
/**
* When using S110, all Gatt client features will return
* BLE_ERROR_NOT_IMPLEMENTED
@@ -145,30 +147,7 @@
}
}
- /**
- * @brief Clear nRF5xGattClient's state.
- *
- * @return
- * BLE_ERROR_NONE if successful.
- */
- virtual ble_error_t reset(void) {
- /* Clear all state that is from the parent, including private members */
- if (GattClient::reset() != BLE_ERROR_NONE) {
- return BLE_ERROR_INVALID_STATE;
- }
-
- /* Clear derived class members */
- discovery.reset();
-
- return BLE_ERROR_NONE;
- }
-
public:
- /*
- * Allow instantiation from nRF5xn when required.
- */
- friend class nRF5xn;
-
nRF5xGattClient() : discovery(this) {
/* empty */
}
--- a/source/nRF5xGattServer.cpp Mon Jan 11 10:19:21 2016 +0000
+++ b/source/nRF5xGattServer.cpp Mon Jan 11 10:19:22 2016 +0000
@@ -20,7 +20,12 @@
#include "common/common.h"
#include "btle/custom/custom_helper.h"
-#include "nRF5xn.h"
+#include "nRF5xGap.h"
+
+nRF5xGattServer &nRF5xGattServer::getInstance(void) {
+ static nRF5xGattServer m_instance;
+ return m_instance;
+}
/**************************************************************************/
/*!
@@ -236,8 +241,7 @@
hvx_params.p_len = &len;
if (connectionHandle == BLE_CONN_HANDLE_INVALID) { /* use the default connection handle if the caller hasn't specified a valid connectionHandle. */
- nRF5xGap &gap = (nRF5xGap &) nRF5xn::Instance(BLE::DEFAULT_INSTANCE).getGap();
- connectionHandle = gap.getConnectionHandle();
+ connectionHandle = nRF5xGap::getInstance().getConnectionHandle();
}
error_t error = (error_t) sd_ble_gatts_hvx(connectionHandle, &hvx_params);
if (error != ERROR_NONE) {
@@ -276,8 +280,7 @@
ble_error_t nRF5xGattServer::areUpdatesEnabled(const GattCharacteristic &characteristic, bool *enabledP)
{
/* Forward the call with the default connection handle. */
- nRF5xGap &gap = (nRF5xGap &) nRF5xn::Instance(BLE::DEFAULT_INSTANCE).getGap();
- return areUpdatesEnabled(gap.getConnectionHandle(), characteristic, enabledP);
+ return areUpdatesEnabled(nRF5xGap::getInstance().getConnectionHandle(), characteristic, enabledP);
}
ble_error_t nRF5xGattServer::areUpdatesEnabled(Gap::Handle_t connectionHandle, const GattCharacteristic &characteristic, bool *enabledP)
@@ -309,33 +312,6 @@
/**************************************************************************/
/*!
- @brief Clear nRF5xGattServer's state.
-
- @returns ble_error_t
-
- @retval BLE_ERROR_NONE
- Everything executed properly
-*/
-/**************************************************************************/
-ble_error_t nRF5xGattServer::reset(void)
-{
- /* Clear all state that is from the parent, including private members */
- if (GattServer::reset() != BLE_ERROR_NONE) {
- return BLE_ERROR_INVALID_STATE;
- }
-
- /* Clear derived class members */
- memset(p_characteristics, 0, sizeof(p_characteristics));
- memset(p_descriptors, 0, sizeof(p_descriptors));
- memset(nrfCharacteristicHandles, 0, sizeof(ble_gatts_char_handles_t));
- memset(nrfDescriptorHandles, 0, sizeof(nrfDescriptorHandles));
- descriptorCount = 0;
-
- return BLE_ERROR_NONE;
-}
-
-/**************************************************************************/
-/*!
@brief Callback handler for events getting pushed up from the SD
*/
/**************************************************************************/
--- a/source/nRF5xGattServer.h Mon Jan 11 10:19:21 2016 +0000
+++ b/source/nRF5xGattServer.h Mon Jan 11 10:19:22 2016 +0000
@@ -27,6 +27,8 @@
class nRF5xGattServer : public GattServer
{
public:
+ static nRF5xGattServer &getInstance();
+
/* Functions that must be implemented from GattServer */
virtual ble_error_t addService(GattService &);
virtual ble_error_t read(GattAttribute::Handle_t attributeHandle, uint8_t buffer[], uint16_t *lengthP);
@@ -35,13 +37,11 @@
virtual ble_error_t write(Gap::Handle_t connectionHandle, GattAttribute::Handle_t, const uint8_t[], uint16_t, bool localOnly = false);
virtual ble_error_t areUpdatesEnabled(const GattCharacteristic &characteristic, bool *enabledP);
virtual ble_error_t areUpdatesEnabled(Gap::Handle_t connectionHandle, const GattCharacteristic &characteristic, bool *enabledP);
- virtual ble_error_t reset(void);
/* nRF51 Functions */
void eventCallback(void);
void hwCallback(ble_evt_t *p_ble_evt);
-
private:
const static unsigned BLE_TOTAL_CHARACTERISTICS = 20;
const static unsigned BLE_TOTAL_DESCRIPTORS = 8;
@@ -86,11 +86,6 @@
uint8_t descriptorCount;
uint16_t nrfDescriptorHandles[BLE_TOTAL_DESCRIPTORS];
- /*
- * Allow instantiation from nRF5xn when required.
- */
- friend class nRF5xn;
-
nRF5xGattServer() : GattServer(), p_characteristics(), nrfCharacteristicHandles(), p_descriptors(), descriptorCount(0), nrfDescriptorHandles() {
/* empty */
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/source/nRF5xSecurityManager.cpp Mon Jan 11 10:19:22 2016 +0000
@@ -0,0 +1,25 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "nRF5xSecurityManager.h"
+
+nRF5xSecurityManager &nRF5xSecurityManager::getInstance(void) {
+ static nRF5xSecurityManager* m_instance = NULL;
+ if (m_instance == NULL) {
+ m_instance = new nRF5xSecurityManager();
+ }
+ return *m_instance;
+}
\ No newline at end of file
--- a/source/nRF5xSecurityManager.h Mon Jan 11 10:19:21 2016 +0000
+++ b/source/nRF5xSecurityManager.h Mon Jan 11 10:19:22 2016 +0000
@@ -25,6 +25,8 @@
class nRF5xSecurityManager : public SecurityManager
{
public:
+ static nRF5xSecurityManager &getInstance();
+
/* Functions that must be implemented from SecurityManager */
virtual ble_error_t init(bool enableBonding,
bool requireMITM,
@@ -45,27 +47,7 @@
return btle_purgeAllBondingState();
}
- /**
- * @brief Clear nRF5xSecurityManager's state.
- *
- * @return
- * BLE_ERROR_NONE if successful.
- */
- virtual ble_error_t reset(void)
- {
- if (SecurityManager::reset() != BLE_ERROR_NONE) {
- return BLE_ERROR_INVALID_STATE;
- }
-
- return BLE_ERROR_NONE;
- }
-
public:
- /*
- * Allow instantiation from nRF5xn when required.
- */
- friend class nRF5xn;
-
nRF5xSecurityManager() {
/* empty */
}
--- a/source/nRF5xServiceDiscovery.h Mon Jan 11 10:19:21 2016 +0000
+++ b/source/nRF5xServiceDiscovery.h Mon Jan 11 10:19:22 2016 +0000
@@ -99,34 +99,6 @@
onTerminationCallback = callback;
}
- /**
- * @brief Clear nRF5xServiceDiscovery's state.
- *
- * @return
- * BLE_ERROR_NONE if successful.
- */
- virtual ble_error_t reset(void) {
- /* Clear all state that is from the parent, including private members */
- if (ServiceDiscovery::reset() != BLE_ERROR_NONE) {
- return BLE_ERROR_INVALID_STATE;
- }
-
- /* Clear derived class members */
- serviceIndex = 0;
- numServices = 0;
- characteristicIndex = 0;
- numCharacteristics = 0;
-
- state = INACTIVE;
-
- serviceUUIDDiscoveryQueue.reset();
- charUUIDDiscoveryQueue.reset();
-
- onTerminationCallback = NULL;
-
- return BLE_ERROR_NONE;
- }
-
private:
ble_error_t launchCharacteristicDiscovery(Gap::Handle_t connectionHandle, Gap::Handle_t startHandle, Gap::Handle_t endHandle);
--- a/source/nRF5xn.cpp Mon Jan 11 10:19:21 2016 +0000
+++ b/source/nRF5xn.cpp Mon Jan 11 10:19:22 2016 +0000
@@ -32,33 +32,16 @@
static nRF5xn deviceInstance;
/**
- * The singleton for nRF5xGap. This has been kept static because it is
- * always needed for any application that uses BLE.
- */
-nRF5xGap nRF5xn::_gapInstance;
-
-/**
* BLE-API requires an implementation of the following function in order to
* obtain its transport handle.
*/
BLEInstanceBase *
createBLEInstance(void)
{
- return &nRF5xn::Instance(BLE::DEFAULT_INSTANCE);
-}
-
-nRF5xn& nRF5xn::Instance(BLE::InstanceID_t instanceId)
-{
- return deviceInstance;
+ return (&deviceInstance);
}
-nRF5xn::nRF5xn(void) :
- initialized(false),
- instanceID(BLE::DEFAULT_INSTANCE),
- gapInstance(NULL),
- gattServerInstance(NULL),
- gattClientInstance(NULL),
- securityManagerInstance(NULL)
+nRF5xn::nRF5xn(void) : initialized(false), instanceID(BLE::DEFAULT_INSTANCE)
{
}
@@ -121,69 +104,16 @@
return BLE_ERROR_NONE;
}
-/**************************************************************************/
-/*!
- @brief Purge the BLE stack of GATT and GAP state.
-
- @returns ble_error_t
-
- @retval BLE_ERROR_NONE
- Everything executed properly
-
- @note When using S110, GattClient::shutdown() will not be called
- since Gatt client features are not supported.
-*/
-/**************************************************************************/
ble_error_t nRF5xn::shutdown(void)
{
if (!initialized) {
return BLE_ERROR_INITIALIZATION_INCOMPLETE;
}
- /*
- * Shutdown the SoftDevice first. This is because we need to disable all
- * interrupts. Otherwise if we clear the BLE API and glue code first there
- * will be many NULL references and no config information which could lead
- * to errors if the shutdown process is interrupted.
- */
if(softdevice_handler_sd_disable() != NRF_SUCCESS) {
return BLE_STACK_BUSY;
}
-
- /* Shutdown the BLE API and nRF51 glue code */
- ble_error_t error;
-
- if (gattServerInstance != NULL) {
- error = gattServerInstance->reset();
- if (error != BLE_ERROR_NONE) {
- return error;
- }
- }
-
- if (securityManagerInstance != NULL) {
- error = securityManagerInstance->reset();
- if (error != BLE_ERROR_NONE) {
- return error;
- }
- }
-
- /* S110 does not support BLE client features, nothing to reset. */
-#if !defined(TARGET_MCU_NRF51_16K_S110) && !defined(TARGET_MCU_NRF51_32K_S110)
- if (gattClientInstance != NULL) {
- error = gattClientInstance->reset();
- if (error != BLE_ERROR_NONE) {
- return error;
- }
- }
-#endif
-
- /* Gap instance is always present */
- error = gapInstance->reset();
- if (error != BLE_ERROR_NONE) {
- return error;
- }
-
initialized = false;
return BLE_ERROR_NONE;
}
--- a/source/nRF5xn.h Mon Jan 11 10:19:21 2016 +0000
+++ b/source/nRF5xn.h Mon Jan 11 10:19:22 2016 +0000
@@ -41,153 +41,32 @@
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() {
- if (gapInstance == NULL) {
- gapInstance = &_gapInstance;
- }
- return *gapInstance;
+ return nRF5xGap::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 reference to GattServer.
- */
+ virtual const Gap &getGap() const {
+ return nRF5xGap::getInstance();
+ };
virtual GattServer &getGattServer() {
- if (gattServerInstance == NULL) {
- gattServerInstance = new nRF5xGattServer();
- }
- return *gattServerInstance;
+ return nRF5xGattServer::getInstance();
};
-
- /**
- * 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 const GattServer &getGattServer() const {
+ return nRF5xGattServer::getInstance();
+ };
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;
+ return nRF5xGattClient::getInstance();
}
-
- /**
- * 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 {
- 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 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 {
- if (gattServerInstance == NULL) {
- gattServerInstance = new nRF5xGattServer();
- }
- return *gattServerInstance;
- };
-
- /**
- * 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 {
- if (securityManagerInstance == NULL) {
- securityManagerInstance = new nRF5xSecurityManager();
- }
- return *securityManagerInstance;
+ return nRF5xSecurityManager::getInstance();
}
-
+ 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
