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 
0008 #include <QList>
0009 #include <QString>
0010 
0011 #include <NetworkManagerQt/CdmaSetting>
0012 #include <NetworkManagerQt/ConnectionSettings>
0013 #include <NetworkManagerQt/GsmSetting>
0014 #include <NetworkManagerQt/Manager>
0015 #include <NetworkManagerQt/ModemDevice>
0016 #include <NetworkManagerQt/Settings>
0017 
0018 #include <ModemManagerQt/GenericTypes>
0019 #include <ModemManagerQt/Manager>
0020 #include <ModemManagerQt/Modem3Gpp>
0021 #include <ModemManagerQt/ModemDevice>
0022 
0023 #include <QCoroDBusPendingReply>
0024 
0025 class Modem;
0026 
0027 class Sim : public QObject
0028 {
0029     Q_OBJECT
0030     Q_PROPERTY(bool enabled READ enabled NOTIFY enabledChanged)
0031     Q_PROPERTY(bool pinEnabled READ pinEnabled NOTIFY pinEnabledChanged) // if there is a PIN set on the SIM
0032     Q_PROPERTY(int unlockRetriesLeft READ unlockRetriesLeft NOTIFY unlockRetriesLeftChanged)
0033     Q_PROPERTY(bool locked READ locked NOTIFY lockedChanged) // if the SIM is currently locked (requires entering PIN)
0034     Q_PROPERTY(QString lockedReason READ lockedReason NOTIFY lockedReasonChanged)
0035     Q_PROPERTY(QString imsi READ imsi NOTIFY imsiChanged)
0036     Q_PROPERTY(QString eid READ eid NOTIFY eidChanged) // TODO (not in mm-qt)
0037     Q_PROPERTY(QString operatorIdentifier READ operatorIdentifier NOTIFY operatorIdentifierChanged)
0038     Q_PROPERTY(QString operatorName READ operatorName NOTIFY operatorNameChanged)
0039     Q_PROPERTY(QString simIdentifier READ simIdentifier NOTIFY simIdentifierChanged)
0040     Q_PROPERTY(QStringList emergencyNumbers READ emergencyNumbers NOTIFY emergencyNumbersChanged)
0041     Q_PROPERTY(QString uni READ uni NOTIFY uniChanged)
0042     Q_PROPERTY(QString displayId READ displayId NOTIFY displayIdChanged)
0043     Q_PROPERTY(Modem *modem READ modem NOTIFY modemChanged)
0044 
0045 public:
0046     Sim(QObject *parent = nullptr,
0047         Modem *modem = nullptr,
0048         ModemManager::Sim::Ptr mmSim = ModemManager::Sim::Ptr{nullptr},
0049         ModemManager::Modem::Ptr mmModem = ModemManager::Modem::Ptr{nullptr},
0050         ModemManager::Modem3gpp::Ptr mmModem3gpp = ModemManager::Modem3gpp::Ptr{nullptr});
0051 
0052     bool enabled();
0053     bool pinEnabled();
0054     int unlockRetriesLeft();
0055     bool locked();
0056     QString lockedReason();
0057     QString imsi();
0058     QString eid(); // TODO add in mm-qt
0059     QString operatorIdentifier();
0060     QString operatorName();
0061     QString simIdentifier();
0062     QStringList emergencyNumbers(); // TODO add in mm-qt
0063     QString uni();
0064     QString displayId();
0065     Modem *modem();
0066 
0067     Q_INVOKABLE QCoro::Task<void> togglePinEnabled(const QString &pin);
0068     Q_INVOKABLE QCoro::Task<void> changePin(const QString &oldPin, const QString &newPin);
0069     Q_INVOKABLE QCoro::Task<void> sendPin(const QString &pin);
0070     Q_INVOKABLE QCoro::Task<void> sendPuk(const QString &pin, const QString &puk);
0071 
0072 Q_SIGNALS:
0073     void enabledChanged();
0074     void pinEnabledChanged();
0075     void unlockRetriesLeftChanged();
0076     void lockedChanged();
0077     void lockedReasonChanged();
0078     void imsiChanged();
0079     void eidChanged();
0080     void operatorIdentifierChanged();
0081     void operatorNameChanged();
0082     void simIdentifierChanged();
0083     void emergencyNumbersChanged();
0084     void uniChanged();
0085     void displayIdChanged();
0086     void modemChanged();
0087 
0088 private:
0089     Modem *m_modem;
0090     ModemManager::Sim::Ptr m_mmSim;
0091     ModemManager::Modem::Ptr m_mmModem;
0092     ModemManager::Modem3gpp::Ptr m_mmModem3gpp; // this may be a nullptr if no sim is inserted
0093 };