File indexing completed on 2024-04-28 16:42:53

0001 // SPDX-FileCopyrightText: 2021 Alexey Andreyev <aa13q@ya.ru>
0002 //
0003 // SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL
0004 #pragma once
0005 
0006 #include "modem-controller.h"
0007 
0008 #include <ModemManagerQt/Call>
0009 #include <ModemManagerQt/GenericTypes>
0010 #include <ModemManagerQt/Manager>
0011 #include <ModemManagerQt/Modem3Gpp>
0012 #include <ModemManagerQt/Modem3GppUssd>
0013 #include <ModemManagerQt/ModemMessaging>
0014 #include <ModemManagerQt/ModemVoice>
0015 #include <ModemManagerQt/Sms>
0016 
0017 #include "call-object.h"
0018 
0019 class ModemManagerController : public ModemController
0020 {
0021     Q_OBJECT
0022 
0023 public:
0024     explicit ModemManagerController(QObject *parent = nullptr);
0025 
0026     QString subsystem();
0027 
0028 public Q_SLOTS:
0029     // Device
0030     QString equipmentIdentifier(const QString &deviceUni) override;
0031     // USSD
0032     void ussdInitiate(const QString &deviceUni, const QString &command) override;
0033     void ussdRespond(const QString &deviceUni, const QString &reply) override;
0034     void ussdCancel(const QString &deviceUni) override;
0035     // Calls
0036     QString callNumber(const QString &deviceUni, const QString &callUni) override;
0037     void createCall(const QString &deviceUni, const QString &callUni) override;
0038     void acceptCall(const QString &deviceUni, const QString &callUni) override;
0039     void hangUp(const QString &deviceUni, const QString &callUni) override;
0040     void sendDtmf(const QString &deviceUni, const QString &callUni, const QString &tones) override;
0041     DialerTypes::CallDataVector fetchCalls() override;
0042     DialerTypes::CallData getCall(const QString &deviceUni, const QString &callUni) override;
0043     void deleteCall(const QString &deviceUni, const QString &callUni) override;
0044 
0045 private Q_SLOTS:
0046     void onServiceAppeared();
0047     void onServiceDisappeared();
0048     void onModemAdded(const QString &udi);
0049     void onModemRemoved(const QString &udi);
0050 
0051 private:
0052     void _init();
0053 
0054     QVector<CallObject *> _calls;
0055     void _removeCall(const QString &callId);
0056 
0057     QSharedPointer<ModemManager::Modem3gpp> _modem3gppInterface(const QSharedPointer<ModemManager::ModemDevice> modemDevice);
0058 
0059     QSharedPointer<ModemManager::Modem3gppUssd> _modem3gppUssdInterface(const QSharedPointer<ModemManager::ModemDevice> modemDevice);
0060 
0061     QSharedPointer<ModemManager::ModemVoice> _voiceInterface(const QSharedPointer<ModemManager::ModemDevice> modemDevice);
0062 
0063     CallObject *
0064     _voiceCallObject(const QSharedPointer<ModemManager::ModemDevice> &device, const QSharedPointer<ModemManager::Call> &call, QObject *parent = nullptr);
0065 
0066     DialerTypes::CallData _voiceCallData(CallObject *callObject);
0067 
0068     void _fetchModemCalls();
0069     CallObject *_getVoiceCallObject(const QString &deviceUni, const QString &callUni);
0070     void _initAddedCall(const QSharedPointer<ModemManager::ModemDevice> &device, const QSharedPointer<ModemManager::Call> &call);
0071 };