summaryrefslogtreecommitdiffstats
path: root/examples/bluetooth/heartlistener/doc/src/heartlistener.qdoc
blob: fa63714a5037dee7254e4a3a232f7bbcb4a6e425 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia.  For licensing terms and
** conditions see http://qt.digia.com/licensing.  For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file.  Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: http://www.gnu.org/copyleft/fdl.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \example heartlistener
    \title Bluetooth Low Energy Heart Listener example

    The Bluetooth Low Energy (BLE) Heart Listener Example shows how to develop a Bluetooth
    Low Energy applications using the Qt Bluetooth API. The application covers
    the scanning for BLE devices, connecting to the BLE Heart Rate service and
    receiving updates from the BLE heart belt. The BLE heart belt is required
    for this application to work.

    \image heartrateintro.png

    The best and the safest approach is to do a service discovery for BLE device first and
    then pick the heart rate service. Before that it is necessary to connect signals from
    the QLowEnergyController class, which is responsible for the communication with the
    BLE device.

    \snippet heartlistener/heartrate.cpp Connect signals

    After service scan is done and heart rate service found, the heart rate measurement
    characteristic needs to be found and enabled for the notifications (advertisements).

    \snippet heartlistener/heartrate.cpp Connecting to service

    The enableNotifications(m_heartRateCharacteristic) method is the one that
    will enable advertisement from the BLE device. Every time, when new update gets from
    the BLE device (in our case heart rate belt) QLowEnergyController will emit
    valueChanged(QLowEnergyCharacteristicInfo) method, which will invoke
    receiveMeasurement(const QLowEnergyCharacteristicInfo &) slot.

    \snippet heartlistener/heartrate.cpp Reading value

    Every BLE device has its own structure of data that is advertising. In the code above,
    the approach for checking the value structure is presented. The heart rate service contains
    that information in the first 8 bits of the advertised value. For instance, first bit tells
    the format of the value (is it 8 or 16 bit value), fourth tells does the heart belt provide
    energy spenditure information, etc.

    \snippet heartlistener/heartrate.cpp Error handling

    In case an error occurs, QLowEnergyController will emit error, which can be read with
    errorString() method. An error for BLE service can occur in the process of connecting to
    the service. For BLE characteristics, an error can occur when trying to subscribe for the
    notifications.

    In the end, it is required to disconnect from the service.

    \snippet heartlistener/heartrate.cpp Disconnecting from service

    \image hearratemonitor.png
    \image hearrateresults.png
    \image hearrateresults1.png

*/