Index: sources/device/DeviceController.cpp =================================================================== diff -u -rbabe585dd9603621275742b07135c0fd4181802f -r6e18f1d24b8cc3d84d26f46f36f73deb34e54371 --- sources/device/DeviceController.cpp (.../DeviceController.cpp) (revision babe585dd9603621275742b07135c0fd4181802f) +++ sources/device/DeviceController.cpp (.../DeviceController.cpp) (revision 6e18f1d24b8cc3d84d26f46f36f73deb34e54371) @@ -21,6 +21,7 @@ // Qt #include #include +#include #include // Project @@ -243,9 +244,46 @@ settingsPartitionSpaceCheck(); #endif findPendingLogs(); + checkWiFi(); } /*! + * \brief DeviceController::checkWiFi + * \details Periodically check for WiFi network + */ +void DeviceController::checkWiFi() +{ + QString mInfo; + QNetworkInterface dev; + QList addresses; + + bool mWifiError = false; + + mInfo = tr("WiFi Connection Error"); + if ( ! _wifiAvailable ) { goto lError; } + + mInfo = tr("No WiFi"); + dev = QNetworkInterface::interfaceFromName(_interface); + if ( ! dev.isValid() ) { goto lError; } + + addresses = dev.addressEntries(); + mInfo = tr("WiFi Not Connected"); + if ( addresses.isEmpty() ) { goto lError; } + + if ( ! ( dev.flags().testFlag(QNetworkInterface::IsUp) && + dev.flags().testFlag(QNetworkInterface::IsRunning) ) ) { goto lError; } + + mInfo = addresses.first().ip().toString(); + goto lOut; + +lError: + mWifiError = true; + +lOut: + emit didWiFiIP(mInfo, mWifiError); +} + +/*! * \brief DeviceController::usbCheck * \details Runs usbSeek to mount or umount or remove it * regarding the state it's in. @@ -589,6 +627,7 @@ } _hasThread = true; checkConfugurationMountReady(); + checkWifiConnectionReady(); } /*! @@ -801,7 +840,6 @@ return; } - ////////////////////////////////////////////////////////////////////////////////////////////////// DeviceUSBMounting void DeviceController::onAttributeRequest(const DeviceUSBMountRequestData &vData) { @@ -986,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; @@ -1032,7 +1069,7 @@ */ void DeviceController::wifiInfoRequest() { - // ----- check that script exists. + // ----- check that script exists. QString script; if ( checkError( DeviceError::checkScript(script, Scripts_Wifi_Info), _deviceWifiInfoResponse, script) ) return; @@ -1071,12 +1108,22 @@ } } else { + _wifiAvailable = true; processWifiInfoComplete(model, vExitCode, vStatus); emit didAttributeResponse(model.data()); model._data.clear(); } } +/*! + * \brief DeviceController::checkWifiConnectionReady + * \details This function will run the wifi_info.sh at start up when the + * device controller thread is ready + */ +void DeviceController::checkWifiConnectionReady() +{ + wifiInfoRequest(); +} ////////////////////////////////////////////////////////////////////////////////////////////////// DeviceWifiConnect void DeviceController::onAttributeRequest(const DeviceWifiConnectRequestData &vData) @@ -1137,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) { @@ -1154,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(); + } +} +