.. _module-pw_bluetooth_profiles:

=====================
pw_bluetooth_profiles
=====================
.. pigweed-module::
   :name: pw_bluetooth_profiles

.. attention::

   :bdg-ref-primary-line:`module-pw_bluetooth_profiles` is under construction,
   depends on the experimental :bdg-ref-primary-line:`module-pw_bluetooth`
   module and may see significant breaking API changes.

The ``pw_bluetooth_profiles`` module provides a collection of implementations
for basic Bluetooth profiles built on top of the ``pw_bluetooth`` module API.
These profiles are independent from each other

--------------------------
Device Information Service
--------------------------
The ``device_info_service`` target implements the Device Information Service
(DIS) as defined in the specification version 1.1. It exposes up to nine
different basic properties of the device such as the model, manufacturer or
serial number, all of which are optional. This module implements the GATT
server-side service (``bluetooth::gatt::LocalServiceDelegate``) with the
following limitations:

- The subset of properties exposed and their values are constant throughout the
  life of the service.
- The subset of properties is defined at compile time, but the values may be
  defined at runtime before service initialization. For example, the serial
  number property might be different for different devices running the same
  code.
- All property values must be available in memory while the service is
  published. Rather than using a callback mechanism to let the user produce the
  property value at run-time, this module expects those values to be readily
  available when initialized, but they can be stored in read-only memory.

Usage
-----
The main intended usage of the service consists on creating and publishing the
service, leaving it published forever referencing the values passed on
initialization.

The subset of properties exposed is a template parameter bit field
(``DeviceInfo::Field``) and can't be changed at run-time. The ``pw::span``
values referenced in the ``DeviceInfo`` struct must remain available after
initialization to avoid copying them to RAM in the service, but the
``DeviceInfo`` struct itself can be destroyed after initialization.

Example code:

.. code-block:: cpp

   using pw::bluetooth_profiles::DeviceInfo;
   using pw::bluetooth_profiles::DeviceInfoService;

   // Global serial number for the device, initialized elsewhere.
   pw::InlineString serial_number(...);

   // Select which fields to expose at compile-time with a constexpr template
   // parameter.
   constexpr auto kUsedFields = DeviceInfo::Field::kModelNumber |
                                DeviceInfo::Field::kSerialNumber |
                                DeviceInfo::Field::kSoftwareRevision;

   // Create a DeviceInfo with the values. Values are referenced from the
   // service, not copied, so they must remain available while the service is
   // published.
   DeviceInfo device_info = {};
   device_info.model_number = pw::as_bytes(pw::span{"My Model"sv});
   device_info.software_revision = pw::as_bytes(pw::span{REVISION_MACRO});
   device_info.serial_number = pw::as_bytes(
       pw::span(serial_number.data(), serial_number.size()));

   DeviceInfoService<kUsedFields, pw::bluetooth::gatt::Handle{123}>
       device_info_service{device_info};
   device_info_service.PublishService(...);
