nordic

Fork of nRF51822 by Nordic Semiconductor

Committer:
rgrover1
Date:
Tue Aug 11 15:14:23 2015 +0100
Revision:
417:5b7d26035f2b
Parent:
416:92bda1851be2
Child:
418:d79a89cccddd
Synchronized with git rev 3eabc779
Author: Jean-Philippe Brucker
Disable GattClient features when using S110 SoftDevice

S110 compatibility is already present, but this patch adds proper handling
of observer/central related features:
* Gap::startScan will return BLE_ERRROR_NOT_IMPLEMENTED (instead of
PARAM_OUT_OF_RANGE)
* nRF5xGattClient uses the default GattClient implementation when S110 is
in use. All if its methods return NOT_IMPLEMENTED.

Example: for an application that acts as both a central and a peripheral,
using S110 will make the ble.gap().startScan() call return
BLE_ERROR_NOT_IMPLEMENTED, and advertisement features will continue
running normally.
In addition, with GCC, this patch will free 344 bytes of RAM and 2504
bytes of flash.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rgrover1 388:b13ab9a7ddb9 1 /* mbed Microcontroller Library
rgrover1 388:b13ab9a7ddb9 2 * Copyright (c) 2006-2013 ARM Limited
rgrover1 388:b13ab9a7ddb9 3 *
rgrover1 388:b13ab9a7ddb9 4 * Licensed under the Apache License, Version 2.0 (the "License");
rgrover1 388:b13ab9a7ddb9 5 * you may not use this file except in compliance with the License.
rgrover1 388:b13ab9a7ddb9 6 * You may obtain a copy of the License at
rgrover1 388:b13ab9a7ddb9 7 *
rgrover1 388:b13ab9a7ddb9 8 * http://www.apache.org/licenses/LICENSE-2.0
rgrover1 388:b13ab9a7ddb9 9 *
rgrover1 388:b13ab9a7ddb9 10 * Unless required by applicable law or agreed to in writing, software
rgrover1 388:b13ab9a7ddb9 11 * distributed under the License is distributed on an "AS IS" BASIS,
rgrover1 388:b13ab9a7ddb9 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rgrover1 388:b13ab9a7ddb9 13 * See the License for the specific language governing permissions and
rgrover1 388:b13ab9a7ddb9 14 * limitations under the License.
rgrover1 388:b13ab9a7ddb9 15 */
rgrover1 388:b13ab9a7ddb9 16
rgrover1 394:0f7c5048efb3 17 #include "nRF5xServiceDiscovery.h"
rgrover1 394:0f7c5048efb3 18 #include "nRF5xGattClient.h"
rgrover1 388:b13ab9a7ddb9 19
rgrover1 417:5b7d26035f2b 20 #if !defined(MCU_NORDIC_16K_S110) && !defined(MCU_NORDIC_32K_S110)
rgrover1 388:b13ab9a7ddb9 21 void bleGattcEventHandler(const ble_evt_t *p_ble_evt)
rgrover1 388:b13ab9a7ddb9 22 {
rgrover1 394:0f7c5048efb3 23 nRF5xServiceDiscovery &sdSingleton = nRF5xGattClient::getInstance().discovery;
rgrover1 388:b13ab9a7ddb9 24
rgrover1 388:b13ab9a7ddb9 25 switch (p_ble_evt->header.evt_id) {
rgrover1 388:b13ab9a7ddb9 26 case BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP:
rgrover1 388:b13ab9a7ddb9 27 switch (p_ble_evt->evt.gattc_evt.gatt_status) {
rgrover1 388:b13ab9a7ddb9 28 case BLE_GATT_STATUS_SUCCESS:
rgrover1 388:b13ab9a7ddb9 29 sdSingleton.setupDiscoveredServices(&p_ble_evt->evt.gattc_evt.params.prim_srvc_disc_rsp);
rgrover1 388:b13ab9a7ddb9 30 break;
rgrover1 388:b13ab9a7ddb9 31
rgrover1 388:b13ab9a7ddb9 32 case BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND:
rgrover1 388:b13ab9a7ddb9 33 default:
rgrover1 388:b13ab9a7ddb9 34 sdSingleton.terminate();
rgrover1 388:b13ab9a7ddb9 35 break;
rgrover1 388:b13ab9a7ddb9 36 }
rgrover1 388:b13ab9a7ddb9 37 break;
rgrover1 388:b13ab9a7ddb9 38
rgrover1 388:b13ab9a7ddb9 39 case BLE_GATTC_EVT_CHAR_DISC_RSP:
rgrover1 388:b13ab9a7ddb9 40 switch (p_ble_evt->evt.gattc_evt.gatt_status) {
rgrover1 388:b13ab9a7ddb9 41 case BLE_GATT_STATUS_SUCCESS:
rgrover1 388:b13ab9a7ddb9 42 sdSingleton.setupDiscoveredCharacteristics(&p_ble_evt->evt.gattc_evt.params.char_disc_rsp);
rgrover1 388:b13ab9a7ddb9 43 break;
rgrover1 388:b13ab9a7ddb9 44
rgrover1 388:b13ab9a7ddb9 45 case BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND:
rgrover1 388:b13ab9a7ddb9 46 default:
rgrover1 388:b13ab9a7ddb9 47 sdSingleton.terminateCharacteristicDiscovery();
rgrover1 388:b13ab9a7ddb9 48 break;
rgrover1 388:b13ab9a7ddb9 49 }
rgrover1 388:b13ab9a7ddb9 50 break;
rgrover1 388:b13ab9a7ddb9 51
rgrover1 388:b13ab9a7ddb9 52 case BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP:
rgrover1 388:b13ab9a7ddb9 53 if (sdSingleton.isActive()) {
rgrover1 388:b13ab9a7ddb9 54 sdSingleton.processDiscoverUUIDResponse(&p_ble_evt->evt.gattc_evt.params.char_val_by_uuid_read_rsp);
rgrover1 388:b13ab9a7ddb9 55 }
rgrover1 388:b13ab9a7ddb9 56 break;
rgrover1 388:b13ab9a7ddb9 57
rgrover1 388:b13ab9a7ddb9 58 case BLE_GATTC_EVT_READ_RSP: {
rgrover1 388:b13ab9a7ddb9 59 GattReadCallbackParams response = {
rgrover1 417:5b7d26035f2b 60 .handle = p_ble_evt->evt.gattc_evt.params.read_rsp.handle,
rgrover1 417:5b7d26035f2b 61 .offset = p_ble_evt->evt.gattc_evt.params.read_rsp.offset,
rgrover1 417:5b7d26035f2b 62 .len = p_ble_evt->evt.gattc_evt.params.read_rsp.len,
rgrover1 417:5b7d26035f2b 63 .data = p_ble_evt->evt.gattc_evt.params.read_rsp.data,
rgrover1 388:b13ab9a7ddb9 64 };
rgrover1 394:0f7c5048efb3 65 nRF5xGattClient::getInstance().processReadResponse(&response);
rgrover1 388:b13ab9a7ddb9 66 }
rgrover1 388:b13ab9a7ddb9 67 break;
rgrover1 388:b13ab9a7ddb9 68
rgrover1 388:b13ab9a7ddb9 69 case BLE_GATTC_EVT_WRITE_RSP: {
rgrover1 388:b13ab9a7ddb9 70 GattWriteCallbackParams response = {
rgrover1 417:5b7d26035f2b 71 .handle = p_ble_evt->evt.gattc_evt.params.write_rsp.handle,
rgrover1 417:5b7d26035f2b 72 .writeOp = (GattWriteCallbackParams::WriteOp_t)(p_ble_evt->evt.gattc_evt.params.write_rsp.write_op),
rgrover1 417:5b7d26035f2b 73 .offset = p_ble_evt->evt.gattc_evt.params.write_rsp.offset,
rgrover1 417:5b7d26035f2b 74 .len = p_ble_evt->evt.gattc_evt.params.write_rsp.len,
rgrover1 417:5b7d26035f2b 75 .data = p_ble_evt->evt.gattc_evt.params.write_rsp.data,
rgrover1 388:b13ab9a7ddb9 76 };
rgrover1 394:0f7c5048efb3 77 nRF5xGattClient::getInstance().processWriteResponse(&response);
rgrover1 388:b13ab9a7ddb9 78 }
rgrover1 388:b13ab9a7ddb9 79 break;
rgrover1 388:b13ab9a7ddb9 80
rgrover1 388:b13ab9a7ddb9 81 case BLE_GATTC_EVT_HVX: {
rgrover1 388:b13ab9a7ddb9 82 GattHVXCallbackParams params;
rgrover1 417:5b7d26035f2b 83 params.handle = p_ble_evt->evt.gattc_evt.params.hvx.handle;
rgrover1 417:5b7d26035f2b 84 params.type = static_cast<HVXType_t>(p_ble_evt->evt.gattc_evt.params.hvx.type);
rgrover1 417:5b7d26035f2b 85 params.len = p_ble_evt->evt.gattc_evt.params.hvx.len;
rgrover1 417:5b7d26035f2b 86 params.data = p_ble_evt->evt.gattc_evt.params.hvx.data;
rgrover1 388:b13ab9a7ddb9 87
rgrover1 394:0f7c5048efb3 88 nRF5xGattClient::getInstance().processHVXEvent(&params);
rgrover1 388:b13ab9a7ddb9 89 }
rgrover1 388:b13ab9a7ddb9 90 break;
rgrover1 388:b13ab9a7ddb9 91 }
rgrover1 388:b13ab9a7ddb9 92
rgrover1 388:b13ab9a7ddb9 93 sdSingleton.progressCharacteristicDiscovery();
rgrover1 388:b13ab9a7ddb9 94 sdSingleton.progressServiceDiscovery();
rgrover1 388:b13ab9a7ddb9 95 }
rgrover1 417:5b7d26035f2b 96 #endif