xref: /aosp_15_r20/external/pigweed/pw_bluetooth/docs.rst (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker.. _module-pw_bluetooth:
2*61c4878aSAndroid Build Coastguard Worker
3*61c4878aSAndroid Build Coastguard Worker============
4*61c4878aSAndroid Build Coastguard Workerpw_bluetooth
5*61c4878aSAndroid Build Coastguard Worker============
6*61c4878aSAndroid Build Coastguard Worker.. pigweed-module::
7*61c4878aSAndroid Build Coastguard Worker   :name: pw_bluetooth
8*61c4878aSAndroid Build Coastguard Worker
9*61c4878aSAndroid Build Coastguard WorkerThe ``pw_bluetooth`` module contains APIs and utilities for the host layer of
10*61c4878aSAndroid Build Coastguard WorkerBluetooth Low Energy.
11*61c4878aSAndroid Build Coastguard Worker
12*61c4878aSAndroid Build Coastguard Worker--------
13*61c4878aSAndroid Build Coastguard WorkerHost API
14*61c4878aSAndroid Build Coastguard Worker--------
15*61c4878aSAndroid Build Coastguard Worker.. attention::
16*61c4878aSAndroid Build Coastguard Worker
17*61c4878aSAndroid Build Coastguard Worker   This module is still under construction, the API is not yet stable.
18*61c4878aSAndroid Build Coastguard Worker
19*61c4878aSAndroid Build Coastguard WorkerThe headers in ``public/pw_bluetooth`` constitute generic interfaces and types
20*61c4878aSAndroid Build Coastguard Workerfor a Bluetooth Host API. Currently, only Low Energy APIs exist.
21*61c4878aSAndroid Build Coastguard Worker
22*61c4878aSAndroid Build Coastguard Workerlow_energy::Central2
23*61c4878aSAndroid Build Coastguard Worker====================
24*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::bluetooth::low_energy::Central2
25*61c4878aSAndroid Build Coastguard Worker   :members:
26*61c4878aSAndroid Build Coastguard Worker
27*61c4878aSAndroid Build Coastguard Workerlow_energy::Peripheral2
28*61c4878aSAndroid Build Coastguard Worker=======================
29*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::bluetooth::low_energy::Peripheral2
30*61c4878aSAndroid Build Coastguard Worker   :members:
31*61c4878aSAndroid Build Coastguard Worker
32*61c4878aSAndroid Build Coastguard Workerlow_energy::AdvertisedPeripheral2
33*61c4878aSAndroid Build Coastguard Worker=================================
34*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::bluetooth::low_energy::AdvertisedPeripheral2
35*61c4878aSAndroid Build Coastguard Worker   :members:
36*61c4878aSAndroid Build Coastguard Worker
37*61c4878aSAndroid Build Coastguard Workerlow_energy::Connection2
38*61c4878aSAndroid Build Coastguard Worker=======================
39*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::bluetooth::low_energy::Connection2
40*61c4878aSAndroid Build Coastguard Worker   :members:
41*61c4878aSAndroid Build Coastguard Worker
42*61c4878aSAndroid Build Coastguard Workerlow_energy::Channel
43*61c4878aSAndroid Build Coastguard Worker===================
44*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::bluetooth::low_energy::Channel
45*61c4878aSAndroid Build Coastguard Worker   :members:
46*61c4878aSAndroid Build Coastguard Worker
47*61c4878aSAndroid Build Coastguard Worker
48*61c4878aSAndroid Build Coastguard Workerlow_energy::ChannelListenerRegistry
49*61c4878aSAndroid Build Coastguard Worker===================================
50*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::bluetooth::low_energy::ChannelListenerRegistry
51*61c4878aSAndroid Build Coastguard Worker   :members:
52*61c4878aSAndroid Build Coastguard Worker
53*61c4878aSAndroid Build Coastguard Workerlow_energy::ChannelListener
54*61c4878aSAndroid Build Coastguard Worker===================================
55*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::bluetooth::low_energy::ChannelListener
56*61c4878aSAndroid Build Coastguard Worker   :members:
57*61c4878aSAndroid Build Coastguard Worker
58*61c4878aSAndroid Build Coastguard Workergatt::Server2
59*61c4878aSAndroid Build Coastguard Worker=============
60*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::bluetooth::gatt::Server2
61*61c4878aSAndroid Build Coastguard Worker   :members:
62*61c4878aSAndroid Build Coastguard Worker
63*61c4878aSAndroid Build Coastguard Workergatt::LocalService2
64*61c4878aSAndroid Build Coastguard Worker===================
65*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::bluetooth::gatt::LocalService2
66*61c4878aSAndroid Build Coastguard Worker   :members:
67*61c4878aSAndroid Build Coastguard Worker
68*61c4878aSAndroid Build Coastguard Workergatt::LocalServiceDelegate2
69*61c4878aSAndroid Build Coastguard Worker===========================
70*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::bluetooth::gatt::LocalServiceDelegate2
71*61c4878aSAndroid Build Coastguard Worker   :members:
72*61c4878aSAndroid Build Coastguard Worker
73*61c4878aSAndroid Build Coastguard Workergatt::Client2
74*61c4878aSAndroid Build Coastguard Worker=============
75*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::bluetooth::gatt::Client2
76*61c4878aSAndroid Build Coastguard Worker   :members:
77*61c4878aSAndroid Build Coastguard Worker
78*61c4878aSAndroid Build Coastguard Workergatt::RemoteService2
79*61c4878aSAndroid Build Coastguard Worker====================
80*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::bluetooth::gatt::RemoteService2
81*61c4878aSAndroid Build Coastguard Worker   :members:
82*61c4878aSAndroid Build Coastguard Worker
83*61c4878aSAndroid Build Coastguard WorkerController2
84*61c4878aSAndroid Build Coastguard Worker===========
85*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::bluetooth::Controller2
86*61c4878aSAndroid Build Coastguard Worker   :members:
87*61c4878aSAndroid Build Coastguard Worker
88*61c4878aSAndroid Build Coastguard Worker----------------------------
89*61c4878aSAndroid Build Coastguard WorkerModule Configuration Options
90*61c4878aSAndroid Build Coastguard Worker----------------------------
91*61c4878aSAndroid Build Coastguard WorkerThe following configurations can be adjusted via compile-time configuration of
92*61c4878aSAndroid Build Coastguard Workerthis module, see the
93*61c4878aSAndroid Build Coastguard Worker:ref:`module documentation <module-structure-compile-time-configuration>` for
94*61c4878aSAndroid Build Coastguard Workermore details.
95*61c4878aSAndroid Build Coastguard Worker
96*61c4878aSAndroid Build Coastguard Worker.. c:macro:: PW_BLUETOOTH_DESCRIPTOR_VEC_SIZE
97*61c4878aSAndroid Build Coastguard Worker
98*61c4878aSAndroid Build Coastguard Worker  Controls the size of ``Vector<Descriptor>`` in the above APIs.
99*61c4878aSAndroid Build Coastguard Worker
100*61c4878aSAndroid Build Coastguard Worker-------------------------
101*61c4878aSAndroid Build Coastguard WorkerEmboss Packet Definitions
102*61c4878aSAndroid Build Coastguard Worker-------------------------
103*61c4878aSAndroid Build Coastguard Worker``pw_bluetooth`` contains `Emboss <https://github.com/google/emboss>`_ packet
104*61c4878aSAndroid Build Coastguard Workerdefinitions. So far, some packets and enums from the following protocols are
105*61c4878aSAndroid Build Coastguard Workerdefined:
106*61c4878aSAndroid Build Coastguard Worker
107*61c4878aSAndroid Build Coastguard Worker- HCI
108*61c4878aSAndroid Build Coastguard Worker- L2CAP
109*61c4878aSAndroid Build Coastguard Worker- H4
110*61c4878aSAndroid Build Coastguard Worker
111*61c4878aSAndroid Build Coastguard Worker.. _module-pw_bluetooth-usage:
112*61c4878aSAndroid Build Coastguard Worker
113*61c4878aSAndroid Build Coastguard WorkerUsage
114*61c4878aSAndroid Build Coastguard Worker=====
115*61c4878aSAndroid Build Coastguard Worker1. Add Emboss to your project as described in
116*61c4878aSAndroid Build Coastguard Worker   :ref:`module-pw_third_party_emboss`.
117*61c4878aSAndroid Build Coastguard Worker
118*61c4878aSAndroid Build Coastguard Worker.. tab-set::
119*61c4878aSAndroid Build Coastguard Worker
120*61c4878aSAndroid Build Coastguard Worker   .. tab-item:: Bazel
121*61c4878aSAndroid Build Coastguard Worker      :sync: bazel
122*61c4878aSAndroid Build Coastguard Worker
123*61c4878aSAndroid Build Coastguard Worker      2. Add the Emboss target you require to your build target's dependency
124*61c4878aSAndroid Build Coastguard Worker         list - for example, ``@pigweed//pw_bluetooth:emboss_hci_group`` for HCI
125*61c4878aSAndroid Build Coastguard Worker         packets.
126*61c4878aSAndroid Build Coastguard Worker
127*61c4878aSAndroid Build Coastguard Worker   .. tab-item:: GN
128*61c4878aSAndroid Build Coastguard Worker      :sync: gn
129*61c4878aSAndroid Build Coastguard Worker
130*61c4878aSAndroid Build Coastguard Worker      2. Add the Emboss target you require to your build target's dependency
131*61c4878aSAndroid Build Coastguard Worker         list - for example, ``$dir_pw_bluetooth/emboss_hci_group`` for HCI
132*61c4878aSAndroid Build Coastguard Worker         packets.
133*61c4878aSAndroid Build Coastguard Worker
134*61c4878aSAndroid Build Coastguard Worker   .. tab-item:: CMake
135*61c4878aSAndroid Build Coastguard Worker      :sync: cmake
136*61c4878aSAndroid Build Coastguard Worker
137*61c4878aSAndroid Build Coastguard Worker      2. Add the Emboss target you require to your build target's dependency
138*61c4878aSAndroid Build Coastguard Worker         list - for example, ``pw_bluetooth.emboss_hci_group`` for HCI packets.
139*61c4878aSAndroid Build Coastguard Worker
140*61c4878aSAndroid Build Coastguard Worker
141*61c4878aSAndroid Build Coastguard Worker3. Include the generated header files you require in your source files.
142*61c4878aSAndroid Build Coastguard Worker
143*61c4878aSAndroid Build Coastguard Worker.. code-block:: cpp
144*61c4878aSAndroid Build Coastguard Worker
145*61c4878aSAndroid Build Coastguard Worker   #include "pw_bluetooth/hci_commands.emb.h"
146*61c4878aSAndroid Build Coastguard Worker   #include "pw_bluetooth/hci_android.emb.h"
147*61c4878aSAndroid Build Coastguard Worker
148*61c4878aSAndroid Build Coastguard Worker.. inclusive-language: disable
149*61c4878aSAndroid Build Coastguard Worker
150*61c4878aSAndroid Build Coastguard Worker4. Construct an Emboss view over a buffer as described in the `Emboss User Guide
151*61c4878aSAndroid Build Coastguard Worker   <https://github.com/google/emboss/blob/master/doc/guide.md>`_.
152*61c4878aSAndroid Build Coastguard Worker
153*61c4878aSAndroid Build Coastguard Worker.. inclusive-language: enable
154*61c4878aSAndroid Build Coastguard Worker
155*61c4878aSAndroid Build Coastguard Worker.. literalinclude:: emboss_test.cc
156*61c4878aSAndroid Build Coastguard Worker   :language: cpp
157*61c4878aSAndroid Build Coastguard Worker   :start-after: [pw_bluetooth-examples-make_view]
158*61c4878aSAndroid Build Coastguard Worker   :end-before: [pw_bluetooth-examples-make_view]
159*61c4878aSAndroid Build Coastguard Worker
160*61c4878aSAndroid Build Coastguard Worker.. note::
161*61c4878aSAndroid Build Coastguard Worker
162*61c4878aSAndroid Build Coastguard Worker   When you first add generated headers, ``clangd`` may complain that the
163*61c4878aSAndroid Build Coastguard Worker   generated header files do not exist. You need to build your project to
164*61c4878aSAndroid Build Coastguard Worker   resolve this. Similarly, you need to rebuild in order for .emb file updates
165*61c4878aSAndroid Build Coastguard Worker   to be reflected in the generated headers.
166*61c4878aSAndroid Build Coastguard Worker
167*61c4878aSAndroid Build Coastguard Worker.. _module-pw_bluetooth-contributing:
168*61c4878aSAndroid Build Coastguard Worker
169*61c4878aSAndroid Build Coastguard WorkerContributing
170*61c4878aSAndroid Build Coastguard Worker============
171*61c4878aSAndroid Build Coastguard WorkerEmboss ``.emb`` files can be edited to add additional packets and enums.
172*61c4878aSAndroid Build Coastguard Worker
173*61c4878aSAndroid Build Coastguard WorkerEmboss files should be formatted by running the following from the Pigweed root.
174*61c4878aSAndroid Build Coastguard Worker
175*61c4878aSAndroid Build Coastguard Worker.. code-block:: bash
176*61c4878aSAndroid Build Coastguard Worker
177*61c4878aSAndroid Build Coastguard Worker   (export EMBOSS_PATH="environment/packages/emboss" &&
178*61c4878aSAndroid Build Coastguard Worker       export PYTHONPATH+=":${EMBOSS_PATH}" &&
179*61c4878aSAndroid Build Coastguard Worker       python3 "${EMBOSS_PATH}/compiler/front_end/format.py" pw_bluetooth/public/pw_bluetooth/*.emb)
180*61c4878aSAndroid Build Coastguard Worker
181*61c4878aSAndroid Build Coastguard WorkerIf adding files, be sure to update the GN, Bazel, and CMake build rules.
182*61c4878aSAndroid Build Coastguard WorkerPresubmit runs the ``emboss_test.cc`` test on all three.
183*61c4878aSAndroid Build Coastguard Worker
184*61c4878aSAndroid Build Coastguard Worker
185*61c4878aSAndroid Build Coastguard WorkerSize Report
186*61c4878aSAndroid Build Coastguard Worker===========
187*61c4878aSAndroid Build Coastguard WorkerDelta of +972 when constructing the first packet view and reading/writing a
188*61c4878aSAndroid Build Coastguard Workerfield. This includes the runtime library and the 4-byte buffer.
189*61c4878aSAndroid Build Coastguard Worker
190*61c4878aSAndroid Build Coastguard Worker.. include:: emboss_size_report
191*61c4878aSAndroid Build Coastguard Worker
192*61c4878aSAndroid Build Coastguard WorkerDelta of +96 when adding a second packet view and reading/writing a field.
193*61c4878aSAndroid Build Coastguard Worker
194*61c4878aSAndroid Build Coastguard Worker.. include:: emboss_size_report_diff
195*61c4878aSAndroid Build Coastguard Worker
196*61c4878aSAndroid Build Coastguard Worker-------
197*61c4878aSAndroid Build Coastguard WorkerRoadmap
198*61c4878aSAndroid Build Coastguard Worker-------
199*61c4878aSAndroid Build Coastguard Worker- Bluetooth Proxy (WIP in in :ref:`module-pw_bluetooth_proxy`)
200*61c4878aSAndroid Build Coastguard Worker- Add automated Emboss file formatting to `pw format` (:bug:`331195584`)
201*61c4878aSAndroid Build Coastguard Worker- Create a backend for the Bluetooth API using Fuchsia's Bluetooth stack
202*61c4878aSAndroid Build Coastguard Worker  (Sapphire).
203*61c4878aSAndroid Build Coastguard Worker- Stabilize the Bluetooth API.
204*61c4878aSAndroid Build Coastguard Worker- Add BR/EDR APIs.
205