/*! * * Copyright (c) 2021-2023 Diality Inc. - All Rights Reserved. * \copyright * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * \file WifiInterface.h * \author (last) Behrouz NematiPour * \date (last) 02-Feb-2023 * \author (original) Behrouz NematiPour * \date (original) 11-May-2021 * */ #pragma once // Qt #include #include #include // Project #include "main.h" #include "StorageGlobals.h" #include "MWifiNetwork.h" // define #define _WifiInterface WifiInterface::I() using namespace Model; class tst_utilities; /*! * \brief The WifiInterface class * Communicates with Access Points * \details * - Scans for Access Points * - Authenticates with Access Points * - Disconnects from Access Points */ class WifiInterface : public QObject { Q_OBJECT friend class ::tst_utilities; QThread *_thread = nullptr; bool _init = false; bool _scanRunning = false; bool _useDHCP = true; int _defaultTimeout = 5000; int _dhcpTimeout = 10000; int _scanTimeout = 30000; int _processCounter = 0; int _dhcpAttemptsLeft = 5; const quint8 _dhcpAttempts = 5; QProcess _processScan; QProcess _processDisconnectNetwork; QProcess _processReadIPSettings; QProcess _processReadGateway; QProcess _processReadDNS; QProcess _processGenerateWPASupplicant; QProcess _processStartWPASupplicant; QProcess _processRequestAutoAssignedIP; QProcess _processSetStaticIPAddress; QProcess _processSetStaticGateway; QProcess _processSetStaticSubnetMask; QProcess _processSetDNS; QProcess _processReadNetworkInfo; WifiNetworkData _network; const QString _scriptsFolder = Storage::Scripts_Path_Name; const QString _iface = "wlan0"; const QString _wpaSupplicantConfPath = QString("/etc/wpa_supplicant/wpa_supplicant-%1.conf").arg(_iface); // Singleton SINGLETON(WifiInterface) private: bool checkScript(QString &vScript, const QString &vShellScript); QString getTextBetweenDelimiters(const QString &vText, const QString &vLeftDelim, const QString &vRightDelim); QList parseWifiScan(const QString &vOutput); QString parseIP(const QString &vOutput); QString parseBroadcast(const QString &vOutput); QString parseSubnetMask(const QString &vOutput); QString parseGateway(const QString &vOutput); QString parseDNS(const QString &vOutput); QString parseNetworkMacAddress(const QString &vOutput); QString parseNetworkSSID(const QString &vOutput); void initConnections(); void initThread(QThread &vThread); void quitThread(); bool hasConnectedToWifi(); void rejoinLastWifiNetwork(); QStringList securityTypesToStringList(const QList &securityTypes); QList variantListToSecurityTypes(const QList &securityTypesVar); public slots: bool init(QThread &vThread); bool init(); void quit(); void doScan (); void doJoinNetwork (const WifiNetworkData &vNetwork, const QString &vPassword); void doDisconnectNetwork (const WifiNetworkData &vNetwork); void doRequestIPSettings (); void doRequestNetworkInfo (); // static IP address assignment void doRequestSetIPAddress (const QString &vIPAddress ); void doRequestSetGateway (const QString &vGateway ); void doRequestSetSubnetMask (const QString &vSubnetMask ); void doRequestSetDNS (const QString &vDNS ); signals: void didStart(QPrivateSignal); void didAddNetwork (const WifiNetworkData & ); void didDisconnectNetwork (const WifiNetworkData & ); void didRejectRequest (const QString &vFunction, const QString &vReason); void didBusyChanged ( bool vBusy); void didStatusChanged (const QString &vNewStatus ); void didRequestAutoAssignedIP (); // static IP address settings void didSetStaticIPAddress (); void didSetGateway (); void didSetSubnetMask (); void didSetDNS (); // emitted from separate threads void didScanStatusChanged ( bool ); void didConnectToNetwork (const WifiNetworkData &); void didError (const QString &); private slots: void onStatusChanged(const QString &vMessage); void onRequestAutoAssignedIP(); void onProcessFinishedScan (int vExitCode, QProcess::ExitStatus vExitStatus); void onProcessFinishedReadIP (int vExitCode, QProcess::ExitStatus vExitStatus); void onProcessFinishedReadGateway (int vExitCode, QProcess::ExitStatus vExitStatus); void onProcessFinishedReadDNS (int vExitCode, QProcess::ExitStatus vExitStatus); void onProcessFinishedGenerateWPASupplicant (int vExitCode, QProcess::ExitStatus vExitStatus); void onProcessFinishedStartWPASupplicant (int vExitCode, QProcess::ExitStatus vExitStatus); void onProcessFinishedRequestAutoAssignedIP (int vExitCode, QProcess::ExitStatus vExitStatus); void onProcessFinishedDisconnectNetwork (int vExitCode, QProcess::ExitStatus vExitStatus); void onProcessFinishedSetIPAddress (int vExitCode, QProcess::ExitStatus vExitStatus); void onProcessFinishedSetGateway (int vExitCode, QProcess::ExitStatus vExitStatus); void onProcessFinishedSetSubnetMask (int vExitCode, QProcess::ExitStatus vExitStatus); void onProcessFinishedSetDNS (int vExitCode, QProcess::ExitStatus vExitStatus); void onProcessFinishedReadNetworkInfo (int vExitCode, QProcess::ExitStatus vExitStatus); SAFE_CALL(doStart) };