summaryrefslogtreecommitdiffstats
path: root/src/bluetooth/qbluetoothuuid.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/bluetooth/qbluetoothuuid.cpp')
-rw-r--r--src/bluetooth/qbluetoothuuid.cpp358
1 files changed, 358 insertions, 0 deletions
diff --git a/src/bluetooth/qbluetoothuuid.cpp b/src/bluetooth/qbluetoothuuid.cpp
new file mode 100644
index 00000000..c4b57c5b
--- /dev/null
+++ b/src/bluetooth/qbluetoothuuid.cpp
@@ -0,0 +1,358 @@
+/****************************************************************************
+**
+** 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 "qbluetoothuuid.h"
+
+#include <QStringList>
+
+#include <QDebug>
+
+#include <QtEndian>
+
+//#include <arpa/inet.h>
+//#include <netinet/in.h>
+#include <string.h>
+
+// Bluetooth base UUID 00000000-0000-1000-8000-00805F9B34FB
+// TODO: make more efficient
+Q_GLOBAL_STATIC_WITH_ARGS(QUuid, baseUuid, ("{00000000-0000-1000-8000-00805F9B34FB}"))
+
+/*!
+ \class QBluetoothUuid
+ \brief The QBluetoothUuid class provides a Bluetooth UUID.
+ \since 5.0
+
+ \ingroup connectivity-bluetooth
+ \inmodule QtConnectivity
+*/
+
+/*!
+ \enum QBluetoothUuid::ProtocolUuid
+
+ This enum is a convienience type for Bluetooth protocol UUIDs. Values of this type will be
+ implicitly converted into a QBluetoothUuid when necessary.
+
+ \value Sdp SDP protocol UUID.
+ \value Udp UDP protocol UUID.
+ \value Rfcomm RFCOMM protocol UUID.
+ \value Tcp TCP protocol UUID.
+ \value TcsBin Telephony Control Specification UUID.
+ \value TcsAt Telephony Control Specification AT UUID.
+ \value Obex OBEX protocol UUID.
+ \value Ip IP protocol UUID.
+ \value Ftp FTP protocol UUID.
+ \value Http HTTP protocol UUID.
+ \value Wsp WSP UUID
+ \value Bnep Bluetooth Network Encapsulation Protocol UUID
+ \value Upnp Extended Service Discovery Profile UUID
+ \value Hidp Human Interface Device Profile UUID
+ \value HardcopyControlChannel Hardcopy Cable Replacement Profile UUID
+ \value HardcopyDataChannel Hardcopy Cable Replacement Profile UUID
+ \value HardcopyNotification Hardcopy Cable Replacement Profile UUID
+ \value Avctp Audio/Video Control Transport Protocol UUID
+ \value Avdtp Audio/Video Distribution Transport Protocol UUID
+ \value Cmtp Common ISDN Access Profile
+ \value UdiCPlain UDI protocol UUID
+ \value McapControlChannel Multi-Channel Adaptation Protocol UUID
+ \value McapDataChannel Multi-Channel Adaptation Protocol UUID
+ \value L2cap L2CAP protocol UUID.
+*/
+
+/*!
+ \enum QBluetoothUuid::ServiceClassUuid
+
+ This enum is a convienience type for Bluetooth service class UUIDs. Values of this type will be
+ implicitly converted into a QBluetoothUuid when necessary.
+
+ \value PublicBrowseGroup Public browse group service class. Services which have the public
+ browse group in their
+ \l {QBluetoothServiceInfo::BrowseGroupList}{browse group list} are
+ discoverable by remote devices.
+ \value ObexObjectPush OBEX object push service UUID.
+ \value ServiceDiscoveryServer
+ \value BrowseGroupDescriptor Browser group descriptor
+ \value SerialPort Serial Port Profile UUID
+ \value LANAccessUsingPPP LAN Access Profile UUID
+ \value DialupNetworking Dial-up Networking Profile UUID
+ \value IrMCSync Synchronization Profile UUID
+ \value OBEXFileTransfer File Transfer Profile (FTP) UUID
+ \value IrMCSyncCommand Synchronization Profile UUID
+ \value Headset Headset Profile (HSP) UUID
+ \value AudioSource Advanced Audio Distribution Profile (A2DP) UUID
+ \value AudioSink Advanced Audio Distribution Profile (A2DP) UUID
+ \value AV_RemoteControlTarget Audio/Video Remote Control Profile (AVRCP) UUID
+ \value AdvancedAudioDistribution Advanced Audio Distribution Profile (A2DP) UUID
+ \value AV_RemoteControl Audio/Video Remote Control Profile (AVRCP) UUID
+ \value AV_RemoteControlController Audio/Video Remote Control Profile UUID
+ \value HeadsetAG Headset Profile (HSP) UUID
+ \value PANU Personal Area Networking Profile (PAN) UUID
+ \value NAP Personal Area Networking Profile (PAN) UUID
+ \value GN Personal Area Networking Profile (PAN) UUID
+ \value DirectPrinting Basic Printing Profile (BPP) UUID
+ \value ReferencePrinting Related to Basic Printing Profile (BPP) UUID
+ \value ImagingResponder Basic Imaging Profile (BIP) UUID
+ \value ImagingResponder Basic Imaging Profile (BIP) UUID
+ \value ImagingAutomaticArchive Basic Imaging Profile (BIP) UUID
+ \value Handsfree Hands-Free Profile (HFP) Service Class Identifier and Profile Identifier
+ \value HandsfreeAudioGateway Hands-free Profile (HFP) UUID
+ \value DirectPrintingReferenceObjectsService Basic Printing Profile (BPP) UUID
+ \value ReflectedUI Basic Printing Profile (BPP) UUID
+ \value BasicPrinting Basic Printing Profile (BPP) UUID
+ \value PrintingStatus Basic Printing Profile (BPP) UUID
+ \value HumanInterfaceDeviceService Human Interface Device (HID) UUID
+ \value HardcopyCableReplacement Hardcopy Cable Replacement Profile (HCRP)
+ \value HCRPrint Hardcopy Cable Replacement Profile (HCRP)
+ \value HCRScan Hardcopy Cable Replacement Profile (HCRP)
+ \value SIMAccess SIM Access Profile (SAP) UUID
+ \value PhonebookAccessPCE Phonebook Access Profile (PBAP) UUID
+ \value PhonebookAccessPSE Phonebook Access Profile (PBAP) UUID
+ \value PhonebookAccess Phonebook Access Profile (PBAP)
+ \value HeadsetHS Headset Profile (HSP) UUID
+ \value MessageAccessServer Message Access Profile (MAP) UUID
+ \value MessageNotificationServer Message Access Profile (MAP) UUID
+ \value MessageAccessProfile Message Access Profile (MAP) UUID
+ \value PnPInformation Device Identification (DID) UUID
+ \value GenericNetworking Generic networking
+ \value GenericFileTransfer Generic file transfer
+ \value GenericAudio Generic audio
+ \value GenericTelephony Generic telephone
+ \value VideoSource Video Distribution Profile (VDP)
+ \value VideoSink Video Distribution Profile (VDP)
+ \value VideoDistribution Video Distribution Profile (VDP)
+ \value HDP Health Device Profile
+ \value HDPSource Health Device Profile
+ \value HDPSink Health Device Profile
+*/
+
+/*!
+ Constructs a new null Bluetooth UUID.
+*/
+QBluetoothUuid::QBluetoothUuid()
+{
+}
+
+/*!
+ Constructs a new Bluetooth UUID from the protocol UUID \a uuid.
+*/
+QBluetoothUuid::QBluetoothUuid(ProtocolUuid uuid)
+: QUuid(uuid, baseUuid()->data2,
+ baseUuid()->data3, baseUuid()->data4[0], baseUuid()->data4[1],
+ baseUuid()->data4[2], baseUuid()->data4[3], baseUuid()->data4[4], baseUuid()->data4[5],
+ baseUuid()->data4[6], baseUuid()->data4[7])
+{
+}
+
+/*!
+ Constructs a new Bluetooth UUID from the service class UUID \a uuid.
+*/
+QBluetoothUuid::QBluetoothUuid(ServiceClassUuid uuid)
+: QUuid(uuid, baseUuid()->data2, baseUuid()->data3, baseUuid()->data4[0], baseUuid()->data4[1],
+ baseUuid()->data4[2], baseUuid()->data4[3], baseUuid()->data4[4], baseUuid()->data4[5],
+ baseUuid()->data4[6], baseUuid()->data4[7])
+{
+}
+
+/*!
+ Constructs a new Bluetooth UUID from the 16 bit UUID \a uuid.
+*/
+QBluetoothUuid::QBluetoothUuid(quint16 uuid)
+: QUuid(uuid, baseUuid()->data2, baseUuid()->data3, baseUuid()->data4[0], baseUuid()->data4[1],
+ baseUuid()->data4[2], baseUuid()->data4[3], baseUuid()->data4[4], baseUuid()->data4[5],
+ baseUuid()->data4[6], baseUuid()->data4[7])
+{
+}
+
+/*!
+ Constructs a new Bluetooth UUID from the 32 bit UUID \a uuid.
+*/
+QBluetoothUuid::QBluetoothUuid(quint32 uuid)
+: QUuid(uuid, baseUuid()->data2, baseUuid()->data3, baseUuid()->data4[0], baseUuid()->data4[1],
+ baseUuid()->data4[2], baseUuid()->data4[3], baseUuid()->data4[4], baseUuid()->data4[5],
+ baseUuid()->data4[6], baseUuid()->data4[7])
+{
+}
+
+/*!
+ Constructs a new Bluetooth UUID from the 128 bit UUID \a uuid.
+*/
+QBluetoothUuid::QBluetoothUuid(quint128 uuid)
+{
+ // TODO: look at the memcpy(), should not be needed
+ quint32 tmp32;
+ memcpy(&tmp32, &uuid.data[0], 4);
+ data1 = qFromBigEndian<quint32>(tmp32);
+
+ quint16 tmp16;
+ memcpy(&tmp16, &uuid.data[4], 2);
+ data2 = qFromBigEndian<quint16>(tmp16);
+
+ memcpy(&tmp16, &uuid.data[6], 2);
+ data3 = qFromBigEndian<quint16>(tmp16);
+
+ memcpy(data4, &uuid.data[8], 8);
+}
+
+/*!
+ Constructs a new Bluetooth UUID from the string \a uuid.
+
+ The string must be in the form XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.
+*/
+QBluetoothUuid::QBluetoothUuid(const QString &uuid)
+: QUuid(uuid)
+{
+}
+
+/*!
+ Constructs a new Bluetooth UUID that is a copy of \a uuid.
+*/
+QBluetoothUuid::QBluetoothUuid(const QBluetoothUuid &uuid)
+: QUuid(uuid)
+{
+}
+
+/*!
+ Constructs a new Bluetooth UUID that is a copy of \a uuid.
+*/
+QBluetoothUuid::QBluetoothUuid(const QUuid &uuid)
+: QUuid(uuid)
+{
+}
+
+/*!
+ Destroys the Bluetooth UUID.
+*/
+QBluetoothUuid::~QBluetoothUuid()
+{
+}
+
+/*!
+ Returns the minimum size in bytes that this UUID can be represented in. For non-null UUIDs 2,
+ 4 or 16 is returned. 0 is returned for null UUIDs.
+
+ \sa isNull(), toUInt16(), toUInt32(), toUInt128()
+*/
+int QBluetoothUuid::minimumSize() const
+{
+ if (data2 == baseUuid()->data2 && data3 == baseUuid()->data3 &&
+ memcmp(data4, baseUuid()->data4, 8) == 0) {
+ // 16 or 32 bit Bluetooth UUID
+ if (data1 & 0xFFFF0000)
+ return 4;
+ else
+ return 2;
+ }
+
+ if (isNull())
+ return 0;
+
+ return 16;
+}
+
+/*!
+ Returns the 16 bit representation of this UUID. If \a ok is passed it is set to true if the
+ conversion is possible otherwise it is set to false. The return value is undefined if \a ok is
+ set to false.
+*/
+quint16 QBluetoothUuid::toUInt16(bool *ok) const
+{
+ if (data1 & 0xFFFF0000 || data2 != baseUuid()->data2 || data3 != baseUuid()->data3 ||
+ memcmp(data4, baseUuid()->data4, 8) != 0) {
+ // not convertable to 16 bit Bluetooth UUID.
+ if (ok)
+ *ok = false;
+ return 0;
+ }
+
+ if (ok)
+ *ok = true;
+
+ return data1;
+}
+
+/*!
+ Returns the 32 bit representation of this UUID. If \a ok is passed it is set to true if the
+ conversion is possible otherwise it is set to false. The return value is undefined if \a ok is
+ set to false.
+*/
+quint32 QBluetoothUuid::toUInt32(bool *ok) const
+{
+ if (data2 != baseUuid()->data2 || data3 != baseUuid()->data3 ||
+ memcmp(data4, baseUuid()->data4, 8) != 0) {
+ // not convertable to 32 bit Bluetooth UUID.
+ if (ok)
+ *ok = false;
+ return 0;
+ }
+
+ if (ok)
+ *ok = true;
+
+ return data1;
+}
+
+/*!
+ Returns the 128 bit representation of this UUID.
+*/
+quint128 QBluetoothUuid::toUInt128() const
+{
+ quint128 uuid;
+
+ quint32 tmp32 = qToBigEndian<quint32>(data1);
+ memcpy(&uuid.data[0], &tmp32, 4);
+
+ quint16 tmp16 = qToBigEndian<quint16>(data2);
+ memcpy(&uuid.data[4], &tmp16, 2);
+
+ tmp16 = qToBigEndian<quint16>(data3);
+ memcpy(&uuid.data[6], &tmp16, 2);
+
+ memcpy(&uuid.data[8], data4, 8);
+
+ return uuid;
+}
+
+/*!
+ Returns true if \a other is equal to this Bluetooth UUID; otherwise returns false.
+*/
+bool QBluetoothUuid::operator==(const QBluetoothUuid &other) const
+{
+ return QUuid::operator==(other);
+}