From 5954d1b64534d818ee1f918ed240299f04eb7d7c Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Fri, 7 Jan 2022 23:32:08 +0100 Subject: [PATCH] Some fixes --- owlet/integrationpluginowlet.cpp | 19 ++++++++++++++++++- owlet/owletclient.cpp | 5 +++++ owlet/owletclient.h | 2 ++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/owlet/integrationpluginowlet.cpp b/owlet/integrationpluginowlet.cpp index 78bc2a37..d9639cbc 100644 --- a/owlet/integrationpluginowlet.cpp +++ b/owlet/integrationpluginowlet.cpp @@ -671,6 +671,10 @@ void IntegrationPluginOwlet::executeAction(ThingActionInfo *info) { if (info->thing()->thingClassId() == digitalOutputThingClassId) { OwletClient *client = m_clients.value(info->thing()); + if (!client->isConnected()) { + info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("Owlet is not connected.")); + return; + } QVariantMap params; params.insert("id", info->thing()->paramValue(digitalOutputThingPinParamTypeId).toInt()); params.insert("power", info->action().paramValue(digitalOutputPowerActionPowerParamTypeId).toBool()); @@ -689,12 +693,19 @@ void IntegrationPluginOwlet::executeAction(ThingActionInfo *info) info->finish(Thing::ThingErrorHardwareFailure); } }); - + connect(client, &OwletClient::disconnected, info, [=](){ + qCDebug(dcOwlet()) << "Owlet disconnected during pending action"; + info->finish(Thing::ThingErrorHardwareFailure); + }); return; } if (info->thing()->thingClassId() == ws2812ThingClassId) { OwletClient *client = m_clients.value(info->thing()); + if (!client->isConnected()) { + info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("Owlet is not connected.")); + return; + } QVariantMap params; params.insert("id", info->thing()->paramValue(ws2812ThingPinParamTypeId).toUInt()); @@ -721,11 +732,17 @@ void IntegrationPluginOwlet::executeAction(ThingActionInfo *info) qCDebug(dcOwlet()) << "reply from owlet:" << params; QString error = params.value("error").toString(); if (error == "GPIOErrorNoError") { + info->thing()->setStateValue(info->action().actionTypeId(), info->action().paramValue(info->action().actionTypeId())); info->finish(Thing::ThingErrorNoError); } else { info->finish(Thing::ThingErrorHardwareFailure); } }); + connect(client, &OwletClient::disconnected, info, [=](){ + qCDebug(dcOwlet()) << "Owlet disconnected during pending action"; + info->finish(Thing::ThingErrorHardwareFailure); + }); + return; } diff --git a/owlet/owletclient.cpp b/owlet/owletclient.cpp index 19e10e54..266571d3 100644 --- a/owlet/owletclient.cpp +++ b/owlet/owletclient.cpp @@ -22,6 +22,11 @@ OwletClient::OwletClient(OwletTransport *transport, QObject *parent) : }); } +bool OwletClient::isConnected() const +{ + return m_transport->connected(); +} + OwletTransport *OwletClient::transport() const { return m_transport; diff --git a/owlet/owletclient.h b/owlet/owletclient.h index 4f9b6e18..9e7012a2 100644 --- a/owlet/owletclient.h +++ b/owlet/owletclient.h @@ -13,6 +13,8 @@ class OwletClient : public QObject public: explicit OwletClient(OwletTransport *transport, QObject *parent = nullptr); + bool isConnected() const; + OwletTransport *transport() const; int sendCommand(const QString &method, const QVariantMap ¶ms = QVariantMap());