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