Index: sources/device/DeviceView.cpp =================================================================== diff -u -ra5760947d3ed0d2748ba023a1c25e3c6aa0b1de1 -rfb5fdd155c1c6ea42fe1d308f2eed71094f10e5b --- sources/device/DeviceView.cpp (.../DeviceView.cpp) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ sources/device/DeviceView.cpp (.../DeviceView.cpp) (revision fb5fdd155c1c6ea42fe1d308f2eed71094f10e5b) @@ -6,8 +6,8 @@ * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * \file DeviceView.cpp - * \author (last) Behrouz NematiPour - * \date (last) 11-Sep-2023 + * \author (last) Nico Ramirez + * \date (last) 23-June-2025 * \author (original) Behrouz NematiPour * \date (original) 03-Jun-2021 * @@ -31,6 +31,8 @@ DEVICE_VIEW_INIT_CONNECTIONS_LIST connect(&_DeviceController , SIGNAL(didPOSTOSVersionData(QString)), this , SLOT( onPOSTOSVersionData(QString))); + connect(this , SIGNAL(didGetWifiInfo()), + &_DeviceController , SLOT( doGetWifiInfo())); } // ================================================================================================== @@ -269,6 +271,10 @@ void VDevice::wifiListRequest(const QStringList &) { status( "" ); + ipAddress(""); + gateway(""); + subnetMask(""); + dns(""); wifiList({}); dataClear(); wifiListEnabled(false); @@ -364,7 +370,8 @@ QString mRSN_FLAGS; QStringList fields = lines[row].split(','); - qDebug() << fields.join("-"); +// qDebug() << fields.join("-"); +// LOG_DEBUG(fields.join("-")); // this will never fail since even an empty string in split at least has index 0=eSSID; mSSID = fields[eSSID].trimmed(); if ( mSSID.isEmpty() ) continue; //hidden networks, or an incorrect entry @@ -433,6 +440,11 @@ data.mWifiSupported = ssid.mSupported; data.mWifiConnected = ssid.mInUse ; + if (ssid.mInUse ) { + // called to get wifi info once we are connected + emit didGetWifiInfo(); + } + dataAppend( data, ssid.mInUse, ssid.mSupported); } } @@ -467,9 +479,120 @@ case eRole_WifiSignalLevel : return dataList.mWifiSignalLevel ; case eRole_WifiSupported : return dataList.mWifiSupported ; case eRole_WifiConnected : return dataList.mWifiConnected ; + case eRole_WifiIpAddress : return dataList.mWifiIpAddress ; + case eRole_WifiGateway : return dataList.mWifiGateway ; + case eRole_WifiSubnetMask : return dataList.mWifiSubnetMask ; + case eRole_WifiDns : return dataList.mWifiDns ; + // ----- Bluetooth case eRole_BLE_UNUSED : return ""; ; } return QString("Wifi %1").arg(vIndex.row()); } + +// ================================================= WifiInfo +void VDevice::doInitWifiInfo() { + DeviceWifiInfoRequestData data; + wifiInfo({}); + ipAddress(""); + gateway(""); + subnetMask(""); + dns(""); + + emit didAttributeRequest(data); +} + +void VDevice::wifiInfoRequest(const QStringList &) { + // Nothing to be done here. This property will not be assigned. +} + +void VDevice::onAttributeResponse(const DeviceWifiInfoResponseData &vData) +{ + if ( vData.mCompleted ) { + if ( vData.mAccepted ) { + parseWifiInfoResult(vData.mWifiInfo); + } + else { + wifiInfo({}); + } + } + + accepted(vData.mAccepted); + reason (vData.mReason ); + status (vData.mMessage ); + + // has to be the last one + response(true); +} + +/*! + * \brief Network::parseWifiInfoResult + * \details Extract desired information from the WiFi information output. + * \param vResult - (QString) output collected from QProcess execution + */ +void View::VDevice::parseWifiInfoResult(const QString &vResult) +{ + enum WifiInfo_Enum { + eSSID , + eIPADDRESS , + eSUBNETMASK , + eGATEWAY , + eDNS1 , + eDNS2 , + }; + + QString mResult = vResult; + QStringList fields = mResult.split(','); + ipAddress(fields[eIPADDRESS].trimmed()); + subnetMask(fields[eSUBNETMASK].trimmed()); + gateway(fields[eGATEWAY].trimmed()); + dns(fields[eDNS2].isEmpty() ? fields[eDNS1].trimmed() : + QStringLiteral("%1,\n%2").arg(fields[eDNS1].trimmed()) + .arg(fields[eDNS2].trimmed())); + +} + +// ================================================= ConnectWifi +void VDevice::doInitConnectWifi() { + // Nothing for now. +} + +void VDevice::connectWifiRequest(const bool &) { + // Nothing for now. +} + +/*! + * \brief Network::doConnectWifi + * \details Method to connect/disconnect to desired Wi-Fi with SSID and password + * \param vConnect - (bool) determine if user wants to connect or disconnect Wi-Fi + * \param vSsid - (QString) SSID to connect or disconnect + * \param vPassword - (QString) SSID password + */ +void VDevice::doConnectWifi(const bool &vConnect, const QString &vSsid, const QString &vPassword) { + DeviceConnectWifiRequestData data; + data.mConnect = vConnect; + data.mSsid = vSsid; + data.mPassword = vPassword; + connectWifi(false); + + emit didAttributeRequest(data); +} + +void VDevice::onAttributeResponse(const DeviceConnectWifiResponseData &vData) { + if ( vData.mCompleted ) { + if ( vData.mAccepted ) { + // rescan once connect/disconnect has completed + doInitWifiList(); + connectWifi(true); + status(vData.mConnect ? "WiFi Connected" : "WiFi Disconnected"); + } + } + + status (vData.mMessage ); + accepted(vData.mAccepted); + reason (vData.mReason ); + + // has to be the last one + response(true); +}