Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
BLE.h
00001 /* mbed Microcontroller Library 00002 * Copyright (c) 2006-2013 ARM Limited 00003 * 00004 * Licensed under the Apache License, Version 2.0 (the "License"); 00005 * you may not use this file except in compliance with the License. 00006 * You may obtain a copy of the License at 00007 * 00008 * http://www.apache.org/licenses/LICENSE-2.0 00009 * 00010 * Unless required by applicable law or agreed to in writing, software 00011 * distributed under the License is distributed on an "AS IS" BASIS, 00012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00013 * See the License for the specific language governing permissions and 00014 * limitations under the License. 00015 */ 00016 00017 #ifndef MBED_BLE_H__ 00018 #define MBED_BLE_H__ 00019 00020 #include "blecommon.h" 00021 #include "Gap.h" 00022 #include "GattServer.h" 00023 #include "GattClient.h" 00024 #include "SecurityManager.h" 00025 00026 #include "ble/FunctionPointerWithContext.h " 00027 00028 #ifdef YOTTA_CFG_MBED_OS 00029 #include "mbed-drivers/mbed_error.h" 00030 #else 00031 #include "platform/mbed_error.h" 00032 #endif 00033 00034 #include "platform/mbed_toolchain.h" 00035 00036 /* Forward declaration for the implementation class */ 00037 class BLEInstanceBase; 00038 00039 /** 00040 * @addtogroup ble 00041 * @{ 00042 */ 00043 00044 /** 00045 * Abstract away BLE-capable radio transceivers or SOCs. 00046 * 00047 * Instances of this class have three responsibilities: 00048 * - Initialize the inner BLE subsystem. 00049 * - Signal user code that BLE events are available and an API to process them. 00050 * - Manage access to the instances abstracting each BLE layer: 00051 * + GAP: Handle advertising and scan, as well as connection and 00052 * disconnection. 00053 * + GATTServer: API to construct and manage a GATT server, which connected peers can 00054 * access. 00055 * + GATTClient: API to interact with a peer GATT server. 00056 * + SecurityManager: API to manage security. 00057 * 00058 * The user should not create BLE instances directly but rather access to the 00059 * singleton(s) holding the BLE interfaces present in the system by using the 00060 * static function Instance(). 00061 * 00062 * @code 00063 * #include "ble/BLE.h" 00064 * 00065 * BLE& ble_interface = BLE::Instance(); 00066 * @endcode 00067 * 00068 * Next, the signal handling/process mechanism should be set up. By design, 00069 * Mbed BLE does not impose to the user an event handling/processing mechanism; 00070 * however, it exposes APIs, which allows an application to compose its own: 00071 * - onEventsToProcess(), whichs register a callback that 00072 * the BLE subsystem will call when there is an event ready to be processed. 00073 * - processEvents(), which processes all the events present in the BLE subsystem. 00074 * 00075 * It is common to bind BLE event mechanism with Mbed EventQueue: 00076 * 00077 * @code 00078 * #include <events/mbed_events.h> 00079 * #include "ble/BLE.h" 00080 * 00081 * // declare the event queue, which the whole application will share. 00082 * static EventQueue event_queue( 4 * EVENTS_EVENT_SIZE); 00083 * 00084 * // Function invoked when there is a BLE event available. 00085 * // It put into the event queue the processing of the event(s) 00086 * void schedule_ble_processing(BLE::OnEventsToProcessCallbackContext* context) { 00087 * event_queue.call(callback(&(context->ble), &BLE::processEvents)); 00088 * } 00089 * 00090 * int main() 00091 * { 00092 * BLE &ble_interface = BLE::Instance(); 00093 * 00094 * // Bind event signaling to schedule_ble_processing 00095 * ble_interface.onEventsToProcess(schedule_ble_processing); 00096 * 00097 * // Launch BLE initialisation 00098 * 00099 * // Dispatch events in the event queue 00100 * event_queue.dispatch_forever(); 00101 * return 0; 00102 * } 00103 * @endcode 00104 * 00105 * Once the event processing mechanism is in place, the Bluetooth subsystem can 00106 * be initialized with the init() function. That function accepts in input a 00107 * callback, which will be invoked once the initialization process has finished. 00108 * 00109 * @code 00110 * void on_ble_init_complete(BLE::InitializationCompleteCallbackContext *context) 00111 * { 00112 * BLE& ble_interface = context->ble; 00113 * ble_error_t initialization_error = context->error; 00114 * 00115 * if (initialization_error) { 00116 * // handle error 00117 * return; 00118 * } 00119 * 00120 * // The BLE interface can be accessed now. 00121 * } 00122 * 00123 * int main() { 00124 * BLE &ble_interface = BLE::Instance(); 00125 * ble_interface.onEventsToProcess(schedule_ble_processing); 00126 * 00127 * // Initialize the BLE interface 00128 * ble_interface.init(on_ble_init_complete); 00129 * 00130 * event_queue.dispatch_forever(); 00131 * return 0; 00132 * } 00133 * @endcode 00134 */ 00135 class BLE 00136 { 00137 public: 00138 /** 00139 * Opaque type used to store the ID of a BLE instance. 00140 */ 00141 typedef unsigned InstanceID_t; 00142 00143 /** 00144 * The value of the BLE::InstanceID_t for the default BLE instance. 00145 */ 00146 static const InstanceID_t DEFAULT_INSTANCE = 0; 00147 00148 #ifndef YOTTA_CFG_BLE_INSTANCES_COUNT 00149 /** 00150 * The number of permitted BLE instances for the application. 00151 */ 00152 static const InstanceID_t NUM_INSTANCES = 1; 00153 #else 00154 /** 00155 * The number of permitted BLE instances for the application. 00156 */ 00157 static const InstanceID_t NUM_INSTANCES = YOTTA_CFG_BLE_INSTANCES_COUNT; 00158 #endif 00159 00160 /** 00161 * Get a reference to the BLE singleton corresponding to a given interface. 00162 * 00163 * There is a static array of BLE singletons. 00164 * 00165 * @note Calling Instance() is preferred over constructing a BLE object 00166 * directly because it returns references to singletons. 00167 * 00168 * @param[in] id BLE Instance ID to get. 00169 * 00170 * @return A reference to a single object. 00171 * 00172 * @pre id shall be less than NUM_INSTANCES. 00173 */ 00174 static BLE &Instance(InstanceID_t id = DEFAULT_INSTANCE); 00175 00176 /** 00177 * Fetch the ID of a BLE instance. 00178 * 00179 * @return Instance id of this BLE instance. 00180 */ 00181 InstanceID_t getInstanceID(void) const { 00182 return instanceID; 00183 } 00184 00185 /** 00186 * Events to process event. 00187 * 00188 * Instances of OnEventsToProcessCallbackContext are passed to the event 00189 * handler registered with onEventsToProcess(). 00190 */ 00191 struct OnEventsToProcessCallbackContext { 00192 /** 00193 * The ble instance which have events to process. 00194 */ 00195 BLE& ble; 00196 }; 00197 00198 /** 00199 * Events to process event handler 00200 */ 00201 typedef FunctionPointerWithContext<OnEventsToProcessCallbackContext*> 00202 OnEventsToProcessCallback_t; 00203 00204 /** 00205 * Register a callback called when the BLE stack has pending work. 00206 * 00207 * By registering a callback, application code can know when event processing 00208 * has to be scheduled. 00209 * 00210 * @param on_event_cb Callback invoked when there are new events to process. 00211 */ 00212 void onEventsToProcess(const OnEventsToProcessCallback_t & on_event_cb); 00213 00214 /** 00215 * Process ALL pending events living in the BLE stack and return once all 00216 * events have been consumed. 00217 * 00218 * @see onEventsToProcess() 00219 */ 00220 void processEvents(); 00221 00222 /** 00223 * Initialization complete event. 00224 * 00225 * This event is generated at the end of the init() procedure and is passed 00226 * to the completion callback passed to init(). 00227 */ 00228 struct InitializationCompleteCallbackContext { 00229 /** 00230 * Reference to the BLE object that has been initialized 00231 */ 00232 BLE& ble; 00233 00234 /** 00235 * Error status of the initialization. 00236 * 00237 * That value is set to BLE_ERROR_NONE if initialization completed 00238 * successfully or the appropriate error code otherwise. 00239 * */ 00240 ble_error_t error; 00241 }; 00242 00243 /** 00244 * Initialization complete event handler. 00245 * 00246 * @note There are two versions of init(). In addition to the 00247 * function-pointer, init() can also take an <Object, member> tuple as its 00248 * callback target. In case of the latter, the following declaration doesn't 00249 * apply. 00250 */ 00251 typedef void (*InitializationCompleteCallback_t)( 00252 InitializationCompleteCallbackContext *context 00253 ); 00254 00255 /** 00256 * Initialize the BLE controller/stack. 00257 * 00258 * init() hands control to the underlying BLE module to accomplish 00259 * initialization. This initialization may tacitly depend on other hardware 00260 * setup (such as clocks or power-modes) that happens early on during system 00261 * startup. It may not be safe to call init() from a global static context 00262 * where ordering is compiler-specific and can't be guaranteed - it is safe 00263 * to call BLE::init() from within main(). 00264 * 00265 * @param[in] completion_cb A callback for when initialization completes for 00266 * a BLE instance. This is an optional parameter; if no callback is set up, 00267 * the application can still determine the status of initialization using 00268 * BLE::hasInitialized() (see below). 00269 * 00270 * @return BLE_ERROR_NONE if the initialization procedure started 00271 * successfully. 00272 * 00273 * @note If init() returns BLE_ERROR_NONE, the underlying stack must invoke 00274 * the initialization completion callback at some point. 00275 * 00276 * @note Nearly all BLE APIs would return BLE_ERROR_INITIALIZATION_INCOMPLETE 00277 * if used on an instance before the corresponding transport is initialized. 00278 * 00279 * @note There are two versions of init(). In addition to the 00280 * function-pointer, init() can also take an <Object, member> pair as its 00281 * callback target. 00282 * 00283 * @attention This should be called before using anything else in the BLE 00284 * API. 00285 */ 00286 ble_error_t init(InitializationCompleteCallback_t completion_cb = NULL) { 00287 FunctionPointerWithContext<InitializationCompleteCallbackContext *> callback(completion_cb); 00288 return initImplementation(callback); 00289 } 00290 00291 /** 00292 * Initialize the BLE controller/stack. 00293 * 00294 * This is an alternate declaration for init(). This one takes an 00295 * <Object, member> pair as its callback target. 00296 * 00297 * @param[in] object Object, which will be used to invoke the completion callback. 00298 * @param[in] completion_cb Member function pointer, which will be invoked when 00299 * initialization is complete. 00300 */ 00301 template<typename T> 00302 ble_error_t init(T *object, void (T::*completion_cb)(InitializationCompleteCallbackContext *context)) { 00303 FunctionPointerWithContext<InitializationCompleteCallbackContext *> callback(object, completion_cb); 00304 return initImplementation(callback); 00305 } 00306 00307 /** 00308 * Indicate if the BLE instance has been initialized. 00309 * 00310 * @return true if initialization has completed for the underlying BLE 00311 * transport. 00312 * 00313 * @note The application should set up a callback to signal completion of 00314 * initialization when using init(). 00315 */ 00316 bool hasInitialized(void) const; 00317 00318 /** 00319 * Shut down the underlying stack, and reset state of this BLE instance. 00320 * 00321 * @return BLE_ERROR_NONE if the instance was shut down without error or the 00322 * appropriate error code. 00323 * 00324 * @attention init() must be called afterward to reinstate services and 00325 * GAP state. This API offers a way to repopulate the GATT database with new 00326 * services and characteristics. 00327 */ 00328 ble_error_t shutdown(void); 00329 00330 /** 00331 * This call allows the application to get the BLE stack version information. 00332 * 00333 * @return A pointer to a const string representing the version. 00334 * 00335 * @note The BLE API owns the string returned. 00336 */ 00337 const char *getVersion(void); 00338 00339 /** 00340 * Accessor to Gap. All Gap-related functionality requires going through 00341 * this accessor. 00342 * 00343 * @return A reference to a Gap object associated to this BLE instance. 00344 */ 00345 Gap &gap(); 00346 00347 /** 00348 * A const alternative to gap(). 00349 * 00350 * @return A const reference to a Gap object associated to this BLE instance. 00351 */ 00352 const Gap &gap() const; 00353 00354 /** 00355 * Accessor to GattServer. All GattServer related functionality requires 00356 * going through this accessor. 00357 * 00358 * @return A reference to a GattServer object associated to this BLE instance. 00359 */ 00360 GattServer& gattServer(); 00361 00362 /** 00363 * A const alternative to gattServer(). 00364 * 00365 * @return A const reference to a GattServer object associated to this BLE 00366 * instance. 00367 */ 00368 const GattServer& gattServer() const; 00369 00370 /** 00371 * Accessors to GattClient. All GattClient related functionality requires 00372 * going through this accessor. 00373 * 00374 * @return A reference to a GattClient object associated to this BLE instance. 00375 */ 00376 GattClient& gattClient(); 00377 00378 /** 00379 * A const alternative to gattClient(). 00380 * 00381 * @return A const reference to a GattClient object associated to this BLE 00382 * instance. 00383 */ 00384 const GattClient& gattClient() const; 00385 00386 /** 00387 * Accessors to SecurityManager. All SecurityManager-related functionality 00388 * requires going through this accessor. 00389 * 00390 * @return A reference to a SecurityManager object associated to this BLE 00391 * instance. 00392 */ 00393 SecurityManager& securityManager(); 00394 00395 /** 00396 * A const alternative to securityManager(). 00397 * 00398 * @return A const reference to a SecurityManager object associated to this 00399 * BLE instance. 00400 */ 00401 const SecurityManager& securityManager() const; 00402 00403 /** 00404 * Translate error code into a printable string. 00405 * 00406 * @param[in] error Error code returned by BLE functions. 00407 * 00408 * @return A pointer to a const string describing the error. 00409 */ 00410 static const char* errorToString(ble_error_t error); 00411 00412 /* 00413 * Deprecation alert! 00414 * All of the following are deprecated and may be dropped in a future 00415 * release. Documentation should refer to alternative APIs. 00416 */ 00417 public: 00418 /** 00419 * Constructor for a handle to a BLE instance (the BLE stack). BLE handles 00420 * are thin wrappers around a transport object (that is, ptr. to 00421 * BLEInstanceBase). 00422 * 00423 * It is better to create BLE objects as singletons accessed through the 00424 * Instance() method. If multiple BLE handles are constructed for the same 00425 * interface (using this constructor), they share the same underlying 00426 * transport object. 00427 * 00428 * @deprecated Use the Instance() function instead of the constructor. 00429 */ 00430 MBED_DEPRECATED("Use BLE::Instance() instead of BLE constructor.") 00431 BLE(InstanceID_t instanceID = DEFAULT_INSTANCE); 00432 00433 /** 00434 * Yield control to the BLE stack or to other tasks waiting for events. 00435 * 00436 * This is a sleep function that returns when there is an application-specific 00437 * interrupt. This is not interchangeable with WFE() considering that the 00438 * MCU might wake up several times to service the stack before returning 00439 * control to the caller. 00440 * 00441 * @deprecated This function block the CPU prefer to use the pair 00442 * onEventsToProcess() and processEvents(). 00443 */ 00444 MBED_DEPRECATED("Use BLE::processEvents() and BLE::onEventsToProcess().") 00445 void waitForEvent(void); 00446 00447 /** 00448 * Set the BTLE MAC address and type. 00449 * 00450 * @return BLE_ERROR_NONE on success. 00451 * 00452 * @deprecated You should use the parallel API from Gap directly, refer to 00453 * Gap::setAddress(). A former call to ble.setAddress(...) should be 00454 * replaced with ble.gap().setAddress(...). 00455 */ 00456 MBED_DEPRECATED("Use ble.gap().setAddress(...)") 00457 ble_error_t setAddress( 00458 BLEProtocol::AddressType_t type, 00459 const BLEProtocol::AddressBytes_t address 00460 ) { 00461 return gap().setAddress(type, address); 00462 } 00463 00464 /** 00465 * Fetch the Bluetooth Low Energy MAC address and type. 00466 * 00467 * @return BLE_ERROR_NONE on success. 00468 * 00469 * @deprecated You should use the parallel API from Gap directly and refer to 00470 * Gap::getAddress(). A former call to ble.getAddress(...) should be 00471 * replaced with ble.gap().getAddress(...). 00472 */ 00473 MBED_DEPRECATED("Use ble.gap().getAddress(...)") 00474 ble_error_t getAddress( 00475 BLEProtocol::AddressType_t *typeP, BLEProtocol::AddressBytes_t address 00476 ) { 00477 return gap().getAddress(typeP, address); 00478 } 00479 00480 /** 00481 * Set the GAP advertising mode to use for this device. 00482 * 00483 * @deprecated You should use the parallel API from Gap directly and refer to 00484 * Gap::setAdvertisingType(). A former call to 00485 * ble.setAdvertisingType(...) should be replaced with 00486 * ble.gap().setAdvertisingType(...). 00487 */ 00488 MBED_DEPRECATED("Use ble.gap().setAdvertisingType(...)") 00489 void setAdvertisingType(GapAdvertisingParams::AdvertisingType advType) { 00490 gap().setAdvertisingType(advType); 00491 } 00492 00493 /** 00494 * @param[in] interval 00495 * Advertising interval in units of milliseconds. Advertising 00496 * is disabled if interval is 0. If interval is smaller than 00497 * the minimum supported value, then the minimum supported 00498 * value is used instead. This minimum value can be discovered 00499 * using getMinAdvertisingInterval(). 00500 * 00501 * This field must be set to 0 if connectionMode is equal 00502 * to ADV_CONNECTABLE_DIRECTED. 00503 * 00504 * @note Decreasing this value allows central devices to detect a 00505 * peripheral faster at the expense of more power being used by the radio 00506 * due to the higher data transmit rate. 00507 * 00508 * @deprecated You should use the parallel API from Gap directly and refer to 00509 * Gap::setAdvertisingInterval(). A former call to 00510 * ble.setAdvertisingInterval(...) should be replaced with 00511 * ble.gap().setAdvertisingInterval(...). 00512 * 00513 * @note WARNING: This API previously used 0.625ms as the unit for its 00514 * 'interval' argument. That required an explicit conversion from 00515 * milliseconds using Gap::MSEC_TO_GAP_DURATION_UNITS(). This conversion is 00516 * no longer required as the new units are milliseconds. Any application 00517 * code depending on the old semantics needs to be updated accordingly. 00518 */ 00519 MBED_DEPRECATED("Use ble.gap().setAdvertisingInterval(...)") 00520 void setAdvertisingInterval(uint16_t interval) { 00521 gap().setAdvertisingInterval(interval); 00522 } 00523 00524 /** 00525 * @return Minimum Advertising interval in milliseconds. 00526 * 00527 * @deprecated You should use the parallel API from Gap directly, refer to 00528 * Gap::getMinAdvertisingInterval(). A former call to 00529 * ble.getMinAdvertisingInterval(...) should be replaced with 00530 * ble.gap().getMinAdvertisingInterval(...). 00531 */ 00532 MBED_DEPRECATED("Use ble.gap().getMinAdvertisingInterval(...)") 00533 uint16_t getMinAdvertisingInterval(void) const { 00534 return gap().getMinAdvertisingInterval(); 00535 } 00536 00537 /** 00538 * @return Minimum Advertising interval in milliseconds for nonconnectible mode. 00539 * 00540 * @deprecated You should use the parallel API from Gap directly, refer to 00541 * Gap::MinNonConnectableAdvertisingInterval(). A former call to 00542 * ble.getMinNonConnectableAdvertisingInterval(...) should be replaced with 00543 * ble.gap().getMinNonConnectableAdvertisingInterval(...). 00544 */ 00545 MBED_DEPRECATED("Use ble.gap().getMinNonConnectableAdvertisingInterval(...)") 00546 uint16_t getMinNonConnectableAdvertisingInterval(void) const { 00547 return gap().getMinNonConnectableAdvertisingInterval(); 00548 } 00549 00550 /** 00551 * @return Maximum Advertising interval in milliseconds. 00552 * 00553 * @deprecated You should use the parallel API from Gap directly, refer to 00554 * Gap::getMaxAdvertisingInterval(). A former call to 00555 * ble.getMaxAdvertisingInterval(...) should be replaced with 00556 * ble.gap().getMaxAdvertisingInterval(...). 00557 */ 00558 MBED_DEPRECATED("Use ble.gap().getMaxAdvertisingInterval(...)") 00559 uint16_t getMaxAdvertisingInterval(void) const { 00560 return gap().getMaxAdvertisingInterval(); 00561 } 00562 00563 /** 00564 * @param[in] timeout 00565 * Advertising timeout (in seconds) between 0x1 and 0x3FFF (1 00566 * and 16383). Use 0 to disable the advertising timeout. 00567 * 00568 * @deprecated You should use the parallel API from Gap directly and refer to 00569 * Gap::setAdvertisingTimeout(). A former call to 00570 * ble.setAdvertisingTimeout(...) should be replaced with 00571 * ble.gap().setAdvertisingTimeout(...). 00572 */ 00573 MBED_DEPRECATED("Use ble.gap().setAdvertisingTimeout(...)") 00574 void setAdvertisingTimeout(uint16_t timeout) { 00575 gap().setAdvertisingTimeout(timeout); 00576 } 00577 00578 /** 00579 * Set up a particular, user-constructed set of advertisement parameters for 00580 * the underlying stack. It would be uncommon for this API to be used 00581 * directly; there are other APIs to tweak advertisement parameters 00582 * individually (see above). 00583 * 00584 * @deprecated You should use the parallel API from Gap directly and refer to 00585 * Gap::setAdvertisingParams(). A former call to 00586 * ble.setAdvertisingParams(...) should be replaced with 00587 * ble.gap().setAdvertisingParams(...). 00588 */ 00589 MBED_DEPRECATED("Use ble.gap().setAdvertisingParams(...)") 00590 void setAdvertisingParams(const GapAdvertisingParams &advParams) { 00591 gap().setAdvertisingParams(advParams); 00592 } 00593 00594 /** 00595 * @return Read back advertising parameters. Useful for storing and 00596 * restoring parameters rapidly. 00597 * 00598 * @deprecated You should use the parallel API from Gap directly and refer to 00599 * Gap::getAdvertisingParams(). A former call to 00600 * ble.getAdvertisingParams(...) should be replaced with 00601 * ble.gap().getAdvertisingParams(...). 00602 */ 00603 MBED_DEPRECATED("Use ble.gap().getAdvertisingParams(...)") 00604 const GapAdvertisingParams &getAdvertisingParams(void) const { 00605 return gap().getAdvertisingParams(); 00606 } 00607 00608 /** 00609 * Accumulate an AD structure in the advertising payload. Please note that 00610 * the payload is limited to 31 bytes. The SCAN_RESPONSE message may be used 00611 * as an additional 31 bytes if the advertising payload is too 00612 * small. 00613 * 00614 * @param[in] flags 00615 * The flags to add. Please refer to 00616 * GapAdvertisingData::Flags for valid flags. Multiple 00617 * flags may be specified in combination. 00618 * 00619 * @deprecated You should use the parallel API from Gap directly, refer to 00620 * Gap::accumulateAdvertisingPayload(uint8_t). A former call to 00621 * ble.accumulateAdvertisingPayload(flags) should be replaced with 00622 * ble.gap().accumulateAdvertisingPayload(flags). 00623 */ 00624 MBED_DEPRECATED("Use ble.gap().accumulateAdvertisingPayload(flags)") 00625 ble_error_t accumulateAdvertisingPayload(uint8_t flags) { 00626 return gap().accumulateAdvertisingPayload(flags); 00627 } 00628 00629 /** 00630 * Accumulate an AD structure in the advertising payload. Please note that 00631 * the payload is limited to 31 bytes. The SCAN_RESPONSE message may be used 00632 * as an additional 31 bytes if the advertising payload is too 00633 * small. 00634 * 00635 * @param[in] app 00636 * The appearance of the peripheral. 00637 * 00638 * @deprecated You should use the parallel API from Gap directly and refer to 00639 * Gap::accumulateAdvertisingPayload(GapAdvertisingData::Appearance). 00640 * A former call to ble.accumulateAdvertisingPayload(appearance) 00641 * should be replaced with 00642 * ble.gap().accumulateAdvertisingPayload(appearance). 00643 */ 00644 MBED_DEPRECATED("Use ble.gap().accumulateAdvertisingPayload(appearance)") 00645 ble_error_t accumulateAdvertisingPayload(GapAdvertisingData::Appearance app) { 00646 return gap().accumulateAdvertisingPayload(app); 00647 } 00648 00649 /** 00650 * Accumulate an AD structure in the advertising payload. Please note that 00651 * the payload is limited to 31 bytes. The SCAN_RESPONSE message may be used 00652 * as an additional 31 bytes if the advertising payload is too 00653 * small. 00654 * 00655 * @param[in] power 00656 * The max transmit power to be used by the controller. This 00657 * is only a hint. 00658 * 00659 * @deprecated You should use the parallel API from Gap directly and refer to 00660 * Gap::accumulateAdvertisingPayloadTxPower(). A former call to 00661 * ble.accumulateAdvertisingPayloadTxPower(txPower) should be replaced with 00662 * ble.gap().accumulateAdvertisingPayloadTxPower(txPower). 00663 */ 00664 MBED_DEPRECATED("Use ble.gap().accumulateAdvertisingPayloadTxPower(...)") 00665 ble_error_t accumulateAdvertisingPayloadTxPower(int8_t power) { 00666 return gap().accumulateAdvertisingPayloadTxPower(power); 00667 } 00668 00669 /** 00670 * Accumulate a variable length byte-stream as an AD structure in the 00671 * advertising payload. Please note that the payload is limited to 31 bytes. 00672 * The SCAN_RESPONSE message may be used as an additional 31 bytes if the 00673 * advertising payload is too small. 00674 * 00675 * @param type The type that describes the variable length data. 00676 * @param data Data bytes. 00677 * @param len Data length. 00678 * 00679 * @deprecated You should use the parallel API from Gap directly, refer to 00680 * Gap::accumulateAdvertisingPayload(GapAdvertisingData::DataType, const uint8_t, uint8_t). 00681 * A former call to ble.accumulateAdvertisingPayload(...) should 00682 * be replaced with ble.gap().accumulateAdvertisingPayload(...). 00683 */ 00684 MBED_DEPRECATED("Use ble.gap().accumulateAdvertisingPayload(...)") 00685 ble_error_t accumulateAdvertisingPayload(GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len) { 00686 return gap().accumulateAdvertisingPayload(type, data, len); 00687 } 00688 00689 /** 00690 * Set up a particular, user-constructed advertisement payload for the 00691 * underlying stack. It would be uncommon for this API to be used directly; 00692 * there are other APIs to build an advertisement payload (see above). 00693 * 00694 * @deprecated You should use the parallel API from Gap directly, refer to 00695 * Gap::setAdvertisingData(). A former call to 00696 * ble.setAdvertisingData(...) should be replaced with 00697 * ble.gap().setAdvertisingPayload(...). 00698 */ 00699 MBED_DEPRECATED("Use ble.gap().setAdvertisingData(...)") 00700 ble_error_t setAdvertisingData(const GapAdvertisingData &advData) { 00701 return gap().setAdvertisingPayload(advData); 00702 } 00703 00704 /** 00705 * @return Read back advertising data. Useful for storing and 00706 * restoring payload. 00707 * 00708 * @deprecated You should use the parallel API from Gap directly, refer to 00709 * Gap::getAdvertisingData(). A former call to 00710 * ble.getAdvertisingData(...) should be replaced with 00711 * ble.gap().getAdvertisingPayload()(...). 00712 */ 00713 MBED_DEPRECATED("Use ble.gap().getAdvertisingData(...)") 00714 const GapAdvertisingData &getAdvertisingData(void) const { 00715 return gap().getAdvertisingPayload(); 00716 } 00717 00718 /** 00719 * Reset any advertising payload prepared from prior calls to 00720 * accumulateAdvertisingPayload(). This automatically propagates the re- 00721 * initialized advertising payload to the underlying stack. 00722 * 00723 * @deprecated You should use the parallel API from Gap directly and refer to 00724 * Gap::clearAdvertisingPayload(). A former call to 00725 * ble.clearAdvertisingPayload(...) should be replaced with 00726 * ble.gap().clearAdvertisingPayload(...). 00727 */ 00728 MBED_DEPRECATED("Use ble.gap().clearAdvertisingPayload(...)") 00729 void clearAdvertisingPayload(void) { 00730 gap().clearAdvertisingPayload(); 00731 } 00732 00733 /** 00734 * Dynamically reset the accumulated advertising 00735 * payload and scanResponse. The application must clear and re- 00736 * accumulate a new advertising payload (and scanResponse) before using this 00737 * API. 00738 * 00739 * @return BLE_ERROR_NONE when the advertising payload is set successfully. 00740 * 00741 * @deprecated You should use the parallel API from Gap directly, refer to 00742 * Gap::setAdvertisingPayload(). 00743 * 00744 * @note The new APIs in Gap update the underlying advertisement payload 00745 * implicitly. 00746 */ 00747 MBED_DEPRECATED("Use ble.gap().setAdvertisingPayload(...)") 00748 ble_error_t setAdvertisingPayload(void) { 00749 return BLE_ERROR_NONE; 00750 } 00751 00752 /** 00753 * Accumulate a variable length byte-stream as an AD structure in the 00754 * scanResponse payload. 00755 * 00756 * @param[in] type The type that describes the variable length data. 00757 * @param[in] data Data bytes. 00758 * @param[in] len Data length. 00759 * 00760 * @deprecated You should use the parallel API from Gap directly and refer to 00761 * Gap::accumulateScanResponse(). A former call to 00762 * ble.accumulateScanResponse(...) should be replaced with 00763 * ble.gap().accumulateScanResponse(...). 00764 */ 00765 MBED_DEPRECATED("Use ble.gap().accumulateScanResponse(...)") 00766 ble_error_t accumulateScanResponse(GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len) { 00767 return gap().accumulateScanResponse(type, data, len); 00768 } 00769 00770 /** 00771 * Reset any scan response prepared from prior calls to 00772 * accumulateScanResponse(). 00773 * 00774 * @deprecated You should use the parallel API from Gap directly and refer to 00775 * Gap::clearScanResponse(). A former call to 00776 * ble.clearScanResponse(...) should be replaced with 00777 * ble.gap().clearScanResponse(...). 00778 */ 00779 MBED_DEPRECATED("Use ble.gap().clearScanResponse(...)") 00780 void clearScanResponse(void) { 00781 gap().clearScanResponse(); 00782 } 00783 00784 /** 00785 * Start advertising. 00786 * 00787 * @deprecated You should use the parallel API from Gap directly and refer to 00788 * Gap::startAdvertising(). A former call to 00789 * ble.startAdvertising(...) should be replaced with 00790 * ble.gap().startAdvertising(...). 00791 */ 00792 MBED_DEPRECATED("Use ble.gap().startAdvertising(...)") 00793 ble_error_t startAdvertising(void) { 00794 return gap().startAdvertising(); 00795 } 00796 00797 /** 00798 * Stop advertising. 00799 * 00800 * @deprecated You should use the parallel API from Gap directly and refer to 00801 * Gap::stopAdvertising(). A former call to 00802 * ble.stopAdvertising(...) should be replaced with 00803 * ble.gap().stopAdvertising(...). 00804 */ 00805 MBED_DEPRECATED("Use ble.gap().stopAdvertising(...)") 00806 ble_error_t stopAdvertising(void) { 00807 return gap().stopAdvertising(); 00808 } 00809 00810 /** 00811 * Set up parameters for GAP scanning (observer mode). 00812 * @param[in] interval 00813 * Scan interval (in milliseconds) [valid values lie between 2.5ms and 10.24s]. 00814 * @param[in] window 00815 * Scan Window (in milliseconds) [valid values lie between 2.5ms and 10.24s]. 00816 * @param[in] timeout 00817 * Scan timeout (in seconds) between 0x0001 and 0xFFFF; 0x0000 disables timeout. 00818 * @param[in] activeScanning 00819 * Set to True if active-scanning is required. This is used to fetch the 00820 * scan response from a peer if possible. 00821 * 00822 * The scanning window divided by the interval determines the duty cycle for 00823 * scanning. For example, if the interval is 100ms and the window is 10ms, 00824 * then the controller will scan for 10 percent of the time. It is possible 00825 * to have the interval and window set to the same value. In this case, 00826 * scanning is continuous, with a change of scanning frequency once every 00827 * interval. 00828 * 00829 * Once the scanning parameters have been configured, scanning can be 00830 * enabled by using startScan(). 00831 * 00832 * @note The scan interval and window are recommendations to the BLE stack. 00833 * 00834 * @deprecated You should use the parallel API from Gap directly and refer to 00835 * Gap::setScanParams(). A former call to 00836 * ble.setScanParams(...) should be replaced with 00837 * ble.gap().setScanParams(...). 00838 */ 00839 MBED_DEPRECATED("Use ble.gap().setScanParams(...)") 00840 ble_error_t setScanParams(uint16_t interval = GapScanningParams::SCAN_INTERVAL_MAX, 00841 uint16_t window = GapScanningParams::SCAN_WINDOW_MAX, 00842 uint16_t timeout = 0, 00843 bool activeScanning = false) { 00844 return gap().setScanParams(interval, window, timeout, activeScanning); 00845 } 00846 00847 /** 00848 * Set up the scanInterval parameter for GAP scanning (observer mode). 00849 * @param[in] interval 00850 * Scan interval (in milliseconds) [valid values lie between 2.5ms and 10.24s]. 00851 * 00852 * The scanning window divided by the interval determines the duty cycle for 00853 * scanning. For example, if the interval is 100ms and the window is 10ms, 00854 * then the controller will scan for 10 percent of the time. It is possible 00855 * to have the interval and window set to the same value. In this case, 00856 * scanning is continuous, with a change of scanning frequency once every 00857 * interval. 00858 * 00859 * Once the scanning parameters have been configured, scanning can be 00860 * enabled by using startScan(). 00861 * 00862 * @deprecated You should use the parallel API from Gap directly and refer to 00863 * Gap::setScanInterval(). A former call to 00864 * ble.setScanInterval(interval) should be replaced with 00865 * ble.gap().setScanInterval(interval). 00866 */ 00867 MBED_DEPRECATED("Use ble.gap().setScanInterval(...)") 00868 ble_error_t setScanInterval(uint16_t interval) { 00869 return gap().setScanInterval(interval); 00870 } 00871 00872 /** 00873 * Set up the scanWindow parameter for GAP scanning (observer mode). 00874 * @param[in] window 00875 * Scan Window (in milliseconds) [valid values lie between 2.5ms and 10.24s]. 00876 * 00877 * The scanning window divided by the interval determines the duty cycle for 00878 * scanning. For example, if the interval is 100ms and the window is 10ms, 00879 * then the controller will scan for 10 percent of the time. It is possible 00880 * to have the interval and window set to the same value. In this case, 00881 * scanning is continuous, with a change of scanning frequency once every 00882 * interval. 00883 * 00884 * Once the scanning parameters have been configured, scanning can be 00885 * enabled by using startScan(). 00886 * 00887 * @deprecated You should use the parallel API from Gap directly and refer to 00888 * Gap::setScanWindow(). A former call to 00889 * ble.setScanWindow(window) should be replaced with 00890 * ble.gap().setScanWindow(window). 00891 */ 00892 MBED_DEPRECATED("Use ble.gap().setScanWindow(...)") 00893 ble_error_t setScanWindow(uint16_t window) { 00894 return gap().setScanWindow(window); 00895 } 00896 00897 /** 00898 * Set up parameters for GAP scanning (observer mode). 00899 * @param[in] timeout 00900 * Scan timeout (in seconds) between 0x0001 and 0xFFFF; 0x0000 disables timeout. 00901 * 00902 * The scanning window divided by the interval determines the duty cycle for 00903 * scanning. For example, if the interval is 100ms and the window is 10ms, 00904 * then the controller will scan for 10 percent of the time. It is possible 00905 * to have the interval and window set to the same value. In this case, 00906 * scanning is continuous, with a change of scanning frequency once every 00907 * interval. 00908 * 00909 * Once the scanning parameters have been configured, scanning can be 00910 * enabled by using startScan(). 00911 * 00912 * @note The scan interval and window are recommendations to the BLE stack. 00913 * 00914 * @deprecated You should use the parallel API from Gap directly and refer to 00915 * Gap::setScanTimeout(). A former call to 00916 * ble.setScanTimeout(...) should be replaced with 00917 * ble.gap().setScanTimeout(...). 00918 */ 00919 MBED_DEPRECATED("Use ble.gap().setScanTimeout(...)") 00920 ble_error_t setScanTimeout(uint16_t timeout) { 00921 return gap().setScanTimeout(timeout); 00922 } 00923 00924 /** 00925 * Set up parameters for GAP scanning (observer mode). 00926 * @param[in] activeScanning 00927 * Set to True if active-scanning is required. This is used to fetch the 00928 * scan response from a peer if possible. 00929 * 00930 * Once the scanning parameters have been configured, scanning can be 00931 * enabled by using startScan(). 00932 * 00933 * @deprecated You should use the parallel API from Gap directly, refer to 00934 * Gap::setActiveScan(). A former call to 00935 * ble.setActiveScan(...) should be replaced with 00936 * ble.gap().setActiveScanning(...). 00937 */ 00938 MBED_DEPRECATED("Use ble.gap().setActiveScan(...)") 00939 void setActiveScan(bool activeScanning) { 00940 gap().setActiveScanning(activeScanning); 00941 } 00942 00943 /** 00944 * Start scanning (Observer Procedure) based on the parameters currently in 00945 * effect. 00946 * 00947 * @param[in] callback 00948 * The application-specific callback to be invoked upon 00949 * receiving every advertisement report. This can be passed in 00950 * as NULL, in which case scanning may not be enabled at all. 00951 * 00952 * @deprecated You should use the parallel API from Gap directly, refer to 00953 * Gap::startScan(). A former call to 00954 * ble.startScan(callback) should be replaced with 00955 * ble.gap().startScan(callback). 00956 */ 00957 MBED_DEPRECATED("Use ble.gap().startScan(callback)") 00958 ble_error_t startScan(void (*callback)(const Gap::AdvertisementCallbackParams_t *params)) { 00959 return gap().startScan(callback); 00960 } 00961 00962 /** 00963 * Same as above, but this takes an (object, method) pair for a callback. 00964 * 00965 * @deprecated You should use the parallel API from Gap directly, refer to 00966 * Gap::startScan(). A former call to 00967 * ble.startScan(callback) should be replaced with 00968 * ble.gap().startScan(object, callback). 00969 */ 00970 template<typename T> 00971 MBED_DEPRECATED("Use ble.gap().startScan(object, callback)") 00972 ble_error_t startScan(T *object, void (T::*memberCallback)(const Gap::AdvertisementCallbackParams_t *params)); 00973 00974 /** 00975 * Stop scanning. The current scanning parameters remain in effect. 00976 * 00977 * @retval BLE_ERROR_NONE if successfully stopped scanning procedure. 00978 * 00979 * @deprecated You should use the parallel API from Gap directly and refer to 00980 * Gap::stopScan(). A former call to 00981 * ble.stopScan() should be replaced with 00982 * ble.gap().stopScan(). 00983 */ 00984 MBED_DEPRECATED("Use ble.gap().stopScan()") 00985 ble_error_t stopScan(void) { 00986 return gap().stopScan(); 00987 } 00988 00989 /** 00990 * Create a connection (GAP Link Establishment). 00991 * @param peerAddr 00992 * 48-bit address, LSB format. 00993 * @param peerAddrType 00994 * Address type of the peer. 00995 * @param connectionParams 00996 * Connection parameters. 00997 * @param scanParams 00998 * Parameters to use while scanning for the peer. 00999 * @return BLE_ERROR_NONE if connection establishment procedure is started 01000 * successfully. The onConnection callback (if set) is invoked upon 01001 * a connection event. 01002 * 01003 * @deprecated You should use the parallel API from Gap directly and refer to 01004 * Gap::connect(). A former call to 01005 * ble.connect(...) should be replaced with 01006 * ble.gap().connect(...). 01007 */ 01008 MBED_DEPRECATED("Use ble.gap().connect(...)") 01009 ble_error_t connect(const BLEProtocol::AddressBytes_t peerAddr, 01010 BLEProtocol::AddressType_t peerAddrType = BLEProtocol::AddressType::RANDOM_STATIC, 01011 const Gap::ConnectionParams_t *connectionParams = NULL, 01012 const GapScanningParams *scanParams = NULL) { 01013 return gap().connect(peerAddr, peerAddrType, connectionParams, scanParams); 01014 } 01015 01016 /** 01017 * This call initiates the disconnection procedure, and its completion is 01018 * communicated to the application with an invocation of the 01019 * onDisconnection callback. 01020 * 01021 * @param[in] connectionHandle 01022 * @param[in] reason 01023 * The reason for disconnection; sent back to the peer. 01024 */ 01025 MBED_DEPRECATED("Use ble.gap().disconnect(...)") 01026 ble_error_t disconnect(Gap::Handle_t connectionHandle, Gap::DisconnectionReason_t reason) { 01027 return gap().disconnect(connectionHandle, reason); 01028 } 01029 01030 /** 01031 * This call initiates the disconnection procedure, and its completion 01032 * is communicated to the application with an invocation of the 01033 * onDisconnection callback. 01034 * 01035 * @param reason 01036 * The reason for disconnection; sent back to the peer. 01037 * 01038 * @deprecated You should use the parallel API from Gap directly and refer to 01039 * Gap::disconnect(). A former call to 01040 * ble.disconnect(reason) should be replaced with 01041 * ble.gap().disconnect(reason). 01042 * 01043 * @note This version of disconnect() doesn't take a connection handle. It 01044 * works reliably only for stacks that are limited to a single 01045 * connection. 01046 */ 01047 MBED_DEPRECATED("Use ble.gap().disconnect(...)") 01048 ble_error_t disconnect(Gap::DisconnectionReason_t reason) { 01049 return gap().disconnect(reason); 01050 } 01051 01052 /** 01053 * Returns the current Gap state of the device using a bitmask that 01054 * describes whether the device is advertising or connected. 01055 * 01056 * @deprecated You should use the parallel API from Gap directly and refer to 01057 * Gap::getState(). A former call to 01058 * ble.getGapState() should be replaced with 01059 * ble.gap().getState(). 01060 */ 01061 MBED_DEPRECATED("Use ble.gap().getGapState(...)") 01062 Gap::GapState_t getGapState(void) const { 01063 return gap().getState(); 01064 } 01065 01066 /** 01067 * Get the GAP peripheral's preferred connection parameters. These are the 01068 * defaults that the peripheral would like to have in a connection. The 01069 * choice of the connection parameters is eventually up to the central. 01070 * 01071 * @param[out] params 01072 * The structure where the parameters will be stored. The caller owns memory 01073 * for this. 01074 * 01075 * @return BLE_ERROR_NONE if the parameters were successfully filled into 01076 * the given structure pointed to by params. 01077 * 01078 * @deprecated You should use the parallel API from Gap directly and refer to 01079 * Gap::getPreferredConnectionParams(). A former call to 01080 * ble.getPreferredConnectionParams() should be replaced with 01081 * ble.gap().getPreferredConnectionParams(). 01082 */ 01083 MBED_DEPRECATED("Use ble.gap().getPreferredConnectionParams(...)") 01084 ble_error_t getPreferredConnectionParams(Gap::ConnectionParams_t *params) { 01085 return gap().getPreferredConnectionParams(params); 01086 } 01087 01088 /** 01089 * Set the GAP peripheral's preferred connection parameters. These are the 01090 * defaults that the peripheral would like to have in a connection. The 01091 * choice of the connection parameters is eventually up to the central. 01092 * 01093 * @param[in] params 01094 * The structure containing the desired parameters. 01095 * 01096 * @deprecated You should use the parallel API from Gap directly and refer to 01097 * Gap::setPreferredConnectionParams(). A former call to 01098 * ble.setPreferredConnectionParams() should be replaced with 01099 * ble.gap().setPreferredConnectionParams(). 01100 */ 01101 MBED_DEPRECATED("Use ble.gap().setPreferredConnectionParams(...)") 01102 ble_error_t setPreferredConnectionParams(const Gap::ConnectionParams_t *params) { 01103 return gap().setPreferredConnectionParams(params); 01104 } 01105 01106 /** 01107 * Update connection parameters while in the peripheral role. 01108 * @details In the peripheral role, this will send the corresponding L2CAP request to the connected peer and wait for 01109 * the central to perform the procedure. 01110 * @param[in] handle 01111 * Connection Handle 01112 * @param[in] params 01113 * Pointer to desired connection parameters. If NULL is provided on a peripheral role, 01114 * the parameters in the PPCP characteristic of the GAP service will be used instead. 01115 * 01116 * @deprecated You should use the parallel API from Gap directly and refer to 01117 * Gap::updateConnectionParams(). A former call to 01118 * ble.updateConnectionParams() should be replaced with 01119 * ble.gap().updateConnectionParams(). 01120 */ 01121 MBED_DEPRECATED("Use ble.gap().updateConnectionParams(...)") 01122 ble_error_t updateConnectionParams(Gap::Handle_t handle, const Gap::ConnectionParams_t *params) { 01123 return gap().updateConnectionParams(handle, params); 01124 } 01125 01126 /** 01127 * Set the device name characteristic in the Gap service. 01128 * @param[in] deviceName 01129 * The new value for the device-name. This is a UTF-8 encoded, <b>NULL-terminated</b> string. 01130 * 01131 * @deprecated You should use the parallel API from Gap directly and refer to 01132 * Gap::setDeviceName(). A former call to 01133 * ble.setDeviceName() should be replaced with 01134 * ble.gap().setDeviceName(). 01135 */ 01136 MBED_DEPRECATED("Use ble.gap().setDeviceName(...)") 01137 ble_error_t setDeviceName(const uint8_t *deviceName) { 01138 return gap().setDeviceName(deviceName); 01139 } 01140 01141 /** 01142 * Get the value of the device name characteristic in the Gap service. 01143 * @param[out] deviceName 01144 * Pointer to an empty buffer where the UTF-8 *non NULL- 01145 * terminated* string will be placed. Set this 01146 * value to NULL to obtain the deviceName-length 01147 * from the 'length' parameter. 01148 * 01149 * @param[in,out] lengthP 01150 * (on input) Length of the buffer pointed to by deviceName; 01151 * (on output) the complete device name length (without the 01152 * null terminator). 01153 * 01154 * @note If the device name is longer than the size of the supplied buffer, 01155 * the length will return the complete device name length and not the 01156 * number of bytes actually returned in deviceName. The application may 01157 * use this information to retry with a suitable buffer size. 01158 * 01159 * @deprecated You should use the parallel API from Gap directly and refer to 01160 * Gap::getDeviceName(). A former call to 01161 * ble.getDeviceName() should be replaced with 01162 * ble.gap().getDeviceName(). 01163 */ 01164 MBED_DEPRECATED("Use ble.gap().getDeviceName(...)") 01165 ble_error_t getDeviceName(uint8_t *deviceName, unsigned *lengthP) { 01166 return gap().getDeviceName(deviceName, lengthP); 01167 } 01168 01169 /** 01170 * Set the appearance characteristic in the Gap service. 01171 * @param[in] appearance 01172 * The new value for the device-appearance. 01173 * 01174 * @deprecated You should use the parallel API from Gap directly and refer to 01175 * Gap::setAppearance(). A former call to 01176 * ble.setAppearance() should be replaced with 01177 * ble.gap().setAppearance(). 01178 */ 01179 MBED_DEPRECATED("Use ble.gap().setAppearance(...)") 01180 ble_error_t setAppearance(GapAdvertisingData::Appearance appearance) { 01181 return gap().setAppearance(appearance); 01182 } 01183 01184 /** 01185 * Get the appearance characteristic in the Gap service. 01186 * @param[out] appearanceP 01187 * The new value for the device-appearance. 01188 * 01189 * @deprecated You should use the parallel API from Gap directly, refer to 01190 * Gap::getAppearance(). A former call to 01191 * ble.getAppearance() should be replaced with 01192 * ble.gap().getAppearance(). 01193 */ 01194 MBED_DEPRECATED("Use ble.gap().getAppearance(...)") 01195 ble_error_t getAppearance(GapAdvertisingData::Appearance *appearanceP) { 01196 return gap().getAppearance(appearanceP); 01197 } 01198 01199 /** 01200 * Set the radio's transmit power. 01201 * @param[in] txPower Radio transmit power in dBm. 01202 * 01203 * @deprecated You should use the parallel API from Gap directly and refer to 01204 * Gap::setTxPower(). A former call to 01205 * ble.setTxPower() should be replaced with 01206 * ble.gap().setTxPower(). 01207 */ 01208 MBED_DEPRECATED("Use ble.gap().setTxPower(...)") 01209 ble_error_t setTxPower(int8_t txPower) { 01210 return gap().setTxPower(txPower); 01211 } 01212 01213 /** 01214 * Query the underlying stack for permitted arguments for setTxPower(). 01215 * 01216 * @param[out] valueArrayPP 01217 * Out parameter to receive the immutable array of Tx values. 01218 * @param[out] countP 01219 * Out parameter to receive the array's size. 01220 * 01221 * @deprecated You should use the parallel API from Gap directly, refer to 01222 * Gap::getPermittedTxPowerValues(). A former call to 01223 * ble.getPermittedTxPowerValues() should be replaced with 01224 * ble.gap().getPermittedTxPowerValues(). 01225 */ 01226 MBED_DEPRECATED("Use ble.gap().getPermittedTxPowerValues(...)") 01227 void getPermittedTxPowerValues(const int8_t **valueArrayPP, size_t *countP) { 01228 gap().getPermittedTxPowerValues(valueArrayPP, countP); 01229 } 01230 01231 /** 01232 * Add a service declaration to the local server ATT table. Also add the 01233 * characteristics contained within. 01234 * 01235 * @deprecated You should use the parallel API from GattServer directly, refer to 01236 * GattServer::addService(). A former call 01237 * to ble.addService() should be replaced with 01238 * ble.gattServer().addService(). 01239 */ 01240 MBED_DEPRECATED("Use ble.gattServer().addService(...)") 01241 ble_error_t addService(GattService &service) { 01242 return gattServer().addService(service); 01243 } 01244 01245 /** 01246 * Read the value of a characteristic from the local GattServer. 01247 * @param[in] attributeHandle 01248 * Attribute handle for the value attribute of the characteristic. 01249 * @param[out] buffer 01250 * A buffer to hold the value being read. 01251 * @param[in,out] lengthP 01252 * Length of the buffer being supplied. If the attribute 01253 * value is longer than the size of the supplied buffer, 01254 * this variable will return the total attribute value length 01255 * (excluding offset). The application may use this 01256 * information to allocate a suitable buffer size. 01257 * 01258 * @return BLE_ERROR_NONE if a value was read successfully into the buffer. 01259 * 01260 * @deprecated You should use the parallel API from GattServer directly, 01261 * GattServer::read(GattAttribute::Handle_t,uint8_t,uint16_t). A former call 01262 * to ble.readCharacteristicValue() should be replaced with 01263 * ble.gattServer().read(). 01264 */ 01265 MBED_DEPRECATED("Use ble.gattServer().read(...)") 01266 ble_error_t readCharacteristicValue(GattAttribute::Handle_t attributeHandle, uint8_t *buffer, uint16_t *lengthP) { 01267 return gattServer().read(attributeHandle, buffer, lengthP); 01268 } 01269 01270 /** 01271 * Read the value of a characteristic from the local GattServer. 01272 * @param[in] connectionHandle 01273 * Connection Handle. 01274 * @param[in] attributeHandle 01275 * Attribute handle for the value attribute of the characteristic. 01276 * @param[out] buffer 01277 * A buffer to hold the value being read. 01278 * @param[in,out] lengthP 01279 * Length of the buffer being supplied. If the attribute 01280 * value is longer than the size of the supplied buffer, 01281 * this variable will return the total attribute value length 01282 * (excluding offset). The application may use this 01283 * information to allocate a suitable buffer size. 01284 * 01285 * @return BLE_ERROR_NONE if a value was read successfully into the buffer. 01286 * 01287 * @note This API is a version of the above, with an additional connection handle 01288 * parameter to allow fetches for connection-specific multivalued 01289 * attributes (such as the CCCDs). 01290 * 01291 * @deprecated You should use the parallel API from GattServer directly, refer to 01292 * GattServer::read(Gap::Handle_t,GattAttribute::Handle_t,uint8_t,uint16_t). 01293 * A former call to ble.readCharacteristicValue() should be replaced with 01294 * ble.gattServer().read(). 01295 */ 01296 MBED_DEPRECATED("Use ble.gattServer().read(...)") 01297 ble_error_t readCharacteristicValue(Gap::Handle_t connectionHandle, GattAttribute::Handle_t attributeHandle, uint8_t *buffer, uint16_t *lengthP) { 01298 return gattServer().read(connectionHandle, attributeHandle, buffer, lengthP); 01299 } 01300 01301 /** 01302 * Update the value of a characteristic on the local GattServer. 01303 * 01304 * @param[in] attributeHandle 01305 * Handle for the value attribute of the characteristic. 01306 * @param[in] value 01307 * A pointer to a buffer holding the new value. 01308 * @param[in] size 01309 * Size of the new value (in bytes). 01310 * @param[in] localOnly 01311 * Should this update be kept on the local 01312 * GattServer regardless of the state of the 01313 * notify/indicate flag in the CCCD for this 01314 * characteristic? If set to true, no notification 01315 * or indication is generated. 01316 * 01317 * @return BLE_ERROR_NONE if we have successfully set the value of the attribute. 01318 * 01319 * @deprecated You should use the parallel API from GattServer directly and refer to 01320 * GattServer::write(GattAttribute::Handle_t,const uint8_t,uint16_t,bool). 01321 * A former call to ble.updateCharacteristicValue() should be replaced with 01322 * ble.gattServer().write(). 01323 */ 01324 MBED_DEPRECATED("Use ble.gattServer().write(...)") 01325 ble_error_t updateCharacteristicValue(GattAttribute::Handle_t attributeHandle, 01326 const uint8_t *value, 01327 uint16_t size, 01328 bool localOnly = false) { 01329 return gattServer().write(attributeHandle, value, size, localOnly); 01330 } 01331 01332 /** 01333 * Update the value of a characteristic on the local GattServer. A version 01334 * of the above, with a connection handle parameter to allow updates 01335 * for connection-specific multivalued attributes (such as the CCCDs). 01336 * 01337 * @param[in] connectionHandle 01338 * Connection Handle. 01339 * @param[in] attributeHandle 01340 * Handle for the value attribute of the Characteristic. 01341 * @param[in] value 01342 * A pointer to a buffer holding the new value. 01343 * @param[in] size 01344 * Size of the new value (in bytes). 01345 * @param[in] localOnly 01346 * Should this update be kept on the local 01347 * GattServer regardless of the state of the 01348 * notify/indicate flag in the CCCD for this 01349 * Characteristic? If set to true, no notification 01350 * or indication is generated. 01351 * 01352 * @return BLE_ERROR_NONE if we have successfully set the value of the attribute. 01353 * 01354 * @deprecated You should use the parallel API from GattServer directly and refer to 01355 * GattServer::write(Gap::Handle_t,GattAttribute::Handle_t,const uint8_t,uint16_t,bool). 01356 * A former call to ble.updateCharacteristicValue() should be replaced with 01357 * ble.gattServer().write(). 01358 */ 01359 MBED_DEPRECATED("Use ble.gattServer().write(...)") 01360 ble_error_t updateCharacteristicValue(Gap::Handle_t connectionHandle, 01361 GattAttribute::Handle_t attributeHandle, 01362 const uint8_t *value, 01363 uint16_t size, 01364 bool localOnly = false) { 01365 return gattServer().write(connectionHandle, attributeHandle, value, size, localOnly); 01366 } 01367 01368 /** 01369 * Enable the BLE stack's Security Manager. The Security Manager implements 01370 * the cryptographic algorithms and protocol exchanges that allow two 01371 * devices to securely exchange data and privately detect each other. 01372 * Calling this API is a prerequisite for encryption and pairing (bonding). 01373 * 01374 * @param[in] enableBonding Allow for bonding. 01375 * @param[in] requireMITM Require protection against man-in-the-middle attacks. 01376 * @param[in] iocaps To specify the I/O capabilities of this peripheral, 01377 * such as availability of a display or keyboard, to 01378 * support out-of-band exchanges of security data. 01379 * @param[in] passkey To specify a static passkey. 01380 * 01381 * @return BLE_ERROR_NONE on success. 01382 * 01383 * @deprecated You should use the parallel API from SecurityManager directly, refer to 01384 * SecurityManager.init(). A former 01385 * call to ble.initializeSecurity(...) should be replaced with 01386 * ble.securityManager().init(...). 01387 */ 01388 MBED_DEPRECATED("Use ble.gattServer().write(...)") 01389 ble_error_t initializeSecurity(bool enableBonding = true, 01390 bool requireMITM = true, 01391 SecurityManager::SecurityIOCapabilities_t iocaps = SecurityManager::IO_CAPS_NONE, 01392 const SecurityManager::Passkey_t passkey = NULL) { 01393 return securityManager().init(enableBonding, requireMITM, iocaps, passkey); 01394 } 01395 01396 /** 01397 * Get the security status of a connection. 01398 * 01399 * @param[in] connectionHandle Handle to identify the connection. 01400 * @param[out] securityStatusP Security status. 01401 * 01402 * @return BLE_SUCCESS or appropriate error code indicating the reason of failure. 01403 * 01404 * @deprecated You should use the parallel API from SecurityManager directly, refer to 01405 * SecurityManager::getLinkSecurity(). A former 01406 * call to ble.getLinkSecurity(...) should be replaced with 01407 * ble.securityManager().getLinkSecurity(...). 01408 */ 01409 MBED_DEPRECATED("ble.securityManager().getLinkSecurity(...)") 01410 ble_error_t getLinkSecurity(Gap::Handle_t connectionHandle, SecurityManager::LinkSecurityStatus_t *securityStatusP) { 01411 return securityManager().getLinkSecurity (connectionHandle, securityStatusP); 01412 } 01413 01414 /** 01415 * Delete all peer device context and all related bonding information from 01416 * the database within the security manager. 01417 * 01418 * @retval BLE_ERROR_NONE On success; else returns an error code indicating the reason for the failure. 01419 * @retval BLE_ERROR_INVALID_STATE If the API is called without module initialization or 01420 * application registration. 01421 * 01422 * @deprecated You should use the parallel API from SecurityManager directly and refer to 01423 * SecurityManager::purgeAllBondingState(). A former 01424 * call to ble.purgeAllBondingState() should be replaced with 01425 * ble.securityManager().purgeAllBondingState(). 01426 */ 01427 MBED_DEPRECATED("ble.securityManager().purgeAllBondingState(...)") 01428 ble_error_t purgeAllBondingState(void) { 01429 return securityManager().purgeAllBondingState(); 01430 } 01431 01432 /** 01433 * Set up a callback for timeout events. Refer to Gap::TimeoutSource_t for 01434 * possible event types. 01435 * 01436 * @deprecated You should use the parallel API from Gap directly and refer to 01437 * Gap::onTimeout(). A former call 01438 * to ble.onTimeout(callback) should be replaced with 01439 * ble.gap().onTimeout(callback). 01440 */ 01441 MBED_DEPRECATED("ble.gap().onTimeout(callback)") 01442 void onTimeout(Gap::TimeoutEventCallback_t timeoutCallback) { 01443 gap().onTimeout(timeoutCallback); 01444 } 01445 01446 /** 01447 * Set up a callback for connection events. Refer to Gap::ConnectionEventCallback_t. 01448 * 01449 * @deprecated You should use the parallel API from Gap directly, refer to 01450 * Gap::onConnection(). A former call 01451 * to ble.onConnection(callback) should be replaced with 01452 * ble.gap().onConnection(callback). 01453 */ 01454 MBED_DEPRECATED("ble.gap().onConnection(callback)") 01455 void onConnection(Gap::ConnectionEventCallback_t connectionCallback) { 01456 gap().onConnection(connectionCallback); 01457 } 01458 01459 /** 01460 * Append to a chain of callbacks to be invoked upon GAP disconnection. 01461 * 01462 * @deprecated You should use the parallel API from Gap directly and refer to 01463 * Gap::onDisconnection(). A former call 01464 * to ble.onDisconnection(callback) should be replaced with 01465 * ble.gap().onDisconnection(callback). 01466 */ 01467 MBED_DEPRECATED("ble.gap().onDisconnection(callback)") 01468 void onDisconnection(Gap::DisconnectionEventCallback_t disconnectionCallback) { 01469 gap().onDisconnection(disconnectionCallback); 01470 } 01471 01472 /** 01473 * The same as onDisconnection() but allows an object reference and member function 01474 * to be added to the chain of callbacks. 01475 * 01476 * @deprecated You should use the parallel API from Gap directly and refer to 01477 * Gap::onDisconnection(). A former call 01478 * to ble.onDisconnection(callback) should be replaced with 01479 * ble.gap().onDisconnection(callback). 01480 */ 01481 template<typename T> 01482 MBED_DEPRECATED("ble.gap().onDisconnection(callback)") 01483 void onDisconnection(T *tptr, void (T::*mptr)(const Gap::DisconnectionCallbackParams_t*)) { 01484 gap().onDisconnection(tptr, mptr); 01485 } 01486 01487 /** 01488 * Radio Notification is a feature that enables ACTIVE and INACTIVE 01489 * (nACTIVE) signals from the stack. These notify the application when the 01490 * radio is in use. The signal is sent using software interrupt. 01491 * 01492 * The ACTIVE signal is sent before the radio event starts. The nACTIVE 01493 * signal is sent at the end of the radio event. These signals can be used 01494 * by the application programmer to synchronize application logic with radio 01495 * activity. For example, the ACTIVE signal can be used to shut off external 01496 * devices to manage peak current drawn during periods when the radio is on, 01497 * or to trigger sensor data collection for transmission in the radio event. 01498 * 01499 * @param callback 01500 * The application handler to be invoked in response to a radio 01501 * ACTIVE/INACTIVE event. 01502 * 01503 * @deprecated You should use the parallel API from Gap directly, refer to 01504 * Gap::onRadioNotification(). A former call 01505 * to ble.onRadioNotification(...) should be replaced with 01506 * ble.gap().onRadioNotification(...). 01507 */ 01508 MBED_DEPRECATED("ble.gap().onRadioNotification(...)") 01509 void onRadioNotification(void (*callback)(bool)) { 01510 gap().onRadioNotification(callback); 01511 } 01512 01513 /** 01514 * Add a callback for the GATT event DATA_SENT (which is triggered when 01515 * updates are sent out by GATT in the form of notifications). 01516 * 01517 * @note It is possible to chain together multiple onDataSent callbacks 01518 * (potentially from different modules of an application) to receive updates 01519 * to characteristics. 01520 * 01521 * @note It is also possible to set up a callback into a member function of 01522 * some object. 01523 * 01524 * @deprecated You should use the parallel API from GattServer directly and refer to 01525 * GattServer::onDataSent(). A former call 01526 * to ble.onDataSent(...) should be replaced with 01527 * ble.gattServer().onDataSent(...). 01528 */ 01529 MBED_DEPRECATED("ble.gattServer().onDataSent(...)") 01530 void onDataSent(void (*callback)(unsigned count)) { 01531 gattServer().onDataSent(callback); 01532 } 01533 01534 /** 01535 * The same as onDataSent() but allows an object reference and member function 01536 * to be added to the chain of callbacks. 01537 * 01538 * @deprecated You should use the parallel API from GattServer directly and refer to 01539 * GattServer::onDataSent(). A former call 01540 * to ble.onDataSent(...) should be replaced with 01541 * ble.gattServer().onDataSent(...). 01542 */ 01543 template <typename T> 01544 MBED_DEPRECATED("ble.gattServer().onDataSent(...)") 01545 void onDataSent(T * objPtr, void (T::*memberPtr)(unsigned count)) { 01546 gattServer().onDataSent(objPtr, memberPtr); 01547 } 01548 01549 /** 01550 * Set up a callback for when an attribute has its value updated by or at the 01551 * connected peer. For a peripheral, this callback is triggered when the local 01552 * GATT server has an attribute updated by a write command from the peer. 01553 * For a Central, this callback is triggered when a response is received for 01554 * a write request. 01555 * 01556 * @note It is possible to chain together multiple onDataWritten callbacks 01557 * (potentially from different modules of an application) to receive updates 01558 * to characteristics. Many services, such as DFU and UART, add their own 01559 * onDataWritten callbacks behind the scenes to trap interesting events. 01560 * 01561 * @note It is also possible to set up a callback into a member function of 01562 * some object. 01563 * 01564 * @deprecated You should use the parallel API from GattServer directly and refer to 01565 * GattServer::onDataWritten(). A former call 01566 * to ble.onDataWritten(...) should be replaced with 01567 * ble.gattServer().onDataWritten(...). 01568 */ 01569 MBED_DEPRECATED("ble.gattServer().onDataWritten(...)") 01570 void onDataWritten(void (*callback)(const GattWriteCallbackParams *eventDataP)) { 01571 gattServer().onDataWritten(callback); 01572 } 01573 01574 /** 01575 * The same as onDataWritten() but allows an object reference and member function 01576 * to be added to the chain of callbacks. 01577 * 01578 * @deprecated You should use the parallel API from GattServer directly, refer to 01579 * GattServer::onDataWritten(). A former call 01580 * to ble.onDataWritten(...) should be replaced with 01581 * ble.gattServer().onDataWritten(...). 01582 */ 01583 template <typename T> 01584 MBED_DEPRECATED("ble.gattServer().onDataWritten(...)") 01585 void onDataWritten(T * objPtr, void (T::*memberPtr)(const GattWriteCallbackParams *context)) { 01586 gattServer().onDataWritten(objPtr, memberPtr); 01587 } 01588 01589 /** 01590 * Set up a callback to be invoked on the peripheral when an attribute is 01591 * being read by a remote client. 01592 * 01593 * @note This functionality may not be available on all underlying stacks. 01594 * You could use GattCharacteristic::setReadAuthorizationCallback() as an 01595 * alternative. 01596 * 01597 * @note It is possible to chain together multiple onDataRead callbacks 01598 * (potentially from different modules of an application) to receive updates 01599 * to characteristics. Services may add their own onDataRead callbacks 01600 * behind the scenes to trap interesting events. 01601 * 01602 * @note It is also possible to set up a callback into a member function of 01603 * some object. 01604 * 01605 * @return BLE_ERROR_NOT_IMPLEMENTED if this functionality isn't available; 01606 * else BLE_ERROR_NONE. 01607 * 01608 * @deprecated You should use the parallel API from GattServer directly and refer to 01609 * GattServer::onDataRead(). A former call 01610 * to ble.onDataRead(...) should be replaced with 01611 * ble.gattServer().onDataRead(...). 01612 */ 01613 MBED_DEPRECATED("ble.gattServer().onDataRead(...)") 01614 ble_error_t onDataRead(void (*callback)(const GattReadCallbackParams *eventDataP)) { 01615 return gattServer().onDataRead(callback); 01616 } 01617 01618 /** 01619 * The same as onDataRead() but allows an object reference and member function 01620 * to be added to the chain of callbacks. 01621 * 01622 * @deprecated You should use the parallel API from GattServer directly and refer to 01623 * GattServer::onDataRead(). A former call 01624 * to ble.onDataRead(...) should be replaced with 01625 * ble.gattServer().onDataRead(...). 01626 */ 01627 template <typename T> 01628 MBED_DEPRECATED("ble.gattServer().onDataRead(...)") 01629 ble_error_t onDataRead(T * objPtr, void (T::*memberPtr)(const GattReadCallbackParams *context)) { 01630 return gattServer().onDataRead(objPtr, memberPtr); 01631 } 01632 01633 /** 01634 * Set up a callback for when notifications or indications are enabled for a 01635 * characteristic on the local GattServer. 01636 * 01637 * @deprecated You should use the parallel API from GattServer directly and refer to 01638 * GattServer::onUpdatesEnabled(). A former call 01639 * to ble.onUpdatesEnabled(callback) should be replaced with 01640 * ble.gattServer().onUpdatesEnabled(callback). 01641 */ 01642 MBED_DEPRECATED("ble.gattServer().onUpdatesEnabled(...)") 01643 void onUpdatesEnabled(GattServer::EventCallback_t callback) { 01644 gattServer().onUpdatesEnabled(callback); 01645 } 01646 01647 /** 01648 * Set up a callback for when notifications or indications are disabled for a 01649 * characteristic on the local GattServer. 01650 * 01651 * @deprecated You should use the parallel API from GattServer directly and refer to 01652 * GattServer::onUpdatesDisabled(). A former call 01653 * to ble.onUpdatesDisabled(callback) should be replaced with 01654 * ble.gattServer().onUpdatesDisabled(callback). 01655 */ 01656 MBED_DEPRECATED("ble.gattServer().onUpdatesDisabled(...)") 01657 void onUpdatesDisabled(GattServer::EventCallback_t callback) { 01658 gattServer().onUpdatesDisabled(callback); 01659 } 01660 01661 /** 01662 * Set up a callback for when the GATT server receives a response for an 01663 * indication event sent previously. 01664 * 01665 * @deprecated You should use the parallel API from GattServer directly and refer to 01666 * GattServer::onConfirmationReceived(). A former call 01667 * to ble.onConfirmationReceived(callback) should be replaced with 01668 * ble.gattServer().onConfirmationReceived(callback). 01669 */ 01670 MBED_DEPRECATED("ble.gattServer().onConfirmationReceived(...)") 01671 void onConfirmationReceived(GattServer::EventCallback_t callback) { 01672 gattServer().onConfirmationReceived(callback); 01673 } 01674 01675 /** 01676 * Set up a callback for when the security setup procedure (key generation 01677 * and exchange) for a link has started. This will be skipped for bonded 01678 * devices. The callback is passed in parameters received from the peer's 01679 * security request: bool allowBonding, bool requireMITM and 01680 * SecurityIOCapabilities_t. 01681 * 01682 * @deprecated You should use the parallel API from SecurityManager directly and refer to 01683 * SecurityManager::onSecuritySetupInitiated(). A former 01684 * call to ble.onSecuritySetupInitiated(callback) should be replaced with 01685 * ble.securityManager().onSecuritySetupInitiated(callback). 01686 */ 01687 MBED_DEPRECATED("ble.securityManager().onSecuritySetupInitiated(callback)") 01688 void onSecuritySetupInitiated(SecurityManager::SecuritySetupInitiatedCallback_t callback) { 01689 securityManager().onSecuritySetupInitiated (callback); 01690 } 01691 01692 /** 01693 * Set up a callback for when the security setup procedure (key generation 01694 * and exchange) for a link has completed. This will be skipped for bonded 01695 * devices. The callback is passed in the success/failure status of the 01696 * security setup procedure. 01697 * 01698 * @deprecated You should use the parallel API from SecurityManager directly and refer to 01699 * SecurityManager::onSecuritySetupCompleted(). A former 01700 * call to ble.onSecuritySetupCompleted(callback) should be replaced with 01701 * ble.securityManager().onSecuritySetupCompleted(callback). 01702 */ 01703 MBED_DEPRECATED("ble.securityManager().onSecuritySetupCompleted(callback)") 01704 void onSecuritySetupCompleted(SecurityManager::SecuritySetupCompletedCallback_t callback) { 01705 securityManager().onSecuritySetupCompleted (callback); 01706 } 01707 01708 /** 01709 * Set up a callback for when a link with the peer is secured. For bonded 01710 * devices, subsequent reconnections with a bonded peer will result only in 01711 * this callback when the link is secured, and setup procedures will not 01712 * occur unless the bonding information is either lost or deleted on either 01713 * or both sides. The callback is passed in a SecurityManager::SecurityMode_t according 01714 * to the level of security in effect for the secured link. 01715 * 01716 * @deprecated You should use the parallel API from SecurityManager directly and refer to 01717 * SecurityManager::onLinkSecured(). A former 01718 * call to ble.onLinkSecured(callback) should be replaced with 01719 * ble.securityManager().onLinkSecured(callback). 01720 */ 01721 MBED_DEPRECATED("ble.securityManager().onLinkSecured(callback)") 01722 void onLinkSecured(SecurityManager::LinkSecuredCallback_t callback) { 01723 securityManager().onLinkSecured (callback); 01724 } 01725 01726 /** 01727 * Set up a callback for successful bonding, meaning that link-specific security 01728 * context is stored persistently for a peer device. 01729 * 01730 * @deprecated You should use the parallel API from SecurityManager directly and refer to 01731 * SecurityManager::onSecurityContextStored(). A former 01732 * call to ble.onSecurityContextStored(callback) should be replaced with 01733 * ble.securityManager().onSecurityContextStored(callback). 01734 */ 01735 MBED_DEPRECATED("ble.securityManager().onSecurityContextStored(callback)") 01736 void onSecurityContextStored(SecurityManager::HandleSpecificEvent_t callback) { 01737 securityManager().onSecurityContextStored (callback); 01738 } 01739 01740 /** 01741 * Set up a callback for when the passkey needs to be displayed on a 01742 * peripheral with DISPLAY capability. This happens when security is 01743 * configured to prevent man-in-the-middle attacks, and the peers need to exchange 01744 * a passkey (or PIN) to authenticate the connection 01745 * attempt. 01746 * 01747 * @deprecated You should use the parallel API from SecurityManager directly and refer to 01748 * SecurityManager::onPasskeyDisplay(). A former 01749 * call to ble.onPasskeyDisplay(callback) should be replaced with 01750 * ble.securityManager().onPasskeyDisplay(callback). 01751 */ 01752 MBED_DEPRECATED("ble.securityManager().onPasskeyDisplay(callback)") 01753 void onPasskeyDisplay(SecurityManager::PasskeyDisplayCallback_t callback) { 01754 return securityManager().onPasskeyDisplay (callback); 01755 } 01756 01757 private: 01758 friend class BLEInstanceBase; 01759 01760 /** 01761 * This function allows the BLE stack to signal that there is work to do and 01762 * event processing should be done (BLE::processEvent()). 01763 * 01764 * @note This function should be called by the port of BLE_API. It is not 01765 * meant to be used by end users. 01766 */ 01767 void signalEventsToProcess(); 01768 01769 /** 01770 * Implementation of init() [internal to BLE_API]. 01771 * 01772 * The implementation is separated into a private method because it isn't 01773 * suitable to be included in the header. 01774 */ 01775 ble_error_t initImplementation( 01776 FunctionPointerWithContext<InitializationCompleteCallbackContext *> callback 01777 ); 01778 01779 private: 01780 // Prevent copy construction and copy assignment of BLE. 01781 BLE(const BLE&); 01782 BLE &operator=(const BLE &); 01783 01784 private: 01785 InstanceID_t instanceID; 01786 BLEInstanceBase *transport; /* The device-specific backend */ 01787 OnEventsToProcessCallback_t whenEventsToProcess; 01788 bool event_signaled; 01789 }; 01790 01791 /** 01792 * @deprecated This type alias is retained for the sake of compatibility with 01793 * older code. This will be dropped at some point. 01794 */ 01795 typedef BLE BLEDevice ; 01796 01797 /** 01798 * @namespace ble Entry namespace for all %BLE API definitions. 01799 */ 01800 01801 /** 01802 * @} 01803 */ 01804 01805 #endif /* ifndef MBED_BLE_H__ */
Generated on Tue Jul 12 2022 14:23:25 by
