File indexing completed on 2024-04-28 07:48:53
0001 /* 0002 SPDX-FileCopyrightText: 2008, 2011 Will Stephenson <wstephenson@kde.org> 0003 SPDX-FileCopyrightText: 2010 Lamarque Souza <lamarque@kde.org> 0004 SPDX-FileCopyrightText: 2013 Daniel Nicoletti <dantti12@gmail.com> 0005 SPDX-FileCopyrightText: 2013 Lukas Tinkl <ltinkl@redhat.com> 0006 SPDX-FileCopyrightText: 2013-2015 Jan Grulich <jgrulich@redhat.com> 0007 0008 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0009 */ 0010 0011 #include "modem.h" 0012 #include "modem_p.h" 0013 0014 #ifdef MMQT_STATIC 0015 #include "dbus/fakedbus.h" 0016 #else 0017 #include "dbus/dbus.h" 0018 #endif 0019 #include "generictypes_p.h" 0020 #include "mmdebug_p.h" 0021 0022 #include <QTimer> 0023 0024 namespace ModemManager 0025 { 0026 class ModemManager::BearerProperties::Private 0027 { 0028 public: 0029 Private() 0030 { 0031 } 0032 QString apn; 0033 MMBearerIpFamily ipType; 0034 MMBearerAllowedAuth allowedAuth; 0035 QString user; 0036 QString password; 0037 bool allowRoaming; 0038 MMModemCdmaRmProtocol rmProtocol; 0039 QString number; 0040 }; 0041 0042 } 0043 0044 ModemManager::BearerProperties::BearerProperties() 0045 : d(new Private()) 0046 { 0047 } 0048 0049 ModemManager::BearerProperties::BearerProperties(const ModemManager::BearerProperties &other) 0050 : d(new Private) 0051 { 0052 *this = other; 0053 } 0054 0055 ModemManager::BearerProperties::~BearerProperties() 0056 { 0057 delete d; 0058 } 0059 0060 QString ModemManager::BearerProperties::apn() const 0061 { 0062 return d->apn; 0063 } 0064 0065 void ModemManager::BearerProperties::setApn(const QString &apn) 0066 { 0067 d->apn = apn; 0068 } 0069 0070 MMBearerIpFamily ModemManager::BearerProperties::ipType() const 0071 { 0072 return d->ipType; 0073 } 0074 0075 void ModemManager::BearerProperties::setIpType(MMBearerIpFamily ipType) 0076 { 0077 d->ipType = ipType; 0078 } 0079 0080 MMBearerAllowedAuth ModemManager::BearerProperties::allowedAuthentication() const 0081 { 0082 return d->allowedAuth; 0083 } 0084 0085 void ModemManager::BearerProperties::setAllowedAuthentication(MMBearerAllowedAuth allowedAuth) 0086 { 0087 d->allowedAuth = allowedAuth; 0088 } 0089 0090 QString ModemManager::BearerProperties::user() const 0091 { 0092 return d->user; 0093 } 0094 0095 void ModemManager::BearerProperties::setUser(const QString &user) 0096 { 0097 d->user = user; 0098 } 0099 0100 QString ModemManager::BearerProperties::password() const 0101 { 0102 return d->password; 0103 } 0104 0105 void ModemManager::BearerProperties::setPassword(const QString &password) 0106 { 0107 d->password = password; 0108 } 0109 0110 bool ModemManager::BearerProperties::allowRoaming() const 0111 { 0112 return d->allowRoaming; 0113 } 0114 0115 void ModemManager::BearerProperties::setAllowRoaming(bool allow) 0116 { 0117 d->allowRoaming = allow; 0118 } 0119 0120 MMModemCdmaRmProtocol ModemManager::BearerProperties::rmProtocol() const 0121 { 0122 return d->rmProtocol; 0123 } 0124 0125 void ModemManager::BearerProperties::setRmProtocol(MMModemCdmaRmProtocol rmProtocol) 0126 { 0127 d->rmProtocol = rmProtocol; 0128 } 0129 0130 QString ModemManager::BearerProperties::number() const 0131 { 0132 return d->number; 0133 } 0134 0135 void ModemManager::BearerProperties::setNumber(const QString &number) 0136 { 0137 d->number = number; 0138 } 0139 0140 ModemManager::BearerProperties &ModemManager::BearerProperties::operator=(const ModemManager::BearerProperties &other) 0141 { 0142 if (this == &other) { 0143 return *this; 0144 } 0145 0146 *d = *other.d; 0147 return *this; 0148 } 0149 0150 ModemManager::ModemPrivate::ModemPrivate(const QString &path, Modem *q) 0151 : InterfacePrivate(path, q) 0152 #ifdef MMQT_STATIC 0153 , modemIface(QLatin1String(MMQT_DBUS_SERVICE), path, QDBusConnection::sessionBus()) 0154 #else 0155 , modemIface(QLatin1String(MMQT_DBUS_SERVICE), path, QDBusConnection::systemBus()) 0156 #endif 0157 , q_ptr(q) 0158 { 0159 if (modemIface.isValid()) { 0160 simPath = modemIface.sim().path(); 0161 Q_FOREACH (uint cap, modemIface.supportedCapabilities()) { 0162 supportedCapabilities.append((MMModemCapability)cap); 0163 } 0164 currentCapabilities = (QFlags<MMModemCapability>)modemIface.currentCapabilities(); 0165 maxBearers = modemIface.maxBearers(); 0166 maxActiveBearers = modemIface.maxActiveBearers(); 0167 manufacturer = modemIface.manufacturer(); 0168 model = modemIface.model(); 0169 revision = modemIface.revision(); 0170 deviceIdentifier = modemIface.deviceIdentifier(); 0171 device = modemIface.device(); 0172 drivers = modemIface.drivers(); 0173 plugin = modemIface.plugin(); 0174 primaryPort = modemIface.primaryPort(); 0175 ports = modemIface.ports(); 0176 equipmentIdentifier = modemIface.equipmentIdentifier(); 0177 unlockRequired = (MMModemLock)modemIface.unlockRequired(); 0178 unlockRetries = modemIface.unlockRetries(); 0179 state = (MMModemState)modemIface.state(); 0180 stateFailedReason = (MMModemStateFailedReason)modemIface.stateFailedReason(); 0181 accessTechnologies = (ModemManager::Modem::AccessTechnologies)modemIface.accessTechnologies(); 0182 signalQuality = modemIface.signalQuality(); 0183 ownNumbers = modemIface.ownNumbers(); 0184 powerState = (MMModemPowerState)modemIface.powerState(); 0185 supportedModes = modemIface.supportedModes(); 0186 currentModes = modemIface.currentModes(); 0187 Q_FOREACH (uint band, modemIface.supportedBands()) { 0188 supportedBands.append((MMModemBand)band); 0189 } 0190 Q_FOREACH (uint band, modemIface.currentBands()) { 0191 currentBands.append((MMModemBand)band); 0192 } 0193 supportedIpFamilies = (ModemManager::Modem::IpBearerFamilies)modemIface.supportedIpFamilies(); 0194 0195 QTimer::singleShot(0, this, &ModemManager::ModemPrivate::initializeBearers); 0196 } 0197 } 0198 0199 void ModemManager::ModemPrivate::initializeBearers() 0200 { 0201 Q_Q(Modem); 0202 0203 #if MM_CHECK_VERSION(1, 2, 0) 0204 QList<QDBusObjectPath> bearersList = modemIface.bearers(); 0205 Q_FOREACH (const QDBusObjectPath &bearer, bearersList) { 0206 if (!bearers.contains(bearer.path())) { 0207 bearers.insert(bearer.path(), Bearer::Ptr()); 0208 Q_EMIT q->bearerAdded(bearer.path()); 0209 } 0210 } 0211 #else 0212 QDBusPendingReply<QList<QDBusObjectPath>> reply = modemIface.ListBearers(); 0213 reply.waitForFinished(); 0214 if (reply.isValid()) { 0215 Q_FOREACH (const QDBusObjectPath &bearer, reply.value()) { 0216 if (!bearers.contains(bearer.path())) { 0217 bearers.insert(bearer.path(), Bearer::Ptr()); 0218 Q_EMIT q->bearerAdded(bearer.path()); 0219 } 0220 } 0221 } 0222 #endif 0223 } 0224 0225 ModemManager::Modem::Modem(const QString &path, QObject *parent) 0226 : Interface(*new ModemPrivate(path, this), parent) 0227 { 0228 Q_D(Modem); 0229 0230 qRegisterMetaType<AccessTechnologies>(); 0231 qRegisterMetaType<Capabilities>(); 0232 qRegisterMetaType<ModemModes>(); 0233 qRegisterMetaType<IpBearerFamilies>(); 0234 qRegisterMetaType<MMModemLock>(); 0235 qRegisterMetaType<MMModemPowerState>(); 0236 qRegisterMetaType<MMModemState>(); 0237 qRegisterMetaType<MMModemStateChangeReason>(); 0238 qRegisterMetaType<MMModemStateFailedReason>(); 0239 0240 if (d->modemIface.isValid()) { 0241 #ifdef MMQT_STATIC 0242 QDBusConnection::sessionBus().connect(QLatin1String(MMQT_DBUS_SERVICE), 0243 d->uni, 0244 QLatin1String(DBUS_INTERFACE_PROPS), 0245 QLatin1String("PropertiesChanged"), 0246 d, 0247 SLOT(onPropertiesChanged(QString, QVariantMap, QStringList))); 0248 #else 0249 QDBusConnection::systemBus().connect(QLatin1String(MMQT_DBUS_SERVICE), 0250 d->uni, 0251 QLatin1String(DBUS_INTERFACE_PROPS), 0252 QLatin1String("PropertiesChanged"), 0253 d, 0254 SLOT(onPropertiesChanged(QString, QVariantMap, QStringList))); 0255 #endif 0256 } 0257 0258 connect(&d->modemIface, &OrgFreedesktopModemManager1ModemInterface::StateChanged, d, &ModemPrivate::onStateChanged); 0259 } 0260 0261 ModemManager::Modem::~Modem() 0262 { 0263 } 0264 0265 QString ModemManager::Modem::uni() const 0266 { 0267 Q_D(const Modem); 0268 return d->uni; 0269 } 0270 0271 bool ModemManager::Modem::isEnabled() const 0272 { 0273 Q_D(const Modem); 0274 return (MMModemPowerState)d->powerState == MM_MODEM_POWER_STATE_ON; 0275 } 0276 0277 bool ModemManager::Modem::isValid() const 0278 { 0279 Q_D(const Modem); 0280 return d->modemIface.isValid(); 0281 } 0282 0283 QDBusPendingReply<void> ModemManager::Modem::setEnabled(bool enable) 0284 { 0285 Q_D(Modem); 0286 return d->modemIface.Enable(enable); 0287 } 0288 0289 QDBusPendingReply<QDBusObjectPath> ModemManager::Modem::createBearer(const ModemManager::BearerProperties &bearerProperties) 0290 { 0291 Q_D(Modem); 0292 QVariantMap map; 0293 map.insert(QStringLiteral("apn"), bearerProperties.apn()); 0294 if (bearerProperties.ipType() != MM_BEARER_IP_FAMILY_NONE) { 0295 map.insert(QStringLiteral("ip-type"), (uint)bearerProperties.ipType()); 0296 } 0297 if (bearerProperties.allowedAuthentication() != MM_BEARER_ALLOWED_AUTH_UNKNOWN) { 0298 map.insert(QStringLiteral("allowed-auth"), (uint)bearerProperties.allowedAuthentication()); 0299 } 0300 if (!bearerProperties.user().isEmpty()) { 0301 map.insert(QStringLiteral("user"), bearerProperties.user()); 0302 } 0303 if (!bearerProperties.password().isEmpty()) { 0304 map.insert(QStringLiteral("password"), bearerProperties.password()); 0305 } 0306 map.insert(QStringLiteral("allow-roaming"), bearerProperties.allowRoaming()); 0307 if (bearerProperties.rmProtocol() != MM_MODEM_CDMA_RM_PROTOCOL_UNKNOWN) { 0308 map.insert(QStringLiteral("rm-protocol"), (uint)bearerProperties.rmProtocol()); 0309 } 0310 if (!bearerProperties.number().isEmpty()) { 0311 map.insert(QStringLiteral("number"), bearerProperties.number()); 0312 } 0313 return d->modemIface.CreateBearer(map); 0314 } 0315 0316 QDBusPendingReply<void> ModemManager::Modem::deleteBearer(const QString &bearer) 0317 { 0318 Q_D(Modem); 0319 return d->modemIface.DeleteBearer(QDBusObjectPath(bearer)); 0320 } 0321 0322 ModemManager::Bearer::List ModemManager::Modem::listBearers() const 0323 { 0324 Q_D(const Modem); 0325 0326 ModemManager::Bearer::List list; 0327 QMap<QString, Bearer::Ptr>::const_iterator i = d->bearers.constBegin(); 0328 while (i != d->bearers.constEnd()) { 0329 ModemManager::Bearer::Ptr bearer = const_cast<ModemPrivate *>(d)->findRegisteredBearer(i.key()); 0330 if (bearer) { 0331 list << bearer; 0332 } 0333 ++i; 0334 } 0335 return list; 0336 } 0337 0338 ModemManager::Bearer::Ptr ModemManager::Modem::findBearer(const QString &bearer) const 0339 { 0340 Q_D(const Modem); 0341 return const_cast<ModemPrivate *>(d)->findRegisteredBearer(bearer); 0342 } 0343 0344 QDBusPendingReply<void> ModemManager::Modem::reset() 0345 { 0346 Q_D(Modem); 0347 return d->modemIface.Reset(); 0348 } 0349 0350 QDBusPendingReply<void> ModemManager::Modem::factoryReset(const QString &code) 0351 { 0352 Q_D(Modem); 0353 return d->modemIface.FactoryReset(code); 0354 } 0355 0356 QDBusPendingReply<void> ModemManager::Modem::setPowerState(MMModemPowerState state) 0357 { 0358 Q_D(Modem); 0359 return d->modemIface.SetPowerState(state); 0360 } 0361 0362 QDBusPendingReply<void> ModemManager::Modem::setCurrentCapabilities(Capabilities caps) 0363 { 0364 Q_D(Modem); 0365 return d->modemIface.SetCurrentCapabilities((uint)caps); 0366 } 0367 0368 QDBusPendingReply<void> ModemManager::Modem::setCurrentModes(const CurrentModesType &mode) 0369 { 0370 Q_D(Modem); 0371 return d->modemIface.SetCurrentModes(mode); 0372 } 0373 0374 QDBusPendingReply<void> ModemManager::Modem::setCurrentBands(const QList<MMModemBand> &bands) 0375 { 0376 Q_D(Modem); 0377 QList<uint> tmp; 0378 Q_FOREACH (const MMModemBand band, bands) { 0379 tmp.append(band); 0380 } 0381 return d->modemIface.SetCurrentBands(tmp); 0382 } 0383 0384 QDBusPendingReply<QString> ModemManager::Modem::command(const QString &cmd, uint timeout) 0385 { 0386 Q_D(Modem); 0387 return d->modemIface.Command(cmd, timeout); 0388 } 0389 0390 QString ModemManager::Modem::simPath() const 0391 { 0392 Q_D(const Modem); 0393 return d->simPath; 0394 } 0395 0396 QList<MMModemCapability> ModemManager::Modem::supportedCapabilities() const 0397 { 0398 Q_D(const Modem); 0399 return d->supportedCapabilities; 0400 } 0401 0402 ModemManager::Modem::Capabilities ModemManager::Modem::currentCapabilities() const 0403 { 0404 Q_D(const Modem); 0405 return d->currentCapabilities; 0406 } 0407 0408 uint ModemManager::Modem::maxBearers() const 0409 { 0410 Q_D(const Modem); 0411 return d->maxBearers; 0412 } 0413 0414 uint ModemManager::Modem::maxActiveBearers() const 0415 { 0416 Q_D(const Modem); 0417 return d->maxActiveBearers; 0418 } 0419 0420 QString ModemManager::Modem::manufacturer() const 0421 { 0422 Q_D(const Modem); 0423 return d->manufacturer; 0424 } 0425 0426 QString ModemManager::Modem::model() const 0427 { 0428 Q_D(const Modem); 0429 return d->model; 0430 } 0431 0432 QString ModemManager::Modem::revision() const 0433 { 0434 Q_D(const Modem); 0435 return d->revision; 0436 } 0437 0438 QString ModemManager::Modem::deviceIdentifier() const 0439 { 0440 Q_D(const Modem); 0441 return d->deviceIdentifier; 0442 } 0443 0444 QString ModemManager::Modem::device() const 0445 { 0446 Q_D(const Modem); 0447 return d->device; 0448 } 0449 0450 QStringList ModemManager::Modem::drivers() const 0451 { 0452 Q_D(const Modem); 0453 return d->drivers; 0454 } 0455 0456 QString ModemManager::Modem::plugin() const 0457 { 0458 Q_D(const Modem); 0459 return d->plugin; 0460 } 0461 0462 QString ModemManager::Modem::primaryPort() const 0463 { 0464 Q_D(const Modem); 0465 return d->primaryPort; 0466 } 0467 0468 ModemManager::PortList ModemManager::Modem::ports() const 0469 { 0470 Q_D(const Modem); 0471 return d->ports; 0472 } 0473 0474 QString ModemManager::Modem::equipmentIdentifier() const 0475 { 0476 Q_D(const Modem); 0477 return d->equipmentIdentifier; 0478 } 0479 0480 MMModemLock ModemManager::Modem::unlockRequired() const 0481 { 0482 Q_D(const Modem); 0483 return d->unlockRequired; 0484 } 0485 0486 ModemManager::UnlockRetriesMap ModemManager::Modem::unlockRetries() const 0487 { 0488 Q_D(const Modem); 0489 return d->unlockRetries; 0490 } 0491 0492 MMModemState ModemManager::Modem::state() const 0493 { 0494 Q_D(const Modem); 0495 return d->state; 0496 } 0497 0498 MMModemStateFailedReason ModemManager::Modem::stateFailedReason() const 0499 { 0500 Q_D(const Modem); 0501 return d->stateFailedReason; 0502 } 0503 0504 ModemManager::Modem::AccessTechnologies ModemManager::Modem::accessTechnologies() const 0505 { 0506 Q_D(const Modem); 0507 return d->accessTechnologies; 0508 } 0509 0510 ModemManager::SignalQualityPair ModemManager::Modem::signalQuality() const 0511 { 0512 Q_D(const Modem); 0513 return d->signalQuality; 0514 } 0515 0516 QStringList ModemManager::Modem::ownNumbers() const 0517 { 0518 Q_D(const Modem); 0519 return d->ownNumbers; 0520 } 0521 0522 MMModemPowerState ModemManager::Modem::powerState() const 0523 { 0524 Q_D(const Modem); 0525 return d->powerState; 0526 } 0527 0528 ModemManager::SupportedModesType ModemManager::Modem::supportedModes() const 0529 { 0530 Q_D(const Modem); 0531 return d->supportedModes; 0532 } 0533 0534 ModemManager::CurrentModesType ModemManager::Modem::currentModes() const 0535 { 0536 Q_D(const Modem); 0537 return d->currentModes; 0538 } 0539 0540 QList<MMModemBand> ModemManager::Modem::supportedBands() const 0541 { 0542 Q_D(const Modem); 0543 return d->supportedBands; 0544 } 0545 0546 QList<MMModemBand> ModemManager::Modem::currentBands() const 0547 { 0548 Q_D(const Modem); 0549 return d->currentBands; 0550 } 0551 0552 ModemManager::Modem::IpBearerFamilies ModemManager::Modem::supportedIpFamilies() const 0553 { 0554 Q_D(const Modem); 0555 return d->supportedIpFamilies; 0556 } 0557 0558 ModemManager::Bearer::Ptr ModemManager::ModemPrivate::findRegisteredBearer(const QString &path) 0559 { 0560 Q_Q(Modem); 0561 ModemManager::Bearer::Ptr ret; 0562 if (!path.isEmpty()) { 0563 bool contains = bearers.contains(path); 0564 if (contains && bearers.value(path)) { 0565 ret = bearers.value(path); 0566 } else { 0567 ret = ModemManager::Bearer::Ptr(new ModemManager::Bearer(path), &QObject::deleteLater); 0568 bearers[path] = ret; 0569 if (!contains) { 0570 Q_EMIT q->bearerAdded(path); 0571 } 0572 } 0573 } 0574 return ret; 0575 } 0576 0577 void ModemManager::Modem::setTimeout(int timeout) 0578 { 0579 Q_D(Modem); 0580 d->modemIface.setTimeout(timeout); 0581 } 0582 0583 int ModemManager::Modem::timeout() const 0584 { 0585 Q_D(const Modem); 0586 return d->modemIface.timeout(); 0587 } 0588 0589 void ModemManager::ModemPrivate::onPropertiesChanged(const QString &ifaceName, const QVariantMap &changedProps, const QStringList &invalidatedProps) 0590 { 0591 Q_UNUSED(invalidatedProps); 0592 Q_Q(Modem); 0593 qCDebug(MMQT) << ifaceName << changedProps.keys(); 0594 0595 if (ifaceName == QLatin1String(MMQT_DBUS_INTERFACE_MODEM)) { 0596 QVariantMap::const_iterator it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_SIM)); 0597 0598 if (it != changedProps.constEnd()) { 0599 Q_EMIT q->simPathChanged(simPath, it->toString()); 0600 simPath = it->toString(); 0601 } 0602 #if MM_CHECK_VERSION(1, 2, 0) 0603 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_BEARERS)); 0604 if (it != changedProps.constEnd()) { 0605 QList<QDBusObjectPath> bearerPaths = qdbus_cast<QList<QDBusObjectPath>>(*it); 0606 if (bearerPaths.isEmpty()) { 0607 QMap<QString, Bearer::Ptr>::const_iterator it = bearers.constBegin(); 0608 while (it != bearers.constEnd()) { 0609 Q_EMIT q->bearerRemoved(it.key()); 0610 ++it; 0611 } 0612 bearers.clear(); 0613 } else { 0614 QStringList knownBearers = bearers.keys(); 0615 Q_FOREACH (const QDBusObjectPath &bearer, bearerPaths) { 0616 if (!bearers.contains(bearer.path())) { 0617 bearers.insert(bearer.path(), ModemManager::Bearer::Ptr()); 0618 Q_EMIT q->bearerAdded(bearer.path()); 0619 } else { 0620 knownBearers.removeOne(bearer.path()); 0621 } 0622 } 0623 Q_FOREACH (const QString &path, knownBearers) { 0624 bearers.remove(path); 0625 Q_EMIT q->bearerRemoved(path); 0626 } 0627 } 0628 Q_EMIT q->bearersChanged(); 0629 } 0630 #endif 0631 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_SUPPORTEDCAPABILITIES)); 0632 if (it != changedProps.constEnd()) { 0633 supportedCapabilities.clear(); 0634 Q_FOREACH (const uint cap, qdbus_cast<QList<uint>>(*it)) { 0635 supportedCapabilities << ((MMModemCapability)cap); 0636 } 0637 Q_EMIT q->supportedCapabilitiesChanged(supportedCapabilities); 0638 } 0639 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_CURRENTCAPABILITIES)); 0640 if (it != changedProps.constEnd()) { 0641 currentCapabilities = (QFlags<MMModemCapability>)it->toUInt(); 0642 Q_EMIT q->currentCapabilitiesChanged(currentCapabilities); 0643 } 0644 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_MAXBEARERS)); 0645 if (it != changedProps.constEnd()) { 0646 maxBearers = it->toUInt(); 0647 Q_EMIT q->maxBearersChanged(maxBearers); 0648 } 0649 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_MAXACTIVEBEARERS)); 0650 if (it != changedProps.constEnd()) { 0651 maxActiveBearers = it->toUInt(); 0652 Q_EMIT q->maxActiveBearersChanged(maxActiveBearers); 0653 } 0654 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_MANUFACTURER)); 0655 if (it != changedProps.constEnd()) { 0656 manufacturer = it->toString(); 0657 Q_EMIT q->manufacturerChanged(manufacturer); 0658 } 0659 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_MODEL)); 0660 if (it != changedProps.constEnd()) { 0661 model = it->toString(); 0662 Q_EMIT q->modelChanged(model); 0663 } 0664 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_REVISION)); 0665 if (it != changedProps.constEnd()) { 0666 revision = it->toString(); 0667 Q_EMIT q->revisionChanged(revision); 0668 } 0669 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_DEVICEIDENTIFIER)); 0670 if (it != changedProps.constEnd()) { 0671 deviceIdentifier = it->toString(); 0672 Q_EMIT q->deviceIdentifierChanged(deviceIdentifier); 0673 } 0674 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_DEVICE)); 0675 if (it != changedProps.constEnd()) { 0676 device = it->toString(); 0677 Q_EMIT q->deviceChanged(device); 0678 } 0679 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_DRIVERS)); 0680 if (it != changedProps.constEnd()) { 0681 drivers = it->toStringList(); 0682 Q_EMIT q->driversChanged(drivers); 0683 } 0684 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_PLUGIN)); 0685 if (it != changedProps.constEnd()) { 0686 plugin = it->toString(); 0687 Q_EMIT q->pluginChanged(plugin); 0688 } 0689 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_PRIMARYPORT)); 0690 if (it != changedProps.constEnd()) { 0691 primaryPort = it->toString(); 0692 Q_EMIT q->primaryPortChanged(primaryPort); 0693 } 0694 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_PORTS)); 0695 if (it != changedProps.constEnd()) { 0696 ports = qdbus_cast<QList<Port>>(*it); 0697 Q_EMIT q->portsChanged(ports); 0698 } 0699 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_EQUIPMENTIDENTIFIER)); 0700 if (it != changedProps.constEnd()) { 0701 equipmentIdentifier = it->toString(); 0702 Q_EMIT q->equipmentIdentifierChanged(equipmentIdentifier); 0703 } 0704 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_UNLOCKREQUIRED)); 0705 if (it != changedProps.constEnd()) { 0706 unlockRequired = (MMModemLock)it->toUInt(); 0707 Q_EMIT q->unlockRequiredChanged(unlockRequired); 0708 } 0709 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_UNLOCKRETRIES)); 0710 if (it != changedProps.constEnd()) { 0711 unlockRetries = qdbus_cast<UnlockRetriesMap>(*it); 0712 Q_EMIT q->unlockRetriesChanged(unlockRetries); 0713 } 0714 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_STATE)); 0715 if (it != changedProps.constEnd()) { 0716 // Should be handled by StateChanged signal 0717 // Q_EMIT q->stateChanged(state, (MMModemState)it->toInt()); 0718 // state = (MMModemState)it->toInt(); 0719 } 0720 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_STATEFAILEDREASON)); 0721 if (it != changedProps.constEnd()) { 0722 stateFailedReason = (MMModemStateFailedReason)it->toUInt(); 0723 Q_EMIT q->stateFailedReasonChanged(stateFailedReason); 0724 } 0725 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_ACCESSTECHNOLOGIES)); 0726 if (it != changedProps.constEnd()) { 0727 accessTechnologies = (ModemManager::Modem::AccessTechnologies)it->toUInt(); 0728 Q_EMIT q->accessTechnologiesChanged(accessTechnologies); 0729 } 0730 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_SIGNALQUALITY)); 0731 if (it != changedProps.constEnd()) { 0732 signalQuality = qdbus_cast<SignalQualityPair>(*it); 0733 Q_EMIT q->signalQualityChanged(signalQuality); 0734 } 0735 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_OWNNUMBERS)); 0736 if (it != changedProps.constEnd()) { 0737 ownNumbers = it->toStringList(); 0738 Q_EMIT q->ownNumbersChanged(ownNumbers); 0739 } 0740 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_POWERSTATE)); 0741 if (it != changedProps.constEnd()) { 0742 powerState = (MMModemPowerState)it->toUInt(); 0743 Q_EMIT q->powerStateChanged(powerState); 0744 } 0745 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_SUPPORTEDMODES)); 0746 if (it != changedProps.constEnd()) { 0747 supportedModes = qdbus_cast<SupportedModesType>(*it); 0748 Q_EMIT q->supportedModesChanged(supportedModes); 0749 } 0750 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_CURRENTMODES)); 0751 if (it != changedProps.constEnd()) { 0752 currentModes = qdbus_cast<CurrentModesType>(*it); 0753 Q_EMIT q->currentModesChanged(currentModes); 0754 } 0755 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_SUPPORTEDBANDS)); 0756 if (it != changedProps.constEnd()) { 0757 supportedBands.clear(); 0758 Q_FOREACH (const uint cap, qdbus_cast<QList<uint>>(*it)) { 0759 supportedBands << ((MMModemBand)cap); 0760 } 0761 Q_EMIT q->supportedBandsChanged(supportedBands); 0762 } 0763 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_CURRENTBANDS)); 0764 if (it != changedProps.constEnd()) { 0765 currentBands.clear(); 0766 Q_FOREACH (const uint cap, qdbus_cast<QList<uint>>(*it)) { 0767 currentBands << ((MMModemBand)cap); 0768 } 0769 Q_EMIT q->currentBandsChanged(currentBands); 0770 } 0771 it = changedProps.constFind(QLatin1String(MM_MODEM_PROPERTY_SUPPORTEDIPFAMILIES)); 0772 if (it != changedProps.constEnd()) { 0773 supportedIpFamilies = (ModemManager::Modem::IpBearerFamilies)it->toUInt(); 0774 Q_EMIT q->supportedIpFamiliesChanged(supportedIpFamilies); 0775 } 0776 } 0777 } 0778 0779 void ModemManager::ModemPrivate::onStateChanged(int oldState, int newState, uint reason) 0780 { 0781 Q_Q(Modem); 0782 state = (MMModemState)newState; 0783 Q_EMIT q->stateChanged((MMModemState)oldState, (MMModemState)newState, (MMModemStateChangeReason)reason); 0784 } 0785 0786 #include "moc_modem.cpp" 0787 #include "moc_modem_p.cpp"