No changes

Fork of nRF51822 by Nordic Semiconductor

Committer:
vcoubard
Date:
Mon Jan 11 10:19:16 2016 +0000
Revision:
563:9c4b96f7be8d
Parent:
561:613dbbdeed27
Child:
565:cf03471a4ec4
Synchronized with git rev 7e784e0e
Author: Vincent Coubard
Merge branch 'develop' of https://github.com/ARMmbed/ble-nrf51822 into characteristicDescriptorDiscovery

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 static nRF5xGattServer &getInstance();
vcoubard 561:613dbbdeed27 31
vcoubard 561:613dbbdeed27 32 /* Functions that must be implemented from GattServer */
vcoubard 561:613dbbdeed27 33 virtual ble_error_t addService(GattService &);
vcoubard 561:613dbbdeed27 34 virtual ble_error_t read(GattAttribute::Handle_t attributeHandle, uint8_t buffer[], uint16_t *lengthP);
vcoubard 561:613dbbdeed27 35 virtual ble_error_t read(Gap::Handle_t connectionHandle, GattAttribute::Handle_t attributeHandle, uint8_t buffer[], uint16_t *lengthP);
vcoubard 561:613dbbdeed27 36 virtual ble_error_t write(GattAttribute::Handle_t, const uint8_t[], uint16_t, bool localOnly = false);
vcoubard 561:613dbbdeed27 37 virtual ble_error_t write(Gap::Handle_t connectionHandle, GattAttribute::Handle_t, const uint8_t[], uint16_t, bool localOnly = false);
vcoubard 561:613dbbdeed27 38 virtual ble_error_t areUpdatesEnabled(const GattCharacteristic &characteristic, bool *enabledP);
vcoubard 561:613dbbdeed27 39 virtual ble_error_t areUpdatesEnabled(Gap::Handle_t connectionHandle, const GattCharacteristic &characteristic, bool *enabledP);
vcoubard 561:613dbbdeed27 40
vcoubard 561:613dbbdeed27 41 /* nRF51 Functions */
vcoubard 561:613dbbdeed27 42 void eventCallback(void);
vcoubard 561:613dbbdeed27 43 void hwCallback(ble_evt_t *p_ble_evt);
vcoubard 561:613dbbdeed27 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 561:613dbbdeed27 89 nRF5xGattServer() : GattServer(), p_characteristics(), nrfCharacteristicHandles(), p_descriptors(), descriptorCount(0), nrfDescriptorHandles() {
vcoubard 561:613dbbdeed27 90 /* empty */
vcoubard 561:613dbbdeed27 91 }
vcoubard 561:613dbbdeed27 92
vcoubard 561:613dbbdeed27 93 private:
vcoubard 561:613dbbdeed27 94 nRF5xGattServer(const nRF5xGattServer &);
vcoubard 561:613dbbdeed27 95 const nRF5xGattServer& operator=(const nRF5xGattServer &);
vcoubard 561:613dbbdeed27 96 };
vcoubard 561:613dbbdeed27 97
rgrover1 388:db85a09c27ef 98 #endif // ifndef __NRF51822_GATT_SERVER_H__