Mbed OS Reference
Loading...
Searching...
No Matches
GattServer.h
1/* mbed Microcontroller Library
2 * Copyright (c) 2006-2020 ARM Limited
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19
20#ifndef MBED_GATT_SERVER_H__
21#define MBED_GATT_SERVER_H__
22
23#include "platform/mbed_toolchain.h"
24
25#include "ble/common/CallChainOfFunctionPointersWithContext.h"
26#include "ble/common/blecommon.h"
27
28#include "ble/gatt/GattService.h"
29#include "ble/gatt/GattAttribute.h"
30#include "ble/gatt/GattCallbackParamTypes.h"
31
32namespace ble {
33
34#if !defined(DOXYGEN_ONLY)
35namespace impl {
36class GattServer;
37}
38#endif // !defined(DOXYGEN_ONLY)
39
40
41/**
42 * @addtogroup ble
43 * @{
44 * @addtogroup gatt
45 * @{
46 * @addtogroup server
47 * @{
48 */
49
50/**
51 * Construct and operates a GATT server.
52 *
53 * A Gatt server is a collection of GattService; these services contain
54 * characteristics that a peer connected to the device may read or write.
55 * These characteristics may also emit updates to subscribed clients when their
56 * values change.
57 *
58 * @p Server Layout
59 *
60 * Application code can add a GattService object to the server with the help of
61 * the function addService(). That function registers all the GattCharacteristic
62 * enclosed in the service, as well as all the characteristics descriptors (see
63 * GattAttribute) these characteristics contain. Service registration assigns
64 * a unique handle to the various attributes being part of the service; this
65 * handle should be used for subsequent read or write of these components.
66 *
67 * There are no primitives defined to remove a single service; however, a call to
68 * the function reset() removes all services previously registered in the
69 * GattServer.
70 *
71 * @p Characteristic and attributes access
72 *
73 * Values of the characteristic and the characteristic descriptor present in the
74 * GattServer must be accessed through the handle assigned to them when the service
75 * has been registered; the GattServer class offers several flavors of read()
76 * and write() functions that retrieve or mutate an attribute value.
77 *
78 * Application code can query if a client has subscribed to a given
79 * characteristic's value update by invoking the function areUpdatesEnabled().
80 *
81 * @p Events
82 *
83 * The GattServer allows application code to register several event handlers that
84 * can be used to monitor client and server activities:
85 * - onDataSent(): Register an event handler that is called when a
86 * characteristic value update has been sent to a client.
87 * - onDataWriten(): Register an event handler that is called when a
88 * client has written an attribute of the server.
89 * - onDataRead(): Register an event handler that is called when a
90 * client has read an attribute of the server.
91 * - onUpdatesEnabled: Register an event handler that is called when a
92 * client subscribes to updates of a characteristic.
93 * - onUpdatesDisabled: Register an event handler that is called when a
94 * client unsubscribes from updates of a characteristic.
95 * - onConfimationReceived: Register an event handler that is called
96 * when a client acknowledges a characteristic value notification.
97 *
98 * @note The term characteristic value update is used to represent
99 * Characteristic Value Notification and Characteristic Value Indication when
100 * the nature of the server initiated is not relevant.
101 */
103public:
104 /**
105 * Definition of the general handler of GattServer related events.
106 */
108 /**
109 * Function invoked when the connections changes the ATT_MTU which controls
110 * the maximum size of an attribute that can be read in a single L2CAP packet
111 * which might be fragmented across multiple packets.
112 *
113 * @param connectionHandle The handle of the connection that changed the size.
114 * @param attMtuSize
115 *
116 * @see negotiateAttMtu()
117 */
118 virtual void onAttMtuChange(
119 ble::connection_handle_t connectionHandle,
120 uint16_t attMtuSize
121 ) {
122 (void)connectionHandle;
123 (void)attMtuSize;
124 }
125
126 /**
127 * Function invoked when the server has sent data to a client. For
128 * notifications this is triggered when data is sent, for indications
129 * it's only triggered when the confirmation has been received.
130 *
131 * @note params has a temporary scope and should be copied by the
132 * application if needed later
133 */
134 virtual void onDataSent(const GattDataSentCallbackParams &params) {
135 (void)params;
136 }
137
138 /**
139 * Function invoked when a client writes an attribute
140 *
141 * @note params has a temporary scope and should be copied by the
142 * application if needed later
143 */
144 virtual void onDataWritten(const GattWriteCallbackParams &params) {
145 (void)params;
146 }
147
148 /**
149 * Function invoked when a client reads an attribute
150 *
151 * @note This functionality may not be available on all underlying stacks.
152 * Application code may work around that limitation by monitoring read
153 * requests instead of read events.
154 *
155 * @note params has a temporary scope and should be copied by the
156 * application if needed later
157 *
158 * @see GattCharacteristic::setReadAuthorizationCallback()
159 * @see isOnDataReadAvailable().
160 */
161 virtual void onDataRead(const GattReadCallbackParams &params) {
162 (void)params;
163 }
164
165 /**
166 * Function invoked when the GattServer instance is about
167 * to be shut down. This can be the result of a call to reset() or BLE::reset().
168 */
169 virtual void onShutdown(const GattServer &server) {
170 (void)server;
171 }
172
173 /**
174 * Function invoked when the client has subscribed to characteristic updates.
175 *
176 * @note params has a temporary scope and should be copied by the
177 * application if needed later
178 */
180 (void)params;
181 }
182
183 /**
184 * Function invoked when the client has unsubscribed from characteristic updates.
185 *
186 * @note params has a temporary scope and should be copied by the
187 * application if needed later
188 */
190 (void)params;
191 }
192
193 /**
194 * Event not used.
195 *
196 * @note params has a temporary scope and should be copied by the
197 * application if needed later
198 */
199 MBED_DEPRECATED_SINCE("mbed-os-6.11.0", "This event is never triggered. Indication triggers onDataSent"
200 "when confirmation is received.")
202 (void)params;
203 }
204
205 protected:
206 /**
207 * Prevent polymorphic deletion and avoid unnecessary virtual destructor
208 * as the GattServer class will never delete the instance it contains.
209 */
210 ~EventHandler() = default;
211 };
212
213 /**
214 * Event handler invoked when the server has sent data to a client.
215 *
216 * @see onDataSent().
217 */
219
220 /**
221 * Callchain of DataSentCallback_t objects.
222 *
223 * @see onDataSent().
224 */
227
228 /**
229 * Event handler invoked when the client has written an attribute of the
230 * server.
231 *
232 * @see onDataWritten().
233 */
236
237 /**
238 * Callchain of DataWrittenCallback_t objects.
239 *
240 * @see onDataWritten().
241 */
244
245 /**
246 * Event handler invoked when the client has read an attribute of the server.
247 *
248 * @see onDataRead().
249 */
252
253 /**
254 * Callchain of DataReadCallback_t.
255 *
256 * @see onDataRead().
257 */
260
261 /**
262 * Event handler invoked when the GattServer is reset.
263 *
264 * @see onShutdown() reset()
265 */
268
269 /**
270 * Callchain of GattServerShutdownCallback_t.
271 *
272 * @see onShutdown() reset()
273 */
276
277 /**
278 * Event handler that handles subscription to characteristic updates,
279 * unsubscription from characteristic updates and notification confirmation.
280 *
281 * @see onUpdatesEnabled() onUpdateDisabled()
282 */
284
285public:
286 /**
287 * Assign the event handler implementation that will be used by the
288 * module to signal events back to the application.
289 *
290 * @param handler Application implementation of an EventHandler.
291 *
292 * @note Multiple discrete EventHandler instances may be used by adding them
293 * to a ChainableGattServerEventHandler and then setting the chain as the primary
294 * GattServer EventHandler using this function.
295 *
296 * @see ChainableGattServerEventHandler
297 */
299
300 /**
301 * Shut down the GattServer instance.
302 *
303 * This function notifies all event handlers listening for shutdown events
304 * that the GattServer is about to be shut down; then it clears all
305 * GattServer state.
306 *
307 * @note This function is meant to be overridden in the platform-specific
308 * subclass. Overrides must call the parent function before any cleanup.
309 *
310 * @return BLE_ERROR_NONE on success.
311 *
312 * @see EventHandler::onShutdown()
313 */
315
316 /**
317 * Add a service declaration to the local attribute server table.
318 *
319 * This functions inserts a service declaration in the attribute table
320 * followed by the characteristic declarations (including characteristic
321 * descriptors) present in @p service.
322 *
323 * The process assigns a unique attribute handle to all the elements added
324 * into the attribute table. This handle is an ID that must be used for
325 * subsequent interactions with the elements.
326 *
327 * @note There is no mirror function that removes a single service.
328 * Application code can remove all the registered services by calling
329 * reset().
330 *
331 * @attention GattServer allocates its own memory for all the attributes.
332 * The GattServer will set the handles on the service passed in and the
333 * characteristics it contains. You may record the handles you want to
334 * interact with in the future. After that the service and characteristics
335 * you passed in as the parameter may be freed. To write to the GattServer
336 * instances of the characteristics you have to use the saved handles.
337 *
338 * @param[in] service The service to be added; attribute handle of services,
339 * characteristic and characteristic descriptors are updated by the
340 * process.
341 *
342 * @return BLE_ERROR_NONE if the service was successfully added.
343 */
345
346 /**
347 * Read the value of an attribute present in the local GATT server.
348 *
349 * @param[in] attributeHandle Handle of the attribute to read.
350 * @param[out] buffer A buffer to hold the value being read.
351 * @param[in,out] lengthP Length of the buffer being supplied. If the
352 * attribute value is longer than the size of the supplied buffer, this
353 * variable holds upon return the total attribute value length (excluding
354 * offset). The application may use this information to allocate a suitable
355 * buffer size.
356 *
357 * @return BLE_ERROR_NONE if a value was read successfully into the buffer.
358 *
359 * @attention read(ble::connection_handle_t, GattAttribute::Handle_t, uint8_t *, uint16_t *)
360 * must be used to read Client Characteristic Configuration Descriptor (CCCD)
361 * because the value of this type of attribute depends on the connection.
362 */
364 GattAttribute::Handle_t attributeHandle,
365 uint8_t buffer[],
366 uint16_t *lengthP
367 );
368
369 /**
370 * Read the value of an attribute present in the local GATT server.
371 *
372 * The connection handle allows application code to read the value of a
373 * Client Characteristic Configuration Descriptor for a given connection.
374 *
375 * @param[in] connectionHandle Connection handle.
376 * @param[in] attributeHandle Attribute handle for the value attribute of
377 * the characteristic.
378 * @param[out] buffer A buffer to hold the value being read.
379 * @param[in,out] lengthP Length of the buffer being supplied. If the
380 * attribute value is longer than the size of the supplied buffer, this
381 * variable holds upon return the total attribute value length (excluding
382 * offset). The application may use this information to allocate a suitable
383 * buffer size.
384 *
385 * @return BLE_ERROR_NONE if a value was read successfully into the buffer.
386 */
388 ble::connection_handle_t connectionHandle,
389 GattAttribute::Handle_t attributeHandle,
390 uint8_t *buffer,
391 uint16_t *lengthP
392 );
393
394 /**
395 * Update the value of an attribute present in the local GATT server.
396 *
397 * @param[in] attributeHandle Handle of the attribute to write.
398 * @param[in] value A pointer to a buffer holding the new value.
399 * @param[in] size Size in bytes of the new value (in bytes).
400 * @param[in] localOnly If this flag is false and the attribute handle
401 * written is a characteristic value, then the server sends an update
402 * containing the new value to all clients that have subscribed to the
403 * characteristic's notifications or indications. Otherwise, the update does
404 * not generate a single server initiated event.
405 *
406 * @return BLE_ERROR_NONE if the attribute value has been successfully
407 * updated.
408 *
409 * @see EventHandler::onDataSent(), this will only be triggered if there are
410 * client subscribed and the localOnly parameter is set to false.
411 */
413 GattAttribute::Handle_t attributeHandle,
414 const uint8_t *value,
415 uint16_t size,
416 bool localOnly = false
417 );
418
419 /**
420 * Update the value of an attribute present in the local GATT server.
421 *
422 * The connection handle parameter allows application code to direct
423 * notification or indication resulting from the update to a specific client.
424 *
425 * @param[in] connectionHandle Connection handle.
426 * @param[in] attributeHandle Handle for the value attribute of the
427 * characteristic.
428 * @param[in] value A pointer to a buffer holding the new value.
429 * @param[in] size Size of the new value (in bytes).
430 * @param[in] localOnly If this flag is false and the attribute handle
431 * written is a characteristic value, then the server sends an update
432 * containing the new value to the client identified by the parameter
433 * @p connectionHandle if it is subscribed to the characteristic's
434 * notifications or indications. Otherwise, the update does not generate a
435 * single server initiated event.
436 *
437 * @return BLE_ERROR_NONE if the attribute value has been successfully
438 * updated.
439 *
440 * @see EventHandler::onDataSent(), this will only be triggered if there are
441 * client subscribed and the localOnly parameter is set to false.
442 */
444 ble::connection_handle_t connectionHandle,
445 GattAttribute::Handle_t attributeHandle,
446 const uint8_t *value,
447 uint16_t size,
448 bool localOnly = false
449 );
450
451 /**
452 * Determine if one of the connected clients has subscribed to notifications
453 * or indications of the characteristic in input.
454 *
455 * @param[in] characteristic The characteristic.
456 * @param[out] enabledP Upon return, *enabledP is true if updates are
457 * enabled for a connected client; otherwise, *enabledP is false.
458 *
459 * @return BLE_ERROR_NONE if the connection and handle are found. False
460 * otherwise.
461 *
462 * @see EventHandler::onDataSent()
463 */
465 const GattCharacteristic &characteristic,
466 bool *enabledP
467 );
468
469 /**
470 * Determine if an identified client has subscribed to notifications or
471 * indications of a given characteristic.
472 *
473 * @param[in] connectionHandle The connection handle.
474 * @param[in] characteristic The characteristic.
475 * @param[out] enabledP Upon return, *enabledP is true if the client
476 * identified by @p connectionHandle has subscribed to notifications or
477 * indications of @p characteristic; otherwise, *enabledP is false.
478 *
479 * @return BLE_ERROR_NONE if the connection and handle are found. False
480 * otherwise.
481 *
482 * @see EventHandler::onDataSent()
483 */
485 ble::connection_handle_t connectionHandle,
486 const GattCharacteristic &characteristic,
487 bool *enabledP
488 );
489
490 /**
491 * Indicate if the underlying stack emit events when an attribute is read by
492 * a client.
493 *
494 * @attention This function should be overridden to return true if
495 * applicable.
496 *
497 * @return true if onDataRead is supported; false otherwise.
498 */
500
501 /**
502 * Add an event handler that monitors emission of characteristic value
503 * updates.
504 *
505 * @param[in] callback Event handler being registered.
506 *
507 * @note It is possible to chain together multiple onDataSent callbacks
508 * (potentially from different modules of an application).
509 */
510 MBED_DEPRECATED_SINCE("mbed-os-6.3.0", "Individual callback-registering functions have"
511 "been replaced by GattServer::setEventHandler. Use that function instead.")
512 void onDataSent(const DataSentCallback_t &callback);
513
514 /**
515 * Add an event handler that monitors emission of characteristic value
516 * updates.
517 *
518 * @param[in] objPtr Pointer to the instance that is used to invoke the
519 * event handler.
520 * @param[in] memberPtr Event handler being registered. It is a member
521 * function.
522 */
523 template <typename T>
524 MBED_DEPRECATED_SINCE("mbed-os-6.3.0", "Individual callback-registering functions have"
525 "been replaced by GattServer::setEventHandler. Use that function instead.")
526 void onDataSent(T *objPtr, void (T::*memberPtr)(unsigned count))
527 {
528 onDataSent({objPtr, memberPtr});
529 }
530
531 /**
532 * Access the callchain of data sent event handlers.
533 *
534 * @return A reference to the DATA_SENT event callback chain.
535 */
536 MBED_DEPRECATED_SINCE("mbed-os-6.3.0", "Individual callback-registering functions have"
537 "been replaced by GattServer::setEventHandler. Use that function instead.")
539
540 /**
541 * Set an event handler that is called after
542 * a connected peer has written an attribute.
543 *
544 * @param[in] callback The event handler being registered.
545 *
546 * @attention It is possible to set multiple event handlers. Registered
547 * handlers may be removed with onDataWritten().detach(callback).
548 */
549 MBED_DEPRECATED_SINCE("mbed-os-6.3.0", "Individual callback-registering functions have"
550 "been replaced by GattServer::setEventHandler. Use that function instead.")
552
553 /**
554 * Set an event handler that is called after
555 * a connected peer has written an attribute.
556 *
557 * @param[in] objPtr Pointer to the instance that is used to invoke the
558 * event handler (@p memberPtr).
559 * @param[in] memberPtr Event handler being registered. It is a member
560 * function.
561 */
562 template <typename T>
563 MBED_DEPRECATED_SINCE("mbed-os-6.3.0", "Individual callback-registering functions have"
564 "been replaced by GattServer::setEventHandler. Use that function instead.")
566 T *objPtr,
567 void (T::*memberPtr)(const GattWriteCallbackParams *context)
568 )
569 {
570 onDataWritten({objPtr, memberPtr});
571 }
572
573 /**
574 * Access the callchain of data written event handlers.
575 *
576 * @return A reference to the data written event callbacks chain.
577 *
578 * @note It is possible to register callbacks using
579 * onDataWritten().add(callback).
580 *
581 * @note It is possible to unregister callbacks using
582 * onDataWritten().detach(callback).
583 */
584 MBED_DEPRECATED_SINCE("mbed-os-6.3.0", "Individual callback-registering functions have"
585 "been replaced by GattServer::setEventHandler. Use that function instead.")
587
588 /**
589 * Set an event handler that monitors attribute reads from connected clients.
590 *
591 * @param[in] callback Event handler being registered.
592 *
593 * @return BLE_ERROR_NOT_IMPLEMENTED if this functionality isn't available;
594 * else BLE_ERROR_NONE.
595 *
596 * @note This functionality may not be available on all underlying stacks.
597 * Application code may work around that limitation by monitoring read
598 * requests instead of read events.
599 *
600 * @see GattCharacteristic::setReadAuthorizationCallback()
601 * @see isOnDataReadAvailable().
602 *
603 * @attention It is possible to set multiple event handlers. Registered
604 * handlers may be removed with onDataRead().detach(callback).
605 */
606 MBED_DEPRECATED_SINCE("mbed-os-6.3.0", "Individual callback-registering functions have"
607 "been replaced by GattServer::setEventHandler. Use that function instead.")
609
610 /**
611 * Set an event handler that monitors attribute reads from connected clients.
612 *
613 * @param[in] objPtr Pointer to the instance that is used to invoke the
614 * event handler (@p memberPtr).
615 * @param[in] memberPtr Event handler being registered. It is a member
616 * function.
617 */
618 template <typename T>
619 MBED_DEPRECATED_SINCE("mbed-os-6.3.0", "Individual callback-registering functions have"
620 "been replaced by GattServer::setEventHandler. Use that function instead.")
622 T *objPtr,
623 void (T::*memberPtr)(const GattReadCallbackParams *context)
624 )
625 {
626 return onDataRead({objPtr, memberPtr});
627 }
628
629 /**
630 * Access the callchain of data read event handlers.
631 *
632 * @return A reference to the data read event callbacks chain.
633 *
634 * @note It is possible to register callbacks using
635 * onDataRead().add(callback).
636 *
637 * @note It is possible to unregister callbacks using
638 * onDataRead().detach(callback).
639 */
640 MBED_DEPRECATED_SINCE("mbed-os-6.3.0", "Individual callback-registering functions have"
641 "been replaced by GattServer::setEventHandler. Use that function instead.")
643
644 /**
645 * Set an event handler that monitors shutdown or reset of the GattServer.
646 *
647 * The event handler is invoked when the GattServer instance is about
648 * to be shut down. This can result in a call to reset() or BLE::reset().
649 *
650 * @param[in] callback Event handler being registered.
651 *
652 * @note It is possible to set up multiple shutdown event handlers.
653 *
654 * @note It is possible to unregister a callback using
655 * onShutdown().detach(callback)
656 */
657 MBED_DEPRECATED_SINCE("mbed-os-6.3.0", "Individual callback-registering functions have"
658 "been replaced by GattServer::setEventHandler. Use that function instead.")
660
661 /**
662 * Set an event handler that monitors shutdown or reset of the GattServer.
663 *
664 * The event handler is invoked when the GattServer instance is about
665 * to be shut down. This can result of a call to reset() or BLE::reset().
666 *
667 * @param[in] objPtr Pointer to the instance that is used to invoke the
668 * event handler (@p memberPtr).
669 * @param[in] memberPtr Event handler being registered. It is a member
670 * function.
671 */
672 template <typename T>
673 MBED_DEPRECATED_SINCE("mbed-os-6.3.0", "Individual callback-registering functions have"
674 "been replaced by GattServer::setEventHandler. Use that function instead.")
675 void onShutdown(T *objPtr, void (T::*memberPtr)(const GattServer *))
676 {
677 onShutdown({objPtr, memberPtr});
678 }
679
680 /**
681 * Access the callchain of shutdown event handlers.
682 *
683 * @return A reference to the shutdown event callbacks chain.
684 *
685 * @note It is possible to register callbacks using
686 * onShutdown().add(callback).
687 *
688 * @note It is possible to unregister callbacks using
689 * onShutdown().detach(callback).
690 */
691 MBED_DEPRECATED_SINCE("mbed-os-6.3.0", "Individual callback-registering functions have"
692 "been replaced by GattServer::setEventHandler. Use that function instead.")
694
695 /**
696 * Set up an event handler that monitors subscription to characteristic
697 * updates.
698 *
699 * @param[in] callback Event handler being registered.
700 */
701 MBED_DEPRECATED_SINCE("mbed-os-6.3.0", "Individual callback-registering functions have"
702 "been replaced by GattServer::setEventHandler. Use that function instead.")
704
705 /**
706 * Set up an event handler that monitors unsubscription from characteristic
707 * updates.
708 *
709 * @param[in] callback Event handler being registered.
710 */
711 MBED_DEPRECATED_SINCE("mbed-os-6.3.0", "Individual callback-registering functions have"
712 "been replaced by GattServer::setEventHandler. Use that function instead.")
714
715 /**
716 * Set up an event handler that monitors notification acknowledgment.
717 *
718 * The event handler is called when a client sends a confirmation that it has
719 * correctly received a notification from the server.
720 *
721 * @param[in] callback Event handler being registered.
722 */
723 MBED_DEPRECATED_SINCE("mbed-os-6.3.0", "Individual callback-registering functions have"
724 "been replaced by an event handler. Indication confirmation triggers"
725 "GattServer::onDataSent event instead.")
727
728#if !defined(DOXYGEN_ONLY)
729 GattServer(impl::GattServer* impl) : impl(impl) {}
730 GattServer(const GattServer&) = delete;
731 GattServer& operator=(const GattServer&) = delete;
732#endif // !defined(DOXYGEN_ONLY)
733
734private:
735 impl::GattServer *impl;
736};
737
738/**
739 * @}
740 * @}
741 * @}
742 */
743
744} // ble
745
746/** @deprecated Use the namespaced ble::GattServer instead of the global GattServer. */
747using ble::GattServer;
748
749#endif /* ifndef MBED_GATT_SERVER_H__ */
Function like object hosting a list of FunctionPointerWithContext.
Function like object adapter over freestanding and member functions.
ble::attribute_handle_t Handle_t
Representation of an attribute handle.
Representation of a GattServer characteristic.
Representation of a GattServer service.
Construct and operates a GATT server.
Definition GattServer.h:102
CallChainOfFunctionPointersWithContext< const GattServer * > GattServerShutdownCallbackChain_t
Callchain of GattServerShutdownCallback_t.
Definition GattServer.h:275
void onUpdatesEnabled(EventCallback_t callback)
Set up an event handler that monitors subscription to characteristic updates.
FunctionPointerWithContext< unsigned > DataSentCallback_t
Event handler invoked when the server has sent data to a client.
Definition GattServer.h:218
bool isOnDataReadAvailable() const
Indicate if the underlying stack emit events when an attribute is read by a client.
FunctionPointerWithContext< GattAttribute::Handle_t > EventCallback_t
Event handler that handles subscription to characteristic updates, unsubscription from characteristic...
Definition GattServer.h:283
void onConfirmationReceived(EventCallback_t callback)
Set up an event handler that monitors notification acknowledgment.
CallChainOfFunctionPointersWithContext< unsigned > DataSentCallbackChain_t
Callchain of DataSentCallback_t objects.
Definition GattServer.h:226
DataSentCallbackChain_t & onDataSent()
Access the callchain of data sent event handlers.
FunctionPointerWithContext< const GattServer * > GattServerShutdownCallback_t
Event handler invoked when the GattServer is reset.
Definition GattServer.h:267
ble_error_t areUpdatesEnabled(ble::connection_handle_t connectionHandle, const GattCharacteristic &characteristic, bool *enabledP)
Determine if an identified client has subscribed to notifications or indications of a given character...
ble_error_t areUpdatesEnabled(const GattCharacteristic &characteristic, bool *enabledP)
Determine if one of the connected clients has subscribed to notifications or indications of the chara...
void setEventHandler(EventHandler *handler)
Assign the event handler implementation that will be used by the module to signal events back to the ...
FunctionPointerWithContext< const GattReadCallbackParams * > DataReadCallback_t
Event handler invoked when the client has read an attribute of the server.
Definition GattServer.h:251
ble_error_t reset()
Shut down the GattServer instance.
CallChainOfFunctionPointersWithContext< const GattReadCallbackParams * > DataReadCallbackChain_t
Callchain of DataReadCallback_t.
Definition GattServer.h:259
void onUpdatesDisabled(EventCallback_t callback)
Set up an event handler that monitors unsubscription from characteristic updates.
FunctionPointerWithContext< const GattWriteCallbackParams * > DataWrittenCallback_t
Event handler invoked when the client has written an attribute of the server.
Definition GattServer.h:235
ble_error_t write(GattAttribute::Handle_t attributeHandle, const uint8_t *value, uint16_t size, bool localOnly=false)
Update the value of an attribute present in the local GATT server.
CallChainOfFunctionPointersWithContext< const GattWriteCallbackParams * > DataWrittenCallbackChain_t
Callchain of DataWrittenCallback_t objects.
Definition GattServer.h:243
ble_error_t read(ble::connection_handle_t connectionHandle, GattAttribute::Handle_t attributeHandle, uint8_t *buffer, uint16_t *lengthP)
Read the value of an attribute present in the local GATT server.
ble_error_t write(ble::connection_handle_t connectionHandle, GattAttribute::Handle_t attributeHandle, const uint8_t *value, uint16_t size, bool localOnly=false)
Update the value of an attribute present in the local GATT server.
ble_error_t read(GattAttribute::Handle_t attributeHandle, uint8_t buffer[], uint16_t *lengthP)
Read the value of an attribute present in the local GATT server.
DataReadCallbackChain_t & onDataRead()
Access the callchain of data read event handlers.
ble_error_t addService(GattService &service)
Add a service declaration to the local attribute server table.
GattServerShutdownCallbackChain_t & onShutdown()
Access the callchain of shutdown event handlers.
DataWrittenCallbackChain_t & onDataWritten()
Access the callchain of data written event handlers.
ble_error_t
Error codes for the BLE API.
#define MBED_DEPRECATED_SINCE(D, M)
MBED_DEPRECATED("message string") Mark a function declaration as deprecated, if it used then a warnin...
Entry namespace for all BLE API definitions.
uintptr_t connection_handle_t
Opaque reference to a connection.
Gatt Data Sent Attribute related events.
GATT Read event definition.
Gatt Updates Changed Attribute related events.
GATT Write event definition.
Definition of the general handler of GattServer related events.
Definition GattServer.h:107
virtual void onShutdown(const GattServer &server)
Function invoked when the GattServer instance is about to be shut down.
Definition GattServer.h:169
~EventHandler()=default
Prevent polymorphic deletion and avoid unnecessary virtual destructor as the GattServer class will ne...
virtual void onDataWritten(const GattWriteCallbackParams &params)
Function invoked when a client writes an attribute.
Definition GattServer.h:144
virtual void onAttMtuChange(ble::connection_handle_t connectionHandle, uint16_t attMtuSize)
Function invoked when the connections changes the ATT_MTU which controls the maximum size of an attri...
Definition GattServer.h:118
virtual void onDataRead(const GattReadCallbackParams &params)
Function invoked when a client reads an attribute.
Definition GattServer.h:161
virtual void onConfirmationReceived(const GattConfirmationReceivedCallbackParams &params)
Event not used.
Definition GattServer.h:201
virtual void onDataSent(const GattDataSentCallbackParams &params)
Function invoked when the server has sent data to a client.
Definition GattServer.h:134
virtual void onUpdatesDisabled(const GattUpdatesDisabledCallbackParams &params)
Function invoked when the client has unsubscribed from characteristic updates.
Definition GattServer.h:189
virtual void onUpdatesEnabled(const GattUpdatesEnabledCallbackParams &params)
Function invoked when the client has subscribed to characteristic updates.
Definition GattServer.h:179