| .. _bt_gatt: |
| |
| |
| Generic Attribute Profile (GATT) |
| ################################ |
| |
| GATT layer manages the service database providing APIs for service registration |
| and attribute declaration. |
| |
| Services can be registered using :cpp:func:`bt_gatt_service_register` API |
| which takes the :cpp:class:`bt_gatt_service` struct that provides the list of |
| attributes the service contains. The helper macro :cpp:func:`BT_GATT_SERVICE` |
| can be used to declare a service. |
| |
| Attributes can be declared using the :cpp:class:`bt_gatt_attr` struct or using |
| one of the helper macros: |
| |
| :cpp:func:`BT_GATT_PRIMARY_SERVICE` |
| Declares a Primary Service. |
| |
| :cpp:func:`BT_GATT_SECONDARY_SERVICE` |
| Declares a Secondary Service. |
| |
| :cpp:func:`BT_GATT_INCLUDE_SERVICE` |
| Declares a Include Service. |
| |
| :cpp:func:`BT_GATT_CHARACTERISTIC` |
| Declares a Characteristic. |
| |
| :cpp:func:`BT_GATT_DESCRIPTOR` |
| Declares a Descriptor. |
| |
| :cpp:func:`BT_GATT_ATTRIBUTE` |
| Declares an Attribute. |
| |
| :cpp:func:`BT_GATT_CCC` |
| Declares a Client Characteristic Configuration. |
| |
| :cpp:func:`BT_GATT_CEP` |
| Declares a Characteristic Extended Properties. |
| |
| :cpp:func:`BT_GATT_CUD` |
| Declares a Characteristic User Format. |
| |
| Each attribute contain a ``uuid``, which describes their type, a ``read`` |
| callback, a ``write`` callback and a set of permission. Both read and write |
| callbacks can be set to NULL if the attribute permission don't allow their |
| respective operations. |
| |
| .. note:: |
| Attribute ``read`` and ``write`` callbacks are called directly from RX Thread |
| thus it is not recommended to block for long periods of time in them. |
| |
| Attribute value changes can be notified using :cpp:func:`bt_gatt_notify` API, |
| alternatively there is :cpp:func:`bt_gatt_notify_cb` where is is possible to |
| pass a callback to be called when it is necessary to know the exact instant when |
| the data has been transmitted over the air. Indications are supported by |
| :cpp:func:`bt_gatt_indicate` API. |
| |
| Client procedures can be enabled with the configuration option: |
| :option:`CONFIG_BT_GATT_CLIENT` |
| |
| Discover procedures can be initiated with the use of |
| :cpp:func:`bt_gatt_discover` API which takes the |
| :cpp:class:`bt_gatt_discover_params` struct which describes the type of |
| discovery. The parameters also serves as a filter when setting the ``uuid`` |
| field only attributes which matches will be discovered, in contrast setting it |
| to NULL allows all attributes to be discovered. |
| |
| .. note:: |
| Caching discovered attributes is not supported. |
| |
| Read procedures are supported by :cpp:func:`bt_gatt_read` API which takes the |
| :cpp:class:`bt_gatt_read_params` struct as parameters. In the parameters one or |
| more attributes can be set, though setting multiple handles requires the option: |
| :option:`CONFIG_BT_GATT_READ_MULTIPLE` |
| |
| Write procedures are supported by :cpp:func:`bt_gatt_write` API and takes |
| :cpp:class:`bt_gatt_write_params` struct as parameters. In case the write |
| operation don't require a response :cpp:func:`bt_gatt_write_without_response` |
| or :cpp:func:`bt_gatt_write_without_response_cb` APIs can be used, with the |
| later working similarly to ``bt_gatt_notify_cb``. |
| |
| Subscriptions to notification and indication can be initiated with use of |
| :cpp:func`bt_gatt_subscribe` API which takes |
| :cpp:class:`bt_gatt_subscribe_params` as parameters. Multiple subscriptions to |
| the same attribute are supported so there could be multiple ``notify`` callback |
| being triggered for the same attribute. Subscriptions can be removed with use of |
| :cpp:func:`bt_gatt_unsubscribe()` API. |
| |
| .. note:: |
| When subscriptions are removed ``notify`` callback is called with the data |
| set to NULL. |
| |
| API Reference |
| ************* |
| |
| .. doxygengroup:: bt_gatt |
| :project: Zephyr |
| |
| GATT Server |
| =========== |
| |
| .. doxygengroup:: bt_gatt_server |
| :project: Zephyr |
| |
| GATT Client |
| =========== |
| |
| .. doxygengroup:: bt_gatt_client |
| :project: Zephyr |
| |