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:
vcoubard
Date:
Wed Apr 06 19:15:36 2016 +0100
Parent:
1182:b70129080ddf
Child:
1184:246cbece99c2
Commit message:
Synchronized with git rev 44cc6871
Author: Andres Amaya Garcia
Merge branch 'develop' into fix-doxy-warnings

Changed in this revision

ble/BLE.h Show annotated file Show diff for this revision Revisions of this file
ble/BLEInstanceBase.h Show annotated file Show diff for this revision Revisions of this file
ble/BLEProtocol.h Show annotated file Show diff for this revision Revisions of this file
ble/CallChainOfFunctionPointersWithContext.h Show annotated file Show diff for this revision Revisions of this file
ble/CharacteristicDescriptorDiscovery.h Show annotated file Show diff for this revision Revisions of this file
ble/DiscoveredCharacteristic.h Show annotated file Show diff for this revision Revisions of this file
ble/DiscoveredCharacteristicDescriptor.h Show annotated file Show diff for this revision Revisions of this file
ble/DiscoveredService.h Show annotated file Show diff for this revision Revisions of this file
ble/Gap.h Show annotated file Show diff for this revision Revisions of this file
ble/GapAdvertisingData.h Show annotated file Show diff for this revision Revisions of this file
ble/GapAdvertisingParams.h Show annotated file Show diff for this revision Revisions of this file
ble/GapScanningParams.h Show annotated file Show diff for this revision Revisions of this file
ble/GattAttribute.h Show annotated file Show diff for this revision Revisions of this file
ble/GattCallbackParamTypes.h Show annotated file Show diff for this revision Revisions of this file
ble/GattCharacteristic.h Show annotated file Show diff for this revision Revisions of this file
ble/GattClient.h Show annotated file Show diff for this revision Revisions of this file
ble/GattServer.h Show annotated file Show diff for this revision Revisions of this file
ble/GattServerEvents.h Show annotated file Show diff for this revision Revisions of this file
ble/GattService.h Show annotated file Show diff for this revision Revisions of this file
ble/SafeBool.h Show annotated file Show diff for this revision Revisions of this file
ble/SecurityManager.h Show annotated file Show diff for this revision Revisions of this file
ble/ServiceDiscovery.h Show annotated file Show diff for this revision Revisions of this file
ble/UUID.h Show annotated file Show diff for this revision Revisions of this file
ble/services/BatteryService.h Show annotated file Show diff for this revision Revisions of this file
ble/services/DeviceInformationService.h Show annotated file Show diff for this revision Revisions of this file
--- a/ble/BLE.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/BLE.h	Wed Apr 06 19:15:36 2016 +0100
@@ -40,7 +40,7 @@
 class BLE
 {
 public:
-    typedef unsigned InstanceID_t; /** The type returned by BLE::getInstanceID(). */
+    typedef unsigned InstanceID_t; /**< The type returned by BLE::getInstanceID(). */
 
     /**
      * The context provided to init-completion-callbacks (see init() below).
@@ -53,8 +53,8 @@
      *             the error value is implementation specific.
      */
     struct InitializationCompleteCallbackContext {
-        BLE&        ble;   /* Reference to the BLE object that has been initialized */
-        ble_error_t error; /* Error status of the initialization. It is set to BLE_ERROR_NONE if initialization completed successfully. */
+        BLE&        ble;   /**< Reference to the BLE object that has been initialized */
+        ble_error_t error; /**< Error status of the initialization. It is set to BLE_ERROR_NONE if initialization completed successfully. */
     };
 
     /**
@@ -68,7 +68,7 @@
 
     /**
      * Initialize the BLE controller. This should be called before using
-     * anything else in the BLE_API.
+     * anything else in the BLE API.
      *
      * init() hands control to the underlying BLE module to accomplish
      * initialization. This initialization may tacitly depend on other hardware
@@ -89,11 +89,6 @@
      * @note If init() returns BLE_ERROR_NONE, the underlying stack must invoke
      *     the initialization completion callback at some point.
      *
-     * @note In some cases, initialization is instantaneous (or blocking); if
-     *     so, it is acceptable for the stack-specific implementation of init()
-     *     to invoke the completion callback directly (within its own
-     *     context).
-     *
      * @note Nearly all BLE APIs would return
      *     BLE_ERROR_INITIALIZATION_INCOMPLETE if used on an instance before the
      *     corresponding transport is initialized.
@@ -138,38 +133,70 @@
      * This call allows the application to get the BLE stack version information.
      *
      * @return  A pointer to a const string representing the version.
-     *          Note: The string is owned by BLE_API.
+     *
+     * @note The string returned is owned by BLE API.
      */
     const char *getVersion(void);
 
-    /*
-     * Accessors to GAP. Please refer to Gap.h. All GAP related functionality requires
+    /**
+     * Accessor to Gap. All Gap related functionality requires
      * going through this accessor.
+     *
+     * @return A reference to a Gap object associated to this BLE instance.
+     */
+    Gap &gap();
+
+    /**
+     * A const alternative to gap().
+     *
+     * @return A const reference to a Gap object associated to this BLE instance.
      */
     const Gap &gap() const;
-    Gap &gap();
 
-    /*
-     * Accessors to GATT Server. Please refer to GattServer.h. All GATTServer related
-     * functionality requires going through this accessor.
+    /**
+     * Accessor to GattServer. All GattServer related functionality requires
+     * going through this accessor.
+     *
+     * @return A reference to a GattServer object associated to this BLE instance.
      */
-    const GattServer& gattServer() const;
     GattServer& gattServer();
 
-    /*
-     * Accessors to GATT Client. Please refer to GattClient.h. All GATTClient related
-     * functionality requires going through this accessor.
+    /**
+     * A const alternative to gattServer().
+     *
+     * @return A const reference to a GattServer object associated to this BLE instance.
      */
-    const GattClient& gattClient() const;
+    const GattServer& gattServer() const;
+
+    /**
+     * Accessors to GattClient. All GattClient related functionality requires going
+     * through this accessor.
+     *
+     * @return A reference to a GattClient object associated to this BLE instance.
+     */
     GattClient& gattClient();
 
-    /*
-     * Accessors to Security Manager. Please refer to SecurityManager.h. All
-     * SecurityManager related functionality requires going through this
-     * accessor.
+    /**
+     * A const alternative to gattClient().
+     *
+     * @return A const reference to a GattClient object associated to this BLE instance.
+     */
+    const GattClient& gattClient() const;
+
+    /**
+     * Accessors to SecurityManager. All SecurityManager related functionality requires
+     * going through this accessor.
+     *
+     * @return A reference to a SecurityManager object associated to this BLE instance.
+     */
+    SecurityManager& securityManager();
+
+    /**
+     * A const alternative to securityManager().
+     *
+     * @return A const reference to a SecurityManager object associated to this BLE instance.
      */
     const SecurityManager& securityManager() const;
-    SecurityManager& securityManager();
 
     /**
      * Yield control to the BLE stack or to other tasks waiting for events. This
@@ -181,10 +208,19 @@
     void waitForEvent(void);
 
 public:
+    /**
+     * The value of the BLE::InstanceID_t for the default BLE instance.
+     */
     static const InstanceID_t DEFAULT_INSTANCE = 0;
 #ifndef YOTTA_CFG_BLE_INSTANCES_COUNT
+    /**
+     * The number of permitted BLE instances for the application.
+     */
     static const InstanceID_t NUM_INSTANCES = 1;
 #else
+    /**
+     * The number of permitted BLE instances for the application.
+     */
     static const InstanceID_t NUM_INSTANCES = YOTTA_CFG_BLE_INSTANCES_COUNT;
 #endif
 
@@ -192,14 +228,14 @@
      * 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
+     * @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
      *              for the returned BLE singleton to be useful.
      *
-     * @return a reference to a single object.
+     * @return A reference to a single object.
      */
     static BLE &Instance(InstanceID_t id = DEFAULT_INSTANCE);
 
@@ -234,23 +270,23 @@
      * Set the BTLE MAC address and type.
      * @return BLE_ERROR_NONE on success.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.setAddress(...) should be replaced with
-     * ble.gap().setAddress(...).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::setAddress(). A former call to
+     *             ble.setAddress(...) should be replaced with
+     *             ble.gap().setAddress(...).
      */
     ble_error_t setAddress(BLEProtocol::AddressType_t type, const BLEProtocol::AddressBytes_t address) {
         return gap().setAddress(type, address);
     }
 
     /**
-     * Fetch the BTLE MAC address and type.
+     * Fetch the Bluetooth Low Energy MAC address and type.
      * @return BLE_ERROR_NONE on success.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.getAddress(...) should be replaced with
-     * ble.gap().getAddress(...).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::getAddress(). A former call to
+     *             ble.getAddress(...) should be replaced with
+     *             ble.gap().getAddress(...).
      */
     ble_error_t getAddress(BLEProtocol::AddressType_t *typeP, BLEProtocol::AddressBytes_t address) {
         return gap().getAddress(typeP, address);
@@ -259,10 +295,10 @@
     /**
      * Set the GAP advertising mode to use for this device.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.setAdvertisingType(...) should be replaced with
-     * ble.gap().setAdvertisingType(...).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::setAdvertisingType(). A former call to
+     *             ble.setAdvertisingType(...) should be replaced with
+     *             ble.gap().setAdvertisingType(...).
      */
     void setAdvertisingType(GapAdvertisingParams::AdvertisingType advType) {
         gap().setAdvertisingType(advType);
@@ -279,16 +315,16 @@
      *              This field must be set to 0 if connectionMode is equal
      *              to ADV_CONNECTABLE_DIRECTED.
      *
-     * @note: Decreasing this value allows central devices to detect a
+     * @note Decreasing this value allows central devices to detect a
      * peripheral faster, at the expense of more power being used by the radio
      * due to the higher data transmit rate.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.setAdvertisingInterval(...) should be replaced with
-     * ble.gap().setAdvertisingInterval(...).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::setAdvertisingInterval(). A former call to
+     *             ble.setAdvertisingInterval(...) should be replaced with
+     *             ble.gap().setAdvertisingInterval(...).
      *
-     * @note: [WARNING] This API previously used 0.625ms as the unit for its
+     * @note WARNING: This API previously used 0.625ms as the unit for its
      * 'interval' argument. That required an explicit conversion from
      * milliseconds using Gap::MSEC_TO_GAP_DURATION_UNITS(). This conversion is
      * no longer required as the new units are milliseconds. Any application
@@ -301,10 +337,10 @@
     /**
      * @return Minimum Advertising interval in milliseconds.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.getMinAdvertisingInterval(...) should be replaced with
-     * ble.gap().getMinAdvertisingInterval(...).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::getMinAdvertisingInterval(). A former call to
+     *             ble.getMinAdvertisingInterval(...) should be replaced with
+     *             ble.gap().getMinAdvertisingInterval(...).
      */
     uint16_t getMinAdvertisingInterval(void) const {
         return gap().getMinAdvertisingInterval();
@@ -313,10 +349,10 @@
     /**
      * @return Minimum Advertising interval in milliseconds for non-connectible mode.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.getMinNonConnectableAdvertisingInterval(...) should be replaced with
-     * ble.gap().getMinNonConnectableAdvertisingInterval(...).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::MinNonConnectableAdvertisingInterval(). A former call to
+     *             ble.getMinNonConnectableAdvertisingInterval(...) should be replaced with
+     *             ble.gap().getMinNonConnectableAdvertisingInterval(...).
      */
     uint16_t getMinNonConnectableAdvertisingInterval(void) const {
         return gap().getMinNonConnectableAdvertisingInterval();
@@ -325,10 +361,10 @@
     /**
      * @return Maximum Advertising interval in milliseconds.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.getMaxAdvertisingInterval(...) should be replaced with
-     * ble.gap().getMaxAdvertisingInterval(...).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::getMaxAdvertisingInterval(). A former call to
+     *             ble.getMaxAdvertisingInterval(...) should be replaced with
+     *             ble.gap().getMaxAdvertisingInterval(...).
      */
     uint16_t getMaxAdvertisingInterval(void) const {
         return gap().getMaxAdvertisingInterval();
@@ -339,10 +375,10 @@
      *              Advertising timeout (in seconds) between 0x1 and 0x3FFF (1
      *              and 16383). Use 0 to disable the advertising timeout.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.setAdvertisingTimeout(...) should be replaced with
-     * ble.gap().setAdvertisingTimeout(...).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::setAdvertisingTimeout(). A former call to
+     *             ble.setAdvertisingTimeout(...) should be replaced with
+     *             ble.gap().setAdvertisingTimeout(...).
      */
     void setAdvertisingTimeout(uint16_t timeout) {
         gap().setAdvertisingTimeout(timeout);
@@ -354,10 +390,10 @@
      * directly; there are other APIs to tweak advertisement parameters
      * individually (see above).
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.setAdvertisingParams(...) should be replaced with
-     * ble.gap().setAdvertisingParams(...).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::setAdvertisingParams(). A former call to
+     *             ble.setAdvertisingParams(...) should be replaced with
+     *             ble.gap().setAdvertisingParams(...).
      */
     void setAdvertisingParams(const GapAdvertisingParams &advParams) {
         gap().setAdvertisingParams(advParams);
@@ -367,10 +403,10 @@
      * @return  Read back advertising parameters. Useful for storing and
      *          restoring parameters rapidly.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.getAdvertisingParams(...) should be replaced with
-     * ble.gap().getAdvertisingParams(...).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::getAdvertisingParams(). A former call to
+     *             ble.getAdvertisingParams(...) should be replaced with
+     *             ble.gap().getAdvertisingParams(...).
      */
     const GapAdvertisingParams &getAdvertisingParams(void) const {
         return gap().getAdvertisingParams();
@@ -387,10 +423,10 @@
      *              GapAdvertisingData::Flags for valid flags. Multiple
      *              flags may be specified in combination.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.accumulateAdvertisingPayload(flags) should be replaced with
-     * ble.gap().accumulateAdvertisingPayload(flags).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::accumulateAdvertisingPayload(uint8_t). A former call to
+     *             ble.accumulateAdvertisingPayload(flags) should be replaced with
+     *             ble.gap().accumulateAdvertisingPayload(flags).
      */
     ble_error_t accumulateAdvertisingPayload(uint8_t flags) {
         return gap().accumulateAdvertisingPayload(flags);
@@ -405,10 +441,11 @@
      * @param[in] app
      *              The appearance of the peripheral.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.accumulateAdvertisingPayload(appearance) should be replaced with
-     * ble.gap().accumulateAdvertisingPayload(appearance).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::accumulateAdvertisingPayload(GapAdvertisingData::Appearance).
+     *             A former call to ble.accumulateAdvertisingPayload(appearance)
+     *             should be replaced with
+     *             ble.gap().accumulateAdvertisingPayload(appearance).
      */
     ble_error_t accumulateAdvertisingPayload(GapAdvertisingData::Appearance app) {
         return gap().accumulateAdvertisingPayload(app);
@@ -420,14 +457,14 @@
      * as an additional 31 bytes if the advertising payload is too
      * small.
      *
-     * @param[in] app
+     * @param[in] power
      *              The max transmit power to be used by the controller. This
      *              is only a hint.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.accumulateAdvertisingPayloadTxPower(txPower) should be replaced with
-     * ble.gap().accumulateAdvertisingPayloadTxPower(txPower).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::accumulateAdvertisingPayloadTxPower(). A former call to
+     *             ble.accumulateAdvertisingPayloadTxPower(txPower) should be replaced with
+     *             ble.gap().accumulateAdvertisingPayloadTxPower(txPower).
      */
     ble_error_t accumulateAdvertisingPayloadTxPower(int8_t power) {
         return gap().accumulateAdvertisingPayloadTxPower(power);
@@ -443,10 +480,10 @@
      * @param  data Data bytes.
      * @param  len  Data length.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.accumulateAdvertisingPayload(...) should be replaced with
-     * ble.gap().accumulateAdvertisingPayload(...).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::accumulateAdvertisingPayload(GapAdvertisingData::DataType, const uint8_t, uint8_t).
+     *             A former call to ble.accumulateAdvertisingPayload(...) should
+     *             be replaced with ble.gap().accumulateAdvertisingPayload(...).
      */
     ble_error_t accumulateAdvertisingPayload(GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len) {
         return gap().accumulateAdvertisingPayload(type, data, len);
@@ -457,10 +494,10 @@
      * underlying stack. It would be uncommon for this API to be used directly;
      * there are other APIs to build an advertisement payload (see above).
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.setAdvertisingData(...) should be replaced with
-     * ble.gap().setAdvertisingPayload(...).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::setAdvertisingData(). A former call to
+     *             ble.setAdvertisingData(...) should be replaced with
+     *             ble.gap().setAdvertisingPayload(...).
      */
     ble_error_t setAdvertisingData(const GapAdvertisingData &advData) {
         return gap().setAdvertisingPayload(advData);
@@ -470,10 +507,10 @@
      * @return  Read back advertising data. Useful for storing and
      *          restoring payload.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.getAdvertisingData(...) should be replaced with
-     * ble.gap().getAdvertisingPayload()(...).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::getAdvertisingData(). A former call to
+     *             ble.getAdvertisingData(...) should be replaced with
+     *             ble.gap().getAdvertisingPayload()(...).
      */
     const GapAdvertisingData &getAdvertisingData(void) const {
         return gap().getAdvertisingPayload();
@@ -484,24 +521,27 @@
      * accumulateAdvertisingPayload(). This automatically propagates the re-
      * initialized advertising payload to the underlying stack.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.clearAdvertisingPayload(...) should be replaced with
-     * ble.gap().clearAdvertisingPayload(...).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::clearAdvertisingPayload(). A former call to
+     *             ble.clearAdvertisingPayload(...) should be replaced with
+     *             ble.gap().clearAdvertisingPayload(...).
      */
     void clearAdvertisingPayload(void) {
         gap().clearAdvertisingPayload();
     }
 
     /**
-     * This API is *deprecated* and resolves to a no-operation. It is left here
-     * to allow older code to compile. Please avoid using this API in new code.
-     * This API will be dropped in a future release.
+     * Dynamically reset the accumulated advertising
+     * payload and scanResponse. The application must clear and re-
+     * accumulates a new advertising payload (and scanResponse) before using this
+     * API.
      *
-     * Formerly, it would be used to dynamically reset the accumulated advertising
-     * payload and scanResponse; to do this, the application would clear and re-
-     * accumulate a new advertising payload (and scanResponse) before using this
-     * API. Updates to the underlying advertisement payload now happen
+     * @return BLE_ERROR_NONE when the advertising payload is set successfully.
+     *
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::setAdvertisingPayload().
+     *
+     * @note The new APIs in Gap update the underlying advertisement payload
      * implicitly.
      */
     ble_error_t setAdvertisingPayload(void) {
@@ -516,10 +556,10 @@
      * @param[in] data Data bytes.
      * @param[in] len  Data length.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.accumulateScanResponse(...) should be replaced with
-     * ble.gap().accumulateScanResponse(...).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::accumulateScanResponse(). A former call to
+     *             ble.accumulateScanResponse(...) should be replaced with
+     *             ble.gap().accumulateScanResponse(...).
      */
     ble_error_t accumulateScanResponse(GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len) {
         return gap().accumulateScanResponse(type, data, len);
@@ -529,10 +569,10 @@
      * Reset any scan response prepared from prior calls to
      * accumulateScanResponse().
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.clearScanResponse(...) should be replaced with
-     * ble.gap().clearScanResponse(...).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::clearScanResponse(). A former call to
+     *             ble.clearScanResponse(...) should be replaced with
+     *             ble.gap().clearScanResponse(...).
      */
     void clearScanResponse(void) {
         gap().clearScanResponse();
@@ -541,10 +581,10 @@
     /**
      * Start advertising.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.startAdvertising(...) should be replaced with
-     * ble.gap().startAdvertising(...).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::startAdvertising(). A former call to
+     *             ble.startAdvertising(...) should be replaced with
+     *             ble.gap().startAdvertising(...).
      */
     ble_error_t startAdvertising(void) {
         return gap().startAdvertising();
@@ -553,10 +593,10 @@
     /**
      * Stop advertising.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.stopAdvertising(...) should be replaced with
-     * ble.gap().stopAdvertising(...).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::stopAdvertising(). A former call to
+     *             ble.stopAdvertising(...) should be replaced with
+     *             ble.gap().stopAdvertising(...).
      */
     ble_error_t stopAdvertising(void) {
         return gap().stopAdvertising();
@@ -584,12 +624,12 @@
      * Once the scanning parameters have been configured, scanning can be
      * enabled by using startScan().
      *
-     * @Note: The scan interval and window are recommendations to the BLE stack.
+     * @note The scan interval and window are recommendations to the BLE stack.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.setScanParams(...) should be replaced with
-     * ble.gap().setScanParams(...).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::setScanParams(). A former call to
+     *             ble.setScanParams(...) should be replaced with
+     *             ble.gap().setScanParams(...).
      */
     ble_error_t setScanParams(uint16_t interval       = GapScanningParams::SCAN_INTERVAL_MAX,
                               uint16_t window         = GapScanningParams::SCAN_WINDOW_MAX,
@@ -613,10 +653,10 @@
      * Once the scanning parameters have been configured, scanning can be
      * enabled by using startScan().
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.setScanInterval(interval) should be replaced with
-     * ble.gap().setScanInterval(interval).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::setScanInterval(). A former call to
+     *             ble.setScanInterval(interval) should be replaced with
+     *             ble.gap().setScanInterval(interval).
      */
     ble_error_t setScanInterval(uint16_t interval) {
         return gap().setScanInterval(interval);
@@ -637,10 +677,10 @@
      * Once the scanning parameters have been configured, scanning can be
      * enabled by using startScan().
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.setScanWindow(window) should be replaced with
-     * ble.gap().setScanWindow(window).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::setScanWindow(). A former call to
+     *             ble.setScanWindow(window) should be replaced with
+     *             ble.gap().setScanWindow(window).
      */
     ble_error_t setScanWindow(uint16_t window) {
         return gap().setScanWindow(window);
@@ -661,12 +701,12 @@
      * Once the scanning parameters have been configured, scanning can be
      * enabled by using startScan().
      *
-     * @Note: The scan interval and window are recommendations to the BLE stack.
+     * @note The scan interval and window are recommendations to the BLE stack.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.setScanTimeout(...) should be replaced with
-     * ble.gap().setScanTimeout(...).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::setScanTimeout(). A former call to
+     *             ble.setScanTimeout(...) should be replaced with
+     *             ble.gap().setScanTimeout(...).
      */
     ble_error_t setScanTimeout(uint16_t timeout) {
         return gap().setScanTimeout(timeout);
@@ -681,10 +721,10 @@
      * Once the scanning parameters have been configured, scanning can be
      * enabled by using startScan().
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.setActiveScan(...) should be replaced with
-     * ble.gap().setActiveScanning(...).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::setActiveScan(). A former call to
+     *             ble.setActiveScan(...) should be replaced with
+     *             ble.gap().setActiveScanning(...).
      */
     void setActiveScan(bool activeScanning) {
         gap().setActiveScanning(activeScanning);
@@ -699,10 +739,10 @@
      *              receiving every advertisement report. This can be passed in
      *              as NULL, in which case scanning may not be enabled at all.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.startScan(callback) should be replaced with
-     * ble.gap().startScan(callback).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::startScan(). A former call to
+     *             ble.startScan(callback) should be replaced with
+     *             ble.gap().startScan(callback).
      */
     ble_error_t startScan(void (*callback)(const Gap::AdvertisementCallbackParams_t *params)) {
         return gap().startScan(callback);
@@ -711,10 +751,10 @@
     /**
      * Same as above, but this takes an (object, method) pair for a callback.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.startScan(callback) should be replaced with
-     * ble.gap().startScan(object, callback).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::startScan(). A former call to
+     *             ble.startScan(callback) should be replaced with
+     *             ble.gap().startScan(object, callback).
      */
     template<typename T>
     ble_error_t startScan(T *object, void (T::*memberCallback)(const Gap::AdvertisementCallbackParams_t *params));
@@ -724,10 +764,10 @@
      *
      * @retval BLE_ERROR_NONE if successfully stopped scanning procedure.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.stopScan() should be replaced with
-     * ble.gap().stopScan().
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::stopScan(). A former call to
+     *             ble.stopScan() should be replaced with
+     *             ble.gap().stopScan().
      */
     ble_error_t stopScan(void) {
         return gap().stopScan();
@@ -747,10 +787,10 @@
      *     successfully. The onConnection callback (if set) is invoked upon
      *     a connection event.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.connect(...) should be replaced with
-     * ble.gap().connect(...).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::connect(). A former call to
+     *             ble.connect(...) should be replaced with
+     *             ble.gap().connect(...).
      */
     ble_error_t connect(const BLEProtocol::AddressBytes_t  peerAddr,
                         BLEProtocol::AddressType_t         peerAddrType = BLEProtocol::AddressType::RANDOM_STATIC,
@@ -780,28 +820,27 @@
      * @param  reason
      *           The reason for disconnection; sent back to the peer.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.disconnect(reason) should be replaced with
-     * ble.gap().disconnect(reason).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::disconnect(). A former call to
+     *             ble.disconnect(reason) should be replaced with
+     *             ble.gap().disconnect(reason).
      *
-     * @note: This version of disconnect() doesn't take a connection handle. It
+     * @note This version of disconnect() doesn't take a connection handle. It
      * works reliably only for stacks that are limited to a single
-     * connection. This API should be considered *deprecated* in favour of the
-     * alternative, which takes a connection handle. It will be dropped in the future.
+     * connection.
      */
     ble_error_t disconnect(Gap::DisconnectionReason_t reason) {
         return gap().disconnect(reason);
     }
 
     /**
-     * Returns the current GAP state of the device using a bitmask that
+     * Returns the current Gap state of the device using a bitmask that
      * describes whether the device is advertising or connected.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.getGapState() should be replaced with
-     * ble.gap().getState().
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::getState(). A former call to
+     *             ble.getGapState() should be replaced with
+     *             ble.gap().getState().
      */
     Gap::GapState_t getGapState(void) const {
         return gap().getState();
@@ -819,10 +858,10 @@
      * @return BLE_ERROR_NONE if the parameters were successfully filled into
      * the given structure pointed to by params.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.getPreferredConnectionParams() should be replaced with
-     * ble.gap().getPreferredConnectionParams().
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::getPreferredConnectionParams(). A former call to
+     *             ble.getPreferredConnectionParams() should be replaced with
+     *             ble.gap().getPreferredConnectionParams().
      */
     ble_error_t getPreferredConnectionParams(Gap::ConnectionParams_t *params) {
         return gap().getPreferredConnectionParams(params);
@@ -836,10 +875,10 @@
      * @param[in] params
      *               The structure containing the desired parameters.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.setPreferredConnectionParams() should be replaced with
-     * ble.gap().setPreferredConnectionParams().
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::setPreferredConnectionParams(). A former call to
+     *             ble.setPreferredConnectionParams() should be replaced with
+     *             ble.gap().setPreferredConnectionParams().
      */
     ble_error_t setPreferredConnectionParams(const Gap::ConnectionParams_t *params) {
         return gap().setPreferredConnectionParams(params);
@@ -855,38 +894,38 @@
      *              Pointer to desired connection parameters. If NULL is provided on a peripheral role,
      *              the parameters in the PPCP characteristic of the GAP service will be used instead.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.updateConnectionParams() should be replaced with
-     * ble.gap().updateConnectionParams().
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::updateConnectionParams(). A former call to
+     *             ble.updateConnectionParams() should be replaced with
+     *             ble.gap().updateConnectionParams().
      */
     ble_error_t updateConnectionParams(Gap::Handle_t handle, const Gap::ConnectionParams_t *params) {
         return gap().updateConnectionParams(handle, params);
     }
 
     /**
-     * Set the device name characteristic in the GAP service.
+     * Set the device name characteristic in the Gap service.
      * @param[in] deviceName
      *              The new value for the device-name. This is a UTF-8 encoded, <b>NULL-terminated</b> string.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.setDeviceName() should be replaced with
-     * ble.gap().setDeviceName().
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::setDeviceName(). A former call to
+     *             ble.setDeviceName() should be replaced with
+     *             ble.gap().setDeviceName().
      */
     ble_error_t setDeviceName(const uint8_t *deviceName) {
         return gap().setDeviceName(deviceName);
     }
 
     /**
-     * Get the value of the device name characteristic in the GAP service.
+     * Get the value of the device name characteristic in the Gap service.
      * @param[out]    deviceName
      *                  Pointer to an empty buffer where the UTF-8 *non NULL-
      *                  terminated* string will be placed. Set this
      *                  value to NULL in order to obtain the deviceName-length
      *                  from the 'length' parameter.
      *
-     * @param[in/out] lengthP
+     * @param[in,out] lengthP
      *                  (on input) Length of the buffer pointed to by deviceName;
      *                  (on output) the complete device name length (without the
      *                     null terminator).
@@ -896,38 +935,38 @@
      *     number of bytes actually returned in deviceName. The application may
      *     use this information to retry with a suitable buffer size.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.getDeviceName() should be replaced with
-     * ble.gap().getDeviceName().
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::getDeviceName(). A former call to
+     *             ble.getDeviceName() should be replaced with
+     *             ble.gap().getDeviceName().
      */
     ble_error_t getDeviceName(uint8_t *deviceName, unsigned *lengthP) {
         return gap().getDeviceName(deviceName, lengthP);
     }
 
     /**
-     * Set the appearance characteristic in the GAP service.
+     * Set the appearance characteristic in the Gap service.
      * @param[in] appearance
      *              The new value for the device-appearance.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.setAppearance() should be replaced with
-     * ble.gap().setAppearance().
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::setAppearance(). A former call to
+     *             ble.setAppearance() should be replaced with
+     *             ble.gap().setAppearance().
      */
     ble_error_t setAppearance(GapAdvertisingData::Appearance appearance) {
         return gap().setAppearance(appearance);
     }
 
     /**
-     * Get the appearance characteristic in the GAP service.
-     * @param[out] appearance
+     * Get the appearance characteristic in the Gap service.
+     * @param[out] appearanceP
      *               The new value for the device-appearance.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.getAppearance() should be replaced with
-     * ble.gap().getAppearance().
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::getAppearance(). A former call to
+     *             ble.getAppearance() should be replaced with
+     *             ble.gap().getAppearance().
      */
     ble_error_t getAppearance(GapAdvertisingData::Appearance *appearanceP) {
         return gap().getAppearance(appearanceP);
@@ -937,10 +976,10 @@
      * Set the radio's transmit power.
      * @param[in] txPower Radio transmit power in dBm.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.setTxPower() should be replaced with
-     * ble.gap().setTxPower().
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::setTxPower(). A former call to
+     *             ble.setTxPower() should be replaced with
+     *             ble.gap().setTxPower().
      */
     ble_error_t setTxPower(int8_t txPower) {
         return gap().setTxPower(txPower);
@@ -954,10 +993,10 @@
      * @param[out] countP
      *                 Out parameter to receive the array's size.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call to
-     * ble.getPermittedTxPowerValues() should be replaced with
-     * ble.gap().getPermittedTxPowerValues().
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::getPermittedTxPowerValues(). A former call to
+     *             ble.getPermittedTxPowerValues() should be replaced with
+     *             ble.gap().getPermittedTxPowerValues().
      */
     void getPermittedTxPowerValues(const int8_t **valueArrayPP, size_t *countP) {
         gap().getPermittedTxPowerValues(valueArrayPP, countP);
@@ -967,10 +1006,10 @@
      * Add a service declaration to the local server ATT table. Also add the
      * characteristics contained within.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from GattServer directly. A former call
-     * to ble.addService() should be replaced with
-     * ble.gattServer().addService().
+     * @deprecated You should use the parallel API from GattServer directly, refer to
+     *             GattServer::addService(). A former call
+     *             to ble.addService() should be replaced with
+     *             ble.gattServer().addService().
      */
     ble_error_t addService(GattService &service) {
         return gattServer().addService(service);
@@ -982,7 +1021,7 @@
      *                  Attribute handle for the value attribute of the characteristic.
      * @param[out]    buffer
      *                  A buffer to hold the value being read.
-     * @param[in/out] lengthP
+     * @param[in,out] lengthP
      *                  Length of the buffer being supplied. If the attribute
      *                  value is longer than the size of the supplied buffer,
      *                  this variable will return the total attribute value length
@@ -991,10 +1030,10 @@
      *
      * @return BLE_ERROR_NONE if a value was read successfully into the buffer.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from GattServer directly. A former call
-     * to ble.readCharacteristicValue() should be replaced with
-     * ble.gattServer().read().
+     * @deprecated You should use the parallel API from GattServer directly,
+     *             GattServer::read(GattAttribute::Handle_t,uint8_t,uint16_t). A former call
+     *             to ble.readCharacteristicValue() should be replaced with
+     *             ble.gattServer().read().
      */
     ble_error_t readCharacteristicValue(GattAttribute::Handle_t attributeHandle, uint8_t *buffer, uint16_t *lengthP) {
         return gattServer().read(attributeHandle, buffer, lengthP);
@@ -1008,7 +1047,7 @@
      *                  Attribute handle for the value attribute of the characteristic.
      * @param[out]    buffer
      *                  A buffer to hold the value being read.
-     * @param[in/out] lengthP
+     * @param[in,out] lengthP
      *                  Length of the buffer being supplied. If the attribute
      *                  value is longer than the size of the supplied buffer,
      *                  this variable will return the total attribute value length
@@ -1021,10 +1060,10 @@
      *     parameter to allow fetches for connection-specific multivalued
      *     attributes (such as the CCCDs).
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from GattServer directly. A former call
-     * to ble.readCharacteristicValue() should be replaced with
-     * ble.gattServer().read().
+     * @deprecated You should use the parallel API from GattServer directly, refer to
+     *             GattServer::read(Gap::Handle_t,GattAttribute::Handle_t,uint8_t,uint16_t).
+     *             A former call to ble.readCharacteristicValue() should be replaced with
+     *             ble.gattServer().read().
      */
     ble_error_t readCharacteristicValue(Gap::Handle_t connectionHandle, GattAttribute::Handle_t attributeHandle, uint8_t *buffer, uint16_t *lengthP) {
         return gattServer().read(connectionHandle, attributeHandle, buffer, lengthP);
@@ -1048,10 +1087,10 @@
      *
      * @return BLE_ERROR_NONE if we have successfully set the value of the attribute.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from GattServer directly. A former call
-     * to ble.updateCharacteristicValue() should be replaced with
-     * ble.gattServer().write().
+     * @deprecated You should use the parallel API from GattServer directly, refer to
+     *             GattServer::write(GattAttribute::Handle_t,const uint8_t,uint16_t,bool).
+     *             A former call to ble.updateCharacteristicValue() should be replaced with
+     *             ble.gattServer().write().
      */
     ble_error_t updateCharacteristicValue(GattAttribute::Handle_t  attributeHandle,
                                           const uint8_t           *value,
@@ -1082,10 +1121,10 @@
      *
      * @return BLE_ERROR_NONE if we have successfully set the value of the attribute.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from GattServer directly. A former call
-     * to ble.updateCharacteristicValue() should be replaced with
-     * ble.gattServer().write().
+     * @deprecated You should use the parallel API from GattServer directly, refer to
+     *             GattServer::write(Gap::Handle_t,GattAttribute::Handle_t,const uint8_t,uint16_t,bool).
+     *             A former call to ble.updateCharacteristicValue() should be replaced with
+     *             ble.gattServer().write().
      */
     ble_error_t updateCharacteristicValue(Gap::Handle_t            connectionHandle,
                                           GattAttribute::Handle_t  attributeHandle,
@@ -1110,10 +1149,10 @@
      *
      * @return BLE_ERROR_NONE on success.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from SecurityManager directly. A former
-     * call to ble.initializeSecurity(...) should be replaced with
-     * ble.securityManager().init(...).
+     * @deprecated You should use the parallel API from SecurityManager directly, refer to
+     *             SecurityManager.init(). A former
+     *             call to ble.initializeSecurity(...) should be replaced with
+     *             ble.securityManager().init(...).
      */
     ble_error_t initializeSecurity(bool                                      enableBonding = true,
                                    bool                                      requireMITM   = true,
@@ -1130,10 +1169,10 @@
      *
      * @return BLE_SUCCESS or appropriate error code indicating the reason of failure.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from SecurityManager directly. A former
-     * call to ble.getLinkSecurity(...) should be replaced with
-     * ble.securityManager().getLinkSecurity(...).
+     * @deprecated You should use the parallel API from SecurityManager directly, refer to
+     *             SecurityManager::getLinkSecurity(). A former
+     *             call to ble.getLinkSecurity(...) should be replaced with
+     *             ble.securityManager().getLinkSecurity(...).
      */
     ble_error_t getLinkSecurity(Gap::Handle_t connectionHandle, SecurityManager::LinkSecurityStatus_t *securityStatusP) {
         return securityManager().getLinkSecurity(connectionHandle, securityStatusP);
@@ -1147,10 +1186,10 @@
      * @retval BLE_ERROR_INVALID_STATE    If the API is called without module initialization or
      *                                    application registration.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from SecurityManager directly. A former
-     * call to ble.purgeAllBondingState() should be replaced with
-     * ble.securityManager().purgeAllBondingState().
+     * @deprecated You should use the parallel API from SecurityManager directly, refer to
+     *             SecurityManager::purgeAllBondingState(). A former
+     *             call to ble.purgeAllBondingState() should be replaced with
+     *             ble.securityManager().purgeAllBondingState().
      */
     ble_error_t purgeAllBondingState(void) {
         return securityManager().purgeAllBondingState();
@@ -1160,10 +1199,10 @@
      * Set up a callback for timeout events. Refer to Gap::TimeoutSource_t for
      * possible event types.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call
-     * to ble.onTimeout(callback) should be replaced with
-     * ble.gap().onTimeout(callback).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::onTimeout(). A former call
+     *             to ble.onTimeout(callback) should be replaced with
+     *             ble.gap().onTimeout(callback).
      */
     void onTimeout(Gap::TimeoutEventCallback_t timeoutCallback) {
         gap().onTimeout(timeoutCallback);
@@ -1172,10 +1211,10 @@
     /**
      * Set up a callback for connection events. Refer to Gap::ConnectionEventCallback_t.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call
-     * to ble.onConnection(callback) should be replaced with
-     * ble.gap().onConnection(callback).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::onConnection(). A former call
+     *             to ble.onConnection(callback) should be replaced with
+     *             ble.gap().onConnection(callback).
      */
     void onConnection(Gap::ConnectionEventCallback_t connectionCallback) {
         gap().onConnection(connectionCallback);
@@ -1184,15 +1223,24 @@
     /**
      * Append to a chain of callbacks to be invoked upon GAP disconnection.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call
-     * to ble.onDisconnection(callback) should be replaced with
-     * ble.gap().onDisconnection(callback).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::onDisconnection(). A former call
+     *             to ble.onDisconnection(callback) should be replaced with
+     *             ble.gap().onDisconnection(callback).
      */
     void onDisconnection(Gap::DisconnectionEventCallback_t disconnectionCallback) {
         gap().onDisconnection(disconnectionCallback);
     }
 
+    /**
+     * The same as onDisconnection(), but allows an object reference and member function
+     * to be added to the chain of callbacks.
+     *
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::onDisconnection(). A former call
+     *             to ble.onDisconnection(callback) should be replaced with
+     *             ble.gap().onDisconnection(callback).
+     */
     template<typename T>
     void onDisconnection(T *tptr, void (T::*mptr)(const Gap::DisconnectionCallbackParams_t*)) {
         gap().onDisconnection(tptr, mptr);
@@ -1214,10 +1262,10 @@
      *          The application handler to be invoked in response to a radio
      *          ACTIVE/INACTIVE event.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from Gap directly. A former call
-     * to ble.onRadioNotification(...) should be replaced with
-     * ble.gap().onRadioNotification(...).
+     * @deprecated You should use the parallel API from Gap directly, refer to
+     *             Gap::onRadioNotification(). A former call
+     *             to ble.onRadioNotification(...) should be replaced with
+     *             ble.gap().onRadioNotification(...).
      */
     void onRadioNotification(void (*callback)(bool)) {
         gap().onRadioNotification(callback);
@@ -1227,21 +1275,31 @@
      * Add a callback for the GATT event DATA_SENT (which is triggered when
      * updates are sent out by GATT in the form of notifications).
      *
-     * @Note: It is possible to chain together multiple onDataSent callbacks
+     * @note It is possible to chain together multiple onDataSent callbacks
      * (potentially from different modules of an application) to receive updates
      * to characteristics.
      *
-     * @Note: It is also possible to set up a callback into a member function of
+     * @note It is also possible to set up a callback into a member function of
      * some object.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from GattServer directly. A former call
-     * to ble.onDataSent(...) should be replaced with
-     * ble.gattServer().onDataSent(...).
+     * @deprecated You should use the parallel API from GattServer directly, refer to
+     *             GattServer::onDataSent(). A former call
+     *             to ble.onDataSent(...) should be replaced with
+     *             ble.gattServer().onDataSent(...).
      */
     void onDataSent(void (*callback)(unsigned count)) {
         gattServer().onDataSent(callback);
     }
+
+    /**
+     * The same as onDataSent(), but allows an object reference and member function
+     * to be added to the chain of callbacks.
+     *
+     * @deprecated You should use the parallel API from GattServer directly, refer to
+     *             GattServer::onDataSent(). A former call
+     *             to ble.onDataSent(...) should be replaced with
+     *             ble.gattServer().onDataSent(...).
+     */
     template <typename T> void onDataSent(T * objPtr, void (T::*memberPtr)(unsigned count)) {
         gattServer().onDataSent(objPtr, memberPtr);
     }
@@ -1253,22 +1311,32 @@
      * For a Central, this callback is triggered when a response is received for
      * a write request.
      *
-     * @Note: It is possible to chain together multiple onDataWritten callbacks
+     * @note It is possible to chain together multiple onDataWritten callbacks
      * (potentially from different modules of an application) to receive updates
      * to characteristics. Many services, such as DFU and UART, add their own
      * onDataWritten callbacks behind the scenes to trap interesting events.
      *
-     * @Note: It is also possible to set up a callback into a member function of
+     * @note It is also possible to set up a callback into a member function of
      * some object.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from GattServer directly. A former call
-     * to ble.onDataWritten(...) should be replaced with
-     * ble.gattServer().onDataWritten(...).
+     * @deprecated You should use the parallel API from GattServer directly, refer to
+     *             GattServer::onDataWritten(). A former call
+     *             to ble.onDataWritten(...) should be replaced with
+     *             ble.gattServer().onDataWritten(...).
      */
     void onDataWritten(void (*callback)(const GattWriteCallbackParams *eventDataP)) {
         gattServer().onDataWritten(callback);
     }
+
+    /**
+     * The same as onDataWritten(), but allows an object reference and member function
+     * to be added to the chain of callbacks.
+     *
+     * @deprecated You should use the parallel API from GattServer directly, refer to
+     *             GattServer::onDataWritten(). A former call
+     *             to ble.onDataWritten(...) should be replaced with
+     *             ble.gattServer().onDataWritten(...).
+     */
     template <typename T> void onDataWritten(T * objPtr, void (T::*memberPtr)(const GattWriteCallbackParams *context)) {
         gattServer().onDataWritten(objPtr, memberPtr);
     }
@@ -1277,29 +1345,39 @@
      * Set up a callback to be invoked on the peripheral when an attribute is
      * being read by a remote client.
      *
-     * @Note: This functionality may not be available on all underlying stacks.
+     * @note This functionality may not be available on all underlying stacks.
      * You could use GattCharacteristic::setReadAuthorizationCallback() as an
      * alternative.
      *
-     * @Note: It is possible to chain together multiple onDataRead callbacks
+     * @note It is possible to chain together multiple onDataRead callbacks
      * (potentially from different modules of an application) to receive updates
      * to characteristics. Services may add their own onDataRead callbacks
      * behind the scenes to trap interesting events.
      *
-     * @Note: It is also possible to set up a callback into a member function of
+     * @note It is also possible to set up a callback into a member function of
      * some object.
      *
      * @return BLE_ERROR_NOT_IMPLEMENTED if this functionality isn't available;
      *         else BLE_ERROR_NONE.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from GattServer directly. A former call
-     * to ble.onDataRead(...) should be replaced with
-     * ble.gattServer().onDataRead(...).
+     * @deprecated You should use the parallel API from GattServer directly, refer to
+     *             GattServer::onDataRead(). A former call
+     *             to ble.onDataRead(...) should be replaced with
+     *             ble.gattServer().onDataRead(...).
      */
     ble_error_t onDataRead(void (*callback)(const GattReadCallbackParams *eventDataP)) {
         return gattServer().onDataRead(callback);
     }
+
+    /**
+     * The same as onDataRead(), but allows an object reference and member function
+     * to be added to the chain of callbacks.
+     *
+     * @deprecated You should use the parallel API from GattServer directly, refer to
+     *             GattServer::onDataRead(). A former call
+     *             to ble.onDataRead(...) should be replaced with
+     *             ble.gattServer().onDataRead(...).
+     */
     template <typename T> ble_error_t onDataRead(T * objPtr, void (T::*memberPtr)(const GattReadCallbackParams *context)) {
         return gattServer().onDataRead(objPtr, memberPtr);
     }
@@ -1308,10 +1386,10 @@
      * Set up a callback for when notifications or indications are enabled for a
      * characteristic on the local GattServer.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from GattServer directly. A former call
-     * to ble.onUpdatesEnabled(callback) should be replaced with
-     * ble.gattServer().onUpdatesEnabled(callback).
+     * @deprecated You should use the parallel API from GattServer directly, refer to
+     *             GattServer::onUpdatesEnabled(). A former call
+     *             to ble.onUpdatesEnabled(callback) should be replaced with
+     *             ble.gattServer().onUpdatesEnabled(callback).
      */
     void onUpdatesEnabled(GattServer::EventCallback_t callback) {
         gattServer().onUpdatesEnabled(callback);
@@ -1321,10 +1399,10 @@
      * Set up a callback for when notifications or indications are disabled for a
      * characteristic on the local GattServer.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from GattServer directly. A former call
-     * to ble.onUpdatesEnabled(callback) should be replaced with
-     * ble.gattServer().onUpdatesEnabled(callback).
+     * @deprecated You should use the parallel API from GattServer directly, refer to
+     *             GattServer::onUpdatesDisabled(). A former call
+     *             to ble.onUpdatesEnabled(callback) should be replaced with
+     *             ble.gattServer().onUpdatesEnabled(callback).
      */
     void onUpdatesDisabled(GattServer::EventCallback_t callback) {
         gattServer().onUpdatesDisabled(callback);
@@ -1334,10 +1412,10 @@
      * Set up a callback for when the GATT server receives a response for an
      * indication event sent previously.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from GattServer directly. A former call
-     * to ble.onConfirmationReceived(callback) should be replaced with
-     * ble.gattServer().onConfirmationReceived(callback).
+     * @deprecated You should use the parallel API from GattServer directly, refer to
+     *             GattServer::onConfirmationReceived(). A former call
+     *             to ble.onConfirmationReceived(callback) should be replaced with
+     *             ble.gattServer().onConfirmationReceived(callback).
      */
     void onConfirmationReceived(GattServer::EventCallback_t callback) {
         gattServer().onConfirmationReceived(callback);
@@ -1350,10 +1428,10 @@
      * security request: bool allowBonding, bool requireMITM, and
      * SecurityIOCapabilities_t.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from SecurityManager directly. A former
-     * call to ble.onSecuritySetupInitiated(callback) should be replaced with
-     * ble.securityManager().onSecuritySetupInitiated(callback).
+     * @deprecated You should use the parallel API from SecurityManager directly, refer to
+     *             SecurityManager::onSecuritySetupInitiated(). A former
+     *             call to ble.onSecuritySetupInitiated(callback) should be replaced with
+     *             ble.securityManager().onSecuritySetupInitiated(callback).
      */
     void onSecuritySetupInitiated(SecurityManager::SecuritySetupInitiatedCallback_t callback) {
         securityManager().onSecuritySetupInitiated(callback);
@@ -1365,10 +1443,10 @@
      * devices. The callback is passed in the success/failure status of the
      * security setup procedure.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from SecurityManager directly. A former
-     * call to ble.onSecuritySetupCompleted(callback) should be replaced with
-     * ble.securityManager().onSecuritySetupCompleted(callback).
+     * @deprecated You should use the parallel API from SecurityManager directly, refer to
+     *             SecurityManager::onSecuritySetupCompleted(). A former
+     *             call to ble.onSecuritySetupCompleted(callback) should be replaced with
+     *             ble.securityManager().onSecuritySetupCompleted(callback).
      */
     void onSecuritySetupCompleted(SecurityManager::SecuritySetupCompletedCallback_t callback) {
         securityManager().onSecuritySetupCompleted(callback);
@@ -1382,10 +1460,10 @@
      * or both sides. The callback is passed in a SecurityManager::SecurityMode_t according
      * to the level of security in effect for the secured link.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from SecurityManager directly. A former
-     * call to ble.onLinkSecured(callback) should be replaced with
-     * ble.securityManager().onLinkSecured(callback).
+     * @deprecated You should use the parallel API from SecurityManager directly, refer to
+     *             SecurityManager::onLinkSecured(). A former
+     *             call to ble.onLinkSecured(callback) should be replaced with
+     *             ble.securityManager().onLinkSecured(callback).
      */
     void onLinkSecured(SecurityManager::LinkSecuredCallback_t callback) {
         securityManager().onLinkSecured(callback);
@@ -1395,10 +1473,10 @@
      * Set up a callback for successful bonding, meaning that link-specific security
      * context is stored persistently for a peer device.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from SecurityManager directly. A former
-     * call to ble.onSecurityContextStored(callback) should be replaced with
-     * ble.securityManager().onSecurityContextStored(callback).
+     * @deprecated You should use the parallel API from SecurityManager directly, refer to
+     *             SecurityManager::onSecurityContextStored(). A former
+     *             call to ble.onSecurityContextStored(callback) should be replaced with
+     *             ble.securityManager().onSecurityContextStored(callback).
      */
     void onSecurityContextStored(SecurityManager::HandleSpecificEvent_t callback) {
         securityManager().onSecurityContextStored(callback);
@@ -1411,10 +1489,10 @@
      * a passkey (or PIN) to authenticate the connection
      * attempt.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * You should use the parallel API from SecurityManager directly. A former
-     * call to ble.onPasskeyDisplay(callback) should be replaced with
-     * ble.securityManager().onPasskeyDisplay(callback).
+     * @deprecated You should use the parallel API from SecurityManager directly, refer to
+     *             SecurityManager::onPasskeyDisplay(). A former
+     *             call to ble.onPasskeyDisplay(callback) should be replaced with
+     *             ble.securityManager().onPasskeyDisplay(callback).
      */
     void onPasskeyDisplay(SecurityManager::PasskeyDisplayCallback_t callback) {
         return securityManager().onPasskeyDisplay(callback);
@@ -1438,7 +1516,8 @@
     BLEInstanceBase *transport; /* The device-specific backend */
 };
 
-typedef BLE BLEDevice; /* DEPRECATED. This type alias is retained for the sake of compatibility with older
+typedef BLE BLEDevice; /**< @deprecated This type alias is retained for the
+                        * sake of compatibility with older
                         * code. Will be dropped at some point soon.*/
 
-#endif // ifndef __BLE_H__
\ No newline at end of file
+#endif /* ifndef __BLE_H__ */
\ No newline at end of file
--- a/ble/BLEInstanceBase.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/BLEInstanceBase.h	Wed Apr 06 19:15:36 2016 +0100
@@ -28,22 +28,112 @@
 /**
  *  The interface for the transport object to be created by the target library's
  *  createBLEInstance().
+ *
+ * @note This class is part of the interface of BLE API with the implementation;
+ *       therefore, it is meant to be used only by porters rather than normal
+ *       BLE API users.
  */
 class BLEInstanceBase
 {
 public:
+    /**
+     * Initialize the underlying BLE stack. This should be called before
+     * anything else in the BLE API.
+     *
+     * @param[in] instanceID
+     *              The ID of the instance to initialize.
+     * @param[in] initCallback
+     *              A callback for when initialization completes for a BLE
+     *              instance. This is an optional parameter set to NULL when not
+     *              supplied.
+     *
+     * @return BLE_ERROR_NONE if the initialization procedure was started
+     *         successfully.
+     */
     virtual ble_error_t            init(BLE::InstanceID_t instanceID,
                                         FunctionPointerWithContext<BLE::InitializationCompleteCallbackContext *> initCallback) = 0;
+
+    /**
+     * Check whether the underlying stack has already been initialized,
+     * possible with a call to init().
+     *
+     * @return true if the initialization has completed for the underlying BLE
+     *         stack.
+     */
     virtual bool                   hasInitialized(void) const = 0;
+
+    /**
+     * Shutdown the underlying BLE stack. This includes purging the stack of
+     * GATT and GAP state and clearing all state from other BLE components
+     * such as the SecurityManager. init() must be called afterwards to
+     * re-instantiate services and GAP state.
+     *
+     * @return BLE_ERROR_NONE if the underlying stack and all other services of
+     *         the BLE API were shutdown correctly.
+     */
     virtual ble_error_t            shutdown(void)             = 0;
+
+    /**
+     * Fetches a string representation of the underlying BLE stack's version.
+     *
+     * @return A pointer to the string representation of the underlying
+     *         BLE stack's version.
+     */
     virtual const char *           getVersion(void)           = 0;
+
+    /**
+     * Accessor to Gap. This function is used by BLE::gap().
+     *
+     * @return A reference to a Gap object associated to this BLE instance.
+     */
     virtual Gap&                   getGap()                   = 0;
+
+    /**
+     * A const alternative to getGap().
+     *
+     * @return A const reference to a Gap object associated to this BLE instance.
+     */
     virtual const Gap&             getGap() const             = 0;
+
+    /**
+     * Accessor to GattServer. This function is used by BLE::gattServer().
+     *
+     * @return A reference to a GattServer object associated to this BLE instance.
+     */
     virtual GattServer&            getGattServer()            = 0;
+
+    /**
+     * A const alternative to getGattServer().
+     *
+     * @return A const reference to a GattServer object associated to this BLE instance.
+     */
     virtual const GattServer&      getGattServer() const      = 0;
+
+    /**
+     * Accessors to GattClient. This function is used by BLE::gattClient().
+     *
+     * @return A reference to a GattClient object associated to this BLE instance.
+     */
     virtual GattClient&            getGattClient()            = 0;
+
+    /**
+     * Accessors to SecurityManager. This function is used by BLE::securityManager().
+     *
+     * @return A reference to a SecurityManager object associated to this BLE instance.
+     */
     virtual SecurityManager&       getSecurityManager()       = 0;
+
+    /**
+     * A const alternative to getSecurityManager().
+     *
+     * @return A const reference to a SecurityManager object associated to this BLE instance.
+     */
     virtual const SecurityManager& getSecurityManager() const = 0;
+
+    /**
+     * Yield control to the BLE stack or to other tasks waiting for events.
+     * refer to BLE::waitForEvent().
+     */
     virtual void                   waitForEvent(void)         = 0;
 };
 
--- a/ble/BLEProtocol.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/BLEProtocol.h	Wed Apr 06 19:15:36 2016 +0100
@@ -51,16 +51,27 @@
     typedef uint8_t AddressBytes_t[ADDR_LEN]; /**< 48-bit address, in LSB format. */
 
     /**
-     * BLE address. It contains an address-type (@ref AddressType_t) and bytes (@ref AddressBytes_t).
+     * BLE address. It contains an address-type (AddressType_t) and bytes (AddressBytes_t).
      */
     struct Address_t {
-        AddressType_t  type;    /**< @ref AddressType_t */
-        AddressBytes_t address; /**< @ref AddressBytes_t */
+        AddressType_t  type;    /**< The type of the BLE address. */
+        AddressBytes_t address; /**< The BLE address. */
 
+        /**
+         * Construct an Address_t object with the supplied type and address.
+         *
+         * @param[in] typeIn
+         *              The BLE address type.
+         * @param[in] addressIn
+         *              The BLE address.
+         */
         Address_t(AddressType_t typeIn, const AddressBytes_t& addressIn) : type(typeIn) {
             std::copy(addressIn, addressIn + ADDR_LEN, address);
         }
 
+        /**
+         * Empty constructor.
+         */
         Address_t() : type(), address() {
         }
     };
--- a/ble/CallChainOfFunctionPointersWithContext.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/CallChainOfFunctionPointersWithContext.h	Wed Apr 06 19:15:36 2016 +0100
@@ -55,16 +55,17 @@
  * }
  * @endcode
  */
-
 template <typename ContextType>
 class CallChainOfFunctionPointersWithContext : public SafeBool<CallChainOfFunctionPointersWithContext<ContextType> > {
 public:
+    /**
+     * The type of each callback in the callchain.
+     */
     typedef FunctionPointerWithContext<ContextType> *pFunctionPointerWithContext_t;
 
 public:
-    /** Create an empty chain.
-     *
-     *  @param size (optional) Initial size of the chain.
+    /**
+     * Create an empty chain.
      */
     CallChainOfFunctionPointersWithContext() : chainHead(NULL) {
         /* empty */
@@ -74,58 +75,69 @@
         clear();
     }
 
-    /** Add a function at the front of the chain.
+    /**
+     * Add a function at the front of the chain.
      *
-     *  @param function A pointer to a void function.
+     * @param[in]  function
+     *              A pointer to a void function.
      *
-     *  @returns
-     *  The function object created for 'function'.
+     * @return  The function object created for @p function.
      */
     pFunctionPointerWithContext_t add(void (*function)(ContextType context)) {
         return common_add(new FunctionPointerWithContext<ContextType>(function));
     }
 
-    /** Add a function at the front of the chain.
+    /**
+     * Add a function at the front of the chain.
      *
-     *  @param tptr Pointer to the object to call the member function on.
-     *  @param mptr Pointer to the member function to be called.
+     * @param[in] tptr
+     *              Pointer to the object to call the member function on.
+     * @param[in] mptr
+     *              Pointer to the member function to be called.
      *
-     *  @returns
-     *  The function object created for 'tptr' and 'mptr'.
+     * @return  The function object created for @p tptr and @p mptr.
      */
     template<typename T>
     pFunctionPointerWithContext_t add(T *tptr, void (T::*mptr)(ContextType context)) {
         return common_add(new FunctionPointerWithContext<ContextType>(tptr, mptr));
     }
 
-    /** Add a function at the front of the chain.
+    /**
+     * Add a function at the front of the chain.
      *
-     *  @param func The FunctionPointerWithContext to add.
+     * @param[in] func
+     *              The FunctionPointerWithContext to add.
+     *
+     * @return  The function object created for @p func.
      */
     pFunctionPointerWithContext_t add(const FunctionPointerWithContext<ContextType>& func) {
         return common_add(new FunctionPointerWithContext<ContextType>(func));
     }
 
-    /** 
-     * Detach a function pointer from a callchain
-     * 
-     * @oaram toDetach FunctionPointerWithContext to detach from this callchain
-     * 
-     * @return true if a function pointer has been detached and false otherwise
-     */ 
-    bool detach(const FunctionPointerWithContext<ContextType>& toDetach) { 
+    /**
+     * Detach a function pointer from a callchain.
+     *
+     * @param[in] toDetach
+     *              FunctionPointerWithContext to detach from this callchain.
+     *
+     * @return true if a function pointer has been detached and false otherwise.
+     *
+     * @note It is safe to remove a function pointer while the chain is
+     *       traversed by call(ContextType).
+     */
+    bool detach(const FunctionPointerWithContext<ContextType>& toDetach) {
         pFunctionPointerWithContext_t current = chainHead;
         pFunctionPointerWithContext_t previous = NULL;
 
         while (current) {
-            if(*current == toDetach) { 
+            if(*current == toDetach) {
                 if(previous == NULL) {
-                    if(currentCalled == current) { 
+                    if(currentCalled == current) {
                         currentCalled = NULL;
                     }
                     chainHead = current->getNext();
                 } else {
-                    if(currentCalled == current) { 
+                    if(currentCalled == current) {
                         currentCalled = previous;
                     }
                     previous->chainAsNext(current->getNext());
@@ -141,7 +153,8 @@
         return false;
     }
 
-    /** Clear the call chain (remove all functions in the chain).
+    /**
+     * Clear the call chain (remove all functions in the chain).
      */
     void clear(void) {
         pFunctionPointerWithContext_t fptr = chainHead;
@@ -154,26 +167,32 @@
         chainHead = NULL;
     }
 
+    /**
+     * Check whether the callchain contains any callbacks.
+     *
+     * @return true if the callchain is not empty and false otherwise.
+     */
     bool hasCallbacksAttached(void) const {
         return (chainHead != NULL);
     }
 
-    /** Call all the functions in the chain in sequence
+    /**
+     * Call all the functions in the chain in sequence.
      */
     void call(ContextType context) {
         ((const CallChainOfFunctionPointersWithContext*) this)->call(context);
     }
 
     /**
-     * @brief same as above but const 
+     * Same as call() above, but const.
      */
     void call(ContextType context) const {
         currentCalled = chainHead;
 
-        while(currentCalled) { 
+        while(currentCalled) {
             currentCalled->call(context);
             // if this was the head and the call removed the head
-            if(currentCalled == NULL) { 
+            if(currentCalled == NULL) {
                 currentCalled = chainHead;
             } else {
                 currentCalled = currentCalled->getNext();
@@ -182,34 +201,41 @@
     }
 
     /**
-     * @brief same as above but with function call operator
-     * \code
-     * 
+     * Same as call(), but with function call operator.
+     * @code
+     *
      * void first(bool);
      * void second(bool);
-     * 
+     *
      * CallChainOfFunctionPointerWithContext<bool> foo;
-     * 
+     *
      * foo.attach(first);
      * foo.attach(second);
-     * 
+     *
      * // call the callchain like a function
      * foo(true);
-     * 
-     * \endcode
+     *
+     * @endcode
      */
     void operator()(ContextType context) const {
         call(context);
     }
 
     /**
-     * @brief bool conversion operation
+     * Bool conversion operation.
+     *
+     * @return true if the callchain is not empty and false otherwise.
      */
     bool toBool() const {
         return chainHead != NULL;
     }
 
 private:
+    /**
+     * Add a callback to the head of the callchain.
+     *
+     * @return A pointer to the head of the callchain.
+     */
     pFunctionPointerWithContext_t common_add(pFunctionPointerWithContext_t pf) {
         if (chainHead == NULL) {
             chainHead = pf;
@@ -222,10 +248,17 @@
     }
 
 private:
+    /**
+     * A pointer to the first callback in the callchain or NULL if the callchain is empty.
+     */
     pFunctionPointerWithContext_t chainHead;
-    // iterator during a function call, this has to be mutable because the call function is const.
-    // Note: mutable is the correct behaviour here, the iterator never leak outside the object.
-    // So the object can still be seen as logically const even if it change its internal state
+
+    /**
+     * Iterator during a function call, this has to be mutable because the call function is const.
+     *
+     * @note Mutable is the correct behaviour here, the iterator never leaks outside the object.
+     *       so the object can still be seen as logically const even if it is modified.
+     */
     mutable pFunctionPointerWithContext_t currentCalled;
 
 
--- a/ble/CharacteristicDescriptorDiscovery.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/CharacteristicDescriptorDiscovery.h	Wed Apr 06 19:15:36 2016 +0100
@@ -36,7 +36,7 @@
 public:
     /**
      * @brief Parameter type of CharacteristicDescriptorDiscovery::DiscoveryCallback_t.
-     * @detail Every time a characteristic descriptor has been discovered, the callback
+     * @details Every time a characteristic descriptor has been discovered, the callback
      * registered for the discovery operation through GattClient::discoverCharacteristicDescriptors
      * or DiscoveredCharacteristic::discoverDescriptors will be called with this parameter.
      *
--- a/ble/DiscoveredCharacteristic.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/DiscoveredCharacteristic.h	Wed Apr 06 19:15:36 2016 +0100
@@ -28,20 +28,24 @@
  * @brief Representation of a characteristic discovered during a GattClient
  * discovery procedure (see GattClient::launchServiceDiscovery ).
  *
- * @detail Provide detailed informations about a discovered characteristic like:
- *     - Its UUID (see #getUUID).
+ * @details Provide detailed informations about a discovered characteristic like:
+ *     - Its UUID (see getUUID()).
  *     - The most important handles of the characteristic definition
- *       (see #getDeclHandle, #getValueHandle, #getLastHandle )
- *     - Its properties (see #getProperties).
+ *       (see getDeclHandle(), getValueHandle(), getLastHandle())
+ *     - Its properties (see getProperties()).
  * This class also provide functions to operate on the characteristic:
- *     - Read the characteristic value (see #read)
- *     - Writing a characteristic value (see #write or #writeWoResponse)
+ *     - Read the characteristic value (see read())
+ *     - Writing a characteristic value (see write() or writeWoResponse())
  *     - Discover descriptors inside the characteristic definition. These descriptors
  *       extends the characteristic. More information about descriptor usage is
  *       available in DiscoveredCharacteristicDescriptor class.
  */
 class DiscoveredCharacteristic {
 public:
+    /**
+     * Structure that encapsulates the properties of a discovered
+     * characteristic.
+     */
     struct Properties_t {
         uint8_t _broadcast       :1; /**< Broadcasting the value permitted. */
         uint8_t _read            :1; /**< Reading the value permitted. */
@@ -52,19 +56,81 @@
         uint8_t _authSignedWrite :1; /**< Writing the value with Signed Write Command permitted. */
 
     public:
-        bool broadcast(void)       const {return _broadcast;      }
-        bool read(void)            const {return _read;           }
-        bool writeWoResp(void)     const {return _writeWoResp;    }
-        bool write(void)           const {return _write;          }
-        bool notify(void)          const {return _notify;         }
-        bool indicate(void)        const {return _indicate;       }
-        bool authSignedWrite(void) const {return _authSignedWrite;}
+        /**
+         * @brief   Check if broadcasting is permitted.
+         *
+         * @return  true if broadcasting the value is permitted, and false
+         *          otherwise.
+         */
+        bool broadcast(void) const {
+            return _broadcast;
+        }
+
+        /**
+         * @brief   Check reading is permitted.
+         *
+         * @return  true if reading the value is permitted, and false
+         *          otherwise.
+         */
+        bool read(void) const {
+            return _read;
+        }
+
+        /**
+         * @brief   Check if writing with Write Command is permitted.
+         *
+         * @return  true if writing the value with Write Command is permitted,
+         *          false otherwise.
+         */
+        bool writeWoResp(void) const {
+            return _writeWoResp;
+        }
+
+        /**
+         * @brief   Check if writing with Write Request is permitted.
+         *
+         * @return  true if writing the value with Write Request is permitted,
+         *          false otherwise.
+         */
+        bool write(void) const {
+            return _write;
+        }
+
+        /**
+         * @brief   Check notifications are permitted.
+         *
+         * @return  true if notifications of the value are permitted, false
+         *          otherwise.
+         */
+        bool notify(void) const {
+            return _notify;
+        }
+
+        /**
+         * @brief   Check if indications are permitted.
+         *
+         * @return  true if indications of the value are permitted, false
+         *          otherwise.
+         */
+        bool indicate(void) const {
+            return _indicate;
+        }
+
+        /**
+         * @brief   Check if writing with Signed Write Command is permitted.
+         *
+         * @return  true if writing the value with Signed Write Command is
+         *          permitted, false otherwise.
+         */
+        bool authSignedWrite(void) const {
+            return _authSignedWrite;
+        }
 
         /**
          * @brief "Equal to" operator for DiscoveredCharacteristic::Properties_t
          *
-         * @param lhs[in] The left hand side of the equality expression
-         * @param rhs[in] The right hand side of the equality expression
+         * @param[in] lhs The left hand side of the equality expression
+         * @param[in] rhs The right hand side of the equality expression
          *
          * @return true if operands are equals, false otherwise.
          */
@@ -101,8 +167,9 @@
      * than ATT_MTU - 1, this function must be called multiple times with
      * appropriate offset to read the complete value.
      *
-     * @param offset[in] The position - in the characteristic value bytes stream - where
-     * the read operation begin.
+     * @param[in] offset
+     *              The position - in the characteristic value bytes stream - where
+     *              the read operation begin.
      *
      * @return BLE_ERROR_NONE if a read has been initiated, or
      *         BLE_ERROR_INVALID_STATE if some internal state about the connection is invalid, or
@@ -115,9 +182,11 @@
      * @brief Same as #read(uint16_t) const but allow the user to register a callback
      * which will be fired once the read is done.
      *
-     * @param offset[in] The position - in the characteristic value bytes stream - where
-     * the read operation begin.
-     * @param onRead[in] Continuation of the read operation
+     * @param[in] offset
+     *              The position - in the characteristic value bytes stream - where
+     *              the read operation begin.
+     * @param[in] onRead
+     *              Continuation of the read operation
      */
     ble_error_t read(uint16_t offset, const GattClient::ReadCallback_t& onRead) const;
 
@@ -174,12 +243,21 @@
     ble_error_t write(uint16_t length, const uint8_t *value) const;
 
     /**
-     * Same as #write(uint16_t, const uint8_t *) const but register a callback
+     * Same as write(uint16_t, const uint8_t *) const but register a callback
      * which will be called once the data has been written.
      *
-     * @param[in] length The amount of bytes to write.
-     * @param[in] value The bytes to write.
-     * @param[in] onRead Continuation callback for the write operation
+     * @param[in] length
+     *              The amount of bytes to write.
+     * @param[in] value
+     *              The bytes to write.
+     * @param[in] onWrite
+     *              Continuation callback for the write operation
+     *
+     * @retval BLE_ERROR_NONE Successfully started the Write procedure, or
+     *         BLE_ERROR_INVALID_STATE if some internal state about the connection is invalid, or
+     *         BLE_STACK_BUSY if some client procedure is already in progress, or
+     *         BLE_ERROR_NO_MEM if there are no available buffers left to process the request, or
+     *         BLE_ERROR_OPERATION_NOT_PERMITTED due to the characteristic's properties.
      */
     ble_error_t write(uint16_t length, const uint8_t *value, const GattClient::WriteCallback_t& onWrite) const;
 
@@ -206,7 +284,7 @@
 
     /**
      * @brief Get the declaration handle of this characteristic.
-     * @detail The declaration handle is the first handle of a characteristic
+     * @details The declaration handle is the first handle of a characteristic
      * definition. The value accessible at this handle contains the following
      * informations:
      *    - The characteristics properties (see Properties_t). This value can
@@ -275,8 +353,10 @@
     /**
      * @brief "Equal to" operator for DiscoveredCharacteristic
      *
-     * @param lhs[in] The left hand side of the equality expression
-     * @param rhs[in] The right hand side of the equality expression
+     * @param[in] lhs
+     *              The left hand side of the equality expression
+     * @param[in] rhs
+     *              The right hand side of the equality expression
      *
      * @return true if operands are equals, false otherwise.
      */
@@ -293,10 +373,12 @@
     /**
      * @brief "Not equal to" operator for DiscoveredCharacteristic
      *
-     * @param lhs[in] The right hand side of the expression
-     * @param rhs[in] The left hand side of the expression
+     * @param[in] lhs
+     *              The right hand side of the expression
+     * @param[in] rhs
+     *              The left hand side of the expression
      *
-     * @return true if operands are not equals, false otherwise.
+     * @return true if operands are not equal, false otherwise.
      */
     friend bool operator !=(const DiscoveredCharacteristic& lhs, const DiscoveredCharacteristic& rhs) {
         return !(lhs == rhs);
@@ -314,15 +396,37 @@
     }
 
 protected:
+    /**
+     * Pointer to the underlying GattClient for this DiscoveredCharacteristic object.
+     */
     GattClient              *gattc;
 
 protected:
+    /**
+     * Discovered characteristic's UUID.
+     */
     UUID                     uuid;
+    /**
+     * Hold the configured properties of the discovered characteristic.
+     * For more information refer to Properties_t.
+     */
     Properties_t             props;
+    /**
+     * Value handle of the discovered characteristic's declaration attribute.
+     */
     GattAttribute::Handle_t  declHandle;
+    /**
+     * Value handle of the discovered characteristic's value attribute.
+     */
     GattAttribute::Handle_t  valueHandle;
+    /**
+     * Value handle of the discovered characteristic's last attribute.
+     */
     GattAttribute::Handle_t  lastHandle;
 
+    /**
+     * Handle for the connection where the characteristic was discovered.
+     */
     Gap::Handle_t            connHandle;
 };
 
--- a/ble/DiscoveredCharacteristicDescriptor.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/DiscoveredCharacteristicDescriptor.h	Wed Apr 06 19:15:36 2016 +0100
@@ -28,7 +28,7 @@
  * discovery procedure (see GattClient::discoverCharacteristicDescriptors or
  * DiscoveredCharacteristic::discoverDescriptors ).
  *
- * @detail Provide detailed informations about a discovered characteristic descriptor
+ * @details Provide detailed informations about a discovered characteristic descriptor
  * like:
  *     - Its UUID (see #getUUID).
  *     - Its handle (see #getAttributeHandle)
--- a/ble/DiscoveredService.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/DiscoveredService.h	Wed Apr 06 19:15:36 2016 +0100
@@ -25,34 +25,82 @@
  */
 class DiscoveredService {
 public:
-     void setup(UUID uuidIn, GattAttribute::Handle_t startHandleIn, GattAttribute::Handle_t endHandleIn) {
-         uuid        = uuidIn;
-         startHandle = startHandleIn;
-         endHandle   = endHandleIn;
-     }
+    /**
+     * Set information about the discovered service.
+     *
+     * @param[in] uuidIn
+     *              The UUID of the discovered service.
+     * @param[in] startHandleIn
+     *              The start handle of the discovered service in the peer's
+     *              ATT table.
+     * @param[in] endHandleIn
+     *              The end handle of the discovered service in the peer's
+     *              ATT table.
+     */
+    void setup(UUID uuidIn, GattAttribute::Handle_t startHandleIn, GattAttribute::Handle_t endHandleIn) {
+        uuid        = uuidIn;
+        startHandle = startHandleIn;
+        endHandle   = endHandleIn;
+    }
 
-     void setup(GattAttribute::Handle_t startHandleIn, GattAttribute::Handle_t endHandleIn) {
-         startHandle = startHandleIn;
-         endHandle   = endHandleIn;
-     }
+    /**
+     * Set the start and end handle of the discovered service.
+     * @param[in] startHandleIn
+     *              The start handle of the discovered service in the peer's
+     *              ATT table.
+     * @param[in] endHandleIn
+     *              The end handle of the discovered service in the peer's
+     *              ATT table.
+     */
+    void setup(GattAttribute::Handle_t startHandleIn, GattAttribute::Handle_t endHandleIn) {
+        startHandle = startHandleIn;
+        endHandle   = endHandleIn;
+    }
 
+    /**
+     * Set the long UUID of the discovered service.
+     *
+     * @param[in] longUUID
+     *              The long UUID of the discovered service.
+     * @param[in] order
+     *              The byte ordering of @p longUUID.
+     */
     void setupLongUUID(UUID::LongUUIDBytes_t longUUID, UUID::ByteOrder_t order = UUID::MSB) {
          uuid.setupLong(longUUID, order);
     }
 
 public:
+    /**
+     * Get the UUID of the discovered service.
+     *
+     * @return A reference to the UUID of the discovered service.
+     */
     const UUID &getUUID(void) const {
         return uuid;
     }
 
+    /**
+     * Get the start handle of the discovered service in the peer's ATT table.
+     *
+     * @return A reference to the start handle.
+     */
     const GattAttribute::Handle_t& getStartHandle(void) const {
         return startHandle;
     }
+
+    /**
+     * Get the end handle of the discovered service in the peer's ATT table.
+     *
+     * @return A reference to the end handle.
+     */
     const GattAttribute::Handle_t& getEndHandle(void) const {
         return endHandle;
     }
 
 public:
+    /**
+     * Construct a DiscoveredService instance.
+     */
     DiscoveredService() : uuid(UUID::ShortUUIDBytes_t(0)),
                           startHandle(GattAttribute::INVALID_HANDLE),
                           endHandle(GattAttribute::INVALID_HANDLE) {
--- a/ble/Gap.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/Gap.h	Wed Apr 06 19:15:36 2016 +0100
@@ -40,23 +40,24 @@
     /**
      * Address-type for BLEProtocol addresses.
      *
-     * @note: deprecated. Use BLEProtocol::AddressType_t instead.
+     * @deprecated Use BLEProtocol::AddressType_t instead.
      */
     typedef BLEProtocol::AddressType_t AddressType_t;
 
     /**
      * Address-type for BLEProtocol addresses.
-     * @note: deprecated. Use BLEProtocol::AddressType_t instead.
+     *
+     * @deprecated Use BLEProtocol::AddressType_t instead.
      */
     typedef BLEProtocol::AddressType_t addr_type_t;
 
     /**
      * Address-type for BLEProtocol addresses.
-     * \deprecated: Use BLEProtocol::AddressType_t instead.
      *
-     * DEPRECATION ALERT: The following constants have been left in their
-     * deprecated state to transparenly support existing applications which may
-     * have used Gap::ADDR_TYPE_*.
+     * @deprecated Use BLEProtocol::AddressType_t instead. The following
+     *             constants have been left in their deprecated state to
+     *             transparenly support existing applications which may have
+     *             used Gap::ADDR_TYPE_*.
      */
     enum DeprecatedAddressType_t {
         ADDR_TYPE_PUBLIC                        = BLEProtocol::AddressType::PUBLIC,
@@ -65,11 +66,27 @@
         ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE = BLEProtocol::AddressType::RANDOM_PRIVATE_NON_RESOLVABLE
     };
 
-    static const unsigned ADDR_LEN = BLEProtocol::ADDR_LEN; /**< Length (in octets) of the BLE MAC address. */
-    typedef BLEProtocol::AddressBytes_t Address_t; /**< 48-bit address, LSB format. @Note: Deprecated. Use BLEProtocol::AddressBytes_t instead. */
-    typedef BLEProtocol::AddressBytes_t address_t; /**< 48-bit address, LSB format. @Note: Deprecated. Use BLEProtocol::AddressBytes_t instead. */
+    /**
+     * Length (in octets) of the BLE MAC address.
+     */
+    static const unsigned ADDR_LEN = BLEProtocol::ADDR_LEN;
+    /**
+     * 48-bit address, LSB format.
+     *
+     * @deprecated Use BLEProtocol::AddressBytes_t instead.
+     */
+    typedef BLEProtocol::AddressBytes_t Address_t;
+    /**
+     * 48-bit address, LSB format.
+     *
+     * @deprecated Use BLEProtocol::AddressBytes_t instead.
+     */
+    typedef BLEProtocol::AddressBytes_t address_t;
 
 public:
+    /**
+     * Enumeration for timeout sources.
+     */
     enum TimeoutSource_t {
         TIMEOUT_SRC_ADVERTISING      = 0x00, /**< Advertising timeout. */
         TIMEOUT_SRC_SECURITY_REQUEST = 0x01, /**< Security request timeout. */
@@ -137,51 +154,94 @@
      * @experimental
      */
     struct Whitelist_t {
-        BLEProtocol::Address_t *addresses;
-        uint8_t                 size;
-        uint8_t                 capacity;
+        BLEProtocol::Address_t *addresses; /**< List of BLE addresses in the whitelist. */
+        uint8_t                 size;      /**< Total number of BLE addresses in this whitelist */
+        uint8_t                 capacity;  /**< Maximum number of BLE addresses that can be added to this whitelist. */
     };
 
 
-    /* Describes the current state of the device (more than one bit can be set). */
+    /**
+     * Describes the current state of the device (more than one bit can be set).
+     */
     struct GapState_t {
         unsigned advertising : 1; /**< Peripheral is currently advertising. */
         unsigned connected   : 1; /**< Peripheral is connected to a central. */
     };
 
-    typedef uint16_t Handle_t; /* Type for connection handle. */
+    /**
+     * Type for connection handle.
+     */
+    typedef uint16_t Handle_t;
 
+    /**
+     * Structure containing GAP connection parameters. When in peripheral role
+     * the connection parameters are suggestions. The choice of the connection
+     * parameters is eventually up to the central.
+     */
     typedef struct {
-        uint16_t minConnectionInterval;        /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/
-        uint16_t maxConnectionInterval;        /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/
-        uint16_t slaveLatency;                 /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/
-        uint16_t connectionSupervisionTimeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/
+        uint16_t minConnectionInterval;        /**< Minimum Connection Interval in 1.25 ms units, see BLE_GAP_CP_LIMITS.*/
+        uint16_t maxConnectionInterval;        /**< Maximum Connection Interval in 1.25 ms units, see BLE_GAP_CP_LIMITS.*/
+        uint16_t slaveLatency;                 /**< Slave Latency in number of connection events, see BLE_GAP_CP_LIMITS.*/
+        uint16_t connectionSupervisionTimeout; /**< Connection Supervision Timeout in 10 ms units, see BLE_GAP_CP_LIMITS.*/
     } ConnectionParams_t;
 
+    /**
+     * Enumeration for the possible GAP roles of a BLE device.
+     */
     enum Role_t {
         PERIPHERAL  = 0x1, /**< Peripheral Role. */
         CENTRAL     = 0x2, /**< Central Role.    */
     };
 
+    /**
+     * Structure containing data and metadata of a scanned advertising packet.
+     */
     struct AdvertisementCallbackParams_t {
-        BLEProtocol::AddressBytes_t              peerAddr;
-        int8_t                                   rssi;
-        bool                                     isScanResponse;
-        GapAdvertisingParams::AdvertisingType_t  type;
-        uint8_t                                  advertisingDataLen;
-        const uint8_t                           *advertisingData;
+        BLEProtocol::AddressBytes_t              peerAddr;           /**< The peer's BLE address. */
+        int8_t                                   rssi;               /**< The advertisement packet RSSI value. */
+        bool                                     isScanResponse;     /**< Whether this packet is the response to a scan request. */
+        GapAdvertisingParams::AdvertisingType_t  type;               /**< The type of advertisement. */
+        uint8_t                                  advertisingDataLen; /**< Length of the advertisement data. */
+        const uint8_t                           *advertisingData;    /**< Pointer to the advertisement packet's data. */
     };
+
+    /**
+     * Type for the handlers of advertisement callback events. Refer to
+     * Gap::startScan().
+     */
     typedef FunctionPointerWithContext<const AdvertisementCallbackParams_t *> AdvertisementReportCallback_t;
 
+    /**
+     * Encapsulates the parameters of a connection. This information is passed
+     * to the registered handler of connection events. Refer to Gap::onConnection().
+     */
     struct ConnectionCallbackParams_t {
-        Handle_t                    handle;
-        Role_t                      role;
-        BLEProtocol::AddressType_t  peerAddrType;
-        BLEProtocol::AddressBytes_t peerAddr;
-        BLEProtocol::AddressType_t  ownAddrType;
-        BLEProtocol::AddressBytes_t ownAddr;
-        const ConnectionParams_t   *connectionParams;
+        Handle_t                    handle;           /**< The ID for this connection */
+        Role_t                      role;             /**< This device's role in the connection */
+        BLEProtocol::AddressType_t  peerAddrType;     /**< The peer's BLE address type */
+        BLEProtocol::AddressBytes_t peerAddr;         /**< The peer's BLE address */
+        BLEProtocol::AddressType_t  ownAddrType;      /**< This device's BLE address type */
+        BLEProtocol::AddressBytes_t ownAddr;          /**< This devices's BLE address */
+        const ConnectionParams_t   *connectionParams; /**< The currently configured connection parameters */
 
+        /**
+         * Constructor for ConnectionCallbackParams_t.
+         *
+         * @param[in] handleIn
+         *              Value for ConnectionCallbackParams_t::handle
+         * @param[in] roleIn
+         *              Value for ConnectionCallbackParams_t::role
+         * @param[in] peerAddrTypeIn
+         *              Value for ConnectionCallbackParams_t::peerAddrType
+         * @param[in] peerAddrIn
+         *              Value for ConnectionCallbackParams_t::peerAddr
+         * @param[in] ownAddrTypeIn
+         *              Value for ConnectionCallbackParams_t::ownAddrType
+         * @param[in] ownAddrIn
+         *              Value for ConnectionCallbackParams_t::ownAddr
+         * @param[in] connectionParamsIn
+         *              Value for ConnectionCallbackParams_t::connectionParams
+         */
         ConnectionCallbackParams_t(Handle_t                    handleIn,
                                    Role_t                      roleIn,
                                    BLEProtocol::AddressType_t  peerAddrTypeIn,
@@ -201,10 +261,22 @@
         }
     };
 
+    /**
+     * Structure that encapsulates information about a disconnection event.
+     * Refer to Gap::onDisconnection().
+     */
     struct DisconnectionCallbackParams_t {
-        Handle_t              handle;
-        DisconnectionReason_t reason;
+        Handle_t              handle; /**< The ID of the connection that caused the disconnection event */
+        DisconnectionReason_t reason; /**< The reason of the disconnection event */
 
+        /**
+         * Constructor for DisconnectionCallbackParams_t.
+         *
+         * @param[in] handleIn
+         *              Value for DisconnectionCallbackParams_t::handle.
+         * @param[in] reasonIn
+         *              Value for DisconnectionCallbackParams_t::reason.
+         */
         DisconnectionCallbackParams_t(Handle_t              handleIn,
                                       DisconnectionReason_t reasonIn) :
             handle(handleIn),
@@ -213,22 +285,63 @@
     };
 
     static const uint16_t UNIT_1_25_MS  = 1250; /**< Number of microseconds in 1.25 milliseconds. */
+    /**
+     * Helper function to convert from units of milliseconds to GAP duration
+     * units.
+     *
+     * @param[in] durationInMillis
+     *              The duration in milliseconds.
+     *
+     * @return The duration in GAP duration units.
+     */
     static uint16_t MSEC_TO_GAP_DURATION_UNITS(uint32_t durationInMillis) {
         return (durationInMillis * 1000) / UNIT_1_25_MS;
     }
 
+    /**
+     * Type for the registered callbacks added to the timeout event callchain.
+     * Refer to Gap::onTimeout().
+     */
     typedef FunctionPointerWithContext<TimeoutSource_t> TimeoutEventCallback_t;
+    /**
+     * Type for the timeout event callchain. Refer to Gap::onTimeout().
+     */
     typedef CallChainOfFunctionPointersWithContext<TimeoutSource_t> TimeoutEventCallbackChain_t;
 
+    /**
+     * Type for the registered callbacks added to the connection event
+     * callchain. Refer to Gap::onConnection().
+     */
     typedef FunctionPointerWithContext<const ConnectionCallbackParams_t *> ConnectionEventCallback_t;
+    /**
+     * Type for the connection event callchain. Refer to Gap::onConnection().
+     */
     typedef CallChainOfFunctionPointersWithContext<const ConnectionCallbackParams_t *> ConnectionEventCallbackChain_t;
 
+    /**
+     * Type for the registered callbacks added to the disconnection event
+     * callchain. Refer to Gap::onDisconnetion().
+     */
     typedef FunctionPointerWithContext<const DisconnectionCallbackParams_t*> DisconnectionEventCallback_t;
+    /**
+     * Type for the disconnection event callchain. Refer to Gap::onDisconnection().
+     */
     typedef CallChainOfFunctionPointersWithContext<const DisconnectionCallbackParams_t*> DisconnectionEventCallbackChain_t;
 
+    /**
+     * Type for the handlers of radio notification callback events. Refer to
+     * Gap::onRadioNotification().
+     */
     typedef FunctionPointerWithContext<bool> RadioNotificationEventCallback_t;
 
+    /**
+     * Type for the handlers of shutdown callback events. Refer to
+     * Gap::onShutdown().
+     */
     typedef FunctionPointerWithContext<const Gap *> GapShutdownCallback_t;
+    /**
+     * Type for the shutdown event callchain. Refer to Gap::onShutdown().
+     */
     typedef CallChainOfFunctionPointersWithContext<const Gap *> GapShutdownCallbackChain_t;
 
     /*
@@ -239,6 +352,11 @@
      * Set the BTLE MAC address and type. Please note that the address format is
      * least significant byte first (LSB). Please refer to BLEProtocol::AddressBytes_t.
      *
+     * @param[in] type
+     *              The type of the BLE address to set.
+     * @param[in] address
+     *              The BLE address to set.
+     *
      * @return BLE_ERROR_NONE on success.
      */
     virtual ble_error_t setAddress(BLEProtocol::AddressType_t type, const BLEProtocol::AddressBytes_t address) {
@@ -252,6 +370,11 @@
     /**
      * Fetch the BTLE MAC address and type.
      *
+     * @param[out]  typeP
+     *                  The current BLE address type.
+     * @param[out]  address
+     *                  The current BLE address.
+     *
      * @return BLE_ERROR_NONE on success.
      */
     virtual ble_error_t getAddress(BLEProtocol::AddressType_t *typeP, BLEProtocol::AddressBytes_t address) {
@@ -263,28 +386,44 @@
     }
 
     /**
+     * Get the minimum advertising interval in milliseconds for connectable
+     * undirected and connectable directed event types supported by the
+     * underlying BLE stack.
+     *
      * @return Minimum Advertising interval in milliseconds for connectable
-     *      undirected and connectable directed event types.
+     *         undirected and connectable directed event types.
      */
     virtual uint16_t getMinAdvertisingInterval(void) const {
         return 0; /* Requesting action from porter(s): override this API if this capability is supported. */
     }
 
     /**
+     * Get the minimum advertising interval in milliseconds for scannable
+     * undirected and non-connectable undirected even types supported by the
+     * underlying BLE stack.
+     *
      * @return Minimum Advertising interval in milliseconds for scannable
-     *      undirected and non-connectable undirected event types.
+     *         undirected and non-connectable undirected event types.
      */
     virtual uint16_t getMinNonConnectableAdvertisingInterval(void) const {
         return 0; /* Requesting action from porter(s): override this API if this capability is supported. */
     }
 
     /**
+     * Get the maximum advertising interval in milliseconds for all event types
+     * supported by the underlying BLE stack.
+     *
      * @return Maximum Advertising interval in milliseconds.
      */
     virtual uint16_t getMaxAdvertisingInterval(void) const {
         return 0xFFFF; /* Requesting action from porter(s): override this API if this capability is supported. */
     }
 
+    /**
+     * Stop advertising. The current advertising parameters remain in effect.
+     *
+     * @retval BLE_ERROR_NONE if successfully stopped advertising procedure.
+     */
     virtual ble_error_t stopAdvertising(void) {
         return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */
     }
@@ -301,17 +440,18 @@
     /**
      * Create a connection (GAP Link Establishment).
      *
-     * @param peerAddr
-     *          48-bit address, LSB format.
-     * @param peerAddrType
-     *          Address type of the peer.
-     * @param connectionParams
-     *         Connection parameters.
-     * @param scanParams
-     *          Paramters to be used while scanning for the peer.
+     * @param[in] peerAddr
+     *              48-bit address, LSB format.
+     * @param[in] peerAddrType
+     *              Address type of the peer.
+     * @param[in] connectionParams
+     *              Connection parameters.
+     * @param[in] scanParams
+     *              Paramters to be used while scanning for the peer.
+     *
      * @return  BLE_ERROR_NONE if connection establishment procedure is started
-     *     successfully. The connectionCallChain (if set) will be invoked upon
-     *     a connection event.
+     *          successfully. The connectionCallChain (if set) will be invoked upon
+     *          a connection event.
      */
     virtual ble_error_t connect(const BLEProtocol::AddressBytes_t  peerAddr,
                                 BLEProtocol::AddressType_t         peerAddrType,
@@ -329,11 +469,12 @@
     /**
      * Create a connection (GAP Link Establishment).
      *
-     * \deprecated: This funtion overloads Gap::connect(const BLEProtocol::Address_t  peerAddr,
-                                                        BLEProtocol::AddressType_t    peerAddrType,
-                                                        const ConnectionParams_t     *connectionParams,
-                                                        const GapScanningParams      *scanParams)
-     *      to maintain backward compatibility for change from Gap::AddressType_t to BLEProtocol::AddressType_t
+     * @deprecated  This funtion overloads Gap::connect(const BLEProtocol::Address_t  peerAddr,
+     *                                                  BLEProtocol::AddressType_t    peerAddrType,
+     *                                                  const ConnectionParams_t     *connectionParams,
+     *                                                  const GapScanningParams      *scanParams)
+     *              to maintain backward compatibility for change from Gap::AddressType_t to
+     *              BLEProtocol::AddressType_t.
      */
     ble_error_t connect(const BLEProtocol::AddressBytes_t  peerAddr,
                         DeprecatedAddressType_t            peerAddrType,
@@ -348,8 +489,12 @@
      * be communicated to the application with an invocation of the
      * disconnectionCallback.
      *
-     * @param  reason
-     *           The reason for disconnection; to be sent back to the peer.
+     * @param[in] reason
+     *              The reason for disconnection; to be sent back to the peer.
+     * @param[in] connectionHandle
+     *              The handle of the connection to disconnect from.
+     *
+     * @return  BLE_ERROR_NONE if disconnection was successful.
      */
     virtual ble_error_t disconnect(Handle_t connectionHandle, DisconnectionReason_t reason) {
         /* avoid compiler warnings about unused variables */
@@ -364,13 +509,15 @@
      * be communicated to the application with an invocation of the
      * disconnectionCallback.
      *
-     * @param  reason
-     *           The reason for disconnection; to be sent back to the peer.
+     * @param[in] reason
+     *              The reason for disconnection; to be sent back to the peer.
+     *
+     * @return  BLE_ERROR_NONE if disconnection was successful.
      *
-     * @note: This version of disconnect() doesn't take a connection handle. It
-     * works reliably only for stacks that are limited to a single
-     * connection. This API should be considered *deprecated* in favour of the
-     * alternative, which takes a connection handle. It will be dropped in the future.
+     * @deprecated This version of disconnect() doesn't take a connection handle. It
+     *             works reliably only for stacks that are limited to a single
+     *             connection. Use instead Gap::disconnect(Handle_t connectionHandle,
+     *             DisconnectionReason_t reason) instead.
      */
     virtual ble_error_t disconnect(DisconnectionReason_t reason) {
         /* Avoid compiler warnings about unused variables. */
@@ -389,7 +536,7 @@
      *               for this is owned by the caller.
      *
      * @return BLE_ERROR_NONE if the parameters were successfully filled into
-     * the given structure pointed to by params.
+     *         the given structure pointed to by params.
      */
     virtual ble_error_t getPreferredConnectionParams(ConnectionParams_t *params) {
         /* Avoid compiler warnings about unused variables. */
@@ -405,6 +552,9 @@
      *
      * @param[in] params
      *               The structure containing the desired parameters.
+     *
+     * @return BLE_ERROR_NONE if the preferred connection params were set
+     *         correctly.
      */
     virtual ble_error_t setPreferredConnectionParams(const ConnectionParams_t *params) {
         /* Avoid compiler warnings about unused variables. */
@@ -414,16 +564,18 @@
     }
 
     /**
-     * Update connection parameters.
-     * In the central role this will initiate a Link Layer connection parameter update procedure.
-     * In the peripheral role, this will send the corresponding L2CAP request and wait for
-     * the central to perform the procedure.
+     * Update connection parameters. In the central role this will initiate a
+     * Link Layer connection parameter update procedure. In the peripheral role,
+     * this will send the corresponding L2CAP request and wait for the central
+     * to perform the procedure.
      *
      * @param[in] handle
      *              Connection Handle.
      * @param[in] params
      *              Pointer to desired connection parameters. If NULL is provided on a peripheral role,
      *              the parameters in the PPCP characteristic of the GAP service will be used instead.
+     *
+     * @return BLE_ERROR_NONE if the connection parameters were updated correctly.
      */
     virtual ble_error_t updateConnectionParams(Handle_t handle, const ConnectionParams_t *params) {
         /* avoid compiler warnings about unused variables */
@@ -435,8 +587,11 @@
 
     /**
      * Set the device name characteristic in the GAP service.
+     *
      * @param[in] deviceName
      *              The new value for the device-name. This is a UTF-8 encoded, <b>NULL-terminated</b> string.
+     *
+     * @return BLE_ERROR_NONE if the device name was set correctly.
      */
     virtual ble_error_t setDeviceName(const uint8_t *deviceName) {
         /* Avoid compiler warnings about unused variables. */
@@ -447,21 +602,25 @@
 
     /**
      * Get the value of the device name characteristic in the GAP service.
+     *
      * @param[out]    deviceName
      *                  Pointer to an empty buffer where the UTF-8 *non NULL-
      *                  terminated* string will be placed. Set this
      *                  value to NULL in order to obtain the deviceName-length
      *                  from the 'length' parameter.
      *
-     * @param[in/out] lengthP
+     * @param[in,out] lengthP
      *                  (on input) Length of the buffer pointed to by deviceName;
      *                  (on output) the complete device name length (without the
      *                     null terminator).
      *
+     * @return BLE_ERROR_NONE if the device name was fetched correctly from the
+     *         underlying BLE stack.
+     *
      * @note If the device name is longer than the size of the supplied buffer,
-     *     length will return the complete device name length, and not the
-     *     number of bytes actually returned in deviceName. The application may
-     *     use this information to retry with a suitable buffer size.
+     *       length will return the complete device name length, and not the
+     *       number of bytes actually returned in deviceName. The application may
+     *       use this information to retry with a suitable buffer size.
      */
     virtual ble_error_t getDeviceName(uint8_t *deviceName, unsigned *lengthP) {
         /* avoid compiler warnings about unused variables */
@@ -473,8 +632,11 @@
 
     /**
      * Set the appearance characteristic in the GAP service.
+     *
      * @param[in] appearance
      *              The new value for the device-appearance.
+     *
+     * @return BLE_ERROR_NONE if the new appearance was set correctly.
      */
     virtual ble_error_t setAppearance(GapAdvertisingData::Appearance appearance) {
         /* Avoid compiler warnings about unused variables. */
@@ -485,8 +647,12 @@
 
     /**
      * Get the appearance characteristic in the GAP service.
+     *
      * @param[out] appearance
-     *               The new value for the device-appearance.
+     *               The current device-appearance value.
+     *
+     * @return BLE_ERROR_NONE if the device-appearance was fetched correctly
+     *         from the underlying BLE stack.
      */
     virtual ble_error_t getAppearance(GapAdvertisingData::Appearance *appearanceP) {
         /* Avoid compiler warnings about unused variables. */
@@ -497,7 +663,12 @@
 
     /**
      * Set the radio's transmit power.
-     * @param[in] txPower Radio transmit power in dBm.
+     *
+     * @param[in] txPower
+     *              Radio's transmit power in dBm.
+     *
+     * @return BLE_ERROR_NONE if the new radio's transmit power was set
+     *         correctly.
      */
     virtual ble_error_t setTxPower(int8_t txPower) {
         /* Avoid compiler warnings about unused variables. */
@@ -523,8 +694,14 @@
     }
 
     /**
+     * Get the maximum size of the whitelist.
+     *
      * @return Maximum size of the whitelist.
      *
+     * @note If using mbed OS the size of the whitelist can be configured by
+     *       setting the YOTTA_CFG_WHITELIST_MAX_SIZE macro in your yotta
+     *       config file.
+     *
      * @experimental
      */
     virtual uint8_t getMaxWhitelistSize(void) const
@@ -536,7 +713,7 @@
      * Get the internal whitelist to be used by the Link Layer when scanning,
      * advertising or initiating a connection depending on the filter policies.
      *
-     * @param[in/out]   whitelist
+     * @param[in,out]   whitelist
      *                  (on input) whitelist.capacity contains the maximum number
      *                  of addresses to be returned.
      *                  (on output) The populated whitelist with copies of the
@@ -674,6 +851,15 @@
 
 protected:
     /* Override the following in the underlying adaptation layer to provide the functionality of scanning. */
+
+    /**
+     * Start scanning procedure in the underlying BLE stack.
+     *
+     * @param[in] scanningParams
+     *              The GAP scanning parameters.
+     *
+     * @return BLE_ERROR_NONE if the scan procedure started successfully.
+     */
     virtual ble_error_t startRadioScan(const GapScanningParams &scanningParams) {
         (void)scanningParams;
         return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */
@@ -684,8 +870,10 @@
      */
 public:
     /**
-     * Returns the current GAP state of the device using a bitmask that
+     * Get the current GAP state of the device using a bitmask that
      * describes whether the device is advertising or connected.
+     *
+     * @return The current GAP state of the device.
      */
     GapState_t getState(void) const {
         return state;
@@ -693,12 +881,17 @@
 
     /**
      * Set the GAP advertising mode to use for this device.
+     *
+     * @param[in] advType
+     *              The new type of the advertising packets.
      */
     void setAdvertisingType(GapAdvertisingParams::AdvertisingType_t advType) {
         _advParams.setAdvertisingType(advType);
     }
 
     /**
+     * Set the advertising interval.
+     *
      * @param[in] interval
      *              Advertising interval in units of milliseconds. Advertising
      *              is disabled if interval is 0. If interval is smaller than
@@ -709,15 +902,15 @@
      *              This field must be set to 0 if connectionMode is equal
      *              to ADV_CONNECTABLE_DIRECTED.
      *
-     * @note: Decreasing this value will allow central devices to detect a
-     * peripheral faster, at the expense of more power being used by the radio
-     * due to the higher data transmit rate.
+     * @note  Decreasing this value will allow central devices to detect a
+     *        peripheral faster, at the expense of more power being used by the radio
+     *        due to the higher data transmit rate.
      *
-     * @Note: [WARNING] This API previously used 0.625ms as the unit for its
-     * 'interval' argument. That required an explicit conversion from
-     * milliseconds using Gap::MSEC_TO_GAP_DURATION_UNITS(). This conversion is
-     * no longer required as the new units are milliseconds. Any application
-     * code depending on the old semantics needs to be updated accordingly.
+     * @note  [WARNING] This API previously used 0.625ms as the unit for its
+     *        @p interval argument. That required an explicit conversion from
+     *        milliseconds using Gap::MSEC_TO_GAP_DURATION_UNITS(). This conversion is
+     *        no longer required as the new units are milliseconds. Any application
+     *        code depending on the old semantics needs to be updated accordingly.
      */
     void setAdvertisingInterval(uint16_t interval) {
         if (interval == 0) {
@@ -729,6 +922,9 @@
     }
 
     /**
+     * Set the advertising timeout. The length of time to advertise for before
+     * a timeout event is generated.
+     *
      * @param[in] timeout
      *              Advertising timeout (in seconds) between 0x1 and 0x3FFF (1
      *              and 16383). Use 0 to disable the advertising timeout.
@@ -739,14 +935,12 @@
 
     /**
      * Start advertising.
+     *
+     * @return BLE_ERROR_NONE if the device started advertising successfully.
      */
     ble_error_t startAdvertising(void) {
-        ble_error_t rc;
         setAdvertisingData(); /* Update the underlying stack. */
-        if ((rc = startAdvertising(_advParams)) == BLE_ERROR_NONE) {
-            state.advertising = 1;
-        }
-        return rc;
+        return startAdvertising(_advParams);
     }
 
     /**
@@ -769,6 +963,9 @@
      *              The flags to be added. Please refer to
      *              GapAdvertisingData::Flags for valid flags. Multiple
      *              flags may be specified in combination.
+     *
+     * @return BLE_ERROR_NONE if the data was successfully added to the
+     *         advertising payload.
      */
     ble_error_t accumulateAdvertisingPayload(uint8_t flags) {
         ble_error_t rc;
@@ -785,8 +982,11 @@
      * as an additional 31 bytes if the advertising payload is too
      * small.
      *
-     * @param  app
-     *         The appearance of the peripheral.
+     * @param[in]  app
+     *              The appearance of the peripheral.
+     *
+     * @return BLE_ERROR_NONE if the data was successfully added to the
+     *         advertising payload.
      */
     ble_error_t accumulateAdvertisingPayload(GapAdvertisingData::Appearance app) {
         setAppearance(app);
@@ -805,8 +1005,11 @@
      * as an additional 31 bytes if the advertising payload is too
      * small.
      *
-     * @param  power
-     *         The max transmit power to be used by the controller (in dBm).
+     * @param[in]  power
+     *              The max transmit power to be used by the controller (in dBm).
+     *
+     * @return BLE_ERROR_NONE if the data was successfully added to the
+     *         advertising payload.
      */
     ble_error_t accumulateAdvertisingPayloadTxPower(int8_t power) {
         ble_error_t rc;
@@ -823,9 +1026,12 @@
      * The SCAN_RESPONSE message may be used as an additional 31 bytes if the
      * advertising payload is too small.
      *
-     * @param  type The type describing the variable length data.
-     * @param  data Data bytes.
-     * @param  len  Length of data.
+     * @param[in]  type
+     *              The type describing the variable length data.
+     * @param[in]  data
+     *              Data bytes.
+     * @param[in]  len
+     *              Length of data.
      *
      * @return BLE_ERROR_NONE if the advertisement payload was updated based on
      *         matching AD type; otherwise, an appropriate error.
@@ -854,11 +1060,14 @@
      * Update a particular ADV field in the advertising payload (based on
      * matching type).
      *
-     * @param[in] type  The ADV type field describing the variable length data.
-     * @param[in] data  Data bytes.
-     * @param[in] len   Length of data.
+     * @param[in] type
+     *              The ADV type field describing the variable length data.
+     * @param[in] data
+     *              Data bytes.
+     * @param[in] len
+     *              Length of data.
      *
-     * @note: If advertisements are enabled, then the update will take effect immediately.
+     * @note  If advertisements are enabled, then the update will take effect immediately.
      *
      * @return BLE_ERROR_NONE if the advertisement payload was updated based on
      *         matching AD type; otherwise, an appropriate error.
@@ -879,7 +1088,15 @@
     /**
      * Set up a particular, user-constructed advertisement payload for the
      * underlying stack. It would be uncommon for this API to be used directly;
-     * there are other APIs to build an advertisement payload (see above).
+     * there are other APIs to build an advertisement payload (refer to
+     * Gap::accumulateAdvertisingPayload()).
+     *
+     * @param[in]   payload
+     *                  A reference to a user constructed advertisement
+     *                  payload.
+     *
+     * @return BLE_ERROR_NONE if the advertisement payload was successfully
+     *         set.
      */
     ble_error_t setAdvertisingPayload(const GapAdvertisingData &payload) {
         _advPayload = payload;
@@ -887,8 +1104,11 @@
     }
 
     /**
-     * @return  Read back advertising data. Useful for storing and
-     *          restoring payload.
+     * Get a reference to the advertising payload.
+     *
+     * @return  Read back advertising data.
+     *
+     * @note Useful for storing and restoring payload.
      */
     const GapAdvertisingData &getAdvertisingPayload(void) const {
         return _advPayload;
@@ -898,9 +1118,15 @@
      * Accumulate a variable length byte-stream as an AD structure in the
      * scanResponse payload.
      *
-     * @param[in] type The type describing the variable length data.
-     * @param[in] data Data bytes.
-     * @param[in] len  Length of data.
+     * @param[in] type
+     *              The type describing the variable length data.
+     * @param[in] data
+     *              Data bytes.
+     * @param[in] len
+     *              Length of data.
+     *
+     * @return BLE_ERROR_NONE if the data was successfully added to the scan
+     *         response payload.
      */
     ble_error_t accumulateScanResponse(GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len) {
         ble_error_t rc;
@@ -913,10 +1139,10 @@
 
     /**
      * Reset any scan response prepared from prior calls to
-     * accumulateScanResponse().
+     * Gap::accumulateScanResponse().
      *
-     * Note: This should be followed by a call to setAdvertisingPayload() or
-     * startAdvertising() before the update takes effect.
+     * @note This should be followed by a call to Gap::setAdvertisingPayload() or
+     *       Gap::startAdvertising() before the update takes effect.
      */
     void clearScanResponse(void) {
         _scanResponse.clear();
@@ -925,6 +1151,7 @@
 
     /**
      * Set up parameters for GAP scanning (observer mode).
+     *
      * @param[in] interval
      *              Scan interval (in milliseconds) [valid values lie between 2.5ms and 10.24s].
      * @param[in] window
@@ -935,17 +1162,19 @@
      *              Set to True if active-scanning is required. This is used to fetch the
      *              scan response from a peer if possible.
      *
-     * The scanning window divided by the interval determines the duty cycle for
-     * scanning. For example, if the interval is 100ms and the window is 10ms,
-     * then the controller will scan for 10 percent of the time. It is possible
-     * to have the interval and window set to the same value. In this case,
-     * scanning is continuous, with a change of scanning frequency once every
-     * interval.
+     * @return BLE_ERROR_NONE if the scan parameters were correctly set.
      *
-     * Once the scanning parameters have been configured, scanning can be
-     * enabled by using startScan().
+     * @note The scanning window divided by the interval determines the duty cycle for
+     *       scanning. For example, if the interval is 100ms and the window is 10ms,
+     *       then the controller will scan for 10 percent of the time. It is possible
+     *       to have the interval and window set to the same value. In this case,
+     *       scanning is continuous, with a change of scanning frequency once every
+     *       interval.
      *
-     * @Note: The scan interval and window are recommendations to the BLE stack.
+     * @note Once the scanning parameters have been configured, scanning can be
+     *       enabled by using startScan().
+     *
+     * @note  The scan interval and window are recommendations to the BLE stack.
      */
     ble_error_t setScanParams(uint16_t interval       = GapScanningParams::SCAN_INTERVAL_MAX,
                               uint16_t window         = GapScanningParams::SCAN_WINDOW_MAX,
@@ -964,18 +1193,21 @@
 
     /**
      * Set up the scanInterval parameter for GAP scanning (observer mode).
+     *
      * @param[in] interval
      *              Scan interval (in milliseconds) [valid values lie between 2.5ms and 10.24s].
      *
-     * The scanning window divided by the interval determines the duty cycle for
-     * scanning. For example, if the interval is 100ms and the window is 10ms,
-     * then the controller will scan for 10 percent of the time. It is possible
-     * to have the interval and window set to the same value. In this case,
-     * scanning is continuous, with a change of scanning frequency once every
-     * interval.
+     * @return BLE_ERROR_NONE if the scan interval was correctly set.
      *
-     * Once the scanning parameters have been configured, scanning can be
-     * enabled by using startScan().
+     * @note The scanning window divided by the interval determines the duty cycle for
+     *       scanning. For example, if the interval is 100ms and the window is 10ms,
+     *       then the controller will scan for 10 percent of the time. It is possible
+     *       to have the interval and window set to the same value. In this case,
+     *       scanning is continuous, with a change of scanning frequency once every
+     *       interval.
+     *
+     * @note Once the scanning parameters have been configured, scanning can be
+     *       enabled by using startScan().
      */
     ble_error_t setScanInterval(uint16_t interval) {
         return _scanningParams.setInterval(interval);
@@ -983,21 +1215,24 @@
 
     /**
      * Set up the scanWindow parameter for GAP scanning (observer mode).
+     *
      * @param[in] window
      *              Scan Window (in milliseconds) [valid values lie between 2.5ms and 10.24s].
      *
-     * The scanning window divided by the interval determines the duty cycle for
-     * scanning. For example, if the interval is 100ms and the window is 10ms,
-     * then the controller will scan for 10 percent of the time. It is possible
-     * to have the interval and window set to the same value. In this case,
-     * scanning is continuous, with a change of scanning frequency once every
-     * interval.
+     * @return BLE_ERROR_NONE if the scan window was correctly set.
      *
-     * Once the scanning parameters have been configured, scanning can be
-     * enabled by using startScan().
+     * @note The scanning window divided by the interval determines the duty cycle for
+     *       scanning. For example, if the interval is 100ms and the window is 10ms,
+     *       then the controller will scan for 10 percent of the time. It is possible
+     *       to have the interval and window set to the same value. In this case,
+     *       scanning is continuous, with a change of scanning frequency once every
+     *       interval.
      *
-     * If scanning is already active, the updated value of scanWindow will be
-     * propagated to the underlying BLE stack.
+     * @note Once the scanning parameters have been configured, scanning can be
+     *       enabled by using startScan().
+     *
+     * @note If scanning is already active, the updated value of scanWindow will be
+     *       propagated to the underlying BLE stack.
      */
     ble_error_t setScanWindow(uint16_t window) {
         ble_error_t rc;
@@ -1015,14 +1250,17 @@
 
     /**
      * Set up parameters for GAP scanning (observer mode).
+     *
      * @param[in] timeout
      *              Scan timeout (in seconds) between 0x0001 and 0xFFFF; 0x0000 disables the timeout.
      *
-     * Once the scanning parameters have been configured, scanning can be
-     * enabled by using startScan().
+     * @return BLE_ERROR_NONE if the scan timeout was correctly set.
      *
-     * If scanning is already active, the updated value of scanTimeout will be
-     * propagated to the underlying BLE stack.
+     * @note Once the scanning parameters have been configured, scanning can be
+     *       enabled by using startScan().
+     *
+     * @note If scanning is already active, the updated value of scanTimeout will be
+     *       propagated to the underlying BLE stack.
      */
     ble_error_t setScanTimeout(uint16_t timeout) {
         ble_error_t rc;
@@ -1039,16 +1277,19 @@
     }
 
     /**
-     * Set up parameters for GAP scanning (observer mode).
+     * Modify the active scanning parameter for GAP scanning (observer mode).
+     * This is used to fetch the scan response from a peer if possible.
+     *
      * @param[in] activeScanning
-     *              Set to True if active-scanning is required. This is used to fetch the
-     *              scan response from a peer if possible.
+     *              Set to True if active-scanning is required.
      *
-     * Once the scanning parameters have been configured, scanning can be
-     * enabled by using startScan().
+     * @return BLE_ERROR_NONE if active scanning was successfully set.
      *
-     * If scanning is already in progress, then active-scanning will be enabled
-     * for the underlying BLE stack.
+     * @note Once the scanning parameters have been configured, scanning can be
+     *       enabled by using startScan().
+     *
+     * @note If scanning is already in progress, then active-scanning will be enabled
+     *       for the underlying BLE stack.
      */
     ble_error_t setActiveScanning(bool activeScanning) {
         _scanningParams.setActiveScanning(activeScanning);
@@ -1069,6 +1310,9 @@
      *              The application-specific callback to be invoked upon
      *              receiving every advertisement report. This can be passed in
      *              as NULL, in which case scanning may not be enabled at all.
+     *
+     * @return BLE_ERROR_NONE if the device successfully started the scan
+     *         procedure.
      */
     ble_error_t startScan(void (*callback)(const AdvertisementCallbackParams_t *params)) {
         ble_error_t err = BLE_ERROR_NONE;
@@ -1083,7 +1327,19 @@
     }
 
     /**
-     * Same as above, but this takes an (object, method) pair for a callback.
+     * Same as Gap::startScan(), but allows the possibility to add an object
+     * reference and member function as handler for advertisement event
+     * callbacks.
+     *
+     * @param[in] object
+     *              Pointer to the object of a class defining the member callback
+     *              function (@p callbackMember).
+     * @param[in] callbackMember
+     *              The member callback (within the context of an object) to be
+     *              invoked.
+     *
+     * @return BLE_ERROR_NONE if the device successfully started the scan
+     *         procedure.
      */
     template<typename T>
     ble_error_t startScan(T *object, void (T::*callbackMember)(const AdvertisementCallbackParams_t *params)) {
@@ -1120,21 +1376,58 @@
     }
 
 private:
+    /**
+     * Helper function used to set the advertising data in the underlying BLE stack.
+     *
+     * @return BLE_ERROR_NONE if the advertising data was successfully set.
+     */
     ble_error_t setAdvertisingData(void) {
         return setAdvertisingData(_advPayload, _scanResponse);
     }
 
 private:
+    /**
+     * Functionality that is BLE stack-dependent and must be implemented by the
+     * ported. This is a helper function to set the advertising data in the
+     * BLE stack.
+     *
+     * @param[in] advData
+     *              The new advertising data.
+     * @param[in] scanResponse
+     *              The new scan response data.
+     *
+     * @return BLE_ERROR_NONE if the advertising data was set successfully.
+     */
     virtual ble_error_t setAdvertisingData(const GapAdvertisingData &advData, const GapAdvertisingData &scanResponse) = 0;
+
+    /**
+     * Functionality that is BLE stack-dependent and must be implemented by the
+     * ported. This is a helper function to start the advertising procedure in
+     * the underlying BLE stack.
+     *
+     * @param[in]
+     *              The advertising parameters.
+     *
+     * @return BLE_ERROR_NONE if the advertising procedure was successfully
+     *         started.
+     */
     virtual ble_error_t startAdvertising(const GapAdvertisingParams &) = 0;
 
 public:
     /**
-     * Accessors to read back currently active advertising params.
+     * Accessor to read back currently active advertising parameters.
+     *
+     * @return A reference to the current advertising parameters.
      */
     GapAdvertisingParams &getAdvertisingParams(void) {
         return _advParams;
     }
+
+    /**
+     * A const alternative to Gap::getAdvertisingParams().
+     *
+     * @return A const reference to the current advertising parameters.
+     */
     const GapAdvertisingParams &getAdvertisingParams(void) const {
         return _advParams;
     }
@@ -1144,6 +1437,9 @@
      * the underlying stack. It would be uncommon for this API to be used
      * directly; there are other APIs to tweak advertisement parameters
      * individually.
+     *
+     * @param[in]   newParams
+     *                  The new advertising parameters.
      */
     void setAdvertisingParams(const GapAdvertisingParams &newParams) {
         _advParams = newParams;
@@ -1154,17 +1450,24 @@
     /**
      * Set up a callback for timeout events. Refer to TimeoutSource_t for
      * possible event types.
-     * @note It is possible to unregister callbacks using onTimeout().detach(callback)
+     *
+     * @param[in] callback
+     *              Event handler being registered.
+     *
+     * @note It is possible to unregister callbacks using onTimeout().detach(callback).
      */
     void onTimeout(TimeoutEventCallback_t callback) {
         timeoutCallbackChain.add(callback);
     }
 
     /**
-     * @brief provide access to the callchain of timeout event callbacks
-     * It is possible to register callbacks using onTimeout().add(callback);
-     * It is possible to unregister callbacks using onTimeout().detach(callback)
-     * @return The timeout event callbacks chain
+     * @brief Provide access to the callchain of timeout event callbacks.
+     *
+     * @note It is possible to register callbacks using onTimeout().add(callback).
+     *
+     * @note It is possible to unregister callbacks using onTimeout().detach(callback).
+     *
+     * @return A reference to the timeout event callbacks chain.
      */
     TimeoutEventCallbackChain_t& onTimeout() {
         return timeoutCallbackChain;
@@ -1172,18 +1475,41 @@
 
     /**
      * Append to a chain of callbacks to be invoked upon GAP connection.
+     *
+     * @param[in] callback
+     *              Event handler being registered.
+     *
      * @note It is possible to unregister callbacks using onConnection().detach(callback)
      */
-    void onConnection(ConnectionEventCallback_t callback) {connectionCallChain.add(callback);}
-
-    template<typename T>
-    void onConnection(T *tptr, void (T::*mptr)(const ConnectionCallbackParams_t*)) {connectionCallChain.add(tptr, mptr);}
+    void onConnection(ConnectionEventCallback_t callback) {
+        connectionCallChain.add(callback);
+    }
 
     /**
-     * @brief provide access to the callchain of connection event callbacks
-     * It is possible to register callbacks using onConnection().add(callback);
-     * It is possible to unregister callbacks using onConnection().detach(callback)
-     * @return The connection event callbacks chain
+     * Same as Gap::onConnection(), but allows the possibility to add an object
+     * reference and member function as handler for connection event
+     * callbacks.
+     *
+     * @param[in] tptr
+     *              Pointer to the object of a class defining the member callback
+     *              function (@p mptr).
+     * @param[in] mptr
+     *              The member callback (within the context of an object) to be
+     *              invoked.
+     */
+    template<typename T>
+    void onConnection(T *tptr, void (T::*mptr)(const ConnectionCallbackParams_t*)) {
+        connectionCallChain.add(tptr, mptr);
+    }
+
+    /**
+     * @brief Provide access to the callchain of connection event callbacks.
+     *
+     * @return A reference to the connection event callbacks chain.
+     *
+     * @note It is possible to register callbacks using onConnection().add(callback).
+     *
+     * @note It is possible to unregister callbacks using onConnection().detach(callback).
      */
     ConnectionEventCallbackChain_t& onConnection() {
         return connectionCallChain;
@@ -1191,18 +1517,41 @@
 
     /**
      * Append to a chain of callbacks to be invoked upon GAP disconnection.
-     * @note It is possible to unregister callbacks using onDisconnection().detach(callback)
+     *
+     * @param[in] callback
+                    Event handler being registered.
+     *
+     * @note It is possible to unregister callbacks using onDisconnection().detach(callback).
      */
-    void onDisconnection(DisconnectionEventCallback_t callback) {disconnectionCallChain.add(callback);}
-
-    template<typename T>
-    void onDisconnection(T *tptr, void (T::*mptr)(const DisconnectionCallbackParams_t*)) {disconnectionCallChain.add(tptr, mptr);}
+    void onDisconnection(DisconnectionEventCallback_t callback) {
+        disconnectionCallChain.add(callback);
+    }
 
     /**
-     * @brief provide access to the callchain of disconnection event callbacks
-     * It is possible to register callbacks using onDisconnection().add(callback);
-     * It is possible to unregister callbacks using onDisconnection().detach(callback)
-     * @return The disconnection event callbacks chain
+     * Same as Gap::onDisconnection(), but allows the possibility to add an object
+     * reference and member function as handler for disconnection event
+     * callbacks.
+     *
+     * @param[in] tptr
+     *              Pointer to the object of a class defining the member callback
+     *              function (@p mptr).
+     * @param[in] mptr
+     *              The member callback (within the context of an object) to be
+     *              invoked.
+     */
+    template<typename T>
+    void onDisconnection(T *tptr, void (T::*mptr)(const DisconnectionCallbackParams_t*)) {
+        disconnectionCallChain.add(tptr, mptr);
+    }
+
+    /**
+     * @brief Provide access to the callchain of disconnection event callbacks.
+     *
+     * @return A reference to the disconnection event callback chain.
+     *
+     * @note It is possible to register callbacks using onDisconnection().add(callback).
+     *
+     * @note It is possible to unregister callbacks using onDisconnection().detach(callback).
      */
     DisconnectionEventCallbackChain_t& onDisconnection() {
         return disconnectionCallChain;
@@ -1222,22 +1571,26 @@
      * devices, to manage peak current drawn during periods when the radio is on,
      * or to trigger sensor data collection for transmission in the Radio Event.
      *
-     * @param callback
-     *          The application handler to be invoked in response to a radio
-     *          ACTIVE/INACTIVE event.
-     *
-     * Or in the other version:
-     *
-     * @param tptr
-     *          Pointer to the object of a class defining the member callback
-     *          function (mptr).
-     * @param mptr
-     *          The member callback (within the context of an object) to be
-     *          invoked in response to a radio ACTIVE/INACTIVE event.
+     * @param[in] callback
+     *              The application handler to be invoked in response to a radio
+     *              ACTIVE/INACTIVE event.
      */
     void onRadioNotification(void (*callback)(bool param)) {
         radioNotificationCallback.attach(callback);
     }
+
+    /**
+     * Same as Gap::onRadioNotification(), but allows the posibility to
+     * register an object reference and member function as handler for radio
+     * notification events.
+     *
+     * @param[in] tptr
+     *              Pointer to the object of a class defining the member callback
+     *              function (@p mptr).
+     * @param[in] mptr
+     *              The member callback (within the context of an object) to be
+     *              invoked in response to a radio ACTIVE/INACTIVE event.
+     */
     template <typename T>
     void onRadioNotification(T *tptr, void (T::*mptr)(bool)) {
         radioNotificationCallback.attach(tptr, mptr);
@@ -1248,28 +1601,48 @@
      * Gap instance is about to shutdown (possibly as a result of a call
      * to BLE::shutdown()).
      *
-     * @Note: It is possible to chain together multiple onShutdown callbacks
+     * @param[in] callback
+     *              The handler that is being registered to be notified of
+     *              shutdown events.
+     *
+     * @note  It is possible to chain together multiple onShutdown callbacks
      * (potentially from different modules of an application) to be notified
      * before the Gap instance is shutdown.
      *
-     * @Note: It is also possible to set up a callback into a member function of
+     * @note  It is also possible to set up a callback into a member function of
      * some object.
      *
-     * @Note It is possible to unregister a callback using onShutdown().detach(callback)
+     * @note It is possible to unregister a callback using onShutdown().detach(callback)
      */
     void onShutdown(const GapShutdownCallback_t& callback) {
         shutdownCallChain.add(callback);
     }
+
+    /**
+     * Same as Gap::onShutdown(), but allows the posibility to
+     * register an object reference and member function as handler for shutdown
+     * events.
+     *
+     * @param[in] objPtr
+     *              Pointer to the object of a class defining the member callback
+     *              function (@p memberPtr).
+     * @param[in] memberPtr
+     *              The member callback (within the context of an object) to be
+     *              invoked in response to a shutdown event.
+     */
     template <typename T>
     void onShutdown(T *objPtr, void (T::*memberPtr)(void)) {
         shutdownCallChain.add(objPtr, memberPtr);
     }
 
     /**
-     * @brief provide access to the callchain of shutdown event callbacks
-     * It is possible to register callbacks using onShutdown().add(callback);
-     * It is possible to unregister callbacks using onShutdown().detach(callback)
-     * @return The shutdown event callbacks chain
+     * @brief Provide access to the callchain of shutdown event callbacks.
+     *
+     * @return A reference to the shutdown event callback chain.
+     *
+     * @note It is possible to register callbacks using onShutdown().add(callback).
+     *
+     * @note It is possible to unregister callbacks using onShutdown().detach(callback).
      */
     GapShutdownCallbackChain_t& onShutdown() {
         return shutdownCallChain;
@@ -1288,7 +1661,7 @@
      *
      * @return BLE_ERROR_NONE on success.
      *
-     * @note: Currently a call to reset() does not reset the advertising and
+     * @note  Currently a call to reset() does not reset the advertising and
      * scan parameters to default values.
      */
     virtual ble_error_t reset(void) {
@@ -1319,6 +1692,9 @@
     }
 
 protected:
+    /**
+     * Construct a Gap instance.
+     */
     Gap() :
         _advParams(),
         _advPayload(),
@@ -1338,6 +1714,26 @@
 
     /* Entry points for the underlying stack to report events back to the user. */
 public:
+    /**
+     * Helper function that notifies all registered handlers of an occurrence
+     * of a connection event. This function is meant to be called from the
+     * BLE stack specific implementation when a connection event occurs.
+     *
+     * @param[in] handle
+     *              The ID of the connection that generated the event.
+     * @param[in] role
+     *              The role of this BLE device in the connection.
+     * @param[in] peerAddrType
+     *              The peer's BLE address type.
+     * @param[in] peerAddr
+     *              The peer's BLE address.
+     * @param[in] ownAddrType
+     *              This device's BLE address type.
+     * @param[in] ownAddr
+     *              This device's BLE address.
+     * @param[in] connectionParams
+     *              The parameters configured for this connection.
+     */
     void processConnectionEvent(Handle_t                           handle,
                                 Role_t                             role,
                                 BLEProtocol::AddressType_t         peerAddrType,
@@ -1354,6 +1750,16 @@
         connectionCallChain.call(&callbackParams);
     }
 
+    /**
+     * Helper function that notifies all registered handlers of an occurrence
+     * of a disconnection event. This function is meant to be called from the
+     * BLE stack specific implementation when a disconnection event occurs.
+     *
+     * @param[in] handle
+     *              The ID of the connection that generated the event.
+     * @param[in] reason
+     *              The reason for disconnection.
+     */
     void processDisconnectionEvent(Handle_t handle, DisconnectionReason_t reason) {
         /* Update Gap state */
         --connectionCount;
@@ -1365,6 +1771,24 @@
         disconnectionCallChain.call(&callbackParams);
     }
 
+    /**
+     * Helper function that notifies the registered handler of a scanned
+     * advertisement packet. This function is meant to be called from the
+     * BLE stack specific implementation when a such event occurs.
+     *
+     * @param[in] peerAddr
+     *              The peer's BLE address.
+     * @param[in] rssi
+     *              The advertisement packet RSSI value.
+     * @param[in] isScanReponse
+     *              Whether this packet is the response to a scan request.
+     * @param[in] type
+     *              The type of advertisement.
+     * @param[in] advertisingDataLen
+     *              Length of the advertisement data.
+     * @param[in] advertisingData
+     *              Pointer to the advertisement packet's data.
+     */
     void processAdvertisementReport(const BLEProtocol::AddressBytes_t        peerAddr,
                                     int8_t                                   rssi,
                                     bool                                     isScanResponse,
@@ -1381,6 +1805,14 @@
         onAdvertisementReport.call(&params);
     }
 
+    /**
+     * Helper function that notifies all registered handlers of an occurrence
+     * of a timeout event. This function is meant to be called from the
+     * BLE stack specific implementation when a timeout event occurs.
+     *
+     * @param[in] source
+     *              The source of the timout event.
+     */
     void processTimeoutEvent(TimeoutSource_t source) {
         if (source == TIMEOUT_SRC_ADVERTISING) {
             /* Update gap state if the source is an advertising timeout */
@@ -1392,26 +1824,68 @@
     }
 
 protected:
+    /**
+     * Currently set advertising parameters.
+     */
     GapAdvertisingParams             _advParams;
+    /**
+     * Currently set advertising data.
+     */
     GapAdvertisingData               _advPayload;
+    /**
+     * Currently set scanning parameters.
+     */
     GapScanningParams                _scanningParams;
+    /**
+     * Currently set scan response data.
+     */
     GapAdvertisingData               _scanResponse;
 
     /**
      * Total number of open connections.
      */
     uint8_t                          connectionCount;
+    /**
+     * The current GAP state.
+     */
     GapState_t                       state;
+    /**
+     * Whether active scanning is set. This is used to fetch the scan response
+     * from a peer if possible.
+     */
     bool                             scanningActive;
 
 protected:
+    /**
+     * Callchain containing all registered callback handlers for timeout
+     * events.
+     */
     TimeoutEventCallbackChain_t       timeoutCallbackChain;
+    /**
+     * The registered callback handler for radio notification events.
+     */
     RadioNotificationEventCallback_t  radioNotificationCallback;
+    /**
+     * The registered callback handler for scanned advertisement packet
+     * notifications.
+     */
     AdvertisementReportCallback_t     onAdvertisementReport;
+    /**
+     * Callchain containing all registered callback handlers for connection
+     * events.
+     */
     ConnectionEventCallbackChain_t    connectionCallChain;
+    /**
+     * Callchain containing all registered callback handlers for disconnection
+     * events.
+     */
     DisconnectionEventCallbackChain_t disconnectionCallChain;
 
 private:
+    /**
+     * Callchain containing all registered callback handlers for shutdown
+     * events.
+     */
     GapShutdownCallbackChain_t shutdownCallChain;
 
 private:
--- a/ble/GapAdvertisingData.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/GapAdvertisingData.h	Wed Apr 06 19:15:36 2016 +0100
@@ -24,125 +24,125 @@
 
 #define GAP_ADVERTISING_DATA_MAX_PAYLOAD        (31)
 
-/**************************************************************************/
-/*!
-    \brief
-    This class provides several helper functions to generate properly
-    formatted GAP Advertising and Scan Response data payloads.
-
-    \note
-    See Bluetooth Specification 4.0 (Vol. 3), Part C, Sections 11 and 18
-    for further information on Advertising and Scan Response data.
-
-    \par Advertising and Scan Response Payloads
-    Advertising data and Scan Response data are organized around a set of
-    data types called 'AD types' in Bluetooth 4.0 (see the Bluetooth Core
-    Specification v4.0, Vol. 3, Part C, Sections 11 and 18).
-
-    \par
-    Each AD type has its own standardized assigned number, as defined
-    by the Bluetooth SIG:
-    https://www.bluetooth.org/en-us/specification/assigned-numbers/generic-access-profile
-
-    \par
-    For convenience, all appropriate AD types are encapsulated
-    in GapAdvertisingData::DataType.
-
-    \par
-    Before the AD Types and their payload (if any) can be inserted into
-    the Advertising or Scan Response frames, they need to be formatted as
-    follows:
-
-    \li \c Record length (1 byte).
-    \li \c AD Type (1 byte).
-    \li \c AD payload (optional; only present if record length > 1).
-
-    \par
-    This class takes care of properly formatting the payload, performs
-    some basic checks on the payload length, and tries to avoid common
-    errors like adding an exclusive AD field twice in the Advertising
-    or Scan Response payload.
-
-    \par EXAMPLE
-
-    \code
-
-    // ToDo
-
-    \endcode
-*/
-/**************************************************************************/
+/**
+ * @brief This class provides several helper functions to generate properly
+ *        formatted GAP Advertising and Scan Response data payloads.
+ *
+ * @note See Bluetooth Specification 4.0 (Vol. 3), Part C, Sections 11 and 18
+ *       for further information on Advertising and Scan Response data.
+ *
+ * @par Advertising and Scan Response Payloads
+ *      Advertising data and Scan Response data are organized around a set of
+ *      data types called 'AD types' in Bluetooth 4.0 (see the Bluetooth Core
+ *      Specification v4.0, Vol. 3, Part C, Sections 11 and 18).
+ *
+ * @par
+ *      Each AD type has its own standardized assigned number, as defined
+ *      by the Bluetooth SIG:
+ *      https://www.bluetooth.org/en-us/specification/assigned-numbers/generic-access-profile.
+ *
+ * @par
+ *      For convenience, all appropriate AD types are encapsulated
+ *      in GapAdvertisingData::DataType.
+ *
+ * @par
+ *      Before the AD Types and their payload (if any) can be inserted into
+ *      the Advertising or Scan Response frames, they need to be formatted as
+ *      follows:
+ *
+ * @li @c Record length (1 byte).
+ * @li @c AD Type (1 byte).
+ * @li @c AD payload (optional; only present if record length > 1).
+ *
+ * @par
+ *      This class takes care of properly formatting the payload, performs
+ *      some basic checks on the payload length, and tries to avoid common
+ *      errors like adding an exclusive AD field twice in the Advertising
+ *      or Scan Response payload.
+ *
+ * @par EXAMPLE
+ *
+ * @code
+ *
+ * // ToDo
+ *
+ * @endcode
+ */
 class GapAdvertisingData
 {
 public:
-    /**********************************************************************/
     /*!
-        \brief
-        A list of Advertising Data types commonly used by peripherals.
-        These AD types are used to describe the capabilities of the
-        peripheral, and are inserted inside the advertising or scan
-        response payloads.
-
-        \par Source
-        \li \c Bluetooth Core Specification 4.0 (Vol. 3), Part C, Section 11, 18
-        \li \c https://www.bluetooth.org/en-us/specification/assigned-numbers/generic-access-profile
-    */
-    /**********************************************************************/
+     * @brief A list of Advertising Data types commonly used by peripherals.
+     *        These AD types are used to describe the capabilities of the
+     *        peripheral, and are inserted inside the advertising or scan
+     *        response payloads.
+     *
+     * @par Source
+     *
+     * @li @c Bluetooth Core Specification 4.0 (Vol. 3), Part C, Section 11, 18.
+     * @li @c https://www.bluetooth.org/en-us/specification/assigned-numbers/generic-access-profile.
+     */
     enum DataType_t {
-        FLAGS                              = 0x01, /**< \ref *Flags */
-        INCOMPLETE_LIST_16BIT_SERVICE_IDS  = 0x02, /**< Incomplete list of 16-bit Service IDs */
-        COMPLETE_LIST_16BIT_SERVICE_IDS    = 0x03, /**< Complete list of 16-bit Service IDs */
-        INCOMPLETE_LIST_32BIT_SERVICE_IDS  = 0x04, /**< Incomplete list of 32-bit Service IDs (not relevant for Bluetooth 4.0) */
-        COMPLETE_LIST_32BIT_SERVICE_IDS    = 0x05, /**< Complete list of 32-bit Service IDs (not relevant for Bluetooth 4.0) */
-        INCOMPLETE_LIST_128BIT_SERVICE_IDS = 0x06, /**< Incomplete list of 128-bit Service IDs */
-        COMPLETE_LIST_128BIT_SERVICE_IDS   = 0x07, /**< Complete list of 128-bit Service IDs */
-        SHORTENED_LOCAL_NAME               = 0x08, /**< Shortened Local Name */
-        COMPLETE_LOCAL_NAME                = 0x09, /**< Complete Local Name */
-        TX_POWER_LEVEL                     = 0x0A, /**< TX Power Level (in dBm) */
-        DEVICE_ID                          = 0x10, /**< Device ID */
-        SLAVE_CONNECTION_INTERVAL_RANGE    = 0x12, /**< Slave Connection Interval Range */
-        LIST_128BIT_SOLICITATION_IDS       = 0x15, /**< List of 128 bit service UUIDs the device is looking for */
-        SERVICE_DATA                       = 0x16, /**< Service Data */
-        APPEARANCE                         = 0x19, /**< \ref Appearance */
-        ADVERTISING_INTERVAL               = 0x1A, /**< Advertising Interval */
-        MANUFACTURER_SPECIFIC_DATA         = 0xFF  /**< Manufacturer Specific Data */
+        FLAGS                              = 0x01, /**< Flags, refer to GapAdvertisingData::Flags_t. */
+        INCOMPLETE_LIST_16BIT_SERVICE_IDS  = 0x02, /**< Incomplete list of 16-bit Service IDs. */
+        COMPLETE_LIST_16BIT_SERVICE_IDS    = 0x03, /**< Complete list of 16-bit Service IDs. */
+        INCOMPLETE_LIST_32BIT_SERVICE_IDS  = 0x04, /**< Incomplete list of 32-bit Service IDs (not relevant for Bluetooth 4.0). */
+        COMPLETE_LIST_32BIT_SERVICE_IDS    = 0x05, /**< Complete list of 32-bit Service IDs (not relevant for Bluetooth 4.0). */
+        INCOMPLETE_LIST_128BIT_SERVICE_IDS = 0x06, /**< Incomplete list of 128-bit Service IDs. */
+        COMPLETE_LIST_128BIT_SERVICE_IDS   = 0x07, /**< Complete list of 128-bit Service IDs. */
+        SHORTENED_LOCAL_NAME               = 0x08, /**< Shortened Local Name. */
+        COMPLETE_LOCAL_NAME                = 0x09, /**< Complete Local Name. */
+        TX_POWER_LEVEL                     = 0x0A, /**< TX Power Level (in dBm). */
+        DEVICE_ID                          = 0x10, /**< Device ID. */
+        SLAVE_CONNECTION_INTERVAL_RANGE    = 0x12, /**< Slave Connection Interval Range. */
+        LIST_128BIT_SOLICITATION_IDS       = 0x15, /**< List of 128 bit service UUIDs the device is looking for. */
+        SERVICE_DATA                       = 0x16, /**< Service Data. */
+        APPEARANCE                         = 0x19, /**< Appearance, refer to GapAdvertisingData::Appearance_t. */
+        ADVERTISING_INTERVAL               = 0x1A, /**< Advertising Interval. */
+        MANUFACTURER_SPECIFIC_DATA         = 0xFF  /**< Manufacturer Specific Data. */
     };
-    typedef enum DataType_t DataType; /* Deprecated type alias. This may be dropped in a future release. */
-
-    /**********************************************************************/
-    /*!
-        \brief
-        A list of values for the FLAGS AD Type.
+    /**
+     * Type alias for GapAdvertisingData::DataType_t.
+     *
+     * @deprecated  This type alias will be dropped in future releases.
+     */
+    typedef enum DataType_t DataType;
 
-        \note
-        You can use more than one value in the FLAGS AD Type (ex.
-        LE_GENERAL_DISCOVERABLE and BREDR_NOT_SUPPORTED).
-
-        \par Source
-        \li \c Bluetooth Core Specification 4.0 (Vol. 3), Part C, Section 18.1
-    */
-    /**********************************************************************/
+    /**
+     *  @brief A list of values for the FLAGS AD Type.
+     *
+     *  @note You can use more than one value in the FLAGS AD Type (ex.
+     *        LE_GENERAL_DISCOVERABLE and BREDR_NOT_SUPPORTED).
+     *
+     *  @par Source
+     *
+     *  @li @c Bluetooth Core Specification 4.0 (Vol. 3), Part C, Section 18.1.
+     */
     enum Flags_t {
-        LE_LIMITED_DISCOVERABLE = 0x01, /**< *Peripheral device is discoverable for a limited period of time. */
+        LE_LIMITED_DISCOVERABLE = 0x01, /**< Peripheral device is discoverable for a limited period of time. */
         LE_GENERAL_DISCOVERABLE = 0x02, /**< Peripheral device is discoverable at any moment. */
         BREDR_NOT_SUPPORTED     = 0x04, /**< Peripheral device is LE only. */
         SIMULTANEOUS_LE_BREDR_C = 0x08, /**< Not relevant - central mode only. */
         SIMULTANEOUS_LE_BREDR_H = 0x10  /**< Not relevant - central mode only. */
     };
-    typedef enum Flags_t Flags; /* Deprecated type alias. This may be dropped in a future release. */
+    /**
+     * Type alias for GapAdvertisingData::Flags_t.
+     *
+     * @deprecated  This type alias will be dropped in future releases.
+     */
+    typedef enum Flags_t Flags;
 
-    /**********************************************************************/
-    /*!
-        \brief
-        A list of values for the APPEARANCE AD Type, which describes the
-        physical shape or appearance of the device.
-
-        \par Source
-        \li \c Bluetooth Core Specification Supplement, Part A, Section 1.12
-        \li \c Bluetooth Core Specification 4.0 (Vol. 3), Part C, Section 12.2
-        \li \c https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml
-    */
-    /**********************************************************************/
+    /**
+     *  @brief
+     *  A list of values for the APPEARANCE AD Type, which describes the
+     *  physical shape or appearance of the device.
+     *
+     *  @par Source
+     *
+     *  @li @c Bluetooth Core Specification Supplement, Part A, Section 1.12.
+     *  @li @c Bluetooth Core Specification 4.0 (Vol. 3), Part C, Section 12.2.
+     *  @li @c https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml.
+     */
     enum Appearance_t {
         UNKNOWN                                        = 0,     /**< Unknown or unspecified appearance type. */
         GENERIC_PHONE                                  = 64,    /**< Generic Phone. */
@@ -194,14 +194,22 @@
         OUTDOOR_LOCATION_POD                           = 5187,  /**< Outdoor Location Pod. */
         OUTDOOR_LOCATION_AND_NAVIGATION_POD            = 5188   /**< Outdoor Location and Navigation Pod. */
     };
-    typedef enum Appearance_t Appearance; /* Deprecated type alias. This may be dropped in a future release. */
+    /**
+     * Type alias for GapAdvertisingData::Appearance_t.
+     *
+     * @deprecated  This type alias will be dropped in future releases.
+     */
+    typedef enum Appearance_t Appearance;
 
+    /**
+     * Empty constructor.
+     */
     GapAdvertisingData(void) : _payload(), _payloadLen(0), _appearance(GENERIC_TAG) {
         /* empty */
     }
 
     /**
-     * Adds advertising data based on the specified AD type (see DataType).
+     * Adds advertising data based on the specified AD type (see GapAdvertisingData::DataType_t).
      * If the supplied AD type is already present in the advertising
      * payload, then the value is updated.
      *
@@ -222,14 +230,14 @@
      */
     ble_error_t addData(DataType_t advDataType, const uint8_t *payload, uint8_t len)
     {
-        // find field
+        /* Find field */
         uint8_t* field = findField(advDataType);
 
         if (field) {
-            // Field type already exist, either add to field or replace
+            /* Field type already exist, either add to field or replace */
             return addField(advDataType, payload, len, field);
         } else {
-            // field doesn't exists, insert new
+            /* Field doesn't exists, insert new */
             return appendField(advDataType, payload, len);
         }
     }
@@ -249,14 +257,14 @@
      */
     ble_error_t updateData(DataType_t advDataType, const uint8_t *payload, uint8_t len)
     {
-        // find field
+        /* Find field */
         uint8_t* field = findField(advDataType);
 
         if (field) {
-            // Field type already exist, replace field contents
+            /* Field type already exist, replace field contents */
             return updateField(advDataType, payload, len, field);
         } else {
-            // field doesn't exists, return an error
+            /* field doesn't exists, return an error */
             return BLE_ERROR_UNSPECIFIED;
         }
     }
@@ -268,7 +276,7 @@
      *           The APPEARANCE value to add.
      *
      * @return BLE_ERROR_BUFFER_OVERFLOW if the specified data would cause the
-     * advertising buffer to overflow, else BLE_ERROR_NONE.
+     *         advertising buffer to overflow, else BLE_ERROR_NONE.
      */
     ble_error_t addAppearance(Appearance appearance = GENERIC_TAG) {
         _appearance = appearance;
@@ -277,16 +285,17 @@
 
     /**
      * Helper function to add FLAGS data to the advertising payload.
-     * @param  flags
-     *           LE_LIMITED_DISCOVERABLE
-     *             The peripheral is discoverable for a limited period of time.
-     *           LE_GENERAL_DISCOVERABLE
-     *             The peripheral is permanently discoverable.
-     *           BREDR_NOT_SUPPORTED
-     *             This peripheral is a Bluetooth Low Energy only device (no EDR support).
+     *
+     * @param[in]  flags
+     *               LE_LIMITED_DISCOVERABLE
+     *                 The peripheral is discoverable for a limited period of time.
+     *               LE_GENERAL_DISCOVERABLE
+     *                 The peripheral is permanently discoverable.
+     *               BREDR_NOT_SUPPORTED
+     *                 This peripheral is a Bluetooth Low Energy only device (no EDR support).
      *
      * @return BLE_ERROR_BUFFER_OVERFLOW if the specified data would cause the
-     * advertising buffer to overflow, else BLE_ERROR_NONE.
+     *         advertising buffer to overflow, else BLE_ERROR_NONE.
      */
     ble_error_t addFlags(uint8_t flags = LE_GENERAL_DISCOVERABLE) {
         return addData(GapAdvertisingData::FLAGS, &flags, 1);
@@ -296,7 +305,7 @@
      * Helper function to add TX_POWER_LEVEL data to the advertising payload.
      *
      * @return BLE_ERROR_BUFFER_OVERFLOW if the specified data would cause the
-     * advertising buffer to overflow, else BLE_ERROR_NONE.
+     *         advertising buffer to overflow, else BLE_ERROR_NONE.
      */
     ble_error_t addTxPower(int8_t txPower) {
         /* To Do: Basic error checking to make sure txPower is in range. */
@@ -312,30 +321,40 @@
     }
 
     /**
-     * Returns a pointer to the current payload.
+     * Access the current payload.
+     *
+     * @return A pointer to the current payload.
      */
     const uint8_t *getPayload(void) const {
         return _payload;
     }
 
     /**
-     * Returns the current payload length (0..31 bytes).
+     * Get the current payload length.
+     *
+     * @return The current payload length (0..31 bytes).
      */
     uint8_t     getPayloadLen(void) const {
         return _payloadLen;
     }
 
     /**
-     * Returns the 16-bit appearance value for this device.
+     * Get the current appearance value.
+     *
+     * @return The 16-bit appearance value for this device.
      */
     uint16_t    getAppearance(void) const {
         return (uint16_t)_appearance;
     }
 
     /**
-     * Search advertisement data for field.
-     * Returns pointer to the first element in the field if found, NULL otherwise.
-     * Where the first element is the length of the field.
+     * Search advertisement data for a specific field.
+     *
+     * @param[in] type
+     *              The type of the field to find.
+     *
+     * @return A pointer to the first element in the field if found, NULL otherwise.
+     *         Where the first element is the length of the field.
      */
     const uint8_t* findField(DataType_t type) const {
         return findField(type);
@@ -343,7 +362,19 @@
 
 private:
     /**
-     * Append advertising data based on the specified AD type (see DataType)
+     * Append advertising data based on the specified AD type (see
+     * GapAdvertisingData::DataType_t).
+     *
+     * @param[in] advDataType
+     *              The type of the new data.
+     * @param[in] payload
+     *              A pointer to the data to be appended to the advertising
+     *              payload.
+     * @param[in] len
+     *              The length of th data pointed to by @p payload.
+     *
+     * @return BLE_ERROR_BUFFER_OVERFLOW if the specified data would cause the
+     *         advertising buffer to overflow, else BLE_ERROR_NONE.
      */
     ble_error_t appendField(DataType advDataType, const uint8_t *payload, uint8_t len)
     {
@@ -369,11 +400,15 @@
 
     /**
      * Search advertisement data for field.
-     * Returns pointer to the first element in the field if found, NULL otherwise.
-     * Where the first element is the length of the field.
+     *
+     * @param[in] type
+     *              The type of the data to find.
+     *
+     * @return A pointer to the first element in the field if found, NULL
+     *         otherwise. Where the first element is the length of the field.
      */
     uint8_t* findField(DataType_t type) {
-        // scan through advertisement data
+        /* Scan through advertisement data */
         for (uint8_t idx = 0; idx < _payloadLen; ) {
             uint8_t fieldType = _payload[idx + 1];
 
@@ -381,11 +416,11 @@
                 return &_payload[idx];
             }
 
-            // advance to next field
+            /* Advance to next field */
             idx += _payload[idx] + 1;
         }
 
-        // field not found
+        /* Field not found */
         return NULL;
     }
 
@@ -393,6 +428,17 @@
      * Given the a pointer to a field in the advertising payload it replaces
      * the existing data in the field with the supplied data.
      *
+     * @param[in] advDataType
+     *              The type of the new data.
+     * @param[in] payload
+     *              A pointer to the data to be added to the advertising
+     *              payload.
+     * @param[in] len
+     *              The length of th data pointed to by @p payload.
+     * @param[in] field
+     *              A pointer to the field of type @p advDataType in the
+     *              advertising buffer.
+     *
      * When the specified AD type is INCOMPLETE_LIST_16BIT_SERVICE_IDS,
      * COMPLETE_LIST_16BIT_SERVICE_IDS, INCOMPLETE_LIST_32BIT_SERVICE_IDS,
      * COMPLETE_LIST_32BIT_SERVICE_IDS, INCOMPLETE_LIST_128BIT_SERVICE_IDS,
@@ -400,14 +446,14 @@
      * supplied value is appended to the values previously added to the
      * payload.
      *
-     * Returns BLE_ERROR_NONE on success.
+     * @return BLE_ERROR_NONE on success.
      */
     ble_error_t addField(DataType_t advDataType, const uint8_t *payload, uint8_t len, uint8_t* field)
     {
         ble_error_t result = BLE_ERROR_BUFFER_OVERFLOW;
 
         switch(advDataType) {
-            // These fields will have the new data appended if there is sufficient space
+            /* These fields will have the new data appended if there is sufficient space */
             case INCOMPLETE_LIST_16BIT_SERVICE_IDS:
             case COMPLETE_LIST_16BIT_SERVICE_IDS:
             case INCOMPLETE_LIST_32BIT_SERVICE_IDS:
@@ -415,11 +461,13 @@
             case INCOMPLETE_LIST_128BIT_SERVICE_IDS:
             case COMPLETE_LIST_128BIT_SERVICE_IDS:
             case LIST_128BIT_SOLICITATION_IDS: {
-                // check if data fits
+                /* Check if data fits */
                 if ((_payloadLen + len) <= GAP_ADVERTISING_DATA_MAX_PAYLOAD) {
-                    // make room for new field by moving the remainder of the
-                    // advertisement payload "to the right" starting after the
-                    // TYPE field.
+                    /*
+                     * Make room for new field by moving the remainder of the
+                     * advertisement payload "to the right" starting after the
+                     * TYPE field.
+                     */
                     uint8_t* end = &_payload[_payloadLen];
 
                     while (&field[1] < end) {
@@ -427,12 +475,12 @@
                         end--;
                     }
 
-                    // insert new data
+                    /* Insert new data */
                     for (uint8_t idx = 0; idx < len; idx++) {
                         field[2 + idx] = payload[idx];
                     }
 
-                    // increment lengths
+                    /* Increment lengths */
                     field[0] += len;
                     _payloadLen += len;
 
@@ -441,7 +489,7 @@
 
                 break;
             }
-            //  These fields will be overwritten with the new value
+            /* These fields will be overwritten with the new value */
             default: {
                 result = updateField(advDataType, payload, len, field);
 
@@ -455,14 +503,26 @@
     /**
      * Given the a pointer to a field in the advertising payload it replaces
      * the existing data in the field with the supplied data.
-     * Returns BLE_ERROR_NONE on success.
+     *
+     * @param[in] advDataType
+     *              The type of the data to be updated.
+     * @param[in] payload
+     *              A pointer to the data to be updated to the advertising
+     *              payload.
+     * @param[in] len
+     *              The length of th data pointed to by @p payload.
+     * @param[in] field
+     *              A pointer to the field of type @p advDataType in the
+     *              advertising buffer.
+     *
+     * @return BLE_ERROR_NONE on success.
      */
     ble_error_t updateField(DataType_t advDataType, const uint8_t *payload, uint8_t len, uint8_t* field)
     {
         ble_error_t result = BLE_ERROR_BUFFER_OVERFLOW;
         uint8_t dataLength = field[0] - 1;
 
-        // new data has same length, do in-order replacement
+        /* New data has same length, do in-order replacement */
         if (len == dataLength) {
             for (uint8_t idx = 0; idx < dataLength; idx++) {
                 field[2 + idx] = payload[idx];
@@ -470,19 +530,19 @@
 
             result = BLE_ERROR_NONE;
         } else {
-            // check if data fits
+            /* Check if data fits */
             if ((_payloadLen - dataLength + len) <= GAP_ADVERTISING_DATA_MAX_PAYLOAD) {
 
-                // remove old field
+                /* Remove old field */
                 while ((field + dataLength + 2) < &_payload[_payloadLen]) {
                     *field = field[dataLength + 2];
                     field++;
                 }
 
-                // reduce length
+                /* Reduce length */
                 _payloadLen -= dataLength + 2;
 
-                // add new field
+                /* Add new field */
                 result = appendField(advDataType, payload, len);
             }
         }
@@ -490,9 +550,18 @@
         return result;
     }
 
+    /**
+     * The advertising data buffer
+     */
     uint8_t  _payload[GAP_ADVERTISING_DATA_MAX_PAYLOAD];
+    /**
+     * The length of the data added to the advertising buffer.
+     */
     uint8_t  _payloadLen;
+    /**
+     * Appearance value.
+     */
     uint16_t _appearance;
 };
 
-#endif // ifndef __GAP_ADVERTISING_DATA_H__
\ No newline at end of file
+#endif /* ifndef __GAP_ADVERTISING_DATA_H__ */
\ No newline at end of file
--- a/ble/GapAdvertisingParams.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/GapAdvertisingParams.h	Wed Apr 06 19:15:36 2016 +0100
@@ -25,24 +25,55 @@
  */
 class GapAdvertisingParams {
 public:
+    /**
+     * Minimum Advertising interval for connectable undirected and connectable
+     * directed events in 625us units - 20ms.
+     */
     static const unsigned GAP_ADV_PARAMS_INTERVAL_MIN        = 0x0020;
+    /**
+     * Minimum Advertising interval for scannable and non-connectable
+     * undirected events in 625us units - 100ms.
+     */
     static const unsigned GAP_ADV_PARAMS_INTERVAL_MIN_NONCON = 0x00A0;
+    /**
+     * Maximum Advertising interval in 625us units - 10.24s.
+     */
     static const unsigned GAP_ADV_PARAMS_INTERVAL_MAX        = 0x4000;
+    /**
+     * Maximum advertising timeout seconds.
+     */
     static const unsigned GAP_ADV_PARAMS_TIMEOUT_MAX         = 0x3FFF;
 
-    /*!
+    /**
      * Encapsulates the peripheral advertising modes, which determine how
      * the device appears to other central devices in hearing range.
      */
     enum AdvertisingType_t {
-        ADV_CONNECTABLE_UNDIRECTED,     /**< Vol 3, Part C, Section 9.3.4 and Vol 6, Part B, Section 2.3.1.1 */
-        ADV_CONNECTABLE_DIRECTED,       /**< Vol 3, Part C, Section 9.3.3 and Vol 6, Part B, Section 2.3.1.2 */
-        ADV_SCANNABLE_UNDIRECTED,       /**< Include support for Scan Response payloads, see Vol 6, Part B, Section 2.3.1.4 */
-        ADV_NON_CONNECTABLE_UNDIRECTED  /**< Vol 3, Part C, Section 9.3.2 and Vol 6, Part B, Section 2.3.1.3 */
+        ADV_CONNECTABLE_UNDIRECTED,     /**< Vol 3, Part C, Section 9.3.4 and Vol 6, Part B, Section 2.3.1.1. */
+        ADV_CONNECTABLE_DIRECTED,       /**< Vol 3, Part C, Section 9.3.3 and Vol 6, Part B, Section 2.3.1.2. */
+        ADV_SCANNABLE_UNDIRECTED,       /**< Include support for Scan Response payloads, see Vol 6, Part B, Section 2.3.1.4. */
+        ADV_NON_CONNECTABLE_UNDIRECTED  /**< Vol 3, Part C, Section 9.3.2 and Vol 6, Part B, Section 2.3.1.3. */
     };
-    typedef enum AdvertisingType_t AdvertisingType; /* Deprecated type alias. */
+    /**
+     * Type alias for GapAdvertisingParams::AdvertisingType_t.
+     *
+     * @deprecated  This type alias will be dropped in future releases.
+     */
+    typedef enum AdvertisingType_t AdvertisingType;
 
 public:
+    /**
+     * Construct an instance of GapAdvertisingParams.
+     *
+     * @param[in] advType
+     *              Type of advertising. Default is
+     *              GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED.
+     * @param[in] interval
+     *              Advertising interval in units of 0.625ms. Default is
+     *              GapAdvertisingParams::GAP_ADV_PARAMS_INTERVAL_MIN_NONCON.
+     * @param[in] timeout
+     *              Advertising timeout. Default is 0.
+     */
     GapAdvertisingParams(AdvertisingType_t advType  = ADV_CONNECTABLE_UNDIRECTED,
                          uint16_t          interval = GAP_ADV_PARAMS_INTERVAL_MIN_NONCON,
                          uint16_t          timeout  = 0) : _advType(advType), _interval(interval), _timeout(timeout) {
@@ -78,43 +109,99 @@
     }
 
     static const uint16_t UNIT_0_625_MS = 625;  /**< Number of microseconds in 0.625 milliseconds. */
+    /**
+     * Convert milliseconds to units of 0.625ms.
+     *
+     * @param[in] durationInMillis
+     *              The number of milliseconds to convert.
+     *
+     * @return The value of @p durationInMillis in units of 0.625ms.
+     */
     static uint16_t MSEC_TO_ADVERTISEMENT_DURATION_UNITS(uint32_t durationInMillis) {
         return (durationInMillis * 1000) / UNIT_0_625_MS;
     }
+    /**
+     * Convert units of 0.625ms to milliseconds.
+     *
+     * @param[in] gapUnits
+     *              The number of units of 0.625ms to convert.
+     *
+     * @return The value of @p gapUnits in milliseconds.
+     */
     static uint16_t ADVERTISEMENT_DURATION_UNITS_TO_MS(uint16_t gapUnits) {
         return (gapUnits * UNIT_0_625_MS) / 1000;
     }
 
+    /**
+     * Get the advertising type.
+     *
+     * @return The advertising type.
+     */
     AdvertisingType_t getAdvertisingType(void) const {
         return _advType;
     }
 
     /**
-     * @return the advertisement interval (in milliseconds).
+     * Get the advertising interval in milliseconds.
+     *
+     * @return The advertisement interval (in milliseconds).
      */
     uint16_t getInterval(void) const {
         return ADVERTISEMENT_DURATION_UNITS_TO_MS(_interval);
     }
 
     /**
-     * @return the advertisement interval in advertisement duration units (0.625ms units).
+     * Get the advertisement interval in units of 0.625ms.
+     *
+     * @return The advertisement interval in advertisement duration units (0.625ms units).
      */
     uint16_t getIntervalInADVUnits(void) const {
         return _interval;
     }
 
+    /**
+     * Get The advertising timeout.
+     *
+     * @return The advertising timeout (in seconds).
+     */
     uint16_t getTimeout(void) const {
         return _timeout;
     }
 
-    void setAdvertisingType(AdvertisingType_t newAdvType) {_advType = newAdvType;  }
-    void setInterval(uint16_t newInterval)                {_interval = MSEC_TO_ADVERTISEMENT_DURATION_UNITS(newInterval);}
-    void setTimeout(uint16_t newTimeout)                  {_timeout = newTimeout;  }
+    /**
+     * Set the advertising type.
+     *
+     * @param[in] newAdvType
+     *              The new advertising type.
+     */
+    void setAdvertisingType(AdvertisingType_t newAdvType) {
+        _advType = newAdvType;
+    }
+
+    /**
+     * Set the advertising interval in milliseconds.
+     *
+     * @param[in] newInterval
+     *              The new advertising interval in milliseconds.
+     */
+    void setInterval(uint16_t newInterval) {
+        _interval = MSEC_TO_ADVERTISEMENT_DURATION_UNITS(newInterval);
+    }
+
+    /**
+     * Set the advertising timeout.
+     *
+     * @param[in] newTimeout
+     *              The new advertising timeout (in seconds).
+     */
+    void setTimeout(uint16_t newTimeout) {
+        _timeout = newTimeout;
+    }
 
 private:
-    AdvertisingType_t _advType;
-    uint16_t          _interval; /* In ADV duration units (i.e. 0.625ms). */
-    uint16_t          _timeout;  /* In seconds. */
+    AdvertisingType_t _advType;  /**< The advertising type. */
+    uint16_t          _interval; /**< The advertising interval in ADV duration units (i.e. 0.625ms). */
+    uint16_t          _timeout;  /**< The advertising timeout in seconds. */
 };
 
-#endif // ifndef __GAP_ADVERTISING_PARAMS_H__
\ No newline at end of file
+#endif /* ifndef __GAP_ADVERTISING_PARAMS_H__ */
\ No newline at end of file
--- a/ble/GapScanningParams.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/GapScanningParams.h	Wed Apr 06 19:15:36 2016 +0100
@@ -27,31 +27,115 @@
     static const unsigned SCAN_TIMEOUT_MAX  = 0xFFFF; /**< Maximum Scan timeout in seconds. */
 
 public:
+    /**
+     * Construct an instance of GapScanningParams.
+     *
+     * @param[in] interval
+     *              The scan interval in milliseconds. Default is
+     *              GapScanningParams::SCAN_INTERVAL_MIN.
+     * @param[in] window
+     *              The scan window in milliseconds. Default is
+     *              GapScanningParams::SCAN_WINDOW_MAX.
+     * @param[in] timeout
+     *              The scan timeout in seconds. Default is 0.
+     * @param[in] activeScanning
+     *              Set to True if active-scanning is required. This is used to
+     *              fetch the scan response from a peer if possible. Default is
+     *              false.
+     */
     GapScanningParams(uint16_t interval       = SCAN_INTERVAL_MAX,
                       uint16_t window         = SCAN_WINDOW_MAX,
                       uint16_t timeout        = 0,
                       bool     activeScanning = false);
 
     static const uint16_t UNIT_0_625_MS = 625;  /**< Number of microseconds in 0.625 milliseconds. */
+    /**
+     * Convert milliseconds to units of 0.625ms.
+     *
+     * @param[in] durationInMillis
+     *              The number of milliseconds to convert.
+     *
+     * @return The value of @p durationInMillis in units of 0.625ms.
+     */
     static uint16_t MSEC_TO_SCAN_DURATION_UNITS(uint32_t durationInMillis) {
         return (durationInMillis * 1000) / UNIT_0_625_MS;
     }
 
+    /**
+     * Set the scan interval.
+     *
+     * @param[in] newIntervalInMS
+     *              New scan interval in milliseconds.
+     *
+     * @return BLE_ERROR_NONE if the new scan interval was set successfully.
+     */
     ble_error_t setInterval(uint16_t newIntervalInMS);
 
+    /**
+     * Set the scan window.
+     *
+     * @param[in] newWindowInMS
+     *              New scan window in milliseconds.
+     *
+     * @return BLE_ERROR_NONE if the new scan window was set successfully.
+     */
     ble_error_t setWindow(uint16_t newWindowInMS);
 
+    /**
+     * Set the scan timeout.
+     *
+     * @param[in] newTimeout
+     *              New scan timeout in seconds.
+     *
+     * @return BLE_ERROR_NONE if the new scan window was set successfully.
+     */
     ble_error_t setTimeout(uint16_t newTimeout);
 
-    void        setActiveScanning(bool activeScanning);
+    /**
+     * Set active scanning. This is used to fetch the scan response from a peer
+     * if possible.
+     *
+     * @param[in] activeScanning
+     *              The new boolean value of active scanning.
+     */
+    void setActiveScanning(bool activeScanning);
 
 public:
-    /* @Note: The following return durations in units of 0.625ms */
-    uint16_t getInterval(void) const {return _interval;}
-    uint16_t getWindow(void)   const {return _window;  }
+    /**
+     * Get the scan interval.
+     *
+     * @return the scan interval in units of 0.625ms.
+     */
+    uint16_t getInterval(void) const {
+        return _interval;
+    }
+
+    /**
+     * Get the scan window.
+     *
+     * @return the scan window in units of 0.625ms.
+     */
+    uint16_t getWindow(void) const {
+        return _window;
+    }
 
-    uint16_t getTimeout(void)  const {return _timeout; }
-    bool     getActiveScanning(void) const {return _activeScanning;}
+    /**
+     * Get the scan timeout.
+     *
+     * @return The scan timeout in seconds.
+     */
+    uint16_t getTimeout(void) const {
+        return _timeout;
+    }
+
+    /**
+     * Check whether active scanning is set.
+     *
+     * @return True if active scanning is set, false otherwise.
+     */
+    bool getActiveScanning(void) const {
+        return _activeScanning;
+    }
 
 private:
     uint16_t _interval; /**< Scan interval in units of 625us (between 2.5ms and 10.24s). */
@@ -65,4 +149,4 @@
     GapScanningParams& operator =(const GapScanningParams &in);
 };
 
-#endif // ifndef __GAP_SCANNING_PARAMS_H__
\ No newline at end of file
+#endif /* ifndef __GAP_SCANNING_PARAMS_H__ */
\ No newline at end of file
--- a/ble/GattAttribute.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/GattAttribute.h	Wed Apr 06 19:15:36 2016 +0100
@@ -19,9 +19,20 @@
 
 #include "UUID.h"
 
+/**
+ * Instances of this class encapsulate the data that belongs to a Bluetooth Low
+ * Energy attribute.
+ */
 class GattAttribute {
 public:
+    /**
+     * Type for the handle or ID of the attribute in the ATT table. These are
+     * unique and are usually generated by the underlying BLE stack.
+     */
     typedef uint16_t Handle_t;
+    /**
+     * Define the value of an invalid attribute handle.
+     */
     static const Handle_t INVALID_HANDLE = 0x0000;
 
 public:
@@ -55,21 +66,103 @@
     }
 
 public:
-    Handle_t    getHandle(void)         const {return _handle;        }
-    const UUID &getUUID(void)           const {return _uuid;          }
-    uint16_t    getLength(void)         const {return _len;           }
-    uint16_t    getMaxLength(void)      const {return _lenMax;        }
-    uint16_t   *getLengthPtr(void)            {return &_len;          }
-    void        setHandle(Handle_t id)        {_handle = id;          }
-    uint8_t    *getValuePtr(void)             {return _valuePtr;      }
-    bool        hasVariableLength(void) const {return _hasVariableLen;}
+    /**
+     * Get the attribute's handle in the ATT table.
+     *
+     * @return The attribute's handle.
+     */
+    Handle_t getHandle(void) const {
+        return _handle;
+    }
+
+    /**
+     * The UUID of the characteristic that this attribute belongs to.
+     *
+     * @return The characteristic's UUID.
+     */
+    const UUID &getUUID(void) const {
+        return _uuid;
+    }
+
+    /**
+     * Get the current length of the attribute value.
+     *
+     * @return The current length of the attribute value.
+     */
+    uint16_t getLength(void) const {
+        return _len;
+    }
+
+    /**
+     * Get the maximum length of the attribute value.
+     *
+     * The maximum length of the attribute value.
+     */
+    uint16_t getMaxLength(void) const {
+        return _lenMax;
+    }
+
+    /**
+     * Get a pointer to the current length of the attribute value.
+     *
+     * @return A pointer to the current length of the attribute value.
+     */
+    uint16_t *getLengthPtr(void) {
+        return &_len;
+    }
+
+    /**
+     * Set the attribute handle.
+     *
+     * @param[in] id
+     *              The new attribute handle.
+     */
+    void setHandle(Handle_t id) {
+        _handle = id;
+    }
+
+    /**
+     * Get a pointer to the attribute value.
+     *
+     * @return A pointer to the attribute value.
+     */
+    uint8_t *getValuePtr(void) {
+        return _valuePtr;
+    }
+
+    /**
+     * Check whether the length of the attribute's value can change over time.
+     *
+     * @return true if the attribute has variable length, false otherwise.
+     */
+    bool hasVariableLength(void) const {
+        return _hasVariableLen;
+    }
 
 private:
-    UUID      _uuid;           /* Characteristic UUID. */
+    /**
+     * Characteristic's UUID.
+     */
+    UUID      _uuid;
+    /**
+     * Pointer to the attribute's value.
+     */
     uint8_t  *_valuePtr;
-    uint16_t  _lenMax;         /* Maximum length of the value. */
-    uint16_t  _len;            /* Current length of the value. */
+    /**
+     * Maximum length of the value pointed to by GattAttribute::_valuePtr.
+     */
+    uint16_t  _lenMax;
+    /**
+     * Current length of the value pointed to by GattAttribute::_valuePtr.
+     */
+    uint16_t  _len;
+    /**
+     * Whether the length of the value can change over time.
+     */
     bool      _hasVariableLen;
+    /**
+     * The attribute's handle in the ATT table.
+     */
     Handle_t  _handle;
 
 private:
@@ -78,4 +171,4 @@
     GattAttribute& operator=(const GattAttribute &);
 };
 
-#endif // ifndef __GATT_ATTRIBUTE_H__
\ No newline at end of file
+#endif /* ifndef __GATT_ATTRIBUTE_H__ */
\ No newline at end of file
--- a/ble/GattCallbackParamTypes.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/GattCallbackParamTypes.h	Wed Apr 06 19:15:36 2016 +0100
@@ -18,6 +18,9 @@
 #define __GATT_CALLBACK_PARAM_TYPES_H__
 
 struct GattWriteCallbackParams {
+    /**
+     * Enumeration for write operations.
+     */
     enum WriteOp_t {
         OP_INVALID               = 0x00,  /**< Invalid operation. */
         OP_WRITE_REQ             = 0x01,  /**< Write request. */
@@ -28,20 +31,32 @@
         OP_EXEC_WRITE_REQ_NOW    = 0x06,  /**< Execute write request: immediately execute all prepared writes. */
     };
 
-    Gap::Handle_t            connHandle;
-    GattAttribute::Handle_t  handle;
-    WriteOp_t                writeOp; /**< Type of write operation. */
-    uint16_t                 offset;  /**< Offset for the write operation. */
-    uint16_t                 len;
-    const uint8_t           *data;    /* @note: Data might not persist beyond the callback; make a local copy if needed. */
+    Gap::Handle_t            connHandle; /**< The handle of the connection that triggered the event */
+    GattAttribute::Handle_t  handle;     /**< Attribute Handle to which the write operation applies. */
+    WriteOp_t                writeOp;    /**< Type of write operation. */
+    uint16_t                 offset;     /**< Offset for the write operation. */
+    uint16_t                 len;        /**< Length (in bytes) of the data to write. */
+    /**
+     * Pointer to the data to write.
+     *
+     * @note Data might not persist beyond the callback; make a local copy if
+     *       needed.
+     */
+    const uint8_t           *data;
 };
 
 struct GattReadCallbackParams {
-    Gap::Handle_t            connHandle;
-    GattAttribute::Handle_t  handle;
-    uint16_t                 offset;  /**< Offset for the read operation. */
-    uint16_t                 len;
-    const uint8_t           *data;    /* @note: Data might not persist beyond the callback; make a local copy if needed. */
+    Gap::Handle_t            connHandle; /**< The handle of the connection that triggered the event */
+    GattAttribute::Handle_t  handle;     /**< Attribute Handle to which the read operation applies. */
+    uint16_t                 offset;     /**< Offset for the read operation. */
+    uint16_t                 len;        /**< Length (in bytes) of the data to read. */
+    /**
+     * Pointer to the data read.
+     *
+     * @note Data might not persist beyond the callback; make a local copy if
+     *       needed.
+     */
+    const uint8_t           *data;
 };
 
 enum GattAuthCallbackReply_t {
@@ -60,34 +75,41 @@
 };
 
 struct GattWriteAuthCallbackParams {
-    Gap::Handle_t            connHandle;
-    GattAttribute::Handle_t  handle;
-    uint16_t                 offset; /**< Offset for the write operation. */
-    uint16_t                 len;    /**< Length of the incoming data. */
-    const uint8_t           *data;   /**< Incoming data, variable length. */
-    GattAuthCallbackReply_t  authorizationReply; /* This is the out parameter that the callback 
-                                                  * needs to set to AUTH_CALLBACK_REPLY_SUCCESS 
-                                                  * for the request to proceed. */
+    Gap::Handle_t            connHandle; /**< The handle of the connection that triggered the event */
+    GattAttribute::Handle_t  handle;     /**< Attribute Handle to which the write operation applies. */
+    uint16_t                 offset;     /**< Offset for the write operation. */
+    uint16_t                 len;        /**< Length of the incoming data. */
+    const uint8_t           *data;       /**< Incoming data, variable length. */
+    /**
+     * This is the out parameter that the callback needs to set to
+     * AUTH_CALLBACK_REPLY_SUCCESS for the request to proceed.
+     */
+    GattAuthCallbackReply_t  authorizationReply;
 };
 
 struct GattReadAuthCallbackParams {
-    Gap::Handle_t            connHandle;
-    GattAttribute::Handle_t  handle;
-    uint16_t                 offset; /**< Offset for the read operation. */
-    uint16_t                 len;    /**< Optional: new length of the outgoing data. */
-    uint8_t                 *data;   /**< Optional: new outgoing data. Leave at NULL if data is unchanged. */
-    GattAuthCallbackReply_t  authorizationReply; /* This is the out parameter that the callback
-                                                  * needs to set to AUTH_CALLBACK_REPLY_SUCCESS
-                                                  * for the request to proceed. */
+    Gap::Handle_t            connHandle; /**< The handle of the connection that triggered the event */
+    GattAttribute::Handle_t  handle;     /**< Attribute Handle to which the read operation applies. */
+    uint16_t                 offset;     /**< Offset for the read operation. */
+    uint16_t                 len;        /**< Optional: new length of the outgoing data. */
+    uint8_t                 *data;       /**< Optional: new outgoing data. Leave at NULL if data is unchanged. */
+    /**
+     * This is the out parameter that the callback needs to set to
+     * AUTH_CALLBACK_REPLY_SUCCESS for the request to proceed.
+     */
+    GattAuthCallbackReply_t  authorizationReply;
 };
 
-/* For encapsulating handle-value update events (notifications or indications) generated at the remote server. */
+/**
+ * For encapsulating handle-value update events (notifications or indications)
+ * generated at the remote server.
+ */
 struct GattHVXCallbackParams {
-  Gap::Handle_t            connHandle;
-  GattAttribute::Handle_t  handle; /**< Attribute Handle to which the HVx operation applies. */
-  HVXType_t                type;   /**< Indication or Notification, see @ref HVXType_t. */
-  uint16_t                 len;    /**< Attribute data length. */
-  const uint8_t           *data;   /**< Attribute data, variable length. */
+  Gap::Handle_t            connHandle; /**< The handle of the connection that triggered the event */
+  GattAttribute::Handle_t  handle;     /**< Attribute Handle to which the HVx operation applies. */
+  HVXType_t                type;       /**< Indication or Notification, see HVXType_t. */
+  uint16_t                 len;        /**< Attribute data length. */
+  const uint8_t           *data;       /**< Attribute data, variable length. */
 };
 
 #endif /*__GATT_CALLBACK_PARAM_TYPES_H__*/
\ No newline at end of file
--- a/ble/GattCharacteristic.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/GattCharacteristic.h	Wed Apr 06 19:15:36 2016 +0100
@@ -99,15 +99,13 @@
         UUID_RSC_MEASUREMENT_CHAR                         = 0x2A53
     };
 
-    /**************************************************************************/
-    /*!
-        \brief  Standard GATT characteristic presentation format unit types.
-                These unit types are used to describe what the raw numeric
-                data in a characteristic actually represents.
-
-        \note   See https://developer.bluetooth.org/gatt/units/Pages/default.aspx
-    */
-    /**************************************************************************/
+    /**
+     *  @brief  Standard GATT characteristic presentation format unit types.
+     *          These unit types are used to describe what the raw numeric
+     *          data in a characteristic actually represents.
+     *
+     *  @note   See https://developer.bluetooth.org/gatt/units/Pages/default.aspx
+     */
     enum {
         BLE_GATT_UNIT_NONE                                                   = 0x2700,      /**< No specified unit type. */
         BLE_GATT_UNIT_LENGTH_METRE                                           = 0x2701,      /**< Length, metre. */
@@ -220,14 +218,13 @@
         BLE_GATT_UNIT_IRRADIANCE_WATT_PER_SQUARE_METRE                       = 0x27B6       /**<  */
     };
 
-    /**************************************************************************/
-    /*!
-        \brief  Standard GATT number types.
-
-        \note   See Bluetooth Specification 4.0 (Vol. 3), Part G, Section 3.3.3.5.2
-        \note   See http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml
-    */
-    /**************************************************************************/
+    /**
+     *  @brief  Standard GATT number types.
+     *
+     *  @note   See Bluetooth Specification 4.0 (Vol. 3), Part G, Section 3.3.3.5.2.
+     *
+     *  @note   See http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml
+     */
     enum {
         BLE_GATT_FORMAT_RFU     = 0x00, /**< Reserved for future use. */
         BLE_GATT_FORMAT_BOOLEAN = 0x01, /**< Boolean. */
@@ -259,14 +256,12 @@
         BLE_GATT_FORMAT_STRUCT  = 0x1B  /**< Opaque Structure. */
     };
 
-    /**************************************************************************/
     /*!
-        \brief  Standard GATT characteristic properties.
-
-        \note   See Bluetooth Specification 4.0 (Vol. 3), Part G, Section 3.3.1.1
-                and Section 3.3.3.1 for Extended Properties
-    */
-    /**************************************************************************/
+     *  @brief  Standard GATT characteristic properties.
+     *
+     *  @note   See Bluetooth Specification 4.0 (Vol. 3), Part G, Section 3.3.1.1
+     *          and Section 3.3.3.1 for Extended Properties.
+     */
     enum Properties_t {
         BLE_GATT_CHAR_PROPERTIES_NONE                        = 0x00,
         BLE_GATT_CHAR_PROPERTIES_BROADCAST                   = 0x01, /**< Permits broadcasts of the characteristic value using the Server Characteristic Configuration descriptor. */
@@ -279,51 +274,50 @@
         BLE_GATT_CHAR_PROPERTIES_EXTENDED_PROPERTIES         = 0x80  /**< Additional characteristic properties are defined in the Characteristic Extended Properties descriptor */
     };
 
-    /**************************************************************************/
-    /*!
-        \brief  GATT presentation format wrapper
-
-        \note   See Bluetooth Specification 4.0 (Vol. 3), Part G, Section 3.3.3.5
-        \note   See https://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml
-    */
-    /**************************************************************************/
+    /**
+     *  @brief  GATT presentation format wrapper.
+     *
+     *  @note   See Bluetooth Specification 4.0 (Vol. 3), Part G, Section 3.3.3.5.
+     *
+     *  @note   See https://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml
+     */
     struct PresentationFormat_t {
-        uint8_t  gatt_format;    /**< Format of the value; see @ref ble_gatt_format_t. */
+        uint8_t  gatt_format;    /**< Format of the value. */
         int8_t   exponent;       /**< Exponent for integer data types. Example: if Exponent = -3 and the char value is 3892, the actual value is 3.892 */
-        uint16_t gatt_unit;      /**< UUID from Bluetooth Assigned Numbers; see @ref ble_gatt_unit_t. */
-        uint8_t  gatt_namespace; /**< Namespace from Bluetooth Assigned Numbers, normally '1'; see @ref BLE_GATT_CPF_NAMESPACES. */
-        uint16_t gatt_nsdesc;    /**< Namespace description from Bluetooth Assigned Numbers, normally '0'; see @ref BLE_GATT_CPF_NAMESPACES. */
+        uint16_t gatt_unit;      /**< UUID from Bluetooth Assigned Numbers. */
+        uint8_t  gatt_namespace; /**< Namespace from Bluetooth Assigned Numbers, normally '1'. */
+        uint16_t gatt_nsdesc;    /**< Namespace description from Bluetooth Assigned Numbers, normally '0'. */
     };
 
     /**
-     *  @brief  Creates a new GattCharacteristic using the specified 16-bit
-     *          UUID, value length, and properties.
-     *
-     *  @note   The UUID value must be unique in the service and is normally >1.
+     * @brief  Creates a new GattCharacteristic using the specified 16-bit
+     *         UUID, value length, and properties.
      *
-     *  @param[in]  uuid
-     *              The UUID to use for this characteristic.
-     *  @param[in]  valuePtr
-     *              The memory holding the initial value. The value is copied
-     *              into the stack when the enclosing service is added, and
-     *              is thereafter maintained internally by the stack.
-     *  @param[in]  len
-     *              The length in bytes of this characteristic's value.
-     *  @param[in]  maxLen
-     *              The max length in bytes of this characteristic's value.
-     *  @param[in]  hasVariableLen
-     *              Whether the attribute's value length changes over time.
-     *  @param[in]  props
-     *              The 8-bit field containing the characteristic's properties.
-     *  @param[in]  descriptors
-     *              A pointer to an array of descriptors to be included within
-     *              this characteristic. The memory for the descriptor array is
-     *              owned by the caller, and should remain valid at least until
-     *              the enclosing service is added to the GATT table.
-     *  @param[in]  numDescriptors
-     *              The number of descriptors in the previous array.
+     * @param[in]  uuid
+     *             The UUID to use for this characteristic.
+     * @param[in]  valuePtr
+     *             The memory holding the initial value. The value is copied
+     *             into the stack when the enclosing service is added, and
+     *             is thereafter maintained internally by the stack.
+     * @param[in]  len
+     *             The length in bytes of this characteristic's value.
+     * @param[in]  maxLen
+     *             The max length in bytes of this characteristic's value.
+     * @param[in]  props
+     *             The 8-bit field containing the characteristic's properties.
+     * @param[in]  descriptors
+     *             A pointer to an array of descriptors to be included within
+     *             this characteristic. The memory for the descriptor array is
+     *             owned by the caller, and should remain valid at least until
+     *             the enclosing service is added to the GATT table.
+     * @param[in]  numDescriptors
+     *             The number of descriptors in the previous array.
+     * @param[in]  hasVariableLen
+     *             Whether the attribute's value length changes over time.
      *
-     * @NOTE: If valuePtr == NULL, length == 0, and properties == READ
+     * @note   The UUID value must be unique in the service and is normally >1.
+     *
+     * @note  If valuePtr == NULL, length == 0, and properties == READ
      *        for the value attribute of a characteristic, then that particular
      *        characteristic may be considered optional and dropped while
      *        instantiating the service with the underlying BLE stack.
@@ -350,9 +344,12 @@
 
 public:
     /**
-     * Set up the minimum security (mode and level) requirements for access to the characteristic's value attribute.
+     * Set up the minimum security (mode and level) requirements for access to
+     * the characteristic's value attribute.
      *
-     * @param securityMode Can be one of encryption or signing, with or without protection for man in the middle attacks (MITM).
+     * @param[in] securityMode
+     *              Can be one of encryption or signing, with or without
+     *              protection for man in the middle attacks (MITM).
      */
     void requireSecurity(SecurityManager::SecurityMode_t securityMode) {
         _requiredSecurity = securityMode;
@@ -360,21 +357,61 @@
 
 public:
     /**
-     * Authorization.
+     * Set up callback that will be triggered before the GATT Client is allowed
+     * to write this characteristic. The handler will determine the
+     * authorization reply for the write.
+     *
+     * @param[in] callback
+     *      Event handler being registered.
      */
     void setWriteAuthorizationCallback(void (*callback)(GattWriteAuthCallbackParams *)) {
         writeAuthorizationCallback.attach(callback);
         enabledWriteAuthorization = true;
     }
+
+    /**
+     * Same as GattCharacrteristic::setWriteAuthorizationCallback(), but allows
+     * the possibility to add an object reference and member function as
+     * handler for connection event callbacks.
+     *
+     * @param[in] object
+     *              Pointer to the object of a class defining the member callback
+     *              function (@p member).
+     * @param[in] member
+     *              The member callback (within the context of an object) to be
+     *              invoked.
+     */
     template <typename T>
     void setWriteAuthorizationCallback(T *object, void (T::*member)(GattWriteAuthCallbackParams *)) {
         writeAuthorizationCallback.attach(object, member);
         enabledWriteAuthorization = true;
     }
+
+    /**
+     * Set up callback that will be triggered before the GATT Client is allowed
+     * to read this characteristic. The handler will determine the
+     * authorizaion reply for the read.
+     *
+     * @param[in] callback
+     *      Event handler being registered.
+     */
     void setReadAuthorizationCallback(void (*callback)(GattReadAuthCallbackParams *)) {
         readAuthorizationCallback.attach(callback);
         enabledReadAuthorization = true;
     }
+
+    /**
+     * Same as GattCharacrteristic::setReadAuthorizationCallback(), but allows
+     * the possibility to add an object reference and member function as
+     * handler for connection event callbacks.
+     *
+     * @param[in] object
+     *              Pointer to the object of a class defining the member callback
+     *              function (@p member).
+     * @param[in] member
+     *              The member callback (within the context of an object) to be
+     *              invoked.
+     */
     template <typename T>
     void setReadAuthorizationCallback(T *object, void (T::*member)(GattReadAuthCallbackParams *)) {
         readAuthorizationCallback.attach(object, member);
@@ -382,10 +419,16 @@
     }
 
     /**
-     * Helper function meant to be called from the guts of the BLE stack to
-     * determine the authorization reply for a write request.
-     * @param  params To capture the context of the write-auth request. Also contains an out-parameter for reply.
-     * @return        true if the write is authorized to proceed.
+     * Helper that calls the registered handler to determine the authorization
+     * reply for a write request. This function is meant to be called from the
+     * BLE stack specific implementation.
+     *
+     * @param[in] params
+     *              To capture the context of the write-auth request. Also
+     *              contains an out-parameter for reply.
+     *
+     * @return A GattAuthCallbackReply_t value indicating whether authorization
+     *         is granted.
      */
     GattAuthCallbackReply_t authorizeWrite(GattWriteAuthCallbackParams *params) {
         if (!isWriteAuthorizationEnabled()) {
@@ -398,20 +441,24 @@
     }
 
     /**
-     * Helper function meant to be called from the guts of the BLE stack to
-     * determine the authorization reply for a read request.
-     * @param  params To capture the context of the read-auth request.
+     * Helper that calls the registered handler to determine the authorization
+     * reply for a read request. This function is meant to be called from the
+     * BLE stack specific implementation.
      *
-     * @NOTE:  To authorize or deny the read the params->authorizationReply field
+     * @param[in] params
+     *              To capture the context of the read-auth request.
+     *
+     * @return A GattAuthCallbackReply_t value indicating whether authorization
+     *         is granted.
+     *
+     * @note   To authorize or deny the read the params->authorizationReply field
      *         should be set to true (authorize) or false (deny).
      *
-     *         If the read is approved and params->data is unchanged (NULL),
+     * @note   If the read is approved and params->data is unchanged (NULL),
      *         the current characteristic value will be used.
      *
-     *         If the read is approved, a new value can be provided by setting
+     * @note   If the read is approved, a new value can be provided by setting
      *         the params->data pointer and params->len fields.
-     *
-     * @return        true if the read is authorized to proceed.
      */
     GattAuthCallbackReply_t authorizeRead(GattReadAuthCallbackParams *params) {
         if (!isReadAuthorizationEnabled()) {
@@ -423,17 +470,96 @@
         return params->authorizationReply;
     }
 
-    /* accessors */
 public:
-    GattAttribute&          getValueAttribute()                 {return _valueAttribute;                }
-    const GattAttribute&    getValueAttribute()           const {return _valueAttribute;                }
-    GattAttribute::Handle_t getValueHandle(void)          const {return getValueAttribute().getHandle();}
-    uint8_t                 getProperties(void)           const {return _properties;                    }
-    SecurityManager::SecurityMode_t getRequiredSecurity() const {return _requiredSecurity;              }
-    uint8_t                 getDescriptorCount(void)      const {return _descriptorCount;               }
-    bool                    isReadAuthorizationEnabled()  const {return enabledReadAuthorization;       }
-    bool                    isWriteAuthorizationEnabled() const {return enabledWriteAuthorization;      }
+    /**
+     * Get the characteristic's value attribute.
+     *
+     * @return A reference to the characteristic's value attribute.
+     */
+    GattAttribute& getValueAttribute() {
+        return _valueAttribute;
+    }
+
+    /**
+     * A const alternative to GattCharacteristic::getValueAttribute().
+     *
+     * @return A const reference to the characteristic's value attribute.
+     */
+    const GattAttribute& getValueAttribute() const {
+        return _valueAttribute;
+    }
+
+    /**
+     * Get the characteristic's value attribute handle in the ATT table.
+     *
+     * @return The value attribute handle.
+     *
+     * @note The attribute handle is typically assigned by the underlying BLE
+     *       stack.
+     */
+    GattAttribute::Handle_t getValueHandle(void) const {
+        return getValueAttribute().getHandle();
+    }
+
+    /**
+     * Get the characteristic's propertied. Refer to
+     * GattCharacteristic::Properties_t.
+     *
+     * @return The characteristic's properties.
+     */
+    uint8_t getProperties(void) const {
+        return _properties;
+    }
 
+    /**
+     * Get the characteristic's required security.
+     *
+     * @return The characteristic's required security.
+     */
+    SecurityManager::SecurityMode_t getRequiredSecurity() const {
+        return _requiredSecurity;
+    }
+
+    /**
+     * Get the total number of descriptors within this characteristic.
+     *
+     * @return The total number of descriptors.
+     */
+    uint8_t getDescriptorCount(void) const {
+        return _descriptorCount;
+    }
+
+    /**
+     * Check whether read authorization is enabled i.e. check whether a
+     * read authorization callback was previously registered. Refer to
+     * GattCharacteristic::setReadAuthorizationCallback().
+     *
+     * @return true if read authorization is enabled, false otherwise.
+     */
+    bool isReadAuthorizationEnabled() const {
+        return enabledReadAuthorization;
+    }
+
+    /**
+     * Check whether write authorization is enabled i.e. check whether a
+     * write authorization callback was previously registered. Refer to
+     * GattCharacteristic::setReadAuthorizationCallback().
+     *
+     * @return true if write authorization is enabled, false otherwise.
+     */
+    bool isWriteAuthorizationEnabled() const {
+        return enabledWriteAuthorization;
+    }
+
+    /**
+     * Get this characteristic's descriptor at a specific index.
+     *
+     * @param[in] index
+     *              The descriptor's index.
+     *
+     * @return A pointer the requested descriptor if @p index contains a valid
+     *         descriptor, or NULL otherwise.
+     */
     GattAttribute *getDescriptor(uint8_t index) {
         if (index >= _descriptorCount) {
             return NULL;
@@ -443,15 +569,45 @@
     }
 
 private:
+    /**
+     * Attribute that contains the actual value of this characteristic.
+     */
     GattAttribute                     _valueAttribute;
+    /**
+     * The characteristic's properties. Refer to
+     * GattCharacteristic::Properties_t.
+     */
     uint8_t                           _properties;
+    /**
+     * The characteristic's required security.
+     */
     SecurityManager::SecurityMode_t   _requiredSecurity;
+    /**
+     * The characteristic's descriptor attributes.
+     */
     GattAttribute                   **_descriptors;
+    /**
+     * The number of descriptors in this characteristic.
+     */
     uint8_t                           _descriptorCount;
 
+    /**
+     * Whether read authorization is enabled i.e. whether there is a registered
+     * callback to determine read authorization reply.
+     */
     bool enabledReadAuthorization;
+    /**
+     * Whether write authorization is enabled i.e. whether there is a registered
+     * callback to determine write authorization reply.
+     */
     bool enabledWriteAuthorization;
+    /**
+     * The registered callback handler for read authorization reply.
+     */
     FunctionPointerWithContext<GattReadAuthCallbackParams *>  readAuthorizationCallback;
+    /**
+     * The registered callback handler for write authorization reply.
+     */
     FunctionPointerWithContext<GattWriteAuthCallbackParams *> writeAuthorizationCallback;
 
 private:
@@ -460,9 +616,33 @@
     GattCharacteristic& operator=(const GattCharacteristic &);
 };
 
+/**
+ * Helper class to construct a read-only GattCharacteristic.
+ */
 template <typename T>
 class ReadOnlyGattCharacteristic : public GattCharacteristic {
 public:
+    /**
+     * Construct a ReadOnlyGattCharacteristic.
+     *
+     * @param[in] uuid
+     *              The characteristic's UUID.
+     * @param[in] valuePtr
+     *              Pointer to the characterisitic's initial value.
+     * @param[in] additionalProperties
+     *              Additional characterisitic properties. By default, the
+     *              properties are set to
+     *              Properties_t::BLE_GATT_CHAR_PROPERTIES_READ.
+     * @param[in] descriptors
+     *              An array of pointers to descriptors to be added to the new
+     *              characteristic.
+     * @param[in] numDescriptors
+     *              The total number of descriptors in @p descriptors.
+     *
+     * @note Instances of ReadOnlyGattCharacteristic have a fixed length
+     *       attribute value that equals sizeof(T). For a variable length
+     *       alternative use GattCharacteristic directly.
+     */
     ReadOnlyGattCharacteristic<T>(const UUID    &uuid,
                                   T             *valuePtr,
                                   uint8_t        additionalProperties = BLE_GATT_CHAR_PROPERTIES_NONE,
@@ -474,9 +654,33 @@
     }
 };
 
+/**
+ * Helper class to construct a write-only GattCharacteristic.
+ */
 template <typename T>
 class WriteOnlyGattCharacteristic : public GattCharacteristic {
 public:
+    /**
+     * Construct a WriteOnlyGattCharacteristic.
+     *
+     * @param[in] uuid
+     *              The characteristic's UUID.
+     * @param[in] valuePtr
+     *              Pointer to the characterisitic's initial value.
+     * @param[in] additionalProperties
+     *              Additional characterisitic properties. By default, the
+     *              properties are set to
+     *              Properties_t::BLE_GATT_CHAR_PROPERTIES_WRITE.
+     * @param[in] descriptors
+     *              An array of pointers to descriptors to be added to the new
+     *              characteristic.
+     * @param[in] numDescriptors
+     *              The total number of descriptors in @p descriptors.
+     *
+     * @note Instances of WriteOnlyGattCharacteristic have variable length
+     *       attribute value with maximum size equal to sizeof(T). For a fixed length
+     *       alternative use GattCharacteristic directly.
+     */
     WriteOnlyGattCharacteristic<T>(const UUID     &uuid,
                                    T              *valuePtr,
                                    uint8_t        additionalProperties = BLE_GATT_CHAR_PROPERTIES_NONE,
@@ -488,9 +692,34 @@
     }
 };
 
+/**
+ * Helper class to construct a readable and writable GattCharacteristic.
+ */
 template <typename T>
 class ReadWriteGattCharacteristic : public GattCharacteristic {
 public:
+    /**
+     * Construct a ReadWriteGattCharacteristic.
+     *
+     * @param[in] uuid
+     *              The characteristic's UUID.
+     * @param[in] valuePtr
+     *              Pointer to the characterisitic's initial value.
+     * @param[in] additionalProperties
+     *              Additional characterisitic properties. By default, the
+     *              properties are set to
+     *              Properties_t::BLE_GATT_CHAR_PROPERTIES_WRITE |
+     *              Properties_t::BLE_GATT_CHAR_PROPERTIES_READ.
+     * @param[in] descriptors
+     *              An array of pointers to descriptors to be added to the new
+     *              characteristic.
+     * @param[in] numDescriptors
+     *              The total number of descriptors in @p descriptors.
+     *
+     * @note Instances of ReadWriteGattCharacteristic have variable length
+     *       attribute value with maximum size equal to sizeof(T). For a fixed length
+     *       alternative use GattCharacteristic directly.
+     */
     ReadWriteGattCharacteristic<T>(const UUID    &uuid,
                                    T             *valuePtr,
                                    uint8_t        additionalProperties = BLE_GATT_CHAR_PROPERTIES_NONE,
@@ -502,9 +731,35 @@
     }
 };
 
+/**
+ * Helper class to construct a write-only GattCharacteristic with an array
+ * value.
+ */
 template <typename T, unsigned NUM_ELEMENTS>
 class WriteOnlyArrayGattCharacteristic : public GattCharacteristic {
 public:
+    /**
+     * Construct a WriteOnlyGattCharacteristic.
+     *
+     * @param[in] uuid
+     *              The characteristic's UUID.
+     * @param[in] valuePtr
+     *              Pointer to an array of length NUM_ELEMENTS containing the
+     *              characteristic's intitial value.
+     * @param[in] additionalProperties
+     *              Additional characterisitic properties. By default, the
+     *              properties are set to
+     *              Properties_t::BLE_GATT_CHAR_PROPERTIES_WRITE.
+     * @param[in] descriptors
+     *              An array of pointers to descriptors to be added to the new
+     *              characteristic.
+     * @param[in] numDescriptors
+     *              The total number of descriptors in @p descriptors.
+     *
+     * @note Instances of WriteOnlyGattCharacteristic have variable length
+     *       attribute value with maximum size equal to sizeof(T) * NUM_ELEMENTS.
+     *       For a fixed length alternative use GattCharacteristic directly.
+     */
     WriteOnlyArrayGattCharacteristic<T, NUM_ELEMENTS>(const          UUID &uuid,
                                                       T              valuePtr[NUM_ELEMENTS],
                                                       uint8_t        additionalProperties = BLE_GATT_CHAR_PROPERTIES_NONE,
@@ -516,9 +771,35 @@
     }
 };
 
+/**
+ * Helper class to construct a read-only GattCharacteristic with an array
+ * value.
+ */
 template <typename T, unsigned NUM_ELEMENTS>
 class ReadOnlyArrayGattCharacteristic : public GattCharacteristic {
 public:
+    /**
+     * Construct a ReadOnlyGattCharacteristic.
+     *
+     * @param[in] uuid
+     *              The characteristic's UUID.
+     * @param[in] valuePtr
+     *              Pointer to an array of length NUM_ELEMENTS containing the
+     *              characteristic's intitial value.
+     * @param[in] additionalProperties
+     *              Additional characterisitic properties. By default, the
+     *              properties are set to
+     *              Properties_t::BLE_GATT_CHAR_PROPERTIES_READ.
+     * @param[in] descriptors
+     *              An array of pointers to descriptors to be added to the new
+     *              characteristic.
+     * @param[in] numDescriptors
+     *              The total number of descriptors in @p descriptors.
+     *
+     * @note Instances of ReadOnlyGattCharacteristic have fixed length
+     *       attribute value that equals sizeof(T) * NUM_ELEMENTS.
+     *       For a variable length alternative use GattCharacteristic directly.
+     */
     ReadOnlyArrayGattCharacteristic<T, NUM_ELEMENTS>(const UUID    &uuid,
                                                      T              valuePtr[NUM_ELEMENTS],
                                                      uint8_t        additionalProperties = BLE_GATT_CHAR_PROPERTIES_NONE,
@@ -530,9 +811,36 @@
     }
 };
 
+/**
+ * Helper class to construct a readable and writable GattCharacteristic with an array
+ * value.
+ */
 template <typename T, unsigned NUM_ELEMENTS>
 class ReadWriteArrayGattCharacteristic : public GattCharacteristic {
 public:
+    /**
+     * Construct a ReadWriteGattCharacteristic.
+     *
+     * @param[in] uuid
+     *              The characteristic's UUID.
+     * @param[in] valuePtr
+     *              Pointer to an array of length NUM_ELEMENTS containing the
+     *              characteristic's intitial value.
+     * @param[in] additionalProperties
+     *              Additional characterisitic properties. By default, the
+     *              properties are set to
+     *              Properties_t::BLE_GATT_CHAR_PROPERTIES_WRITE |
+     *              Properties_t::BLE_GATT_CHAR_PROPERTIES_READ.
+     * @param[in] descriptors
+     *              An array of pointers to descriptors to be added to the new
+     *              characteristic.
+     * @param[in] numDescriptors
+     *              The total number of descriptors in @p descriptors.
+     *
+     * @note Instances of ReadWriteGattCharacteristic have variable length
+     *       attribute value with maximum size equal to sizeof(T) * NUM_ELEMENTS.
+     *       For a fixed length alternative use GattCharacteristic directly.
+     */
     ReadWriteArrayGattCharacteristic<T, NUM_ELEMENTS>(const UUID    &uuid,
                                                       T              valuePtr[NUM_ELEMENTS],
                                                       uint8_t        additionalProperties = BLE_GATT_CHAR_PROPERTIES_NONE,
@@ -544,4 +852,4 @@
     }
 };
 
-#endif // ifndef __GATT_CHARACTERISTIC_H__
\ No newline at end of file
+#endif /* ifndef __GATT_CHARACTERISTIC_H__ */
\ No newline at end of file
--- a/ble/GattClient.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/GattClient.h	Wed Apr 06 19:15:36 2016 +0100
@@ -28,21 +28,52 @@
 
 class GattClient {
 public:
+    /**
+     * Type for the registered callbacks added to the data read callchain.
+     * Refer to GattClient::onDataRead().
+     */
     typedef FunctionPointerWithContext<const GattReadCallbackParams*> ReadCallback_t;
+    /**
+     * Type for the data read event callchain. Refer to GattClient::onDataRead().
+     */
     typedef CallChainOfFunctionPointersWithContext<const GattReadCallbackParams*> ReadCallbackChain_t;
 
+    /**
+     * Enumerator for write operations.
+     */
     enum WriteOp_t {
         GATT_OP_WRITE_REQ = 0x01,  /**< Write request. */
         GATT_OP_WRITE_CMD = 0x02,  /**< Write command. */
     };
 
+    /**
+     * Type for the registered callbacks added to the data write callchain.
+     * Refer to GattClient::onDataWrite().
+     */
     typedef FunctionPointerWithContext<const GattWriteCallbackParams*> WriteCallback_t;
+    /**
+     * Type for the data write event callchain. Refer to GattClient::onDataWrite().
+     */
     typedef CallChainOfFunctionPointersWithContext<const GattWriteCallbackParams*> WriteCallbackChain_t;
 
+    /**
+     * Type for the registered callbacks added to the update event callchain.
+     * Refer to GattClient::onHVX().
+     */
     typedef FunctionPointerWithContext<const GattHVXCallbackParams*> HVXCallback_t;
+    /**
+     * Type for the update event callchain. Refer to GattClient::onHVX().
+     */
     typedef CallChainOfFunctionPointersWithContext<const GattHVXCallbackParams*> HVXCallbackChain_t;
 
+    /**
+     * Type for the registered callbacks added to the shutdown callchain.
+     * Refer to GattClient::onShutdown().
+     */
     typedef FunctionPointerWithContext<const GattClient *> GattClientShutdownCallback_t;
+    /**
+     * Type for the shutdown event callchain. Refer to GattClient::onShutown().
+     */
     typedef CallChainOfFunctionPointersWithContext<const GattClient *> GattClientShutdownCallbackChain_t;
 
     /*
@@ -56,40 +87,40 @@
      * will be invoked at the end. Service discovery can be terminated prematurely,
      * if needed, using terminateServiceDiscovery().
      *
-     * @param  connectionHandle
-     *           Handle for the connection with the peer.
-     * @param  sc
-     *           This is the application callback for a matching service. Taken as
-     *           NULL by default. Note: service discovery may still be active
-     *           when this callback is issued; calling asynchronous BLE-stack
-     *           APIs from within this application callback might cause the
-     *           stack to abort service discovery. If this becomes an issue, it
-     *           may be better to make a local copy of the discoveredService and
-     *           wait for service discovery to terminate before operating on the
-     *           service.
-     * @param  cc
-     *           This is the application callback for a matching characteristic.
-     *           Taken as NULL by default. Note: service discovery may still be
-     *           active when this callback is issued; calling asynchronous
-     *           BLE-stack APIs from within this application callback might cause
-     *           the stack to abort service discovery. If this becomes an issue,
-     *           it may be better to make a local copy of the discoveredCharacteristic
-     *           and wait for service discovery to terminate before operating on the
-     *           characteristic.
-     * @param  matchingServiceUUID
-     *           UUID-based filter for specifying a service in which the application is
-     *           interested. By default it is set as the wildcard UUID_UNKNOWN,
-     *           in which case it matches all services. If characteristic-UUID
-     *           filter (below) is set to the wildcard value, then a service
-     *           callback will be invoked for the matching service (or for every
-     *           service if the service filter is a wildcard).
-     * @param  matchingCharacteristicUUIDIn
-     *           UUID-based filter for specifying characteristic in which the application
-     *           is interested. By default it is set as the wildcard UUID_UKNOWN
-     *           to match against any characteristic. If both service-UUID
-     *           filter and characteristic-UUID filter are used with non-wildcard
-     *           values, then only a single characteristic callback is
-     *           invoked for the matching characteristic.
+     * @param[in]  connectionHandle
+     *              Handle for the connection with the peer.
+     * @param[in]  sc
+     *              This is the application callback for a matching service. Taken as
+     *              NULL by default. Note: service discovery may still be active
+     *              when this callback is issued; calling asynchronous BLE-stack
+     *              APIs from within this application callback might cause the
+     *              stack to abort service discovery. If this becomes an issue, it
+     *              may be better to make a local copy of the discoveredService and
+     *              wait for service discovery to terminate before operating on the
+     *              service.
+     * @param[in]  cc
+     *              This is the application callback for a matching characteristic.
+     *              Taken as NULL by default. Note: service discovery may still be
+     *              active when this callback is issued; calling asynchronous
+     *              BLE-stack APIs from within this application callback might cause
+     *              the stack to abort service discovery. If this becomes an issue,
+     *              it may be better to make a local copy of the discoveredCharacteristic
+     *              and wait for service discovery to terminate before operating on the
+     *              characteristic.
+     * @param[in]  matchingServiceUUID
+     *              UUID-based filter for specifying a service in which the application is
+     *              interested. By default it is set as the wildcard UUID_UNKNOWN,
+     *              in which case it matches all services. If characteristic-UUID
+     *              filter (below) is set to the wildcard value, then a service
+     *              callback will be invoked for the matching service (or for every
+     *              service if the service filter is a wildcard).
+     * @param[in]  matchingCharacteristicUUIDIn
+     *              UUID-based filter for specifying characteristic in which the application
+     *              is interested. By default it is set as the wildcard UUID_UKNOWN
+     *              to match against any characteristic. If both service-UUID
+     *              filter and characteristic-UUID filter are used with non-wildcard
+     *              values, then only a single characteristic callback is
+     *              invoked for the matching characteristic.
      *
      * @note     Using wildcard values for both service-UUID and characteristic-
      *           UUID will result in complete service discovery: callbacks being
@@ -126,20 +157,21 @@
      * at the end. Service discovery can be terminated prematurely, if needed,
      * using terminateServiceDiscovery().
      *
-     * @param  connectionHandle
-     *           Handle for the connection with the peer.
-     * @param  sc
-     *           This is the application callback for a matching service. Note: service discovery may still be active
-     *           when this callback is issued; calling asynchronous BLE-stack
-     *           APIs from within this application callback might cause the
-     *           stack to abort service discovery. If this becomes an issue, it
-     *           may be better to make a local copy of the discoveredService and
-     *           wait for service discovery to terminate before operating on the
-     *           service.
-     * @param  matchingServiceUUID
-     *           UUID-based filter for specifying a service in which the application is
-     *           interested. By default it is set as the wildcard UUID_UNKNOWN,
-     *           in which case it matches all services.
+     * @param[in]  connectionHandle
+     *              Handle for the connection with the peer.
+     * @param[in]  callback
+     *              This is the application callback for a matching service.
+     *              Note: service discovery may still be active
+     *              when this callback is issued; calling asynchronous BLE-stack
+     *              APIs from within this application callback might cause the
+     *              stack to abort service discovery. If this becomes an issue, it
+     *              may be better to make a local copy of the discoveredService and
+     *              wait for service discovery to terminate before operating on the
+     *              service.
+     * @param[in]  matchingServiceUUID
+     *              UUID-based filter for specifying a service in which the application is
+     *              interested. By default it is set as the wildcard UUID_UNKNOWN,
+     *              in which case it matches all services.
      *
      * @return
      *           BLE_ERROR_NONE if service discovery is launched successfully; else an appropriate error.
@@ -162,18 +194,19 @@
      * at the end. Service discovery can be terminated prematurely, if needed,
      * using terminateServiceDiscovery().
      *
-     * @param  connectionHandle
-     *           Handle for the connection with the peer.
-     * @param  sc
-     *           This is the application callback for a matching service. Note: service discovery may still be active
-     *           when this callback is issued; calling asynchronous BLE-stack
-     *           APIs from within this application callback might cause the
-     *           stack to abort service discovery. If this becomes an issue, it
-     *           may be better to make a local copy of the discoveredService and
-     *           wait for service discovery to terminate before operating on the
-     *           service.
-     * @param  startHandle, endHandle
-     *           Handle range within which to limit the search.
+     * @param[in]  connectionHandle
+     *              Handle for the connection with the peer.
+     * @param[in]  callback
+     *              This is the application callback for a matching service.
+     *              Note: service discovery may still be active
+     *              when this callback is issued; calling asynchronous BLE-stack
+     *              APIs from within this application callback might cause the
+     *              stack to abort service discovery. If this becomes an issue, it
+     *              may be better to make a local copy of the discoveredService and
+     *              wait for service discovery to terminate before operating on the
+     *              service.
+     * @param[in]  startHandle, endHandle
+     *              Handle range within which to limit the search.
      *
      * @return
      *           BLE_ERROR_NONE if service discovery is launched successfully; else an appropriate error.
@@ -192,7 +225,9 @@
     }
 
     /**
-     * Is service-discovery currently active?
+     * Check if service-discovery is currently active.
+     *
+     * @return true if service-discovery is active, false otherwise.
      */
     virtual bool isServiceDiscoveryActive(void) const {
         return false; /* Requesting action from porters: override this API if this capability is supported. */
@@ -206,7 +241,19 @@
         /* Requesting action from porters: override this API if this capability is supported. */
     }
 
-    /* Initiate a GATT Client read procedure by attribute-handle. */
+    /**
+     * Initiate a GATT Client read procedure by attribute-handle.
+     *
+     * @param[in] connHandle
+     *              Handle for the connection with the peer.
+     * @param[in] attributeHandle
+     *              Handle of the attribute to read data from.
+     * @param[in] offset
+     *              The offset from the start of the attribute value to be read.
+     *
+     * @return
+     *          BLE_ERROR_NONE if read procedure was successfully started.
+     */
     virtual ble_error_t read(Gap::Handle_t connHandle, GattAttribute::Handle_t attributeHandle, uint16_t offset) const {
         /* Avoid compiler warnings about unused variables. */
         (void)connHandle;
@@ -231,6 +278,9 @@
      *              Length of the new value.
      * @param[in] value
      *              New value being written.
+     *
+     * @return
+     *          BLE_ERROR_NONE if write procedure was successfully started.
      */
     virtual ble_error_t write(GattClient::WriteOp_t    cmd,
                               Gap::Handle_t            connHandle,
@@ -251,18 +301,28 @@
 public:
     /**
      * Set up a callback for read response events.
-     * It is possible to remove registered callbacks using
-     * onDataRead().detach(callbackToRemove)
+     *
+     * @param[in] callback
+     *              Event handler being registered.
+     *
+     * @note It is possible to chain together multiple onDataRead callbacks
+     * (potentially from different modules of an application).
+     *
+     * @note It is possible to unregister a callback using
+     * onDataRead().detach(callbackToRemove).
      */
     void onDataRead(ReadCallback_t callback) {
         onDataReadCallbackChain.add(callback);
     }
 
     /**
-     * @brief provide access to the callchain of read callbacks
-     * It is possible to register callbacks using onDataRead().add(callback);
-     * It is possible to unregister callbacks using onDataRead().detach(callback)
-     * @return The read callbacks chain
+     * @brief Provide access to the callchain of read event callbacks.
+     *
+     * @return A reference to the read event callback chain.
+     *
+     * @note It is possible to register callbacks using onDataRead().add(callback).
+     *
+     * @note It is possible to unregister callbacks using onDataRead().detach(callback).
      */
     ReadCallbackChain_t& onDataRead() {
         return onDataReadCallbackChain;
@@ -270,19 +330,27 @@
 
     /**
      * Set up a callback for write response events.
-     * It is possible to remove registered callbacks using
+     *
+     * @param[in] callback
+     *              Event handler being registered.
+     *
+     * @note It is possible to remove registered callbacks using
      * onDataWritten().detach(callbackToRemove).
-     * @Note: Write commands (issued using writeWoResponse) don't generate a response.
+     *
+     * @note  Write commands (issued using writeWoResponse) don't generate a response.
      */
     void onDataWritten(WriteCallback_t callback) {
         onDataWriteCallbackChain.add(callback);
     }
 
     /**
-     * @brief provide access to the callchain of data written callbacks
-     * It is possible to register callbacks using onDataWritten().add(callback);
-     * It is possible to unregister callbacks using onDataWritten().detach(callback)
-     * @return The data written callbacks chain
+     * @brief Provide access to the callchain of data written callbacks.
+     *
+     * @return A reference to the data written callbacks chain.
+     *
+     * @note It is possible to register callbacks using onDataWritten().add(callback).
+     *
+     * @note It is possible to unregister callbacks using onDataWritten().detach(callback).
      */
     WriteCallbackChain_t& onDataWritten() {
         return onDataWriteCallbackChain;
@@ -290,10 +358,13 @@
 
     /**
      * Set up a callback for write response events.
-     * @Note: Write commands (issued using writeWoResponse) don't generate a response.
+     *
+     * @param[in] callback
+     *              Event handler being registered.
      *
-     * @note: This API is now *deprecated* and will be dropped in the future.
-     * Please use onDataWritten() instead.
+     * @note  Write commands (issued using writeWoResponse) don't generate a response.
+     *
+     * @deprecated Please use GattServer::onDataWritten() instead.
      */
     void onDataWrite(WriteCallback_t callback) {
         onDataWritten(callback);
@@ -301,6 +372,9 @@
 
     /**
      * Set up a callback for when serviceDiscovery terminates.
+     *
+     * @param[in] callback
+     *              Event handler being registered.
      */
     virtual void onServiceDiscoveryTermination(ServiceDiscovery::TerminationCallback_t callback) {
         (void)callback; /* Avoid compiler warnings about ununsed variables. */
@@ -309,18 +383,21 @@
     }
 
     /**
-     * @brief launch discovery of descriptors for a given characteristic
+     * @brief Launch discovery of descriptors for a given characteristic.
+     *
      * @details This function will discover all descriptors available for a
-     * specific characteristic.
+     *          specific characteristic.
      *
-     * @param characteristic[in] The characteristic targeted by this discovery
-     * procedure
-     * @param discoveryCallback[in] User function called each time a descriptor
-     * is found during the procedure.
-     * @param terminationCallback[in] User provided function which will be called
-     * once the discovery procedure is terminating. This will get called when all
-     * the descriptors have been discovered or if an error occur during the discovery
-     * procedure.
+     * @param[in] characteristic
+     *              The characteristic targeted by this discovery procedure.
+     * @param[in] discoveryCallback
+     *              User function called each time a descriptor is found during
+     *              the procedure.
+     * @param[in] terminationCallback
+     *              User provided function which will be called once the
+     *              discovery procedure is terminating. This will get called
+     *              when all the descriptors have been discovered or if an
+     *              error occur during the discovery procedure.
      *
      * @return
      *   BLE_ERROR_NONE if characteristic descriptor discovery is launched
@@ -338,10 +415,14 @@
     }
 
     /**
-     * @brief Indicate if the discovery of characteristic descriptors is active for a given characteristic
-     * or not.
-     * @param characteristic[in] The characteristic concerned by the descriptors discovery.
-     * @return true if a descriptors discovery is active for the characteristic in input; otherwise false.
+     * @brief Indicate if the discovery of characteristic descriptors is active
+     *        for a given characteristic or not.
+     *
+     * @param[in] characteristic
+     *              The characteristic concerned by the descriptors discovery.
+     *
+     * @return true if a descriptors discovery is active for the characteristic
+     *         in input; otherwise false.
      */
     virtual bool isCharacteristicDescriptorDiscoveryActive(const DiscoveredCharacteristic& characteristic) const
      {
@@ -351,10 +432,13 @@
 
     /**
      * @brief Terminate an ongoing characteristic descriptor discovery.
-     * @detail This should result in an invocation of the TerminationCallback if
-     * the characteristic descriptor discovery is active.
-     * @param characteristic[in] The characteristic on which the running descriptors
-     * discovery should be stopped.
+     *
+     * @details This should result in an invocation of the TerminationCallback if
+     *          the characteristic descriptor discovery is active.
+     *
+     * @param[in] characteristic
+     *              The characteristic on which the running descriptors
+     *              discovery should be stopped.
      */
     virtual void terminateCharacteristicDescriptorDiscovery(const DiscoveredCharacteristic& characteristic) {
         /* Requesting action from porter(s): override this API if this capability is supported. */
@@ -362,10 +446,12 @@
     }
 
     /**
-     * Set up a callback for when the GATT client receives an update event
+     * Set up a callback for when the GATT Client receives an update event
      * corresponding to a change in the value of a characteristic on the remote
-     * GATT server.
-     * It is possible to remove registered callbacks using onHVX().detach(callbackToRemove).
+     * GATT Server.
+     *
+     * @note It is possible to unregister callbacks using
+     *       onHVX().detach(callbackToRemove).
      */
     void onHVX(HVXCallback_t callback) {
         onHVXCallbackChain.add(callback);
@@ -376,38 +462,60 @@
      * GattClient instance is about to shutdown (possibly as a result of a call
      * to BLE::shutdown()).
      *
-     * @Note: It is possible to chain together multiple onShutdown callbacks
-     * (potentially from different modules of an application) to be notified
-     * before the GattClient is shutdown.
+     * @param[in] callback
+     *              Event handler being registered.
      *
-     * @Note: It is also possible to set up a callback into a member function of
-     * some object.
+     * @note  It is possible to chain together multiple onShutdown callbacks
+     *        (potentially from different modules of an application) to be notified
+     *        before the GattClient is shutdown.
      *
-     * @Note It is possible to unregister a callback using onShutdown().detach(callback)
+     * @note  It is also possible to set up a callback into a member function of
+     *        some object.
+     *
+     * @note It is possible to unregister a callback using onShutdown().detach(callback).
      */
     void onShutdown(const GattClientShutdownCallback_t& callback) {
         shutdownCallChain.add(callback);
     }
+
+    /**
+     * Same as GattClient::onShutdown(), but allows the possibility to add an object
+     * reference and member function as handler for shutdown event
+     * callbacks.
+     *
+     * @param[in] objPtr
+     *              Pointer to the object of a class defining the member callback
+     *              function (@p memberPtr).
+     * @param[in] memberPtr
+     *              The member callback (within the context of an object) to be
+     *              invoked.
+     */
     template <typename T>
     void onShutdown(T *objPtr, void (T::*memberPtr)(void)) {
         shutdownCallChain.add(objPtr, memberPtr);
     }
 
     /**
-     * @brief provide access to the callchain of shutdown event callbacks
-     * It is possible to register callbacks using onShutdown().add(callback);
-     * It is possible to unregister callbacks using onShutdown().detach(callback)
-     * @return The shutdown event callbacks chain
+     * @brief Provide access to the callchain of shutdown event callbacks.
+     *
+     * @return A reference to the shutdown event callbacks chain.
+     *
+     * @note It is possible to register callbacks using onShutdown().add(callback).
+     *
+     * @note It is possible to unregister callbacks using onShutdown().detach(callback).
      */
     GattClientShutdownCallbackChain_t& onShutdown() {
         return shutdownCallChain;
     }
 
     /**
-     * @brief provide access to the callchain of HVX callbacks
-     * It is possible to register callbacks using onHVX().add(callback);
-     * It is possible to unregister callbacks using onHVX().detach(callback)
-     * @return The HVX callbacks chain
+     * @brief provide access to the callchain of HVX callbacks.
+     *
+     * @return A reference to the HVX callbacks chain.
+     *
+     * @note It is possible to register callbacks using onHVX().add(callback).
+     *
+     * @note It is possible to unregister callbacks using onHVX().detach(callback).
      */
     HVXCallbackChain_t& onHVX() {
         return onHVXCallbackChain;
@@ -446,14 +554,41 @@
 
     /* Entry points for the underlying stack to report events back to the user. */
 public:
+    /**
+     * Helper function that notifies all registered handlers of an occurrence
+     * of a data read event. This function is meant to be called from the
+     * BLE stack specific implementation when a data read event occurs.
+     *
+     * @param[in] params
+     *              The data read parameters passed to the registered
+     *              handlers.
+     */
     void processReadResponse(const GattReadCallbackParams *params) {
         onDataReadCallbackChain(params);
     }
 
+    /**
+     * Helper function that notifies all registered handlers of an occurrence
+     * of a data written event. This function is meant to be called from the
+     * BLE stack specific implementation when a data written event occurs.
+     *
+     * @param[in] params
+     *              The data written parameters passed to the registered
+     *              handlers.
+     */
     void processWriteResponse(const GattWriteCallbackParams *params) {
         onDataWriteCallbackChain(params);
     }
 
+    /**
+     * Helper function that notifies all registered handlers of an occurrence
+     * of an update event. This function is meant to be called from the
+     * BLE stack specific implementation when an update event occurs.
+     *
+     * @param[in] params
+     *              The update event parameters passed to the registered
+     *              handlers.
+     */
     void processHVXEvent(const GattHVXCallbackParams *params) {
         if (onHVXCallbackChain) {
             onHVXCallbackChain(params);
@@ -461,9 +596,25 @@
     }
 
 protected:
+    /**
+     * Callchain containing all registered callback handlers for data read
+     * events.
+     */
     ReadCallbackChain_t               onDataReadCallbackChain;
+    /**
+     * Callchain containing all registered callback handlers for data write
+     * events.
+     */
     WriteCallbackChain_t              onDataWriteCallbackChain;
+    /**
+     * Callchain containing all registered callback handlers for update
+     * events.
+     */
     HVXCallbackChain_t                onHVXCallbackChain;
+    /**
+     * Callchain containing all registered callback handlers for shutdown
+     * events.
+     */
     GattClientShutdownCallbackChain_t shutdownCallChain;
 
 private:
@@ -472,4 +623,4 @@
     GattClient& operator=(const GattClient &);
 };
 
-#endif // ifndef __GATT_CLIENT_H__
\ No newline at end of file
+#endif /* ifndef __GATT_CLIENT_H__ */
\ No newline at end of file
--- a/ble/GattServer.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/GattServer.h	Wed Apr 06 19:15:36 2016 +0100
@@ -26,22 +26,57 @@
 
 class GattServer {
 public:
-    /* Event callback handlers. */
+    /**
+     * Type for the registered callbacks added to the data sent callchain.
+     * Refer to GattServer::onDataSent().
+     */
     typedef FunctionPointerWithContext<unsigned> DataSentCallback_t;
+    /**
+     * Type for the data sent event callchain. Refer to GattServer::onDataSent().
+     */
     typedef CallChainOfFunctionPointersWithContext<unsigned> DataSentCallbackChain_t;
 
+    /**
+     * Type for the registered callbacks added to the data written callchain.
+     * Refer to GattServer::onDataWritten().
+     */
     typedef FunctionPointerWithContext<const GattWriteCallbackParams*> DataWrittenCallback_t;
+    /**
+     * Type for the data written event callchain. Refer to GattServer::onDataWritten().
+     */
     typedef CallChainOfFunctionPointersWithContext<const GattWriteCallbackParams*> DataWrittenCallbackChain_t;
 
+    /**
+     * Type for the registered callbacks added to the data read callchain.
+     * Refer to GattServer::onDataRead().
+     */
     typedef FunctionPointerWithContext<const GattReadCallbackParams*> DataReadCallback_t;
+    /**
+     * Type for the data read event callchain. Refer to GattServer::onDataRead().
+     */
     typedef CallChainOfFunctionPointersWithContext<const GattReadCallbackParams *> DataReadCallbackChain_t;
 
+    /**
+     * Type for the registered callbacks added to the shutdown callchain.
+     * Refer to GattServer::onShutdown().
+     */
     typedef FunctionPointerWithContext<const GattServer *> GattServerShutdownCallback_t;
+    /**
+     * Type for the shutdown event callchain. Refer to GattServer::onShutdown().
+     */
     typedef CallChainOfFunctionPointersWithContext<const GattServer *> GattServerShutdownCallbackChain_t;
 
+    /**
+     * Type for the registered callback for various events. Refer to
+     * GattServer::onUpdatesEnabled(), GattServer::onUpdateDisabled() and
+     * GattServer::onConfirmationReceived().
+     */
     typedef FunctionPointerWithContext<GattAttribute::Handle_t> EventCallback_t;
 
 protected:
+    /**
+     * Construct a GattServer instance.
+     */
     GattServer() :
         serviceCount(0),
         characteristicCount(0),
@@ -62,6 +97,11 @@
     /**
      * Add a service declaration to the local server ATT table. Also add the
      * characteristics contained within.
+     *
+     * @param[in] service
+     *              The service to be added.
+     *
+     * @return BLE_ERROR_NONE if the service was successfully added.
      */
     virtual ble_error_t addService(GattService &service) {
         /* Avoid compiler warnings about unused variables. */
@@ -72,11 +112,12 @@
 
     /**
      * Read the value of a characteristic from the local GATT server.
+     *
      * @param[in]     attributeHandle
      *                  Attribute handle for the value attribute of the characteristic.
      * @param[out]    buffer
      *                  A buffer to hold the value being read.
-     * @param[in/out] lengthP
+     * @param[in,out] lengthP
      *                  Length of the buffer being supplied. If the attribute
      *                  value is longer than the size of the supplied buffer,
      *                  this variable will hold upon return the total attribute value length
@@ -96,13 +137,14 @@
 
     /**
      * Read the value of a characteristic from the local GATT server.
+     *
      * @param[in]     connectionHandle
      *                  Connection handle.
      * @param[in]     attributeHandle
      *                  Attribute handle for the value attribute of the characteristic.
      * @param[out]    buffer
      *                  A buffer to hold the value being read.
-     * @param[in/out] lengthP
+     * @param[in,out] lengthP
      *                  Length of the buffer being supplied. If the attribute
      *                  value is longer than the size of the supplied buffer,
      *                  this variable will hold upon return the total attribute value length
@@ -189,7 +231,7 @@
     /**
      * Determine the updates-enabled status (notification or indication) for the current connection from a characteristic's CCCD.
      *
-     * @param       characteristic
+     * @param[in]   characteristic
      *                The characteristic.
      * @param[out]  enabledP
      *                Upon return, *enabledP is true if updates are enabled, else false.
@@ -207,14 +249,13 @@
     /**
      * Determine the connection-specific updates-enabled status (notification or indication) from a characteristic's CCCD.
      *
-     * @param       connectionHandle
+     * @param[in]   connectionHandle
      *                The connection handle.
+     * @param[in]  characteristic
+     *                The characteristic.
      * @param[out]  enabledP
      *                Upon return, *enabledP is true if updates are enabled, else false.
      *
-     * @param  characteristic
-     *           The characteristic.
-     *
      * @return BLE_ERROR_NONE if the connection and handle are found. False otherwise.
      */
     virtual ble_error_t areUpdatesEnabled(Gap::Handle_t connectionHandle, const GattCharacteristic &characteristic, bool *enabledP) {
@@ -229,6 +270,8 @@
     /**
      * A virtual function to allow underlying stacks to indicate if they support
      * onDataRead(). It should be overridden to return true as applicable.
+     *
+     * @return true if onDataRead is supported, false otherwise.
      */
     virtual bool isOnDataReadAvailable() const {
         return false; /* Requesting action from porters: override this API if this capability is supported. */
@@ -242,21 +285,41 @@
      * Add a callback for the GATT event DATA_SENT (which is triggered when
      * updates are sent out by GATT in the form of notifications).
      *
-     * @Note: It is possible to chain together multiple onDataSent callbacks
-     * (potentially from different modules of an application) to receive updates
-     * to characteristics.
+     * @param[in] callback
+     *              Event handler being registered.
+     *
+     * @note It is possible to chain together multiple onDataSent callbacks
+     *       (potentially from different modules of an application) to receive updates
+     *       to characteristics.
      *
-     * @Note: It is also possible to set up a callback into a member function of
-     * some object.
+     * @note It is also possible to set up a callback into a member function of
+     *       some object.
      */
-    void onDataSent(const DataSentCallback_t& callback) {dataSentCallChain.add(callback);}
+    void onDataSent(const DataSentCallback_t& callback) {
+        dataSentCallChain.add(callback);
+    }
+
+    /**
+     * Same as GattServer::onDataSent(), but allows the possibility to add an object
+     * reference and member function as handler for DATA_SENT event
+     * callbacks.
+     *
+     * @param[in] objPtr
+     *              Pointer to the object of a class defining the member callback
+     *              function (@p memberPtr).
+     * @param[in] memberPtr
+     *              The member callback (within the context of an object) to be
+     *              invoked.
+     */
     template <typename T>
     void onDataSent(T *objPtr, void (T::*memberPtr)(unsigned count)) {
         dataSentCallChain.add(objPtr, memberPtr);
     }
 
     /**
-     * @brief get the callback chain called when the event DATA_EVENT is triggered.
+     * @brief Provide access to the callchain of DATA_SENT event callbacks.
+     *
+     * @return A reference to the DATA_SENT event callback chain.
      */
     DataSentCallbackChain_t& onDataSent() {
         return dataSentCallChain;
@@ -269,27 +332,48 @@
      * For a central, this callback is triggered when a response is received for
      * a write request.
      *
-     * @Note: It is possible to chain together multiple onDataWritten callbacks
+     * @param[in] callback
+     *              Event handler being registered.
+     *
+     * @note  It is possible to chain together multiple onDataWritten callbacks
      * (potentially from different modules of an application) to receive updates
      * to characteristics. Many services, such as DFU and UART, add their own
      * onDataWritten callbacks behind the scenes to trap interesting events.
      *
-     * @Note: It is also possible to set up a callback into a member function of
+     * @note  It is also possible to set up a callback into a member function of
      * some object.
      *
-     * @Note It is possible to unregister a callback using onDataWritten().detach(callback)
+     * @note It is possible to unregister a callback using onDataWritten().detach(callback)
      */
-    void onDataWritten(const DataWrittenCallback_t& callback) {dataWrittenCallChain.add(callback);}
+    void onDataWritten(const DataWrittenCallback_t& callback) {
+        dataWrittenCallChain.add(callback);
+    }
+
+    /**
+     * Same as GattServer::onDataWritten(), but allows the possibility to add an object
+     * reference and member function as handler for data written event
+     * callbacks.
+     *
+     * @param[in] objPtr
+     *              Pointer to the object of a class defining the member callback
+     *              function (@p memberPtr).
+     * @param[in] memberPtr
+     *              The member callback (within the context of an object) to be
+     *              invoked.
+     */
     template <typename T>
     void onDataWritten(T *objPtr, void (T::*memberPtr)(const GattWriteCallbackParams *context)) {
         dataWrittenCallChain.add(objPtr, memberPtr);
     }
 
     /**
-     * @brief provide access to the callchain of data written event callbacks
-     * It is possible to register callbacks using onDataWritten().add(callback);
-     * It is possible to unregister callbacks using onDataWritten().detach(callback)
-     * @return The data written event callbacks chain
+     * @brief Provide access to the callchain of data written event callbacks.
+     *
+     * @return A reference to the data written event callbacks chain.
+     *
+     * @note It is possible to register callbacks using onDataWritten().add(callback).
+     *
+     * @note It is possible to unregister callbacks using onDataWritten().detach(callback).
      */
     DataWrittenCallbackChain_t& onDataWritten() {
         return dataWrittenCallChain;
@@ -299,22 +383,25 @@
      * Setup a callback to be invoked on the peripheral when an attribute is
      * being read by a remote client.
      *
-     * @Note: This functionality may not be available on all underlying stacks.
+     * @param[in] callback
+     *              Event handler being registered.
+     *
+     * @return BLE_ERROR_NOT_IMPLEMENTED if this functionality isn't available;
+     *         else BLE_ERROR_NONE.
+     *
+     * @note  This functionality may not be available on all underlying stacks.
      * You could use GattCharacteristic::setReadAuthorizationCallback() as an
      * alternative. Refer to isOnDataReadAvailable().
      *
-     * @Note: It is possible to chain together multiple onDataRead callbacks
+     * @note  It is possible to chain together multiple onDataRead callbacks
      * (potentially from different modules of an application) to receive updates
      * to characteristics. Services may add their own onDataRead callbacks
      * behind the scenes to trap interesting events.
      *
-     * @Note: It is also possible to set up a callback into a member function of
+     * @note  It is also possible to set up a callback into a member function of
      * some object.
      *
-     * @Note It is possible to unregister a callback using onDataRead().detach(callback)
-     *
-     * @return BLE_ERROR_NOT_IMPLEMENTED if this functionality isn't available;
-     *         else BLE_ERROR_NONE.
+     * @note It is possible to unregister a callback using onDataRead().detach(callback).
      */
     ble_error_t onDataRead(const DataReadCallback_t& callback) {
         if (!isOnDataReadAvailable()) {
@@ -324,6 +411,19 @@
         dataReadCallChain.add(callback);
         return BLE_ERROR_NONE;
     }
+
+    /**
+     * Same as GattServer::onDataRead(), but allows the possibility to add an object
+     * reference and member function as handler for data read event
+     * callbacks.
+     *
+     * @param[in] objPtr
+     *              Pointer to the object of a class defining the member callback
+     *              function (@p memberPtr).
+     * @param[in] memberPtr
+     *              The member callback (within the context of an object) to be
+     *              invoked.
+     */
     template <typename T>
     ble_error_t onDataRead(T *objPtr, void (T::*memberPtr)(const GattReadCallbackParams *context)) {
         if (!isOnDataReadAvailable()) {
@@ -335,10 +435,13 @@
     }
 
     /**
-     * @brief provide access to the callchain of data read event callbacks
-     * It is possible to register callbacks using onDataRead().add(callback);
-     * It is possible to unregister callbacks using onDataRead().detach(callback)
-     * @return The data read event callbacks chain
+     * @brief Provide access to the callchain of data read event callbacks.
+     *
+     * @return A reference to the data read event callbacks chain.
+     *
+     * @note It is possible to register callbacks using onDataRead().add(callback).
+     *
+     * @note It is possible to unregister callbacks using onDataRead().detach(callback).
      */
     DataReadCallbackChain_t& onDataRead() {
         return dataReadCallChain;
@@ -349,28 +452,47 @@
      * GattServer instance is about to shutdown (possibly as a result of a call
      * to BLE::shutdown()).
      *
-     * @Note: It is possible to chain together multiple onShutdown callbacks
+     * @param[in] callback
+     *              Event handler being registered.
+     *
+     * @note  It is possible to chain together multiple onShutdown callbacks
      * (potentially from different modules of an application) to be notified
      * before the GattServer is shutdown.
      *
-     * @Note: It is also possible to set up a callback into a member function of
+     * @note  It is also possible to set up a callback into a member function of
      * some object.
      *
-     * @Note It is possible to unregister a callback using onShutdown().detach(callback)
+     * @note It is possible to unregister a callback using onShutdown().detach(callback)
      */
     void onShutdown(const GattServerShutdownCallback_t& callback) {
         shutdownCallChain.add(callback);
     }
+
+    /**
+     * Same as GattServer::onShutdown(), but allows the possibility to add an object
+     * reference and member function as handler for shutdown event
+     * callbacks.
+     *
+     * @param[in] objPtr
+     *              Pointer to the object of a class defining the member callback
+     *              function (@p memberPtr).
+     * @param[in] memberPtr
+     *              The member callback (within the context of an object) to be
+     *              invoked.
+     */
     template <typename T>
     void onShutdown(T *objPtr, void (T::*memberPtr)(void)) {
         shutdownCallChain.add(objPtr, memberPtr);
     }
 
     /**
-     * @brief provide access to the callchain of shutdown event callbacks
-     * It is possible to register callbacks using onShutdown().add(callback);
-     * It is possible to unregister callbacks using onShutdown().detach(callback)
-     * @return The shutdown event callbacks chain
+     * @brief Provide access to the callchain of shutdown event callbacks.
+     *
+     * @return A reference to the shutdown event callbacks chain.
+     *
+     * @note It is possible to register callbacks using onShutdown().add(callback).
+     *
+     * @note It is possible to unregister callbacks using onShutdown().detach(callback).
      */
     GattServerShutdownCallbackChain_t& onShutdown() {
         return shutdownCallChain;
@@ -379,31 +501,75 @@
     /**
      * Set up a callback for when notifications or indications are enabled for a
      * characteristic on the local GATT server.
+     *
+     * @param[in] callback
+     *              Event handler being registered.
      */
-    void onUpdatesEnabled(EventCallback_t callback) {updatesEnabledCallback = callback;}
+    void onUpdatesEnabled(EventCallback_t callback) {
+        updatesEnabledCallback = callback;
+    }
 
     /**
      * Set up a callback for when notifications or indications are disabled for a
      * characteristic on the local GATT server.
+     *
+     * @param[in] callback
+     *              Event handler being registered.
      */
-    void onUpdatesDisabled(EventCallback_t callback) {updatesDisabledCallback = callback;}
+    void onUpdatesDisabled(EventCallback_t callback) {
+        updatesDisabledCallback = callback;
+    }
 
     /**
      * Set up a callback for when the GATT server receives a response for an
      * indication event sent previously.
+     *
+     * @param[in] callback
+     *              Event handler being registered.
      */
-    void onConfirmationReceived(EventCallback_t callback) {confirmationReceivedCallback = callback;}
+    void onConfirmationReceived(EventCallback_t callback) {
+        confirmationReceivedCallback = callback;
+    }
 
     /* Entry points for the underlying stack to report events back to the user. */
 protected:
+    /**
+     * Helper function that notifies all registered handlers of an occurrence
+     * of a data written event. This function is meant to be called from the
+     * BLE stack specific implementation when a data written event occurs.
+     *
+     * @param[in] params
+     *              The data written parameters passed to the registered
+     *              handlers.
+     */
     void handleDataWrittenEvent(const GattWriteCallbackParams *params) {
         dataWrittenCallChain.call(params);
     }
 
+    /**
+     * Helper function that notifies all registered handlers of an occurrence
+     * of a data read event. This function is meant to be called from the
+     * BLE stack specific implementation when a data read event occurs.
+     *
+     * @param[in] params
+     *              The data read parameters passed to the registered
+     *              handlers.
+     */
     void handleDataReadEvent(const GattReadCallbackParams *params) {
         dataReadCallChain.call(params);
     }
 
+    /**
+     * Helper function that notifies the registered handler of an occurrence
+     * of updates enabled, updates disabled and confirmation received events.
+     * This function is meant to be called from the BLE stack specific
+     * implementation when any of these events occurs.
+     *
+     * @param[in] type
+     *              The type of event that occurred.
+     * @param[in] attributeHandle
+     *              The handle of the attribute that was modified.
+     */
     void handleEvent(GattServerEvents::gattEvent_e type, GattAttribute::Handle_t attributeHandle) {
         switch (type) {
             case GattServerEvents::GATT_EVENT_UPDATES_ENABLED:
@@ -426,6 +592,14 @@
         }
     }
 
+    /**
+     * Helper function that notifies all registered handlers of an occurrence
+     * of a data sent event. This function is meant to be called from the
+     * BLE stack specific implementation when a data sent event occurs.
+     *
+     * @param[in] count
+     *              Number of packets sent.
+     */
     void handleDataSentEvent(unsigned count) {
         dataSentCallChain.call(count);
     }
@@ -463,16 +637,47 @@
     }
 
 protected:
+    /**
+     * The total number of services added to the ATT table.
+     */
     uint8_t serviceCount;
+    /**
+     * The total number of characteristics added to the ATT table.
+     */
     uint8_t characteristicCount;
 
 private:
+    /**
+     * Callchain containing all registered callback handlers for data sent
+     * events.
+     */
     DataSentCallbackChain_t           dataSentCallChain;
+    /**
+     * Callchain containing all registered callback handlers for data written
+     * events.
+     */
     DataWrittenCallbackChain_t        dataWrittenCallChain;
+    /**
+     * Callchain containing all registered callback handlers for data read
+     * events.
+     */
     DataReadCallbackChain_t           dataReadCallChain;
+    /**
+     * Callchain containing all registered callback handlers for shutdown
+     * events.
+     */
     GattServerShutdownCallbackChain_t shutdownCallChain;
+    /**
+     * The registered callback handler for updates enabled events.
+     */
     EventCallback_t                   updatesEnabledCallback;
+    /**
+     * The registered callback handler for updates disabled events.
+     */
     EventCallback_t                   updatesDisabledCallback;
+    /**
+     * The registered callback handler for confirmation received events.
+     */
     EventCallback_t                   confirmationReceivedCallback;
 
 private:
@@ -481,4 +686,4 @@
     GattServer& operator=(const GattServer &);
 };
 
-#endif // ifndef __GATT_SERVER_H__
\ No newline at end of file
+#endif /* ifndef __GATT_SERVER_H__ */
\ No newline at end of file
--- a/ble/GattServerEvents.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/GattServerEvents.h	Wed Apr 06 19:15:36 2016 +0100
@@ -17,14 +17,16 @@
 #ifndef __GATT_SERVER_EVENTS_H__
 #define __GATT_SERVER_EVENTS_H__
 
-/*!
-    \brief
-    The base class used to abstract away the callback events that can be
-    triggered with the GATT Server.
-*/
+/**
+ *  @brief The base class used to abstract away the callback events that can be
+ *         triggered with the GATT Server.
+ */
 class GattServerEvents
 {
 public:
+    /**
+     * Enumeration for GattServer events.
+     */
     typedef enum gattEvent_e {
         GATT_EVENT_DATA_SENT               = 1,  /**< Fired when a message was successfully sent out (notify only?) */
         GATT_EVENT_DATA_WRITTEN            = 2,  /**< Client wrote data to the server (separate into char and descriptor writes?) */
@@ -36,4 +38,4 @@
     } gattEvent_t;
 };
 
-#endif // ifndef __GATT_SERVER_EVENTS_H__
\ No newline at end of file
+#endif /* ifndef __GATT_SERVER_EVENTS_H__ */
\ No newline at end of file
--- a/ble/GattService.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/GattService.h	Wed Apr 06 19:15:36 2016 +0100
@@ -59,15 +59,58 @@
      *              The number of characteristics.
      */
     GattService(const UUID &uuid, GattCharacteristic *characteristics[], unsigned numCharacteristics) :
-        _primaryServiceID(uuid), _characteristicCount(numCharacteristics), _characteristics(characteristics), _handle(0) {
+        _primaryServiceID(uuid),
+        _characteristicCount(numCharacteristics),
+        _characteristics(characteristics),
+        _handle(0) {
         /* empty */
     }
 
-    const UUID &getUUID(void)                const {return _primaryServiceID;   }
-    uint16_t    getHandle(void)              const {return _handle;             }
-    uint8_t     getCharacteristicCount(void) const {return _characteristicCount;}
-    void setHandle(uint16_t handle) {_handle = handle;}
+    /**
+     * Get this service's UUID.
+     *
+     * @return A reference to the service's UUID.
+     */
+    const UUID &getUUID(void) const {
+        return _primaryServiceID;
+    }
+
+    /**
+     * Get handle of the service declaration attribute in the ATT table.
+     *
+     * @return The service's handle.
+     */
+    uint16_t getHandle(void) const {
+        return _handle;
+    }
 
+    /**
+     * Get the total number of characteristics within this service.
+     *
+     * @return The total number of characteristics within this service.
+     */
+    uint8_t getCharacteristicCount(void) const {
+        return _characteristicCount;
+    }
+
+    /**
+     * Set the handle of the service declaration attribute in the ATT table.
+     *
+     * @param[in] handle
+     *              The service's handle.
+     */
+    void setHandle(uint16_t handle) {
+        _handle = handle;
+    }
+
+    /**
+     * Get this service's characteristic at a specific index.
+     *
+     * @param[in] index
+     *              The index of the characteristic.
+     *
+     * @return A pointer to the characterisitic at index @p index.
+     */
     GattCharacteristic *getCharacteristic(uint8_t index) {
         if (index >= _characteristicCount) {
             return NULL;
@@ -77,10 +120,25 @@
     }
 
 private:
+    /**
+     * This service's UUID.
+     */
     UUID                 _primaryServiceID;
+    /**
+     * Total number of characteristics within this service.
+     */
     uint8_t              _characteristicCount;
+    /**
+     * An array with pointers to the characteristics added to this service.
+     */
     GattCharacteristic **_characteristics;
+    /**
+     * Handle of the service declaration attribute in the ATT table.
+     *
+     * @note This handle is generally assigned by the underlying BLE stack when the
+     *       service is added to the ATT table.
+     */
     uint16_t             _handle;
 };
 
-#endif // ifndef __GATT_SERVICE_H__
\ No newline at end of file
+#endif /* ifndef __GATT_SERVICE_H__ */
\ No newline at end of file
--- a/ble/SafeBool.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/SafeBool.h	Wed Apr 06 19:15:36 2016 +0100
@@ -17,26 +17,32 @@
 #ifndef BLE_API_SAFE_BOOL_H_
 #define BLE_API_SAFE_BOOL_H_
 
-//safe bool idiom, see : http://www.artima.com/cppsource/safebool.html
+/* Safe bool idiom, see : http://www.artima.com/cppsource/safebool.html */
 
 namespace SafeBool_ {
 /**
- * @brief Base class for all intances of SafeBool, 
- * This base class reduce instantiation of trueTag function
+ * @brief Base class for all intances of SafeBool.
+ * This base class reduces instantiation of trueTag function.
  */
 class base {
   template<typename>
   friend class SafeBool;
 
 protected:
-    //the bool type is a pointer to method which can be used in boolean context
-  typedef void (base::*BoolType_t)() const;
+    /**
+     * The bool type is a pointer to method which can be used in boolean context.
+     */
+    typedef void (base::*BoolType_t)() const;
 
-  // non implemented call, use to disallow conversion between unrelated types 
-  void invalidTag() const;
+    /**
+     * Non implemented call, use to disallow conversion between unrelated types.
+     */
+    void invalidTag() const;
 
-  // member function which indicate true value
-  void trueTag() const {}
+    /**
+     * Member function which indicate true value.
+     */
+    void trueTag() const {}
 };
 
 
@@ -44,71 +50,75 @@
 
 /**
  * @brief template class SafeBool use CRTP to made boolean conversion easy and correct.
- * Derived class should implement the function bool toBool() const to make this work. Inheritance 
+ * Derived class should implement the function bool toBool() const to make this work. Inheritance
  * should be public.
  *
  * @tparam T Type of the derived class
- * 
- * \code 
- * 
- * class A : public SafeBool<A> { 
+ *
+ * @code
+ *
+ * class A : public SafeBool<A> {
  * public:
- * 
+ *
  *      // boolean conversion
- *      bool toBool() { 
- *      
- *      }  
+ *      bool toBool() {
+ *
+ *      }
  * };
- * 
- * class B : public SafeBool<B> { 
+ *
+ * class B : public SafeBool<B> {
  * public:
- * 
+ *
  *      // boolean conversion
- *      bool toBool() const { 
- *      
- *      }  
+ *      bool toBool() const {
+ *
+ *      }
  * };
- * 
+ *
  * A a;
  * B b;
- * 
- * // will compile 
- * if(a) { 
- * 
+ *
+ * // will compile
+ * if(a) {
+ *
  * }
- * 
- * // compilation error 
- * if(a == b) { 
- * 
+ *
+ * // compilation error
+ * if(a == b) {
+ *
  * }
- * 
- * 
- * \endcode
+ *
+ *
+ * @endcode
  */
-template <typename T> 
+template <typename T>
 class SafeBool : public SafeBool_::base {
 public:
-  /** 
-   * bool operator implementation, derived class has to provide bool toBool() const function.
-   */
-  operator BoolType_t() const {
-    return (static_cast<const T*>(this))->toBool()
-      ? &SafeBool<T>::trueTag : 0;
-  }
+    /**
+     * Bool operator implementation, derived class has to provide bool toBool() const function.
+     */
+    operator BoolType_t() const {
+        return (static_cast<const T*>(this))->toBool()
+            ? &SafeBool<T>::trueTag : 0;
+    }
 };
 
-//Avoid conversion to bool between different classes
+/**
+ * Avoid conversion to bool between different classes.
+ */
 template <typename T, typename U>
 void operator==(const SafeBool<T>& lhs,const SafeBool<U>& rhs) {
     lhs.invalidTag();
-//    return false;
+    // return false;
 }
 
-//Avoid conversion to bool between different classes
+/**
+ * Avoid conversion to bool between different classes.
+ */
 template <typename T,typename U>
 void operator!=(const SafeBool<T>& lhs,const SafeBool<U>& rhs) {
-  lhs.invalidTag();
-//  return false;
+    lhs.invalidTag();
+    // return false;
 }
 
 #endif /* BLE_API_SAFE_BOOL_H_ */
\ No newline at end of file
--- a/ble/SecurityManager.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/SecurityManager.h	Wed Apr 06 19:15:36 2016 +0100
@@ -166,7 +166,7 @@
     /**
      * Get a list of addresses from all peers in the bond table.
      *
-     * @param[in/out]   addresses
+     * @param[in,out]   addresses
      *                  (on input) addresses.capacity contains the maximum
      *                  number of addresses to be returned.
      *                  (on output) The populated table with copies of the
@@ -192,14 +192,14 @@
      * SecurityManager instance is about to shutdown (possibly as a result of a call
      * to BLE::shutdown()).
      *
-     * @Note: It is possible to chain together multiple onShutdown callbacks
+     * @note  It is possible to chain together multiple onShutdown callbacks
      * (potentially from different modules of an application) to be notified
      * before the SecurityManager is shutdown.
      *
-     * @Note: It is also possible to set up a callback into a member function of
+     * @note  It is also possible to set up a callback into a member function of
      * some object.
      *
-     * @Note It is possible to unregister a callback using onShutdown().detach(callback)
+     * @note It is possible to unregister a callback using onShutdown().detach(callback)
      */
     void onShutdown(const SecurityManagerShutdownCallback_t& callback) {
         shutdownCallChain.add(callback);
--- a/ble/ServiceDiscovery.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/ServiceDiscovery.h	Wed Apr 06 19:15:36 2016 +0100
@@ -117,7 +117,7 @@
                                const UUID               &matchingCharacteristicUUIDIn = UUID::ShortUUIDBytes_t(BLE_UUID_UNKNOWN)) = 0;
 
     /**
-     * Is service-discovery currently active?
+     * Check whether service-discovery is currently active.
      */
     virtual bool        isActive(void) const = 0;
 
@@ -154,11 +154,30 @@
     }
 
 protected:
-    Gap::Handle_t            connHandle; /**< Connection handle as provided by the SoftDevice. */
+    /**
+     * Connection handle as provided by the SoftDevice.
+     */
+    Gap::Handle_t            connHandle;
+    /**
+     * UUID-based filter that specifies the service that the application is
+     * interested in.
+     */
     UUID                     matchingServiceUUID;
+    /**
+     * The registered callback handle for when a matching service is found
+     * during service-discovery.
+     */
     ServiceCallback_t        serviceCallback;
+    /**
+     * UUID-based filter that specifies the characteristic that the
+     * application is interested in.
+     */
     UUID                     matchingCharacteristicUUID;
+    /**
+     * The registered callback handler for when a matching characteristic is
+     * found during service-discovery.
+     */
     CharacteristicCallback_t characteristicCallback;
 };
 
-#endif // ifndef __SERVICE_DISOVERY_H__
\ No newline at end of file
+#endif /* ifndef __SERVICE_DISOVERY_H__ */
\ No newline at end of file
--- a/ble/UUID.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/UUID.h	Wed Apr 06 19:15:36 2016 +0100
@@ -24,9 +24,12 @@
 #include "blecommon.h"
 
 /**
- * A trivial converter for single hexadecimal character to unsigned-int.
- * @param  c hexadecimal character.
- * @return   the corresponding value as unsigned int.
+ * A trivial converter for single hexadecimal character to an unsigned integer.
+ *
+ * @param  c
+ *          Hexadecimal character.
+ *
+ * @return The corresponding value as unsigned integer.
  */
 static uint8_t char2int(char c) {
     if ((c >= '0') && (c <= '9')) {
@@ -40,26 +43,47 @@
     }
 }
 
+/**
+ * An instance of this class represents a Universally Unique Identifier (UUID)
+ * in the BLE API.
+ */
 class UUID {
 public:
+    /**
+     * Enumeration of the possible types of UUIDs in BLE with regards to length.
+     */
     enum UUID_Type_t {
-        UUID_TYPE_SHORT = 0,    // Short BLE UUID.
-        UUID_TYPE_LONG  = 1     // Full 128-bit UUID.
+        UUID_TYPE_SHORT = 0,    /**< Short 16-bit UUID. */
+        UUID_TYPE_LONG  = 1     /**< Full 128-bit UUID. */
     };
 
     /**
-     * An enumeration to specify byte ordering of the long version of the UUID.
+     * Enumeration to specify byte ordering of the long version of the UUID.
      */
     typedef enum {
-        MSB, /*!< Most-significant byte first (at the smallest address) */
-        LSB  /*!< least-significant byte first (at the smallest address) */
+        MSB, /**< Most-significant byte first (at the smallest address) */
+        LSB  /**< least-significant byte first (at the smallest address) */
     } ByteOrder_t;
 
+    /**
+     * Type for a 16-bit UUID.
+     */
     typedef uint16_t      ShortUUIDBytes_t;
 
+    /**
+     * Length of a long UUID in bytes.
+     */
     static const unsigned LENGTH_OF_LONG_UUID = 16;
+    /**
+     * Type for a 128-bit UUID.
+     */
     typedef uint8_t       LongUUIDBytes_t[LENGTH_OF_LONG_UUID];
 
+    /**
+     * Maximum length of a string representation of a UUID not including the
+     * null termination ('\0'): two characters per
+     * byte plus four '-' characters.
+     */
     static const unsigned MAX_UUID_STRING_LENGTH = LENGTH_OF_LONG_UUID * 2 + 4;
 
 public:
@@ -83,30 +107,32 @@
         size_t baseIndex = 0;
         uint8_t tempUUID[LENGTH_OF_LONG_UUID];
 
-        // Iterate through string, abort if NULL is encountered prematurely.
-        // Ignore upto four hyphens.
+        /*
+         * Iterate through string, abort if NULL is encountered prematurely.
+         * Ignore upto four hyphens.
+         */
         for (size_t index = 0; (index < MAX_UUID_STRING_LENGTH) && (baseIndex < LENGTH_OF_LONG_UUID); index++) {
             if (stringUUID[index] == '\0') {
-                // error abort
+                /* Error abort */
                 break;
             } else if (stringUUID[index] == '-') {
-                // ignore hyphen
+                /* Ignore hyphen */
                 continue;
             } else if (nibble) {
-                // got second nibble
+                /* Got second nibble */
                 byte |= char2int(stringUUID[index]);
                 nibble = false;
 
-                // store copy
+                /* Store copy */
                 tempUUID[baseIndex++] = byte;
             } else {
-                // got first nibble
+                /* Got first nibble */
                 byte = char2int(stringUUID[index]) << 4;
                 nibble = true;
             }
         }
 
-        // populate internal variables if string was successfully parsed
+        /* Populate internal variables if string was successfully parsed */
         if (baseIndex == LENGTH_OF_LONG_UUID) {
             setupLong(tempUUID, UUID::MSB);
         } else {
@@ -119,13 +145,13 @@
     /**
      * Creates a new 128-bit UUID.
      *
+     * @param[in] longUUID
+     *              The 128-bit (16-byte) UUID value.
+     * @param[in] order
+     *              The bit order of the UUID, MSB by default.
+     *
      * @note   The UUID is a unique 128-bit (16 byte) ID used to identify
      *         different service or characteristics on the BLE device.
-     *
-     * @param longUUID
-     *          The 128-bit (16-byte) UUID value.
-     * @param order
-     *          The bit order of the UUID, MSB by default.
      */
     UUID(const LongUUIDBytes_t longUUID, ByteOrder_t order = UUID::MSB) : type(UUID_TYPE_LONG), baseUUID(), shortUUID(0) {
         setupLong(longUUID, order);
@@ -134,9 +160,6 @@
     /**
      * Creates a new 16-bit UUID.
      *
-     * @note The UUID is a unique 16-bit (2 byte) ID used to identify
-     *       different service or characteristics on the BLE device.
-     *
      * For efficiency, and because 16 bytes would take a large chunk of the
      * 27-byte data payload length of the Link Layer, the BLE specification adds
      * two additional UUID formats: 16-bit and 32-bit UUIDs. These shortened
@@ -150,34 +173,61 @@
      *
      *  0000xxxx-0000-1000-8000-00805F9B34FB
      *
+     * @param[in] _shortUUID
+     *              The short UUID value.
+     *
      * @note Shortening is not available for UUIDs that are not derived from the
      *       Bluetooth Base UUID. Such non-standard UUIDs are commonly called
      *       vendor-specific UUIDs. In these cases, you’ll need to use the full
      *       128-bit UUID value at all times.
      *
-     * @note We don't yet support 32-bit shortened UUIDs.
+     * @note The UUID is a unique 16-bit (2 byte) ID used to identify
+     *       different service or characteristics on the BLE device.
+     *
+     * @note We do not yet support 32-bit shortened UUIDs.
      */
     UUID(ShortUUIDBytes_t _shortUUID) : type(UUID_TYPE_SHORT), baseUUID(), shortUUID(_shortUUID) {
         /* Empty */
     }
 
+    /**
+     * Copy constructor.
+     *
+     * @param[in] source
+     *              The UUID to copy.
+     */
     UUID(const UUID &source) {
         type      = source.type;
         shortUUID = source.shortUUID;
         memcpy(baseUUID, source.baseUUID, LENGTH_OF_LONG_UUID);
     }
 
+    /**
+     * The empty constructor.
+     *
+     * @note The type of the resulting UUID instance is UUID_TYPE_SHORT and the
+     *       value BLE_UUID_UNKNOWN.
+     */
     UUID(void) : type(UUID_TYPE_SHORT), shortUUID(BLE_UUID_UNKNOWN) {
         /* empty */
     }
 
     /**
-     * Fill in a 128-bit UUID; this is useful when the UUID isn't known at the time of the object construction.
+     * Fill in a 128-bit UUID; this is useful when the UUID is not known at the
+     * time of the object construction.
+     *
+     * @param[in] longUUID
+     *              The UUID value to copy.
+     * @param[in]  order
+     *              The byte ordering of the UUID at @p longUUID.
      */
     void setupLong(const LongUUIDBytes_t longUUID, ByteOrder_t order = UUID::MSB) {
         type      = UUID_TYPE_LONG;
         if (order == UUID::MSB) {
-            // Switch endian. Input is big-endian, internal representation is little endian.
+            /*
+             * Switch endian. Input is big-endian, internal representation
+             * is little endian.
+             */
             std::reverse_copy(longUUID, longUUID + LENGTH_OF_LONG_UUID, baseUUID);
         } else {
             std::copy(longUUID, longUUID + LENGTH_OF_LONG_UUID, baseUUID);
@@ -186,8 +236,23 @@
     }
 
 public:
-    UUID_Type_t       shortOrLong(void)  const {return type;     }
-    const uint8_t    *getBaseUUID(void)  const {
+    /**
+     * Check whether this UUID is short or long.
+     *
+     * @return UUID_TYPE_SHORT if the UUID is short, UUID_TYPE_LONG otherwise.
+     */
+    UUID_Type_t shortOrLong(void) const {
+        return type;
+    }
+
+    /**
+     * Get a pointer to the UUID value based on the current UUID type.
+     *
+     * @return A pointer to the short UUID if the type is set to
+     *         UUID_TYPE_SHORT. Otherwise, a pointer to the long UUID if the
+     *         type is set to UUID_TYPE_LONG.
+     */
+    const uint8_t *getBaseUUID(void) const {
         if (type == UUID_TYPE_SHORT) {
             return (const uint8_t*)&shortUUID;
         } else {
@@ -195,11 +260,33 @@
         }
     }
 
-    ShortUUIDBytes_t  getShortUUID(void) const {return shortUUID;}
-    uint8_t           getLen(void)       const {
+    /**
+     * Get the short UUID.
+     *
+     * @return The short UUID.
+     */
+    ShortUUIDBytes_t getShortUUID(void) const {
+        return shortUUID;
+    }
+
+    /**
+     * Get the length (in bytes) of the UUID based on its type.
+     *
+     * @retval sizeof(ShortUUIDBytes_t) if the UUID type is UUID_TYPE_SHORT.
+     * @retval LENGTH_OF_LONG_UUID if the UUID type is UUID_TYPE_LONG.
+     */
+    uint8_t getLen(void) const {
         return ((type == UUID_TYPE_SHORT) ? sizeof(ShortUUIDBytes_t) : LENGTH_OF_LONG_UUID);
     }
 
+    /**
+     * Overload == operator to enable UUID comparisons.
+     *
+     * @param[in] other
+     *              The other UUID in the comparison.
+     *
+     * @return true if this == @p other, false otherwise.
+     */
     bool operator== (const UUID &other) const {
         if ((this->type == UUID_TYPE_SHORT) && (other.type == UUID_TYPE_SHORT) &&
             (this->shortUUID == other.shortUUID)) {
@@ -214,14 +301,31 @@
         return false;
     }
 
+    /**
+     * Overload != operator to enable UUID comparisons.
+     *
+     * @param[in] other
+     *              The other UUID in the comparison.
+     *
+     * @return true if this != @p other, false otherwise.
+     */
     bool operator!= (const UUID &other) const {
         return !(*this == other);
     }
 
 private:
-    UUID_Type_t      type;      // UUID_TYPE_SHORT or UUID_TYPE_LONG
-    LongUUIDBytes_t  baseUUID;  // The long UUID
-    ShortUUIDBytes_t shortUUID; // 16 bit UUID
+    /**
+     * The UUID type. Refer to UUID_Type_t.
+     */
+    UUID_Type_t      type;
+    /**
+     * The long UUID value.
+     */
+    LongUUIDBytes_t  baseUUID;
+    /**
+     * The short UUID value.
+     */
+    ShortUUIDBytes_t shortUUID;
 };
 
 #endif // ifndef __UUID_H__
\ No newline at end of file
--- a/ble/services/BatteryService.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/services/BatteryService.h	Wed Apr 06 19:15:36 2016 +0100
@@ -28,7 +28,7 @@
 class BatteryService {
 public:
     /**
-     * @param[ref] _ble
+     * @param[in] _ble
      *               BLE object for the underlying controller.
      * @param[in] level
      *               8bit batterly level. Usually used to represent percentage of batterly charge remaining.
@@ -45,7 +45,7 @@
     }
 
     /**
-     * @brief Update the battery level with a new value. [Valid values lie between 0 and 100];
+     * @brief Update the battery level with a new value. Valid values lie between 0 and 100,
      * anything outside this range will be ignored.
      *
      * @param newLevel
@@ -57,9 +57,20 @@
     }
 
 protected:
+    /**
+     * A reference to the underlying BLE instance that this object is attached to.
+     * The services and characteristics will be registered in this BLE instance.
+     */
     BLE &ble;
 
+    /**
+     * The current battery level represented as an integer from 0% to 100%.
+     */
     uint8_t    batteryLevel;
+    /**
+     * A ReadOnlyGattCharacteristic that allows access to the peer device to the
+     * batteryLevel value through BLE.
+     */
     ReadOnlyGattCharacteristic<uint8_t> batteryLevelCharacteristic;
 };
 
--- a/ble/services/DeviceInformationService.h	Wed Apr 06 19:15:34 2016 +0100
+++ b/ble/services/DeviceInformationService.h	Wed Apr 06 19:15:36 2016 +0100
@@ -28,21 +28,21 @@
 class DeviceInformationService {
 public:
     /**
-     * @brief Device Information Service Constructor: copies device-specific information 
+     * @brief Device Information Service Constructor: copies device-specific information
      * into the BLE stack.
      *
-     * @param[ref] _ble
-     *                BLE object for the underlying controller.
+     * @param[in] _ble
+     *                A reference to a BLE object for the underlying controller.
      * @param[in] manufacturersName
      *                The name of the manufacturer of the device.
      * @param[in] modelNumber
      *                The model number that is assigned by the device vendor.
      * @param[in] serialNumber
-     *                The serial number for a particular instance of the device. 
+     *                The serial number for a particular instance of the device.
      * @param[in] hardwareRevision
      *                The hardware revision for the hardware within the device.
      * @param[in] firmwareRevision
-     *                The device's firmware version. 
+     *                The device's firmware version.
      * @param[in] softwareRevision
      *                The device's software version.
      */
@@ -104,12 +104,34 @@
     }
 
 protected:
+    /**
+     * A reference to the BLE instance object to which the services and
+     * characteristics will be added.
+     */
     BLE                &ble;
+    /**
+     * BLE characterising to allow BLE peers access to the manufacturer's name.
+     */
     GattCharacteristic  manufacturersNameStringCharacteristic;
+    /**
+     * BLE characterising to allow BLE peers access to the model number.
+     */
     GattCharacteristic  modelNumberStringCharacteristic;
+    /**
+     * BLE characterising to allow BLE peers access to the serial number.
+     */
     GattCharacteristic  serialNumberStringCharacteristic;
+    /**
+     * BLE characterising to allow BLE peers access to the hardware revision string.
+     */
     GattCharacteristic  hardwareRevisionStringCharacteristic;
+    /**
+     * BLE characterising to allow BLE peers access to the firmware revision string.
+     */
     GattCharacteristic  firmwareRevisionStringCharacteristic;
+    /**
+     * BLE characterising to allow BLE peers access to the software revision string.
+     */
     GattCharacteristic  softwareRevisionStringCharacteristic;
 };