summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNedim Hadzic <nhadzic@blackberry.com>2013-12-16 02:12:22 +0100
committerFabian Bumberger <fbumberger@rim.com>2014-01-09 17:48:29 +0100
commit316a17406b894bcdabad2faaeaba18ab0abdc352 (patch)
tree04f17ad2421d787fff90725674e9237437f41e3b
parent5c87c1e0e26bee77bf02459df884435f8c48e0f2 (diff)
Implemented Bluetooth Low Energy: examples
Examples which illustrate how to use BLE API are implemented. First example is an application for discovering LE devices, services and characteristics. Change-Id: Ic144c78499b74934541837df9a53183b4e7e32f7 Reviewed-by: Alex Blasche <alexander.blasche@digia.com> Reviewed-by: Fabian Bumberger <fbumberger@rim.com>
-rw-r--r--examples/bluetooth/bluetooth.pro3
-rw-r--r--examples/bluetooth/lowenergyscanner/assets/Characteristics.qml128
-rw-r--r--examples/bluetooth/lowenergyscanner/assets/Dialog.qml57
-rw-r--r--examples/bluetooth/lowenergyscanner/assets/Header.qml57
-rw-r--r--examples/bluetooth/lowenergyscanner/assets/Label.qml49
-rw-r--r--examples/bluetooth/lowenergyscanner/assets/Menu.qml86
-rw-r--r--examples/bluetooth/lowenergyscanner/assets/Services.qml115
-rw-r--r--examples/bluetooth/lowenergyscanner/assets/main.qml123
-rw-r--r--examples/bluetooth/lowenergyscanner/characteristicinfo.cpp107
-rw-r--r--examples/bluetooth/lowenergyscanner/characteristicinfo.h74
-rw-r--r--examples/bluetooth/lowenergyscanner/device.cpp217
-rw-r--r--examples/bluetooth/lowenergyscanner/device.h111
-rw-r--r--examples/bluetooth/lowenergyscanner/deviceinfo.cpp72
-rw-r--r--examples/bluetooth/lowenergyscanner/deviceinfo.h70
-rw-r--r--examples/bluetooth/lowenergyscanner/lowenergyscanner.pro33
-rw-r--r--examples/bluetooth/lowenergyscanner/main.cpp60
-rw-r--r--examples/bluetooth/lowenergyscanner/resources.qrc11
-rw-r--r--examples/bluetooth/lowenergyscanner/serviceinfo.cpp68
-rw-r--r--examples/bluetooth/lowenergyscanner/serviceinfo.h66
19 files changed, 1506 insertions, 1 deletions
diff --git a/examples/bluetooth/bluetooth.pro b/examples/bluetooth/bluetooth.pro
index e3ef7691..4d520550 100644
--- a/examples/bluetooth/bluetooth.pro
+++ b/examples/bluetooth/bluetooth.pro
@@ -6,4 +6,5 @@ qtHaveModule(widgets) {
bttennis
}
-SUBDIRS += scanner
+SUBDIRS += scanner \
+ lowenergyscanner
diff --git a/examples/bluetooth/lowenergyscanner/assets/Characteristics.qml b/examples/bluetooth/lowenergyscanner/assets/Characteristics.qml
new file mode 100644
index 00000000..6420e893
--- /dev/null
+++ b/examples/bluetooth/lowenergyscanner/assets/Characteristics.qml
@@ -0,0 +1,128 @@
+/***************************************************************************
+**
+** Copyright (C) 2013 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtBluetooth module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Rectangle {
+ width: 300
+ height: 600
+
+ Header {
+ id: header
+ anchors.top: parent.top
+ headerText: "Characteristics list"
+ }
+
+ Dialog {
+ id: info
+ anchors.centerIn: parent
+ visible: false
+ }
+
+ ListView {
+ id: characteristicview
+ width: parent.width
+
+ anchors.top: header.bottom
+ anchors.bottom: menu.top
+ model: device.characteristicList
+
+ delegate: Rectangle {
+ id: characteristicbox
+ height:350
+ width: parent.width
+
+ Component.onCompleted: menu.menuText = "Back"
+
+ Label {
+ id: characteristicName1
+ textContent: modelData.characteristicName
+ anchors.top: parent.top
+ anchors.topMargin: 5
+
+ }
+
+ Label {
+ id: characteristicUuid1
+ textContent: modelData.characteristicUuid
+ anchors.verticalCenter: parent.verticalCenter
+ }
+
+ Label {
+ id: characteristicValue
+ textContent: ("Value: " + modelData.characteristicValue)
+ anchors.bottom: characteristicHandle.top
+ anchors.topMargin: 5
+ }
+
+ Label {
+ id: characteristicHandle
+ textContent: ("Handlers: " + modelData.characteristicHandle)
+ anchors.bottom: characteristicPermission.top
+ anchors.topMargin: 5
+ }
+
+ Label {
+ id: characteristicPermission
+ textContent: modelData.characteristicPermission
+ anchors.bottom: parent.bottom
+ anchors.topMargin: 10
+ }
+
+ Rectangle {
+ id: bottomarea
+ anchors.bottom: characteristicbox.bottom
+ width: parent.width
+ height: 2
+ color: "#363636"
+ }
+
+ }
+ }
+
+ Menu {
+ id: menu
+ anchors.bottom: parent.bottom
+ menuWidth: parent.width
+ menuText: device.update
+ menuHeight: (parent.height/6)
+ onButtonClick: {device.disconnectFromService(); pageLoader.source = "Services.qml"}
+ }
+}
diff --git a/examples/bluetooth/lowenergyscanner/assets/Dialog.qml b/examples/bluetooth/lowenergyscanner/assets/Dialog.qml
new file mode 100644
index 00000000..002055f4
--- /dev/null
+++ b/examples/bluetooth/lowenergyscanner/assets/Dialog.qml
@@ -0,0 +1,57 @@
+/***************************************************************************
+**
+** Copyright (C) 2013 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtBluetooth module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Rectangle {
+ width: parent.width/2
+ height: 62
+ z: 50
+ property string dialogText: ""
+ border.width: 1
+ border.color: "#363636"
+ radius: 10
+
+ Text {
+ anchors.centerIn: parent
+ text: dialogText
+ color: "#363636"
+ }
+}
diff --git a/examples/bluetooth/lowenergyscanner/assets/Header.qml b/examples/bluetooth/lowenergyscanner/assets/Header.qml
new file mode 100644
index 00000000..c33a0692
--- /dev/null
+++ b/examples/bluetooth/lowenergyscanner/assets/Header.qml
@@ -0,0 +1,57 @@
+/***************************************************************************
+**
+** Copyright (C) 2013 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtBluetooth module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Rectangle {
+ width: parent.width
+ height: 70
+ border.width: 1
+ border.color: "#363636"
+ property string headerText: ""
+
+ Text {
+ anchors.centerIn: parent
+ text: headerText
+ font.bold: true
+ font.pixelSize: 30
+ color: "#363636"
+ }
+}
diff --git a/examples/bluetooth/lowenergyscanner/assets/Label.qml b/examples/bluetooth/lowenergyscanner/assets/Label.qml
new file mode 100644
index 00000000..e22bca26
--- /dev/null
+++ b/examples/bluetooth/lowenergyscanner/assets/Label.qml
@@ -0,0 +1,49 @@
+/***************************************************************************
+**
+** Copyright (C) 2013 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtBluetooth module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Text {
+ property string textContent: ""
+ font.pixelSize: 30
+ anchors.horizontalCenter: parent.horizontalCenter
+ color: "#363636"
+ text: textContent
+}
diff --git a/examples/bluetooth/lowenergyscanner/assets/Menu.qml b/examples/bluetooth/lowenergyscanner/assets/Menu.qml
new file mode 100644
index 00000000..dcd2b89d
--- /dev/null
+++ b/examples/bluetooth/lowenergyscanner/assets/Menu.qml
@@ -0,0 +1,86 @@
+/***************************************************************************
+**
+** Copyright (C) 2013 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtBluetooth module of the Qt Toolkit.
+**
+**$QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Rectangle {
+
+ property real menuWidth: 100
+ property real menuHeight: 50
+ property string menuText: "Search"
+ signal buttonClick()
+
+ height: menuHeight
+ width: menuWidth
+
+ Rectangle {
+ id: search
+ width: parent.width
+ height: parent.height
+ color: "#363636"
+ border.width: 1
+ border.color: "#E3E3E3"
+ radius: 10
+ Text {
+ id: searchText
+ anchors.centerIn: parent
+ text: menuText
+ color: "#E3E3E3"
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onPressed: {
+ search.width = search.width - 7
+ search.height = search.height - 5
+ }
+
+ onReleased: {
+ search.width = search.width + 7
+ search.height = search.height + 5
+ }
+
+ onClicked: {
+ ColorAnimation: { to: "#4D4C4C"; duration: 200 }
+ buttonClick()
+ }
+ }
+ }
+}
diff --git a/examples/bluetooth/lowenergyscanner/assets/Services.qml b/examples/bluetooth/lowenergyscanner/assets/Services.qml
new file mode 100644
index 00000000..31775884
--- /dev/null
+++ b/examples/bluetooth/lowenergyscanner/assets/Services.qml
@@ -0,0 +1,115 @@
+/***************************************************************************
+**
+** Copyright (C) 2013 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtBluetooth module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Rectangle {
+ width: 300
+ height: 600
+
+ Header {
+ id: header
+ anchors.top: parent.top
+ headerText: "Services list"
+ }
+
+ Dialog {
+ id: info
+ anchors.centerIn: parent
+ visible: false
+ }
+
+ Component.onCompleted: { info.visible = true; info.dialogText = "Scanning for services...";}
+
+ ListView {
+ id: servicesview
+ width: parent.width
+ anchors.top: header.bottom
+ anchors.bottom: menu.top
+ model: device.servicesList
+
+ delegate: Rectangle {
+ id: servicebox
+ height:140
+ width: parent.width
+ Component.onCompleted: info.visible = false
+
+ MouseArea {
+ anchors.fill: parent
+ onPressed: { servicebox.height= 135; bottomarea.height = 7}
+ onReleased: { servicebox.height= 140; bottomarea.height = 2}
+ onClicked: { device.connectToService(modelData.serviceUuid); pageLoader.source = "Characteristics.qml";}
+
+ }
+
+ Label {
+ id: serviceName1
+ textContent: modelData.serviceName
+ anchors.top: parent.top
+ anchors.topMargin: 5
+ }
+
+ Label {
+ id: serviceUuid
+ textContent: modelData.serviceUuid
+ anchors.bottom: bottomarea.top
+ anchors.bottomMargin: 5
+ }
+
+ Rectangle {
+ id: bottomarea
+ anchors.bottom: servicebox.bottom
+ width: parent.width
+ height: 2
+ color: "#363636"
+ }
+
+ }
+ }
+
+ Menu {
+ id: menu
+ anchors.bottom: parent.bottom
+ menuWidth: parent.width
+ menuText: "Back"
+ menuHeight: (parent.height/6)
+ onButtonClick: pageLoader.source = "main.qml"
+ }
+}
diff --git a/examples/bluetooth/lowenergyscanner/assets/main.qml b/examples/bluetooth/lowenergyscanner/assets/main.qml
new file mode 100644
index 00000000..3c4e27ea
--- /dev/null
+++ b/examples/bluetooth/lowenergyscanner/assets/main.qml
@@ -0,0 +1,123 @@
+/***************************************************************************
+**
+** Copyright (C) 2013 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtBluetooth module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Rectangle {
+ id: back
+ width: 300
+ height: 600
+
+ Header {
+ id: header
+ anchors.top: parent.top
+ headerText: "Start a Device Discovery"
+ }
+
+ Dialog {
+ id: info
+ anchors.centerIn: parent
+ visible: false
+ }
+
+ ListView {
+ id: theListView
+ width: parent.width
+
+ anchors.top: header.bottom
+ anchors.bottom: menu.top
+ model: device.devicesList
+
+ delegate: Rectangle {
+ id: box
+ height:140
+ width: parent.width
+ Component.onCompleted: { info.visible = false;
+ header.headerText = "Select a device";
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onPressed: { box.height= 135; downpart.height = 7}
+ onReleased: { box.height= 140; downpart.height = 2}
+ onClicked: {device.scanServices(modelData.deviceAddress); pageLoader.source = "Services.qml"}
+
+ }
+
+ Label {
+ id: deviceName1
+ textContent: modelData.deviceName
+ anchors.top: parent.top
+ anchors.topMargin: 5
+ }
+
+ Label {
+ id: deviceAddress1
+ textContent: modelData.deviceAddress
+ anchors.bottom: downpart.top
+ anchors.bottomMargin: 5
+ }
+
+ Rectangle {
+ id: downpart
+ anchors.bottom: box.bottom
+ width: parent.width
+ height: 2
+ color: "#363636"
+ }
+
+ }
+ }
+
+ Menu {
+ id: menu
+ anchors.bottom: parent.bottom
+ menuWidth: parent.width
+ menuHeight: (parent.height/6)
+ menuText: device.update
+ onButtonClick: { device.startDeviceDiscovery(); info.dialogText = "Searching..."; info.visible = true;}
+ }
+
+ Loader {
+ id: pageLoader
+ anchors.fill: parent
+
+ }
+}
diff --git a/examples/bluetooth/lowenergyscanner/characteristicinfo.cpp b/examples/bluetooth/lowenergyscanner/characteristicinfo.cpp
new file mode 100644
index 00000000..1d6bfa21
--- /dev/null
+++ b/examples/bluetooth/lowenergyscanner/characteristicinfo.cpp
@@ -0,0 +1,107 @@
+/***************************************************************************
+**
+** Copyright (C) 2013 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtBluetooth module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "characteristicinfo.h"
+#include "qbluetoothuuid.h"
+#include <QByteArray>
+
+CharacteristicInfo::CharacteristicInfo():
+ m_characteristic(QLowEnergyCharacteristicInfo())
+{
+}
+
+CharacteristicInfo::CharacteristicInfo(const QLowEnergyCharacteristicInfo &characteristic):
+ m_characteristic(characteristic)
+{
+ emit characteristicChanged();
+}
+
+void CharacteristicInfo::setCharacteristic(const QLowEnergyCharacteristicInfo &characteristic)
+{
+ m_characteristic = QLowEnergyCharacteristicInfo(characteristic);
+ emit characteristicChanged();
+}
+
+QString CharacteristicInfo::getName() const
+{
+ return m_characteristic.name();
+}
+
+QString CharacteristicInfo::getUuid() const
+{
+ return m_characteristic.uuid().toString().remove(QLatin1Char('{')).remove(QLatin1Char('}'));
+}
+
+QString CharacteristicInfo::getValue() const
+{
+ // All characteristics values are in hexadecimal format.
+ QString hexvalue = "";
+ QByteArray a = m_characteristic.value();
+ for (int i = 0; i < a.size(); i++){
+ hexvalue.append(a.at(i));}
+ return hexvalue;
+}
+
+QString CharacteristicInfo::getHandle() const
+{
+ return m_characteristic.handle();
+}
+
+QString CharacteristicInfo::getPermission() const
+{
+ QString properties = "Properties:";
+ int permission = m_characteristic.permissions();
+ if (permission & QLowEnergyCharacteristicInfo::Read)
+ properties = properties + QStringLiteral(" Read");
+ if (permission & QLowEnergyCharacteristicInfo::Write)
+ properties = properties + QStringLiteral(" Write");
+ if (permission & QLowEnergyCharacteristicInfo::Notify)
+ properties = properties + QStringLiteral(" Notify");
+ if (permission & QLowEnergyCharacteristicInfo::Indicate)
+ properties = properties + QStringLiteral(" Indicate");
+ if (permission & QLowEnergyCharacteristicInfo::ExtendedProperty)
+ properties = properties + QStringLiteral(" ExtendedProperty");
+ return properties;
+}
+
+QLowEnergyCharacteristicInfo CharacteristicInfo::getCharacteristic() const
+{
+ return m_characteristic;
+}
diff --git a/examples/bluetooth/lowenergyscanner/characteristicinfo.h b/examples/bluetooth/lowenergyscanner/characteristicinfo.h
new file mode 100644
index 00000000..7f746960
--- /dev/null
+++ b/examples/bluetooth/lowenergyscanner/characteristicinfo.h
@@ -0,0 +1,74 @@
+/***************************************************************************
+**
+** Copyright (C) 2013 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtBluetooth module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef CHARACTERISTICINFO_H
+#define CHARACTERISTICINFO_H
+#include <QObject>
+#include <QString>
+#include <qlowenergycharacteristicinfo.h>
+
+class CharacteristicInfo: public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString characteristicName READ getName NOTIFY characteristicChanged)
+ Q_PROPERTY(QString characteristicUuid READ getUuid NOTIFY characteristicChanged)
+ Q_PROPERTY(QString characteristicValue READ getValue NOTIFY characteristicChanged)
+ Q_PROPERTY(QString characteristicHandle READ getHandle NOTIFY characteristicChanged)
+ Q_PROPERTY(QString characteristicPermission READ getPermission NOTIFY characteristicChanged)
+
+public:
+ CharacteristicInfo();
+ CharacteristicInfo(const QLowEnergyCharacteristicInfo &characteristic);
+ void setCharacteristic(const QLowEnergyCharacteristicInfo &characteristic);
+ QString getName() const;
+ QString getUuid() const;
+ QString getValue() const;
+ QString getHandle() const;
+ QString getPermission() const;
+ QLowEnergyCharacteristicInfo getCharacteristic() const;
+
+Q_SIGNALS:
+ void characteristicChanged();
+
+private:
+ QLowEnergyCharacteristicInfo m_characteristic;
+};
+
+#endif // CHARACTERISTICINFO_H
diff --git a/examples/bluetooth/lowenergyscanner/device.cpp b/examples/bluetooth/lowenergyscanner/device.cpp
new file mode 100644
index 00000000..50d51631
--- /dev/null
+++ b/examples/bluetooth/lowenergyscanner/device.cpp
@@ -0,0 +1,217 @@
+/***************************************************************************
+**
+** Copyright (C) 2013 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtBluetooth module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "device.h"
+#include <qbluetoothaddress.h>
+#include <qbluetoothdevicediscoveryagent.h>
+#include <qbluetoothlocaldevice.h>
+#include <qbluetoothdeviceinfo.h>
+#include <qbluetoothservicediscoveryagent.h>
+#include <qbluetoothserviceinfo.h>
+#include <qlowenergycharacteristicinfo.h>
+#include <qlowenergycontroller.h>
+#include <QDebug>
+#include <QList>
+
+Device::Device():
+ localDevice(new QBluetoothLocalDevice()), m_message(QString()), connected(false)
+{
+ if (localDevice->allDevices().size() == 0) {
+ setUpdate("Bluetooth adapter not discovered");
+ m_adapterPresent = false;
+ }
+ else
+ m_adapterPresent = true;
+ QBluetoothAddress adapterAddress(localDevice->address());
+ discoveryAgent = new QBluetoothDeviceDiscoveryAgent(adapterAddress);
+ connect(discoveryAgent, SIGNAL(deviceDiscovered(const QBluetoothDeviceInfo&)),
+ this, SLOT(addDevice(const QBluetoothDeviceInfo&)));
+ connect(discoveryAgent, SIGNAL(finished()), this, SLOT(scanFinished()));
+ serviceDiscoveryAgent = new QBluetoothServiceDiscoveryAgent(adapterAddress);
+
+ setUpdate("Search");
+}
+
+Device::~Device()
+{
+ delete discoveryAgent;
+ delete localDevice;
+ delete serviceDiscoveryAgent;
+ qDeleteAll(devices);
+ qDeleteAll(m_services);
+ qDeleteAll(m_characteristics);
+ devices.clear();
+ m_services.clear();
+ m_characteristics.clear();
+}
+
+void Device::startDeviceDiscovery()
+{
+ if (m_adapterPresent) {
+ devices.clear();
+ setUpdate("Scanning for devices ...");
+ discoveryAgent->start();
+ }
+ else
+ setUpdate("Bluetooth adapter not discovered");
+}
+
+void Device::addDevice(const QBluetoothDeviceInfo &info)
+{
+ if (info.coreConfiguration() == QBluetoothDeviceInfo::LowEnergyCoreConfiguration) {
+ DeviceInfo *d = new DeviceInfo(info);
+ devices.append(d);
+ setUpdate("Last device added: " + d->getName());
+ }
+}
+
+void Device::scanFinished()
+{
+ Q_EMIT devicesDone();
+ setUpdate("Done! Scan Again!");
+}
+
+QVariant Device::getDevices()
+{
+ return QVariant::fromValue(devices);
+}
+
+QVariant Device::getServices()
+{
+ return QVariant::fromValue(m_services);
+}
+
+QVariant Device::getCharacteristics()
+{
+ return QVariant::fromValue(m_characteristics);
+}
+
+QString Device::getUpdate()
+{
+ return m_message;
+}
+
+void Device::scanServices(QString address)
+{
+ // We need the current device for service discovery.
+ for (int i = 0; i < devices.size(); i++) {
+ if (((DeviceInfo*)devices.at(i))->getAddress() == address ) {
+ currentDevice.setDevice(((DeviceInfo*)devices.at(i))->getDevice());
+ }
+ }
+
+ m_services.clear();
+ //Connecting signals and slots for service discovery
+ QBluetoothDeviceInfo dev = currentDevice.getDevice();
+ connect(serviceDiscoveryAgent, SIGNAL(serviceDiscovered(const QLowEnergyServiceInfo&)),
+ this, SLOT(addLowEnergyService(const QLowEnergyServiceInfo&)));
+ connect(serviceDiscoveryAgent, SIGNAL(finished()), this, SLOT(serviceScanDone()));
+ serviceDiscoveryAgent->setRemoteAddress(dev.address());
+ serviceDiscoveryAgent->start();
+ setUpdate("Scanning for services...");
+
+ // Connecting signals and slots for connecting to LE services.
+ info = new QLowEnergyController();
+ connect(info, SIGNAL(connected(QLowEnergyServiceInfo)), this, SLOT(serviceConnected(QLowEnergyServiceInfo)));
+ connect(info, SIGNAL(error(QLowEnergyServiceInfo)), this, SLOT(errorReceived(QLowEnergyServiceInfo)));
+ connect(info, SIGNAL(disconnected(QLowEnergyServiceInfo)), this, SLOT(serviceDisconnected(QLowEnergyServiceInfo)));
+}
+
+void Device::addLowEnergyService(const QLowEnergyServiceInfo &service)
+{
+ ServiceInfo *serv = new ServiceInfo(service);
+ m_services.append(serv);
+}
+
+void Device::serviceScanDone()
+{
+ Q_EMIT servicesDone();
+ setUpdate("Service scan done!");
+}
+
+void Device::connectToService(const QString &uuid)
+{
+ QString serviceUuid = uuid;
+ serviceUuid = serviceUuid.remove(QLatin1Char('{')).remove(QLatin1Char('}'));
+ QBluetoothUuid u(serviceUuid);
+ qDebug() << u;
+ QLowEnergyServiceInfo a;
+ for (int i = 0; i < m_services.size(); i++) {
+ ServiceInfo *service = (ServiceInfo*)m_services.at(i);
+ a = QLowEnergyServiceInfo(service->getLeService());
+ if (a.uuid() == u)
+ info->connectToService(a);
+ }
+}
+
+void Device::serviceConnected(const QLowEnergyServiceInfo &service)
+{
+ m_characteristics.clear();
+ setUpdate("Service connected!");
+ connected = true;
+ for (int i = 0; i < service.characteristics().size(); i++) {
+ CharacteristicInfo *chars = new CharacteristicInfo((QLowEnergyCharacteristicInfo)service.characteristics().at(i));
+ m_characteristics.append(chars);
+ }
+ emit characteristicsDone();
+}
+
+void Device::errorReceived(const QLowEnergyServiceInfo &service)
+{
+ qDebug() << "Error: " << service.errorString();
+ setUpdate(service.errorString());
+}
+
+void Device::setUpdate(QString message)
+{
+ m_message = message;
+ emit updateChanged();
+}
+
+void Device::disconnectFromService()
+{
+ if (connected)
+ info->disconnectFromService();
+}
+
+void Device::serviceDisconnected(const QLowEnergyServiceInfo &service)
+{
+ setUpdate("Service Disconnected");
+}
diff --git a/examples/bluetooth/lowenergyscanner/device.h b/examples/bluetooth/lowenergyscanner/device.h
new file mode 100644
index 00000000..00833eac
--- /dev/null
+++ b/examples/bluetooth/lowenergyscanner/device.h
@@ -0,0 +1,111 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef DEVICE_H
+#define DEVICE_H
+
+#include <qbluetoothglobal.h>
+#include <qbluetoothlocaldevice.h>
+#include <QObject>
+#include <QVariant>
+#include <QList>
+#include "deviceinfo.h"
+#include "qlowenergyserviceinfo.h"
+#include "serviceinfo.h"
+#include "characteristicinfo.h"
+
+QT_FORWARD_DECLARE_CLASS (QBluetoothDeviceDiscoveryAgent)
+QT_FORWARD_DECLARE_CLASS (QBluetoothDeviceInfo)
+QT_FORWARD_DECLARE_CLASS (QBluetoothServiceDiscoveryAgent)
+QT_FORWARD_DECLARE_CLASS (QLowEnergyServiceInfo)
+QT_FORWARD_DECLARE_CLASS (QLowEnergyCharacteristicInfo)
+QT_FORWARD_DECLARE_CLASS (QLowEnergyController)
+QT_FORWARD_DECLARE_CLASS (QBluetoothServiceInfo)
+
+class Device: public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QVariant devicesList READ getDevices NOTIFY devicesDone)
+ Q_PROPERTY(QVariant servicesList READ getServices NOTIFY servicesDone)
+ Q_PROPERTY(QVariant characteristicList READ getCharacteristics NOTIFY characteristicsDone)
+ Q_PROPERTY(QString update READ getUpdate NOTIFY updateChanged)
+public:
+ Device();
+ ~Device();
+ QVariant getDevices();
+ QVariant getServices();
+ QVariant getCharacteristics();
+ QString getUpdate();
+
+public slots:
+ void addDevice(const QBluetoothDeviceInfo&);
+ void startDeviceDiscovery();
+ void scanFinished();
+ void scanServices(QString address);
+ void addLowEnergyService(const QLowEnergyServiceInfo&);
+ void serviceScanDone();
+ void serviceConnected(const QLowEnergyServiceInfo &service);
+ void connectToService(const QString &uuid);
+ void errorReceived(const QLowEnergyServiceInfo &service);
+ void disconnectFromService();
+ void serviceDisconnected(const QLowEnergyServiceInfo &service);
+
+Q_SIGNALS:
+ void devicesDone();
+ void servicesDone();
+ void characteristicsDone();
+ void updateChanged();
+
+private:
+ void setUpdate(QString message);
+ bool m_adapterPresent;
+ QBluetoothDeviceDiscoveryAgent *discoveryAgent;
+ QBluetoothLocalDevice *localDevice;
+ QBluetoothServiceDiscoveryAgent *serviceDiscoveryAgent;
+ DeviceInfo currentDevice;
+ QList<QObject*> devices;
+ QList<QObject*> m_services;
+ QList<QObject*> m_characteristics;
+ QString m_message;
+ bool connected;
+ QLowEnergyController *info;
+};
+
+#endif // DEVICE_H
diff --git a/examples/bluetooth/lowenergyscanner/deviceinfo.cpp b/examples/bluetooth/lowenergyscanner/deviceinfo.cpp
new file mode 100644
index 00000000..433caf6c
--- /dev/null
+++ b/examples/bluetooth/lowenergyscanner/deviceinfo.cpp
@@ -0,0 +1,72 @@
+/***************************************************************************
+**
+** Copyright (C) 2013 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtBluetooth module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "deviceinfo.h"
+
+DeviceInfo::DeviceInfo()
+{
+ device = QBluetoothDeviceInfo();
+}
+
+DeviceInfo::DeviceInfo(const QBluetoothDeviceInfo &d)
+{
+ device = QBluetoothDeviceInfo(d);
+ Q_EMIT deviceChanged();
+}
+
+QString DeviceInfo::getAddress()
+{
+ return device.address().toString();
+}
+
+QString DeviceInfo::getName()
+{
+ return device.name();
+}
+
+QBluetoothDeviceInfo DeviceInfo::getDevice()
+{
+ return device;
+}
+
+void DeviceInfo::setDevice(const QBluetoothDeviceInfo &dev)
+{
+ device = QBluetoothDeviceInfo(dev);
+}
diff --git a/examples/bluetooth/lowenergyscanner/deviceinfo.h b/examples/bluetooth/lowenergyscanner/deviceinfo.h
new file mode 100644
index 00000000..9d4116b4
--- /dev/null
+++ b/examples/bluetooth/lowenergyscanner/deviceinfo.h
@@ -0,0 +1,70 @@
+/***************************************************************************
+**
+** Copyright (C) 2013 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtBluetooth module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef DEVICEINFO_H
+#define DEVICEINFO_H
+
+#include <QObject>
+#include <qbluetoothdeviceinfo.h>
+#include <qbluetoothaddress.h>
+#include <QList>
+#include "deviceinfo.h"
+
+class DeviceInfo: public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString deviceName READ getName NOTIFY deviceChanged)
+ Q_PROPERTY(QString deviceAddress READ getAddress NOTIFY deviceChanged)
+public:
+ DeviceInfo();
+ DeviceInfo(const QBluetoothDeviceInfo &d);
+ QString getAddress();
+ QString getName();
+ QBluetoothDeviceInfo getDevice();
+ void setDevice(const QBluetoothDeviceInfo &dev);
+
+Q_SIGNALS:
+ void deviceChanged();
+
+private:
+ QBluetoothDeviceInfo device;
+};
+
+#endif // DEVICEINFO_H
diff --git a/examples/bluetooth/lowenergyscanner/lowenergyscanner.pro b/examples/bluetooth/lowenergyscanner/lowenergyscanner.pro
new file mode 100644
index 00000000..2a8320c7
--- /dev/null
+++ b/examples/bluetooth/lowenergyscanner/lowenergyscanner.pro
@@ -0,0 +1,33 @@
+TARGET = lowenergyscanner
+INCLUDEPATH += .
+
+QT += quick bluetooth
+
+# Input
+SOURCES += main.cpp \
+ device.cpp \
+ deviceinfo.cpp \
+ serviceinfo.cpp \
+ characteristicinfo.cpp
+
+OTHER_FILES += assets/Menu.qml \
+ assets/Services.qml \
+ bar-descriptor.xml \
+ assets/Characteristics.qml \
+ assets/Details.qml \
+ bar-descriptor.xml \
+ assets/Dialog.qml \
+ assets/Header.qml \
+ assets/Label.qml
+
+HEADERS += \
+ device.h \
+ deviceinfo.h \
+ serviceinfo.h \
+ characteristicinfo.h
+
+RESOURCES += \
+ resources.qrc
+
+target.path = $$[QT_INSTALL_EXAMPLES]/bluetooth/lowenergyscanner
+INSTALLS += target
diff --git a/examples/bluetooth/lowenergyscanner/main.cpp b/examples/bluetooth/lowenergyscanner/main.cpp
new file mode 100644
index 00000000..1a8487c8
--- /dev/null
+++ b/examples/bluetooth/lowenergyscanner/main.cpp
@@ -0,0 +1,60 @@
+/***************************************************************************
+**
+** Copyright (C) 2013 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtBluetooth module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QQmlContext>
+#include <QGuiApplication>
+#include <QQuickView>
+#include "device.h"
+
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication app(argc, argv);
+
+
+ Device d;
+ QQuickView *view = new QQuickView;
+ view->rootContext()->setContextProperty("device", &d);
+
+ view->setSource(QUrl("qrc:/assets/main.qml"));
+ view->setResizeMode(QQuickView::SizeRootObjectToView);
+ view->show();
+ return app.exec();
+}
diff --git a/examples/bluetooth/lowenergyscanner/resources.qrc b/examples/bluetooth/lowenergyscanner/resources.qrc
new file mode 100644
index 00000000..49a518e8
--- /dev/null
+++ b/examples/bluetooth/lowenergyscanner/resources.qrc
@@ -0,0 +1,11 @@
+<RCC>
+ <qresource prefix="/">
+ <file>assets/Characteristics.qml</file>
+ <file>assets/main.qml</file>
+ <file>assets/Menu.qml</file>
+ <file>assets/Services.qml</file>
+ <file>assets/Header.qml</file>
+ <file>assets/Dialog.qml</file>
+ <file>assets/Label.qml</file>
+ </qresource>
+</RCC>
diff --git a/examples/bluetooth/lowenergyscanner/serviceinfo.cpp b/examples/bluetooth/lowenergyscanner/serviceinfo.cpp
new file mode 100644
index 00000000..471fb40a
--- /dev/null
+++ b/examples/bluetooth/lowenergyscanner/serviceinfo.cpp
@@ -0,0 +1,68 @@
+/***************************************************************************
+**
+** Copyright (C) 2013 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtBluetooth module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "serviceinfo.h"
+
+ServiceInfo::ServiceInfo():
+ m_serviceLe(QLowEnergyServiceInfo())
+{
+
+}
+
+ServiceInfo::ServiceInfo(const QLowEnergyServiceInfo &service):
+ m_serviceLe(service)
+{
+
+}
+
+QLowEnergyServiceInfo ServiceInfo::getLeService() const
+{
+ return m_serviceLe;
+}
+
+QString ServiceInfo::getName()
+{
+ return m_serviceLe.name();
+}
+
+QString ServiceInfo::getUuid()
+{
+ return m_serviceLe.uuid().toString().remove(QLatin1Char('{')).remove(QLatin1Char('}'));
+}
diff --git a/examples/bluetooth/lowenergyscanner/serviceinfo.h b/examples/bluetooth/lowenergyscanner/serviceinfo.h
new file mode 100644
index 00000000..7605119f
--- /dev/null
+++ b/examples/bluetooth/lowenergyscanner/serviceinfo.h
@@ -0,0 +1,66 @@
+/***************************************************************************
+**
+** Copyright (C) 2013 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtBluetooth module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef SERVICEINFO_H
+#define SERVICEINFO_H
+#include <QObject>
+#include "qlowenergyserviceinfo.h"
+#include "qbluetoothuuid.h"
+
+class ServiceInfo: public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString serviceName READ getName NOTIFY serviceChanged)
+ Q_PROPERTY(QString serviceUuid READ getUuid NOTIFY serviceChanged)
+public:
+ ServiceInfo();
+ ServiceInfo(const QLowEnergyServiceInfo &service);
+ QLowEnergyServiceInfo getLeService() const;
+ QString getUuid();
+ QString getName();
+
+Q_SIGNALS:
+ void serviceChanged();
+
+private:
+ QLowEnergyServiceInfo m_serviceLe;
+};
+
+#endif // SERVICEINFO_H