test code 123

Dependencies:   mbed

Fork of LinkNode-Test by Qi Yao

Committer:
youkee
Date:
Fri Oct 28 13:04:10 2016 +0000
Revision:
1:b0d4fbbdb244
Parent:
0:1ad0e04b1bc5
ghhbfdd

Who changed what in which revision?

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