fka mod
Fork of BLE_API by
ble/BLE.h@1201:9b71aac42d14, 2016-09-14 (annotated)
- Committer:
- Vincent Coubard
- Date:
- Wed Sep 14 14:17:52 2016 +0100
- Branch:
- 2f55eed1fdde06fdabfb66d41ce6cd14e280978f
- Revision:
- 1201:9b71aac42d14
- Parent:
- 1183:1589830dbdb7
- Child:
- 1202:d5426bb4b03f
Sync with 2f55eed1fdde06fdabfb66d41ce6cd14e280978f
2016-06-06 09:36:57+01:00: Vincent Coubard
Add an interface which allows user code to customise the way BLE events
are processed.
The mechanism is quite simple:
* user code can process all events pending in the internal BLE stack by
calling the function BLE::processEvent.
* user code can be notified when an event become available and the event
stack has to be processed. The notification is issued by the port of
mbed BLE.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Vincent Coubard |
1201:9b71aac42d14 | 1 | /* mbed Microcontroller Library |
Vincent Coubard |
1201:9b71aac42d14 | 2 | * Copyright (c) 2006-2013 ARM Limited |
Vincent Coubard |
1201:9b71aac42d14 | 3 | * |
Vincent Coubard |
1201:9b71aac42d14 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
Vincent Coubard |
1201:9b71aac42d14 | 5 | * you may not use this file except in compliance with the License. |
Vincent Coubard |
1201:9b71aac42d14 | 6 | * You may obtain a copy of the License at |
Vincent Coubard |
1201:9b71aac42d14 | 7 | * |
Vincent Coubard |
1201:9b71aac42d14 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
Vincent Coubard |
1201:9b71aac42d14 | 9 | * |
Vincent Coubard |
1201:9b71aac42d14 | 10 | * Unless required by applicable law or agreed to in writing, software |
Vincent Coubard |
1201:9b71aac42d14 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
Vincent Coubard |
1201:9b71aac42d14 | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
Vincent Coubard |
1201:9b71aac42d14 | 13 | * See the License for the specific language governing permissions and |
Vincent Coubard |
1201:9b71aac42d14 | 14 | * limitations under the License. |
Vincent Coubard |
1201:9b71aac42d14 | 15 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 16 | |
Vincent Coubard |
1201:9b71aac42d14 | 17 | #ifndef __BLE_H__ |
Vincent Coubard |
1201:9b71aac42d14 | 18 | #define __BLE_H__ |
Vincent Coubard |
1201:9b71aac42d14 | 19 | |
Vincent Coubard |
1201:9b71aac42d14 | 20 | #include "blecommon.h" |
Vincent Coubard |
1201:9b71aac42d14 | 21 | #include "Gap.h" |
Vincent Coubard |
1201:9b71aac42d14 | 22 | #include "GattServer.h" |
Vincent Coubard |
1201:9b71aac42d14 | 23 | #include "GattClient.h" |
Vincent Coubard |
1201:9b71aac42d14 | 24 | |
Vincent Coubard |
1201:9b71aac42d14 | 25 | #include "ble/FunctionPointerWithContext.h" |
Vincent Coubard |
1201:9b71aac42d14 | 26 | |
Vincent Coubard |
1201:9b71aac42d14 | 27 | #ifdef YOTTA_CFG_MBED_OS |
Vincent Coubard |
1201:9b71aac42d14 | 28 | #include "mbed-drivers/mbed_error.h" |
Vincent Coubard |
1201:9b71aac42d14 | 29 | #else |
Vincent Coubard |
1201:9b71aac42d14 | 30 | #include "mbed_error.h" |
Vincent Coubard |
1201:9b71aac42d14 | 31 | #endif |
Vincent Coubard |
1201:9b71aac42d14 | 32 | |
Vincent Coubard |
1201:9b71aac42d14 | 33 | /* Forward declaration for the implementation class */ |
Vincent Coubard |
1201:9b71aac42d14 | 34 | class BLEInstanceBase; |
Vincent Coubard |
1201:9b71aac42d14 | 35 | |
Vincent Coubard |
1201:9b71aac42d14 | 36 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 37 | * The base class used to abstract away BLE-capable radio transceivers or SOCs, |
Vincent Coubard |
1201:9b71aac42d14 | 38 | * so that the BLE API can work with any radio transparently. |
Vincent Coubard |
1201:9b71aac42d14 | 39 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 40 | class BLE |
Vincent Coubard |
1201:9b71aac42d14 | 41 | { |
Vincent Coubard |
1201:9b71aac42d14 | 42 | public: |
Vincent Coubard |
1201:9b71aac42d14 | 43 | typedef unsigned InstanceID_t; /**< The type returned by BLE::getInstanceID(). */ |
Vincent Coubard |
1201:9b71aac42d14 | 44 | |
Vincent Coubard |
1201:9b71aac42d14 | 45 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 46 | * Parameters provided to the callback registered by onEventsToProcess |
Vincent Coubard |
1201:9b71aac42d14 | 47 | * when there is events to process. |
Vincent Coubard |
1201:9b71aac42d14 | 48 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 49 | struct OnEventsToProcessCallbackContext { |
Vincent Coubard |
1201:9b71aac42d14 | 50 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 51 | * The ble instance which have events to process. |
Vincent Coubard |
1201:9b71aac42d14 | 52 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 53 | BLE& ble; |
Vincent Coubard |
1201:9b71aac42d14 | 54 | }; |
Vincent Coubard |
1201:9b71aac42d14 | 55 | |
Vincent Coubard |
1201:9b71aac42d14 | 56 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 57 | * Callback type used by the onEventsToProcess function. |
Vincent Coubard |
1201:9b71aac42d14 | 58 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 59 | typedef FunctionPointerWithContext<OnEventsToProcessCallbackContext*> OnEventsToProcessCallback_t; |
Vincent Coubard |
1201:9b71aac42d14 | 60 | |
Vincent Coubard |
1201:9b71aac42d14 | 61 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 62 | * The context provided to init-completion-callbacks (see init() below). |
Vincent Coubard |
1201:9b71aac42d14 | 63 | * |
Vincent Coubard |
1201:9b71aac42d14 | 64 | * @param ble |
Vincent Coubard |
1201:9b71aac42d14 | 65 | * A reference to the BLE instance being initialized. |
Vincent Coubard |
1201:9b71aac42d14 | 66 | * @param error |
Vincent Coubard |
1201:9b71aac42d14 | 67 | * Captures the result of initialization. It is set to |
Vincent Coubard |
1201:9b71aac42d14 | 68 | * BLE_ERROR_NONE if initialization completed successfully. Else |
Vincent Coubard |
1201:9b71aac42d14 | 69 | * the error value is implementation specific. |
Vincent Coubard |
1201:9b71aac42d14 | 70 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 71 | struct InitializationCompleteCallbackContext { |
Vincent Coubard |
1201:9b71aac42d14 | 72 | BLE& ble; /**< Reference to the BLE object that has been initialized */ |
Vincent Coubard |
1201:9b71aac42d14 | 73 | ble_error_t error; /**< Error status of the initialization. It is set to BLE_ERROR_NONE if initialization completed successfully. */ |
Vincent Coubard |
1201:9b71aac42d14 | 74 | }; |
Vincent Coubard |
1201:9b71aac42d14 | 75 | |
Vincent Coubard |
1201:9b71aac42d14 | 76 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 77 | * The signature for function-pointer like callbacks for initialization-completion. |
Vincent Coubard |
1201:9b71aac42d14 | 78 | * |
Vincent Coubard |
1201:9b71aac42d14 | 79 | * @note There are two versions of init(). In addition to the simple |
Vincent Coubard |
1201:9b71aac42d14 | 80 | * function-pointer, init() can also take a <Object, member> tuple as its |
Vincent Coubard |
1201:9b71aac42d14 | 81 | * callback target. In case of the latter, the following declaration doesn't apply. |
Vincent Coubard |
1201:9b71aac42d14 | 82 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 83 | typedef void (*InitializationCompleteCallback_t)(InitializationCompleteCallbackContext *context); |
Vincent Coubard |
1201:9b71aac42d14 | 84 | |
Vincent Coubard |
1201:9b71aac42d14 | 85 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 86 | * Initialize the BLE controller. This should be called before using |
Vincent Coubard |
1201:9b71aac42d14 | 87 | * anything else in the BLE API. |
Vincent Coubard |
1201:9b71aac42d14 | 88 | * |
Vincent Coubard |
1201:9b71aac42d14 | 89 | * init() hands control to the underlying BLE module to accomplish |
Vincent Coubard |
1201:9b71aac42d14 | 90 | * initialization. This initialization may tacitly depend on other hardware |
Vincent Coubard |
1201:9b71aac42d14 | 91 | * setup (such as clocks or power-modes) that happens early on during |
Vincent Coubard |
1201:9b71aac42d14 | 92 | * system startup. It may not be safe to call init() from a global static |
Vincent Coubard |
1201:9b71aac42d14 | 93 | * context where ordering is compiler-specific and can't be guaranteed - it |
Vincent Coubard |
1201:9b71aac42d14 | 94 | * is safe to call BLE::init() from within main(). |
Vincent Coubard |
1201:9b71aac42d14 | 95 | * |
Vincent Coubard |
1201:9b71aac42d14 | 96 | * @param initCompleteCallback |
Vincent Coubard |
1201:9b71aac42d14 | 97 | * A callback for when initialization completes for a BLE |
Vincent Coubard |
1201:9b71aac42d14 | 98 | * instance. This is an optional parameter; if no callback is |
Vincent Coubard |
1201:9b71aac42d14 | 99 | * set up the application can still determine the status of |
Vincent Coubard |
1201:9b71aac42d14 | 100 | * initialization using BLE::hasInitialized() (see below). |
Vincent Coubard |
1201:9b71aac42d14 | 101 | * |
Vincent Coubard |
1201:9b71aac42d14 | 102 | * @return BLE_ERROR_NONE if the initialization procedure was started |
Vincent Coubard |
1201:9b71aac42d14 | 103 | * successfully. |
Vincent Coubard |
1201:9b71aac42d14 | 104 | * |
Vincent Coubard |
1201:9b71aac42d14 | 105 | * @note If init() returns BLE_ERROR_NONE, the underlying stack must invoke |
Vincent Coubard |
1201:9b71aac42d14 | 106 | * the initialization completion callback at some point. |
Vincent Coubard |
1201:9b71aac42d14 | 107 | * |
Vincent Coubard |
1201:9b71aac42d14 | 108 | * @note Nearly all BLE APIs would return |
Vincent Coubard |
1201:9b71aac42d14 | 109 | * BLE_ERROR_INITIALIZATION_INCOMPLETE if used on an instance before the |
Vincent Coubard |
1201:9b71aac42d14 | 110 | * corresponding transport is initialized. |
Vincent Coubard |
1201:9b71aac42d14 | 111 | * |
Vincent Coubard |
1201:9b71aac42d14 | 112 | * @note There are two versions of init(). In addition to the simple |
Vincent Coubard |
1201:9b71aac42d14 | 113 | * function-pointer, init() can also take an <Object, member> tuple as its |
Vincent Coubard |
1201:9b71aac42d14 | 114 | * callback target. |
Vincent Coubard |
1201:9b71aac42d14 | 115 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 116 | ble_error_t init(InitializationCompleteCallback_t initCompleteCallback = NULL) { |
Vincent Coubard |
1201:9b71aac42d14 | 117 | FunctionPointerWithContext<InitializationCompleteCallbackContext *> callback(initCompleteCallback); |
Vincent Coubard |
1201:9b71aac42d14 | 118 | return initImplementation(callback); |
Vincent Coubard |
1201:9b71aac42d14 | 119 | } |
Vincent Coubard |
1201:9b71aac42d14 | 120 | |
Vincent Coubard |
1201:9b71aac42d14 | 121 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 122 | * An alternate declaration for init(). This one takes an <Object, member> tuple as its |
Vincent Coubard |
1201:9b71aac42d14 | 123 | * callback target. |
Vincent Coubard |
1201:9b71aac42d14 | 124 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 125 | template<typename T> |
Vincent Coubard |
1201:9b71aac42d14 | 126 | ble_error_t init(T *object, void (T::*initCompleteCallback)(InitializationCompleteCallbackContext *context)) { |
Vincent Coubard |
1201:9b71aac42d14 | 127 | FunctionPointerWithContext<InitializationCompleteCallbackContext *> callback(object, initCompleteCallback); |
Vincent Coubard |
1201:9b71aac42d14 | 128 | return initImplementation(callback); |
Vincent Coubard |
1201:9b71aac42d14 | 129 | } |
Vincent Coubard |
1201:9b71aac42d14 | 130 | |
Vincent Coubard |
1201:9b71aac42d14 | 131 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 132 | * @return true if initialization has completed for the underlying BLE |
Vincent Coubard |
1201:9b71aac42d14 | 133 | * transport. |
Vincent Coubard |
1201:9b71aac42d14 | 134 | * |
Vincent Coubard |
1201:9b71aac42d14 | 135 | * The application can set up a callback to signal completion of |
Vincent Coubard |
1201:9b71aac42d14 | 136 | * initialization when using init(). Otherwise, this method can be used to |
Vincent Coubard |
1201:9b71aac42d14 | 137 | * poll the state of initialization. |
Vincent Coubard |
1201:9b71aac42d14 | 138 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 139 | bool hasInitialized(void) const; |
Vincent Coubard |
1201:9b71aac42d14 | 140 | |
Vincent Coubard |
1201:9b71aac42d14 | 141 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 142 | * Purge the BLE stack of GATT and GAP state. init() must be called |
Vincent Coubard |
1201:9b71aac42d14 | 143 | * afterwards to re-instate services and GAP state. This API offers a way to |
Vincent Coubard |
1201:9b71aac42d14 | 144 | * repopulate the GATT database with new services and characteristics. |
Vincent Coubard |
1201:9b71aac42d14 | 145 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 146 | ble_error_t shutdown(void); |
Vincent Coubard |
1201:9b71aac42d14 | 147 | |
Vincent Coubard |
1201:9b71aac42d14 | 148 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 149 | * This call allows the application to get the BLE stack version information. |
Vincent Coubard |
1201:9b71aac42d14 | 150 | * |
Vincent Coubard |
1201:9b71aac42d14 | 151 | * @return A pointer to a const string representing the version. |
Vincent Coubard |
1201:9b71aac42d14 | 152 | * |
Vincent Coubard |
1201:9b71aac42d14 | 153 | * @note The string returned is owned by BLE API. |
Vincent Coubard |
1201:9b71aac42d14 | 154 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 155 | const char *getVersion(void); |
Vincent Coubard |
1201:9b71aac42d14 | 156 | |
Vincent Coubard |
1201:9b71aac42d14 | 157 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 158 | * Accessor to Gap. All Gap related functionality requires |
Vincent Coubard |
1201:9b71aac42d14 | 159 | * going through this accessor. |
Vincent Coubard |
1201:9b71aac42d14 | 160 | * |
Vincent Coubard |
1201:9b71aac42d14 | 161 | * @return A reference to a Gap object associated to this BLE instance. |
Vincent Coubard |
1201:9b71aac42d14 | 162 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 163 | Gap &gap(); |
Vincent Coubard |
1201:9b71aac42d14 | 164 | |
Vincent Coubard |
1201:9b71aac42d14 | 165 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 166 | * A const alternative to gap(). |
Vincent Coubard |
1201:9b71aac42d14 | 167 | * |
Vincent Coubard |
1201:9b71aac42d14 | 168 | * @return A const reference to a Gap object associated to this BLE instance. |
Vincent Coubard |
1201:9b71aac42d14 | 169 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 170 | const Gap &gap() const; |
Vincent Coubard |
1201:9b71aac42d14 | 171 | |
Vincent Coubard |
1201:9b71aac42d14 | 172 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 173 | * Accessor to GattServer. All GattServer related functionality requires |
Vincent Coubard |
1201:9b71aac42d14 | 174 | * going through this accessor. |
Vincent Coubard |
1201:9b71aac42d14 | 175 | * |
Vincent Coubard |
1201:9b71aac42d14 | 176 | * @return A reference to a GattServer object associated to this BLE instance. |
Vincent Coubard |
1201:9b71aac42d14 | 177 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 178 | GattServer& gattServer(); |
Vincent Coubard |
1201:9b71aac42d14 | 179 | |
Vincent Coubard |
1201:9b71aac42d14 | 180 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 181 | * A const alternative to gattServer(). |
Vincent Coubard |
1201:9b71aac42d14 | 182 | * |
Vincent Coubard |
1201:9b71aac42d14 | 183 | * @return A const reference to a GattServer object associated to this BLE instance. |
Vincent Coubard |
1201:9b71aac42d14 | 184 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 185 | const GattServer& gattServer() const; |
Vincent Coubard |
1201:9b71aac42d14 | 186 | |
Vincent Coubard |
1201:9b71aac42d14 | 187 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 188 | * Accessors to GattClient. All GattClient related functionality requires going |
Vincent Coubard |
1201:9b71aac42d14 | 189 | * through this accessor. |
Vincent Coubard |
1201:9b71aac42d14 | 190 | * |
Vincent Coubard |
1201:9b71aac42d14 | 191 | * @return A reference to a GattClient object associated to this BLE instance. |
Vincent Coubard |
1201:9b71aac42d14 | 192 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 193 | GattClient& gattClient(); |
Vincent Coubard |
1201:9b71aac42d14 | 194 | |
Vincent Coubard |
1201:9b71aac42d14 | 195 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 196 | * A const alternative to gattClient(). |
Vincent Coubard |
1201:9b71aac42d14 | 197 | * |
Vincent Coubard |
1201:9b71aac42d14 | 198 | * @return A const reference to a GattClient object associated to this BLE instance. |
Vincent Coubard |
1201:9b71aac42d14 | 199 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 200 | const GattClient& gattClient() const; |
Vincent Coubard |
1201:9b71aac42d14 | 201 | |
Vincent Coubard |
1201:9b71aac42d14 | 202 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 203 | * Accessors to SecurityManager. All SecurityManager related functionality requires |
Vincent Coubard |
1201:9b71aac42d14 | 204 | * going through this accessor. |
Vincent Coubard |
1201:9b71aac42d14 | 205 | * |
Vincent Coubard |
1201:9b71aac42d14 | 206 | * @return A reference to a SecurityManager object associated to this BLE instance. |
Vincent Coubard |
1201:9b71aac42d14 | 207 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 208 | SecurityManager& securityManager(); |
Vincent Coubard |
1201:9b71aac42d14 | 209 | |
Vincent Coubard |
1201:9b71aac42d14 | 210 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 211 | * A const alternative to securityManager(). |
Vincent Coubard |
1201:9b71aac42d14 | 212 | * |
Vincent Coubard |
1201:9b71aac42d14 | 213 | * @return A const reference to a SecurityManager object associated to this BLE instance. |
Vincent Coubard |
1201:9b71aac42d14 | 214 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 215 | const SecurityManager& securityManager() const; |
Vincent Coubard |
1201:9b71aac42d14 | 216 | |
Vincent Coubard |
1201:9b71aac42d14 | 217 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 218 | * Yield control to the BLE stack or to other tasks waiting for events. This |
Vincent Coubard |
1201:9b71aac42d14 | 219 | * is a sleep function that will return when there is an application-specific |
Vincent Coubard |
1201:9b71aac42d14 | 220 | * interrupt, but the MCU might wake up several times before |
Vincent Coubard |
1201:9b71aac42d14 | 221 | * returning (to service the stack). This is not always interchangeable with |
Vincent Coubard |
1201:9b71aac42d14 | 222 | * WFE(). |
Vincent Coubard |
1201:9b71aac42d14 | 223 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 224 | void waitForEvent(void); |
Vincent Coubard |
1201:9b71aac42d14 | 225 | |
Vincent Coubard |
1201:9b71aac42d14 | 226 | public: |
Vincent Coubard |
1201:9b71aac42d14 | 227 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 228 | * The value of the BLE::InstanceID_t for the default BLE instance. |
Vincent Coubard |
1201:9b71aac42d14 | 229 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 230 | static const InstanceID_t DEFAULT_INSTANCE = 0; |
Vincent Coubard |
1201:9b71aac42d14 | 231 | #ifndef YOTTA_CFG_BLE_INSTANCES_COUNT |
Vincent Coubard |
1201:9b71aac42d14 | 232 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 233 | * The number of permitted BLE instances for the application. |
Vincent Coubard |
1201:9b71aac42d14 | 234 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 235 | static const InstanceID_t NUM_INSTANCES = 1; |
Vincent Coubard |
1201:9b71aac42d14 | 236 | #else |
Vincent Coubard |
1201:9b71aac42d14 | 237 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 238 | * The number of permitted BLE instances for the application. |
Vincent Coubard |
1201:9b71aac42d14 | 239 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 240 | static const InstanceID_t NUM_INSTANCES = YOTTA_CFG_BLE_INSTANCES_COUNT; |
Vincent Coubard |
1201:9b71aac42d14 | 241 | #endif |
Vincent Coubard |
1201:9b71aac42d14 | 242 | |
Vincent Coubard |
1201:9b71aac42d14 | 243 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 244 | * Get a reference to the BLE singleton corresponding to a given interface. |
Vincent Coubard |
1201:9b71aac42d14 | 245 | * There is a static array of BLE singletons. |
Vincent Coubard |
1201:9b71aac42d14 | 246 | * |
Vincent Coubard |
1201:9b71aac42d14 | 247 | * @note Calling Instance() is preferred over constructing a BLE object |
Vincent Coubard |
1201:9b71aac42d14 | 248 | * directly, as it returns references to singletons. |
Vincent Coubard |
1201:9b71aac42d14 | 249 | * |
Vincent Coubard |
1201:9b71aac42d14 | 250 | * @param[in] id |
Vincent Coubard |
1201:9b71aac42d14 | 251 | * Instance-ID. This should be less than NUM_INSTANCES |
Vincent Coubard |
1201:9b71aac42d14 | 252 | * for the returned BLE singleton to be useful. |
Vincent Coubard |
1201:9b71aac42d14 | 253 | * |
Vincent Coubard |
1201:9b71aac42d14 | 254 | * @return A reference to a single object. |
Vincent Coubard |
1201:9b71aac42d14 | 255 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 256 | static BLE &Instance(InstanceID_t id = DEFAULT_INSTANCE); |
Vincent Coubard |
1201:9b71aac42d14 | 257 | |
Vincent Coubard |
1201:9b71aac42d14 | 258 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 259 | * Constructor for a handle to a BLE instance (the BLE stack). BLE handles |
Vincent Coubard |
1201:9b71aac42d14 | 260 | * are thin wrappers around a transport object (that is, ptr. to |
Vincent Coubard |
1201:9b71aac42d14 | 261 | * BLEInstanceBase). |
Vincent Coubard |
1201:9b71aac42d14 | 262 | * |
Vincent Coubard |
1201:9b71aac42d14 | 263 | * It is better to create BLE objects as singletons accessed through the |
Vincent Coubard |
1201:9b71aac42d14 | 264 | * Instance() method. If multiple BLE handles are constructed for the same |
Vincent Coubard |
1201:9b71aac42d14 | 265 | * interface (using this constructor), they will share the same underlying |
Vincent Coubard |
1201:9b71aac42d14 | 266 | * transport object. |
Vincent Coubard |
1201:9b71aac42d14 | 267 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 268 | BLE(InstanceID_t instanceID = DEFAULT_INSTANCE); |
Vincent Coubard |
1201:9b71aac42d14 | 269 | |
Vincent Coubard |
1201:9b71aac42d14 | 270 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 271 | * Fetch the ID of a BLE instance. Typically there would only be the DEFAULT_INSTANCE. |
Vincent Coubard |
1201:9b71aac42d14 | 272 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 273 | InstanceID_t getInstanceID(void) const { |
Vincent Coubard |
1201:9b71aac42d14 | 274 | return instanceID; |
Vincent Coubard |
1201:9b71aac42d14 | 275 | } |
Vincent Coubard |
1201:9b71aac42d14 | 276 | |
Vincent Coubard |
1201:9b71aac42d14 | 277 | /* |
Vincent Coubard |
1201:9b71aac42d14 | 278 | * Deprecation alert! |
Vincent Coubard |
1201:9b71aac42d14 | 279 | * All of the following are deprecated and may be dropped in a future |
Vincent Coubard |
1201:9b71aac42d14 | 280 | * release. Documentation should refer to alternative APIs. |
Vincent Coubard |
1201:9b71aac42d14 | 281 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 282 | |
Vincent Coubard |
1201:9b71aac42d14 | 283 | /* GAP specific APIs. */ |
Vincent Coubard |
1201:9b71aac42d14 | 284 | public: |
Vincent Coubard |
1201:9b71aac42d14 | 285 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 286 | * Set the BTLE MAC address and type. |
Vincent Coubard |
1201:9b71aac42d14 | 287 | * @return BLE_ERROR_NONE on success. |
Vincent Coubard |
1201:9b71aac42d14 | 288 | * |
Vincent Coubard |
1201:9b71aac42d14 | 289 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 290 | * Gap::setAddress(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 291 | * ble.setAddress(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 292 | * ble.gap().setAddress(...). |
Vincent Coubard |
1201:9b71aac42d14 | 293 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 294 | ble_error_t setAddress(BLEProtocol::AddressType_t type, const BLEProtocol::AddressBytes_t address) { |
Vincent Coubard |
1201:9b71aac42d14 | 295 | return gap().setAddress(type, address); |
Vincent Coubard |
1201:9b71aac42d14 | 296 | } |
Vincent Coubard |
1201:9b71aac42d14 | 297 | |
Vincent Coubard |
1201:9b71aac42d14 | 298 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 299 | * Fetch the Bluetooth Low Energy MAC address and type. |
Vincent Coubard |
1201:9b71aac42d14 | 300 | * @return BLE_ERROR_NONE on success. |
Vincent Coubard |
1201:9b71aac42d14 | 301 | * |
Vincent Coubard |
1201:9b71aac42d14 | 302 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 303 | * Gap::getAddress(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 304 | * ble.getAddress(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 305 | * ble.gap().getAddress(...). |
Vincent Coubard |
1201:9b71aac42d14 | 306 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 307 | ble_error_t getAddress(BLEProtocol::AddressType_t *typeP, BLEProtocol::AddressBytes_t address) { |
Vincent Coubard |
1201:9b71aac42d14 | 308 | return gap().getAddress(typeP, address); |
Vincent Coubard |
1201:9b71aac42d14 | 309 | } |
Vincent Coubard |
1201:9b71aac42d14 | 310 | |
Vincent Coubard |
1201:9b71aac42d14 | 311 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 312 | * Set the GAP advertising mode to use for this device. |
Vincent Coubard |
1201:9b71aac42d14 | 313 | * |
Vincent Coubard |
1201:9b71aac42d14 | 314 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 315 | * Gap::setAdvertisingType(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 316 | * ble.setAdvertisingType(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 317 | * ble.gap().setAdvertisingType(...). |
Vincent Coubard |
1201:9b71aac42d14 | 318 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 319 | void setAdvertisingType(GapAdvertisingParams::AdvertisingType advType) { |
Vincent Coubard |
1201:9b71aac42d14 | 320 | gap().setAdvertisingType(advType); |
Vincent Coubard |
1201:9b71aac42d14 | 321 | } |
Vincent Coubard |
1201:9b71aac42d14 | 322 | |
Vincent Coubard |
1201:9b71aac42d14 | 323 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 324 | * @param[in] interval |
Vincent Coubard |
1201:9b71aac42d14 | 325 | * Advertising interval in units of milliseconds. Advertising |
Vincent Coubard |
1201:9b71aac42d14 | 326 | * is disabled if interval is 0. If interval is smaller than |
Vincent Coubard |
1201:9b71aac42d14 | 327 | * the minimum supported value, then the minimum supported |
Vincent Coubard |
1201:9b71aac42d14 | 328 | * value is used instead. This minimum value can be discovered |
Vincent Coubard |
1201:9b71aac42d14 | 329 | * using getMinAdvertisingInterval(). |
Vincent Coubard |
1201:9b71aac42d14 | 330 | * |
Vincent Coubard |
1201:9b71aac42d14 | 331 | * This field must be set to 0 if connectionMode is equal |
Vincent Coubard |
1201:9b71aac42d14 | 332 | * to ADV_CONNECTABLE_DIRECTED. |
Vincent Coubard |
1201:9b71aac42d14 | 333 | * |
Vincent Coubard |
1201:9b71aac42d14 | 334 | * @note Decreasing this value allows central devices to detect a |
Vincent Coubard |
1201:9b71aac42d14 | 335 | * peripheral faster, at the expense of more power being used by the radio |
Vincent Coubard |
1201:9b71aac42d14 | 336 | * due to the higher data transmit rate. |
Vincent Coubard |
1201:9b71aac42d14 | 337 | * |
Vincent Coubard |
1201:9b71aac42d14 | 338 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 339 | * Gap::setAdvertisingInterval(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 340 | * ble.setAdvertisingInterval(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 341 | * ble.gap().setAdvertisingInterval(...). |
Vincent Coubard |
1201:9b71aac42d14 | 342 | * |
Vincent Coubard |
1201:9b71aac42d14 | 343 | * @note WARNING: This API previously used 0.625ms as the unit for its |
Vincent Coubard |
1201:9b71aac42d14 | 344 | * 'interval' argument. That required an explicit conversion from |
Vincent Coubard |
1201:9b71aac42d14 | 345 | * milliseconds using Gap::MSEC_TO_GAP_DURATION_UNITS(). This conversion is |
Vincent Coubard |
1201:9b71aac42d14 | 346 | * no longer required as the new units are milliseconds. Any application |
Vincent Coubard |
1201:9b71aac42d14 | 347 | * code depending on the old semantics needs to be updated accordingly. |
Vincent Coubard |
1201:9b71aac42d14 | 348 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 349 | void setAdvertisingInterval(uint16_t interval) { |
Vincent Coubard |
1201:9b71aac42d14 | 350 | gap().setAdvertisingInterval(interval); |
Vincent Coubard |
1201:9b71aac42d14 | 351 | } |
Vincent Coubard |
1201:9b71aac42d14 | 352 | |
Vincent Coubard |
1201:9b71aac42d14 | 353 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 354 | * @return Minimum Advertising interval in milliseconds. |
Vincent Coubard |
1201:9b71aac42d14 | 355 | * |
Vincent Coubard |
1201:9b71aac42d14 | 356 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 357 | * Gap::getMinAdvertisingInterval(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 358 | * ble.getMinAdvertisingInterval(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 359 | * ble.gap().getMinAdvertisingInterval(...). |
Vincent Coubard |
1201:9b71aac42d14 | 360 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 361 | uint16_t getMinAdvertisingInterval(void) const { |
Vincent Coubard |
1201:9b71aac42d14 | 362 | return gap().getMinAdvertisingInterval(); |
Vincent Coubard |
1201:9b71aac42d14 | 363 | } |
Vincent Coubard |
1201:9b71aac42d14 | 364 | |
Vincent Coubard |
1201:9b71aac42d14 | 365 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 366 | * @return Minimum Advertising interval in milliseconds for non-connectible mode. |
Vincent Coubard |
1201:9b71aac42d14 | 367 | * |
Vincent Coubard |
1201:9b71aac42d14 | 368 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 369 | * Gap::MinNonConnectableAdvertisingInterval(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 370 | * ble.getMinNonConnectableAdvertisingInterval(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 371 | * ble.gap().getMinNonConnectableAdvertisingInterval(...). |
Vincent Coubard |
1201:9b71aac42d14 | 372 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 373 | uint16_t getMinNonConnectableAdvertisingInterval(void) const { |
Vincent Coubard |
1201:9b71aac42d14 | 374 | return gap().getMinNonConnectableAdvertisingInterval(); |
Vincent Coubard |
1201:9b71aac42d14 | 375 | } |
Vincent Coubard |
1201:9b71aac42d14 | 376 | |
Vincent Coubard |
1201:9b71aac42d14 | 377 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 378 | * @return Maximum Advertising interval in milliseconds. |
Vincent Coubard |
1201:9b71aac42d14 | 379 | * |
Vincent Coubard |
1201:9b71aac42d14 | 380 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 381 | * Gap::getMaxAdvertisingInterval(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 382 | * ble.getMaxAdvertisingInterval(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 383 | * ble.gap().getMaxAdvertisingInterval(...). |
Vincent Coubard |
1201:9b71aac42d14 | 384 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 385 | uint16_t getMaxAdvertisingInterval(void) const { |
Vincent Coubard |
1201:9b71aac42d14 | 386 | return gap().getMaxAdvertisingInterval(); |
Vincent Coubard |
1201:9b71aac42d14 | 387 | } |
Vincent Coubard |
1201:9b71aac42d14 | 388 | |
Vincent Coubard |
1201:9b71aac42d14 | 389 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 390 | * @param[in] timeout |
Vincent Coubard |
1201:9b71aac42d14 | 391 | * Advertising timeout (in seconds) between 0x1 and 0x3FFF (1 |
Vincent Coubard |
1201:9b71aac42d14 | 392 | * and 16383). Use 0 to disable the advertising timeout. |
Vincent Coubard |
1201:9b71aac42d14 | 393 | * |
Vincent Coubard |
1201:9b71aac42d14 | 394 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 395 | * Gap::setAdvertisingTimeout(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 396 | * ble.setAdvertisingTimeout(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 397 | * ble.gap().setAdvertisingTimeout(...). |
Vincent Coubard |
1201:9b71aac42d14 | 398 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 399 | void setAdvertisingTimeout(uint16_t timeout) { |
Vincent Coubard |
1201:9b71aac42d14 | 400 | gap().setAdvertisingTimeout(timeout); |
Vincent Coubard |
1201:9b71aac42d14 | 401 | } |
Vincent Coubard |
1201:9b71aac42d14 | 402 | |
Vincent Coubard |
1201:9b71aac42d14 | 403 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 404 | * Set up a particular, user-constructed set of advertisement parameters for |
Vincent Coubard |
1201:9b71aac42d14 | 405 | * the underlying stack. It would be uncommon for this API to be used |
Vincent Coubard |
1201:9b71aac42d14 | 406 | * directly; there are other APIs to tweak advertisement parameters |
Vincent Coubard |
1201:9b71aac42d14 | 407 | * individually (see above). |
Vincent Coubard |
1201:9b71aac42d14 | 408 | * |
Vincent Coubard |
1201:9b71aac42d14 | 409 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 410 | * Gap::setAdvertisingParams(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 411 | * ble.setAdvertisingParams(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 412 | * ble.gap().setAdvertisingParams(...). |
Vincent Coubard |
1201:9b71aac42d14 | 413 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 414 | void setAdvertisingParams(const GapAdvertisingParams &advParams) { |
Vincent Coubard |
1201:9b71aac42d14 | 415 | gap().setAdvertisingParams(advParams); |
Vincent Coubard |
1201:9b71aac42d14 | 416 | } |
Vincent Coubard |
1201:9b71aac42d14 | 417 | |
Vincent Coubard |
1201:9b71aac42d14 | 418 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 419 | * @return Read back advertising parameters. Useful for storing and |
Vincent Coubard |
1201:9b71aac42d14 | 420 | * restoring parameters rapidly. |
Vincent Coubard |
1201:9b71aac42d14 | 421 | * |
Vincent Coubard |
1201:9b71aac42d14 | 422 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 423 | * Gap::getAdvertisingParams(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 424 | * ble.getAdvertisingParams(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 425 | * ble.gap().getAdvertisingParams(...). |
Vincent Coubard |
1201:9b71aac42d14 | 426 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 427 | const GapAdvertisingParams &getAdvertisingParams(void) const { |
Vincent Coubard |
1201:9b71aac42d14 | 428 | return gap().getAdvertisingParams(); |
Vincent Coubard |
1201:9b71aac42d14 | 429 | } |
Vincent Coubard |
1201:9b71aac42d14 | 430 | |
Vincent Coubard |
1201:9b71aac42d14 | 431 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 432 | * Accumulate an AD structure in the advertising payload. Please note that |
Vincent Coubard |
1201:9b71aac42d14 | 433 | * the payload is limited to 31 bytes. The SCAN_RESPONSE message may be used |
Vincent Coubard |
1201:9b71aac42d14 | 434 | * as an additional 31 bytes if the advertising payload is too |
Vincent Coubard |
1201:9b71aac42d14 | 435 | * small. |
Vincent Coubard |
1201:9b71aac42d14 | 436 | * |
Vincent Coubard |
1201:9b71aac42d14 | 437 | * @param[in] flags |
Vincent Coubard |
1201:9b71aac42d14 | 438 | * The flags to add. Please refer to |
Vincent Coubard |
1201:9b71aac42d14 | 439 | * GapAdvertisingData::Flags for valid flags. Multiple |
Vincent Coubard |
1201:9b71aac42d14 | 440 | * flags may be specified in combination. |
Vincent Coubard |
1201:9b71aac42d14 | 441 | * |
Vincent Coubard |
1201:9b71aac42d14 | 442 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 443 | * Gap::accumulateAdvertisingPayload(uint8_t). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 444 | * ble.accumulateAdvertisingPayload(flags) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 445 | * ble.gap().accumulateAdvertisingPayload(flags). |
Vincent Coubard |
1201:9b71aac42d14 | 446 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 447 | ble_error_t accumulateAdvertisingPayload(uint8_t flags) { |
Vincent Coubard |
1201:9b71aac42d14 | 448 | return gap().accumulateAdvertisingPayload(flags); |
Vincent Coubard |
1201:9b71aac42d14 | 449 | } |
Vincent Coubard |
1201:9b71aac42d14 | 450 | |
Vincent Coubard |
1201:9b71aac42d14 | 451 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 452 | * Accumulate an AD structure in the advertising payload. Please note that |
Vincent Coubard |
1201:9b71aac42d14 | 453 | * the payload is limited to 31 bytes. The SCAN_RESPONSE message may be used |
Vincent Coubard |
1201:9b71aac42d14 | 454 | * as an additional 31 bytes if the advertising payload is too |
Vincent Coubard |
1201:9b71aac42d14 | 455 | * small. |
Vincent Coubard |
1201:9b71aac42d14 | 456 | * |
Vincent Coubard |
1201:9b71aac42d14 | 457 | * @param[in] app |
Vincent Coubard |
1201:9b71aac42d14 | 458 | * The appearance of the peripheral. |
Vincent Coubard |
1201:9b71aac42d14 | 459 | * |
Vincent Coubard |
1201:9b71aac42d14 | 460 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 461 | * Gap::accumulateAdvertisingPayload(GapAdvertisingData::Appearance). |
Vincent Coubard |
1201:9b71aac42d14 | 462 | * A former call to ble.accumulateAdvertisingPayload(appearance) |
Vincent Coubard |
1201:9b71aac42d14 | 463 | * should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 464 | * ble.gap().accumulateAdvertisingPayload(appearance). |
Vincent Coubard |
1201:9b71aac42d14 | 465 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 466 | ble_error_t accumulateAdvertisingPayload(GapAdvertisingData::Appearance app) { |
Vincent Coubard |
1201:9b71aac42d14 | 467 | return gap().accumulateAdvertisingPayload(app); |
Vincent Coubard |
1201:9b71aac42d14 | 468 | } |
Vincent Coubard |
1201:9b71aac42d14 | 469 | |
Vincent Coubard |
1201:9b71aac42d14 | 470 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 471 | * Accumulate an AD structure in the advertising payload. Please note that |
Vincent Coubard |
1201:9b71aac42d14 | 472 | * the payload is limited to 31 bytes. The SCAN_RESPONSE message may be used |
Vincent Coubard |
1201:9b71aac42d14 | 473 | * as an additional 31 bytes if the advertising payload is too |
Vincent Coubard |
1201:9b71aac42d14 | 474 | * small. |
Vincent Coubard |
1201:9b71aac42d14 | 475 | * |
Vincent Coubard |
1201:9b71aac42d14 | 476 | * @param[in] power |
Vincent Coubard |
1201:9b71aac42d14 | 477 | * The max transmit power to be used by the controller. This |
Vincent Coubard |
1201:9b71aac42d14 | 478 | * is only a hint. |
Vincent Coubard |
1201:9b71aac42d14 | 479 | * |
Vincent Coubard |
1201:9b71aac42d14 | 480 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 481 | * Gap::accumulateAdvertisingPayloadTxPower(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 482 | * ble.accumulateAdvertisingPayloadTxPower(txPower) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 483 | * ble.gap().accumulateAdvertisingPayloadTxPower(txPower). |
Vincent Coubard |
1201:9b71aac42d14 | 484 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 485 | ble_error_t accumulateAdvertisingPayloadTxPower(int8_t power) { |
Vincent Coubard |
1201:9b71aac42d14 | 486 | return gap().accumulateAdvertisingPayloadTxPower(power); |
Vincent Coubard |
1201:9b71aac42d14 | 487 | } |
Vincent Coubard |
1201:9b71aac42d14 | 488 | |
Vincent Coubard |
1201:9b71aac42d14 | 489 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 490 | * Accumulate a variable length byte-stream as an AD structure in the |
Vincent Coubard |
1201:9b71aac42d14 | 491 | * advertising payload. Please note that the payload is limited to 31 bytes. |
Vincent Coubard |
1201:9b71aac42d14 | 492 | * The SCAN_RESPONSE message may be used as an additional 31 bytes if the |
Vincent Coubard |
1201:9b71aac42d14 | 493 | * advertising payload is too small. |
Vincent Coubard |
1201:9b71aac42d14 | 494 | * |
Vincent Coubard |
1201:9b71aac42d14 | 495 | * @param type The type that describes the variable length data. |
Vincent Coubard |
1201:9b71aac42d14 | 496 | * @param data Data bytes. |
Vincent Coubard |
1201:9b71aac42d14 | 497 | * @param len Data length. |
Vincent Coubard |
1201:9b71aac42d14 | 498 | * |
Vincent Coubard |
1201:9b71aac42d14 | 499 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 500 | * Gap::accumulateAdvertisingPayload(GapAdvertisingData::DataType, const uint8_t, uint8_t). |
Vincent Coubard |
1201:9b71aac42d14 | 501 | * A former call to ble.accumulateAdvertisingPayload(...) should |
Vincent Coubard |
1201:9b71aac42d14 | 502 | * be replaced with ble.gap().accumulateAdvertisingPayload(...). |
Vincent Coubard |
1201:9b71aac42d14 | 503 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 504 | ble_error_t accumulateAdvertisingPayload(GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len) { |
Vincent Coubard |
1201:9b71aac42d14 | 505 | return gap().accumulateAdvertisingPayload(type, data, len); |
Vincent Coubard |
1201:9b71aac42d14 | 506 | } |
Vincent Coubard |
1201:9b71aac42d14 | 507 | |
Vincent Coubard |
1201:9b71aac42d14 | 508 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 509 | * Setup a particular, user-constructed advertisement payload for the |
Vincent Coubard |
1201:9b71aac42d14 | 510 | * underlying stack. It would be uncommon for this API to be used directly; |
Vincent Coubard |
1201:9b71aac42d14 | 511 | * there are other APIs to build an advertisement payload (see above). |
Vincent Coubard |
1201:9b71aac42d14 | 512 | * |
Vincent Coubard |
1201:9b71aac42d14 | 513 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 514 | * Gap::setAdvertisingData(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 515 | * ble.setAdvertisingData(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 516 | * ble.gap().setAdvertisingPayload(...). |
Vincent Coubard |
1201:9b71aac42d14 | 517 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 518 | ble_error_t setAdvertisingData(const GapAdvertisingData &advData) { |
Vincent Coubard |
1201:9b71aac42d14 | 519 | return gap().setAdvertisingPayload(advData); |
Vincent Coubard |
1201:9b71aac42d14 | 520 | } |
Vincent Coubard |
1201:9b71aac42d14 | 521 | |
Vincent Coubard |
1201:9b71aac42d14 | 522 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 523 | * @return Read back advertising data. Useful for storing and |
Vincent Coubard |
1201:9b71aac42d14 | 524 | * restoring payload. |
Vincent Coubard |
1201:9b71aac42d14 | 525 | * |
Vincent Coubard |
1201:9b71aac42d14 | 526 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 527 | * Gap::getAdvertisingData(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 528 | * ble.getAdvertisingData(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 529 | * ble.gap().getAdvertisingPayload()(...). |
Vincent Coubard |
1201:9b71aac42d14 | 530 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 531 | const GapAdvertisingData &getAdvertisingData(void) const { |
Vincent Coubard |
1201:9b71aac42d14 | 532 | return gap().getAdvertisingPayload(); |
Vincent Coubard |
1201:9b71aac42d14 | 533 | } |
Vincent Coubard |
1201:9b71aac42d14 | 534 | |
Vincent Coubard |
1201:9b71aac42d14 | 535 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 536 | * Reset any advertising payload prepared from prior calls to |
Vincent Coubard |
1201:9b71aac42d14 | 537 | * accumulateAdvertisingPayload(). This automatically propagates the re- |
Vincent Coubard |
1201:9b71aac42d14 | 538 | * initialized advertising payload to the underlying stack. |
Vincent Coubard |
1201:9b71aac42d14 | 539 | * |
Vincent Coubard |
1201:9b71aac42d14 | 540 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 541 | * Gap::clearAdvertisingPayload(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 542 | * ble.clearAdvertisingPayload(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 543 | * ble.gap().clearAdvertisingPayload(...). |
Vincent Coubard |
1201:9b71aac42d14 | 544 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 545 | void clearAdvertisingPayload(void) { |
Vincent Coubard |
1201:9b71aac42d14 | 546 | gap().clearAdvertisingPayload(); |
Vincent Coubard |
1201:9b71aac42d14 | 547 | } |
Vincent Coubard |
1201:9b71aac42d14 | 548 | |
Vincent Coubard |
1201:9b71aac42d14 | 549 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 550 | * Dynamically reset the accumulated advertising |
Vincent Coubard |
1201:9b71aac42d14 | 551 | * payload and scanResponse. The application must clear and re- |
Vincent Coubard |
1201:9b71aac42d14 | 552 | * accumulates a new advertising payload (and scanResponse) before using this |
Vincent Coubard |
1201:9b71aac42d14 | 553 | * API. |
Vincent Coubard |
1201:9b71aac42d14 | 554 | * |
Vincent Coubard |
1201:9b71aac42d14 | 555 | * @return BLE_ERROR_NONE when the advertising payload is set successfully. |
Vincent Coubard |
1201:9b71aac42d14 | 556 | * |
Vincent Coubard |
1201:9b71aac42d14 | 557 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 558 | * Gap::setAdvertisingPayload(). |
Vincent Coubard |
1201:9b71aac42d14 | 559 | * |
Vincent Coubard |
1201:9b71aac42d14 | 560 | * @note The new APIs in Gap update the underlying advertisement payload |
Vincent Coubard |
1201:9b71aac42d14 | 561 | * implicitly. |
Vincent Coubard |
1201:9b71aac42d14 | 562 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 563 | ble_error_t setAdvertisingPayload(void) { |
Vincent Coubard |
1201:9b71aac42d14 | 564 | return BLE_ERROR_NONE; |
Vincent Coubard |
1201:9b71aac42d14 | 565 | } |
Vincent Coubard |
1201:9b71aac42d14 | 566 | |
Vincent Coubard |
1201:9b71aac42d14 | 567 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 568 | * Accumulate a variable length byte-stream as an AD structure in the |
Vincent Coubard |
1201:9b71aac42d14 | 569 | * scanResponse payload. |
Vincent Coubard |
1201:9b71aac42d14 | 570 | * |
Vincent Coubard |
1201:9b71aac42d14 | 571 | * @param[in] type The type that describes the variable length data. |
Vincent Coubard |
1201:9b71aac42d14 | 572 | * @param[in] data Data bytes. |
Vincent Coubard |
1201:9b71aac42d14 | 573 | * @param[in] len Data length. |
Vincent Coubard |
1201:9b71aac42d14 | 574 | * |
Vincent Coubard |
1201:9b71aac42d14 | 575 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 576 | * Gap::accumulateScanResponse(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 577 | * ble.accumulateScanResponse(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 578 | * ble.gap().accumulateScanResponse(...). |
Vincent Coubard |
1201:9b71aac42d14 | 579 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 580 | ble_error_t accumulateScanResponse(GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len) { |
Vincent Coubard |
1201:9b71aac42d14 | 581 | return gap().accumulateScanResponse(type, data, len); |
Vincent Coubard |
1201:9b71aac42d14 | 582 | } |
Vincent Coubard |
1201:9b71aac42d14 | 583 | |
Vincent Coubard |
1201:9b71aac42d14 | 584 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 585 | * Reset any scan response prepared from prior calls to |
Vincent Coubard |
1201:9b71aac42d14 | 586 | * accumulateScanResponse(). |
Vincent Coubard |
1201:9b71aac42d14 | 587 | * |
Vincent Coubard |
1201:9b71aac42d14 | 588 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 589 | * Gap::clearScanResponse(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 590 | * ble.clearScanResponse(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 591 | * ble.gap().clearScanResponse(...). |
Vincent Coubard |
1201:9b71aac42d14 | 592 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 593 | void clearScanResponse(void) { |
Vincent Coubard |
1201:9b71aac42d14 | 594 | gap().clearScanResponse(); |
Vincent Coubard |
1201:9b71aac42d14 | 595 | } |
Vincent Coubard |
1201:9b71aac42d14 | 596 | |
Vincent Coubard |
1201:9b71aac42d14 | 597 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 598 | * Start advertising. |
Vincent Coubard |
1201:9b71aac42d14 | 599 | * |
Vincent Coubard |
1201:9b71aac42d14 | 600 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 601 | * Gap::startAdvertising(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 602 | * ble.startAdvertising(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 603 | * ble.gap().startAdvertising(...). |
Vincent Coubard |
1201:9b71aac42d14 | 604 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 605 | ble_error_t startAdvertising(void) { |
Vincent Coubard |
1201:9b71aac42d14 | 606 | return gap().startAdvertising(); |
Vincent Coubard |
1201:9b71aac42d14 | 607 | } |
Vincent Coubard |
1201:9b71aac42d14 | 608 | |
Vincent Coubard |
1201:9b71aac42d14 | 609 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 610 | * Stop advertising. |
Vincent Coubard |
1201:9b71aac42d14 | 611 | * |
Vincent Coubard |
1201:9b71aac42d14 | 612 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 613 | * Gap::stopAdvertising(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 614 | * ble.stopAdvertising(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 615 | * ble.gap().stopAdvertising(...). |
Vincent Coubard |
1201:9b71aac42d14 | 616 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 617 | ble_error_t stopAdvertising(void) { |
Vincent Coubard |
1201:9b71aac42d14 | 618 | return gap().stopAdvertising(); |
Vincent Coubard |
1201:9b71aac42d14 | 619 | } |
Vincent Coubard |
1201:9b71aac42d14 | 620 | |
Vincent Coubard |
1201:9b71aac42d14 | 621 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 622 | * Set up parameters for GAP scanning (observer mode). |
Vincent Coubard |
1201:9b71aac42d14 | 623 | * @param[in] interval |
Vincent Coubard |
1201:9b71aac42d14 | 624 | * Scan interval (in milliseconds) [valid values lie between 2.5ms and 10.24s]. |
Vincent Coubard |
1201:9b71aac42d14 | 625 | * @param[in] window |
Vincent Coubard |
1201:9b71aac42d14 | 626 | * Scan Window (in milliseconds) [valid values lie between 2.5ms and 10.24s]. |
Vincent Coubard |
1201:9b71aac42d14 | 627 | * @param[in] timeout |
Vincent Coubard |
1201:9b71aac42d14 | 628 | * Scan timeout (in seconds) between 0x0001 and 0xFFFF; 0x0000 disables timeout. |
Vincent Coubard |
1201:9b71aac42d14 | 629 | * @param[in] activeScanning |
Vincent Coubard |
1201:9b71aac42d14 | 630 | * Set to True if active-scanning is required. This is used to fetch the |
Vincent Coubard |
1201:9b71aac42d14 | 631 | * scan response from a peer if possible. |
Vincent Coubard |
1201:9b71aac42d14 | 632 | * |
Vincent Coubard |
1201:9b71aac42d14 | 633 | * The scanning window divided by the interval determines the duty cycle for |
Vincent Coubard |
1201:9b71aac42d14 | 634 | * scanning. For example, if the interval is 100ms and the window is 10ms, |
Vincent Coubard |
1201:9b71aac42d14 | 635 | * then the controller will scan for 10 percent of the time. It is possible |
Vincent Coubard |
1201:9b71aac42d14 | 636 | * to have the interval and window set to the same value. In this case, |
Vincent Coubard |
1201:9b71aac42d14 | 637 | * scanning is continuous, with a change of scanning frequency once every |
Vincent Coubard |
1201:9b71aac42d14 | 638 | * interval. |
Vincent Coubard |
1201:9b71aac42d14 | 639 | * |
Vincent Coubard |
1201:9b71aac42d14 | 640 | * Once the scanning parameters have been configured, scanning can be |
Vincent Coubard |
1201:9b71aac42d14 | 641 | * enabled by using startScan(). |
Vincent Coubard |
1201:9b71aac42d14 | 642 | * |
Vincent Coubard |
1201:9b71aac42d14 | 643 | * @note The scan interval and window are recommendations to the BLE stack. |
Vincent Coubard |
1201:9b71aac42d14 | 644 | * |
Vincent Coubard |
1201:9b71aac42d14 | 645 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 646 | * Gap::setScanParams(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 647 | * ble.setScanParams(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 648 | * ble.gap().setScanParams(...). |
Vincent Coubard |
1201:9b71aac42d14 | 649 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 650 | ble_error_t setScanParams(uint16_t interval = GapScanningParams::SCAN_INTERVAL_MAX, |
Vincent Coubard |
1201:9b71aac42d14 | 651 | uint16_t window = GapScanningParams::SCAN_WINDOW_MAX, |
Vincent Coubard |
1201:9b71aac42d14 | 652 | uint16_t timeout = 0, |
Vincent Coubard |
1201:9b71aac42d14 | 653 | bool activeScanning = false) { |
Vincent Coubard |
1201:9b71aac42d14 | 654 | return gap().setScanParams(interval, window, timeout, activeScanning); |
Vincent Coubard |
1201:9b71aac42d14 | 655 | } |
Vincent Coubard |
1201:9b71aac42d14 | 656 | |
Vincent Coubard |
1201:9b71aac42d14 | 657 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 658 | * Set up the scanInterval parameter for GAP scanning (observer mode). |
Vincent Coubard |
1201:9b71aac42d14 | 659 | * @param[in] interval |
Vincent Coubard |
1201:9b71aac42d14 | 660 | * Scan interval (in milliseconds) [valid values lie between 2.5ms and 10.24s]. |
Vincent Coubard |
1201:9b71aac42d14 | 661 | * |
Vincent Coubard |
1201:9b71aac42d14 | 662 | * The scanning window divided by the interval determines the duty cycle for |
Vincent Coubard |
1201:9b71aac42d14 | 663 | * scanning. For example, if the interval is 100ms and the window is 10ms, |
Vincent Coubard |
1201:9b71aac42d14 | 664 | * then the controller will scan for 10 percent of the time. It is possible |
Vincent Coubard |
1201:9b71aac42d14 | 665 | * to have the interval and window set to the same value. In this case, |
Vincent Coubard |
1201:9b71aac42d14 | 666 | * scanning is continuous, with a change of scanning frequency once every |
Vincent Coubard |
1201:9b71aac42d14 | 667 | * interval. |
Vincent Coubard |
1201:9b71aac42d14 | 668 | * |
Vincent Coubard |
1201:9b71aac42d14 | 669 | * Once the scanning parameters have been configured, scanning can be |
Vincent Coubard |
1201:9b71aac42d14 | 670 | * enabled by using startScan(). |
Vincent Coubard |
1201:9b71aac42d14 | 671 | * |
Vincent Coubard |
1201:9b71aac42d14 | 672 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 673 | * Gap::setScanInterval(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 674 | * ble.setScanInterval(interval) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 675 | * ble.gap().setScanInterval(interval). |
Vincent Coubard |
1201:9b71aac42d14 | 676 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 677 | ble_error_t setScanInterval(uint16_t interval) { |
Vincent Coubard |
1201:9b71aac42d14 | 678 | return gap().setScanInterval(interval); |
Vincent Coubard |
1201:9b71aac42d14 | 679 | } |
Vincent Coubard |
1201:9b71aac42d14 | 680 | |
Vincent Coubard |
1201:9b71aac42d14 | 681 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 682 | * Set up the scanWindow parameter for GAP scanning (observer mode). |
Vincent Coubard |
1201:9b71aac42d14 | 683 | * @param[in] window |
Vincent Coubard |
1201:9b71aac42d14 | 684 | * Scan Window (in milliseconds) [valid values lie between 2.5ms and 10.24s]. |
Vincent Coubard |
1201:9b71aac42d14 | 685 | * |
Vincent Coubard |
1201:9b71aac42d14 | 686 | * The scanning window divided by the interval determines the duty cycle for |
Vincent Coubard |
1201:9b71aac42d14 | 687 | * scanning. For example, if the interval is 100ms and the window is 10ms, |
Vincent Coubard |
1201:9b71aac42d14 | 688 | * then the controller will scan for 10 percent of the time. It is possible |
Vincent Coubard |
1201:9b71aac42d14 | 689 | * to have the interval and window set to the same value. In this case, |
Vincent Coubard |
1201:9b71aac42d14 | 690 | * scanning is continuous, with a change of scanning frequency once every |
Vincent Coubard |
1201:9b71aac42d14 | 691 | * interval. |
Vincent Coubard |
1201:9b71aac42d14 | 692 | * |
Vincent Coubard |
1201:9b71aac42d14 | 693 | * Once the scanning parameters have been configured, scanning can be |
Vincent Coubard |
1201:9b71aac42d14 | 694 | * enabled by using startScan(). |
Vincent Coubard |
1201:9b71aac42d14 | 695 | * |
Vincent Coubard |
1201:9b71aac42d14 | 696 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 697 | * Gap::setScanWindow(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 698 | * ble.setScanWindow(window) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 699 | * ble.gap().setScanWindow(window). |
Vincent Coubard |
1201:9b71aac42d14 | 700 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 701 | ble_error_t setScanWindow(uint16_t window) { |
Vincent Coubard |
1201:9b71aac42d14 | 702 | return gap().setScanWindow(window); |
Vincent Coubard |
1201:9b71aac42d14 | 703 | } |
Vincent Coubard |
1201:9b71aac42d14 | 704 | |
Vincent Coubard |
1201:9b71aac42d14 | 705 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 706 | * Set up parameters for GAP scanning (observer mode). |
Vincent Coubard |
1201:9b71aac42d14 | 707 | * @param[in] timeout |
Vincent Coubard |
1201:9b71aac42d14 | 708 | * Scan timeout (in seconds) between 0x0001 and 0xFFFF; 0x0000 disables timeout. |
Vincent Coubard |
1201:9b71aac42d14 | 709 | * |
Vincent Coubard |
1201:9b71aac42d14 | 710 | * The scanning window divided by the interval determines the duty cycle for |
Vincent Coubard |
1201:9b71aac42d14 | 711 | * scanning. For example, if the interval is 100ms and the window is 10ms, |
Vincent Coubard |
1201:9b71aac42d14 | 712 | * then the controller will scan for 10 percent of the time. It is possible |
Vincent Coubard |
1201:9b71aac42d14 | 713 | * to have the interval and window set to the same value. In this case, |
Vincent Coubard |
1201:9b71aac42d14 | 714 | * scanning is continuous, with a change of scanning frequency once every |
Vincent Coubard |
1201:9b71aac42d14 | 715 | * interval. |
Vincent Coubard |
1201:9b71aac42d14 | 716 | * |
Vincent Coubard |
1201:9b71aac42d14 | 717 | * Once the scanning parameters have been configured, scanning can be |
Vincent Coubard |
1201:9b71aac42d14 | 718 | * enabled by using startScan(). |
Vincent Coubard |
1201:9b71aac42d14 | 719 | * |
Vincent Coubard |
1201:9b71aac42d14 | 720 | * @note The scan interval and window are recommendations to the BLE stack. |
Vincent Coubard |
1201:9b71aac42d14 | 721 | * |
Vincent Coubard |
1201:9b71aac42d14 | 722 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 723 | * Gap::setScanTimeout(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 724 | * ble.setScanTimeout(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 725 | * ble.gap().setScanTimeout(...). |
Vincent Coubard |
1201:9b71aac42d14 | 726 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 727 | ble_error_t setScanTimeout(uint16_t timeout) { |
Vincent Coubard |
1201:9b71aac42d14 | 728 | return gap().setScanTimeout(timeout); |
Vincent Coubard |
1201:9b71aac42d14 | 729 | } |
Vincent Coubard |
1201:9b71aac42d14 | 730 | |
Vincent Coubard |
1201:9b71aac42d14 | 731 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 732 | * Set up parameters for GAP scanning (observer mode). |
Vincent Coubard |
1201:9b71aac42d14 | 733 | * @param[in] activeScanning |
Vincent Coubard |
1201:9b71aac42d14 | 734 | * Set to True if active-scanning is required. This is used to fetch the |
Vincent Coubard |
1201:9b71aac42d14 | 735 | * scan response from a peer if possible. |
Vincent Coubard |
1201:9b71aac42d14 | 736 | * |
Vincent Coubard |
1201:9b71aac42d14 | 737 | * Once the scanning parameters have been configured, scanning can be |
Vincent Coubard |
1201:9b71aac42d14 | 738 | * enabled by using startScan(). |
Vincent Coubard |
1201:9b71aac42d14 | 739 | * |
Vincent Coubard |
1201:9b71aac42d14 | 740 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 741 | * Gap::setActiveScan(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 742 | * ble.setActiveScan(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 743 | * ble.gap().setActiveScanning(...). |
Vincent Coubard |
1201:9b71aac42d14 | 744 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 745 | void setActiveScan(bool activeScanning) { |
Vincent Coubard |
1201:9b71aac42d14 | 746 | gap().setActiveScanning(activeScanning); |
Vincent Coubard |
1201:9b71aac42d14 | 747 | } |
Vincent Coubard |
1201:9b71aac42d14 | 748 | |
Vincent Coubard |
1201:9b71aac42d14 | 749 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 750 | * Start scanning (Observer Procedure) based on the parameters currently in |
Vincent Coubard |
1201:9b71aac42d14 | 751 | * effect. |
Vincent Coubard |
1201:9b71aac42d14 | 752 | * |
Vincent Coubard |
1201:9b71aac42d14 | 753 | * @param[in] callback |
Vincent Coubard |
1201:9b71aac42d14 | 754 | * The application-specific callback to be invoked upon |
Vincent Coubard |
1201:9b71aac42d14 | 755 | * receiving every advertisement report. This can be passed in |
Vincent Coubard |
1201:9b71aac42d14 | 756 | * as NULL, in which case scanning may not be enabled at all. |
Vincent Coubard |
1201:9b71aac42d14 | 757 | * |
Vincent Coubard |
1201:9b71aac42d14 | 758 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 759 | * Gap::startScan(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 760 | * ble.startScan(callback) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 761 | * ble.gap().startScan(callback). |
Vincent Coubard |
1201:9b71aac42d14 | 762 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 763 | ble_error_t startScan(void (*callback)(const Gap::AdvertisementCallbackParams_t *params)) { |
Vincent Coubard |
1201:9b71aac42d14 | 764 | return gap().startScan(callback); |
Vincent Coubard |
1201:9b71aac42d14 | 765 | } |
Vincent Coubard |
1201:9b71aac42d14 | 766 | |
Vincent Coubard |
1201:9b71aac42d14 | 767 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 768 | * Same as above, but this takes an (object, method) pair for a callback. |
Vincent Coubard |
1201:9b71aac42d14 | 769 | * |
Vincent Coubard |
1201:9b71aac42d14 | 770 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 771 | * Gap::startScan(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 772 | * ble.startScan(callback) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 773 | * ble.gap().startScan(object, callback). |
Vincent Coubard |
1201:9b71aac42d14 | 774 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 775 | template<typename T> |
Vincent Coubard |
1201:9b71aac42d14 | 776 | ble_error_t startScan(T *object, void (T::*memberCallback)(const Gap::AdvertisementCallbackParams_t *params)); |
Vincent Coubard |
1201:9b71aac42d14 | 777 | |
Vincent Coubard |
1201:9b71aac42d14 | 778 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 779 | * Stop scanning. The current scanning parameters remain in effect. |
Vincent Coubard |
1201:9b71aac42d14 | 780 | * |
Vincent Coubard |
1201:9b71aac42d14 | 781 | * @retval BLE_ERROR_NONE if successfully stopped scanning procedure. |
Vincent Coubard |
1201:9b71aac42d14 | 782 | * |
Vincent Coubard |
1201:9b71aac42d14 | 783 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 784 | * Gap::stopScan(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 785 | * ble.stopScan() should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 786 | * ble.gap().stopScan(). |
Vincent Coubard |
1201:9b71aac42d14 | 787 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 788 | ble_error_t stopScan(void) { |
Vincent Coubard |
1201:9b71aac42d14 | 789 | return gap().stopScan(); |
Vincent Coubard |
1201:9b71aac42d14 | 790 | } |
Vincent Coubard |
1201:9b71aac42d14 | 791 | |
Vincent Coubard |
1201:9b71aac42d14 | 792 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 793 | * Create a connection (GAP Link Establishment). |
Vincent Coubard |
1201:9b71aac42d14 | 794 | * @param peerAddr |
Vincent Coubard |
1201:9b71aac42d14 | 795 | * 48-bit address, LSB format. |
Vincent Coubard |
1201:9b71aac42d14 | 796 | * @param peerAddrType |
Vincent Coubard |
1201:9b71aac42d14 | 797 | * Address type of the peer. |
Vincent Coubard |
1201:9b71aac42d14 | 798 | * @param connectionParams |
Vincent Coubard |
1201:9b71aac42d14 | 799 | * Connection parameters. |
Vincent Coubard |
1201:9b71aac42d14 | 800 | * @param scanParams |
Vincent Coubard |
1201:9b71aac42d14 | 801 | * Paramters to use while scanning for the peer. |
Vincent Coubard |
1201:9b71aac42d14 | 802 | * @return BLE_ERROR_NONE if connection establishment procedure is started |
Vincent Coubard |
1201:9b71aac42d14 | 803 | * successfully. The onConnection callback (if set) is invoked upon |
Vincent Coubard |
1201:9b71aac42d14 | 804 | * a connection event. |
Vincent Coubard |
1201:9b71aac42d14 | 805 | * |
Vincent Coubard |
1201:9b71aac42d14 | 806 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 807 | * Gap::connect(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 808 | * ble.connect(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 809 | * ble.gap().connect(...). |
Vincent Coubard |
1201:9b71aac42d14 | 810 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 811 | ble_error_t connect(const BLEProtocol::AddressBytes_t peerAddr, |
Vincent Coubard |
1201:9b71aac42d14 | 812 | BLEProtocol::AddressType_t peerAddrType = BLEProtocol::AddressType::RANDOM_STATIC, |
Vincent Coubard |
1201:9b71aac42d14 | 813 | const Gap::ConnectionParams_t *connectionParams = NULL, |
Vincent Coubard |
1201:9b71aac42d14 | 814 | const GapScanningParams *scanParams = NULL) { |
Vincent Coubard |
1201:9b71aac42d14 | 815 | return gap().connect(peerAddr, peerAddrType, connectionParams, scanParams); |
Vincent Coubard |
1201:9b71aac42d14 | 816 | } |
Vincent Coubard |
1201:9b71aac42d14 | 817 | |
Vincent Coubard |
1201:9b71aac42d14 | 818 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 819 | * This call initiates the disconnection procedure, and its completion is |
Vincent Coubard |
1201:9b71aac42d14 | 820 | * communicated to the application with an invocation of the |
Vincent Coubard |
1201:9b71aac42d14 | 821 | * onDisconnection callback. |
Vincent Coubard |
1201:9b71aac42d14 | 822 | * |
Vincent Coubard |
1201:9b71aac42d14 | 823 | * @param[in] connectionHandle |
Vincent Coubard |
1201:9b71aac42d14 | 824 | * @param[in] reason |
Vincent Coubard |
1201:9b71aac42d14 | 825 | * The reason for disconnection; sent back to the peer. |
Vincent Coubard |
1201:9b71aac42d14 | 826 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 827 | ble_error_t disconnect(Gap::Handle_t connectionHandle, Gap::DisconnectionReason_t reason) { |
Vincent Coubard |
1201:9b71aac42d14 | 828 | return gap().disconnect(connectionHandle, reason); |
Vincent Coubard |
1201:9b71aac42d14 | 829 | } |
Vincent Coubard |
1201:9b71aac42d14 | 830 | |
Vincent Coubard |
1201:9b71aac42d14 | 831 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 832 | * This call initiates the disconnection procedure, and its completion |
Vincent Coubard |
1201:9b71aac42d14 | 833 | * is communicated to the application with an invocation of the |
Vincent Coubard |
1201:9b71aac42d14 | 834 | * onDisconnection callback. |
Vincent Coubard |
1201:9b71aac42d14 | 835 | * |
Vincent Coubard |
1201:9b71aac42d14 | 836 | * @param reason |
Vincent Coubard |
1201:9b71aac42d14 | 837 | * The reason for disconnection; sent back to the peer. |
Vincent Coubard |
1201:9b71aac42d14 | 838 | * |
Vincent Coubard |
1201:9b71aac42d14 | 839 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 840 | * Gap::disconnect(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 841 | * ble.disconnect(reason) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 842 | * ble.gap().disconnect(reason). |
Vincent Coubard |
1201:9b71aac42d14 | 843 | * |
Vincent Coubard |
1201:9b71aac42d14 | 844 | * @note This version of disconnect() doesn't take a connection handle. It |
Vincent Coubard |
1201:9b71aac42d14 | 845 | * works reliably only for stacks that are limited to a single |
Vincent Coubard |
1201:9b71aac42d14 | 846 | * connection. |
Vincent Coubard |
1201:9b71aac42d14 | 847 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 848 | ble_error_t disconnect(Gap::DisconnectionReason_t reason) { |
Vincent Coubard |
1201:9b71aac42d14 | 849 | return gap().disconnect(reason); |
Vincent Coubard |
1201:9b71aac42d14 | 850 | } |
Vincent Coubard |
1201:9b71aac42d14 | 851 | |
Vincent Coubard |
1201:9b71aac42d14 | 852 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 853 | * Returns the current Gap state of the device using a bitmask that |
Vincent Coubard |
1201:9b71aac42d14 | 854 | * describes whether the device is advertising or connected. |
Vincent Coubard |
1201:9b71aac42d14 | 855 | * |
Vincent Coubard |
1201:9b71aac42d14 | 856 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 857 | * Gap::getState(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 858 | * ble.getGapState() should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 859 | * ble.gap().getState(). |
Vincent Coubard |
1201:9b71aac42d14 | 860 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 861 | Gap::GapState_t getGapState(void) const { |
Vincent Coubard |
1201:9b71aac42d14 | 862 | return gap().getState(); |
Vincent Coubard |
1201:9b71aac42d14 | 863 | } |
Vincent Coubard |
1201:9b71aac42d14 | 864 | |
Vincent Coubard |
1201:9b71aac42d14 | 865 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 866 | * Get the GAP peripheral's preferred connection parameters. These are the |
Vincent Coubard |
1201:9b71aac42d14 | 867 | * defaults that the peripheral would like to have in a connection. The |
Vincent Coubard |
1201:9b71aac42d14 | 868 | * choice of the connection parameters is eventually up to the central. |
Vincent Coubard |
1201:9b71aac42d14 | 869 | * |
Vincent Coubard |
1201:9b71aac42d14 | 870 | * @param[out] params |
Vincent Coubard |
1201:9b71aac42d14 | 871 | * The structure where the parameters will be stored. Memory |
Vincent Coubard |
1201:9b71aac42d14 | 872 | * for this is owned by the caller. |
Vincent Coubard |
1201:9b71aac42d14 | 873 | * |
Vincent Coubard |
1201:9b71aac42d14 | 874 | * @return BLE_ERROR_NONE if the parameters were successfully filled into |
Vincent Coubard |
1201:9b71aac42d14 | 875 | * the given structure pointed to by params. |
Vincent Coubard |
1201:9b71aac42d14 | 876 | * |
Vincent Coubard |
1201:9b71aac42d14 | 877 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 878 | * Gap::getPreferredConnectionParams(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 879 | * ble.getPreferredConnectionParams() should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 880 | * ble.gap().getPreferredConnectionParams(). |
Vincent Coubard |
1201:9b71aac42d14 | 881 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 882 | ble_error_t getPreferredConnectionParams(Gap::ConnectionParams_t *params) { |
Vincent Coubard |
1201:9b71aac42d14 | 883 | return gap().getPreferredConnectionParams(params); |
Vincent Coubard |
1201:9b71aac42d14 | 884 | } |
Vincent Coubard |
1201:9b71aac42d14 | 885 | |
Vincent Coubard |
1201:9b71aac42d14 | 886 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 887 | * Set the GAP peripheral's preferred connection parameters. These are the |
Vincent Coubard |
1201:9b71aac42d14 | 888 | * defaults that the peripheral would like to have in a connection. The |
Vincent Coubard |
1201:9b71aac42d14 | 889 | * choice of the connection parameters is eventually up to the central. |
Vincent Coubard |
1201:9b71aac42d14 | 890 | * |
Vincent Coubard |
1201:9b71aac42d14 | 891 | * @param[in] params |
Vincent Coubard |
1201:9b71aac42d14 | 892 | * The structure containing the desired parameters. |
Vincent Coubard |
1201:9b71aac42d14 | 893 | * |
Vincent Coubard |
1201:9b71aac42d14 | 894 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 895 | * Gap::setPreferredConnectionParams(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 896 | * ble.setPreferredConnectionParams() should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 897 | * ble.gap().setPreferredConnectionParams(). |
Vincent Coubard |
1201:9b71aac42d14 | 898 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 899 | ble_error_t setPreferredConnectionParams(const Gap::ConnectionParams_t *params) { |
Vincent Coubard |
1201:9b71aac42d14 | 900 | return gap().setPreferredConnectionParams(params); |
Vincent Coubard |
1201:9b71aac42d14 | 901 | } |
Vincent Coubard |
1201:9b71aac42d14 | 902 | |
Vincent Coubard |
1201:9b71aac42d14 | 903 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 904 | * Update connection parameters while in the peripheral role. |
Vincent Coubard |
1201:9b71aac42d14 | 905 | * @details In the peripheral role, this will send the corresponding L2CAP request to the connected peer and wait for |
Vincent Coubard |
1201:9b71aac42d14 | 906 | * the central to perform the procedure. |
Vincent Coubard |
1201:9b71aac42d14 | 907 | * @param[in] handle |
Vincent Coubard |
1201:9b71aac42d14 | 908 | * Connection Handle |
Vincent Coubard |
1201:9b71aac42d14 | 909 | * @param[in] params |
Vincent Coubard |
1201:9b71aac42d14 | 910 | * Pointer to desired connection parameters. If NULL is provided on a peripheral role, |
Vincent Coubard |
1201:9b71aac42d14 | 911 | * the parameters in the PPCP characteristic of the GAP service will be used instead. |
Vincent Coubard |
1201:9b71aac42d14 | 912 | * |
Vincent Coubard |
1201:9b71aac42d14 | 913 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 914 | * Gap::updateConnectionParams(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 915 | * ble.updateConnectionParams() should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 916 | * ble.gap().updateConnectionParams(). |
Vincent Coubard |
1201:9b71aac42d14 | 917 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 918 | ble_error_t updateConnectionParams(Gap::Handle_t handle, const Gap::ConnectionParams_t *params) { |
Vincent Coubard |
1201:9b71aac42d14 | 919 | return gap().updateConnectionParams(handle, params); |
Vincent Coubard |
1201:9b71aac42d14 | 920 | } |
Vincent Coubard |
1201:9b71aac42d14 | 921 | |
Vincent Coubard |
1201:9b71aac42d14 | 922 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 923 | * Set the device name characteristic in the Gap service. |
Vincent Coubard |
1201:9b71aac42d14 | 924 | * @param[in] deviceName |
Vincent Coubard |
1201:9b71aac42d14 | 925 | * The new value for the device-name. This is a UTF-8 encoded, <b>NULL-terminated</b> string. |
Vincent Coubard |
1201:9b71aac42d14 | 926 | * |
Vincent Coubard |
1201:9b71aac42d14 | 927 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 928 | * Gap::setDeviceName(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 929 | * ble.setDeviceName() should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 930 | * ble.gap().setDeviceName(). |
Vincent Coubard |
1201:9b71aac42d14 | 931 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 932 | ble_error_t setDeviceName(const uint8_t *deviceName) { |
Vincent Coubard |
1201:9b71aac42d14 | 933 | return gap().setDeviceName(deviceName); |
Vincent Coubard |
1201:9b71aac42d14 | 934 | } |
Vincent Coubard |
1201:9b71aac42d14 | 935 | |
Vincent Coubard |
1201:9b71aac42d14 | 936 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 937 | * Get the value of the device name characteristic in the Gap service. |
Vincent Coubard |
1201:9b71aac42d14 | 938 | * @param[out] deviceName |
Vincent Coubard |
1201:9b71aac42d14 | 939 | * Pointer to an empty buffer where the UTF-8 *non NULL- |
Vincent Coubard |
1201:9b71aac42d14 | 940 | * terminated* string will be placed. Set this |
Vincent Coubard |
1201:9b71aac42d14 | 941 | * value to NULL in order to obtain the deviceName-length |
Vincent Coubard |
1201:9b71aac42d14 | 942 | * from the 'length' parameter. |
Vincent Coubard |
1201:9b71aac42d14 | 943 | * |
Vincent Coubard |
1201:9b71aac42d14 | 944 | * @param[in,out] lengthP |
Vincent Coubard |
1201:9b71aac42d14 | 945 | * (on input) Length of the buffer pointed to by deviceName; |
Vincent Coubard |
1201:9b71aac42d14 | 946 | * (on output) the complete device name length (without the |
Vincent Coubard |
1201:9b71aac42d14 | 947 | * null terminator). |
Vincent Coubard |
1201:9b71aac42d14 | 948 | * |
Vincent Coubard |
1201:9b71aac42d14 | 949 | * @note If the device name is longer than the size of the supplied buffer, |
Vincent Coubard |
1201:9b71aac42d14 | 950 | * length will return the complete device name length, and not the |
Vincent Coubard |
1201:9b71aac42d14 | 951 | * number of bytes actually returned in deviceName. The application may |
Vincent Coubard |
1201:9b71aac42d14 | 952 | * use this information to retry with a suitable buffer size. |
Vincent Coubard |
1201:9b71aac42d14 | 953 | * |
Vincent Coubard |
1201:9b71aac42d14 | 954 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 955 | * Gap::getDeviceName(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 956 | * ble.getDeviceName() should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 957 | * ble.gap().getDeviceName(). |
Vincent Coubard |
1201:9b71aac42d14 | 958 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 959 | ble_error_t getDeviceName(uint8_t *deviceName, unsigned *lengthP) { |
Vincent Coubard |
1201:9b71aac42d14 | 960 | return gap().getDeviceName(deviceName, lengthP); |
Vincent Coubard |
1201:9b71aac42d14 | 961 | } |
Vincent Coubard |
1201:9b71aac42d14 | 962 | |
Vincent Coubard |
1201:9b71aac42d14 | 963 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 964 | * Set the appearance characteristic in the Gap service. |
Vincent Coubard |
1201:9b71aac42d14 | 965 | * @param[in] appearance |
Vincent Coubard |
1201:9b71aac42d14 | 966 | * The new value for the device-appearance. |
Vincent Coubard |
1201:9b71aac42d14 | 967 | * |
Vincent Coubard |
1201:9b71aac42d14 | 968 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 969 | * Gap::setAppearance(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 970 | * ble.setAppearance() should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 971 | * ble.gap().setAppearance(). |
Vincent Coubard |
1201:9b71aac42d14 | 972 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 973 | ble_error_t setAppearance(GapAdvertisingData::Appearance appearance) { |
Vincent Coubard |
1201:9b71aac42d14 | 974 | return gap().setAppearance(appearance); |
Vincent Coubard |
1201:9b71aac42d14 | 975 | } |
Vincent Coubard |
1201:9b71aac42d14 | 976 | |
Vincent Coubard |
1201:9b71aac42d14 | 977 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 978 | * Get the appearance characteristic in the Gap service. |
Vincent Coubard |
1201:9b71aac42d14 | 979 | * @param[out] appearanceP |
Vincent Coubard |
1201:9b71aac42d14 | 980 | * The new value for the device-appearance. |
Vincent Coubard |
1201:9b71aac42d14 | 981 | * |
Vincent Coubard |
1201:9b71aac42d14 | 982 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 983 | * Gap::getAppearance(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 984 | * ble.getAppearance() should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 985 | * ble.gap().getAppearance(). |
Vincent Coubard |
1201:9b71aac42d14 | 986 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 987 | ble_error_t getAppearance(GapAdvertisingData::Appearance *appearanceP) { |
Vincent Coubard |
1201:9b71aac42d14 | 988 | return gap().getAppearance(appearanceP); |
Vincent Coubard |
1201:9b71aac42d14 | 989 | } |
Vincent Coubard |
1201:9b71aac42d14 | 990 | |
Vincent Coubard |
1201:9b71aac42d14 | 991 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 992 | * Set the radio's transmit power. |
Vincent Coubard |
1201:9b71aac42d14 | 993 | * @param[in] txPower Radio transmit power in dBm. |
Vincent Coubard |
1201:9b71aac42d14 | 994 | * |
Vincent Coubard |
1201:9b71aac42d14 | 995 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 996 | * Gap::setTxPower(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 997 | * ble.setTxPower() should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 998 | * ble.gap().setTxPower(). |
Vincent Coubard |
1201:9b71aac42d14 | 999 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1000 | ble_error_t setTxPower(int8_t txPower) { |
Vincent Coubard |
1201:9b71aac42d14 | 1001 | return gap().setTxPower(txPower); |
Vincent Coubard |
1201:9b71aac42d14 | 1002 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1003 | |
Vincent Coubard |
1201:9b71aac42d14 | 1004 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1005 | * Query the underlying stack for permitted arguments for setTxPower(). |
Vincent Coubard |
1201:9b71aac42d14 | 1006 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1007 | * @param[out] valueArrayPP |
Vincent Coubard |
1201:9b71aac42d14 | 1008 | * Out parameter to receive the immutable array of Tx values. |
Vincent Coubard |
1201:9b71aac42d14 | 1009 | * @param[out] countP |
Vincent Coubard |
1201:9b71aac42d14 | 1010 | * Out parameter to receive the array's size. |
Vincent Coubard |
1201:9b71aac42d14 | 1011 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1012 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1013 | * Gap::getPermittedTxPowerValues(). A former call to |
Vincent Coubard |
1201:9b71aac42d14 | 1014 | * ble.getPermittedTxPowerValues() should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1015 | * ble.gap().getPermittedTxPowerValues(). |
Vincent Coubard |
1201:9b71aac42d14 | 1016 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1017 | void getPermittedTxPowerValues(const int8_t **valueArrayPP, size_t *countP) { |
Vincent Coubard |
1201:9b71aac42d14 | 1018 | gap().getPermittedTxPowerValues(valueArrayPP, countP); |
Vincent Coubard |
1201:9b71aac42d14 | 1019 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1020 | |
Vincent Coubard |
1201:9b71aac42d14 | 1021 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1022 | * Add a service declaration to the local server ATT table. Also add the |
Vincent Coubard |
1201:9b71aac42d14 | 1023 | * characteristics contained within. |
Vincent Coubard |
1201:9b71aac42d14 | 1024 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1025 | * @deprecated You should use the parallel API from GattServer directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1026 | * GattServer::addService(). A former call |
Vincent Coubard |
1201:9b71aac42d14 | 1027 | * to ble.addService() should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1028 | * ble.gattServer().addService(). |
Vincent Coubard |
1201:9b71aac42d14 | 1029 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1030 | ble_error_t addService(GattService &service) { |
Vincent Coubard |
1201:9b71aac42d14 | 1031 | return gattServer().addService(service); |
Vincent Coubard |
1201:9b71aac42d14 | 1032 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1033 | |
Vincent Coubard |
1201:9b71aac42d14 | 1034 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1035 | * Read the value of a characteristic from the local GattServer. |
Vincent Coubard |
1201:9b71aac42d14 | 1036 | * @param[in] attributeHandle |
Vincent Coubard |
1201:9b71aac42d14 | 1037 | * Attribute handle for the value attribute of the characteristic. |
Vincent Coubard |
1201:9b71aac42d14 | 1038 | * @param[out] buffer |
Vincent Coubard |
1201:9b71aac42d14 | 1039 | * A buffer to hold the value being read. |
Vincent Coubard |
1201:9b71aac42d14 | 1040 | * @param[in,out] lengthP |
Vincent Coubard |
1201:9b71aac42d14 | 1041 | * Length of the buffer being supplied. If the attribute |
Vincent Coubard |
1201:9b71aac42d14 | 1042 | * value is longer than the size of the supplied buffer, |
Vincent Coubard |
1201:9b71aac42d14 | 1043 | * this variable will return the total attribute value length |
Vincent Coubard |
1201:9b71aac42d14 | 1044 | * (excluding offset). The application may use this |
Vincent Coubard |
1201:9b71aac42d14 | 1045 | * information to allocate a suitable buffer size. |
Vincent Coubard |
1201:9b71aac42d14 | 1046 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1047 | * @return BLE_ERROR_NONE if a value was read successfully into the buffer. |
Vincent Coubard |
1201:9b71aac42d14 | 1048 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1049 | * @deprecated You should use the parallel API from GattServer directly, |
Vincent Coubard |
1201:9b71aac42d14 | 1050 | * GattServer::read(GattAttribute::Handle_t,uint8_t,uint16_t). A former call |
Vincent Coubard |
1201:9b71aac42d14 | 1051 | * to ble.readCharacteristicValue() should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1052 | * ble.gattServer().read(). |
Vincent Coubard |
1201:9b71aac42d14 | 1053 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1054 | ble_error_t readCharacteristicValue(GattAttribute::Handle_t attributeHandle, uint8_t *buffer, uint16_t *lengthP) { |
Vincent Coubard |
1201:9b71aac42d14 | 1055 | return gattServer().read(attributeHandle, buffer, lengthP); |
Vincent Coubard |
1201:9b71aac42d14 | 1056 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1057 | |
Vincent Coubard |
1201:9b71aac42d14 | 1058 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1059 | * Read the value of a characteristic from the local GattServer. |
Vincent Coubard |
1201:9b71aac42d14 | 1060 | * @param[in] connectionHandle |
Vincent Coubard |
1201:9b71aac42d14 | 1061 | * Connection Handle. |
Vincent Coubard |
1201:9b71aac42d14 | 1062 | * @param[in] attributeHandle |
Vincent Coubard |
1201:9b71aac42d14 | 1063 | * Attribute handle for the value attribute of the characteristic. |
Vincent Coubard |
1201:9b71aac42d14 | 1064 | * @param[out] buffer |
Vincent Coubard |
1201:9b71aac42d14 | 1065 | * A buffer to hold the value being read. |
Vincent Coubard |
1201:9b71aac42d14 | 1066 | * @param[in,out] lengthP |
Vincent Coubard |
1201:9b71aac42d14 | 1067 | * Length of the buffer being supplied. If the attribute |
Vincent Coubard |
1201:9b71aac42d14 | 1068 | * value is longer than the size of the supplied buffer, |
Vincent Coubard |
1201:9b71aac42d14 | 1069 | * this variable will return the total attribute value length |
Vincent Coubard |
1201:9b71aac42d14 | 1070 | * (excluding offset). The application may use this |
Vincent Coubard |
1201:9b71aac42d14 | 1071 | * information to allocate a suitable buffer size. |
Vincent Coubard |
1201:9b71aac42d14 | 1072 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1073 | * @return BLE_ERROR_NONE if a value was read successfully into the buffer. |
Vincent Coubard |
1201:9b71aac42d14 | 1074 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1075 | * @note This API is a version of the above, with an additional connection handle |
Vincent Coubard |
1201:9b71aac42d14 | 1076 | * parameter to allow fetches for connection-specific multivalued |
Vincent Coubard |
1201:9b71aac42d14 | 1077 | * attributes (such as the CCCDs). |
Vincent Coubard |
1201:9b71aac42d14 | 1078 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1079 | * @deprecated You should use the parallel API from GattServer directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1080 | * GattServer::read(Gap::Handle_t,GattAttribute::Handle_t,uint8_t,uint16_t). |
Vincent Coubard |
1201:9b71aac42d14 | 1081 | * A former call to ble.readCharacteristicValue() should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1082 | * ble.gattServer().read(). |
Vincent Coubard |
1201:9b71aac42d14 | 1083 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1084 | ble_error_t readCharacteristicValue(Gap::Handle_t connectionHandle, GattAttribute::Handle_t attributeHandle, uint8_t *buffer, uint16_t *lengthP) { |
Vincent Coubard |
1201:9b71aac42d14 | 1085 | return gattServer().read(connectionHandle, attributeHandle, buffer, lengthP); |
Vincent Coubard |
1201:9b71aac42d14 | 1086 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1087 | |
Vincent Coubard |
1201:9b71aac42d14 | 1088 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1089 | * Update the value of a characteristic on the local GattServer. |
Vincent Coubard |
1201:9b71aac42d14 | 1090 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1091 | * @param[in] attributeHandle |
Vincent Coubard |
1201:9b71aac42d14 | 1092 | * Handle for the value attribute of the characteristic. |
Vincent Coubard |
1201:9b71aac42d14 | 1093 | * @param[in] value |
Vincent Coubard |
1201:9b71aac42d14 | 1094 | * A pointer to a buffer holding the new value. |
Vincent Coubard |
1201:9b71aac42d14 | 1095 | * @param[in] size |
Vincent Coubard |
1201:9b71aac42d14 | 1096 | * Size of the new value (in bytes). |
Vincent Coubard |
1201:9b71aac42d14 | 1097 | * @param[in] localOnly |
Vincent Coubard |
1201:9b71aac42d14 | 1098 | * Should this update be kept on the local |
Vincent Coubard |
1201:9b71aac42d14 | 1099 | * GattServer regardless of the state of the |
Vincent Coubard |
1201:9b71aac42d14 | 1100 | * notify/indicate flag in the CCCD for this |
Vincent Coubard |
1201:9b71aac42d14 | 1101 | * characteristic? If set to true, no notification |
Vincent Coubard |
1201:9b71aac42d14 | 1102 | * or indication is generated. |
Vincent Coubard |
1201:9b71aac42d14 | 1103 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1104 | * @return BLE_ERROR_NONE if we have successfully set the value of the attribute. |
Vincent Coubard |
1201:9b71aac42d14 | 1105 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1106 | * @deprecated You should use the parallel API from GattServer directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1107 | * GattServer::write(GattAttribute::Handle_t,const uint8_t,uint16_t,bool). |
Vincent Coubard |
1201:9b71aac42d14 | 1108 | * A former call to ble.updateCharacteristicValue() should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1109 | * ble.gattServer().write(). |
Vincent Coubard |
1201:9b71aac42d14 | 1110 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1111 | ble_error_t updateCharacteristicValue(GattAttribute::Handle_t attributeHandle, |
Vincent Coubard |
1201:9b71aac42d14 | 1112 | const uint8_t *value, |
Vincent Coubard |
1201:9b71aac42d14 | 1113 | uint16_t size, |
Vincent Coubard |
1201:9b71aac42d14 | 1114 | bool localOnly = false) { |
Vincent Coubard |
1201:9b71aac42d14 | 1115 | return gattServer().write(attributeHandle, value, size, localOnly); |
Vincent Coubard |
1201:9b71aac42d14 | 1116 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1117 | |
Vincent Coubard |
1201:9b71aac42d14 | 1118 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1119 | * Update the value of a characteristic on the local GattServer. A version |
Vincent Coubard |
1201:9b71aac42d14 | 1120 | * of the above, with a connection handle parameter to allow updates |
Vincent Coubard |
1201:9b71aac42d14 | 1121 | * for connection-specific multivalued attributes (such as the CCCDs). |
Vincent Coubard |
1201:9b71aac42d14 | 1122 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1123 | * @param[in] connectionHandle |
Vincent Coubard |
1201:9b71aac42d14 | 1124 | * Connection Handle. |
Vincent Coubard |
1201:9b71aac42d14 | 1125 | * @param[in] attributeHandle |
Vincent Coubard |
1201:9b71aac42d14 | 1126 | * Handle for the value attribute of the Characteristic. |
Vincent Coubard |
1201:9b71aac42d14 | 1127 | * @param[in] value |
Vincent Coubard |
1201:9b71aac42d14 | 1128 | * A pointer to a buffer holding the new value. |
Vincent Coubard |
1201:9b71aac42d14 | 1129 | * @param[in] size |
Vincent Coubard |
1201:9b71aac42d14 | 1130 | * Size of the new value (in bytes). |
Vincent Coubard |
1201:9b71aac42d14 | 1131 | * @param[in] localOnly |
Vincent Coubard |
1201:9b71aac42d14 | 1132 | * Should this update be kept on the local |
Vincent Coubard |
1201:9b71aac42d14 | 1133 | * GattServer regardless of the state of the |
Vincent Coubard |
1201:9b71aac42d14 | 1134 | * notify/indicate flag in the CCCD for this |
Vincent Coubard |
1201:9b71aac42d14 | 1135 | * Characteristic? If set to true, no notification |
Vincent Coubard |
1201:9b71aac42d14 | 1136 | * or indication is generated. |
Vincent Coubard |
1201:9b71aac42d14 | 1137 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1138 | * @return BLE_ERROR_NONE if we have successfully set the value of the attribute. |
Vincent Coubard |
1201:9b71aac42d14 | 1139 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1140 | * @deprecated You should use the parallel API from GattServer directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1141 | * GattServer::write(Gap::Handle_t,GattAttribute::Handle_t,const uint8_t,uint16_t,bool). |
Vincent Coubard |
1201:9b71aac42d14 | 1142 | * A former call to ble.updateCharacteristicValue() should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1143 | * ble.gattServer().write(). |
Vincent Coubard |
1201:9b71aac42d14 | 1144 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1145 | ble_error_t updateCharacteristicValue(Gap::Handle_t connectionHandle, |
Vincent Coubard |
1201:9b71aac42d14 | 1146 | GattAttribute::Handle_t attributeHandle, |
Vincent Coubard |
1201:9b71aac42d14 | 1147 | const uint8_t *value, |
Vincent Coubard |
1201:9b71aac42d14 | 1148 | uint16_t size, |
Vincent Coubard |
1201:9b71aac42d14 | 1149 | bool localOnly = false) { |
Vincent Coubard |
1201:9b71aac42d14 | 1150 | return gattServer().write(connectionHandle, attributeHandle, value, size, localOnly); |
Vincent Coubard |
1201:9b71aac42d14 | 1151 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1152 | |
Vincent Coubard |
1201:9b71aac42d14 | 1153 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1154 | * Enable the BLE stack's Security Manager. The Security Manager implements |
Vincent Coubard |
1201:9b71aac42d14 | 1155 | * the cryptographic algorithms and protocol exchanges that allow two |
Vincent Coubard |
1201:9b71aac42d14 | 1156 | * devices to securely exchange data and privately detect each other. |
Vincent Coubard |
1201:9b71aac42d14 | 1157 | * Calling this API is a prerequisite for encryption and pairing (bonding). |
Vincent Coubard |
1201:9b71aac42d14 | 1158 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1159 | * @param[in] enableBonding Allow for bonding. |
Vincent Coubard |
1201:9b71aac42d14 | 1160 | * @param[in] requireMITM Require protection against man-in-the-middle attacks. |
Vincent Coubard |
1201:9b71aac42d14 | 1161 | * @param[in] iocaps To specify the I/O capabilities of this peripheral, |
Vincent Coubard |
1201:9b71aac42d14 | 1162 | * such as availability of a display or keyboard, to |
Vincent Coubard |
1201:9b71aac42d14 | 1163 | * support out-of-band exchanges of security data. |
Vincent Coubard |
1201:9b71aac42d14 | 1164 | * @param[in] passkey To specify a static passkey. |
Vincent Coubard |
1201:9b71aac42d14 | 1165 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1166 | * @return BLE_ERROR_NONE on success. |
Vincent Coubard |
1201:9b71aac42d14 | 1167 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1168 | * @deprecated You should use the parallel API from SecurityManager directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1169 | * SecurityManager.init(). A former |
Vincent Coubard |
1201:9b71aac42d14 | 1170 | * call to ble.initializeSecurity(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1171 | * ble.securityManager().init(...). |
Vincent Coubard |
1201:9b71aac42d14 | 1172 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1173 | ble_error_t initializeSecurity(bool enableBonding = true, |
Vincent Coubard |
1201:9b71aac42d14 | 1174 | bool requireMITM = true, |
Vincent Coubard |
1201:9b71aac42d14 | 1175 | SecurityManager::SecurityIOCapabilities_t iocaps = SecurityManager::IO_CAPS_NONE, |
Vincent Coubard |
1201:9b71aac42d14 | 1176 | const SecurityManager::Passkey_t passkey = NULL) { |
Vincent Coubard |
1201:9b71aac42d14 | 1177 | return securityManager().init(enableBonding, requireMITM, iocaps, passkey); |
Vincent Coubard |
1201:9b71aac42d14 | 1178 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1179 | |
Vincent Coubard |
1201:9b71aac42d14 | 1180 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1181 | * Get the security status of a connection. |
Vincent Coubard |
1201:9b71aac42d14 | 1182 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1183 | * @param[in] connectionHandle Handle to identify the connection. |
Vincent Coubard |
1201:9b71aac42d14 | 1184 | * @param[out] securityStatusP Security status. |
Vincent Coubard |
1201:9b71aac42d14 | 1185 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1186 | * @return BLE_SUCCESS or appropriate error code indicating the reason of failure. |
Vincent Coubard |
1201:9b71aac42d14 | 1187 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1188 | * @deprecated You should use the parallel API from SecurityManager directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1189 | * SecurityManager::getLinkSecurity(). A former |
Vincent Coubard |
1201:9b71aac42d14 | 1190 | * call to ble.getLinkSecurity(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1191 | * ble.securityManager().getLinkSecurity(...). |
Vincent Coubard |
1201:9b71aac42d14 | 1192 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1193 | ble_error_t getLinkSecurity(Gap::Handle_t connectionHandle, SecurityManager::LinkSecurityStatus_t *securityStatusP) { |
Vincent Coubard |
1201:9b71aac42d14 | 1194 | return securityManager().getLinkSecurity(connectionHandle, securityStatusP); |
Vincent Coubard |
1201:9b71aac42d14 | 1195 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1196 | |
Vincent Coubard |
1201:9b71aac42d14 | 1197 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1198 | * Delete all peer device context and all related bonding information from |
Vincent Coubard |
1201:9b71aac42d14 | 1199 | * the database within the security manager. |
Vincent Coubard |
1201:9b71aac42d14 | 1200 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1201 | * @retval BLE_ERROR_NONE On success; else returns an error code indicating the reason for the failure. |
Vincent Coubard |
1201:9b71aac42d14 | 1202 | * @retval BLE_ERROR_INVALID_STATE If the API is called without module initialization or |
Vincent Coubard |
1201:9b71aac42d14 | 1203 | * application registration. |
Vincent Coubard |
1201:9b71aac42d14 | 1204 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1205 | * @deprecated You should use the parallel API from SecurityManager directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1206 | * SecurityManager::purgeAllBondingState(). A former |
Vincent Coubard |
1201:9b71aac42d14 | 1207 | * call to ble.purgeAllBondingState() should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1208 | * ble.securityManager().purgeAllBondingState(). |
Vincent Coubard |
1201:9b71aac42d14 | 1209 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1210 | ble_error_t purgeAllBondingState(void) { |
Vincent Coubard |
1201:9b71aac42d14 | 1211 | return securityManager().purgeAllBondingState(); |
Vincent Coubard |
1201:9b71aac42d14 | 1212 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1213 | |
Vincent Coubard |
1201:9b71aac42d14 | 1214 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1215 | * Set up a callback for timeout events. Refer to Gap::TimeoutSource_t for |
Vincent Coubard |
1201:9b71aac42d14 | 1216 | * possible event types. |
Vincent Coubard |
1201:9b71aac42d14 | 1217 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1218 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1219 | * Gap::onTimeout(). A former call |
Vincent Coubard |
1201:9b71aac42d14 | 1220 | * to ble.onTimeout(callback) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1221 | * ble.gap().onTimeout(callback). |
Vincent Coubard |
1201:9b71aac42d14 | 1222 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1223 | void onTimeout(Gap::TimeoutEventCallback_t timeoutCallback) { |
Vincent Coubard |
1201:9b71aac42d14 | 1224 | gap().onTimeout(timeoutCallback); |
Vincent Coubard |
1201:9b71aac42d14 | 1225 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1226 | |
Vincent Coubard |
1201:9b71aac42d14 | 1227 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1228 | * Set up a callback for connection events. Refer to Gap::ConnectionEventCallback_t. |
Vincent Coubard |
1201:9b71aac42d14 | 1229 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1230 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1231 | * Gap::onConnection(). A former call |
Vincent Coubard |
1201:9b71aac42d14 | 1232 | * to ble.onConnection(callback) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1233 | * ble.gap().onConnection(callback). |
Vincent Coubard |
1201:9b71aac42d14 | 1234 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1235 | void onConnection(Gap::ConnectionEventCallback_t connectionCallback) { |
Vincent Coubard |
1201:9b71aac42d14 | 1236 | gap().onConnection(connectionCallback); |
Vincent Coubard |
1201:9b71aac42d14 | 1237 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1238 | |
Vincent Coubard |
1201:9b71aac42d14 | 1239 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1240 | * Append to a chain of callbacks to be invoked upon GAP disconnection. |
Vincent Coubard |
1201:9b71aac42d14 | 1241 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1242 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1243 | * Gap::onDisconnection(). A former call |
Vincent Coubard |
1201:9b71aac42d14 | 1244 | * to ble.onDisconnection(callback) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1245 | * ble.gap().onDisconnection(callback). |
Vincent Coubard |
1201:9b71aac42d14 | 1246 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1247 | void onDisconnection(Gap::DisconnectionEventCallback_t disconnectionCallback) { |
Vincent Coubard |
1201:9b71aac42d14 | 1248 | gap().onDisconnection(disconnectionCallback); |
Vincent Coubard |
1201:9b71aac42d14 | 1249 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1250 | |
Vincent Coubard |
1201:9b71aac42d14 | 1251 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1252 | * The same as onDisconnection(), but allows an object reference and member function |
Vincent Coubard |
1201:9b71aac42d14 | 1253 | * to be added to the chain of callbacks. |
Vincent Coubard |
1201:9b71aac42d14 | 1254 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1255 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1256 | * Gap::onDisconnection(). A former call |
Vincent Coubard |
1201:9b71aac42d14 | 1257 | * to ble.onDisconnection(callback) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1258 | * ble.gap().onDisconnection(callback). |
Vincent Coubard |
1201:9b71aac42d14 | 1259 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1260 | template<typename T> |
Vincent Coubard |
1201:9b71aac42d14 | 1261 | void onDisconnection(T *tptr, void (T::*mptr)(const Gap::DisconnectionCallbackParams_t*)) { |
Vincent Coubard |
1201:9b71aac42d14 | 1262 | gap().onDisconnection(tptr, mptr); |
Vincent Coubard |
1201:9b71aac42d14 | 1263 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1264 | |
Vincent Coubard |
1201:9b71aac42d14 | 1265 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1266 | * Radio Notification is a feature that enables ACTIVE and INACTIVE |
Vincent Coubard |
1201:9b71aac42d14 | 1267 | * (nACTIVE) signals from the stack. These notify the application when the |
Vincent Coubard |
1201:9b71aac42d14 | 1268 | * radio is in use. The signal is sent using software interrupt. |
Vincent Coubard |
1201:9b71aac42d14 | 1269 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1270 | * The ACTIVE signal is sent before the radio event starts. The nACTIVE |
Vincent Coubard |
1201:9b71aac42d14 | 1271 | * signal is sent at the end of the radio event. These signals can be used |
Vincent Coubard |
1201:9b71aac42d14 | 1272 | * by the application programmer to synchronize application logic with radio |
Vincent Coubard |
1201:9b71aac42d14 | 1273 | * activity. For example, the ACTIVE signal can be used to shut off external |
Vincent Coubard |
1201:9b71aac42d14 | 1274 | * devices to manage peak current drawn during periods when the radio is on, |
Vincent Coubard |
1201:9b71aac42d14 | 1275 | * or to trigger sensor data collection for transmission in the radio event. |
Vincent Coubard |
1201:9b71aac42d14 | 1276 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1277 | * @param callback |
Vincent Coubard |
1201:9b71aac42d14 | 1278 | * The application handler to be invoked in response to a radio |
Vincent Coubard |
1201:9b71aac42d14 | 1279 | * ACTIVE/INACTIVE event. |
Vincent Coubard |
1201:9b71aac42d14 | 1280 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1281 | * @deprecated You should use the parallel API from Gap directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1282 | * Gap::onRadioNotification(). A former call |
Vincent Coubard |
1201:9b71aac42d14 | 1283 | * to ble.onRadioNotification(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1284 | * ble.gap().onRadioNotification(...). |
Vincent Coubard |
1201:9b71aac42d14 | 1285 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1286 | void onRadioNotification(void (*callback)(bool)) { |
Vincent Coubard |
1201:9b71aac42d14 | 1287 | gap().onRadioNotification(callback); |
Vincent Coubard |
1201:9b71aac42d14 | 1288 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1289 | |
Vincent Coubard |
1201:9b71aac42d14 | 1290 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1291 | * Add a callback for the GATT event DATA_SENT (which is triggered when |
Vincent Coubard |
1201:9b71aac42d14 | 1292 | * updates are sent out by GATT in the form of notifications). |
Vincent Coubard |
1201:9b71aac42d14 | 1293 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1294 | * @note It is possible to chain together multiple onDataSent callbacks |
Vincent Coubard |
1201:9b71aac42d14 | 1295 | * (potentially from different modules of an application) to receive updates |
Vincent Coubard |
1201:9b71aac42d14 | 1296 | * to characteristics. |
Vincent Coubard |
1201:9b71aac42d14 | 1297 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1298 | * @note It is also possible to set up a callback into a member function of |
Vincent Coubard |
1201:9b71aac42d14 | 1299 | * some object. |
Vincent Coubard |
1201:9b71aac42d14 | 1300 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1301 | * @deprecated You should use the parallel API from GattServer directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1302 | * GattServer::onDataSent(). A former call |
Vincent Coubard |
1201:9b71aac42d14 | 1303 | * to ble.onDataSent(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1304 | * ble.gattServer().onDataSent(...). |
Vincent Coubard |
1201:9b71aac42d14 | 1305 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1306 | void onDataSent(void (*callback)(unsigned count)) { |
Vincent Coubard |
1201:9b71aac42d14 | 1307 | gattServer().onDataSent(callback); |
Vincent Coubard |
1201:9b71aac42d14 | 1308 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1309 | |
Vincent Coubard |
1201:9b71aac42d14 | 1310 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1311 | * The same as onDataSent(), but allows an object reference and member function |
Vincent Coubard |
1201:9b71aac42d14 | 1312 | * to be added to the chain of callbacks. |
Vincent Coubard |
1201:9b71aac42d14 | 1313 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1314 | * @deprecated You should use the parallel API from GattServer directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1315 | * GattServer::onDataSent(). A former call |
Vincent Coubard |
1201:9b71aac42d14 | 1316 | * to ble.onDataSent(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1317 | * ble.gattServer().onDataSent(...). |
Vincent Coubard |
1201:9b71aac42d14 | 1318 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1319 | template <typename T> void onDataSent(T * objPtr, void (T::*memberPtr)(unsigned count)) { |
Vincent Coubard |
1201:9b71aac42d14 | 1320 | gattServer().onDataSent(objPtr, memberPtr); |
Vincent Coubard |
1201:9b71aac42d14 | 1321 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1322 | |
Vincent Coubard |
1201:9b71aac42d14 | 1323 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1324 | * Set up a callback for when an attribute has its value updated by or at the |
Vincent Coubard |
1201:9b71aac42d14 | 1325 | * connected peer. For a peripheral, this callback is triggered when the local |
Vincent Coubard |
1201:9b71aac42d14 | 1326 | * GATT server has an attribute updated by a write command from the peer. |
Vincent Coubard |
1201:9b71aac42d14 | 1327 | * For a Central, this callback is triggered when a response is received for |
Vincent Coubard |
1201:9b71aac42d14 | 1328 | * a write request. |
Vincent Coubard |
1201:9b71aac42d14 | 1329 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1330 | * @note It is possible to chain together multiple onDataWritten callbacks |
Vincent Coubard |
1201:9b71aac42d14 | 1331 | * (potentially from different modules of an application) to receive updates |
Vincent Coubard |
1201:9b71aac42d14 | 1332 | * to characteristics. Many services, such as DFU and UART, add their own |
Vincent Coubard |
1201:9b71aac42d14 | 1333 | * onDataWritten callbacks behind the scenes to trap interesting events. |
Vincent Coubard |
1201:9b71aac42d14 | 1334 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1335 | * @note It is also possible to set up a callback into a member function of |
Vincent Coubard |
1201:9b71aac42d14 | 1336 | * some object. |
Vincent Coubard |
1201:9b71aac42d14 | 1337 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1338 | * @deprecated You should use the parallel API from GattServer directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1339 | * GattServer::onDataWritten(). A former call |
Vincent Coubard |
1201:9b71aac42d14 | 1340 | * to ble.onDataWritten(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1341 | * ble.gattServer().onDataWritten(...). |
Vincent Coubard |
1201:9b71aac42d14 | 1342 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1343 | void onDataWritten(void (*callback)(const GattWriteCallbackParams *eventDataP)) { |
Vincent Coubard |
1201:9b71aac42d14 | 1344 | gattServer().onDataWritten(callback); |
Vincent Coubard |
1201:9b71aac42d14 | 1345 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1346 | |
Vincent Coubard |
1201:9b71aac42d14 | 1347 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1348 | * The same as onDataWritten(), but allows an object reference and member function |
Vincent Coubard |
1201:9b71aac42d14 | 1349 | * to be added to the chain of callbacks. |
Vincent Coubard |
1201:9b71aac42d14 | 1350 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1351 | * @deprecated You should use the parallel API from GattServer directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1352 | * GattServer::onDataWritten(). A former call |
Vincent Coubard |
1201:9b71aac42d14 | 1353 | * to ble.onDataWritten(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1354 | * ble.gattServer().onDataWritten(...). |
Vincent Coubard |
1201:9b71aac42d14 | 1355 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1356 | template <typename T> void onDataWritten(T * objPtr, void (T::*memberPtr)(const GattWriteCallbackParams *context)) { |
Vincent Coubard |
1201:9b71aac42d14 | 1357 | gattServer().onDataWritten(objPtr, memberPtr); |
Vincent Coubard |
1201:9b71aac42d14 | 1358 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1359 | |
Vincent Coubard |
1201:9b71aac42d14 | 1360 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1361 | * Set up a callback to be invoked on the peripheral when an attribute is |
Vincent Coubard |
1201:9b71aac42d14 | 1362 | * being read by a remote client. |
Vincent Coubard |
1201:9b71aac42d14 | 1363 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1364 | * @note This functionality may not be available on all underlying stacks. |
Vincent Coubard |
1201:9b71aac42d14 | 1365 | * You could use GattCharacteristic::setReadAuthorizationCallback() as an |
Vincent Coubard |
1201:9b71aac42d14 | 1366 | * alternative. |
Vincent Coubard |
1201:9b71aac42d14 | 1367 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1368 | * @note It is possible to chain together multiple onDataRead callbacks |
Vincent Coubard |
1201:9b71aac42d14 | 1369 | * (potentially from different modules of an application) to receive updates |
Vincent Coubard |
1201:9b71aac42d14 | 1370 | * to characteristics. Services may add their own onDataRead callbacks |
Vincent Coubard |
1201:9b71aac42d14 | 1371 | * behind the scenes to trap interesting events. |
Vincent Coubard |
1201:9b71aac42d14 | 1372 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1373 | * @note It is also possible to set up a callback into a member function of |
Vincent Coubard |
1201:9b71aac42d14 | 1374 | * some object. |
Vincent Coubard |
1201:9b71aac42d14 | 1375 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1376 | * @return BLE_ERROR_NOT_IMPLEMENTED if this functionality isn't available; |
Vincent Coubard |
1201:9b71aac42d14 | 1377 | * else BLE_ERROR_NONE. |
Vincent Coubard |
1201:9b71aac42d14 | 1378 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1379 | * @deprecated You should use the parallel API from GattServer directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1380 | * GattServer::onDataRead(). A former call |
Vincent Coubard |
1201:9b71aac42d14 | 1381 | * to ble.onDataRead(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1382 | * ble.gattServer().onDataRead(...). |
Vincent Coubard |
1201:9b71aac42d14 | 1383 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1384 | ble_error_t onDataRead(void (*callback)(const GattReadCallbackParams *eventDataP)) { |
Vincent Coubard |
1201:9b71aac42d14 | 1385 | return gattServer().onDataRead(callback); |
Vincent Coubard |
1201:9b71aac42d14 | 1386 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1387 | |
Vincent Coubard |
1201:9b71aac42d14 | 1388 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1389 | * The same as onDataRead(), but allows an object reference and member function |
Vincent Coubard |
1201:9b71aac42d14 | 1390 | * to be added to the chain of callbacks. |
Vincent Coubard |
1201:9b71aac42d14 | 1391 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1392 | * @deprecated You should use the parallel API from GattServer directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1393 | * GattServer::onDataRead(). A former call |
Vincent Coubard |
1201:9b71aac42d14 | 1394 | * to ble.onDataRead(...) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1395 | * ble.gattServer().onDataRead(...). |
Vincent Coubard |
1201:9b71aac42d14 | 1396 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1397 | template <typename T> ble_error_t onDataRead(T * objPtr, void (T::*memberPtr)(const GattReadCallbackParams *context)) { |
Vincent Coubard |
1201:9b71aac42d14 | 1398 | return gattServer().onDataRead(objPtr, memberPtr); |
Vincent Coubard |
1201:9b71aac42d14 | 1399 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1400 | |
Vincent Coubard |
1201:9b71aac42d14 | 1401 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1402 | * Set up a callback for when notifications or indications are enabled for a |
Vincent Coubard |
1201:9b71aac42d14 | 1403 | * characteristic on the local GattServer. |
Vincent Coubard |
1201:9b71aac42d14 | 1404 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1405 | * @deprecated You should use the parallel API from GattServer directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1406 | * GattServer::onUpdatesEnabled(). A former call |
Vincent Coubard |
1201:9b71aac42d14 | 1407 | * to ble.onUpdatesEnabled(callback) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1408 | * ble.gattServer().onUpdatesEnabled(callback). |
Vincent Coubard |
1201:9b71aac42d14 | 1409 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1410 | void onUpdatesEnabled(GattServer::EventCallback_t callback) { |
Vincent Coubard |
1201:9b71aac42d14 | 1411 | gattServer().onUpdatesEnabled(callback); |
Vincent Coubard |
1201:9b71aac42d14 | 1412 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1413 | |
Vincent Coubard |
1201:9b71aac42d14 | 1414 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1415 | * Set up a callback for when notifications or indications are disabled for a |
Vincent Coubard |
1201:9b71aac42d14 | 1416 | * characteristic on the local GattServer. |
Vincent Coubard |
1201:9b71aac42d14 | 1417 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1418 | * @deprecated You should use the parallel API from GattServer directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1419 | * GattServer::onUpdatesDisabled(). A former call |
Vincent Coubard |
1201:9b71aac42d14 | 1420 | * to ble.onUpdatesEnabled(callback) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1421 | * ble.gattServer().onUpdatesEnabled(callback). |
Vincent Coubard |
1201:9b71aac42d14 | 1422 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1423 | void onUpdatesDisabled(GattServer::EventCallback_t callback) { |
Vincent Coubard |
1201:9b71aac42d14 | 1424 | gattServer().onUpdatesDisabled(callback); |
Vincent Coubard |
1201:9b71aac42d14 | 1425 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1426 | |
Vincent Coubard |
1201:9b71aac42d14 | 1427 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1428 | * Set up a callback for when the GATT server receives a response for an |
Vincent Coubard |
1201:9b71aac42d14 | 1429 | * indication event sent previously. |
Vincent Coubard |
1201:9b71aac42d14 | 1430 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1431 | * @deprecated You should use the parallel API from GattServer directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1432 | * GattServer::onConfirmationReceived(). A former call |
Vincent Coubard |
1201:9b71aac42d14 | 1433 | * to ble.onConfirmationReceived(callback) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1434 | * ble.gattServer().onConfirmationReceived(callback). |
Vincent Coubard |
1201:9b71aac42d14 | 1435 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1436 | void onConfirmationReceived(GattServer::EventCallback_t callback) { |
Vincent Coubard |
1201:9b71aac42d14 | 1437 | gattServer().onConfirmationReceived(callback); |
Vincent Coubard |
1201:9b71aac42d14 | 1438 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1439 | |
Vincent Coubard |
1201:9b71aac42d14 | 1440 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1441 | * Set up a callback for when the security setup procedure (key generation |
Vincent Coubard |
1201:9b71aac42d14 | 1442 | * and exchange) for a link has started. This will be skipped for bonded |
Vincent Coubard |
1201:9b71aac42d14 | 1443 | * devices. The callback is passed in parameters received from the peer's |
Vincent Coubard |
1201:9b71aac42d14 | 1444 | * security request: bool allowBonding, bool requireMITM, and |
Vincent Coubard |
1201:9b71aac42d14 | 1445 | * SecurityIOCapabilities_t. |
Vincent Coubard |
1201:9b71aac42d14 | 1446 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1447 | * @deprecated You should use the parallel API from SecurityManager directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1448 | * SecurityManager::onSecuritySetupInitiated(). A former |
Vincent Coubard |
1201:9b71aac42d14 | 1449 | * call to ble.onSecuritySetupInitiated(callback) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1450 | * ble.securityManager().onSecuritySetupInitiated(callback). |
Vincent Coubard |
1201:9b71aac42d14 | 1451 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1452 | void onSecuritySetupInitiated(SecurityManager::SecuritySetupInitiatedCallback_t callback) { |
Vincent Coubard |
1201:9b71aac42d14 | 1453 | securityManager().onSecuritySetupInitiated(callback); |
Vincent Coubard |
1201:9b71aac42d14 | 1454 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1455 | |
Vincent Coubard |
1201:9b71aac42d14 | 1456 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1457 | * Set up a callback for when the security setup procedure (key generation |
Vincent Coubard |
1201:9b71aac42d14 | 1458 | * and exchange) for a link has completed. This will be skipped for bonded |
Vincent Coubard |
1201:9b71aac42d14 | 1459 | * devices. The callback is passed in the success/failure status of the |
Vincent Coubard |
1201:9b71aac42d14 | 1460 | * security setup procedure. |
Vincent Coubard |
1201:9b71aac42d14 | 1461 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1462 | * @deprecated You should use the parallel API from SecurityManager directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1463 | * SecurityManager::onSecuritySetupCompleted(). A former |
Vincent Coubard |
1201:9b71aac42d14 | 1464 | * call to ble.onSecuritySetupCompleted(callback) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1465 | * ble.securityManager().onSecuritySetupCompleted(callback). |
Vincent Coubard |
1201:9b71aac42d14 | 1466 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1467 | void onSecuritySetupCompleted(SecurityManager::SecuritySetupCompletedCallback_t callback) { |
Vincent Coubard |
1201:9b71aac42d14 | 1468 | securityManager().onSecuritySetupCompleted(callback); |
Vincent Coubard |
1201:9b71aac42d14 | 1469 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1470 | |
Vincent Coubard |
1201:9b71aac42d14 | 1471 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1472 | * Set up a callback for when a link with the peer is secured. For bonded |
Vincent Coubard |
1201:9b71aac42d14 | 1473 | * devices, subsequent reconnections with a bonded peer will result only in |
Vincent Coubard |
1201:9b71aac42d14 | 1474 | * this callback when the link is secured, and setup procedures will not |
Vincent Coubard |
1201:9b71aac42d14 | 1475 | * occur unless the bonding information is either lost or deleted on either |
Vincent Coubard |
1201:9b71aac42d14 | 1476 | * or both sides. The callback is passed in a SecurityManager::SecurityMode_t according |
Vincent Coubard |
1201:9b71aac42d14 | 1477 | * to the level of security in effect for the secured link. |
Vincent Coubard |
1201:9b71aac42d14 | 1478 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1479 | * @deprecated You should use the parallel API from SecurityManager directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1480 | * SecurityManager::onLinkSecured(). A former |
Vincent Coubard |
1201:9b71aac42d14 | 1481 | * call to ble.onLinkSecured(callback) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1482 | * ble.securityManager().onLinkSecured(callback). |
Vincent Coubard |
1201:9b71aac42d14 | 1483 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1484 | void onLinkSecured(SecurityManager::LinkSecuredCallback_t callback) { |
Vincent Coubard |
1201:9b71aac42d14 | 1485 | securityManager().onLinkSecured(callback); |
Vincent Coubard |
1201:9b71aac42d14 | 1486 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1487 | |
Vincent Coubard |
1201:9b71aac42d14 | 1488 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1489 | * Set up a callback for successful bonding, meaning that link-specific security |
Vincent Coubard |
1201:9b71aac42d14 | 1490 | * context is stored persistently for a peer device. |
Vincent Coubard |
1201:9b71aac42d14 | 1491 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1492 | * @deprecated You should use the parallel API from SecurityManager directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1493 | * SecurityManager::onSecurityContextStored(). A former |
Vincent Coubard |
1201:9b71aac42d14 | 1494 | * call to ble.onSecurityContextStored(callback) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1495 | * ble.securityManager().onSecurityContextStored(callback). |
Vincent Coubard |
1201:9b71aac42d14 | 1496 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1497 | void onSecurityContextStored(SecurityManager::HandleSpecificEvent_t callback) { |
Vincent Coubard |
1201:9b71aac42d14 | 1498 | securityManager().onSecurityContextStored(callback); |
Vincent Coubard |
1201:9b71aac42d14 | 1499 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1500 | |
Vincent Coubard |
1201:9b71aac42d14 | 1501 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1502 | * Set up a callback for when the passkey needs to be displayed on a |
Vincent Coubard |
1201:9b71aac42d14 | 1503 | * peripheral with DISPLAY capability. This happens when security is |
Vincent Coubard |
1201:9b71aac42d14 | 1504 | * configured to prevent Man-In-The-Middle attacks, and the peers need to exchange |
Vincent Coubard |
1201:9b71aac42d14 | 1505 | * a passkey (or PIN) to authenticate the connection |
Vincent Coubard |
1201:9b71aac42d14 | 1506 | * attempt. |
Vincent Coubard |
1201:9b71aac42d14 | 1507 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1508 | * @deprecated You should use the parallel API from SecurityManager directly, refer to |
Vincent Coubard |
1201:9b71aac42d14 | 1509 | * SecurityManager::onPasskeyDisplay(). A former |
Vincent Coubard |
1201:9b71aac42d14 | 1510 | * call to ble.onPasskeyDisplay(callback) should be replaced with |
Vincent Coubard |
1201:9b71aac42d14 | 1511 | * ble.securityManager().onPasskeyDisplay(callback). |
Vincent Coubard |
1201:9b71aac42d14 | 1512 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1513 | void onPasskeyDisplay(SecurityManager::PasskeyDisplayCallback_t callback) { |
Vincent Coubard |
1201:9b71aac42d14 | 1514 | return securityManager().onPasskeyDisplay(callback); |
Vincent Coubard |
1201:9b71aac42d14 | 1515 | } |
Vincent Coubard |
1201:9b71aac42d14 | 1516 | |
Vincent Coubard |
1201:9b71aac42d14 | 1517 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1518 | * Process ALL pending events living in the BLE stack . |
Vincent Coubard |
1201:9b71aac42d14 | 1519 | * Return once all events have been consumed. |
Vincent Coubard |
1201:9b71aac42d14 | 1520 | * This function is called by user in their while loop (mbed Classic) |
Vincent Coubard |
1201:9b71aac42d14 | 1521 | * or automatically by Minar (mbed OS) when BLE event processing is scheduled. |
Vincent Coubard |
1201:9b71aac42d14 | 1522 | * Internally, this function will call BLEInstanceBase::processEvent. |
Vincent Coubard |
1201:9b71aac42d14 | 1523 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1524 | void processEvents(); |
Vincent Coubard |
1201:9b71aac42d14 | 1525 | |
Vincent Coubard |
1201:9b71aac42d14 | 1526 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1527 | * Register a hook which will be called every time the BLE stack has pending |
Vincent Coubard |
1201:9b71aac42d14 | 1528 | * work. |
Vincent Coubard |
1201:9b71aac42d14 | 1529 | * By registering a callback, user code can know when event processing has to be |
Vincent Coubard |
1201:9b71aac42d14 | 1530 | * scheduled. |
Vincent Coubard |
1201:9b71aac42d14 | 1531 | * Callback format is void (*)(BLE& ble); |
Vincent Coubard |
1201:9b71aac42d14 | 1532 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1533 | void onEventsToProcess(const OnEventsToProcessCallback_t& callback); |
Vincent Coubard |
1201:9b71aac42d14 | 1534 | |
Vincent Coubard |
1201:9b71aac42d14 | 1535 | private: |
Vincent Coubard |
1201:9b71aac42d14 | 1536 | |
Vincent Coubard |
1201:9b71aac42d14 | 1537 | friend class BLEInstanceBase; |
Vincent Coubard |
1201:9b71aac42d14 | 1538 | |
Vincent Coubard |
1201:9b71aac42d14 | 1539 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1540 | * This function allow the BLE stack to signal that their is work to do and |
Vincent Coubard |
1201:9b71aac42d14 | 1541 | * event processing should be done (BLE::processEvent()). |
Vincent Coubard |
1201:9b71aac42d14 | 1542 | * This function should be called by the port of BLE_API, it shouldn't be |
Vincent Coubard |
1201:9b71aac42d14 | 1543 | * accessible to end users. |
Vincent Coubard |
1201:9b71aac42d14 | 1544 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1545 | void signalEventsToProcess(); |
Vincent Coubard |
1201:9b71aac42d14 | 1546 | |
Vincent Coubard |
1201:9b71aac42d14 | 1547 | /** |
Vincent Coubard |
1201:9b71aac42d14 | 1548 | * Implementation of init() [internal to BLE_API]. |
Vincent Coubard |
1201:9b71aac42d14 | 1549 | * |
Vincent Coubard |
1201:9b71aac42d14 | 1550 | * The implementation is separated into a private method because it isn't |
Vincent Coubard |
1201:9b71aac42d14 | 1551 | * suitable to be included in the header. |
Vincent Coubard |
1201:9b71aac42d14 | 1552 | */ |
Vincent Coubard |
1201:9b71aac42d14 | 1553 | ble_error_t initImplementation(FunctionPointerWithContext<InitializationCompleteCallbackContext *> callback); |
Vincent Coubard |
1201:9b71aac42d14 | 1554 | |
Vincent Coubard |
1201:9b71aac42d14 | 1555 | private: |
Vincent Coubard |
1201:9b71aac42d14 | 1556 | BLE(const BLE&); |
Vincent Coubard |
1201:9b71aac42d14 | 1557 | BLE &operator=(const BLE &); |
Vincent Coubard |
1201:9b71aac42d14 | 1558 | |
Vincent Coubard |
1201:9b71aac42d14 | 1559 | private: |
Vincent Coubard |
1201:9b71aac42d14 | 1560 | InstanceID_t instanceID; |
Vincent Coubard |
1201:9b71aac42d14 | 1561 | BLEInstanceBase *transport; /* The device-specific backend */ |
Vincent Coubard |
1201:9b71aac42d14 | 1562 | OnEventsToProcessCallback_t whenEventsToProcess; |
Vincent Coubard |
1201:9b71aac42d14 | 1563 | }; |
Vincent Coubard |
1201:9b71aac42d14 | 1564 | |
Vincent Coubard |
1201:9b71aac42d14 | 1565 | typedef BLE BLEDevice; /**< @deprecated This type alias is retained for the |
Vincent Coubard |
1201:9b71aac42d14 | 1566 | * sake of compatibility with older |
Vincent Coubard |
1201:9b71aac42d14 | 1567 | * code. Will be dropped at some point soon.*/ |
Vincent Coubard |
1201:9b71aac42d14 | 1568 | |
vcoubard | 1183:1589830dbdb7 | 1569 | #endif /* ifndef __BLE_H__ */ |