Index: sources/device/DeviceController.cpp =================================================================== diff -u -rdeaef8b5bdfe9be7293e63fb6ac256a9ce3cd3f4 -r6e18f1d24b8cc3d84d26f46f36f73deb34e54371 --- sources/device/DeviceController.cpp (.../DeviceController.cpp) (revision deaef8b5bdfe9be7293e63fb6ac256a9ce3cd3f4) +++ sources/device/DeviceController.cpp (.../DeviceController.cpp) (revision 6e18f1d24b8cc3d84d26f46f36f73deb34e54371) @@ -257,24 +257,30 @@ QNetworkInterface dev; QList addresses; + bool mWifiError = false; + mInfo = tr("WiFi Connection Error"); - if ( ! _wifiAvailable ) { goto lOut; } + if ( ! _wifiAvailable ) { goto lError; } mInfo = tr("No WiFi"); dev = QNetworkInterface::interfaceFromName(_interface); - if ( ! dev.isValid() ) { goto lOut; } + if ( ! dev.isValid() ) { goto lError; } addresses = dev.addressEntries(); mInfo = tr("WiFi Not Connected"); - if ( addresses.isEmpty() ) { goto lOut; } + if ( addresses.isEmpty() ) { goto lError; } if ( ! ( dev.flags().testFlag(QNetworkInterface::IsUp) && - dev.flags().testFlag(QNetworkInterface::IsRunning) ) ) { goto lOut; } + dev.flags().testFlag(QNetworkInterface::IsRunning) ) ) { goto lError; } mInfo = addresses.first().ip().toString(); + goto lOut; +lError: + mWifiError = true; + lOut: - emit didWiFiIP(mInfo); + emit didWiFiIP(mInfo, mWifiError); } /*! @@ -1018,7 +1024,6 @@ // ----- run the process int timeout_ms = 10000; TimedProcess *timedProcess = new TimedProcess(&_processWifiList, script, timeout_ms, {}); - //DEBUG qDebug() << script << timeout_ms; timedProcess->start(); MDeviceWifiListResponse model; @@ -1179,10 +1184,7 @@ */ void DeviceController::processWifiConnectResponse(int vExitCode, QProcess::ExitStatus vStatus, QProcess::ProcessChannel vChannel) { - Q_UNUSED(vStatus ) - Q_UNUSED(vChannel ) static MDeviceWifiConnectResponse model; - if ( vExitCode < 0 ) { emit didAttributeResponse(model.data()); switch (vChannel) { @@ -1196,3 +1198,262 @@ model._data.clear(); } } + +////////////////////////////////////////////////////////////////////////////////////////////////// DeviceFactoryReset +void DeviceController::onAttributeRequest(const DeviceFactoryResetRequestData &) +{ + factoryResetRequest(); +} + +/*! + * \brief DeviceController::factoryResetRequest + * \details Calls the factoryReset script + * \note This function is created to be able to call independently if needed in this class. + */ +void DeviceController::factoryResetRequest() +{ + // ----- check that script exists. + QString script; + if ( checkError( DeviceError::checkScript(script, Scripts_Factory_Reset), _deviceFactoryResetResponse, script) ) + return; + + // ----- check if the process is not running + if ( _processFactoryReset.state() != QProcess::NotRunning ) { + checkError(DeviceError::eDevice_Scripts_Error_IsRunning, _deviceFactoryResetResponse); + return; + } + + // ----- run the process + int timeout_ms = 10000; + TimedProcess *timedProcess = new TimedProcess(&_processFactoryReset, script, timeout_ms, {}); + timedProcess->start(); + + MDeviceFactoryResetResponse model; + model._data.mCompleted = false; + model._data.mAccepted = false; + model._data.mMessage = tr("Factory Reset started."); + emit didAttributeResponse(model.data()); +} + +/*! + * \brief DeviceController::processFactoryResetResponse + * \param vExitCode + * \param vStatus + */ +void DeviceController::processFactoryResetResponse(int vExitCode, QProcess::ExitStatus vStatus, QProcess::ProcessChannel vChannel) +{ + static MDeviceFactoryResetResponse model; + if ( vExitCode < 0 ) { + emit didAttributeResponse(model.data()); + switch (vChannel) { + case QProcess::StandardOutput : processFactoryResetReadyOut(model); break; + case QProcess::StandardError : processFactoryResetReadyErr(model); break; + } + } + else { + processFactoryResetComplete(model, vExitCode, vStatus); + emit didAttributeResponse(model.data()); + model._data.clear(); + } +} + +////////////////////////////////////////////////////////////////////////////////////////////////// DeviceDecommission +void DeviceController::onAttributeRequest(const DeviceDecommissionRequestData &vData) +{ + decommissionRequest(vData); +} + +/*! + * \brief DeviceController::decommissionRequest + * \details Calls the decommission script + * \note This function is created to be able to call independently if needed in this class. + */ +void DeviceController::decommissionRequest(const DeviceDecommissionRequestData &vData) +{ + // ----- check that script exists. + QString script; + if ( checkError( DeviceError::checkScript(script, Scripts_Device_Decommission), _deviceDecommissionResponse, script) ) + return; + + // ----- check if the process is not running + if ( _processDecommission.state() != QProcess::NotRunning ) { + checkError(DeviceError::eDevice_Scripts_Error_IsRunning, _deviceDecommissionResponse); + return; + } + + QStringList params; + params << vData.mPassword; + + // ----- run the process + int timeout_ms = 10000; + TimedProcess *timedProcess = new TimedProcess(&_processDecommission, script, timeout_ms, params); + timedProcess->start(); + + MDeviceDecommissionResponse model; + model._data.mCompleted = false; + model._data.mAccepted = false; + model._data.mMessage = tr("Decommission started."); + emit didAttributeResponse(model.data()); +} + +/*! + * \brief DeviceController::processDecommissionResponse + * \param vExitCode + * \param vStatus + */ +void DeviceController::processDecommissionResponse(int vExitCode, QProcess::ExitStatus vStatus, QProcess::ProcessChannel vChannel) +{ + static MDeviceDecommissionResponse model; + if ( vExitCode < 0 ) { + emit didAttributeResponse(model.data()); + switch (vChannel) { + case QProcess::StandardOutput : processDecommissionReadyOut(model); break; + case QProcess::StandardError : processDecommissionReadyErr(model); break; + } + } + else { + processDecommissionComplete(model, vExitCode, vStatus); + emit didAttributeResponse(model.data()); + model._data.clear(); + } +} + +////////////////////////////////////////////////////////////////////////////////////////////////// DeviceRootSSHAccess +void DeviceController::onAttributeRequest(const DeviceRootSSHAccessRequestData &vData) +{ + rootSSHAccessRequest(vData); +} + +/*! + * \brief DeviceController::rootSSHAccessRequest + * \details Calls the RootSSHAccess script + * \note This function is created to be able to call independently if needed in this class. + */ +void DeviceController::rootSSHAccessRequest(const DeviceRootSSHAccessRequestData &vData) +{ + DeviceError::Scripts_Error_Enum error = DeviceError::eDevice_OK; + + // ----- initializing the member variable models + _deviceRootSSHAccessRequest._data = vData; + + // ----- check that script exists. + QString script; + if ( checkError( DeviceError::checkScript(script, Scripts_Ssh_Access), _deviceRootSSHAccessResponse, script) ) + return; + + // ----- check if the process is not running + if ( _processRootSSHAccess.state() != QProcess::NotRunning ) { + checkError(DeviceError::eDevice_Scripts_Error_IsRunning, _deviceRootSSHAccessResponse); + return; + } + + QStringList params; + if ( ! vData.mIsGet ) { + params << QString::number(static_cast(vData.mRootSSHAccess)); + } + + if ( error ) { + checkError(error, _deviceWifiConnectResponse); + return; + } + + // ----- run the process + int timeout_ms = 10000; + TimedProcess *timedProcess = new TimedProcess(&_processRootSSHAccess, script, timeout_ms, params); + timedProcess->start(); + + MDeviceRootSSHAccessResponse model; + model._data.mCompleted = false; + model._data.mAccepted = false; + model._data.mMessage = tr("RootSSHAccess started."); + emit didAttributeResponse(model.data()); +} + +/*! + * \brief DeviceController::processRootSSHAccessResponse + * \param vExitCode + * \param vStatus + */ +void DeviceController::processRootSSHAccessResponse(int vExitCode, QProcess::ExitStatus vStatus, QProcess::ProcessChannel vChannel) +{ + static MDeviceRootSSHAccessResponse model; + if ( vExitCode < 0 ) { + emit didAttributeResponse(model.data()); + switch (vChannel) { + case QProcess::StandardOutput : processRootSSHAccessReadyOut(model); break; + case QProcess::StandardError : processRootSSHAccessReadyErr(model); break; + } + } + else { + processRootSSHAccessComplete(model, vExitCode, vStatus); + emit didAttributeResponse(model.data()); + model._data.clear(); + } +} + +////////////////////////////////////////////////////////////////////////////////////////////////// DeviceDateTime +void DeviceController::onAttributeRequest(const DeviceDateTimeRequestData &vData) +{ + dateTimeRequest(vData); +} + +void DeviceController::dateTimeRequest(const DeviceDateTimeRequestData &vData) +{ + DeviceError::Scripts_Error_Enum error = DeviceError::eDevice_OK; + + // ----- initializing the member variable models + _deviceDateTimeRequest._data = vData; + + // ----- check that script exists. + QString script; + if ( checkError( DeviceError::checkScript(script, Date_Time_Set_Sh), _deviceDateTimeResponse, script) ) + return; + + // ----- check if the process is not running + if ( _processDateTime.state() != QProcess::NotRunning ) { + checkError(DeviceError::eDevice_Scripts_Error_IsRunning, _deviceDateTimeResponse); + return; + } + + QStringList params; + params << vData.mDateTime << (vData.mNTP ? "true" : "false"); + + if ( error ) { + checkError(error, _deviceDateTimeResponse); + return; + } + + // ----- run the process + int timeout_ms = 10000; + TimedProcess *timedProcess = new TimedProcess(&_processDateTime, script, timeout_ms, params); + timedProcess->start(); + + MDeviceDateTimeResponse model; + model._data.mCompleted = false; + model._data.mAccepted = false; + model._data.mMessage = tr("Date Time started."); + emit didAttributeResponse(model.data()); +} + +/*! + * \brief DeviceController::processDateTimeResponse + * \param vExitCode + * \param vStatus + */ +void DeviceController::processDateTimeResponse(int vExitCode, QProcess::ExitStatus vStatus, QProcess::ProcessChannel vChannel) +{ + static MDeviceDateTimeResponse model; + if ( vExitCode < 0 ) { + emit didAttributeResponse(model.data()); + switch (vChannel) { + case QProcess::StandardOutput : processDateTimeReadyOut(model); break; + case QProcess::StandardError : processDateTimeReadyErr(model); break; + } + } + else { + processDateTimeComplete(model, vExitCode, vStatus); + emit didAttributeResponse(model.data()); + model._data.clear(); + } +} +