diff options
Diffstat (limited to 'examples')
7 files changed, 84 insertions, 2 deletions
diff --git a/examples/bluetooth/heartrate-game/connectionhandler.cpp b/examples/bluetooth/heartrate-game/connectionhandler.cpp index d5084179..c9c14818 100644 --- a/examples/bluetooth/heartrate-game/connectionhandler.cpp +++ b/examples/bluetooth/heartrate-game/connectionhandler.cpp @@ -41,6 +41,7 @@ #include "heartrate-global.h" #include "connectionhandler.h" #include <QtDebug> +#include <QtBluetooth/qtbluetooth-config.h> ConnectionHandler::ConnectionHandler(QObject *parent) : QObject(parent) { @@ -56,6 +57,16 @@ bool ConnectionHandler::alive() const return m_localDevice.isValid() && m_localDevice.hostMode() != QBluetoothLocalDevice::HostPoweredOff; #endif } + +bool ConnectionHandler::requiresAddressType() const +{ +#if QT_CONFIG(bluez) + return true; +#else + return false; +#endif +} + QString ConnectionHandler::name() const { return m_localDevice.name(); diff --git a/examples/bluetooth/heartrate-game/connectionhandler.h b/examples/bluetooth/heartrate-game/connectionhandler.h index 8c38b8ca..23168b28 100644 --- a/examples/bluetooth/heartrate-game/connectionhandler.h +++ b/examples/bluetooth/heartrate-game/connectionhandler.h @@ -49,12 +49,14 @@ class ConnectionHandler : public QObject Q_PROPERTY(bool alive READ alive NOTIFY deviceChanged) Q_PROPERTY(QString name READ name NOTIFY deviceChanged) Q_PROPERTY(QString address READ address NOTIFY deviceChanged) + Q_PROPERTY(bool requiresAddressType READ requiresAddressType CONSTANT) Q_OBJECT public: explicit ConnectionHandler(QObject *parent = 0); bool alive() const; + bool requiresAddressType() const; QString name() const; QString address() const; diff --git a/examples/bluetooth/heartrate-game/devicefinder.cpp b/examples/bluetooth/heartrate-game/devicefinder.cpp index 71c4dcee..a56cfd6d 100644 --- a/examples/bluetooth/heartrate-game/devicefinder.cpp +++ b/examples/bluetooth/heartrate-game/devicefinder.cpp @@ -113,7 +113,7 @@ void DeviceFinder::scanFinished() { #ifdef SIMULATOR // Only for testing - for (int i = 0; i < 5; i++) + for (int i = 0; i < 4; i++) m_devices.append(new DeviceInfo(QBluetoothDeviceInfo())); #endif diff --git a/examples/bluetooth/heartrate-game/devicehandler.cpp b/examples/bluetooth/heartrate-game/devicehandler.cpp index d0f06d27..96c78313 100644 --- a/examples/bluetooth/heartrate-game/devicehandler.cpp +++ b/examples/bluetooth/heartrate-game/devicehandler.cpp @@ -62,6 +62,26 @@ DeviceHandler::DeviceHandler(QObject *parent) : #endif } +void DeviceHandler::setAddressType(AddressType type) +{ + switch (type) { + case DeviceHandler::AddressType::PublicAddress: + m_addressType = QLowEnergyController::PublicAddress; + break; + case DeviceHandler::AddressType::RandomAddress: + m_addressType = QLowEnergyController::RandomAddress; + break; + } +} + +DeviceHandler::AddressType DeviceHandler::addressType() const +{ + if (m_addressType == QLowEnergyController::RandomAddress) + return DeviceHandler::AddressType::RandomAddress; + + return DeviceHandler::AddressType::PublicAddress; +} + void DeviceHandler::setDevice(DeviceInfo *device) { clearMessages(); @@ -84,6 +104,7 @@ void DeviceHandler::setDevice(DeviceInfo *device) // Make connections m_control = new QLowEnergyController(m_currentDevice->getDevice(), this); + m_control->setRemoteAddressType(m_addressType); connect(m_control, &QLowEnergyController::serviceDiscovered, this, &DeviceHandler::serviceDiscovered); connect(m_control, &QLowEnergyController::discoveryFinished, diff --git a/examples/bluetooth/heartrate-game/devicehandler.h b/examples/bluetooth/heartrate-game/devicehandler.h index 08831cb3..950ed6e9 100644 --- a/examples/bluetooth/heartrate-game/devicehandler.h +++ b/examples/bluetooth/heartrate-game/devicehandler.h @@ -63,11 +63,21 @@ class DeviceHandler : public BluetoothBaseClass Q_PROPERTY(float average READ average NOTIFY statsChanged) Q_PROPERTY(int time READ time NOTIFY statsChanged) Q_PROPERTY(float calories READ calories NOTIFY statsChanged) + Q_PROPERTY(AddressType addressType READ addressType WRITE setAddressType) public: + enum class AddressType { + PublicAddress, + RandomAddress + }; + Q_ENUM(AddressType) + DeviceHandler(QObject *parent = 0); void setDevice(DeviceInfo *device); + void setAddressType(AddressType type); + AddressType addressType() const; + bool measuring() const; bool alive() const; @@ -122,6 +132,7 @@ private: QDateTime m_stop; QVector<int> m_measurements; + QLowEnergyController::RemoteAddressType m_addressType = QLowEnergyController::PublicAddress; #ifdef SIMULATOR QTimer m_demoTimer; diff --git a/examples/bluetooth/heartrate-game/main.cpp b/examples/bluetooth/heartrate-game/main.cpp index 039b0668..0b0cae12 100644 --- a/examples/bluetooth/heartrate-game/main.cpp +++ b/examples/bluetooth/heartrate-game/main.cpp @@ -56,6 +56,8 @@ int main(int argc, char *argv[]) DeviceHandler deviceHandler; DeviceFinder deviceFinder(&deviceHandler); + qmlRegisterUncreatableType<DeviceHandler>("Shared", 1, 0, "AddressType", "Enum is not a type"); + QQmlApplicationEngine engine; engine.rootContext()->setContextProperty("connectionHandler", &connectionHandler); engine.rootContext()->setContextProperty("deviceFinder", &deviceFinder); diff --git a/examples/bluetooth/heartrate-game/qml/Connect.qml b/examples/bluetooth/heartrate-game/qml/Connect.qml index d3b4a733..9e4efb17 100644 --- a/examples/bluetooth/heartrate-game/qml/Connect.qml +++ b/examples/bluetooth/heartrate-game/qml/Connect.qml @@ -39,6 +39,7 @@ ****************************************************************************/ import QtQuick 2.5 +import Shared 1.0 GamePage { @@ -48,7 +49,9 @@ GamePage { Rectangle { id: viewContainer anchors.top: parent.top - anchors.bottom: searchButton.top + anchors.bottom: + // only BlueZ platform has address type selection + connectionHandler.requiresAddressType ? addressTypeButton.top : searchButton.top anchors.topMargin: GameSettings.fieldMargin + messageHeight anchors.bottomMargin: GameSettings.fieldMargin anchors.horizontalCenter: parent.horizontalCenter @@ -124,6 +127,38 @@ GamePage { } GameButton { + id: addressTypeButton + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: searchButton.top + anchors.bottomMargin: GameSettings.fieldMargin*0.5 + width: viewContainer.width + height: GameSettings.fieldHeight + visible: connectionHandler.requiresAddressType // only required on BlueZ + state: "public" + onClicked: state == "public" ? state = "random" : state = "public" + + states: [ + State { + name: "public" + PropertyChanges { target: addressTypeText; text: qsTr("Public Address") } + PropertyChanges { target: deviceHandler; addressType: AddressType.PublicAddress } + }, + State { + name: "random" + PropertyChanges { target: addressTypeText; text: qsTr("Random Address") } + PropertyChanges { target: deviceHandler; addressType: AddressType.RandomAddress } + } + ] + + Text { + id: addressTypeText + anchors.centerIn: parent + font.pixelSize: GameSettings.tinyFontSize + color: GameSettings.textColor + } + } + + GameButton { id: searchButton anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: parent.bottom |