File indexing completed on 2025-02-02 14:20:53
0001 /* 0002 SPDX-FileCopyrightText: 2014 Lukas Tinkl <ltinkl@redhat.com> 0003 SPDX-FileCopyrightText: 2015 Jan Grulich <jgrulich@redhat.com> 0004 0005 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0006 */ 0007 0008 #include "modemoma.h" 0009 #include "mmdebug_p.h" 0010 #include "modemoma_p.h" 0011 #ifdef MMQT_STATIC 0012 #include "dbus/fakedbus.h" 0013 #else 0014 #include "dbus/dbus.h" 0015 #endif 0016 0017 ModemManager::ModemOmaPrivate::ModemOmaPrivate(const QString &path, ModemOma *q) 0018 : InterfacePrivate(path, q) 0019 #ifdef MMQT_STATIC 0020 , omaIface(QLatin1String(MMQT_DBUS_SERVICE), path, QDBusConnection::sessionBus()) 0021 #else 0022 , omaIface(QLatin1String(MMQT_DBUS_SERVICE), path, QDBusConnection::systemBus()) 0023 #endif 0024 , q_ptr(q) 0025 { 0026 if (omaIface.isValid()) { 0027 features = (ModemOma::Features)omaIface.features(); 0028 pendingNetworkInitiatedSessions = omaIface.pendingNetworkInitiatedSessions(); 0029 sessionType = (MMOmaSessionType)omaIface.sessionType(); 0030 sessionState = (MMOmaSessionState)omaIface.sessionState(); 0031 } 0032 } 0033 0034 ModemManager::ModemOma::ModemOma(const QString &path, QObject *parent) 0035 : Interface(*new ModemOmaPrivate(path, this), parent) 0036 { 0037 Q_D(ModemOma); 0038 0039 qRegisterMetaType<QFlags<MMOmaFeature>>(); 0040 qRegisterMetaType<MMOmaSessionType>(); 0041 qRegisterMetaType<MMOmaSessionState>(); 0042 qRegisterMetaType<MMOmaSessionStateFailedReason>(); 0043 0044 connect(&d->omaIface, &OrgFreedesktopModemManager1ModemOmaInterface::SessionStateChanged, d, &ModemOmaPrivate::onSessionStateChanged); 0045 #ifdef MMQT_STATIC 0046 QDBusConnection::sessionBus().connect(QLatin1String(MMQT_DBUS_SERVICE), 0047 d->uni, 0048 QLatin1String(DBUS_INTERFACE_PROPS), 0049 QStringLiteral("PropertiesChanged"), 0050 d, 0051 SLOT(onPropertiesChanged(QString, QVariantMap, QStringList))); 0052 #else 0053 QDBusConnection::systemBus().connect(QLatin1String(MMQT_DBUS_SERVICE), 0054 d->uni, 0055 QLatin1String(DBUS_INTERFACE_PROPS), 0056 QStringLiteral("PropertiesChanged"), 0057 d, 0058 SLOT(onPropertiesChanged(QString, QVariantMap, QStringList))); 0059 #endif 0060 } 0061 0062 ModemManager::ModemOma::~ModemOma() 0063 { 0064 } 0065 0066 ModemManager::ModemOma::Features ModemManager::ModemOma::features() const 0067 { 0068 Q_D(const ModemOma); 0069 0070 return d->features; 0071 } 0072 0073 ModemManager::OmaSessionTypes ModemManager::ModemOma::pendingNetworkInitiatedSessions() const 0074 { 0075 Q_D(const ModemOma); 0076 return d->pendingNetworkInitiatedSessions; 0077 } 0078 0079 MMOmaSessionType ModemManager::ModemOma::sessionType() const 0080 { 0081 Q_D(const ModemOma); 0082 return d->sessionType; 0083 } 0084 0085 MMOmaSessionState ModemManager::ModemOma::sessionState() const 0086 { 0087 Q_D(const ModemOma); 0088 return d->sessionState; 0089 } 0090 0091 QDBusPendingReply<void> ModemManager::ModemOma::setup(Features features) 0092 { 0093 Q_D(ModemOma); 0094 return d->omaIface.Setup((uint)features); 0095 } 0096 0097 QDBusPendingReply<void> ModemManager::ModemOma::startClientInitiatedSession(MMOmaSessionType sessionType) 0098 { 0099 Q_D(ModemOma); 0100 return d->omaIface.StartClientInitiatedSession((uint)sessionType); 0101 } 0102 0103 QDBusPendingReply<void> ModemManager::ModemOma::acceptNetworkInitiatedSession(uint sessionId, bool accept) 0104 { 0105 Q_D(ModemOma); 0106 return d->omaIface.AcceptNetworkInitiatedSession(sessionId, accept); 0107 } 0108 0109 QDBusPendingReply<void> ModemManager::ModemOma::cancelSession() 0110 { 0111 Q_D(ModemOma); 0112 return d->omaIface.CancelSession(); 0113 } 0114 0115 void ModemManager::ModemOma::setTimeout(int timeout) 0116 { 0117 Q_D(ModemOma); 0118 d->omaIface.setTimeout(timeout); 0119 } 0120 0121 int ModemManager::ModemOma::timeout() const 0122 { 0123 Q_D(const ModemOma); 0124 return d->omaIface.timeout(); 0125 } 0126 0127 void ModemManager::ModemOmaPrivate::onSessionStateChanged(int oldState, int newState, uint failedReason) 0128 { 0129 Q_Q(ModemOma); 0130 sessionState = (MMOmaSessionState)newState; 0131 Q_EMIT q->sessionStateChanged((MMOmaSessionState)oldState, (MMOmaSessionState)newState, (MMOmaSessionStateFailedReason)failedReason); 0132 } 0133 void ModemManager::ModemOmaPrivate::onPropertiesChanged(const QString &interface, const QVariantMap &properties, const QStringList &invalidatedProps) 0134 { 0135 Q_Q(ModemOma); 0136 Q_UNUSED(invalidatedProps); 0137 qCDebug(MMQT) << interface << properties.keys(); 0138 0139 if (interface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_OMA)) { 0140 QVariantMap::const_iterator it = properties.constFind(QLatin1String(MM_MODEM_OMA_PROPERTY_FEATURES)); 0141 if (it != properties.constEnd()) { 0142 features = (ModemOma::Features)it->toUInt(); 0143 Q_EMIT q->featuresChanged(features); 0144 } 0145 it = properties.constFind(QLatin1String(MM_MODEM_OMA_PROPERTY_PENDINGNETWORKINITIATEDSESSIONS)); 0146 if (it != properties.constEnd()) { 0147 pendingNetworkInitiatedSessions = qdbus_cast<OmaSessionTypes>(*it); 0148 Q_EMIT q->pendingNetworkInitiatedSessionsChanged(pendingNetworkInitiatedSessions); 0149 } 0150 it = properties.constFind(QLatin1String(MM_MODEM_OMA_PROPERTY_SESSIONTYPE)); 0151 if (it != properties.constEnd()) { 0152 sessionType = (MMOmaSessionType)it->toUInt(); 0153 Q_EMIT q->sessionTypeChanged(sessionType); 0154 } 0155 it = properties.constFind(QLatin1String(MM_MODEM_OMA_PROPERTY_SESSIONSTATE)); 0156 if (it != properties.constEnd()) { 0157 // Should be handled by sessionStateChanged() signal 0158 } 0159 } 0160 } 0161 0162 #include "moc_modemoma.cpp"