Index: denali.qrc =================================================================== diff -u -r559dc64d12cf7647ec8c29ccbf4ca90f90e5e3a2 -r9c7a790376d07de7ddaa67e39d47102d68693c87 --- denali.qrc (.../denali.qrc) (revision 559dc64d12cf7647ec8c29ccbf4ca90f90e5e3a2) +++ denali.qrc (.../denali.qrc) (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -17,6 +17,10 @@ sources/gui/qml/pages/settings/SettingsBluetoothCuff.qml sources/gui/qml/pages/settings/SettingsExportLogs.qml sources/gui/qml/pages/settings/SettingsDeviceRegistration.qml + sources/gui/qml/pages/settings/SettingsInformation.qml + sources/gui/qml/pages/settings/SettingsROInput.qml + sources/gui/qml/pages/settings/SettingsServicePassword.qml + sources/gui/qml/pages/settings/SettingsManufacturingSetup.qml sources/gui/qml/dialogs/PowerOff.qml Index: main.cpp =================================================================== diff -u -r6d76149dca70e879f33bf6ed44203d0d06bc523a -r9c7a790376d07de7ddaa67e39d47102d68693c87 --- main.cpp (.../main.cpp) (revision 6d76149dca70e879f33bf6ed44203d0d06bc523a) +++ main.cpp (.../main.cpp) (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -90,8 +90,8 @@ bool gDisableSDCFailLogStop = false ; bool gDisableCloudSyncFailStop = false ; -bool gEnableCheckInLog = false ; -bool gEnableAcknowLog = false ; +bool gDisableCheckInLog = false ; +bool gDisableAcknowLog = false ; bool gConsoleoutLogs = false ; bool gConsoleoutFrameInterface = false ; @@ -100,8 +100,11 @@ bool gEnableDryDemo = false ; QString gActiveCANBus = "can0"; +bool gEnableManufacturing = false ; + QString gParserErrorText = ""; + /*! * \page CommandLineSwitches Denali Command Line Switches * \verbatim @@ -229,17 +232,17 @@ QCoreApplication::translate("main", "disable-cloudsync-fail-stop")); parser.addOption(optionDisableCloudSyncFailStop); - // --- -k : enable-Check-in-log (keep-alive) - QCommandLineOption optionEnableCheckInLog( - QStringList() << "k" << "enable-check-in-log", - QCoreApplication::translate("main", "Enables Check-In Log")); - parser.addOption(optionEnableCheckInLog); + // --- -k : disable-Check-in-log (keep-alive) + QCommandLineOption optionDisableCheckInLog( + QStringList() << "k" << "disable-check-in-log", + QCoreApplication::translate("main", "Disables Check-In Log")); + parser.addOption(optionDisableCheckInLog); - // --- -K : enable-acknow-log (Acknowledge) - QCommandLineOption optionEnableAcknowLog( - QStringList() << "K" << "enable-acknow-log", - QCoreApplication::translate("main", "Enables Acknowledgment Log")); - parser.addOption(optionEnableAcknowLog); + // --- -K : disable-acknow-log (Acknowledge) + QCommandLineOption optionDisableAcknowLog( + QStringList() << "K" << "disable-acknow-log", + QCoreApplication::translate("main", "Disables Acknowledgment Log")); + parser.addOption(optionDisableAcknowLog); // --- -D : enable-dry-demo QCommandLineOption optionEnableDryDemo( @@ -254,6 +257,12 @@ QCoreApplication::translate("main", "CANBus")); parser.addOption(optionActiveCANBus); + // --- -E : enable-manufacturing + QCommandLineOption optionEnableManufacturing( + QStringList() << "E" << "enable-manufacturing", + QCoreApplication::translate("main", "Enables the manufacturing mode to configure the system for the first time.")); + parser.addOption(optionEnableManufacturing); + // --- parse command lines if ( ! parser.parse(qApp->arguments()) ) { gParserErrorText = parser.errorText(); @@ -271,11 +280,13 @@ gDisableSDCFailLogStop = parser.isSet(optionDisableSDCardFailLogStop ); gDisableCloudSyncFailStop = parser.isSet(optionDisableCloudSyncFailStop ); - gEnableCheckInLog = parser.isSet(optionEnableCheckInLog ); - gEnableAcknowLog = parser.isSet(optionEnableAcknowLog ); + gDisableCheckInLog = parser.isSet(optionDisableCheckInLog ); + gDisableAcknowLog = parser.isSet(optionDisableAcknowLog ); gEnableDryDemo = parser.isSet(optionEnableDryDemo ); + gEnableManufacturing = parser.isSet(optionEnableManufacturing ); + if ( parser.isSet(optionActiveCANBus ) ) { QString value = parser.value(optionActiveCANBus); if ( ! value.startsWith("-") && // if a value is not given for the switch then the next switch becomes the value of the previous one Index: scripts/run.sh =================================================================== diff -u -r28845c70151c3fb6f1a8e92c82da0232b6ca854a -r9c7a790376d07de7ddaa67e39d47102d68693c87 --- scripts/run.sh (.../run.sh) (revision 28845c70151c3fb6f1a8e92c82da0232b6ca854a) +++ scripts/run.sh (.../run.sh) (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -195,7 +195,7 @@ #launching denali application DENALI_VERSION="$($HOME/$DENALI_BIN -v)" if [ -n "$DENALI_VERSION" ]; then - post_log_pass "$($HOME/$DENALI_BIN -v)" # log UI Software version + post_log_pass "$DENALI_VERSION" # log UI Software version $HOME/$DENALI_BIN -u -C & # -C to disable cloudsync for now sync it blocks the system and no cloudsync has been installed. else post_log_fail "Unknown Applicaion Version" Index: scripts/start.sh =================================================================== diff -u -rc9f8f8cf3c6c37fc6460d8675c62c9442c4d4263 -r9c7a790376d07de7ddaa67e39d47102d68693c87 --- scripts/start.sh (.../start.sh) (revision c9f8f8cf3c6c37fc6460d8675c62c9442c4d4263) +++ scripts/start.sh (.../start.sh) (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -217,8 +217,7 @@ } function wipe_device() { - sshRun "rm -frd *" - sshRun "rm -frd .*" + sshRun "rm -frd $(ls -A -I '.ssh')" } function main() { Index: sources/canbus/MessageDispatcher.cpp =================================================================== diff -u -rd949be21f2a9badd0978dddaaf436f6805de28dc -r9c7a790376d07de7ddaa67e39d47102d68693c87 --- sources/canbus/MessageDispatcher.cpp (.../MessageDispatcher.cpp) (revision d949be21f2a9badd0978dddaaf436f6805de28dc) +++ sources/canbus/MessageDispatcher.cpp (.../MessageDispatcher.cpp) (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -830,7 +830,7 @@ bool mNeedsAcknow = needsAcknow(vActionId); if (mNeedsAcknow) { mSequence = -mSequence; - if ( gEnableAcknowLog ) { + if ( ! gDisableAcknowLog ) { LOG_APPED(tr("UI,Ack Req, Sq:%1, ID:%2").arg(mSequence).arg(Format::toHexString(vActionId))); } #ifdef DEBUG_ACKBACK_HD_TO_UI @@ -904,7 +904,7 @@ bool ok = false; if ( mActionId == GuiActionType::ID_Acknow ) { ok = true; - if ( gEnableAcknowLog ) { + if ( ! gDisableAcknowLog ) { LOG_APPED(tr("%1,Ack Bak, Sq:%2").arg(vSrcText).arg(mSequence)); } #ifdef DEBUG_ACKBACK_HD_TO_UI @@ -933,7 +933,7 @@ if (mSequence < 0) { ok = true; - if ( gEnableAcknowLog ) { + if ( ! gDisableAcknowLog ) { LOG_APPED(tr("%1,Ack Req, Sq:%2, ID:%3").arg(vSrcText).arg(mSequence).arg(Format::toHexString(mActionId))); } #ifdef DEBUG_ACKBACK_HD_TO_UI @@ -943,7 +943,7 @@ QString dstText; Can_Id dstID = MessageInterpreter::identifyDestination(vMessage.can_id, &dstText); actionTransmit(GuiActionType::ID_Acknow, {}, -mSequence, dstID); - if ( gEnableAcknowLog ) { + if ( ! gDisableAcknowLog ) { LOG_APPED(tr("UI,Ack Bak, Sq:%1, Dst:%2").arg(-mSequence).arg(dstText)); } #ifdef DEBUG_ACKBACK_HD_TO_UI Index: sources/canbus/MessageInterpreter.cpp =================================================================== diff -u -rd949be21f2a9badd0978dddaaf436f6805de28dc -r9c7a790376d07de7ddaa67e39d47102d68693c87 --- sources/canbus/MessageInterpreter.cpp (.../MessageInterpreter.cpp) (revision d949be21f2a9badd0978dddaaf436f6805de28dc) +++ sources/canbus/MessageInterpreter.cpp (.../MessageInterpreter.cpp) (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -211,7 +211,7 @@ if ( length ) { // this message has a variable length vPayload = Format::fromVariant(vData.first()); } - if ( gEnableCheckInLog ) + if ( ! gDisableCheckInLog ) LOG_APPED_UI(QString("CheckIn")); break; Index: sources/gui/GuiView.h =================================================================== diff -u -ra6586ea871f21a08e7d50552983360fb5e344b3a -r9c7a790376d07de7ddaa67e39d47102d68693c87 --- sources/gui/GuiView.h (.../GuiView.h) (revision a6586ea871f21a08e7d50552983360fb5e344b3a) +++ sources/gui/GuiView.h (.../GuiView.h) (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -78,7 +78,8 @@ PROPERTY(GuiStringIndexMap , exportList , {}) READONLY(GuiUint08IndexMap , exportListPercent , {}) - READONLY(bool , dryDemoMode , gEnableDryDemo ) + READONLY(bool , dryDemoMode , gEnableDryDemo ) + READONLY(bool , manufactSetup , gEnableManufacturing ) public: explicit GuiView(QObject *parent = nullptr); Index: sources/gui/qml/components/MainMenu.qml =================================================================== diff -u -ra1386c22cd8c011a3fc1dc8dac2136cbee7890c2 -r9c7a790376d07de7ddaa67e39d47102d68693c87 --- sources/gui/qml/components/MainMenu.qml (.../MainMenu.qml) (revision a1386c22cd8c011a3fc1dc8dac2136cbee7890c2) +++ sources/gui/qml/components/MainMenu.qml (.../MainMenu.qml) (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -39,6 +39,7 @@ property bool hasLogo : false property int currentIndex : 0 property string currentTitle : titles[currentIndex] + property bool disable : false /*! * \brief Emits when a menu item pressed @@ -167,10 +168,11 @@ // hidden animation to hide the menu nicely. Behavior on y { PropertyAnimation { /*duration: 500; easing.type: Easing.OutBounce*/ } } onHiddenChanged: { + let isHidden = hidden || disable if ( position === MainMenu.Position.Top ) { - y = hidden ? - Variables.mainMenuHeight : 0 + y = isHidden ? - Variables.mainMenuHeight : 0 } else { - y = Variables.applicationHeight - (hidden ? 0 : Variables.mainMenuHeight) + y = Variables.applicationHeight - (isHidden ? 0 : Variables.mainMenuHeight) } } } Index: sources/gui/qml/main.qml =================================================================== diff -u -re6751c7048908beab6a5572041bef62feaa4662f -r9c7a790376d07de7ddaa67e39d47102d68693c87 --- sources/gui/qml/main.qml (.../main.qml) (revision e6751c7048908beab6a5572041bef62feaa4662f) +++ sources/gui/qml/main.qml (.../main.qml) (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -257,16 +257,18 @@ function isManager () { _mainMenu.itemPressed(1) } function isSettings () { _mainMenu.itemPressed(2) } - hidden: true // it should be hidden by default since the landing screen changed to init and it does not have the main menu untill the POST passes. - titles : [ qsTr("Treatment") , qsTr("Manager") , qsTr("Settings") ] - visibleItems : [ true , false , true ] - Component.onCompleted: { + disable : _GuiView.manufactSetup + hidden : true // it should be hidden by default since the landing screen changed to init and it does not have the main menu untill the POST passes. + titles : [ qsTr("Treatment") , qsTr("Manager") , qsTr("Settings") ] + visibleItems : [ true , false , true ] + Component.onCompleted : { _settingsStack.visible = false _managerStack .visible = false _mainStack .visible = true } onItemPressed: { + if ( disable ) return _mainStack .visible = vIndex == 0 _managerStack .visible = vIndex == 1 _settingsStack.visible = vIndex == 2 Index: sources/gui/qml/pages/MainStack.qml =================================================================== diff -u -r828e0b187e2fa3f75d769938bede41ef34683493 -r9c7a790376d07de7ddaa67e39d47102d68693c87 --- sources/gui/qml/pages/MainStack.qml (.../MainStack.qml) (revision 828e0b187e2fa3f75d769938bede41ef34683493) +++ sources/gui/qml/pages/MainStack.qml (.../MainStack.qml) (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -38,6 +38,8 @@ // DEBUG: this property can mostly be used for debugging to get pass the initial screen property var initialItem: _postModeScreen + property var _startupScreen: _GuiView.manufactSetup ? _settingsStack : _mainHome + stackView.initialItem : _root.initialItem // Standby / Disinfection @@ -56,12 +58,6 @@ // Post Treatment PostTreatmentStack { id: _postTreatmentStack } - ScreenItem { id: _faultModeScreen - // we recently decided to not change the screen on fault and stay on current(whatever are we on currently) screen. - PlaceHolderText { screenName: qsTr("FAULT MODE") } - onVisibleChanged: if (visible) _mainMenu.hidden = true - } - ScreenItem { id: _serviceModeScreen PlaceHolderText { screenName: qsTr("SERVICE MODE") } onVisibleChanged: if (visible) _mainMenu.hidden = true @@ -134,7 +130,7 @@ // "vHDOperationMode.fault" , vHDOperationMode .fault , // "vHDOperationMode.opMode" , vHDOperationMode .opMode ) if ( vSettings.noCANBus ) { - page( _mainHome , + page( _startupScreen , vHDOperationMode.fault || // in fault mode vHDOperationMode.init || // in initial post mode vHDOperationMode.opMode === 0 // has not even been initialized , which most probably is the case. @@ -148,13 +144,13 @@ function onIsManagerChanged ( vValue ) { if( vValue ) _mainMenu.isManager () } function onIsSettingsChanged ( vValue ) { if( vValue ) _mainMenu.isSettings () } - function onFaultChanged ( vValue ) { page( _mainHome , vValue )} - function onServiceChanged ( vValue ) { page( _serviceModeScreen , vValue )} + function onFaultChanged ( vValue ) { page( _startupScreen , vValue )} + function onServiceChanged ( vValue ) { } function onInitChanged ( vValue ) { page( _postModeScreen , vValue && ! vSettings.noCANBus ) if( vValue ) vHDPOSTData.reset() // better to reset on vinit = true because the rest makes the screen animation to run } - function onHomeChanged ( vValue ) { page( _mainHome , vValue )} + function onHomeChanged ( vValue ) { page( _startupScreen , vValue )} function onStandbyChanged ( vValue ) { /* It depends on the subModes of the standBy. Handled by onHome. */ } function onStandbyStartChanged ( vValue ) { /* It depends on the subModes of the standBy. Handled by onHome. */ } function onStandbyWaitTreatmentChanged ( vValue ) { /* It depends on the subModes of the standBy. Handled by onHome. */ } Index: sources/gui/qml/pages/settings/SettingsBluetoothCuff.qml =================================================================== diff -u -rc9f8f8cf3c6c37fc6460d8675c62c9442c4d4263 -r9c7a790376d07de7ddaa67e39d47102d68693c87 --- sources/gui/qml/pages/settings/SettingsBluetoothCuff.qml (.../SettingsBluetoothCuff.qml) (revision c9f8f8cf3c6c37fc6460d8675c62c9442c4d4263) +++ sources/gui/qml/pages/settings/SettingsBluetoothCuff.qml (.../SettingsBluetoothCuff.qml) (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -27,9 +27,10 @@ * \brief SettingsBluetoothCuff is used to scan for Omron Bluetooth Cuff * devices and to let user to connect to it to be able to read the Vital measurements. */ -SettingsBase { id: _root - itemIndex : SettingsStack.Bluetooth +SettingsBase { id: _root + itemIndex : SettingsStack.Bluetooth confirmVisible : false + Image { id: _image width : 640 height : 480 Index: sources/gui/qml/pages/settings/SettingsDG.qml =================================================================== diff -u -rc9f8f8cf3c6c37fc6460d8675c62c9442c4d4263 -r9c7a790376d07de7ddaa67e39d47102d68693c87 --- sources/gui/qml/pages/settings/SettingsDG.qml (.../SettingsDG.qml) (revision c9f8f8cf3c6c37fc6460d8675c62c9442c4d4263) +++ sources/gui/qml/pages/settings/SettingsDG.qml (.../SettingsDG.qml) (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -33,7 +33,9 @@ * - Heat Disinfection \n * on daily cycle at certain time of the day */ -SettingsBase { id: _root +SettingsBase { id: _root + itemIndex : SettingsStack.DGSettings + readonly property bool enableScheduling: false // TODO : phase 1 doesn't have this feature (disinfection schedule) QtObject { id: _settingsDG Index: sources/gui/qml/pages/settings/SettingsDateTime.qml =================================================================== diff -u -rc9f8f8cf3c6c37fc6460d8675c62c9442c4d4263 -r9c7a790376d07de7ddaa67e39d47102d68693c87 --- sources/gui/qml/pages/settings/SettingsDateTime.qml (.../SettingsDateTime.qml) (revision c9f8f8cf3c6c37fc6460d8675c62c9442c4d4263) +++ sources/gui/qml/pages/settings/SettingsDateTime.qml (.../SettingsDateTime.qml) (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -27,7 +27,8 @@ * \brief SettingsDateTimeSet is used to adjust the * date and time on the device */ -SettingsBase { id: _root +SettingsBase { id: _root + itemIndex : SettingsStack.SetDateTime labelWidth : 275 entryWidth : 100 Index: sources/gui/qml/pages/settings/SettingsDeviceRegistration.qml =================================================================== diff -u -r6d76149dca70e879f33bf6ed44203d0d06bc523a -r9c7a790376d07de7ddaa67e39d47102d68693c87 --- sources/gui/qml/pages/settings/SettingsDeviceRegistration.qml (.../SettingsDeviceRegistration.qml) (revision 6d76149dca70e879f33bf6ed44203d0d06bc523a) +++ sources/gui/qml/pages/settings/SettingsDeviceRegistration.qml (.../SettingsDeviceRegistration.qml) (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -29,10 +29,10 @@ * \brief SettingsWiFi * The settings screen to setup the WiFi connection */ -SettingsBase { id: _root +SettingsBase { id: _root itemIndex : SettingsStack.DeviceRegistration - confirmVisible : false + confirmVisible : false labelWidth : 150 entryWidth : 350 Index: sources/gui/qml/pages/settings/SettingsExportLogs.qml =================================================================== diff -u -r265600079f9f3b741cd3e67c229f39ec66571419 -r9c7a790376d07de7ddaa67e39d47102d68693c87 --- sources/gui/qml/pages/settings/SettingsExportLogs.qml (.../SettingsExportLogs.qml) (revision 265600079f9f3b741cd3e67c229f39ec66571419) +++ sources/gui/qml/pages/settings/SettingsExportLogs.qml (.../SettingsExportLogs.qml) (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -37,7 +37,8 @@ /*! * \brief SettingsExportLogs is used to Export logs, and display the SD-Card and USB device informaiton and list of files. */ -SettingsBase { id: _root +SettingsBase { id: _root + itemIndex : SettingsStack.ExportLogs //////////////////////////////////////////////////////////////////////////////// // FIXME: The model being used here is the QML FileListModel. // @@ -79,7 +80,6 @@ readonly property var typeFilterClr : [] - itemIndex : SettingsStack.ExportLogs confirmVisible : false function refreshModels() { Index: sources/gui/qml/pages/settings/SettingsHome.qml =================================================================== diff -u -rc9f8f8cf3c6c37fc6460d8675c62c9442c4d4263 -r9c7a790376d07de7ddaa67e39d47102d68693c87 --- sources/gui/qml/pages/settings/SettingsHome.qml (.../SettingsHome.qml) (revision c9f8f8cf3c6c37fc6460d8675c62c9442c4d4263) +++ sources/gui/qml/pages/settings/SettingsHome.qml (.../SettingsHome.qml) (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -59,7 +59,7 @@ width : 300 height : Variables.logoDiameter text.text: qsTr("Clear Alarm Condition") - onClicked: _alarmItem.clearAlarm() + onClicked: _alarmItem.clearAlarm() } } Index: sources/gui/qml/pages/settings/SettingsInformation.qml =================================================================== diff -u --- sources/gui/qml/pages/settings/SettingsInformation.qml (revision 0) +++ sources/gui/qml/pages/settings/SettingsInformation.qml (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -0,0 +1,90 @@ +/*! + * + * Copyright (c) 2021-2023 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file SettingsInformation.qml + * \author (last) Behrouz NematiPour + * \date (last) 11-May-2023 + * \author (original) Behrouz NematiPour + * \date (original) 11-May-2023 + * + */ + +// Qt +import QtQuick 2.12 + +// Qml imports +import "qrc:/globals" +import "qrc:/compounds" + + +/*! + * \brief SettingsInformation is the screen + * which queries the system for the versions and serial numbers and service records + * and display them + */ +SettingsBase { id: _root + itemIndex : SettingsStack.Information + + confirmVisible : false + + onVisibleChanged: { + if ( visible ) { + vAdjustmentVersions .doAdjustment() + vAdjustmentServiceDates .doAdjustment() + } + } + + TouchGrid { + anchors.centerIn: parent + colCount : 2 + colSpacing : 50 + rowCount : 8 + rowSpacing : 0 + itemHeight : 50 + itemWidth : 550 + touchable : false + itemsHasLine: [ + 0, // title C1 + 1,1,1,1,1,1,1, + 0, // title C2 + 1,1,1,1, + ] + itemsValueLeftMargin: 300 + itemsValue : [ + "" , + Qt .application.version, + vAdjustmentVersions .hdVerDevice , + vAdjustmentVersions .hdVerFPGA , + vAdjustmentVersions .hdSerial , + vAdjustmentVersions .dgVerDevice , + vAdjustmentVersions .dgVerFPGA , + vAdjustmentVersions .dgSerial , + "", + vAdjustmentServiceDates .hdLastServiceDate , + vAdjustmentServiceDates .hdNextServiceDate , + vAdjustmentServiceDates .dgLastServiceDate , + vAdjustmentServiceDates .dgNextServiceDate , + ] + itemsText : [ + qsTr("Versions" ), // col1 title + qsTr("UI Version" ), + qsTr("HD Version" ), + qsTr("HD FPGA Version" ), + qsTr("HD Serial Number" ), + qsTr("DG Version" ), + qsTr("DG FPGA Version" ), + qsTr("DG Serial Number" ), + + qsTr("Service" ), // col2 title + qsTr("HD Last Service Date" ), + qsTr("HD Next Service Date" ), + qsTr("DG Last Service Date" ), + qsTr("DG Next Service Date" ), + + ] + } +} Index: sources/gui/qml/pages/settings/SettingsManufacturingSetup.qml =================================================================== diff -u --- sources/gui/qml/pages/settings/SettingsManufacturingSetup.qml (revision 0) +++ sources/gui/qml/pages/settings/SettingsManufacturingSetup.qml (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -0,0 +1,31 @@ +/*! + * + * Copyright (c) 2021-2023 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file SettingsManufacturingSetup.qml + * \author (last) Behrouz NematiPour + * \date (last) 11-May-2023 + * \author (original) Behrouz NematiPour + * \date (original) 11-May-2023 + * + */ + +// Qt +import QtQuick 2.12 + +// Qml imports +import "qrc:/globals" +import "qrc:/compounds" + + +/*! + * \brief SettingsManufacturingSetup is the screen + * which helps the manufacturing during the device setup + */ +SettingsBase { id: _root + itemIndex : SettingsStack.DeviceConfiguration + confirmVisible : false +} Index: sources/gui/qml/pages/settings/SettingsROInput.qml =================================================================== diff -u --- sources/gui/qml/pages/settings/SettingsROInput.qml (revision 0) +++ sources/gui/qml/pages/settings/SettingsROInput.qml (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -0,0 +1,105 @@ +/*! + * + * Copyright (c) 2021-2023 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file SettingsROInput.qml + * \author (last) Behrouz NematiPour + * \date (last) 11-May-2023 + * \author (original) Behrouz NematiPour + * \date (original) 11-May-2023 + * + */ + +// Qt +import QtQuick 2.12 +import QtQuick.Controls 2.12 // Switch + + +// Qml imports +import "qrc:/globals" + +/*! + * \brief SettingsROInput is the screen + * which enables the Ro Water Input + */ +SettingsBase { id: _root + itemIndex : SettingsStack.RoInput + + confirmVisible : false + + Row { id: _settingsRoInputRow + anchors.centerIn: parent + + Text { id : _settingsRoInputLabel + text : qsTr("Pure Water Mode") + width : 300 + height : _settingsRoInputSwitch.height + color : Colors.white + font.pixelSize: Fonts.fontPixelButton + verticalAlignment : Text.AlignVCenter + horizontalAlignment : Text.AlignLeft + } + + Switch { id: _settingsRoInputSwitch + property bool active: true + + checked : vDuetRoWaterDG.status + + width : 85 + height : 85 + + indicator: Rectangle { + implicitWidth : Variables.sliderCircleDiameter * 1.7 + implicitHeight : Variables.sliderCircleDiameter - ( Variables.progressbarHandlerBorderWidth * 2 ) + radius : implicitHeight + anchors.centerIn: parent + color : _settingsRoInputSwitch.checked ? Colors.backgroundButtonSelect : Colors.createTreatmentInactive + border.color : _settingsRoInputSwitch.checked ? Colors.borderButton : Colors.createTreatmentInactive + Rectangle { + property real diameter : Variables.sliderCircleDiameter + x: _settingsRoInputSwitch.checked ? parent.width - width : 0 + anchors.verticalCenter: parent.verticalCenter + width : diameter + height : diameter + radius : diameter + color : _settingsRoInputSwitch.active ? Colors.highlightProgressBar : Colors.createTreatmentInactive + border { + width: Variables.progressbarHandlerBorderWidth + color: Colors.textMain + } + } + } + + contentItem: Text { + width : parent.width + height : parent.height + text : _settingsRoInputSwitch.checked ? qsTr("ON") : qsTr("OFF") + font.pixelSize: Fonts.fontPixelButton + color : _settingsRoInputSwitch.active ? Colors.textMain : Colors.textDisableButton + verticalAlignment : Text.AlignTop + horizontalAlignment : Text.AlignHCenter + } + } + } + + Connections { target: _settingsRoInputSwitch + function onClicked() { + vDuetRoWaterDG.doAdjustment ( _settingsRoInputSwitch.checked ) + } + } + Connections { target: vDuetRoWaterDG + function onAdjustmentTriggered(vValue) { + if ( vDuetRoWaterDG.adjustment_Accepted ) { + _settingsRoInput.notificationText = "" + } + else { + _settingsRoInput.notificationText = vDuetRoWaterDG.notification // adjustment_ReasonText + } + vSettings.roWaterMode = vDuetRoWaterDG.status + } + } +} + Index: sources/gui/qml/pages/settings/SettingsServicePassword.qml =================================================================== diff -u --- sources/gui/qml/pages/settings/SettingsServicePassword.qml (revision 0) +++ sources/gui/qml/pages/settings/SettingsServicePassword.qml (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -0,0 +1,69 @@ +/*! + * + * Copyright (c) 2021-2023 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file SettingsServicePassword.qml + * \author (last) Behrouz NematiPour + * \date (last) 11-May-2023 + * \author (original) Behrouz NematiPour + * \date (original) 11-May-2023 + * + */ + +// Qt +import QtQuick 2.12 + +// Qml imports +import "qrc:/globals" +import "qrc:/pages" + +/*! + * \brief SettingsServicePassword is the screen + * which asks service password + */ +UserConfirmation{ id: _root + itemIndex : SettingsStack.ServicePassword + + property bool isPassword_Accepted : false + property bool isDefaultPasswordSet : (vSettings.servicePass != "") + + backVisible : ! _GuiView.manufactSetup + title : isDefaultPasswordSet ? qsTr("Service Password") : qsTr("Set Service Password") + isPassword : true + showPasswordReEntryField: !isDefaultPasswordSet + onBackClicked : { + clearPassword() + if(!isDefaultPasswordSet){ + clearPasswordReEntry() + } + _settingsHome.notificationText = "" + } + onConfirmClicked: { + isPassword_Accepted = false + let password = _root.password + if ( !isDefaultPasswordSet ) { + let passwordReEntry = _root.passwordReEntry + if ( password != passwordReEntry ) { _root.notificationText = qsTr("Mismatched Password Entry"); return } + if (!vSettings.isPasswordValid(password)) { _root.notificationText = qsTr("Malformed Password Entry" ); return } + + vSettings.updatePassword(password) + _root.isPassword_Accepted = true + _root.notificationText = "" + clearPasswordReEntry() + } else { + if (!vSettings.isPasswordMatch(password)) { _root.notificationText = qsTr("Incorrect service password"); return } + + _root.isPassword_Accepted = true + _root.notificationText = "" + vAdjustmentServiceMode.doAdjustment() + if ( vSettings.noCANBus ) { // if NoCANBus is set don't wait for HD and go to service mode. + gotoServiceMode(true) + } + } + clearPassword() + page(_settingsHome) + } +} Index: sources/gui/qml/pages/settings/SettingsStack.qml =================================================================== diff -u -r69b3aa965cd8187c66114a9753c162cc526d9678 -r9c7a790376d07de7ddaa67e39d47102d68693c87 --- sources/gui/qml/pages/settings/SettingsStack.qml (.../SettingsStack.qml) (revision 69b3aa965cd8187c66114a9753c162cc526d9678) +++ sources/gui/qml/pages/settings/SettingsStack.qml (.../SettingsStack.qml) (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -15,7 +15,6 @@ // Qt import QtQuick 2.12 -import QtQuick.Controls 2.12 // Switch // Project import Gui.Actions 0.1 @@ -36,7 +35,7 @@ StackItem { id : _root objectName: "_SettingsStack" - stackView.initialItem : _settingsHome + stackView.initialItem : _GuiView.manufactSetup ? _servicePassword : _settingsHome property bool serviceMode : false @@ -46,13 +45,14 @@ WiFi , Bluetooth , DGSettings , - Services , + ServicePassword , SetDateTime , ExportLogs , RoInput , Language , Calibration , DeviceRegistration , + DeviceConfiguration , SWUpdate , FactoryReset } @@ -62,13 +62,14 @@ qsTr("Wi-Fi" ), // WiFi qsTr("Bluetooth Cuff" ), // Bluetooth qsTr("DG Cleaning" ), // DGSettings - qsTr("Service" ), // Service + qsTr("Service" ), // servicePassword qsTr("Set Date And Time" ), // SetDateTime qsTr("Export Logs" ), // ExportLogs qsTr("Water Input Mode" ), // RoInput qsTr("Set Language" ), // Language qsTr("Calibration " ), // Calibration qsTr("Device Registration" ), // DeviceRegistration + qsTr("Device Configuration" ), // Manufacturing Setup qsTr("Software Update" ), // SWUpdate qsTr("Factory Reset" ), // FactoryReset ] @@ -78,35 +79,37 @@ true , // WiFi true , // Bluetooth true , // DGSettings - true , // Services + true , // ServicePassword true , // SetDateTime true , // ExportLogs true , // RoInput false , // Language false , // Calibration true , // DeviceRegistration + _GuiView.manufactSetup , // Manufacturing Setup false , // SWUpdate - false , // FactoryReset + serviceMode , // FactoryReset ] property var itemsVisible : [ true , // Information true , // VolumeBrightness true , // WiFi true , // Bluetooth - true , // DGSettings - ! serviceMode , // Services + ! _GuiView.manufactSetup , // DGSettings + ! serviceMode , // ServicePassword serviceMode , // SetDateTime - true , // ExportLogs - true , // RoInput + ! _GuiView.manufactSetup , // ExportLogs + ! _GuiView.manufactSetup , // RoInput false /* serviceMode phase 1 */ , // Language false /* serviceMode phase 1 */ , // Calibration - true /* serviceMode */ , // DeviceRegistration // FIXME: On the normal setting menu for now for development. + _GuiView.manufactSetup , // DeviceRegistration + serviceMode && _GuiView.manufactSetup, // Manufacturing Setup false /* serviceMode phase 1 */ , // SWUpdate - false /* serviceMode phase 1 */ , // FactoryReset + serviceMode /* serviceMode phase 1 */ , // FactoryReset ] SettingsHome { id : _settingsHome - title : serviceMode ? qsTr("Service") : qsTr("Device Settings") + title : _GuiView.manufactSetup ? qsTr("Manufacturing Setup") : serviceMode ? qsTr("Service") : qsTr("Device Settings") backVisible : false confirmVisible : serviceMode confirmText.text: qsTr("SHUTDOWN") @@ -139,7 +142,7 @@ push( _settingsDGSettings ) break - case SettingsStack.Services: + case SettingsStack.ServicePassword: push(_servicePassword) _servicePassword.setFocus() break @@ -162,219 +165,39 @@ push( _settingsDeviceRegistration ) break + case SettingsStack.DeviceConfiguration: + push( _settingsDeviceConfiguration ) + break + default: console.debug("Unknown Index", vIndex) break } } } - SettingsBase { id: _settingsInformation - itemIndex : SettingsStack.Information - confirmVisible : false - onVisibleChanged: { - if ( visible ) { - vAdjustmentVersions .doAdjustment() - vAdjustmentServiceDates .doAdjustment() - } - } + SettingsManufacturingSetup { id: _settingsDeviceConfiguration } + SettingsInformation { id: _settingsInformation } + SettingsVolumeBrightness { id: _settingsVolumeBrightness } + SettingsDateTime { id: _settingsDateTime } + SettingsWiFi { id: _settingsWiFi } + SettingsBluetoothCuff { id: _settingsBluetooth } + SettingsDG { id: _settingsDGSettings } + SettingsExportLogs { id: _settingsExportLogs } + SettingsROInput { id: _settingsRoInput } + SettingsDeviceRegistration { id: _settingsDeviceRegistration } + SettingsServicePassword { id: _servicePassword } - TouchGrid { - anchors.centerIn: parent - colCount : 2 - colSpacing : 50 - rowCount : 8 - rowSpacing : 0 - itemHeight : 50 - itemWidth : 550 - touchable : false - itemsHasLine: [ - 0, // title C1 - 1,1,1,1,1,1,1, - 0, // title C2 - 1,1,1,1, - ] - itemsValueLeftMargin: 300 - itemsValue : [ - "" , - Qt .application.version, - vAdjustmentVersions .hdVerDevice , - vAdjustmentVersions .hdVerFPGA , - vAdjustmentVersions .hdSerial , - vAdjustmentVersions .dgVerDevice , - vAdjustmentVersions .dgVerFPGA , - vAdjustmentVersions .dgSerial , - "", - vAdjustmentServiceDates .hdLastServiceDate , - vAdjustmentServiceDates .hdNextServiceDate , - vAdjustmentServiceDates .dgLastServiceDate , - vAdjustmentServiceDates .dgNextServiceDate , - ] - itemsText : [ - qsTr("Versions" ), // col1 title - qsTr("UI Version" ), - qsTr("HD Version" ), - qsTr("HD FPGA Version" ), - qsTr("HD Serial Number" ), - qsTr("DG Version" ), - qsTr("DG FPGA Version" ), - qsTr("DG Serial Number" ), - - qsTr("Service" ), // col2 title - qsTr("HD Last Service Date" ), - qsTr("HD Next Service Date" ), - qsTr("DG Last Service Date" ), - qsTr("DG Next Service Date" ), - - ] - } + function gotoServiceMode( vservice ) { + if ( ! _servicePassword.isPassword_Accepted ) return + serviceMode = vservice + if ( vservice ) + _mainMenu.hidden = true + else + if ( _settingsHome.visible ) + _mainMenu.hidden = false } - SettingsVolumeBrightness { id: _settingsVolumeBrightness - itemIndex : SettingsStack.VolumeBrightness - } - - SettingsDateTime { id: _settingsDateTime - itemIndex : SettingsStack.SetDateTime - } - - SettingsWiFi { id: _settingsWiFi - itemIndex : SettingsStack.WiFi - } - - SettingsBluetoothCuff { id: _settingsBluetooth - } - - SettingsDG { id: _settingsDGSettings - itemIndex : SettingsStack.DGSettings - } - - SettingsExportLogs { id: _settingsExportLogs - itemIndex : SettingsStack.ExportLogs - } - - SettingsBase { id: _settingsRoInput - confirmVisible : false - itemIndex : SettingsStack.RoInput - - - Row { id: _settingsRoInputRow - anchors.centerIn: parent - - Text { id : _settingsRoInputLabel - text : qsTr("Pure Water Mode") - width : 300 - height : _settingsRoInputSwitch.height - color : Colors.white - font.pixelSize: Fonts.fontPixelButton - verticalAlignment : Text.AlignVCenter - horizontalAlignment : Text.AlignLeft - } - - Switch { id: _settingsRoInputSwitch - property bool active: true - - checked : vDuetRoWaterDG.status - - width : 85 - height : 85 - - indicator: Rectangle { - implicitWidth : Variables.sliderCircleDiameter * 1.7 - implicitHeight : Variables.sliderCircleDiameter - ( Variables.progressbarHandlerBorderWidth * 2 ) - radius : implicitHeight - anchors.centerIn: parent - color : _settingsRoInputSwitch.checked ? Colors.backgroundButtonSelect : Colors.createTreatmentInactive - border.color : _settingsRoInputSwitch.checked ? Colors.borderButton : Colors.createTreatmentInactive - Rectangle { - property real diameter : Variables.sliderCircleDiameter - x: _settingsRoInputSwitch.checked ? parent.width - width : 0 - anchors.verticalCenter: parent.verticalCenter - width : diameter - height : diameter - radius : diameter - color : _settingsRoInputSwitch.active ? Colors.highlightProgressBar : Colors.createTreatmentInactive - border { - width: Variables.progressbarHandlerBorderWidth - color: Colors.textMain - } - } - } - - contentItem: Text { - width : parent.width - height : parent.height - text : _settingsRoInputSwitch.checked ? qsTr("ON") : qsTr("OFF") - font.pixelSize: Fonts.fontPixelButton - color : _settingsRoInputSwitch.active ? Colors.textMain : Colors.textDisableButton - verticalAlignment : Text.AlignTop - horizontalAlignment : Text.AlignHCenter - } - } - } - - Connections { target: _settingsRoInputSwitch - function onClicked() { - vDuetRoWaterDG.doAdjustment ( _settingsRoInputSwitch.checked ) - } - } - Connections { target: vDuetRoWaterDG - function onAdjustmentTriggered(vValue) { - if ( vDuetRoWaterDG.adjustment_Accepted ) { - _settingsRoInput.notificationText = "" - } - else { - _settingsRoInput.notificationText = vDuetRoWaterDG.notification // adjustment_ReasonText - } - vSettings.roWaterMode = vDuetRoWaterDG.status - } - } - } - - SettingsDeviceRegistration { id: _settingsDeviceRegistration } - - UserConfirmation { id: _servicePassword - property bool isPassword_Accepted : false - property bool isDefaultPasswordSet : (vSettings.servicePass != "") - - itemIndex : SettingsStack.Services - title : isDefaultPasswordSet ? qsTr("Service Password") : qsTr("Set Service Password") - isPassword: true - showPasswordReEntryField: !isDefaultPasswordSet - onBackClicked : { - clearPassword() - if(!isDefaultPasswordSet){ - clearPasswordReEntry() - } - _settingsHome.notificationText = "" - } - onConfirmClicked: { - isPassword_Accepted = false - let password = _servicePassword.password - if ( !isDefaultPasswordSet ) { - let passwordReEntry = _servicePassword.passwordReEntry - if ( password != passwordReEntry ) { _servicePassword.notificationText = qsTr("Mismatched Password Entry"); return } - if (!vSettings.isPasswordValid(password)) { _servicePassword.notificationText = qsTr("Malformed Password Entry" ); return } - - vSettings.updatePassword(password) - _servicePassword.isPassword_Accepted = true - _servicePassword.notificationText = "" - clearPasswordReEntry() - } else { - if (!vSettings.isPasswordMatch(password)) { _servicePassword.notificationText = qsTr("Incorrect service password"); return } - - _servicePassword.isPassword_Accepted = true - _servicePassword.notificationText = "" - vAdjustmentServiceMode.doAdjustment() - if ( vSettings.noCANBus ) { // if NoCANBus is set don't wait for HD and go to service mode. - gotoServiceMode(true) - } - } - clearPassword() - pop() // pop back to settings screen and wait for the HD-OpMode change to Service_Mode to update the settings screen. - } - } - Connections { target: vAdjustmentServiceMode function onAdjustmentTriggered ( vValue ) { if ( vAdjustmentServiceMode.adjustment_Accepted ) { @@ -386,25 +209,14 @@ } } - function gotoServiceMode( vservice ) { - if ( ! _servicePassword.isPassword_Accepted ) return - serviceMode = vservice - if ( vservice ) - _mainMenu.hidden = true - else - if ( _settingsHome.visible ) - _mainMenu.hidden = false - } - - Connections { target: vHDOperationMode function onServiceChanged ( vValue ) { gotoServiceMode( vValue )} function onStandbyWaitDisinfectChanged ( vValue ) { page( _settingsHome , vValue )} } onVisibleChanged: { if (visible) { - _mainMenu.hidden = serviceMode + _mainMenu.hidden = serviceMode || _GuiView.manufactSetup } else { stackView.initialItem = null Index: sources/gui/qml/pages/settings/SettingsVolumeBrightness.qml =================================================================== diff -u -r7c86f3854db9ad02d95681203198d75a0d65c9fa -r9c7a790376d07de7ddaa67e39d47102d68693c87 --- sources/gui/qml/pages/settings/SettingsVolumeBrightness.qml (.../SettingsVolumeBrightness.qml) (revision 7c86f3854db9ad02d95681203198d75a0d65c9fa) +++ sources/gui/qml/pages/settings/SettingsVolumeBrightness.qml (.../SettingsVolumeBrightness.qml) (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -27,7 +27,9 @@ * \brief SettingsVolumeBrightness is used to adjust the * volume (alarm/system), brightness on the device */ -SettingsBase { id: _root +SettingsBase { id: _root + itemIndex : SettingsStack.VolumeBrightness + readonly property int spacing: 50 confirmVisible : false Index: sources/gui/qml/pages/settings/SettingsWiFi.qml =================================================================== diff -u -r28845c70151c3fb6f1a8e92c82da0232b6ca854a -r9c7a790376d07de7ddaa67e39d47102d68693c87 --- sources/gui/qml/pages/settings/SettingsWiFi.qml (.../SettingsWiFi.qml) (revision 28845c70151c3fb6f1a8e92c82da0232b6ca854a) +++ sources/gui/qml/pages/settings/SettingsWiFi.qml (.../SettingsWiFi.qml) (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -28,7 +28,8 @@ * \brief SettingsWiFi * The settings screen to setup the WiFi connection */ -SettingsBase { id: _root +SettingsBase { id: _root + itemIndex : SettingsStack.WiFi property var ipValidator: RegExpValidator { regExp:/^(([01]?[0-9]?[0-9]|2([0-4][0-9]|5[0-5]))\.){3}([01]?[0-9]?[0-9]|2([0-4][0-9]|5[0-5]))$/ Index: sources/main.h =================================================================== diff -u -r2dd4e9c952d65e68f1c81a1cfc13d1f96b0d7d43 -r9c7a790376d07de7ddaa67e39d47102d68693c87 --- sources/main.h (.../main.h) (revision 2dd4e9c952d65e68f1c81a1cfc13d1f96b0d7d43) +++ sources/main.h (.../main.h) (revision 9c7a790376d07de7ddaa67e39d47102d68693c87) @@ -91,16 +91,18 @@ extern bool gDisableSDCFailLogStop ; extern bool gDisableCloudSyncFailStop ; -extern bool gEnableCheckInLog ; -extern bool gEnableAcknowLog ; +extern bool gDisableCheckInLog ; +extern bool gDisableAcknowLog ; extern bool gConsoleoutLogs ; extern bool gConsoleoutFrameInterface ; extern bool gConsoleoutCanInterface ; extern bool gEnableDryDemo ; extern QString gActiveCANBus ; +extern bool gEnableManufacturing ; + //--------------------------------------------------------------------------------// //--------------------------------------------------------------------------------// #define SKIPPER_DEF(X) \