diff options
author | Oliver Wolff <oliver.wolff@qt.io> | 2019-04-01 10:00:52 +0200 |
---|---|---|
committer | Oliver Wolff <oliver.wolff@qt.io> | 2019-04-15 12:24:13 +0000 |
commit | 1bf25e130d4d6ae859c4f2aabe2a752532aee5e5 (patch) | |
tree | 80a0459ee9fc96bc620377c06da1ac626f62158a | |
parent | ae7bcf5f5c3f3a227ddfacbf1178f3e791199455 (diff) |
winrt: Avoid asserts in helper functions
Change-Id: I1759d7507d778ee60c6727621a3f58a7c7509718
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
-rw-r--r-- | src/bluetooth/qlowenergycontroller_winrt_new.cpp | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/src/bluetooth/qlowenergycontroller_winrt_new.cpp b/src/bluetooth/qlowenergycontroller_winrt_new.cpp index 5a33e51b..5501c4f3 100644 --- a/src/bluetooth/qlowenergycontroller_winrt_new.cpp +++ b/src/bluetooth/qlowenergycontroller_winrt_new.cpp @@ -121,15 +121,28 @@ QLowEnergyControllerPrivate *createWinRTLowEnergyController() static QByteArray byteArrayFromBuffer(const ComPtr<IBuffer> &buffer, bool isWCharString = false) { + if (!buffer) { + qCWarning(QT_BT_WINRT) << "nullptr passed to byteArrayFromBuffer"; + return QByteArray(); + } ComPtr<Windows::Storage::Streams::IBufferByteAccess> byteAccess; HRESULT hr = buffer.As(&byteAccess); - Q_ASSERT_SUCCEEDED(hr); + if (FAILED(hr)) { + qCWarning(QT_BT_WINRT) << "Could not cast Buffer to ByteAccess"; + return QByteArray(); + } char *data; hr = byteAccess->Buffer(reinterpret_cast<byte **>(&data)); - Q_ASSERT_SUCCEEDED(hr); + if (FAILED(hr)) { + qCWarning(QT_BT_WINRT) << "Could not obtain buffer data"; + return QByteArray(); + } UINT32 size; hr = buffer->get_Length(&size); - Q_ASSERT_SUCCEEDED(hr); + if (FAILED(hr)) { + qCWarning(QT_BT_WINRT) << "Could not obtain buffer length"; + return QByteArray(); + } if (isWCharString) { QString valueString = QString::fromUtf16(reinterpret_cast<ushort *>(data)).left(size / 2); return valueString.toUtf8(); @@ -143,7 +156,10 @@ static QByteArray byteArrayFromGattResult(const ComPtr<IGattReadResult> &gattRes ComPtr<ABI::Windows::Storage::Streams::IBuffer> buffer; HRESULT hr; hr = gattResult->get_Value(&buffer); - Q_ASSERT_SUCCEEDED(hr); + if (FAILED(hr) || !buffer) { + qCWarning(QT_BT_WINRT) << "Could not obtain buffer from GattReadResult"; + return QByteArray(); + } return byteArrayFromBuffer(buffer, isWCharString); } @@ -690,7 +706,7 @@ void QLowEnergyControllerPrivateWinRTNew::registerForValueChanges(const QBluetoo GUID guuid; HRESULT hr; hr = entry.characteristic->get_Uuid(&guuid); - Q_ASSERT_SUCCEEDED(hr); + WARN_AND_CONTINUE_IF_FAILED(hr, "Could not obtain characteristic's Uuid") if (QBluetoothUuid(guuid) == charUuid) return; } @@ -710,14 +726,14 @@ void QLowEnergyControllerPrivateWinRTNew::registerForValueChanges(const QBluetoo HRESULT hr; quint16 handle; hr = characteristic->get_AttributeHandle(&handle); - Q_ASSERT_SUCCEEDED(hr); + RETURN_IF_FAILED("Could not obtain characteristic's handle", return S_OK) ComPtr<IBuffer> buffer; hr = args->get_CharacteristicValue(&buffer); - Q_ASSERT_SUCCEEDED(hr); + RETURN_IF_FAILED("Could not obtain characteristic's value", return S_OK) characteristicChanged(handle, byteArrayFromBuffer(buffer)); return S_OK; }).Get(), &token); - Q_ASSERT_SUCCEEDED(hr); + RETURN_IF_FAILED("Could not register characteristic for value changes", return) mValueChangedTokens.append(ValueChangedEntry(characteristic, token)); qCDebug(QT_BT_WINRT) << "Characteristic" << charUuid << "in service" << serviceUuid << "registered for value changes"; |