library for BLE_GAP_backpack

Dependencies:   nrf51-sdk

Fork of nRF51822 by Nordic Semiconductor

Committer:
vcoubard
Date:
Mon Apr 11 15:07:15 2016 +0100
Revision:
631:e613866d34ba
Parent:
575:7023a8204a1b
Synchronized with git rev 4e6cc020
Author: Vincent Coubard
Replace inclusion of nordic header ble.h into nrf_ble.h

This change has been introduced in the SDK to mitigate
compilation issues with mbed-classic.

Who changed what in which revision?

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