Attempting to publish a tree

Dependencies:   nrf51-sdk

Dependents:   microbit-dal

Fork of nRF51822 by Lancaster University

Committer:
cefn
Date:
Wed Jun 01 17:41:42 2016 +0000
Revision:
624:3ef324d9f2df
Parent:
616:a8f9b022d8fd
Attempting to publish a tree

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 #ifndef __NRF51822_H__
LancasterUniversity 615:65ea2acfc6a2 18 #define __NRF51822_H__
LancasterUniversity 615:65ea2acfc6a2 19
LancasterUniversity 615:65ea2acfc6a2 20 #include "ble/BLE.h"
LancasterUniversity 615:65ea2acfc6a2 21 #include "ble/blecommon.h"
LancasterUniversity 615:65ea2acfc6a2 22 #include "ble/BLEInstanceBase.h"
LancasterUniversity 615:65ea2acfc6a2 23
LancasterUniversity 615:65ea2acfc6a2 24 #include "nRF5xGap.h"
LancasterUniversity 615:65ea2acfc6a2 25 #include "nRF5xGattServer.h"
LancasterUniversity 615:65ea2acfc6a2 26 #include "nRF5xGattClient.h"
LancasterUniversity 615:65ea2acfc6a2 27 #include "nRF5xSecurityManager.h"
LancasterUniversity 615:65ea2acfc6a2 28
LancasterUniversity 615:65ea2acfc6a2 29 #include "btle.h"
LancasterUniversity 615:65ea2acfc6a2 30
LancasterUniversity 615:65ea2acfc6a2 31 class nRF5xn : public BLEInstanceBase
LancasterUniversity 615:65ea2acfc6a2 32 {
LancasterUniversity 615:65ea2acfc6a2 33 public:
LancasterUniversity 615:65ea2acfc6a2 34 nRF5xn(void);
LancasterUniversity 615:65ea2acfc6a2 35 virtual ~nRF5xn(void);
LancasterUniversity 615:65ea2acfc6a2 36
LancasterUniversity 615:65ea2acfc6a2 37 virtual ble_error_t init(BLE::InstanceID_t instanceID, FunctionPointerWithContext<BLE::InitializationCompleteCallbackContext *> callback);
LancasterUniversity 615:65ea2acfc6a2 38 virtual bool hasInitialized(void) const {
LancasterUniversity 615:65ea2acfc6a2 39 return initialized;
LancasterUniversity 615:65ea2acfc6a2 40 }
LancasterUniversity 615:65ea2acfc6a2 41 virtual ble_error_t shutdown(void);
LancasterUniversity 615:65ea2acfc6a2 42 virtual const char *getVersion(void);
LancasterUniversity 615:65ea2acfc6a2 43
LancasterUniversity 616:a8f9b022d8fd 44 /**
LancasterUniversity 616:a8f9b022d8fd 45 * Accessors to GAP. This function checks whether gapInstance points to an
LancasterUniversity 616:a8f9b022d8fd 46 * object. If if does not, then the gapInstance is updated to
LancasterUniversity 616:a8f9b022d8fd 47 * &_getInstance before returning.
LancasterUniversity 616:a8f9b022d8fd 48 *
LancasterUniversity 616:a8f9b022d8fd 49 * @return A reference to GattServer.
LancasterUniversity 616:a8f9b022d8fd 50 *
LancasterUniversity 616:a8f9b022d8fd 51 * @note Unlike the GattClient, GattServer and SecurityManager, Gap is
LancasterUniversity 616:a8f9b022d8fd 52 * always needed in a BLE application. Therefore it is allocated
LancasterUniversity 616:a8f9b022d8fd 53 * statically.
LancasterUniversity 616:a8f9b022d8fd 54 */
LancasterUniversity 615:65ea2acfc6a2 55 virtual Gap &getGap() {
LancasterUniversity 616:a8f9b022d8fd 56 return gapInstance;
LancasterUniversity 615:65ea2acfc6a2 57 };
LancasterUniversity 616:a8f9b022d8fd 58
LancasterUniversity 616:a8f9b022d8fd 59 /**
LancasterUniversity 616:a8f9b022d8fd 60 * Accessors to GATT Server. This function checks whether a GattServer
LancasterUniversity 616:a8f9b022d8fd 61 * object was previously instantiated. If such object does not exist, then
LancasterUniversity 616:a8f9b022d8fd 62 * it is created before returning.
LancasterUniversity 616:a8f9b022d8fd 63 *
LancasterUniversity 616:a8f9b022d8fd 64 * @return A reference to GattServer.
LancasterUniversity 616:a8f9b022d8fd 65 */
LancasterUniversity 615:65ea2acfc6a2 66 virtual GattServer &getGattServer() {
LancasterUniversity 616:a8f9b022d8fd 67 if (gattServerInstance == NULL) {
LancasterUniversity 616:a8f9b022d8fd 68 gattServerInstance = new nRF5xGattServer();
LancasterUniversity 616:a8f9b022d8fd 69 }
LancasterUniversity 616:a8f9b022d8fd 70 return *gattServerInstance;
LancasterUniversity 615:65ea2acfc6a2 71 };
LancasterUniversity 616:a8f9b022d8fd 72
LancasterUniversity 616:a8f9b022d8fd 73 /**
LancasterUniversity 616:a8f9b022d8fd 74 * Accessors to GATT Client. This function checks whether a GattClient
LancasterUniversity 616:a8f9b022d8fd 75 * object was previously instantiated. If such object does not exist, then
LancasterUniversity 616:a8f9b022d8fd 76 * it is created before returning.
LancasterUniversity 616:a8f9b022d8fd 77 *
LancasterUniversity 616:a8f9b022d8fd 78 * @return A reference to GattClient.
LancasterUniversity 616:a8f9b022d8fd 79 */
LancasterUniversity 616:a8f9b022d8fd 80 virtual nRF5xGattClient &getGattClient() {
LancasterUniversity 616:a8f9b022d8fd 81 if (gattClientInstance == NULL) {
LancasterUniversity 616:a8f9b022d8fd 82 gattClientInstance = new nRF5xGattClient();
LancasterUniversity 616:a8f9b022d8fd 83 }
LancasterUniversity 616:a8f9b022d8fd 84 return *gattClientInstance;
LancasterUniversity 616:a8f9b022d8fd 85 }
LancasterUniversity 616:a8f9b022d8fd 86
LancasterUniversity 616:a8f9b022d8fd 87 /**
LancasterUniversity 616:a8f9b022d8fd 88 * Accessors to Security Manager. This function checks whether a SecurityManager
LancasterUniversity 616:a8f9b022d8fd 89 * object was previously instantiated. If such object does not exist, then
LancasterUniversity 616:a8f9b022d8fd 90 * it is created before returning.
LancasterUniversity 616:a8f9b022d8fd 91 *
LancasterUniversity 616:a8f9b022d8fd 92 * @return A reference to GattServer.
LancasterUniversity 616:a8f9b022d8fd 93 */
LancasterUniversity 616:a8f9b022d8fd 94 virtual nRF5xSecurityManager &getSecurityManager() {
LancasterUniversity 616:a8f9b022d8fd 95 if (securityManagerInstance == NULL) {
LancasterUniversity 616:a8f9b022d8fd 96 securityManagerInstance = new nRF5xSecurityManager();
LancasterUniversity 616:a8f9b022d8fd 97 }
LancasterUniversity 616:a8f9b022d8fd 98 return *securityManagerInstance;
LancasterUniversity 615:65ea2acfc6a2 99 }
LancasterUniversity 616:a8f9b022d8fd 100
LancasterUniversity 616:a8f9b022d8fd 101 /**
LancasterUniversity 616:a8f9b022d8fd 102 * Accessors to GAP. This function checks whether gapInstance points to an
LancasterUniversity 616:a8f9b022d8fd 103 * object. If if does not, then the gapInstance is updated to
LancasterUniversity 616:a8f9b022d8fd 104 * &_getInstance before returning.
LancasterUniversity 616:a8f9b022d8fd 105 *
LancasterUniversity 616:a8f9b022d8fd 106 * @return A const reference to GattServer.
LancasterUniversity 616:a8f9b022d8fd 107 *
LancasterUniversity 616:a8f9b022d8fd 108 * @note Unlike the GattClient, GattServer and SecurityManager, Gap is
LancasterUniversity 616:a8f9b022d8fd 109 * always needed in a BLE application. Therefore it is allocated
LancasterUniversity 616:a8f9b022d8fd 110 * statically.
LancasterUniversity 616:a8f9b022d8fd 111 *
LancasterUniversity 616:a8f9b022d8fd 112 * @note The accessor is able to modify the object's state because the
LancasterUniversity 616:a8f9b022d8fd 113 * internal pointer has been declared mutable.
LancasterUniversity 616:a8f9b022d8fd 114 */
LancasterUniversity 616:a8f9b022d8fd 115 virtual const nRF5xGap &getGap() const {
LancasterUniversity 616:a8f9b022d8fd 116 return gapInstance;
LancasterUniversity 616:a8f9b022d8fd 117 };
LancasterUniversity 616:a8f9b022d8fd 118
LancasterUniversity 616:a8f9b022d8fd 119 /**
LancasterUniversity 616:a8f9b022d8fd 120 * Accessors to GATT Server. This function checks whether a GattServer
LancasterUniversity 616:a8f9b022d8fd 121 * object was previously instantiated. If such object does not exist, then
LancasterUniversity 616:a8f9b022d8fd 122 * it is created before returning.
LancasterUniversity 616:a8f9b022d8fd 123 *
LancasterUniversity 616:a8f9b022d8fd 124 * @return A const reference to GattServer.
LancasterUniversity 616:a8f9b022d8fd 125 *
LancasterUniversity 616:a8f9b022d8fd 126 * @note The accessor is able to modify the object's state because the
LancasterUniversity 616:a8f9b022d8fd 127 * internal pointer has been declared mutable.
LancasterUniversity 616:a8f9b022d8fd 128 */
LancasterUniversity 616:a8f9b022d8fd 129 virtual const nRF5xGattServer &getGattServer() const {
LancasterUniversity 616:a8f9b022d8fd 130 if (gattServerInstance == NULL) {
LancasterUniversity 616:a8f9b022d8fd 131 gattServerInstance = new nRF5xGattServer();
LancasterUniversity 616:a8f9b022d8fd 132 }
LancasterUniversity 616:a8f9b022d8fd 133 return *gattServerInstance;
LancasterUniversity 616:a8f9b022d8fd 134 };
LancasterUniversity 616:a8f9b022d8fd 135
LancasterUniversity 616:a8f9b022d8fd 136 /**
LancasterUniversity 616:a8f9b022d8fd 137 * Accessors to Security Manager. This function checks whether a SecurityManager
LancasterUniversity 616:a8f9b022d8fd 138 * object was previously instantiated. If such object does not exist, then
LancasterUniversity 616:a8f9b022d8fd 139 * it is created before returning.
LancasterUniversity 616:a8f9b022d8fd 140 *
LancasterUniversity 616:a8f9b022d8fd 141 * @return A const reference to GattServer.
LancasterUniversity 616:a8f9b022d8fd 142 *
LancasterUniversity 616:a8f9b022d8fd 143 * @note The accessor is able to modify the object's state because the
LancasterUniversity 616:a8f9b022d8fd 144 * internal pointer has been declared mutable.
LancasterUniversity 616:a8f9b022d8fd 145 */
LancasterUniversity 616:a8f9b022d8fd 146 virtual const nRF5xSecurityManager &getSecurityManager() const {
LancasterUniversity 616:a8f9b022d8fd 147 if (securityManagerInstance == NULL) {
LancasterUniversity 616:a8f9b022d8fd 148 securityManagerInstance = new nRF5xSecurityManager();
LancasterUniversity 616:a8f9b022d8fd 149 }
LancasterUniversity 616:a8f9b022d8fd 150 return *securityManagerInstance;
LancasterUniversity 615:65ea2acfc6a2 151 }
LancasterUniversity 616:a8f9b022d8fd 152
LancasterUniversity 615:65ea2acfc6a2 153 virtual void waitForEvent(void);
LancasterUniversity 615:65ea2acfc6a2 154
LancasterUniversity 616:a8f9b022d8fd 155 public:
LancasterUniversity 616:a8f9b022d8fd 156 static nRF5xn& Instance(BLE::InstanceID_t instanceId);
LancasterUniversity 616:a8f9b022d8fd 157
LancasterUniversity 615:65ea2acfc6a2 158 private:
LancasterUniversity 615:65ea2acfc6a2 159 bool initialized;
LancasterUniversity 615:65ea2acfc6a2 160 BLE::InstanceID_t instanceID;
LancasterUniversity 616:a8f9b022d8fd 161
LancasterUniversity 616:a8f9b022d8fd 162 private:
LancasterUniversity 616:a8f9b022d8fd 163 mutable nRF5xGap gapInstance; /**< Gap instance whose reference is returned from a call to
LancasterUniversity 616:a8f9b022d8fd 164 * getGap(). Unlike the GattClient, GattServer and
LancasterUniversity 616:a8f9b022d8fd 165 * SecurityManager, Gap is always needed in a BLE application. */
LancasterUniversity 616:a8f9b022d8fd 166
LancasterUniversity 616:a8f9b022d8fd 167 private:
LancasterUniversity 616:a8f9b022d8fd 168 mutable nRF5xGattServer *gattServerInstance; /**< Pointer to the GattServer object instance.
LancasterUniversity 616:a8f9b022d8fd 169 * If NULL, then GattServer has not been initialized.
LancasterUniversity 616:a8f9b022d8fd 170 * The pointer has been declared as 'mutable' so that
LancasterUniversity 616:a8f9b022d8fd 171 * it can be assigned inside a 'const' function. */
LancasterUniversity 616:a8f9b022d8fd 172 mutable nRF5xGattClient *gattClientInstance; /**< Pointer to the GattClient object instance.
LancasterUniversity 616:a8f9b022d8fd 173 * If NULL, then GattClient has not been initialized.
LancasterUniversity 616:a8f9b022d8fd 174 * The pointer has been declared as 'mutable' so that
LancasterUniversity 616:a8f9b022d8fd 175 * it can be assigned inside a 'const' function. */
LancasterUniversity 616:a8f9b022d8fd 176 mutable nRF5xSecurityManager *securityManagerInstance; /**< Pointer to the SecurityManager object instance.
LancasterUniversity 616:a8f9b022d8fd 177 * If NULL, then SecurityManager has not been initialized.
LancasterUniversity 616:a8f9b022d8fd 178 * The pointer has been declared as 'mutable' so that
LancasterUniversity 616:a8f9b022d8fd 179 * it can be assigned inside a 'const' function. */
LancasterUniversity 615:65ea2acfc6a2 180 };
LancasterUniversity 615:65ea2acfc6a2 181
rgrover1 388:db85a09c27ef 182 #endif