1

Fork of nRF51822 by Nordic Semiconductor

Committer:
rgrover1
Date:
Thu Jul 02 09:08:44 2015 +0100
Revision:
362:6fa0d4d555f6
Parent:
361:d2405f5a4853
Child:
370:295f76db798e
Synchronized with git rev 2716309c
Author: Rohit Grover
Release 0.4.0
=============

This is a major release which introduces the GATT Client functionality. It
aligns with release 0.4.0 of BLE_API.

Enhancements
~~~~~~~~~~~~

* Introduce GattClient. This includes functionality for service-discovery,
connections, and attribute-reads and writes. You'll find a demo program for
LEDBlinker on the mbed.org Bluetooth team page to use the new APIs. Some of
the GATT client functionality hasn't been implemented yet, but the APIs have
been added.

* We've added an implementation for the abstract base class for
SecurityManager. All security related APIs have been moved into that.

* There has been a major cleanup of APIs under BLE. APIs have now been
categorized as belonging to Gap, GattServer, GattClient, or SecurityManager.
There are accessors to get references for Gap, GattServer, GattClient, and
SecurityManager. A former call to ble.setAddress(...) is now expected to be
achieved with ble.gap().setAddress(...).

* We've cleaned up our APIs, and this has resulted in dropping some APIs like
BLE::reset().

* We've also dropped GattServer::initializeGattDatabase(). THis was added at
some point to support controllers where a commit point was needed to
indicate when the application had finished constructing the GATT database.
This API would get called internally before Gap::startAdvertising(). We now
expect the underlying port to do the equivalent of initializeGattDatabase()
implicitly upon Gap::startAdvertising().

* We've added a version of Gap::disconnect() which takes a connection handle.
The previous API (which did not take a connection handle) has been
deprecated; it will still work for situations where there's only a single
active connection. We hold on to that API to allow existing code to migrate
to the new API.

Bugfixes
~~~~~~~~

* None.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rohit Grover 22:c6ee8136847e 1 /* mbed Microcontroller Library
Rohit Grover 22:c6ee8136847e 2 * Copyright (c) 2006-2013 ARM Limited
Rohit Grover 22:c6ee8136847e 3 *
Rohit Grover 22:c6ee8136847e 4 * Licensed under the Apache License, Version 2.0 (the "License");
Rohit Grover 22:c6ee8136847e 5 * you may not use this file except in compliance with the License.
Rohit Grover 22:c6ee8136847e 6 * You may obtain a copy of the License at
Rohit Grover 22:c6ee8136847e 7 *
Rohit Grover 22:c6ee8136847e 8 * http://www.apache.org/licenses/LICENSE-2.0
Rohit Grover 22:c6ee8136847e 9 *
Rohit Grover 22:c6ee8136847e 10 * Unless required by applicable law or agreed to in writing, software
Rohit Grover 22:c6ee8136847e 11 * distributed under the License is distributed on an "AS IS" BASIS,
Rohit Grover 22:c6ee8136847e 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Rohit Grover 22:c6ee8136847e 13 * See the License for the specific language governing permissions and
Rohit Grover 22:c6ee8136847e 14 * limitations under the License.
Rohit Grover 22:c6ee8136847e 15 */
Rohit Grover 22:c6ee8136847e 16
Rohit Grover 22:c6ee8136847e 17 #ifndef __NRF51822_GAP_H__
Rohit Grover 22:c6ee8136847e 18 #define __NRF51822_GAP_H__
Rohit Grover 22:c6ee8136847e 19
Rohit Grover 22:c6ee8136847e 20 #include "mbed.h"
rgrover1 362:6fa0d4d555f6 21 #include "ble/blecommon.h"
Rohit Grover 22:c6ee8136847e 22 #include "ble.h"
rgrover1 362:6fa0d4d555f6 23 #include "ble/GapAdvertisingParams.h"
rgrover1 362:6fa0d4d555f6 24 #include "ble/GapAdvertisingData.h"
rgrover1 362:6fa0d4d555f6 25 #include "ble/Gap.h"
rgrover1 362:6fa0d4d555f6 26 #include "ble/GapScanningParams.h"
Rohit Grover 22:c6ee8136847e 27
rgrover1 105:7404a5b1b72f 28 #include "nrf_soc.h"
rgrover1 105:7404a5b1b72f 29 #include "ble_radio_notification.h"
rgrover1 137:aafab7b0a8bd 30 #include "btle_security.h"
rgrover1 105:7404a5b1b72f 31
Rohit Grover 22:c6ee8136847e 32 /**************************************************************************/
Rohit Grover 22:c6ee8136847e 33 /*!
Rohit Grover 22:c6ee8136847e 34 \brief
Rohit Grover 22:c6ee8136847e 35
Rohit Grover 22:c6ee8136847e 36 */
Rohit Grover 22:c6ee8136847e 37 /**************************************************************************/
Rohit Grover 22:c6ee8136847e 38 class nRF51Gap : public Gap
Rohit Grover 22:c6ee8136847e 39 {
Rohit Grover 22:c6ee8136847e 40 public:
rgrover1 181:ce044982b915 41 static nRF51Gap &getInstance();
Rohit Grover 22:c6ee8136847e 42
Rohit Grover 22:c6ee8136847e 43 /* Functions that must be implemented from Gap */
rgrover1 362:6fa0d4d555f6 44 virtual ble_error_t setAddress(AddressType_t type, const Address_t address);
rgrover1 362:6fa0d4d555f6 45 virtual ble_error_t getAddress(AddressType_t *typeP, Address_t address);
Rohit Grover 69:61da91a52bd6 46 virtual ble_error_t setAdvertisingData(const GapAdvertisingData &, const GapAdvertisingData &);
rgrover1 102:bdc690669431 47
rgrover1 173:a0b18206029a 48 virtual uint16_t getMinAdvertisingInterval(void) const {return ADVERTISEMENT_DURATION_UNITS_TO_MS(BLE_GAP_ADV_INTERVAL_MIN);}
rgrover1 173:a0b18206029a 49 virtual uint16_t getMinNonConnectableAdvertisingInterval(void) const {return ADVERTISEMENT_DURATION_UNITS_TO_MS(BLE_GAP_ADV_NONCON_INTERVAL_MIN);}
rgrover1 173:a0b18206029a 50 virtual uint16_t getMaxAdvertisingInterval(void) const {return ADVERTISEMENT_DURATION_UNITS_TO_MS(BLE_GAP_ADV_INTERVAL_MAX);}
rgrover1 102:bdc690669431 51
Rohit Grover 22:c6ee8136847e 52 virtual ble_error_t startAdvertising(const GapAdvertisingParams &);
Rohit Grover 22:c6ee8136847e 53 virtual ble_error_t stopAdvertising(void);
rgrover1 362:6fa0d4d555f6 54 virtual ble_error_t connect(const Address_t, Gap::AddressType_t peerAddrType, const ConnectionParams_t *connectionParams, const GapScanningParams *scanParams);
rgrover1 362:6fa0d4d555f6 55 virtual ble_error_t disconnect(Handle_t connectionHandle, DisconnectionReason_t reason);
Rohit Grover 56:a1071b629aa3 56 virtual ble_error_t disconnect(DisconnectionReason_t reason);
Rohit Grover 56:a1071b629aa3 57
Rohit Grover 56:a1071b629aa3 58 virtual ble_error_t setDeviceName(const uint8_t *deviceName);
Rohit Grover 56:a1071b629aa3 59 virtual ble_error_t getDeviceName(uint8_t *deviceName, unsigned *lengthP);
rgrover1 362:6fa0d4d555f6 60 virtual ble_error_t setAppearance(GapAdvertisingData::Appearance appearance);
rgrover1 362:6fa0d4d555f6 61 virtual ble_error_t getAppearance(GapAdvertisingData::Appearance *appearanceP);
rgrover1 362:6fa0d4d555f6 62
rgrover1 362:6fa0d4d555f6 63 virtual ble_error_t setTxPower(int8_t txPower);
rgrover1 362:6fa0d4d555f6 64 virtual void getPermittedTxPowerValues(const int8_t **valueArrayPP, size_t *countP);
rgrover1 346:14b090482fd2 65
Rohit Grover 22:c6ee8136847e 66 void setConnectionHandle(uint16_t con_handle);
Rohit Grover 22:c6ee8136847e 67 uint16_t getConnectionHandle(void);
Rohit Grover 22:c6ee8136847e 68
Rohit Grover 44:47da5c62e067 69 virtual ble_error_t getPreferredConnectionParams(ConnectionParams_t *params);
Rohit Grover 44:47da5c62e067 70 virtual ble_error_t setPreferredConnectionParams(const ConnectionParams_t *params);
Rohit Grover 44:47da5c62e067 71 virtual ble_error_t updateConnectionParams(Handle_t handle, const ConnectionParams_t *params);
Rohit Grover 44:47da5c62e067 72
rgrover1 362:6fa0d4d555f6 73 virtual void onRadioNotification(RadioNotificationEventCallback_t callback) {
rgrover1 362:6fa0d4d555f6 74 Gap::onRadioNotification(callback);
rgrover1 362:6fa0d4d555f6 75 ble_radio_notification_init(NRF_APP_PRIORITY_HIGH, NRF_RADIO_NOTIFICATION_DISTANCE_800US, radioNotificationCallback);
rgrover1 105:7404a5b1b72f 76 }
rgrover1 105:7404a5b1b72f 77
rgrover1 178:3b34428e80ea 78 virtual ble_error_t startRadioScan(const GapScanningParams &scanningParams) {
rgrover1 178:3b34428e80ea 79 ble_gap_scan_params_t scanParams = {
rgrover1 178:3b34428e80ea 80 .active = scanningParams.getActiveScanning(), /**< If 1, perform active scanning (scan requests). */
rgrover1 178:3b34428e80ea 81 .selective = 0, /**< If 1, ignore unknown devices (non whitelisted). */
rgrover1 178:3b34428e80ea 82 .p_whitelist = NULL, /**< Pointer to whitelist, NULL if none is given. */
rgrover1 178:3b34428e80ea 83 .interval = scanningParams.getInterval(), /**< Scan interval between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */
rgrover1 178:3b34428e80ea 84 .window = scanningParams.getWindow(), /**< Scan window between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */
rgrover1 178:3b34428e80ea 85 .timeout = scanningParams.getTimeout(), /**< Scan timeout between 0x0001 and 0xFFFF in seconds, 0x0000 disables timeout. */
rgrover1 178:3b34428e80ea 86 };
rgrover1 166:fa0e88cac390 87
rgrover1 178:3b34428e80ea 88 if (sd_ble_gap_scan_start(&scanParams) != NRF_SUCCESS) {
rgrover1 178:3b34428e80ea 89 return BLE_ERROR_PARAM_OUT_OF_RANGE;
rgrover1 166:fa0e88cac390 90 }
rgrover1 166:fa0e88cac390 91
rgrover1 166:fa0e88cac390 92 return BLE_ERROR_NONE;
rgrover1 166:fa0e88cac390 93 }
rgrover1 166:fa0e88cac390 94
rgrover1 169:93cc9241d748 95 virtual ble_error_t stopScan(void) {
rgrover1 168:a24112aa18a1 96 if (sd_ble_gap_scan_stop() == NRF_SUCCESS) {
rgrover1 168:a24112aa18a1 97 return BLE_ERROR_NONE;
rgrover1 168:a24112aa18a1 98 }
rgrover1 168:a24112aa18a1 99
rgrover1 168:a24112aa18a1 100 return BLE_STACK_BUSY;
rgrover1 168:a24112aa18a1 101 }
rgrover1 168:a24112aa18a1 102
Rohit Grover 22:c6ee8136847e 103 private:
Rohit Grover 22:c6ee8136847e 104 uint16_t m_connectionHandle;
Rohit Grover 22:c6ee8136847e 105 nRF51Gap() {
Rohit Grover 22:c6ee8136847e 106 m_connectionHandle = BLE_CONN_HANDLE_INVALID;
Rohit Grover 22:c6ee8136847e 107 }
Rohit Grover 22:c6ee8136847e 108
Rohit Grover 22:c6ee8136847e 109 nRF51Gap(nRF51Gap const &);
Rohit Grover 22:c6ee8136847e 110 void operator=(nRF51Gap const &);
Rohit Grover 22:c6ee8136847e 111 };
Rohit Grover 22:c6ee8136847e 112
rgrover1 77:9886b2865631 113 #endif // ifndef __NRF51822_GAP_H__