2 * This file is part of ofono-qt
4 * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
6 * Contact: Alexander Kanavin <alexander.kanavin@nokia.com>
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public License
10 * version 2.1 as published by the Free Software Foundation.
12 * This library is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
24 #include <QtDBus/QtDBus>
25 #include <QtCore/QObject>
26 #include <QtCore/QDebug>
28 #include "ofonointerface.h"
29 #include "ofonovoicecall.h"
31 #define VOICECALL_TIMEOUT 30000
33 OfonoVoiceCall::OfonoVoiceCall(const QString& callId, QObject *parent)
36 m_if = new OfonoInterface(callId, "org.ofono.VoiceCall", OfonoGetAllOnStartup, this);
38 connect(m_if, SIGNAL(propertyChanged(const QString&, const QVariant&)),
39 this, SLOT(propertyChanged(const QString&, const QVariant&)));
41 QDBusConnection::systemBus().connect("org.ofono",path(),m_if->ifname(),
42 "DisconnectReason", this,
43 SIGNAL(disconnectReason(const QString&)));
47 OfonoVoiceCall::OfonoVoiceCall(const OfonoVoiceCall& call)
48 : QObject(call.parent())
50 m_if = new OfonoInterface(call.path(), "org.ofono.VoiceCall", OfonoGetAllOnStartup, this);
52 connect(m_if, SIGNAL(propertyChanged(const QString&, const QVariant&)),
53 this, SLOT(propertyChanged(const QString&, const QVariant&)));
55 QDBusConnection::systemBus().connect("org.ofono",path(),m_if->ifname(),
56 "DisconnectReason", this,
57 SIGNAL(disconnectReason(const QString&)));
60 bool OfonoVoiceCall::operator==(const OfonoVoiceCall &call)
62 return path() == call.path();
65 OfonoVoiceCall::~OfonoVoiceCall()
69 void OfonoVoiceCall::answer()
73 request = QDBusMessage::createMethodCall("org.ofono",
74 path(), m_if->ifname(),
77 QDBusConnection::systemBus().callWithCallback(request, this,
79 SLOT(answerErr(const QDBusError&)),
83 void OfonoVoiceCall::hangup()
87 request = QDBusMessage::createMethodCall("org.ofono",
88 path(), m_if->ifname(),
91 QDBusConnection::systemBus().callWithCallback(request, this,
93 SLOT(hangupErr(const QDBusError&)),
97 void OfonoVoiceCall::deflect(const QString &number)
101 request = QDBusMessage::createMethodCall("org.ofono",
102 path(), m_if->ifname(),
105 arg.append(QVariant(number));
106 request.setArguments(arg);
108 QDBusConnection::systemBus().callWithCallback(request, this,
110 SLOT(deflectErr(const QDBusError&)),
114 void OfonoVoiceCall::answerResp()
116 emit answerComplete(TRUE);
119 void OfonoVoiceCall::answerErr(const QDBusError &error)
121 qDebug() << "request failed" << error;
122 m_if->setError(error.name(), error.message());
123 emit answerComplete(FALSE);
126 void OfonoVoiceCall::hangupResp()
128 emit hangupComplete(TRUE);
131 void OfonoVoiceCall::hangupErr(const QDBusError &error)
133 qDebug() << "request failed" << error;
134 m_if->setError(error.name(), error.message());
135 emit hangupComplete(FALSE);
138 void OfonoVoiceCall::deflectResp()
140 emit deflectComplete(TRUE);
143 void OfonoVoiceCall::deflectErr(const QDBusError &error)
145 qDebug() << "request failed" << error;
146 m_if->setError(error.name(), error.message());
147 emit deflectComplete(FALSE);
150 QString OfonoVoiceCall::incomingLine() const
152 return m_if->properties()["IncomingLine"].value<QString>();
155 QString OfonoVoiceCall::lineIdentification() const
157 return m_if->properties()["LineIdentification"].value<QString>();
160 QString OfonoVoiceCall::name() const
162 return m_if->properties()["Name"].value<QString>();
165 QString OfonoVoiceCall::state() const
167 return m_if->properties()["State"].value<QString>();
170 QString OfonoVoiceCall::startTime() const
172 return m_if->properties()["StartTime"].value<QString>();
175 QString OfonoVoiceCall::information() const
177 return m_if->properties()["Information"].value<QString>();
180 bool OfonoVoiceCall::multiparty() const
182 return m_if->properties()["Multiparty"].value<bool>();
185 bool OfonoVoiceCall::emergency() const
187 return m_if->properties()["Emergency"].value<bool>();
190 void OfonoVoiceCall::propertyChanged(const QString &property, const QVariant &value)
192 if (property == "LineIdentification") {
193 emit lineIdentificationChanged(value.value<QString>());
194 } else if (property == "Name") {
195 emit nameChanged(value.value<QString>());
196 } else if (property == "State") {
197 emit stateChanged(value.value<QString>());
198 } else if (property == "Information") {
199 emit informationChanged(value.value<QString>());
200 } else if (property == "IncomingLine") {
201 emit incomingLineChanged(value.value<QString>());
202 } else if (property == "Multiparty") {
203 emit multipartyChanged(value.value<bool>());
204 } else if (property == "Emergency") {
205 emit emergencyChanged(value.value<bool>());
206 } else if (property == "StartTime") {
207 emit startTimeChanged(value.value<QString>());
208 } else if (property == "Icon") {
209 emit iconChanged(value.value<quint8>());
213 QString OfonoVoiceCall::path() const
218 QString OfonoVoiceCall::errorName() const
220 return m_if->errorName();
223 QString OfonoVoiceCall::errorMessage() const
225 return m_if->errorMessage();