File indexing completed on 2024-05-05 05:36:40

0001 // SPDX-FileCopyrightText: 2021 Devin Lin <devin@kde.org>
0002 // SPDX-License-Identifier: GPL-2.0-or-later
0003 
0004 #pragma once
0005 
0006 #include "modem.h"
0007 #include "sim.h"
0008 
0009 #include <QList>
0010 #include <QString>
0011 
0012 #include <NetworkManagerQt/CdmaSetting>
0013 #include <NetworkManagerQt/ConnectionSettings>
0014 #include <NetworkManagerQt/GsmSetting>
0015 #include <NetworkManagerQt/Manager>
0016 #include <NetworkManagerQt/ModemDevice>
0017 #include <NetworkManagerQt/Settings>
0018 
0019 #include <ModemManagerQt/GenericTypes>
0020 #include <ModemManagerQt/Manager>
0021 #include <ModemManagerQt/Modem3Gpp>
0022 #include <ModemManagerQt/ModemDevice>
0023 
0024 class Modem;
0025 class AvailableNetwork;
0026 
0027 class ModemDetails : public QObject
0028 {
0029     Q_OBJECT
0030     // modemmanager device
0031     Q_PROPERTY(QStringList accessTechnologies READ accessTechnologies NOTIFY accessTechnologiesChanged) // currently used tech
0032     Q_PROPERTY(QString device READ device NOTIFY deviceChanged)
0033     Q_PROPERTY(QString deviceIdentifier READ deviceIdentifier NOTIFY deviceIdentifierChanged)
0034     Q_PROPERTY(QStringList drivers READ drivers NOTIFY driversChanged)
0035     Q_PROPERTY(QString equipmentIdentifier READ equipmentIdentifier NOTIFY equipmentIdentifierChanged)
0036     // TODO add bands
0037     Q_PROPERTY(bool isEnabled READ isEnabled NOTIFY isEnabledChanged)
0038     Q_PROPERTY(QString manufacturer READ manufacturer NOTIFY manufacturerChanged)
0039     Q_PROPERTY(QString model READ model NOTIFY modelChanged)
0040     Q_PROPERTY(QStringList ownNumbers READ ownNumbers NOTIFY ownNumbersChanged)
0041     Q_PROPERTY(QString plugin READ plugin NOTIFY pluginChanged)
0042     Q_PROPERTY(QString powerState READ powerState NOTIFY powerStateChanged)
0043     Q_PROPERTY(QString revision READ revision NOTIFY revisionChanged)
0044     Q_PROPERTY(uint signalQuality READ signalQuality NOTIFY signalQualityChanged)
0045     Q_PROPERTY(QString simPath READ simPath NOTIFY simPathChanged)
0046     Q_PROPERTY(QString state READ state NOTIFY stateChanged)
0047     Q_PROPERTY(QString stateFailedReason READ stateFailedReason NOTIFY stateFailedReasonChanged)
0048 
0049     // modemmanager 3gpp device
0050     Q_PROPERTY(QString operatorCode READ operatorCode NOTIFY operatorCodeChanged)
0051     Q_PROPERTY(QString operatorName READ operatorName NOTIFY operatorNameChanged)
0052     Q_PROPERTY(QString registrationState READ registrationState NOTIFY registrationStateChanged)
0053     Q_PROPERTY(QList<AvailableNetwork *> networks READ networks NOTIFY networksChanged)
0054     Q_PROPERTY(bool isScanningNetworks READ isScanningNetworks NOTIFY isScanningNetworksChanged)
0055 
0056     // networkmanager device
0057     Q_PROPERTY(QString firmwareVersion READ firmwareVersion NOTIFY firmwareVersionChanged)
0058     Q_PROPERTY(QString interfaceName READ interfaceName NOTIFY interfaceNameChanged)
0059     Q_PROPERTY(QString metered READ metered NOTIFY meteredChanged)
0060 
0061 public:
0062     ModemDetails(QObject *parent = nullptr, Modem *modem = nullptr);
0063     ModemDetails &operator=(ModemDetails &&other);
0064     void swap(ModemDetails &other);
0065 
0066     QStringList accessTechnologies();
0067     QString device();
0068     QString deviceIdentifier();
0069     QStringList drivers();
0070     QString equipmentIdentifier();
0071     bool isEnabled();
0072     QString manufacturer();
0073     uint maxActiveBearers();
0074     uint maxBearers();
0075     QString model();
0076     QStringList ownNumbers();
0077     QString plugin();
0078     QString powerState();
0079     QString revision();
0080     uint signalQuality();
0081     QString simPath();
0082     QString state();
0083     QString stateFailedReason();
0084 
0085     QString operatorCode();
0086     QString operatorName();
0087     QString registrationState();
0088 
0089     Q_INVOKABLE void scanNetworks();
0090     QList<AvailableNetwork *> networks();
0091     bool isScanningNetworks();
0092     void scanNetworksFinished(QDBusPendingCallWatcher *call);
0093 
0094     QString firmwareVersion();
0095     QString interfaceName();
0096     QString metered();
0097 
0098 Q_SIGNALS:
0099     void accessTechnologiesChanged();
0100     void deviceChanged();
0101     void deviceIdentifierChanged();
0102     void driversChanged();
0103     void equipmentIdentifierChanged();
0104     void isEnabledChanged();
0105     void manufacturerChanged();
0106     void modelChanged();
0107     void ownNumbersChanged();
0108     void pluginChanged();
0109     void powerStateChanged();
0110     void revisionChanged();
0111     void signalQualityChanged();
0112     void simPathChanged();
0113     void stateChanged();
0114     void stateFailedReasonChanged();
0115     void supportedCapabilitiesChanged();
0116 
0117     void operatorCodeChanged();
0118     void operatorNameChanged();
0119     void registrationStateChanged();
0120     void networksChanged();
0121     void isScanningNetworksChanged();
0122 
0123     void firmwareVersionChanged();
0124     void interfaceNameChanged();
0125     void meteredChanged();
0126 
0127 private:
0128     void updateNMSignals();
0129 
0130     Modem *m_modem;
0131 
0132     QDBusPendingCallWatcher *m_scanNetworkWatcher;
0133     bool m_isScanningNetworks;
0134     QList<AvailableNetwork *> m_cachedScannedNetworks;
0135 };
0136 
0137 class AvailableNetwork : public QObject
0138 {
0139     Q_OBJECT
0140     Q_PROPERTY(bool isCurrentlyUsed READ isCurrentlyUsed NOTIFY isCurrentlyUsedChanged)
0141     Q_PROPERTY(QString operatorLong READ operatorLong NOTIFY operatorLongChanged)
0142     Q_PROPERTY(QString operatorShort READ operatorShort NOTIFY operatorShortChanged)
0143     Q_PROPERTY(QString operatorCode READ operatorCode NOTIFY operatorCodeChanged)
0144     Q_PROPERTY(QString accessTechnology READ accessTechnology NOTIFY accessTechnologyChanged)
0145 
0146 public:
0147     AvailableNetwork(QObject *parent = nullptr,
0148                      ModemManager::Modem3gpp::Ptr mm3gppDevice = nullptr,
0149                      bool isCurrentlyUsed = false,
0150                      QString operatorLong = "",
0151                      QString operatorShort = "",
0152                      QString operatorCode = "",
0153                      MMModemAccessTechnology accessTechnology = MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN);
0154 
0155     bool isCurrentlyUsed();
0156     QString operatorLong();
0157     QString operatorShort();
0158     QString operatorCode();
0159     QString accessTechnology();
0160 
0161     Q_INVOKABLE void registerToNetwork();
0162 
0163 Q_SIGNALS:
0164     void isCurrentlyUsedChanged();
0165     void operatorLongChanged();
0166     void operatorShortChanged();
0167     void operatorCodeChanged();
0168     void accessTechnologyChanged();
0169 
0170 private:
0171     bool m_isCurrentlyUsed;
0172     QString m_operatorLong;
0173     QString m_operatorShort;
0174     QString m_operatorCode;
0175     QString m_accessTechnology;
0176 
0177     ModemManager::Modem3gpp::Ptr m_mm3gppDevice; // this may be a nullptr if no sim is inserted
0178 };