fdsf

Dependencies:   nrf51-sdk

Fork of nRF51822 by Lancaster University

Committer:
LancasterUniversity
Date:
Wed Apr 06 22:38:43 2016 +0100
Revision:
615:65ea2acfc6a2
Parent:
589:f27ac458e152
Child:
616:a8f9b022d8fd
Synchronized with git rev 60a7c0c0
Author: Rohit Grover
bring in the latest changes for BLE::init() where we allow <object, member> tuples for init callback.

Who changed what in which revision?

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