File indexing completed on 2025-02-16 13:12:30
0001 /* 0002 SPDX-FileCopyrightText: 2013, 2014 Lukas Tinkl <ltinkl@redhat.com> 0003 SPDX-FileCopyrightText: 2013-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 "modemdevice.h" 0009 #include "modemdevice_p.h" 0010 0011 #ifdef MMQT_STATIC 0012 #include "dbus/fakedbus.h" 0013 #else 0014 #include "dbus/dbus.h" 0015 #endif 0016 #include "manager.h" 0017 #include "mmdebug_p.h" 0018 #include "modem3gpp.h" 0019 #include "modem3gppussd.h" 0020 #include "modemcdma.h" 0021 #include "modemlocation.h" 0022 #if MM_CHECK_VERSION(1, 2, 0) 0023 #include "modemoma.h" 0024 #include "modemsignal.h" 0025 #endif 0026 #if MM_CHECK_VERSION(1, 6, 0) 0027 #include "modemvoice.h" 0028 #endif 0029 #include "modemfirmware.h" 0030 #include "modemsimple.h" 0031 #include "modemtime.h" 0032 0033 #include <QDomDocument> 0034 0035 ModemManager::ModemDevicePrivate::ModemDevicePrivate(const QString &path, ModemManager::ModemDevice *q) 0036 : uni(path) 0037 , q_ptr(q) 0038 { 0039 init(); 0040 } 0041 0042 ModemManager::ModemDevicePrivate::~ModemDevicePrivate() 0043 { 0044 } 0045 0046 void ModemManager::ModemDevicePrivate::init() 0047 { 0048 Q_Q(ModemManager::ModemDevice); 0049 #ifdef MMQT_STATIC 0050 bool success = QDBusConnection::sessionBus().connect(QLatin1String(MMQT_DBUS_SERVICE), 0051 QLatin1String(MMQT_DBUS_PATH), 0052 QLatin1String(DBUS_INTERFACE_MANAGER), 0053 QStringLiteral("InterfacesAdded"), 0054 this, 0055 SLOT(onInterfacesAdded(QDBusObjectPath, ModemManager::MMVariantMapMap))); 0056 Q_ASSERT(success); 0057 success = QDBusConnection::sessionBus().connect(QLatin1String(MMQT_DBUS_SERVICE), 0058 QLatin1String(MMQT_DBUS_PATH), 0059 QLatin1String(DBUS_INTERFACE_MANAGER), 0060 QStringLiteral("InterfacesRemoved"), 0061 this, 0062 SLOT(onInterfacesRemoved(QDBusObjectPath, QStringList))); 0063 Q_ASSERT(success); 0064 #else 0065 bool success = QDBusConnection::systemBus().connect(QLatin1String(MMQT_DBUS_SERVICE), 0066 QLatin1String(MMQT_DBUS_PATH), 0067 QLatin1String(DBUS_INTERFACE_MANAGER), 0068 QStringLiteral("InterfacesAdded"), 0069 this, 0070 SLOT(onInterfacesAdded(QDBusObjectPath, ModemManager::MMVariantMapMap))); 0071 Q_ASSERT(success); 0072 success = QDBusConnection::systemBus().connect(QLatin1String(MMQT_DBUS_SERVICE), 0073 QLatin1String(MMQT_DBUS_PATH), 0074 QLatin1String(DBUS_INTERFACE_MANAGER), 0075 QStringLiteral("InterfacesRemoved"), 0076 this, 0077 SLOT(onInterfacesRemoved(QDBusObjectPath, QStringList))); 0078 Q_ASSERT(success); 0079 #endif 0080 0081 initInterfaces(); 0082 } 0083 0084 void ModemManager::ModemDevicePrivate::initInterfaces() 0085 { 0086 interfaceList.clear(); 0087 0088 const QString xmlData = introspect(); 0089 if (xmlData.isEmpty()) { 0090 qCDebug(MMQT) << uni << "has no interfaces!"; 0091 return; 0092 } 0093 0094 QDomDocument dom; 0095 dom.setContent(xmlData); 0096 0097 QDomNodeList ifaceNodeList = dom.elementsByTagName(QStringLiteral("interface")); 0098 for (int i = 0; i < ifaceNodeList.count(); i++) { 0099 QDomElement ifaceElem = ifaceNodeList.item(i).toElement(); 0100 /* Accept only MM interfaces so that when the device is unplugged, 0101 * interfaceList goes empty and we can easily verify that the device is gone. */ 0102 if (!ifaceElem.isNull() && ifaceElem.attribute(QStringLiteral("name")).startsWith(QLatin1String(MMQT_DBUS_SERVICE))) { 0103 const QString name = ifaceElem.attribute(QStringLiteral("name")); 0104 if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM)) { 0105 interfaceList.insert(ModemManager::ModemDevice::ModemInterface, ModemManager::Modem::Ptr()); 0106 if (interfaceList.contains(ModemManager::ModemDevice::ModemInterface)) { 0107 ModemManager::Modem::Ptr modemInterface = interface(ModemManager::ModemDevice::ModemInterface).objectCast<ModemManager::Modem>(); 0108 if (!modemInterface->simPath().isEmpty()) { 0109 simCard = ModemManager::Sim::Ptr(new ModemManager::Sim(modemInterface->simPath()), &QObject::deleteLater); 0110 // q->simAdded(modemInterface->simPath()); 0111 0112 QObject::connect(modemInterface.data(), SIGNAL(simPathChanged(QString, QString)), this, SLOT(onSimPathChanged(QString, QString))); 0113 } 0114 } 0115 } else if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_SIMPLE)) { 0116 interfaceList.insert(ModemManager::ModemDevice::SimpleInterface, ModemManager::ModemSimple::Ptr()); 0117 } else if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MODEM3GPP)) { 0118 interfaceList.insert(ModemManager::ModemDevice::GsmInterface, ModemManager::Modem3gpp::Ptr()); 0119 } else if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MODEM3GPP_USSD)) { 0120 interfaceList.insert(ModemManager::ModemDevice::GsmUssdInterface, ModemManager::Modem3gppUssd::Ptr()); 0121 } else if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MODEMCDMA)) { 0122 interfaceList.insert(ModemManager::ModemDevice::CdmaInterface, ModemManager::ModemCdma::Ptr()); 0123 } else if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MESSAGING)) { 0124 interfaceList.insert(ModemManager::ModemDevice::MessagingInterface, ModemManager::ModemMessaging::Ptr()); 0125 } else if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_LOCATION)) { 0126 interfaceList.insert(ModemManager::ModemDevice::LocationInterface, ModemManager::ModemLocation::Ptr()); 0127 } else if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_TIME)) { 0128 interfaceList.insert(ModemManager::ModemDevice::TimeInterface, ModemManager::ModemTime::Ptr()); 0129 } 0130 #if MM_CHECK_VERSION(1, 2, 0) 0131 else if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_OMA)) { 0132 interfaceList.insert(ModemManager::ModemDevice::OmaInterface, ModemManager::ModemOma::Ptr()); 0133 } else if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_SIGNAL)) { 0134 interfaceList.insert(ModemManager::ModemDevice::SignalInterface, ModemManager::ModemSignal::Ptr()); 0135 } 0136 #endif 0137 else if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_FIRMWARE)) { 0138 interfaceList.insert(ModemManager::ModemDevice::FirmwareInterface, ModemManager::ModemFirmware::Ptr()); 0139 } 0140 #if MM_CHECK_VERSION(1, 6, 0) 0141 else if (name == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_VOICE)) { 0142 interfaceList.insert(ModemManager::ModemDevice::VoiceInterface, ModemManager::ModemVoice::Ptr()); 0143 } 0144 #endif 0145 } 0146 } 0147 0148 qCDebug(MMQT) << uni << "has interfaces:" << interfaceList.keys(); 0149 } 0150 0151 QString ModemManager::ModemDevicePrivate::introspect() const 0152 { 0153 QDBusMessage call = 0154 QDBusMessage::createMethodCall(QLatin1String(MMQT_DBUS_SERVICE), uni, QLatin1String(DBUS_INTERFACE_INTROSPECT), QLatin1String("Introspect")); 0155 #ifdef MMQT_STATIC 0156 QDBusPendingReply<QString> reply = QDBusConnection::sessionBus().call(call); 0157 #else 0158 QDBusPendingReply<QString> reply = QDBusConnection::systemBus().call(call); 0159 #endif 0160 0161 if (reply.isValid()) { 0162 return reply.value(); 0163 } else { 0164 return QString(); 0165 } 0166 } 0167 0168 ModemManager::ModemDevice::ModemDevice(const QString &path, QObject *parent) 0169 : QObject(parent) 0170 , d_ptr(new ModemDevicePrivate(path, this)) 0171 { 0172 } 0173 0174 ModemManager::ModemDevice::ModemDevice(ModemDevicePrivate &dd, QObject *parent) 0175 : QObject(parent) 0176 , d_ptr(&dd) 0177 { 0178 } 0179 0180 ModemManager::ModemDevice::~ModemDevice() 0181 { 0182 delete d_ptr; 0183 } 0184 0185 ModemManager::Interface::List ModemManager::ModemDevicePrivate::interfaces() 0186 { 0187 ModemManager::Interface::List list; 0188 0189 QMap<ModemManager::ModemDevice::InterfaceType, ModemManager::Interface::Ptr>::const_iterator i; 0190 for (i = interfaceList.constBegin(); i != interfaceList.constEnd(); ++i) { 0191 ModemManager::Interface::Ptr modemInterface = interface(i.key()); 0192 if (modemInterface) { 0193 list.append(modemInterface); 0194 } else { 0195 qCWarning(MMQT) << "warning: null network Interface for" << i.key(); 0196 } 0197 } 0198 0199 return list; 0200 } 0201 0202 ModemManager::Interface::Ptr ModemManager::ModemDevicePrivate::interface(ModemManager::ModemDevice::InterfaceType type) 0203 { 0204 ModemManager::Interface::Ptr modemInterface; 0205 0206 if (interfaceList.contains(type)) { 0207 if (interfaceList.value(type)) { 0208 modemInterface = interfaceList.value(type); 0209 } else { 0210 modemInterface = createInterface(type); 0211 interfaceList[type] = modemInterface; 0212 } 0213 } 0214 0215 return modemInterface; 0216 } 0217 0218 ModemManager::Interface::Ptr ModemManager::ModemDevicePrivate::createInterface(ModemManager::ModemDevice::InterfaceType type) 0219 { 0220 ModemManager::Interface::Ptr createdInterface; 0221 switch (type) { 0222 case ModemManager::ModemDevice::ModemInterface: 0223 createdInterface = ModemManager::Interface::Ptr(new ModemManager::Modem(uni), &QObject::deleteLater); 0224 break; 0225 case ModemManager::ModemDevice::SimpleInterface: 0226 createdInterface = ModemManager::Interface::Ptr(new ModemManager::ModemSimple(uni), &QObject::deleteLater); 0227 break; 0228 case ModemManager::ModemDevice::GsmInterface: 0229 createdInterface = ModemManager::Interface::Ptr(new ModemManager::Modem3gpp(uni), &QObject::deleteLater); 0230 break; 0231 case ModemManager::ModemDevice::GsmUssdInterface: 0232 createdInterface = ModemManager::Interface::Ptr(new ModemManager::Modem3gppUssd(uni), &QObject::deleteLater); 0233 break; 0234 case ModemManager::ModemDevice::CdmaInterface: 0235 createdInterface = ModemManager::Interface::Ptr(new ModemManager::ModemCdma(uni), &QObject::deleteLater); 0236 break; 0237 case ModemManager::ModemDevice::MessagingInterface: 0238 createdInterface = ModemManager::Interface::Ptr(new ModemManager::ModemMessaging(uni), &QObject::deleteLater); 0239 break; 0240 case ModemManager::ModemDevice::LocationInterface: 0241 createdInterface = ModemManager::Interface::Ptr(new ModemManager::ModemLocation(uni), &QObject::deleteLater); 0242 break; 0243 case ModemManager::ModemDevice::TimeInterface: 0244 createdInterface = ModemManager::Interface::Ptr(new ModemManager::ModemTime(uni), &QObject::deleteLater); 0245 break; 0246 #if MM_CHECK_VERSION(1, 2, 0) 0247 case ModemManager::ModemDevice::OmaInterface: 0248 createdInterface = ModemManager::Interface::Ptr(new ModemManager::ModemOma(uni), &QObject::deleteLater); 0249 break; 0250 case ModemManager::ModemDevice::SignalInterface: 0251 createdInterface = ModemManager::Interface::Ptr(new ModemManager::ModemSignal(uni), &QObject::deleteLater); 0252 break; 0253 #endif 0254 case ModemManager::ModemDevice::FirmwareInterface: 0255 createdInterface = ModemManager::Interface::Ptr(new ModemManager::ModemFirmware(uni), &QObject::deleteLater); 0256 break; 0257 #if MM_CHECK_VERSION(1, 6, 0) 0258 case ModemManager::ModemDevice::VoiceInterface: 0259 createdInterface = ModemManager::Interface::Ptr(new ModemManager::ModemVoice(uni), &QObject::deleteLater); 0260 break; 0261 #endif 0262 } 0263 return createdInterface; 0264 } 0265 0266 ModemManager::Bearer::Ptr ModemManager::ModemDevicePrivate::findBearer(const QString &uni) 0267 { 0268 ModemManager::Bearer::Ptr result; 0269 Q_FOREACH (const ModemManager::Bearer::Ptr &bearer, bearers()) { 0270 if (bearer->uni() == uni) { 0271 result = bearer; 0272 break; 0273 } 0274 } 0275 0276 return result; 0277 } 0278 0279 ModemManager::Bearer::List ModemManager::ModemDevicePrivate::bearers() 0280 { 0281 Q_Q(ModemManager::ModemDevice); 0282 0283 return q->modemInterface()->listBearers(); 0284 } 0285 0286 ModemManager::Sim::Ptr ModemManager::ModemDevicePrivate::sim() 0287 { 0288 return simCard; 0289 } 0290 0291 QString ModemManager::ModemDevice::uni() const 0292 { 0293 Q_D(const ModemDevice); 0294 return d->uni; 0295 } 0296 0297 bool ModemManager::ModemDevice::hasInterface(ModemManager::ModemDevice::InterfaceType type) const 0298 { 0299 Q_D(const ModemDevice); 0300 return d->interfaceList.contains(type); 0301 } 0302 0303 ModemManager::Interface::Ptr ModemManager::ModemDevice::interface(ModemManager::ModemDevice::InterfaceType type) const 0304 { 0305 Q_D(const ModemDevice); 0306 0307 return const_cast<ModemDevicePrivate *>(d)->interface(type); 0308 } 0309 0310 ModemManager::Interface::List ModemManager::ModemDevice::interfaces() const 0311 { 0312 Q_D(const ModemDevice); 0313 0314 return const_cast<ModemDevicePrivate *>(d)->interfaces(); 0315 } 0316 0317 ModemManager::ModemMessaging::Ptr ModemManager::ModemDevice::messagingInterface() 0318 { 0319 Q_D(ModemDevice); 0320 0321 return d->interface(ModemManager::ModemDevice::MessagingInterface).objectCast<ModemManager::ModemMessaging>(); 0322 } 0323 0324 ModemManager::Modem::Ptr ModemManager::ModemDevice::modemInterface() 0325 { 0326 Q_D(ModemDevice); 0327 0328 return d->interface(ModemManager::ModemDevice::ModemInterface).objectCast<ModemManager::Modem>(); 0329 } 0330 0331 ModemManager::Bearer::Ptr ModemManager::ModemDevice::findBearer(const QString &uni) 0332 { 0333 Q_D(ModemDevice); 0334 0335 return d->findBearer(uni); 0336 } 0337 0338 ModemManager::Bearer::List ModemManager::ModemDevice::bearers() const 0339 { 0340 Q_D(const ModemDevice); 0341 0342 return const_cast<ModemDevicePrivate *>(d)->bearers(); 0343 } 0344 0345 ModemManager::Sim::Ptr ModemManager::ModemDevice::sim() const 0346 { 0347 Q_D(const ModemDevice); 0348 0349 return const_cast<ModemDevicePrivate *>(d)->sim(); 0350 } 0351 0352 bool ModemManager::ModemDevice::isGsmModem() const 0353 { 0354 return hasInterface(ModemManager::ModemDevice::GsmInterface); 0355 } 0356 0357 bool ModemManager::ModemDevice::isCdmaModem() const 0358 { 0359 return hasInterface(ModemManager::ModemDevice::CdmaInterface); 0360 } 0361 0362 void ModemManager::ModemDevicePrivate::onInterfacesAdded(const QDBusObjectPath &object_path, const MMVariantMapMap &interfaces_and_properties) 0363 { 0364 Q_Q(ModemDevice); 0365 if (object_path.path() != uni) { 0366 return; 0367 } 0368 0369 Q_FOREACH (const QString &iface, interfaces_and_properties.keys()) { 0370 /* Don't store generic DBus interfaces */ 0371 if (iface.startsWith(QLatin1String(MMQT_DBUS_SERVICE))) { 0372 if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM)) { 0373 interfaceList.insert(ModemManager::ModemDevice::ModemInterface, ModemManager::Modem::Ptr()); 0374 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::ModemInterface); 0375 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_SIMPLE)) { 0376 interfaceList.insert(ModemManager::ModemDevice::SimpleInterface, ModemManager::ModemSimple::Ptr()); 0377 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::SimpleInterface); 0378 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MODEM3GPP)) { 0379 interfaceList.insert(ModemManager::ModemDevice::GsmInterface, ModemManager::Modem3gpp::Ptr()); 0380 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::GsmInterface); 0381 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MODEM3GPP_USSD)) { 0382 interfaceList.insert(ModemManager::ModemDevice::GsmUssdInterface, ModemManager::Modem3gppUssd::Ptr()); 0383 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::GsmUssdInterface); 0384 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MODEMCDMA)) { 0385 interfaceList.insert(ModemManager::ModemDevice::CdmaInterface, ModemManager::ModemCdma::Ptr()); 0386 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::CdmaInterface); 0387 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MESSAGING)) { 0388 interfaceList.insert(ModemManager::ModemDevice::MessagingInterface, ModemManager::ModemMessaging::Ptr()); 0389 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::MessagingInterface); 0390 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_LOCATION)) { 0391 interfaceList.insert(ModemManager::ModemDevice::LocationInterface, ModemManager::ModemLocation::Ptr()); 0392 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::LocationInterface); 0393 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_TIME)) { 0394 interfaceList.insert(ModemManager::ModemDevice::TimeInterface, ModemManager::ModemTime::Ptr()); 0395 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::TimeInterface); 0396 } 0397 #if MM_CHECK_VERSION(1, 2, 0) 0398 else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_OMA)) { 0399 interfaceList.insert(ModemManager::ModemDevice::OmaInterface, ModemManager::ModemOma::Ptr()); 0400 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::OmaInterface); 0401 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_SIGNAL)) { 0402 interfaceList.insert(ModemManager::ModemDevice::SignalInterface, ModemManager::ModemSignal::Ptr()); 0403 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::SignalInterface); 0404 } 0405 #endif 0406 else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_FIRMWARE)) { 0407 interfaceList.insert(ModemManager::ModemDevice::FirmwareInterface, ModemManager::ModemFirmware::Ptr()); 0408 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::FirmwareInterface); 0409 } 0410 #if MM_CHECK_VERSION(1, 6, 0) 0411 else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_VOICE)) { 0412 interfaceList.insert(ModemManager::ModemDevice::VoiceInterface, ModemManager::ModemVoice::Ptr()); 0413 Q_EMIT q->interfaceAdded(ModemManager::ModemDevice::VoiceInterface); 0414 } 0415 #endif 0416 } 0417 } 0418 } 0419 0420 void ModemManager::ModemDevicePrivate::onInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces) 0421 { 0422 Q_Q(ModemDevice); 0423 if (object_path.path() != uni) { 0424 return; 0425 } 0426 0427 if (interfaces.contains(QLatin1String(MMQT_DBUS_INTERFACE_MODEM)) || interfaces.isEmpty()) { 0428 if (simCard) { 0429 Q_EMIT q->simRemoved(simCard->uni()); 0430 simCard = ModemManager::Sim::Ptr(); 0431 } 0432 } 0433 0434 Q_FOREACH (const QString &iface, interfaces) { 0435 if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM)) { 0436 interfaceList.remove(ModemManager::ModemDevice::ModemInterface); 0437 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::ModemInterface); 0438 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_SIMPLE)) { 0439 interfaceList.remove(ModemManager::ModemDevice::SimpleInterface); 0440 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::SimpleInterface); 0441 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MODEM3GPP)) { 0442 interfaceList.remove(ModemManager::ModemDevice::GsmInterface); 0443 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::GsmInterface); 0444 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MODEM3GPP_USSD)) { 0445 interfaceList.remove(ModemManager::ModemDevice::GsmUssdInterface); 0446 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::GsmUssdInterface); 0447 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MODEMCDMA)) { 0448 interfaceList.remove(ModemManager::ModemDevice::CdmaInterface); 0449 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::CdmaInterface); 0450 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_MESSAGING)) { 0451 interfaceList.remove(ModemManager::ModemDevice::MessagingInterface); 0452 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::MessagingInterface); 0453 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_LOCATION)) { 0454 interfaceList.remove(ModemManager::ModemDevice::LocationInterface); 0455 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::LocationInterface); 0456 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_TIME)) { 0457 interfaceList.remove(ModemManager::ModemDevice::TimeInterface); 0458 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::TimeInterface); 0459 } 0460 #if MM_CHECK_VERSION(1, 2, 0) 0461 else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_OMA)) { 0462 interfaceList.remove(ModemManager::ModemDevice::OmaInterface); 0463 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::OmaInterface); 0464 } else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_SIGNAL)) { 0465 interfaceList.remove(ModemManager::ModemDevice::SignalInterface); 0466 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::SignalInterface); 0467 } 0468 #endif 0469 else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_FIRMWARE)) { 0470 interfaceList.remove(ModemManager::ModemDevice::FirmwareInterface); 0471 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::FirmwareInterface); 0472 } 0473 #if MM_CHECK_VERSION(1, 6, 0) 0474 else if (iface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_VOICE)) { 0475 interfaceList.remove(ModemManager::ModemDevice::VoiceInterface); 0476 Q_EMIT q->interfaceRemoved(ModemManager::ModemDevice::VoiceInterface); 0477 } 0478 #endif 0479 } 0480 } 0481 0482 void ModemManager::ModemDevicePrivate::onSimPathChanged(const QString &oldPath, const QString &newPath) 0483 { 0484 Q_Q(ModemDevice); 0485 0486 if (!oldPath.isEmpty() && simCard->uni() == oldPath) { 0487 Q_EMIT q->simRemoved(oldPath); 0488 simCard = ModemManager::Sim::Ptr(); 0489 } 0490 0491 if (!newPath.isEmpty()) { 0492 simCard = ModemManager::Sim::Ptr(new ModemManager::Sim(newPath), &QObject::deleteLater); 0493 Q_EMIT q->simAdded(newPath); 0494 } 0495 } 0496 0497 #include "moc_modemdevice.cpp" 0498 #include "moc_modemdevice_p.cpp"