library for BLE_GAP_backpack

Dependencies:   nrf51-sdk

Fork of nRF51822 by Nordic Semiconductor

Committer:
vcoubard
Date:
Mon Jan 11 10:19:18 2016 +0000
Revision:
565:cf03471a4ec4
Parent:
563:9c4b96f7be8d
Child:
566:e425ad9e5d6e
Synchronized with git rev 0bcc2e96
Author: Andres Amaya Garcia
Modify shutdown due to BLE API change

The module is updated to comply with the changes to BLE API regarding correct
shutdown functionality. The following changes are introduced to ble-nrf51822:

* Calls to the old static function shutdown in Gap, GattClient, GattServer and
SecurityManager are removed.
* The cleanup function in Gap, GattClient, GattServer and SecurityManager is
renamed to `reset()` and made public.
* The static references inside nRF5xGap, nRF5xGattClient, nRF5xGattServer and
nRF5xSecurityManager to objects of their own class are moved to nRF5xn.
* The static getInstance accessors in nRF5xGap, nRF5xGattClient,
nRF5xGattServer and nRF5xSecurityManager are removed and their functionality is
moved to the implemented virtual accessors in nRF5xn i.e. getGap(),
getGattClient, etc.
* A static function Instance is added to nRF5xn class to make the transport
object accessible across the module.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vcoubard 561:613dbbdeed27 1 /* mbed Microcontroller Library
vcoubard 561:613dbbdeed27 2 * Copyright (c) 2006-2013 ARM Limited
vcoubard 561:613dbbdeed27 3 *
vcoubard 561:613dbbdeed27 4 * Licensed under the Apache License, Version 2.0 (the "License");
vcoubard 561:613dbbdeed27 5 * you may not use this file except in compliance with the License.
vcoubard 561:613dbbdeed27 6 * You may obtain a copy of the License at
vcoubard 561:613dbbdeed27 7 *
vcoubard 561:613dbbdeed27 8 * http://www.apache.org/licenses/LICENSE-2.0
vcoubard 561:613dbbdeed27 9 *
vcoubard 561:613dbbdeed27 10 * Unless required by applicable law or agreed to in writing, software
vcoubard 561:613dbbdeed27 11 * distributed under the License is distributed on an "AS IS" BASIS,
vcoubard 561:613dbbdeed27 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
vcoubard 561:613dbbdeed27 13 * See the License for the specific language governing permissions and
vcoubard 561:613dbbdeed27 14 * limitations under the License.
vcoubard 561:613dbbdeed27 15 */
vcoubard 561:613dbbdeed27 16
vcoubard 561:613dbbdeed27 17 #ifndef __NRF51822_GATT_SERVER_H__
vcoubard 561:613dbbdeed27 18 #define __NRF51822_GATT_SERVER_H__
vcoubard 561:613dbbdeed27 19
vcoubard 561:613dbbdeed27 20 #include <stddef.h>
vcoubard 561:613dbbdeed27 21
vcoubard 561:613dbbdeed27 22 #include "ble/blecommon.h"
vcoubard 561:613dbbdeed27 23 #include "ble.h" /* nordic ble */
vcoubard 561:613dbbdeed27 24 #include "ble/Gap.h"
vcoubard 561:613dbbdeed27 25 #include "ble/GattServer.h"
vcoubard 561:613dbbdeed27 26
vcoubard 561:613dbbdeed27 27 class nRF5xGattServer : public GattServer
vcoubard 561:613dbbdeed27 28 {
vcoubard 561:613dbbdeed27 29 public:
vcoubard 561:613dbbdeed27 30 /* Functions that must be implemented from GattServer */
vcoubard 561:613dbbdeed27 31 virtual ble_error_t addService(GattService &);
vcoubard 561:613dbbdeed27 32 virtual ble_error_t read(GattAttribute::Handle_t attributeHandle, uint8_t buffer[], uint16_t *lengthP);
vcoubard 561:613dbbdeed27 33 virtual ble_error_t read(Gap::Handle_t connectionHandle, GattAttribute::Handle_t attributeHandle, uint8_t buffer[], uint16_t *lengthP);
vcoubard 561:613dbbdeed27 34 virtual ble_error_t write(GattAttribute::Handle_t, const uint8_t[], uint16_t, bool localOnly = false);
vcoubard 561:613dbbdeed27 35 virtual ble_error_t write(Gap::Handle_t connectionHandle, GattAttribute::Handle_t, const uint8_t[], uint16_t, bool localOnly = false);
vcoubard 561:613dbbdeed27 36 virtual ble_error_t areUpdatesEnabled(const GattCharacteristic &characteristic, bool *enabledP);
vcoubard 561:613dbbdeed27 37 virtual ble_error_t areUpdatesEnabled(Gap::Handle_t connectionHandle, const GattCharacteristic &characteristic, bool *enabledP);
vcoubard 565:cf03471a4ec4 38 virtual ble_error_t reset(void);
vcoubard 561:613dbbdeed27 39
vcoubard 561:613dbbdeed27 40 /* nRF51 Functions */
vcoubard 561:613dbbdeed27 41 void eventCallback(void);
vcoubard 561:613dbbdeed27 42 void hwCallback(ble_evt_t *p_ble_evt);
vcoubard 561:613dbbdeed27 43
vcoubard 565:cf03471a4ec4 44
vcoubard 561:613dbbdeed27 45 private:
vcoubard 561:613dbbdeed27 46 const static unsigned BLE_TOTAL_CHARACTERISTICS = 20;
vcoubard 561:613dbbdeed27 47 const static unsigned BLE_TOTAL_DESCRIPTORS = 8;
vcoubard 561:613dbbdeed27 48
vcoubard 561:613dbbdeed27 49 private:
vcoubard 561:613dbbdeed27 50 /**
vcoubard 561:613dbbdeed27 51 * resolve a value attribute to its owning characteristic.
vcoubard 561:613dbbdeed27 52 * @param valueHandle the value handle to be resolved.
vcoubard 561:613dbbdeed27 53 * @return characteristic index if a resolution is found, else -1.
vcoubard 561:613dbbdeed27 54 */
vcoubard 561:613dbbdeed27 55 int resolveValueHandleToCharIndex(GattAttribute::Handle_t valueHandle) const {
vcoubard 561:613dbbdeed27 56 unsigned charIndex;
vcoubard 561:613dbbdeed27 57 for (charIndex = 0; charIndex < characteristicCount; charIndex++) {
vcoubard 561:613dbbdeed27 58 if (nrfCharacteristicHandles[charIndex].value_handle == valueHandle) {
vcoubard 561:613dbbdeed27 59 return charIndex;
vcoubard 561:613dbbdeed27 60 }
vcoubard 561:613dbbdeed27 61 }
vcoubard 561:613dbbdeed27 62
vcoubard 561:613dbbdeed27 63 return -1;
vcoubard 561:613dbbdeed27 64 }
vcoubard 561:613dbbdeed27 65
vcoubard 561:613dbbdeed27 66 /**
vcoubard 561:613dbbdeed27 67 * resolve a CCCD attribute handle to its owning characteristic.
vcoubard 561:613dbbdeed27 68 * @param cccdHandle the CCCD handle to be resolved.
vcoubard 561:613dbbdeed27 69 * @return characteristic index if a resolution is found, else -1.
vcoubard 561:613dbbdeed27 70 */
vcoubard 561:613dbbdeed27 71 int resolveCCCDHandleToCharIndex(GattAttribute::Handle_t cccdHandle) const {
vcoubard 561:613dbbdeed27 72 unsigned charIndex;
vcoubard 561:613dbbdeed27 73 for (charIndex = 0; charIndex < characteristicCount; charIndex++) {
vcoubard 561:613dbbdeed27 74 if (nrfCharacteristicHandles[charIndex].cccd_handle == cccdHandle) {
vcoubard 561:613dbbdeed27 75 return charIndex;
vcoubard 561:613dbbdeed27 76 }
vcoubard 561:613dbbdeed27 77 }
vcoubard 561:613dbbdeed27 78
vcoubard 561:613dbbdeed27 79 return -1;
vcoubard 561:613dbbdeed27 80 }
vcoubard 561:613dbbdeed27 81
vcoubard 561:613dbbdeed27 82 private:
vcoubard 561:613dbbdeed27 83 GattCharacteristic *p_characteristics[BLE_TOTAL_CHARACTERISTICS];
vcoubard 561:613dbbdeed27 84 ble_gatts_char_handles_t nrfCharacteristicHandles[BLE_TOTAL_CHARACTERISTICS];
vcoubard 561:613dbbdeed27 85 GattAttribute *p_descriptors[BLE_TOTAL_DESCRIPTORS];
vcoubard 561:613dbbdeed27 86 uint8_t descriptorCount;
vcoubard 561:613dbbdeed27 87 uint16_t nrfDescriptorHandles[BLE_TOTAL_DESCRIPTORS];
vcoubard 561:613dbbdeed27 88
vcoubard 565:cf03471a4ec4 89 /*
vcoubard 565:cf03471a4ec4 90 * Allow instantiation from nRF5xn when required.
vcoubard 565:cf03471a4ec4 91 */
vcoubard 565:cf03471a4ec4 92 friend class nRF5xn;
vcoubard 565:cf03471a4ec4 93
vcoubard 561:613dbbdeed27 94 nRF5xGattServer() : GattServer(), p_characteristics(), nrfCharacteristicHandles(), p_descriptors(), descriptorCount(0), nrfDescriptorHandles() {
vcoubard 561:613dbbdeed27 95 /* empty */
vcoubard 561:613dbbdeed27 96 }
vcoubard 561:613dbbdeed27 97
vcoubard 561:613dbbdeed27 98 private:
vcoubard 561:613dbbdeed27 99 nRF5xGattServer(const nRF5xGattServer &);
vcoubard 561:613dbbdeed27 100 const nRF5xGattServer& operator=(const nRF5xGattServer &);
vcoubard 561:613dbbdeed27 101 };
vcoubard 561:613dbbdeed27 102
rgrover1 388:db85a09c27ef 103 #endif // ifndef __NRF51822_GATT_SERVER_H__