Index: denali.qrc =================================================================== diff -u -rd26aff743bca7eceb609ce5b30cea7cbfa39748f -raff2e3d6f0cf3827ed741e8dcd278d3e4008945a --- denali.qrc (.../denali.qrc) (revision d26aff743bca7eceb609ce5b30cea7cbfa39748f) +++ denali.qrc (.../denali.qrc) (revision aff2e3d6f0cf3827ed741e8dcd278d3e4008945a) @@ -32,6 +32,7 @@ sources/gui/qml/dialogs/NotificationDialog.qml sources/gui/qml/dialogs/AlarmListDialog.qml sources/gui/qml/dialogs/DiagnosticsDialog.qml + sources/gui/qml/dialogs/StatusDialog.qml resources/images/Logo d.png @@ -69,6 +70,10 @@ resources/images/chevron-left.png resources/images/chevron-right.png resources/images/DenaliDevice.png + resources/images/BTLogoNotConnected.png + resources/images/BTLogoConnected.png + resources/images/WifiLogoConnected.png + resources/images/WifiLogoNotConnected.png sources/gui/qml/components/MainMenu.qml @@ -146,6 +151,8 @@ sources/gui/qml/KeyboardItem.qml sources/gui/qml/SDCProgressItem.qml sources/gui/qml/USBProgressItem.qml + sources/gui/qml/BluetoothStatusIndicator.qml + sources/gui/qml/WifiStatusIndicator.qml sources/gui/qml/plugins/virtualkeyboard/styles/denali/images/backspace.svg Index: sources/bluetooth/BluetoothInterface.cpp =================================================================== diff -u -r2ef03b2ce51b4dc507f66e9671953a8e0824bde9 -raff2e3d6f0cf3827ed741e8dcd278d3e4008945a --- sources/bluetooth/BluetoothInterface.cpp (.../BluetoothInterface.cpp) (revision 2ef03b2ce51b4dc507f66e9671953a8e0824bde9) +++ sources/bluetooth/BluetoothInterface.cpp (.../BluetoothInterface.cpp) (revision aff2e3d6f0cf3827ed741e8dcd278d3e4008945a) @@ -1233,9 +1233,20 @@ */ void BluetoothInterface::interpretInformation() { + QString vendorName; + QString modelNumberString; for ( auto const &detail: _serviceDeviceInformation->characteristics()) { + switch(detail.uuid().toUInt32()) + { + case QBluetoothUuid::ManufacturerNameString : vendorName = detail.value(); break; + case QBluetoothUuid::ModelNumberString : modelNumberString = detail.value(); break; + default: + break; + } + qDebug() << " ~~~~~ " << detail.name() << detail.uuid() << detail.value(); } + emit didDeviceInfoUpdated(vendorName, modelNumberString); } /*! Index: sources/bluetooth/BluetoothInterface.h =================================================================== diff -u -r2ef03b2ce51b4dc507f66e9671953a8e0824bde9 -raff2e3d6f0cf3827ed741e8dcd278d3e4008945a --- sources/bluetooth/BluetoothInterface.h (.../BluetoothInterface.h) (revision 2ef03b2ce51b4dc507f66e9671953a8e0824bde9) +++ sources/bluetooth/BluetoothInterface.h (.../BluetoothInterface.h) (revision aff2e3d6f0cf3827ed741e8dcd278d3e4008945a) @@ -174,6 +174,7 @@ void didActionReceive (const UIBloodPressureData &vData); void didDeviceChange (const BluetoothDeviceData &vDevice); void didDeviceSelect (const BluetoothDeviceData &vDevice); + void didDeviceInfoUpdated (const QString &vVendorName, const QString &vModelName); SAFE_CALL(doStart) // start the bluetooth adapter. SAFE_CALL(doScan ) // scan for devices. Index: sources/gui/qml/SDCProgressItem.qml =================================================================== diff -u -r2ef03b2ce51b4dc507f66e9671953a8e0824bde9 -raff2e3d6f0cf3827ed741e8dcd278d3e4008945a --- sources/gui/qml/SDCProgressItem.qml (.../SDCProgressItem.qml) (revision 2ef03b2ce51b4dc507f66e9671953a8e0824bde9) +++ sources/gui/qml/SDCProgressItem.qml (.../SDCProgressItem.qml) (revision aff2e3d6f0cf3827ed741e8dcd278d3e4008945a) @@ -35,7 +35,6 @@ readonly property int sizePowers : 1000000 - readonly property alias totalText : _totalText.text readonly property alias total : _progressCircle.maximum readonly property alias avail : _progressCircle.value readonly property alias percent : _percent.text @@ -69,15 +68,6 @@ value : _GuiView.sdAvail / sizePowers // convert to MB since the value in byte is too big for ProgressCircle. color : ! _GuiView.sdIsReady ? "red" : _GuiView.sdIsReadOnly ? "gray" : _GuiView.sdIsLow ? Colors.red : "green" } - Text { id: _totalText - visible : _GuiView.sdIsReady && displayInformation - anchors.top: parent.bottom - anchors.horizontalCenter: parent.horizontalCenter - color : Colors.white - text : Variables.sizeConverted( _GuiView.sdTotal, _root.sizePowers ) - font.pixelSize: 12 - font.bold: true - } MouseArea { id: _mouseArea anchors.fill : parent Index: sources/gui/qml/globals/Colors.qml =================================================================== diff -u -r2ef03b2ce51b4dc507f66e9671953a8e0824bde9 -raff2e3d6f0cf3827ed741e8dcd278d3e4008945a --- sources/gui/qml/globals/Colors.qml (.../Colors.qml) (revision 2ef03b2ce51b4dc507f66e9671953a8e0824bde9) +++ sources/gui/qml/globals/Colors.qml (.../Colors.qml) (revision aff2e3d6f0cf3827ed741e8dcd278d3e4008945a) @@ -125,6 +125,11 @@ readonly property color scrollBarBgColor : white //"#80696969" // half transparent dimgray + readonly property color progressCircleConnected : "green" + readonly property color progressCircleNotReady : "#53667d" // unselected color + readonly property color progressCircleError : "red" + readonly property color statusDialogTitle : "#438FEB" + // ---------- < PRS > Related Section ---------- // Alarm priority colors function alarmPriorityColors(vPriority) { Index: sources/gui/qml/globals/Fonts.qml =================================================================== diff -u -r2ef03b2ce51b4dc507f66e9671953a8e0824bde9 -raff2e3d6f0cf3827ed741e8dcd278d3e4008945a --- sources/gui/qml/globals/Fonts.qml (.../Fonts.qml) (revision 2ef03b2ce51b4dc507f66e9671953a8e0824bde9) +++ sources/gui/qml/globals/Fonts.qml (.../Fonts.qml) (revision aff2e3d6f0cf3827ed741e8dcd278d3e4008945a) @@ -88,6 +88,7 @@ readonly property int fontPixelDebugTitle : 25 readonly property int fontPixelDebugText : 28 readonly property int fontPixelDebugLabel : 15 + readonly property int fontPixelStatusDialogText : 15 readonly property string fontFamilyFixed : "Noto Sans CJK SC" } Index: sources/gui/qml/globals/Variables.qml =================================================================== diff -u -r2ef03b2ce51b4dc507f66e9671953a8e0824bde9 -raff2e3d6f0cf3827ed741e8dcd278d3e4008945a --- sources/gui/qml/globals/Variables.qml (.../Variables.qml) (revision 2ef03b2ce51b4dc507f66e9671953a8e0824bde9) +++ sources/gui/qml/globals/Variables.qml (.../Variables.qml) (revision aff2e3d6f0cf3827ed741e8dcd278d3e4008945a) @@ -67,6 +67,7 @@ readonly property int dialogWidth : applicationWidth - dialogMargin readonly property int dialogHeight : applicationHeight - dialogMargin readonly property int dialogRadius : 10 + readonly property int dialogSpaceFromIcon : 2 readonly property int rangeRectMargin : 1 readonly property int rangeRectRadius : 2 Index: sources/gui/qml/main.qml =================================================================== diff -u -r2ef03b2ce51b4dc507f66e9671953a8e0824bde9 -raff2e3d6f0cf3827ed741e8dcd278d3e4008945a --- sources/gui/qml/main.qml (.../main.qml) (revision 2ef03b2ce51b4dc507f66e9671953a8e0824bde9) +++ sources/gui/qml/main.qml (.../main.qml) (revision aff2e3d6f0cf3827ed741e8dcd278d3e4008945a) @@ -297,21 +297,6 @@ font.pixelSize: 14 } - Text { // TEST : Wireless IP - color : Colors.textMain - anchors { - top : parent.top - left : parent.left - leftMargin : 325 - } - horizontalAlignment : Text.Alignleft - verticalAlignment : Text.AlignBottom - - height : 15 - text : "W:" + vNetwork.wirelessIP - font.pixelSize: 15 - } - Text { // TEST : Ethernet IP color : Colors.textMain anchors { @@ -327,21 +312,6 @@ font.pixelSize: 15 } - Text { // TEST : BluetoothStatus - color : Colors.textMain - anchors { - top : parent.top - left : parent.left - leftMargin : 615 - } - horizontalAlignment : Text.Alignleft - verticalAlignment : Text.AlignBottom - - height : 15 - text : "B:" + vBluetooth.pairedAddr - font.pixelSize: 14 - } - Text { // TEST : The treatment vital dialog countdown time color : Colors.textMain anchors { @@ -361,8 +331,10 @@ color : Colors.textMain anchors { top : parent.top - left : parent.left - leftMargin : 1080 + topMargin : 10 + + right : parent.right + rightMargin : 75 } horizontalAlignment : Text.Alignleft verticalAlignment : Text.AlignBottom @@ -376,8 +348,10 @@ color : Colors.textMain anchors { top : parent.top - left : parent.left - leftMargin : 1220 + topMargin : 10 + + right : parent.right + rightMargin : 25 } horizontalAlignment : Text.Alignleft verticalAlignment : Text.AlignBottom @@ -387,8 +361,32 @@ font.pixelSize: 14 } + WifiStatusIndicator { id: _wifiStatusIndicator + anchors { + top : parent.top + topMargin : 5 + + right : _bluetoothStatusIndicator.right + rightMargin : 50 + } + } + BluetoothStatusIndicator { id: _bluetoothStatusIndicator + anchors { + top : parent.top + right : parent.right + topMargin : 5 + rightMargin : 300 + } + } + SDCProgressItem { id: _sdcProgressItem // TODO: disable this later. this is only for diagnostic purpose. + anchors { + top : parent.top + right : parent.right + topMargin : 5 + rightMargin : 250 + } onDoubleClicked : { if ( _GuiView.dryDemoMode ) { let dryDemoTempID = 99 Index: sources/model/hd/alarm/MAlarmMapping.cpp =================================================================== diff -u -rbe412cdc8b103d4b9de5c883e4f521668bc9bcec -raff2e3d6f0cf3827ed741e8dcd278d3e4008945a --- sources/model/hd/alarm/MAlarmMapping.cpp (.../MAlarmMapping.cpp) (revision be412cdc8b103d4b9de5c883e4f521668bc9bcec) +++ sources/model/hd/alarm/MAlarmMapping.cpp (.../MAlarmMapping.cpp) (revision aff2e3d6f0cf3827ed741e8dcd278d3e4008945a) @@ -307,7 +307,7 @@ /*0271*/case GuiAlarmID::ALARM_ID_DG_SAFETY_SHUTDOWN_POST_TEST_FAILED : { result = QObject::tr("DG POST Safety Shutdown failure." ); break; } /* 271*/ /*0272*/case GuiAlarmID::ALARM_ID_HD_FAN_RPM_OUT_OF_RANGE : { result = QObject::tr("HD Fan RPM out of range." ); break; } /* 272*/ /*0273*/case GuiAlarmID::ALARM_ID_AVAILABLE_10 : { result = QObject::tr("Available for use." ); break; } /* 273*/ -/*0274*/case GuiAlarmID::ALARM_ID_AVAILABLE_11 : { result = QObject::tr("Available for use." ); break; } /* 274*/ +/*0274*/case GuiAlarmID::ALARM_ID_DG_INACTIVE_RESERVOIR_WEIGHT_OUT_OF_RANGE : { result = QObject::tr("DG inactive reservoir weight out of range." ); break; } /* 274*/ /*0275*/case GuiAlarmID::ALARM_ID_HD_ARTERIAL_PRESSURE_OUT_OF_RANGE : { result = QObject::tr("HD arterial pressure sensor is reading out of range." ); break; } /* 275*/ /*0276*/case GuiAlarmID::ALARM_ID_HD_VENOUS_PRESSURE_OUT_OF_RANGE : { result = QObject::tr("HD venous pressure sensor is reading out of range." ); break; } /* 276*/ /*0277*/case GuiAlarmID::ALARM_ID_HD_BP_OCCLUSION_OUT_OF_RANGE : { result = QObject::tr("HD BP occlusion sensor is reading out of range." ); break; } /* 277*/ Index: sources/view/settings/VBluetooth.cpp =================================================================== diff -u -r2ef03b2ce51b4dc507f66e9671953a8e0824bde9 -raff2e3d6f0cf3827ed741e8dcd278d3e4008945a --- sources/view/settings/VBluetooth.cpp (.../VBluetooth.cpp) (revision 2ef03b2ce51b4dc507f66e9671953a8e0824bde9) +++ sources/view/settings/VBluetooth.cpp (.../VBluetooth.cpp) (revision aff2e3d6f0cf3827ed741e8dcd278d3e4008945a) @@ -38,8 +38,11 @@ this , SLOT( onStateChange (BluetoothData ))); connect(&_BluetoothInterface, SIGNAL(didDeviceChange(BluetoothDeviceData)), this , SLOT( onDeviceChange(BluetoothDeviceData))); + connect(&_BluetoothInterface, SIGNAL(didDeviceInfoUpdated(QString, QString )), + this , SLOT( onDeviceInfoUpdated(QString, QString ))); connect(this , SIGNAL(didDeviceSelect(QString, QString )), this , SLOT( onDeviceSelect(QString, QString ))); + } /*! @@ -142,6 +145,7 @@ case MBluetooth::eIS_Device_Waiting : // Selected device connected and is in waiting mode for read. pairedAddr(vData.deviceAddr); pairedBatt(vData.deviceBatt); + pairedName(vData.deviceName); scanEnabled(true); break; @@ -317,6 +321,18 @@ } /*! + * \brief View::VBluetooth::onDeviceInfoUpdated + * \details Sets the vendor name and model name properties + * \param vVendorName - the vendor name associated with the remote device + * \param vModelName - the model string of the remote device + */ +void View::VBluetooth::onDeviceInfoUpdated(const QString &vVendorName, const QString &vModelName) +{ + pairedVendorName(vVendorName); + pairedModelName (vModelName ); +} + +/*! * \brief View::VBluetooth::doScan * \details calls the Bluetooth Interface scan to start discovering the Bluetooth devices. */ Index: sources/view/settings/VBluetooth.h =================================================================== diff -u -r2ef03b2ce51b4dc507f66e9671953a8e0824bde9 -raff2e3d6f0cf3827ed741e8dcd278d3e4008945a --- sources/view/settings/VBluetooth.h (.../VBluetooth.h) (revision 2ef03b2ce51b4dc507f66e9671953a8e0824bde9) +++ sources/view/settings/VBluetooth.h (.../VBluetooth.h) (revision aff2e3d6f0cf3827ed741e8dcd278d3e4008945a) @@ -16,6 +16,7 @@ // Qt #include +#include // Project #include "main.h" // Doxygen : do not remove @@ -50,7 +51,10 @@ PROPERTY(qint16 , error , 0 ) PROPERTY(QString , pairedAddr , "" ) + PROPERTY(QString , pairedName , "" ) PROPERTY(quint8 , pairedBatt , 0 ) + PROPERTY(QString , pairedVendorName , "" ) + PROPERTY(QString , pairedModelName , "" ) // List Model public: @@ -83,6 +87,8 @@ QString toText (Model::MBluetooth::InterfaceStates vState) const; void notify (Model::MBluetooth::InterfaceStates vState); + void onDeviceInfoUpdated(const QString &vVendorName, const QString &vModelName); + public slots: void doScan (); }; Index: sources/view/settings/VNetworkModel.cpp =================================================================== diff -u -r2ef03b2ce51b4dc507f66e9671953a8e0824bde9 -raff2e3d6f0cf3827ed741e8dcd278d3e4008945a --- sources/view/settings/VNetworkModel.cpp (.../VNetworkModel.cpp) (revision 2ef03b2ce51b4dc507f66e9671953a8e0824bde9) +++ sources/view/settings/VNetworkModel.cpp (.../VNetworkModel.cpp) (revision aff2e3d6f0cf3827ed741e8dcd278d3e4008945a) @@ -302,7 +302,18 @@ dns(vNetwork.mIPSettings.mDNS.trimmed()); ssid(vNetwork.ssid().trimmed()); macAddress(vNetwork.macAddress().trimmed()); + wifiSignalStrength(vNetwork.signalLevel()); + + QString securityTypes = MWifiNetwork::securityTypesToStringList(vNetwork.securityTypes()).join("/"); + wifiSecurityType(securityTypes); + status(tr("Connected to %1.").arg(vNetwork.ssid()).trimmed()); + + // If the security type list is empty, this indicates that this is a reconnection + // upon start-up. Need to do a scan and get updated + if (securityTypes.isEmpty()){ + doScan(); + } } /*! Index: sources/view/settings/VNetworkModel.h =================================================================== diff -u -r2ef03b2ce51b4dc507f66e9671953a8e0824bde9 -raff2e3d6f0cf3827ed741e8dcd278d3e4008945a --- sources/view/settings/VNetworkModel.h (.../VNetworkModel.h) (revision 2ef03b2ce51b4dc507f66e9671953a8e0824bde9) +++ sources/view/settings/VNetworkModel.h (.../VNetworkModel.h) (revision aff2e3d6f0cf3827ed741e8dcd278d3e4008945a) @@ -56,6 +56,8 @@ PROPERTY(QString , macAddress , "") PROPERTY(QString , ethernetIP , "") PROPERTY(QString , wirelessIP , "") + PROPERTY(QString , wifiSecurityType , "") + PROPERTY(int ,wifiSignalStrength, 0) public: // Note: VIEW_DEC_CLASS(VNetworkModel) requires QObject as the parent, so it's necessary to define it here Index: sources/wifi/WifiInterface.cpp =================================================================== diff -u -r2ef03b2ce51b4dc507f66e9671953a8e0824bde9 -raff2e3d6f0cf3827ed741e8dcd278d3e4008945a --- sources/wifi/WifiInterface.cpp (.../WifiInterface.cpp) (revision 2ef03b2ce51b4dc507f66e9671953a8e0824bde9) +++ sources/wifi/WifiInterface.cpp (.../WifiInterface.cpp) (revision aff2e3d6f0cf3827ed741e8dcd278d3e4008945a) @@ -256,7 +256,23 @@ LOG_DEBUG(QString("stderr: %1").arg(err)); _scanRunning = false; emit didScanStatusChanged(_scanRunning); - parseWifiScan(out); + QList networks = parseWifiScan(out); + + // A non-empty macAddress indicates UI is connected to a network + // if the network security type list is empty, this indicates that the connection + // was a result of a start-up reconnection. Traverse through discovered networks + // and update the security type list and signal strength info + if(!_network.macAddress().isEmpty() && _network.securityTypes().isEmpty()) { + foreach(WifiNetworkData network, networks){ + if(network.macAddress() == _network.macAddress()){ + // update the security and signal info + _network.securityTypes(network.securityTypes()); + _network.signalLevel(network.signalLevel()); + emit didConnectToNetwork(_network); + } + } + } + LOG_DEBUG("WiFi Scan Finished"); }