From 7d3ee483c5fc348f43d93c0be0909e769dc51606 Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Wed, 8 Aug 2018 12:22:11 +0200 Subject: winrt: Support additional data types for service registration Change-Id: I7ec6b6ef65a8754b22d1b97e508d7231b2a410c0 Reviewed-by: Alex Blasche --- src/bluetooth/qbluetoothserviceinfo_winrt.cpp | 73 ++++++++++++++++++++------- 1 file changed, 55 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/bluetooth/qbluetoothserviceinfo_winrt.cpp b/src/bluetooth/qbluetoothserviceinfo_winrt.cpp index 0041cd81..d54ac52d 100644 --- a/src/bluetooth/qbluetoothserviceinfo_winrt.cpp +++ b/src/bluetooth/qbluetoothserviceinfo_winrt.cpp @@ -68,13 +68,22 @@ QT_BEGIN_NAMESPACE Q_DECLARE_LOGGING_CATEGORY(QT_BT_WINRT) -#define TYPE_UINT8 8 -#define TYPE_UINT16 9 -#define TYPE_UINT32 10 -#define TYPE_SHORT_UUID 25 -#define TYPE_LONG_UUID 28 -#define TYPE_STRING 37 -#define TYPE_SEQUENCE 53 +#define TYPE_VOID 0 +#define TYPE_UINT8 8 +#define TYPE_UINT16 9 +#define TYPE_UINT32 10 +#define TYPE_UINT64 11 +//#define TYPE_UINT128 12 +#define TYPE_INT8 16 +#define TYPE_INT16 17 +#define TYPE_INT32 18 +#define TYPE_INT64 19 +//#define TYPE_INT128 20 +#define TYPE_SHORT_UUID 25 +#define TYPE_LONG_UUID 28 +#define TYPE_STRING 37 +#define TYPE_BOOLEAN 40 +#define TYPE_SEQUENCE 53 extern QHash __fakeServerPorts; @@ -150,8 +159,10 @@ static ComPtr bufferFromAttribute(const QVariant &attribute) switch (int(attribute.type())) { case QMetaType::Void: - qCWarning(QT_BT_WINRT) << "Don't know how to register QMetaType::Void"; - return nullptr; + qCDebug(QT_BT_WINRT) << Q_FUNC_INFO << "Registering attribute of type QMetaType::Void:"; + hr = writer->WriteByte(TYPE_VOID); + Q_ASSERT_SUCCEEDED(hr); + break; case QMetaType::UChar: qCDebug(QT_BT_WINRT) << Q_FUNC_INFO << "Registering attribute of type QMetaType::UChar:" << attribute.value(); hr = writer->WriteByte(TYPE_UINT8); @@ -170,20 +181,43 @@ static ComPtr bufferFromAttribute(const QVariant &attribute) qCDebug(QT_BT_WINRT) << Q_FUNC_INFO << "Registering attribute of type QMetaType::UInt:" << attribute.value(); hr = writer->WriteByte(TYPE_UINT32); Q_ASSERT_SUCCEEDED(hr); - hr = writer->WriteByte(attribute.value()); + hr = writer->WriteUInt32(attribute.value()); + Q_ASSERT_SUCCEEDED(hr); + break; + case QMetaType::ULongLong: + qCDebug(QT_BT_WINRT) << Q_FUNC_INFO << "Registering attribute of type QMetaType::ULongLong:" << attribute.value(); + hr = writer->WriteByte(TYPE_UINT64); + Q_ASSERT_SUCCEEDED(hr); + hr = writer->WriteUInt64(attribute.value()); Q_ASSERT_SUCCEEDED(hr); break; case QMetaType::Char: - qCWarning(QT_BT_WINRT) << "Don't know how to register QMetaType::Char"; - return nullptr; + qCDebug(QT_BT_WINRT) << Q_FUNC_INFO << "Registering attribute of type QMetaType::Char:" << attribute.value(); + hr = writer->WriteByte(TYPE_INT8); + Q_ASSERT_SUCCEEDED(hr); + hr = writer->WriteByte(attribute.value()); + Q_ASSERT_SUCCEEDED(hr); break; case QMetaType::Short: - qCWarning(QT_BT_WINRT) << "Don't know how to register QMetaType::Short"; - return nullptr; + qCDebug(QT_BT_WINRT) << Q_FUNC_INFO << "Registering attribute of type QMetaType::Short:" << attribute.value(); + hr = writer->WriteByte(TYPE_INT16); + Q_ASSERT_SUCCEEDED(hr); + hr = writer->WriteInt16(attribute.value()); + Q_ASSERT_SUCCEEDED(hr); break; case QMetaType::Int: - qCWarning(QT_BT_WINRT) << "Don't know how to register QMetaType::Int"; - return nullptr; + qCDebug(QT_BT_WINRT) << Q_FUNC_INFO << "Registering attribute of type QMetaType::Int:" << attribute.value(); + hr = writer->WriteByte(TYPE_INT32); + Q_ASSERT_SUCCEEDED(hr); + hr = writer->WriteInt32(attribute.value()); + Q_ASSERT_SUCCEEDED(hr); + break; + case QMetaType::LongLong: + qCDebug(QT_BT_WINRT) << Q_FUNC_INFO << "Registering attribute of type QMetaType::LongLong:" << attribute.value(); + hr = writer->WriteByte(TYPE_INT64); + Q_ASSERT_SUCCEEDED(hr); + hr = writer->WriteInt64(attribute.value()); + Q_ASSERT_SUCCEEDED(hr); break; case QMetaType::QString: { qCDebug(QT_BT_WINRT) << Q_FUNC_INFO << "Registering attribute of type QMetaType::QString:" << attribute.value(); @@ -203,8 +237,11 @@ static ComPtr bufferFromAttribute(const QVariant &attribute) break; } case QMetaType::Bool: - qCWarning(QT_BT_WINRT) << "Don't know how to register QMetaType::Bool"; - return nullptr; + qCDebug(QT_BT_WINRT) << Q_FUNC_INFO << "Registering attribute of type QMetaType::Bool:" << attribute.value(); + hr = writer->WriteByte(TYPE_BOOLEAN); + Q_ASSERT_SUCCEEDED(hr); + hr = writer->WriteByte(attribute.value()); + Q_ASSERT_SUCCEEDED(hr); break; case QMetaType::QUrl: qCWarning(QT_BT_WINRT) << "Don't know how to register QMetaType::QUrl"; -- cgit v1.2.3