1

Fork of nRF51822 by Nordic Semiconductor

Committer:
rgrover1
Date:
Thu Jul 02 09:08:44 2015 +0100
Revision:
361:d2405f5a4853
Parent:
357:68c0de4426f1
Child:
362:6fa0d4d555f6
Synchronized with git rev 9f72c4ba
Author: Rohit Grover
Release 0.3.7
=============

This is a minor set of enhancements mostly around reduce our global static
memory footprint.

Enhancements
~~~~~~~~~~~~

* Reduce the maximum number of CHARACTERISTICS and DESCRIPTORS that can be
handled. This has memory implications for static global memory. It should
be possible to re-architect our solution for add_characteristic() to not
require these limits; hopefully we'll get there soon.

* Move nRF51GattServer::getInstance() into a .cpp file; same for nRF51Gap::getInstance().

* Reduce max bonds to managed by device-manager to 4; this has memory implications for static global memory.

* Reduce pStorage command queue size to 2; this has memory implications for static global memory.

* Replace uses of deprecated Gap::addr_type_t with Gap::AddressType_t.

* Some UUID-related types have moved into UUID class. Minor changes were needed to work around build errors.

Bugfixes
~~~~~~~~

* None.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rohit Grover 22:c6ee8136847e 1 /* mbed Microcontroller Library
Rohit Grover 22:c6ee8136847e 2 * Copyright (c) 2006-2013 ARM Limited
Rohit Grover 22:c6ee8136847e 3 *
Rohit Grover 22:c6ee8136847e 4 * Licensed under the Apache License, Version 2.0 (the "License");
Rohit Grover 22:c6ee8136847e 5 * you may not use this file except in compliance with the License.
Rohit Grover 22:c6ee8136847e 6 * You may obtain a copy of the License at
Rohit Grover 22:c6ee8136847e 7 *
Rohit Grover 22:c6ee8136847e 8 * http://www.apache.org/licenses/LICENSE-2.0
Rohit Grover 22:c6ee8136847e 9 *
Rohit Grover 22:c6ee8136847e 10 * Unless required by applicable law or agreed to in writing, software
Rohit Grover 22:c6ee8136847e 11 * distributed under the License is distributed on an "AS IS" BASIS,
Rohit Grover 22:c6ee8136847e 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Rohit Grover 22:c6ee8136847e 13 * See the License for the specific language governing permissions and
Rohit Grover 22:c6ee8136847e 14 * limitations under the License.
Rohit Grover 22:c6ee8136847e 15 */
Rohit Grover 22:c6ee8136847e 16
Rohit Grover 22:c6ee8136847e 17 #include "mbed.h"
Rohit Grover 22:c6ee8136847e 18 #include "nRF51822n.h"
Rohit Grover 23:cdab28442479 19 #include "nrf_soc.h"
Rohit Grover 22:c6ee8136847e 20
Rohit Grover 22:c6ee8136847e 21 #include "btle/btle.h"
Rohit Grover 56:a1071b629aa3 22 #include "nrf_delay.h"
Rohit Grover 22:c6ee8136847e 23
rgrover1 80:cdcc094ab166 24 #include "softdevice_handler.h"
rgrover1 80:cdcc094ab166 25
Rohit Grover 22:c6ee8136847e 26 /**
rgrover1 361:d2405f5a4853 27 * The singleton which represents the nRF51822 transport for the BLEDevice.
Rohit Grover 22:c6ee8136847e 28 */
Rohit Grover 25:a1c356620131 29 static nRF51822n deviceInstance;
Rohit Grover 22:c6ee8136847e 30
Rohit Grover 22:c6ee8136847e 31 /**
Rohit Grover 22:c6ee8136847e 32 * BLE-API requires an implementation of the following function in order to
Rohit Grover 22:c6ee8136847e 33 * obtain its transport handle.
Rohit Grover 22:c6ee8136847e 34 */
rgrover1 361:d2405f5a4853 35 BLEDeviceInstanceBase *
rgrover1 361:d2405f5a4853 36 createBLEDeviceInstance(void)
Rohit Grover 22:c6ee8136847e 37 {
Rohit Grover 25:a1c356620131 38 return (&deviceInstance);
Rohit Grover 22:c6ee8136847e 39 }
Rohit Grover 22:c6ee8136847e 40
Rohit Grover 22:c6ee8136847e 41 nRF51822n::nRF51822n(void)
Rohit Grover 22:c6ee8136847e 42 {
Rohit Grover 22:c6ee8136847e 43 }
Rohit Grover 22:c6ee8136847e 44
Rohit Grover 22:c6ee8136847e 45 nRF51822n::~nRF51822n(void)
Rohit Grover 22:c6ee8136847e 46 {
Rohit Grover 22:c6ee8136847e 47 }
Rohit Grover 22:c6ee8136847e 48
Rohit Grover 52:120bd37b9d0d 49 const char *nRF51822n::getVersion(void)
Rohit Grover 52:120bd37b9d0d 50 {
rgrover1 113:2fb5fde31edc 51 static char versionString[32];
Rohit Grover 52:120bd37b9d0d 52 static bool versionFetched = false;
Rohit Grover 52:120bd37b9d0d 53
Rohit Grover 52:120bd37b9d0d 54 if (!versionFetched) {
Rohit Grover 52:120bd37b9d0d 55 ble_version_t version;
rgrover1 113:2fb5fde31edc 56 if ((sd_ble_version_get(&version) == NRF_SUCCESS) && (version.company_id == 0x0059)) {
rgrover1 113:2fb5fde31edc 57 switch (version.version_number) {
rgrover1 113:2fb5fde31edc 58 case 0x07:
rgrover1 113:2fb5fde31edc 59 snprintf(versionString, sizeof(versionString), "Nordic BLE4.1 fw:%04x", version.subversion_number);
rgrover1 113:2fb5fde31edc 60 break;
rgrover1 113:2fb5fde31edc 61 default:
rgrover1 113:2fb5fde31edc 62 snprintf(versionString, sizeof(versionString), "Nordic (spec unknown) fw:%04x", version.subversion_number);
rgrover1 113:2fb5fde31edc 63 break;
rgrover1 113:2fb5fde31edc 64 }
Rohit Grover 52:120bd37b9d0d 65 versionFetched = true;
Rohit Grover 52:120bd37b9d0d 66 } else {
Rohit Grover 52:120bd37b9d0d 67 strncpy(versionString, "unknown", sizeof(versionString));
Rohit Grover 52:120bd37b9d0d 68 }
Rohit Grover 52:120bd37b9d0d 69 }
Rohit Grover 52:120bd37b9d0d 70
Rohit Grover 52:120bd37b9d0d 71 return versionString;
Rohit Grover 52:120bd37b9d0d 72 }
Rohit Grover 52:120bd37b9d0d 73
rgrover1 361:d2405f5a4853 74 /* (Valid values are -40, -20, -16, -12, -8, -4, 0, 4) */
rgrover1 361:d2405f5a4853 75 ble_error_t nRF51822n::setTxPower(int8_t txPower)
rgrover1 361:d2405f5a4853 76 {
rgrover1 361:d2405f5a4853 77 unsigned rc;
rgrover1 361:d2405f5a4853 78 if ((rc = sd_ble_gap_tx_power_set(txPower)) != NRF_SUCCESS) {
rgrover1 361:d2405f5a4853 79 switch (rc) {
rgrover1 361:d2405f5a4853 80 case NRF_ERROR_BUSY:
rgrover1 361:d2405f5a4853 81 return BLE_STACK_BUSY;
rgrover1 361:d2405f5a4853 82 case NRF_ERROR_INVALID_PARAM:
rgrover1 361:d2405f5a4853 83 default:
rgrover1 361:d2405f5a4853 84 return BLE_ERROR_PARAM_OUT_OF_RANGE;
rgrover1 361:d2405f5a4853 85 }
rgrover1 361:d2405f5a4853 86 }
rgrover1 361:d2405f5a4853 87
rgrover1 361:d2405f5a4853 88 return BLE_ERROR_NONE;
rgrover1 361:d2405f5a4853 89 }
rgrover1 361:d2405f5a4853 90
rgrover1 361:d2405f5a4853 91 void nRF51822n::getPermittedTxPowerValues(const int8_t **valueArrayPP, size_t *countP)
rgrover1 361:d2405f5a4853 92 {
rgrover1 361:d2405f5a4853 93 static const int8_t permittedTxValues[] = {
rgrover1 361:d2405f5a4853 94 -40, -30, -20, -16, -12, -8, -4, 0, 4
rgrover1 361:d2405f5a4853 95 };
rgrover1 361:d2405f5a4853 96
rgrover1 361:d2405f5a4853 97 *valueArrayPP = permittedTxValues;
rgrover1 361:d2405f5a4853 98 *countP = sizeof(permittedTxValues) / sizeof(int8_t);
rgrover1 361:d2405f5a4853 99 }
rgrover1 361:d2405f5a4853 100
Rohit Grover 22:c6ee8136847e 101 ble_error_t nRF51822n::init(void)
Rohit Grover 22:c6ee8136847e 102 {
Rohit Grover 22:c6ee8136847e 103 /* ToDo: Clear memory contents, reset the SD, etc. */
Rohit Grover 22:c6ee8136847e 104 btle_init();
Rohit Grover 22:c6ee8136847e 105
rgrover1 361:d2405f5a4853 106 reset();
rgrover1 361:d2405f5a4853 107
Rohit Grover 22:c6ee8136847e 108 return BLE_ERROR_NONE;
Rohit Grover 22:c6ee8136847e 109 }
Rohit Grover 22:c6ee8136847e 110
rgrover1 80:cdcc094ab166 111 ble_error_t nRF51822n::shutdown(void)
rgrover1 80:cdcc094ab166 112 {
rgrover1 80:cdcc094ab166 113 return (softdevice_handler_sd_disable() == NRF_SUCCESS) ? BLE_ERROR_NONE : BLE_STACK_BUSY;
rgrover1 80:cdcc094ab166 114 }
rgrover1 80:cdcc094ab166 115
rgrover1 361:d2405f5a4853 116 ble_error_t nRF51822n::reset(void)
rgrover1 361:d2405f5a4853 117 {
rgrover1 361:d2405f5a4853 118 nrf_delay_us(500000);
rgrover1 361:d2405f5a4853 119
rgrover1 361:d2405f5a4853 120 /* Wait for the radio to come back up */
rgrover1 361:d2405f5a4853 121 nrf_delay_us(1000000);
rgrover1 361:d2405f5a4853 122
rgrover1 361:d2405f5a4853 123 return BLE_ERROR_NONE;
rgrover1 361:d2405f5a4853 124 }
rgrover1 361:d2405f5a4853 125
Rohit Grover 23:cdab28442479 126 void
Rohit Grover 23:cdab28442479 127 nRF51822n::waitForEvent(void)
Rohit Grover 23:cdab28442479 128 {
Rohit Grover 23:cdab28442479 129 sd_app_evt_wait();
rgrover1 79:540d11f2764f 130 }