File indexing completed on 2024-04-28 15:32:59

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 "modemsignal.h"
0009 #include "mmdebug_p.h"
0010 #include "modemsignal_p.h"
0011 #ifdef MMQT_STATIC
0012 #include "dbus/fakedbus.h"
0013 #else
0014 #include "dbus/dbus.h"
0015 #endif
0016 
0017 ModemManager::ModemSignalPrivate::ModemSignalPrivate(const QString &path, ModemSignal *q)
0018     : InterfacePrivate(path, q)
0019 #ifdef MMQT_STATIC
0020     , modemSignalIface(QLatin1String(MMQT_DBUS_SERVICE), path, QDBusConnection::sessionBus())
0021 #else
0022     , modemSignalIface(QLatin1String(MMQT_DBUS_SERVICE), path, QDBusConnection::systemBus())
0023 #endif
0024     , q_ptr(q)
0025 {
0026     if (modemSignalIface.isValid()) {
0027         rate = modemSignalIface.rate();
0028         cdma = modemSignalIface.cdma();
0029         evdo = modemSignalIface.evdo();
0030         gsm = modemSignalIface.gsm();
0031         umts = modemSignalIface.umts();
0032         lte = modemSignalIface.lte();
0033     }
0034 }
0035 
0036 ModemManager::ModemSignal::ModemSignal(const QString &path, QObject *parent)
0037     : Interface(*new ModemSignalPrivate(path, this), parent)
0038 {
0039     Q_D(ModemSignal);
0040 #ifdef MMQT_STATIC
0041     QDBusConnection::sessionBus().connect(QLatin1String(MMQT_DBUS_SERVICE),
0042                                           d->uni,
0043                                           QLatin1String(DBUS_INTERFACE_PROPS),
0044                                           QStringLiteral("PropertiesChanged"),
0045                                           d,
0046                                           SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
0047 #else
0048     QDBusConnection::systemBus().connect(QLatin1String(MMQT_DBUS_SERVICE),
0049                                          d->uni,
0050                                          QLatin1String(DBUS_INTERFACE_PROPS),
0051                                          QStringLiteral("PropertiesChanged"),
0052                                          d,
0053                                          SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
0054 #endif
0055 }
0056 
0057 ModemManager::ModemSignal::~ModemSignal()
0058 {
0059 }
0060 
0061 uint ModemManager::ModemSignal::rate() const
0062 {
0063     Q_D(const ModemSignal);
0064     return d->rate;
0065 }
0066 
0067 QVariantMap ModemManager::ModemSignal::cdma() const
0068 {
0069     Q_D(const ModemSignal);
0070     return d->cdma;
0071 }
0072 
0073 QVariantMap ModemManager::ModemSignal::evdo() const
0074 {
0075     Q_D(const ModemSignal);
0076     return d->evdo;
0077 }
0078 
0079 QVariantMap ModemManager::ModemSignal::gsm() const
0080 {
0081     Q_D(const ModemSignal);
0082     return d->gsm;
0083 }
0084 
0085 QVariantMap ModemManager::ModemSignal::lte() const
0086 {
0087     Q_D(const ModemSignal);
0088     return d->lte;
0089 }
0090 
0091 QVariantMap ModemManager::ModemSignal::umts() const
0092 {
0093     Q_D(const ModemSignal);
0094     return d->umts;
0095 }
0096 
0097 QDBusPendingReply<void> ModemManager::ModemSignal::setup(uint rate)
0098 {
0099     Q_D(ModemSignal);
0100     return d->modemSignalIface.Setup(rate);
0101 }
0102 
0103 void ModemManager::ModemSignal::setTimeout(int timeout)
0104 {
0105     Q_D(ModemSignal);
0106     d->modemSignalIface.setTimeout(timeout);
0107 }
0108 
0109 int ModemManager::ModemSignal::timeout() const
0110 {
0111     Q_D(const ModemSignal);
0112     return d->modemSignalIface.timeout();
0113 }
0114 
0115 void ModemManager::ModemSignalPrivate::onPropertiesChanged(const QString &interface, const QVariantMap &properties, const QStringList &invalidatedProps)
0116 {
0117     Q_Q(ModemSignal);
0118     Q_UNUSED(invalidatedProps);
0119     qCDebug(MMQT) << interface << properties.keys();
0120 
0121     if (interface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_SIGNAL)) {
0122         QVariantMap::const_iterator it = properties.constFind(QLatin1String(MM_MODEM_SIGNAL_PROPERTY_RATE));
0123         if (it != properties.constEnd()) {
0124             rate = it->toUInt();
0125             Q_EMIT q->rateChanged(rate);
0126         }
0127         it = properties.constFind(QLatin1String(MM_MODEM_SIGNAL_PROPERTY_CDMA));
0128         if (it != properties.constEnd()) {
0129             cdma = qdbus_cast<QVariantMap>(*it);
0130             Q_EMIT q->cdmaChanged(cdma);
0131         }
0132         it = properties.constFind(QLatin1String(MM_MODEM_SIGNAL_PROPERTY_EVDO));
0133         if (it != properties.constEnd()) {
0134             evdo = qdbus_cast<QVariantMap>(*it);
0135             Q_EMIT q->cdmaChanged(evdo);
0136         }
0137         it = properties.constFind(QLatin1String(MM_MODEM_SIGNAL_PROPERTY_GSM));
0138         if (it != properties.constEnd()) {
0139             gsm = qdbus_cast<QVariantMap>(*it);
0140             Q_EMIT q->cdmaChanged(gsm);
0141         }
0142         it = properties.constFind(QLatin1String(MM_MODEM_SIGNAL_PROPERTY_UMTS));
0143         if (it != properties.constEnd()) {
0144             umts = qdbus_cast<QVariantMap>(*it);
0145             Q_EMIT q->cdmaChanged(umts);
0146         }
0147         it = properties.constFind(QLatin1String(MM_MODEM_SIGNAL_PROPERTY_LTE));
0148         if (it != properties.constEnd()) {
0149             lte = qdbus_cast<QVariantMap>(*it);
0150             Q_EMIT q->cdmaChanged(lte);
0151         }
0152     }
0153 }
0154 
0155 #include "moc_modemsignal.cpp"