/*! * * Copyright (c) 2021-2024 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 MWifiNetwork.h * \author (last) Behrouz NematiPour * \date (last) 26-Aug-2024 * \author (original) Behrouz NematiPour * \date (original) 11-May-2021 * */ #pragma once // Qt #include // Project // forward declarations class tst_models; namespace Model { /*! * \brief The Network class * Provides abstraction for a WiFi network * \details Holds information about the WiFi network such as ssid, security, and connection status * */ class MWifiNetwork { public: enum SECURITY_TYPE { UNSUPPORTED, WEP, WPA_TKIP, WPA_TKIP_AES, WPA_AES, WPA2_AES, WPA3_SAE_ONLY, WPA3_WPA2_TRNS, }; enum SIGNAL_LEVEL { NO_SIGNAL, LVL_1, LVL_2, LVL_3, LVL_4, LVL_5 }; enum STATUS { NOT_CONNECTED, CONNECTING, CONNECTED, DISCONNECTING }; struct IPSettings { QString mIPAddress; QString mGateway; QString mSubnetMask; QString mBroadcast; QString mDNS; }; static SIGNAL_LEVEL convertSignalLevel(int vLevel) { if (vLevel == 0) return NO_SIGNAL; else if (vLevel >= -50) return LVL_5; else if (vLevel >= -60) return LVL_4; else if (vLevel >= -70) return LVL_3; else if (vLevel >= -80) return LVL_2; else if (vLevel >= -90) return LVL_1; return NO_SIGNAL; } static QStringList securityTypesToStringList(QList vSecurityTypes) { QStringList result; for (const SECURITY_TYPE &type : vSecurityTypes) { // NOTE : Order of case is very IMPORTANT switch (type) { case WPA3_SAE_ONLY: result.append("WPA3_SAE"); break; case WPA3_WPA2_TRNS: result.append("WPA3_WPA2"); break; case WPA2_AES: result.append("WPA2_AES"); break; case WPA_AES: result.append("WPA_AES"); break; case WPA_TKIP_AES: result.append("WPA_TKIP_AES"); break; case WPA_TKIP: result.append("WPA_TKIP"); break; case WEP: result.append("WEP"); break; case UNSUPPORTED: result.append("UNSUPPORTED"); break; default: result.append("UNKNOWN"); break; } } return result; } struct Data { public: IPSettings mIPSettings; bool operator==(const Data &d1) { if (ssid() == d1.ssid()) return true; return false; } QString ssid() const { return _ssid; } void ssid(const QString &vSSID) { _ssid = vSSID; } QList securityTypes() const { return _securityTypes; } void securityTypes(const QList &vSecurityTypes) { _securityTypes = vSecurityTypes; } SIGNAL_LEVEL signalLevel() const { return _signalLevel; } void signalLevel(const SIGNAL_LEVEL &vLevel) { _signalLevel = vLevel; } STATUS status() const { return _status; } void status(const STATUS &vStatus) { _status = vStatus; } QString macAddress() const { return _macAddress; } void macAddress(const QString &vMacAddress) { _macAddress = vMacAddress; } bool requirePassword() const { return _requirePassword; } void requirePassword( const bool vRequirePassword ) { _requirePassword = vRequirePassword; } explicit Data() {} explicit Data(const QString &vMacAddress) { _macAddress = vMacAddress; } explicit Data(const QString &vMacAddress, const QString &vSSID, const QList &vSecurityTypes, const STATUS &vStatus, const int &vSignalLevel) : Data(vMacAddress, vSSID, vSecurityTypes, vStatus, vSignalLevel, true) {} explicit Data(const QString &vMacAddress, const QString &vSSID, const QList &vSecurityTypes, const STATUS &vStatus, const int &vSignalLevel, const bool vIsRequirePassword) { _macAddress = vMacAddress; _ssid = vSSID; _securityTypes = vSecurityTypes; _status = vStatus; _signalLevel = convertSignalLevel(vSignalLevel); _requirePassword = vIsRequirePassword; } void clearSettings() { mIPSettings.mIPAddress = ""; mIPSettings.mDNS = ""; mIPSettings.mGateway = ""; mIPSettings.mSubnetMask = ""; _macAddress = ""; _ssid = ""; _securityTypes.clear(); _status = NOT_CONNECTED; _signalLevel = NO_SIGNAL; _requirePassword = false; } private: QString _macAddress; QString _ssid; QList _securityTypes; SIGNAL_LEVEL _signalLevel = NO_SIGNAL; STATUS _status = NOT_CONNECTED; bool _requirePassword = false; }; }; } typedef Model::MWifiNetwork::Data WifiNetworkData;