From e366c2c347ec08e98831923f65b569c7c20fd449 Mon Sep 17 00:00:00 2001 From: Raquel Medina Date: Mon, 27 Jul 2020 10:32:13 +0200 Subject: test reply status for telephony command This patch doesnt fix SPEC-3208 or SPEC-3515, but provides status checks on replies to sent commands, which helps diagnose telephony commands related issues. * query adapter status; * check for failures due to lack of bt adapter, in this case updates the connectivity state; * check for dial failures, in which case it triggers disconnect (hung-up) to the clients (phone app). Bug-AGL: SPEC-3208, SPEC-3515 Signed-off-by: Raquel Medina Change-Id: I1d2d3eefdc20273bad05127bca9cefa9623842dd --- telephony/telephony.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/telephony/telephony.cpp b/telephony/telephony.cpp index b31462c..850f2d6 100644 --- a/telephony/telephony.cpp +++ b/telephony/telephony.cpp @@ -18,6 +18,7 @@ #include "callmessage.h" #include "eventmessage.h" +#include "responsemessage.h" #include "messagefactory.h" #include "messageengine.h" #include "messageenginefactory.h" @@ -97,6 +98,15 @@ void Telephony::onConnected() m_mloop->sendMessage(std::move(msg)); } + std::unique_ptr msg = MessageFactory::getInstance().createOutboundMessage(MessageId::Call); + if (!msg) + return; + + CallMessage *tmsg = static_cast(msg.get()); + tmsg->createRequest("Bluetooth-Manager", "adapter_state", QJsonObject()); + m_mloop->sendMessage(std::move(msg)); + //make ui available, while waiting for connection status, + //most likely profile is already connected setConnected(true); } @@ -130,6 +140,24 @@ void Telephony::onMessageReceived(std::shared_ptr msg) m_clip = ""; } else if (ename == "online") { setOnlineState(data.find("connected").value().toBool()); + } + } + else if (msg->isReply()) { + std::shared_ptr rmsg = std::static_pointer_cast(msg); + QString verb = rmsg->requestVerb(); + QJsonObject data = rmsg->replyData(); + if (rmsg->replyStatus() == "failed") { + qDebug() << "phone failed bt verb:" << verb; + if ((verb == "adapter_state") && + (rmsg->replyInfo().contains("No adapter"))) + setConnected(false); + else if (verb == "dial") { + setCallState("disconnected"); + m_colp = ""; + m_clip = ""; } } + } else + qWarning() << "Received invalid inbound message"; + } -- cgit 1.2.3-korg