Warning, file /plasma/plasma-mobile/kcms/cellularnetwork/modem.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 // SPDX-FileCopyrightText: 2021-2022 Devin Lin <espidev@gmail.com>
0002 // SPDX-License-Identifier: GPL-2.0-or-later
0003 
0004 #pragma once
0005 
0006 #include "cellularnetworksettings.h"
0007 #include "modemdetails.h"
0008 #include "profilesettings.h"
0009 #include "sim.h"
0010 
0011 #include <QList>
0012 #include <QString>
0013 
0014 #include <NetworkManagerQt/CdmaSetting>
0015 #include <NetworkManagerQt/ConnectionSettings>
0016 #include <NetworkManagerQt/GsmSetting>
0017 #include <NetworkManagerQt/Manager>
0018 #include <NetworkManagerQt/ModemDevice>
0019 #include <NetworkManagerQt/Settings>
0020 
0021 #include <ModemManagerQt/GenericTypes>
0022 #include <ModemManagerQt/Manager>
0023 #include <ModemManagerQt/Modem3Gpp>
0024 #include <ModemManagerQt/ModemDevice>
0025 
0026 #include <QCoroDBusPendingReply>
0027 
0028 class ProfileSettings;
0029 class Sim;
0030 class AvailableNetwork;
0031 class ModemDetails;
0032 class MobileProviders;
0033 
0034 // only supports GSM/UMTS/LTE
0035 class Modem : public QObject
0036 {
0037     Q_OBJECT
0038     Q_PROPERTY(ModemDetails *details READ modemDetails NOTIFY modemDetailsChanged)
0039     Q_PROPERTY(QString uni READ uni NOTIFY uniChanged)
0040     Q_PROPERTY(QString displayId READ displayId NOTIFY displayIdChanged)
0041 
0042     Q_PROPERTY(bool isRoaming READ isRoaming WRITE setIsRoaming NOTIFY isRoamingChanged)
0043     Q_PROPERTY(bool hasSim READ hasSim NOTIFY hasSimChanged)
0044     Q_PROPERTY(QList<ProfileSettings *> profiles READ profileList NOTIFY profileListChanged)
0045     Q_PROPERTY(QString activeConnectionUni READ activeConnectionUni NOTIFY activeConnectionUniChanged)
0046 
0047     Q_PROPERTY(bool mobileDataEnabled READ mobileDataEnabled WRITE setMobileDataEnabled NOTIFY mobileDataEnabledChanged)
0048     Q_PROPERTY(bool mobileDataSupported READ mobileDataSupported NOTIFY mobileDataSupportedChanged)
0049     Q_PROPERTY(bool needsAPNAdded READ needsAPNAdded NOTIFY mobileDataEnabledChanged)
0050 
0051 public:
0052     Modem(QObject *parent = nullptr);
0053     Modem(QObject *parent, ModemManager::ModemDevice::Ptr mmModem, ModemManager::Modem::Ptr m_mmInterface);
0054 
0055     ModemDetails *modemDetails() const;
0056     QString displayId() const; // splits uni and obtains the number suffix
0057     QString uni() const;
0058     QString activeConnectionUni() const;
0059 
0060     Q_INVOKABLE QCoro::Task<void> reset();
0061 
0062     bool mobileDataEnabled() const;
0063     void setMobileDataEnabled(bool enabled);
0064     bool mobileDataSupported() const;
0065     bool needsAPNAdded() const;
0066 
0067     bool isRoaming() const;
0068     QCoro::Task<void> setIsRoaming(bool roaming);
0069     bool hasSim() const;
0070 
0071     // connection profiles
0072     QList<ProfileSettings *> &profileList();
0073     void refreshProfiles();
0074     Q_INVOKABLE QCoro::Task<void> activateProfile(const QString &connectionUni);
0075     Q_INVOKABLE QCoro::Task<void> addProfile(QString name, QString apn, QString username, QString password, QString networkType);
0076     Q_INVOKABLE QCoro::Task<void> removeProfile(const QString &connectionUni);
0077     Q_INVOKABLE QCoro::Task<void> updateProfile(QString connectionUni, QString name, QString apn, QString username, QString password, QString networkType);
0078     Q_INVOKABLE void addDetectedProfileSettings(); // detect modem connection settings (ex. apn) and add a new connection
0079 
0080     QList<Sim *> sims();
0081 
0082     ModemManager::ModemDevice::Ptr mmModemDevice();
0083     NetworkManager::ModemDevice::Ptr nmModemDevice();
0084     ModemManager::Modem::Ptr mmModemInterface();
0085 
0086 Q_SIGNALS:
0087     void modemDetailsChanged();
0088     void uniChanged();
0089     void displayIdChanged();
0090     void activeConnectionUniChanged();
0091 
0092     void nmModemChanged();
0093 
0094     void mobileDataEnabledChanged();
0095     void mobileDataSupportedChanged();
0096     void isRoamingChanged();
0097     void simsChanged();
0098     void hasSimChanged();
0099     void profileListChanged();
0100 
0101     void couldNotAutodetectSettings();
0102 
0103 private:
0104     void findNetworkManagerDevice();
0105 
0106     QString nmDeviceStateStr(NetworkManager::Device::State state);
0107 
0108     ModemDetails *m_details;
0109 
0110     ModemManager::ModemDevice::Ptr m_mmModem;
0111     NetworkManager::ModemDevice::Ptr m_nmModem; // may be a nullptr if the nm modem hasn't been found yet
0112     ModemManager::Modem::Ptr m_mmInterface = nullptr;
0113     ModemManager::Modem3gpp::Ptr m_mm3gppDevice = nullptr; // this may be a nullptr if no sim is inserted
0114 
0115     QList<Sim *> m_sims;
0116     QList<ProfileSettings *> m_profileList;
0117 
0118     friend class ModemDetails;
0119 };