summaryrefslogtreecommitdiffstats
path: root/src/bluetooth/qbluetoothdeviceinfo.cpp
diff options
context:
space:
mode:
authorMichael Zanetti <michael.zanetti@nokia.com>2011-08-24 14:09:22 +1000
committerRohan McGovern <rohan.mcgovern@nokia.com>2011-08-24 14:10:36 +1000
commit29ba8297443cf76d4f647bde329d62c2a567c709 (patch)
tree88875199053cd88b3b3521c829277f209e815159 /src/bluetooth/qbluetoothdeviceinfo.cpp
Initial commit.
From qt5connectivity.tar.gz, md5 317c149d6f8c07d09632353188582834
Diffstat (limited to 'src/bluetooth/qbluetoothdeviceinfo.cpp')
-rw-r--r--src/bluetooth/qbluetoothdeviceinfo.cpp529
1 files changed, 529 insertions, 0 deletions
diff --git a/src/bluetooth/qbluetoothdeviceinfo.cpp b/src/bluetooth/qbluetoothdeviceinfo.cpp
new file mode 100644
index 00000000..4f3ee079
--- /dev/null
+++ b/src/bluetooth/qbluetoothdeviceinfo.cpp
@@ -0,0 +1,529 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qbluetoothdeviceinfo.h"
+#include "qbluetoothdeviceinfo_p.h"
+
+#include <QDebug>
+
+/*!
+ \class QBluetoothDeviceInfo
+ \brief The QBluetoothDeviceInfo class provides information about Bluetooth devices.
+
+ \ingroup connectivity-bluetooth
+ \inmodule QtConnectivity
+ \since 5.0
+
+ QBluetoothDeviceInfo provides information about a Bluetooth device's name, address and class of device.
+*/
+
+/*!
+ \enum QBluetoothDeviceInfo::MajorDeviceClass
+
+ This enum describes a Bluetooth device's major device class.
+
+ \value MiscellaneousDevice A miscellaneous device.
+ \value ComputerDevice A computer device or PDA.
+ \value PhoneDevice A telephone device.
+ \value LANAccessDevice A device that provides access to a local area network.
+ \value AudioVideoDevice A device capable of playback or capture of audio and/or video.
+ \value PeripheralDevice A peripheral device such as a keyboard, mouse, etc.
+ \value ImagingDevice An imaging device such as a display, printer, scanner or camera.
+ \value WearableDevice A wearable device such as a watch or pager.
+ \value ToyDevice A toy.
+ \value HealthDevice A health reated device such as heart rate, or temperature.
+ \value UncategorizedDevice A device that does not fit into any of the other device classes.
+*/
+
+/*!
+ \enum QBluetoothDeviceInfo::MinorMiscellaneousClass
+
+ This enum describes the minor device classes for miscellaneous Bluetooth devices.
+
+ \value UncategorizedMiscellaneous An uncategorized miscellaneous device.
+*/
+
+/*!
+ \enum QBluetoothDeviceInfo::MinorComputerClass
+
+ This enum describes the minor device classes for computer devices.
+
+ \value UncategorizedComputer An uncategorized computer device.
+ \value DesktopComputer A desktop computer.
+ \value ServerComputer A server computer.
+ \value LaptopComputer A laptop computer.
+ \value HandheldClamShellComputer A clamshell handheld computer or PDA.
+ \value HandheldComputer A handheld computer or PDA.
+ \value WearableComputer A wearable computer.
+*/
+
+/*!
+ \enum QBluetoothDeviceInfo::MinorPhoneClass
+
+ This enum describes the minor device classes for phone devices.
+
+ \value UncategorizedPhone An uncategorized phone device.
+ \value CellularPhone A cellular phone.
+ \value CordlessPhone A cordless phone.
+ \value SmartPhone A smart phone.
+ \value WiredModemOrVoiceGatewayPhone A wired modem or voice gateway.
+ \value CommonIsdnAccessPhone A device that provides ISDN access.
+*/
+
+/*!
+ \enum QBluetoothDeviceInfo::MinorNetworkClass
+
+ This enum describes the minor device classes for local area network access devices. Local area
+ network access devices use the minor device class to specify the current network utilization.
+
+ \value NetworkFullService 100% of the total bandwidth is available.
+ \value NetworkLoadFactorOne 0 - 17% of the total bandwidth is currently being used.
+ \value NetworkLoadFactorTwo 17 - 33% of the total bandwidth is currently being used.
+ \value NetworkLoadFactorThree 33 - 50% of the total bandwidth is currently being used.
+ \value NetworkLoadFactorFour 50 - 67% of the total bandwidth is currently being used.
+ \value NetworkLoadFactorFive 67 - 83% of the total bandwidth is currently being used.
+ \value NetworkLoadFactorSix 83 - 99% of the total bandwidth is currently being used.
+ \value NetworkNoService No network service available.
+*/
+
+/*!
+ \enum QBluetoothDeviceInfo::MinorAudioVideoClass
+
+ This enum describes the minor device classes for audio/video devices.
+
+ \value UncategorizedAudioVideoDevice An uncategorized audio/video device.
+ \value WearableHeadsetDevice A wearable headset device.
+ \value HandsFreeDevice A hands free device.
+ \value Microphone A microphone.
+ \value Loudspeaker A loudspeaker.
+ \value Headphones Headphones.
+ \value PortableAudioDevice A portable audio device.
+ \value CarAudio A car audio device.
+ \value SetTopBox A set top box.
+ \value HiFiAudioDevice A HiFi audio device.
+ \value Vcr A video cassette recorder.
+ \value VideoCamera A video camera.
+ \value Camcorder A video camera.
+ \value VideoMonitor A video monitor.
+ \value VideoDisplayAndLoudspeaker A video display with built-in loudspeaker.
+ \value VideoConferencing A video conferencing device.
+ \value GamingDevice A gaming device.
+*/
+
+/*!
+ \enum QBluetoothDeviceInfo::MinorPeripheralClass
+
+ This enum describes the minor device classes for peripheral devices.
+
+ \value UncategorizedPeripheral An uncategorized peripheral device.
+ \value KeyboardPeripheral A keyboard.
+ \value PointingDevicePeripheral A pointing device, for example a mouse.
+ \value KeyboardWithPointingDevicePeripheral A keyboard with built-in pointing device.
+ \value JoystickPeripheral A joystick.
+ \value GamepadPeripheral A game pad.
+ \value RemoteControlPeripheral A remote control.
+ \value SensingDevicePeripheral A sensing device.
+ \value DigitizerTabletPeripheral A digitizer tablet peripheral.
+ \value CardReaderPeripheral A card reader peripheral.
+*/
+
+/*!
+ \enum QBluetoothDeviceInfo::MinorImagingClass
+
+ This enum describes the minor device classes for imaging devices.
+
+ \value UncategorizedImagingDevice An uncategorized imaging device.
+ \value ImageDisplay A device capable of displaying images.
+ \value ImageCamera A camera.
+ \value ImageScanner An image scanner.
+ \value ImagePrinter A printer.
+*/
+
+/*!
+ \enum QBluetoothDeviceInfo::MinorWearableClass
+
+ This enum describes the minor device classes for wearable devices.
+
+ \value UncategorizedWearableDevice An uncategorized wearable device.
+ \value WearableWristWatch A wristwatch.
+ \value WearablePager A pager.
+ \value WearableJacket A jacket.
+ \value WearableHelmet A helmet.
+ \value WearableGlasses A pair of glasses.
+*/
+
+/*!
+ \enum QBluetoothDeviceInfo::MinorToyClass
+
+ This enum describes the minor device classes for toy devices.
+
+ \value UncategorizedToy An uncategorized toy.
+ \value ToyRobot A toy robot.
+ \value ToyVehicle A toy vehicle.
+ \value ToyDoll A toy doll or action figure.
+ \value ToyController A controller.
+ \value ToyGame A game.
+*/
+
+/*!
+ \enum QBluetoothDeviceInfo::MinorHealthClass
+
+ This enum describes the minor device classes for health devices.
+
+ \value UncategorizedHealthDevice An uncategorized health device.
+ \value HealthBloodPressureMonitor A blood pressure monitor.
+ \value HealthThermometer A Thermometer.
+ \value HealthWeightScale A scale.
+ \value HealthGlucoseMeter A glucose meter.
+ \value HealthPulseOximeter A blood oxygen saturation meter.
+ \value HealthDataDisplay A data display.
+ \value HealthStepCounter A pedometer.
+*/
+
+
+/*!
+ \enum QBluetoothDeviceInfo::ServiceClass
+
+ This enum describes the service class of the Bluetooth device. The service class is used as a
+ rudimentary form of service discovery. It is meant to provide a rudimentary list of the types
+ of services that the device might provide.
+
+ \value NoService The device does not provide any services.
+ \value PositioningService The device provides positioning services.
+ \value NetworkingService The device provides networking services.
+ \value RenderingService The device provides rendering services.
+ \value CapturingService The device provides capturing services.
+ \value ObjectTransferService The device provides object transfer services.
+ \value AudioService The device provides audio services.
+ \value TelephonyService The device provides telephony services.
+ \value InformationService The device provides information services.
+ \value AllServices The device provides services of all types.
+*/
+
+/*!
+ \enum QBluetoothDeviceInfo::DataCompleteness
+
+ This enum describes the completeness of the received data.
+
+ \value DataComplete The data is complete.
+ \value DataIncomplete The data is incomplete. Addition datum is available via other
+ interfaces.
+ \value DataUnavailable No data is available.
+*/
+
+QBluetoothDeviceInfoPrivate::QBluetoothDeviceInfoPrivate()
+ : valid(false), cached(false), rssi(1),
+ serviceClasses(QBluetoothDeviceInfo::NoService),
+ majorDeviceClass(QBluetoothDeviceInfo::MiscellaneousDevice),
+ minorDeviceClass(0),
+ serviceUuidsCompleteness(QBluetoothDeviceInfo::DataUnavailable)
+{
+}
+
+/*!
+ Constructs an invalid QBluetoothDeviceInfo object.
+*/
+QBluetoothDeviceInfo::QBluetoothDeviceInfo()
+: d_ptr(new QBluetoothDeviceInfoPrivate)
+{
+}
+
+/*!
+ Constructs a QBluetoothDeviceInfo object with Bluetooth address \a address, device name
+ \a name and the encoded class of device \a classOfDevice.
+
+ The \a classOfDevice parameter is encoded in the following format
+
+ \table
+ \header \o Bits \o Size \o Description
+ \row \o 0 - 1 \o 2 \o Unused, set to 0.
+ \row \o 2 - 7 \o 6 \o Minor device class.
+ \row \o 8 - 12 \o 5 \o Major device class.
+ \row \o 13 - 23 \o 11 \o Service class.
+ \endtable
+*/
+QBluetoothDeviceInfo::QBluetoothDeviceInfo(const QBluetoothAddress &address, const QString &name, quint32 classOfDevice)
+: d_ptr(new QBluetoothDeviceInfoPrivate)
+{
+ Q_D(QBluetoothDeviceInfo);
+
+ d->address = address;
+ d->name = name;
+
+ d->minorDeviceClass = static_cast<quint8>((classOfDevice >> 2) & 0x3f);
+ d->majorDeviceClass = static_cast<MajorDeviceClass>((classOfDevice >> 8) & 0x1f);
+ d->serviceClasses = static_cast<ServiceClasses>((classOfDevice >> 13) & 0x7ff);
+
+ d->serviceUuidsCompleteness = DataUnavailable;
+
+ d->valid = true;
+ d->cached = false;
+ d->rssi = 0;
+}
+
+/*!
+ Constructs a QBluetoothDeviceInfo that is a copy of \a other.
+*/
+QBluetoothDeviceInfo::QBluetoothDeviceInfo(const QBluetoothDeviceInfo &other)
+: d_ptr(new QBluetoothDeviceInfoPrivate)
+{
+ *this = other;
+}
+
+/*!
+ Destroys the QBluetoothDeviceInfo.
+*/
+QBluetoothDeviceInfo::~QBluetoothDeviceInfo()
+{
+ delete d_ptr;
+}
+
+/*!
+ Returns true if the QBluetoothDeviceInfo object is valid, otherwise returns false.
+*/
+bool QBluetoothDeviceInfo::isValid() const
+{
+ Q_D(const QBluetoothDeviceInfo);
+
+ return d->valid;
+}
+/*!
+ Returns the signal strength when the device was last scanned
+ */
+qint16 QBluetoothDeviceInfo::rssi() const
+{
+ Q_D(const QBluetoothDeviceInfo);
+
+ return d->rssi;
+}
+
+/*!
+ Set the \a signal strength value, used internally.
+ */
+void QBluetoothDeviceInfo::setRssi(qint16 signal)
+{
+ Q_D(QBluetoothDeviceInfo);
+ d->rssi = signal;
+}
+
+/*!
+ Makes a copy of the \a other and assigns it to this QBluetoothDeviceInfo object.
+*/
+QBluetoothDeviceInfo &QBluetoothDeviceInfo::operator=(const QBluetoothDeviceInfo &other)
+{
+ Q_D(QBluetoothDeviceInfo);
+
+ d->address = other.d_func()->address;
+ d->name = other.d_func()->name;
+ d->minorDeviceClass = other.d_func()->minorDeviceClass;
+ d->majorDeviceClass = other.d_func()->majorDeviceClass;
+ d->serviceClasses = other.d_func()->serviceClasses;
+ d->valid = other.d_func()->valid;
+ d->cached = other.d_func()->cached;
+ d->serviceUuidsCompleteness = other.d_func()->serviceUuidsCompleteness;
+ d->serviceUuids = other.d_func()->serviceUuids;
+ d->rssi = other.d_func()->rssi;
+
+ return *this;
+}
+
+/*!
+ Returns true if the \a other QBluetoothDeviceInfo object and this are identical
+ */
+bool QBluetoothDeviceInfo::operator==(const QBluetoothDeviceInfo &other) const
+{
+ Q_D(const QBluetoothDeviceInfo);
+
+ if(d->cached != other.d_func()->cached)
+ return false;
+ if(d->valid != other.d_func()->valid)
+ return false;
+ if(d->majorDeviceClass != other.d_func()->majorDeviceClass)
+ return false;
+ if(d->minorDeviceClass != other.d_func()->minorDeviceClass)
+ return false;
+ if(d->serviceClasses != other.d_func()->serviceClasses)
+ return false;
+ if(d->name != other.d_func()->name)
+ return false;
+ if(d->address != other.d_func()->address)
+ return false;
+ if(d->serviceUuidsCompleteness != other.d_func()->serviceUuidsCompleteness)
+ return false;
+ if(d->serviceUuids.count() != other.d_func()->serviceUuids.count())
+ return false;
+ if(d->serviceUuids != other.d_func()->serviceUuids)
+ return false;
+
+ return true;
+
+}
+
+/*!
+ Returns the address of the device.
+*/
+QBluetoothAddress QBluetoothDeviceInfo::address() const
+{
+ Q_D(const QBluetoothDeviceInfo);
+
+ return d->address;
+}
+
+/*!
+ Returns the name assigned to the device.
+*/
+QString QBluetoothDeviceInfo::name() const
+{
+ Q_D(const QBluetoothDeviceInfo);
+
+ return d->name;
+}
+
+/*!
+ Returns the service class of the device.
+*/
+QBluetoothDeviceInfo::ServiceClasses QBluetoothDeviceInfo::serviceClasses() const
+{
+ Q_D(const QBluetoothDeviceInfo);
+
+ return d->serviceClasses;
+}
+
+/*!
+ Returns the major device class of the device.
+*/
+QBluetoothDeviceInfo::MajorDeviceClass QBluetoothDeviceInfo::majorDeviceClass() const
+{
+ Q_D(const QBluetoothDeviceInfo);
+
+ return d->majorDeviceClass;
+}
+
+/*!
+ Returns the minor device class of the device.
+*/
+quint8 QBluetoothDeviceInfo::minorDeviceClass() const
+{
+ Q_D(const QBluetoothDeviceInfo);
+
+ return d->minorDeviceClass;
+}
+
+/*!
+ Sets the list of service UUIDs to \a uuids and the completeness of the data to \a completeness.
+*/
+void QBluetoothDeviceInfo::setServiceUuids(const QList<QBluetoothUuid> &uuids, DataCompleteness completeness)
+{
+ Q_D(QBluetoothDeviceInfo);
+
+ d->serviceUuids = uuids;
+ d->serviceUuidsCompleteness = completeness;
+}
+
+/*!
+ Returns the list of service UUIDS supported by the device. If \a completeness is not 0 it will
+ be set to DataComplete if the returned list is the complete list of UUIDs supported by the
+ device. DataIncomplete if additional service UUIDs are supported by the device and
+ DataUnavailable if no service UUID information is available.
+
+ This function requires both Bluetooth devices to support the 2.1 specification.
+*/
+QList<QBluetoothUuid> QBluetoothDeviceInfo::serviceUuids(DataCompleteness *completeness) const
+{
+ Q_D(const QBluetoothDeviceInfo);
+
+ if (completeness)
+ *completeness = d->serviceUuidsCompleteness;
+
+ return d->serviceUuids;
+}
+
+/*!
+ Returns the completeness of the service UUID list. If DataComplete is returned then
+ serviceUuids() will return a complete list of service UUIDs supported by the device. Otherwise
+ serviceUuids() will only return a partial or empty list of service UUIDs. To get a full list
+ of services supported by the device a full service discovery needs to be performed.
+*/
+QBluetoothDeviceInfo::DataCompleteness QBluetoothDeviceInfo::serviceUuidsCompleteness() const
+{
+ Q_D(const QBluetoothDeviceInfo);
+
+ return d->serviceUuidsCompleteness;
+}
+
+/*!
+ Sets the manufacturer specific data returned by Extended Inquiry Responses to \a data.
+*/
+void QBluetoothDeviceInfo::setManufacturerSpecificData(const QByteArray &data)
+{
+ Q_UNUSED(data);
+}
+
+/*!
+ Returns the manufacturer specific data. If \a available is not 0 it is set to true if
+ manufacturer specific data is available; otherwise it is set to false.
+*/
+QByteArray QBluetoothDeviceInfo::manufacturerSpecificData(bool *available) const
+{
+ Q_UNUSED(available);
+ return QByteArray();
+}
+
+/*!
+ Returns true if the QBluetoothDeviceInfo object is created from cached data
+*/
+bool QBluetoothDeviceInfo::isCached() const
+{
+ Q_D(const QBluetoothDeviceInfo);
+
+ return d->cached;
+}
+
+/*!
+ Used by the system to set the \a cached flag if the QBluetoothDeviceInfo is created from cached data. Cached information
+ may not be as accurate as data read from a live device.
+ */
+void QBluetoothDeviceInfo::setCached(bool cached)
+{
+ Q_D(QBluetoothDeviceInfo);
+
+ d->cached = cached;
+}