Nordic stack and drivers for the mbed BLE API. Version to work around build bug.

Dependents:   microbit_rubber_ducky microbit_mouse_BLE microbit_mouse_BLE_daybreak_version microbit_presenter

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