summaryrefslogtreecommitdiffstats
path: root/src/bluetooth/doc/src/bluetooth-le-overview.qdoc
diff options
context:
space:
mode:
Diffstat (limited to 'src/bluetooth/doc/src/bluetooth-le-overview.qdoc')
-rw-r--r--src/bluetooth/doc/src/bluetooth-le-overview.qdoc63
1 files changed, 55 insertions, 8 deletions
diff --git a/src/bluetooth/doc/src/bluetooth-le-overview.qdoc b/src/bluetooth/doc/src/bluetooth-le-overview.qdoc
index 70d9908a..8e78c487 100644
--- a/src/bluetooth/doc/src/bluetooth-le-overview.qdoc
+++ b/src/bluetooth/doc/src/bluetooth-le-overview.qdoc
@@ -34,10 +34,11 @@ Low Energy devices.
\tableofcontents
- The Qt Bluetooth Low Energy API was introduced by Qt 5.4. Since Qt 5.5 the API
- is final and a compatibility guarantee is given for future releases.
- At the moment, Qt supports the Bluetooth Low Energy central role.
- For more details on this limitation see below.
+ The Qt Bluetooth Low Energy API for the central role was introduced by Qt 5.4.
+ Since Qt 5.5 that part of the API is final and a compatibility guarantee is given for
+ future releases.
+ In Qt 5.7, additional API supporting the peripheral role was added as a Technology Preview,
+ with the backend only implemented for Linux/BlueZ.
\section1 What Is Bluetooth Low Energy
@@ -159,10 +160,13 @@ Low Energy devices.
\section1 Using Qt Bluetooth Low Energy API
- This section describes how to use the Bluetooth Low Energy API provided by Qt. Currently the API
- permits creating connections to peripheral devices, discovering their services, as well as reading
- and writing data stored on the device. The example code below is taken from the
- \l {heartlistener}{Heart Listener} example.
+ This section describes how to use the Bluetooth Low Energy API provided by Qt.
+ On the client side, the API permits creating connections to peripheral devices, discovering
+ their services, as well as reading and writing data stored on the device.
+ On the server side, it allows to set up services, advertise them, and get notified when the
+ client writes characteristics.
+ The example code below is taken from the \l {heartlistener}{Heart Listener} and
+ \l {heartrate-server}{Heart Rate Server} examples.
\section2 Establishing a Connection
@@ -240,4 +244,47 @@ Low Energy devices.
\l {https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx}{Bluetooth SIG} whereas others
may follow a custom protocol. The above code snippet demonstrates how to the read the standardized
HeartRate value.
+
+ \section2 Advertising Services
+
+ If we are implementing a GATT server application on a peripheral device, we need to define the
+ services we want to offer to central devices and advertise them:
+
+ \snippet heartrate-server/main.cpp Advertising Data
+ \snippet heartrate-server/main.cpp Start Advertising
+
+ Now potential clients can connect to our device, discover the provided service and
+ register themselves to get notified of changes to the characteristic value.
+ This part of the API was already covered by the above sections.
+
+ \section2 Implementing a Service on the Peripheral Device
+
+ The first step is to define the service, its characteristics and descriptors. This is achieved
+ using the \l QLowEnergyServiceData, \l QLowEnergyCharacteristicData and
+ \l QLowEnergyDescriptorData classes. These classes act as containers or building blocks for the
+ essential information that comprises the to-be-defined Bluetooth Low Energy service.
+ The code snippet below defines a simple HeartRate service which publishes
+ the measured beats per minute. An example where such a service could be used is a wrist watch.
+
+ \snippet heartrate-server/main.cpp Service Data
+
+ The resulting \c serviceData object can be published as described in the
+ \l {Advertising Services} section above. Despite the partial information overlap between the
+ information wrapped by \l QLowEnergyServiceData and \l QLowEnergyAdvertisingData the two classes
+ serve two very different tasks. The advertising data is published to nearby devices and often
+ limited in scope due to its size restriction of 29 bytes. Therefore they are not always 100%
+ complete. By comparison the service data contained inside of \l QLowEnergyServiceData provides
+ the complete set of service data and only becomes visible to the connecting client when a
+ connection with an active service discovery has been performed.
+
+ The next section demonstrates how the service can update the heart rate value. Depending on the
+ nature of the service it may have to comply with the official service definition
+ as defined on \l {https://www.bluetooth.org}. Other services may be completely custom. The
+ heart rate service was adopted and its specification can be found under
+ \l {https://www.bluetooth.com/specifications/adopted-specifications}.
+
+ \snippet heartrate-server/main.cpp Provide Heartbeat
+
+ In general characteristic and descriptor value updates on the peripheral device use the same
+ methods as connecting Bluetooth Low Energy devices.
*/