Commit graph

11 commits

Author SHA1 Message Date
Andres Amaya Garcia 7bf81e7edb Improve shutdown to clear BLE API and not just SD
Improve the shutdown functionality, such that a call to ble.shutdown() from
the user application clears the API and nRF5x state and NOT only the
SoftDevice. To achieve this the following changes are introduced:

* Add a protected member cleanup() to nRF5xGap, nRF5xGattClient,
nRF5xGattServer, nRF5xSecurityManager and nRF5xServiceDiscovery.
* Modify the shutdown() implementation in nRF5xn such that it also calls the
static member shutdown() exposed by the BLE API in Gap.h, SecurityManager.h,
GattClient.h and GattServer.h.
* Modify nRF5xGattClient, nRF5xGattServer and nRF5xSecurityManager
classes so that they dynamically create their respective objects only if
needed. Previously the GattClient, GattServer and SecurityManager objects were
declared as static, which means that they were always present even though they
were not always needed. This increases memory consumption unnecessarily.
Furthermore, pointers to the object instances are stored in static members of
the classes as specified by the BLE API base classes. This ensures that
calls to shutdown do not require calls to getInstance() functions that would
otherwise result in undesired memory allocations.
* nRF5xGap object is always needed, so this remains allocated statically. But
the reference in Gap is pointed to this object.

The shutdown procedure is as follows:

1. The user calls ble.shutdown() which executes the code in nRF5xn::shutdown()
1. The SoftDevice is shutdown
1. The static members of Gap.h, SecurityManager.h, GattClient.h and
GattServer.h are called to clean up their own state.

If at any point an error occur during the last step, BLE_ERROR_INVALID_STATE is
returned.
2015-12-11 17:56:57 +00:00
Andres Amaya Garcia 167ddd63ab Execute radio notification in low priority context
The ble-nrf51822 implementation of the BLE API executes callbacks for radio
notification events at very high priority. This functionality is replaced by
executing the radio notification callback at a lower priority. When using
mbed OS the callback is posted through minar. In mbed classic the callback is
executed directly, but from a lower priority. Note that minar or callback
execution in mbed classic could not be posted/generated directly from the
radio notification handler because this causes race conditions that may lead
to a hard-fault. Alternatively, a Timeout was used to post the callback in
another context with lower priority.
2015-11-26 10:56:17 +00:00
Liyou Zhou 348c323d27 Take modification out of the nordic sdk files
and put them into ARM written files.
2015-11-18 14:25:10 +00:00
Rohit Grover 7de2b7162f minor rewording of the comment introduced by the previous pull request 2015-11-16 09:41:27 +00:00
Andres Amaya Garcia f8b3f1340f Post radio notification callback through minar
The ble-nrf51822 implementation of the BLE API generated callbacks for radio
notification events without using the minar scheduler and at very high
priority. This functionality is replaced by posting events through minar
when YOTTA_CFG_MBED_OS is defined. Note that minar could not be used directly
to post callbacks because radio notification events are handled at very high
priority, which caused a hard-fault when minar tries to enter a critical
section. Alternatively, a Timeout was used to post the callback in another
context with lower priority.
2015-11-13 14:51:36 +00:00
Jean-Philippe Brucker eab6631cb6 Update S110 detection macros again
The mbed SDK actually prefixes all labels from targets.py with "TARGET_".
Update our detection macros accordingly.
2015-10-05 18:05:55 +01:00
Jean-Philippe Brucker dc1d7893c4 Update S110 detection macros
Those macros are defined by mbed SDK in targets.py. They changed from
MCU_NORDIC_xxx_S110 to MCU_NRF51_xxx_S110. Update the #ifdefs accordingly.
2015-08-24 18:09:28 +01:00
Jean-Philippe Brucker 3eabc779a0 Disable GattClient features when using S110 SoftDevice
S110 compatibility is already present, but this patch adds proper handling
of observer/central related features:
* Gap::startScan will return BLE_ERRROR_NOT_IMPLEMENTED (instead of
  PARAM_OUT_OF_RANGE)
* nRF5xGattClient uses the default GattClient implementation when S110 is
  in use. All if its methods return NOT_IMPLEMENTED.

Example: for an application that acts as both a central and a peripheral,
using S110 will make the ble.gap().startScan() call return
BLE_ERROR_NOT_IMPLEMENTED, and advertisement features will continue
running normally.
In addition, with GCC, this patch will free 344 bytes of RAM and 2504
bytes of flash.
2015-08-11 13:02:34 +01:00
Joshua Slater 110db4c514 Changed Gap:: to GapAdvertisingParams:: because of change in BLE 2015-08-06 10:50:53 +01:00
Rohit Grover 553132b406 add support to handle radio-notification event as a FuncionPointer so that we can have <object, member> pairs for callbacks. 2015-07-21 11:34:36 +01:00
Rohit Grover 0eb58d86f5 rename nRF51... to nRF5x...
This prepares us to support nRF52.
2015-07-06 14:18:01 +01:00
Renamed from source/nRF51Gap.h (Browse further)