Index: sources/device/DeviceView.cpp =================================================================== diff -u -ra5760947d3ed0d2748ba023a1c25e3c6aa0b1de1 -rf0a80523d37c862fd24064522216b0bd53a2cc33 --- sources/device/DeviceView.cpp (.../DeviceView.cpp) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ sources/device/DeviceView.cpp (.../DeviceView.cpp) (revision f0a80523d37c862fd24064522216b0bd53a2cc33) @@ -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,76 @@ 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())); + +}