Index: sources/device/DeviceController.cpp =================================================================== diff -u -rf2e4eba6e85c5d36537be782926f23cc9dc01037 -rfb5fdd155c1c6ea42fe1d308f2eed71094f10e5b --- sources/device/DeviceController.cpp (.../DeviceController.cpp) (revision f2e4eba6e85c5d36537be782926f23cc9dc01037) +++ sources/device/DeviceController.cpp (.../DeviceController.cpp) (revision fb5fdd155c1c6ea42fe1d308f2eed71094f10e5b) @@ -6,8 +6,8 @@ * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * \file DeviceController.cpp - * \author (last) Behrouz NematiPour - * \date (last) 24-Apr-2024 + * \author (last) Nico Ramirez + * \date (last) 23-June-2025 * \author (original) Behrouz NematiPour * \date (original) 03-Jun-2021 * @@ -997,7 +997,7 @@ } /*! - * \brief DeviceController::processUSBMountResponse + * \brief DeviceController::processWifiListResponse * \param vExitCode * \param vStatus */ @@ -1019,3 +1019,132 @@ } } +////////////////////////////////////////////////////////////////////////////////////////////////// DeviceWifiInfo +void DeviceController::onAttributeRequest(const DeviceWifiInfoRequestData &) +{ + doGetWifiInfo(); +} + +/*! + * \brief DeviceController::doGetWifiInfo + * \details Calls the Wifi Info script + * \note This function is created to be able to call independently if needed in this class. + */ +void DeviceController::doGetWifiInfo() +{ + // ----- check that script exists. + QString script; + if ( checkError( DeviceError::checkScript(script, Scripts_Wifi_Info), _deviceWifiInfoResponse, script) ) + return; + + // ----- check if the process is not running + if ( _processWifiInfo.state() != QProcess::NotRunning ) { + checkError(DeviceError::eDevice_Scripts_Error_IsRunning, _deviceWifiInfoResponse); + return; + } + + // ----- run the process + int timeout_ms = 10000; + TimedProcess *timedProcess = new TimedProcess(&_processWifiInfo, script, timeout_ms, {}); + timedProcess->start(); + + MDeviceWifiInfoResponse model; + model._data.mCompleted = false; + model._data.mAccepted = false; + model._data.mMessage = tr("WiFi info started."); + emit didAttributeResponse(model.data()); +} + +/*! + * \brief DeviceController::processWifiInfoResponse + * \param vExitCode + * \param vStatus + */ +void DeviceController::processWifiInfoResponse(int vExitCode, QProcess::ExitStatus vStatus, QProcess::ProcessChannel vChannel) +{ + static MDeviceWifiInfoResponse model; + if ( vExitCode < 0 ) { + emit didAttributeResponse(model.data()); + switch (vChannel) { + case QProcess::StandardOutput : processWifiInfoReadyOut(model); break; + case QProcess::StandardError : processWifiInfoReadyErr(model); break; + } + } + else { + processWifiInfoComplete(model, vExitCode, vStatus); + emit didAttributeResponse(model.data()); + model._data.clear(); + } +} + + +////////////////////////////////////////////////////////////////////////////////////////////////// DeviceConnectWifi +/*! + * \brief DeviceController::onAttributeRequest + * \details Calls the Wifi connect/ disconnect script + */ +void DeviceController::onAttributeRequest(const DeviceConnectWifiRequestData &vData) +{ + DeviceError::Scripts_Error_Enum error = DeviceError::eDevice_OK; + + // ----- initializing the member variable models + _deviceConnectWifiRequest._data = vData; + + // ----- check that script exists. + QString script; + if ( checkError( DeviceError::checkScript(script, (vData.mConnect ? Scripts_Wifi_Connect : Scripts_Wifi_Disconnect )), _deviceConnectWifiResponse, script) ) + return; + + // ----- check if the process is not running + if ( _processConnectWifi.state() != QProcess::NotRunning ) { + checkError(DeviceError::eDevice_Scripts_Error_IsRunning, _deviceConnectWifiResponse); + return; + } + + QStringList params; + params << vData.mSsid; + if (vData.mConnect ) { + params << vData.mPassword; + } + + if ( error ) { + checkError(error, _deviceConnectWifiResponse); + return; + } + + // ----- run the process + int timeout_ms = 10000; + TimedProcess *timedProcess = new TimedProcess(&_processConnectWifi, script, timeout_ms, params); + timedProcess->start(); + + MDeviceConnectWifiResponse model; + model._data.mConnect = vData.mConnect; + model._data.mAccepted = false; + model._data.mMessage = vData.mConnect ? tr("Connecting to Wifi.") : tr("Disconnecting to Wifi."); + emit didAttributeResponse(model.data()); +} + +/*! + * \brief DeviceController::processConnectWifiResponse + * \param vExitCode + * \param vStatus + */ +void DeviceController::processConnectWifiResponse(int vExitCode, QProcess::ExitStatus vStatus, QProcess::ProcessChannel vChannel) +{ + Q_UNUSED(vStatus ) + Q_UNUSED(vChannel ) + static MDeviceConnectWifiResponse model; + + if ( vExitCode < 0 ) { + emit didAttributeResponse(model.data()); + switch (vChannel) { + case QProcess::StandardOutput : processConnectWifiReadyOut(model); break; + case QProcess::StandardError : processConnectWifiReadyErr(model); break; + } + } + else { + processConnectWifiComplete(model, vExitCode, vStatus); + emit didAttributeResponse(model.data()); + model._data.clear(); + } +}