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:
rgrover1
Date:
Fri Aug 07 15:57:07 2015 +0100
Revision:
400:7527265d3868
Parent:
388:db85a09c27ef
Child:
401:bd0f4eaad9f0
Synchronized with git rev 6cdf4e12
Author: Rohit Grover
fix #29: support getVersion for v8 of the softdevice.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rgrover1 388:db85a09c27ef 1 /* mbed Microcontroller Library
rgrover1 388:db85a09c27ef 2 * Copyright (c) 2006-2013 ARM Limited
rgrover1 388:db85a09c27ef 3 *
rgrover1 388:db85a09c27ef 4 * Licensed under the Apache License, Version 2.0 (the "License");
rgrover1 388:db85a09c27ef 5 * you may not use this file except in compliance with the License.
rgrover1 388:db85a09c27ef 6 * You may obtain a copy of the License at
rgrover1 388:db85a09c27ef 7 *
rgrover1 388:db85a09c27ef 8 * http://www.apache.org/licenses/LICENSE-2.0
rgrover1 388:db85a09c27ef 9 *
rgrover1 388:db85a09c27ef 10 * Unless required by applicable law or agreed to in writing, software
rgrover1 388:db85a09c27ef 11 * distributed under the License is distributed on an "AS IS" BASIS,
rgrover1 388:db85a09c27ef 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rgrover1 388:db85a09c27ef 13 * See the License for the specific language governing permissions and
rgrover1 388:db85a09c27ef 14 * limitations under the License.
rgrover1 388:db85a09c27ef 15 */
rgrover1 388:db85a09c27ef 16
rgrover1 388:db85a09c27ef 17 #include "mbed.h"
rgrover1 388:db85a09c27ef 18 #include "nRF5xn.h"
rgrover1 388:db85a09c27ef 19 #include "nrf_soc.h"
rgrover1 388:db85a09c27ef 20
rgrover1 388:db85a09c27ef 21 #include "btle/btle.h"
rgrover1 388:db85a09c27ef 22 #include "nrf_delay.h"
rgrover1 388:db85a09c27ef 23
rgrover1 388:db85a09c27ef 24 #include "softdevice_handler.h"
rgrover1 388:db85a09c27ef 25
rgrover1 388:db85a09c27ef 26 /**
rgrover1 388:db85a09c27ef 27 * The singleton which represents the nRF51822 transport for the BLE.
rgrover1 388:db85a09c27ef 28 */
rgrover1 388:db85a09c27ef 29 static nRF5xn deviceInstance;
rgrover1 388:db85a09c27ef 30
rgrover1 388:db85a09c27ef 31 /**
rgrover1 388:db85a09c27ef 32 * BLE-API requires an implementation of the following function in order to
rgrover1 388:db85a09c27ef 33 * obtain its transport handle.
rgrover1 388:db85a09c27ef 34 */
rgrover1 388:db85a09c27ef 35 BLEInstanceBase *
rgrover1 388:db85a09c27ef 36 createBLEInstance(void)
rgrover1 388:db85a09c27ef 37 {
rgrover1 388:db85a09c27ef 38 return (&deviceInstance);
rgrover1 388:db85a09c27ef 39 }
rgrover1 388:db85a09c27ef 40
rgrover1 388:db85a09c27ef 41 nRF5xn::nRF5xn(void)
rgrover1 388:db85a09c27ef 42 {
rgrover1 388:db85a09c27ef 43 }
rgrover1 388:db85a09c27ef 44
rgrover1 388:db85a09c27ef 45 nRF5xn::~nRF5xn(void)
rgrover1 388:db85a09c27ef 46 {
rgrover1 388:db85a09c27ef 47 }
rgrover1 388:db85a09c27ef 48
rgrover1 388:db85a09c27ef 49 const char *nRF5xn::getVersion(void)
rgrover1 388:db85a09c27ef 50 {
rgrover1 388:db85a09c27ef 51 static char versionString[32];
rgrover1 388:db85a09c27ef 52 static bool versionFetched = false;
rgrover1 388:db85a09c27ef 53
rgrover1 388:db85a09c27ef 54 if (!versionFetched) {
rgrover1 388:db85a09c27ef 55 ble_version_t version;
rgrover1 388:db85a09c27ef 56 if ((sd_ble_version_get(&version) == NRF_SUCCESS) && (version.company_id == 0x0059)) {
rgrover1 388:db85a09c27ef 57 switch (version.version_number) {
rgrover1 388:db85a09c27ef 58 case 0x07:
rgrover1 400:7527265d3868 59 case 0x08:
rgrover1 388:db85a09c27ef 60 snprintf(versionString, sizeof(versionString), "Nordic BLE4.1 fw:%04x", version.subversion_number);
rgrover1 388:db85a09c27ef 61 break;
rgrover1 388:db85a09c27ef 62 default:
rgrover1 388:db85a09c27ef 63 snprintf(versionString, sizeof(versionString), "Nordic (spec unknown) fw:%04x", version.subversion_number);
rgrover1 388:db85a09c27ef 64 break;
rgrover1 388:db85a09c27ef 65 }
rgrover1 388:db85a09c27ef 66 versionFetched = true;
rgrover1 388:db85a09c27ef 67 } else {
rgrover1 388:db85a09c27ef 68 strncpy(versionString, "unknown", sizeof(versionString));
rgrover1 388:db85a09c27ef 69 }
rgrover1 388:db85a09c27ef 70 }
rgrover1 388:db85a09c27ef 71
rgrover1 388:db85a09c27ef 72 return versionString;
rgrover1 388:db85a09c27ef 73 }
rgrover1 388:db85a09c27ef 74
rgrover1 388:db85a09c27ef 75 ble_error_t nRF5xn::init(void)
rgrover1 388:db85a09c27ef 76 {
rgrover1 388:db85a09c27ef 77 /* ToDo: Clear memory contents, reset the SD, etc. */
rgrover1 388:db85a09c27ef 78 btle_init();
rgrover1 388:db85a09c27ef 79
rgrover1 388:db85a09c27ef 80 return BLE_ERROR_NONE;
rgrover1 388:db85a09c27ef 81 }
rgrover1 388:db85a09c27ef 82
rgrover1 388:db85a09c27ef 83 ble_error_t nRF5xn::shutdown(void)
rgrover1 388:db85a09c27ef 84 {
rgrover1 388:db85a09c27ef 85 return (softdevice_handler_sd_disable() == NRF_SUCCESS) ? BLE_ERROR_NONE : BLE_STACK_BUSY;
rgrover1 388:db85a09c27ef 86 }
rgrover1 388:db85a09c27ef 87
rgrover1 388:db85a09c27ef 88 void
rgrover1 388:db85a09c27ef 89 nRF5xn::waitForEvent(void)
rgrover1 388:db85a09c27ef 90 {
rgrover1 388:db85a09c27ef 91 sd_app_evt_wait();
rgrover1 388:db85a09c27ef 92 }