Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qgroundcontrol
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Valentin Platzgummer
qgroundcontrol
Commits
fdfb5a3e
Commit
fdfb5a3e
authored
May 25, 2017
by
Don Gagne
Committed by
GitHub
May 25, 2017
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #5191 from bluerobotics/sub-safety-page
Rework Sub Safety setup
parents
1ab55919
b77f0b98
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
292 additions
and
171 deletions
+292
-171
APMSafetyComponentSub.qml
src/AutoPilotPlugins/APM/APMSafetyComponentSub.qml
+260
-147
APMSafetyComponentSummarySub.qml
src/AutoPilotPlugins/APM/APMSafetyComponentSummarySub.qml
+31
-23
APMSubFrameComponentSummary.qml
src/AutoPilotPlugins/APM/APMSubFrameComponentSummary.qml
+1
-1
No files found.
src/AutoPilotPlugins/APM/APMSafetyComponentSub.qml
View file @
fdfb5a3e
...
...
@@ -12,6 +12,7 @@ import QtQuick 2.3
import
QtQuick
.
Controls
1.2
import
QtGraphicalEffects
1.0
import
QGroundControl
1.0
import
QGroundControl
.
FactSystem
1.0
import
QGroundControl
.
FactControls
1.0
import
QGroundControl
.
Palette
1.0
...
...
@@ -34,21 +35,27 @@ SetupPage {
QGCPalette
{
id
:
ggcPal
;
colorGroupEnabled
:
true
}
property
var
_activeVehicle
:
QGroundControl
.
multiVehicleManager
.
activeVehicle
property
bool
_firmware34
:
_activeVehicle
.
firmwareMajorVersion
==
3
&&
_activeVehicle
.
firmwareMinorVersion
==
4
// Enable/Action parameters
property
Fact
_failsafeBatteryEnable
:
controller
.
getParameterFact
(
-
1
,
"
FS_BATT_ENABLE
"
)
property
Fact
_failsafeEKFEnable
:
controller
.
getParameterFact
(
-
1
,
"
FS_EKF_ACTION
"
)
property
Fact
_failsafeGCSEnable
:
controller
.
getParameterFact
(
-
1
,
"
FS_GCS_ENABLE
"
)
property
Fact
_failsafeLeakEnable
:
controller
.
getParameterFact
(
-
1
,
"
FS_LEAK_ENABLE
"
)
property
Fact
_failsafePilotEnable
:
controller
.
getParameterFact
(
-
1
,
"
FS_PILOT_INPUT
"
)
property
Fact
_failsafePressureEnable
:
controller
.
getParameterFact
(
-
1
,
"
FS_PRESS_ENABLE
"
)
property
Fact
_failsafePressureValue
:
controller
.
getParameterFact
(
-
1
,
"
FS_PRESS_MAX
"
)
property
Fact
_failsafeTempEnable
:
controller
.
getParameterFact
(
-
1
,
"
FS_TEMP_ENABLE
"
)
property
Fact
_failsafeTempValue
:
controller
.
getParameterFact
(
-
1
,
"
FS_TEMP_MAX
"
)
property
Fact
_fenceAction
:
controller
.
getParameterFact
(
-
1
,
"
FENCE_ACTION
"
)
property
Fact
_fenceAltMax
:
controller
.
getParameterFact
(
-
1
,
"
r.FENCE_ALT_MIN
"
)
property
Fact
_fenceEnable
:
controller
.
getParameterFact
(
-
1
,
"
FENCE_ENABLE
"
)
property
Fact
_fenceMargin
:
controller
.
getParameterFact
(
-
1
,
"
FENCE_MARGIN
"
)
property
Fact
_fenceType
:
controller
.
getParameterFact
(
-
1
,
"
FENCE_TYPE
"
)
property
Fact
_leakPin
:
controller
.
getParameterFact
(
-
1
,
"
LEAK1_PIN
"
)
property
Fact
_leakLogic
:
controller
.
getParameterFact
(
-
1
,
"
LEAK1_LOGIC
"
)
property
Fact
_failsafeTemperatureEnable
:
controller
.
getParameterFact
(
-
1
,
"
FS_TEMP_ENABLE
"
)
// Threshold parameters
property
Fact
_failsafePressureThreshold
:
controller
.
getParameterFact
(
-
1
,
"
FS_PRESS_MAX
"
)
property
Fact
_failsafeTemperatureThreshold
:
controller
.
getParameterFact
(
-
1
,
"
FS_TEMP_MAX
"
)
property
Fact
_failsafePilotTimeout
:
controller
.
getParameterFact
(
-
1
,
"
FS_PILOT_TIMEOUT
"
)
property
Fact
_failsafeLeakPin
:
controller
.
getParameterFact
(
-
1
,
"
LEAK1_PIN
"
)
property
Fact
_failsafeLeakLogic
:
controller
.
getParameterFact
(
-
1
,
"
LEAK1_LOGIC
"
)
property
Fact
_failsafeEKFThreshold
:
controller
.
getParameterFact
(
-
1
,
"
FS_EKF_THRESH
"
)
property
Fact
_failsafeBatteryVoltage
:
controller
.
getParameterFact
(
-
1
,
"
FS_BATT_VOLTAGE
"
)
property
Fact
_failsafeBatteryCapacity
:
controller
.
getParameterFact
(
-
1
,
"
FS_BATT_MAH
"
)
property
Fact
_armingCheck
:
controller
.
getParameterFact
(
-
1
,
"
ARMING_CHECK
"
)
...
...
@@ -67,158 +74,264 @@ SetupPage {
}
Rectangle
{
id
:
failsafe
Settings
width
:
leakEnableCombo
.
x
+
leakEnableCombo
.
width
+
_margins
height
:
leakEnableCombo
.
y
+
leakEnableCombo
.
height
+
_margins
id
:
failsafe
Rectangle
width
:
flowLayout
.
width
height
:
childrenRect
.
height
+
_margins
color
:
ggcPal
.
windowShade
Column
{
anchors.top
:
failsafeRectangle
.
top
anchors.left
:
failsafeRectangle
.
left
anchors.margins
:
_margins
/
2
property
var
_labelWidth
:
ScreenTools
.
defaultFontPixelWidth
*
15
property
var
_editWidth
:
ScreenTools
.
defaultFontPixelWidth
*
20
id
:
failsafeSettings
spacing
:
ScreenTools
.
defaultFontPixelHeight
Row
{
spacing
:
_margins
/
2
QGCLabel
{
id
:
gcsEnableLabel
anchors.margins
:
_margins
anchors.left
:
parent
.
left
width
:
failsafeSettings
.
_labelWidth
anchors.baseline
:
gcsEnableCombo
.
baseline
text
:
qsTr
(
"
Ground Station failsafe
:
"
)
text
:
qsTr
(
"
GCS Heartbeat
:
"
)
}
FactComboBox
{
id
:
gcsEnableCombo
anchors.margins
:
_margins
anchors.left
:
gcsEnableLabel
.
right
anchors.top
:
parent
.
top
width
:
ScreenTools
.
defaultFontPixelWidth
*
15
width
:
failsafeSettings
.
_editWidth
fact
:
_failsafeGCSEnable
indexModel
:
false
}
}
Row
{
spacing
:
_margins
/
2
QGCLabel
{
id
:
leakEnableLabel
anchors.margins
:
_margins
anchors.left
:
parent
.
left
width
:
failsafeSettings
.
_labelWidth
anchors.baseline
:
leakEnableCombo
.
baseline
text
:
qsTr
(
"
Leak failsafe
:
"
)
text
:
qsTr
(
"
Leak
:
"
)
}
FactComboBox
{
id
:
leakEnableCombo
anchors.topMargin
:
_margins
anchors.left
:
gcsEnableCombo
.
left
anchors.top
:
gcsEnableCombo
.
bottom
width
:
ScreenTools
.
defaultFontPixelWidth
*
15
width
:
failsafeSettings
.
_editWidth
fact
:
_failsafeLeakEnable
indexModel
:
false
}
}
// Rectangle - Failsafe Settings
}
// Column - Failsafe Settings
Column
{
QGCLabel
{
text
:
"
Detector Pin:
"
width
:
failsafeSettings
.
_labelWidth
visible
:
leakEnableCombo
.
currentIndex
!=
0
anchors.baseline
:
leakEnableCombo
.
baseline
}
FactComboBox
{
width
:
failsafeSettings
.
_editWidth
visible
:
leakEnableCombo
.
currentIndex
!=
0
anchors.baseline
:
leakEnableCombo
.
baseline
fact
:
_failsafeLeakPin
}
QGCLabel
{
text
:
"
Logic when Dry:
"
width
:
failsafeSettings
.
_labelWidth
visible
:
leakEnableCombo
.
currentIndex
!=
0
anchors.baseline
:
leakEnableCombo
.
baseline
}
FactComboBox
{
width
:
failsafeSettings
.
_editWidth
visible
:
leakEnableCombo
.
currentIndex
!=
0
anchors.baseline
:
leakEnableCombo
.
baseline
fact
:
_failsafeLeakLogic
}
}
Row
{
spacing
:
_margins
/
2
visible
:
!
_firmware34
QGCLabel
{
id
:
geoFenceLabel
text
:
qsTr
(
"
GeoFence
"
)
font.family
:
ScreenTools
.
demiboldFontFamily
id
:
batteryEnableLabel
width
:
failsafeSettings
.
_labelWidth
anchors.baseline
:
batteryEnableCombo
.
baseline
text
:
qsTr
(
"
Battery:
"
)
}
Rectangle
{
id
:
geoFenceSettings
width
:
fenceAltMaxField
.
x
+
fenceAltMaxField
.
width
+
_margins
height
:
fenceAltMaxField
.
y
+
fenceAltMaxField
.
height
+
_margins
color
:
ggcPal
.
windowShade
FactComboBox
{
id
:
batteryEnableCombo
width
:
failsafeSettings
.
_editWidth
fact
:
_failsafeBatteryEnable
indexModel
:
false
}
QGCCheckBox
{
id
:
altitudeGeo
anchors.margins
:
_margins
anchors.left
:
parent
.
left
anchors.top
:
parent
.
top
text
:
qsTr
(
"
Depth GeoFence enabled
\n
(report only)
"
)
checked
:
_fenceEnable
.
value
!=
0
&&
_fenceType
.
value
&
1
QGCLabel
{
text
:
"
Voltage:
"
width
:
failsafeSettings
.
_labelWidth
visible
:
batteryEnableCombo
.
currentIndex
!=
0
anchors.baseline
:
batteryEnableCombo
.
baseline
}
FactTextField
{
width
:
failsafeSettings
.
_editWidth
visible
:
batteryEnableCombo
.
currentIndex
!=
0
anchors.baseline
:
batteryEnableCombo
.
baseline
fact
:
_failsafeBatteryVoltage
}
QGCLabel
{
text
:
"
Remaining Capacity:
"
width
:
failsafeSettings
.
_labelWidth
visible
:
batteryEnableCombo
.
currentIndex
!=
0
anchors.baseline
:
batteryEnableCombo
.
baseline
}
onClicked
:
{
if
(
checked
)
{
if
(
_fenceEnable
.
value
==
1
)
{
_fenceType
.
value
|=
1
}
else
{
_fenceEnable
.
value
=
1
_fenceType
.
value
=
1
FactTextField
{
width
:
failsafeSettings
.
_editWidth
visible
:
batteryEnableCombo
.
currentIndex
!=
0
anchors.baseline
:
batteryEnableCombo
.
baseline
fact
:
_failsafeBatteryCapacity
}
}
else
{
_fenceEnable
.
value
=
0
_fenceType
.
value
=
0
}
Row
{
spacing
:
_margins
/
2
visible
:
!
_firmware34
QGCLabel
{
id
:
ekfEnableLabel
width
:
failsafeSettings
.
_labelWidth
anchors.baseline
:
ekfEnableCombo
.
baseline
text
:
qsTr
(
"
EKF:
"
)
}
FactComboBox
{
id
:
ekfEnableCombo
width
:
failsafeSettings
.
_editWidth
fact
:
_failsafeEKFEnable
indexModel
:
false
}
QGCLabel
{
id
:
fenceAltMaxLabel
anchors.left
:
altitudeGeo
.
left
anchors.baseline
:
fenceAltMaxField
.
baseline
text
:
qsTr
(
"
Max depth:
"
)
text
:
"
Threshold:
"
width
:
failsafeSettings
.
_labelWidth
visible
:
ekfEnableCombo
.
currentIndex
!=
0
anchors.baseline
:
ekfEnableCombo
.
baseline
}
FactTextField
{
id
:
fenceAltMaxField
anchors.topMargin
:
_margins
/
2
anchors.leftMargin
:
_margins
anchors.left
:
fenceAltMaxLabel
.
right
anchors.top
:
altitudeGeo
.
bottom
fact
:
_fenceAltMax
showUnits
:
true
width
:
failsafeSettings
.
_editWidth
visible
:
ekfEnableCombo
.
currentIndex
!=
0
anchors.baseline
:
ekfEnableCombo
.
baseline
fact
:
_failsafeEKFThreshold
}
}
}
// Rectangle - GeoFence Settings
}
// Column - GeoFence Settings
Column
{
Row
{
spacing
:
_margins
/
2
visible
:
!
_firmware34
QGCLabel
{
id
:
leakDetectorLabel
text
:
qsTr
(
"
Leak Detector
"
)
font.family
:
ScreenTools
.
demiboldFontFamily
id
:
pilotEnableLabel
width
:
failsafeSettings
.
_labelWidth
anchors.baseline
:
pilotEnableCombo
.
baseline
text
:
qsTr
(
"
Pilot Input:
"
)
}
Rectangle
{
id
:
leakDetectorSettings
width
:
leakLogicCombo
.
x
+
leakLogicCombo
.
width
+
_margins
height
:
leakLogicCombo
.
y
+
leakLogicCombo
.
height
+
_margins
color
:
ggcPal
.
windowShade
FactComboBox
{
id
:
pilotEnableCombo
width
:
failsafeSettings
.
_editWidth
fact
:
_failsafePilotEnable
indexModel
:
false
}
QGCLabel
{
id
:
leakPinLabel
anchors.margins
:
_margins
anchors.left
:
parent
.
left
anchors.top
:
parent
.
top
text
:
qsTr
(
"
Pin:
"
)
text
:
"
Timeout:
"
width
:
failsafeSettings
.
_labelWidth
visible
:
pilotEnableCombo
.
currentIndex
!=
0
anchors.baseline
:
pilotEnableCombo
.
baseline
}
FactTextField
{
width
:
failsafeSettings
.
_editWidth
visible
:
pilotEnableCombo
.
currentIndex
!=
0
anchors.baseline
:
pilotEnableCombo
.
baseline
fact
:
_failsafePilotTimeout
}
}
Row
{
spacing
:
_margins
/
2
QGCLabel
{
id
:
temperatureEnableLabel
width
:
failsafeSettings
.
_labelWidth
anchors.baseline
:
temperatureEnableCombo
.
baseline
text
:
qsTr
(
"
Internal Temperature:
"
)
}
FactComboBox
{
id
:
leakPinCombo
anchors.margins
:
_margins
anchors.left
:
leakLogicLabel
.
right
anchors.baseline
:
leakPinLabel
.
baseline
width
:
ScreenTools
.
defaultFontPixelWidth
*
15
fact
:
_leakPin
id
:
temperatureEnableCombo
width
:
failsafeSettings
.
_editWidth
fact
:
_failsafeTemperatureEnable
indexModel
:
false
}
QGCLabel
{
id
:
leakLogicLabel
anchors.margins
:
_margins
anchors.left
:
parent
.
left
anchors.top
:
leakPinLabel
.
bottom
text
:
qsTr
(
"
Logic (when dry):
"
)
text
:
"
Threshold:
"
width
:
failsafeSettings
.
_labelWidth
visible
:
temperatureEnableCombo
.
currentIndex
!=
0
anchors.baseline
:
temperatureEnableCombo
.
baseline
}
FactTextField
{
width
:
failsafeSettings
.
_editWidth
visible
:
temperatureEnableCombo
.
currentIndex
!=
0
anchors.baseline
:
temperatureEnableCombo
.
baseline
fact
:
_failsafeTemperatureThreshold
}
}
Row
{
spacing
:
_margins
/
2
QGCLabel
{
id
:
pressureEnableLabel
width
:
failsafeSettings
.
_labelWidth
anchors.baseline
:
pressureEnableCombo
.
baseline
text
:
qsTr
(
"
Internal Pressure:
"
)
}
FactComboBox
{
id
:
leakLogicCombo
anchors.margins
:
_margins
anchors.left
:
leakLogicLabel
.
right
anchors.baseline
:
leakLogicLabel
.
baseline
width
:
ScreenTools
.
defaultFontPixelWidth
*
15
fact
:
_leakLogic
id
:
pressureEnableCombo
width
:
failsafeSettings
.
_editWidth
fact
:
_failsafePressureEnable
indexModel
:
false
}
}
// Rectangle - Leak Detector Settings
}
// Column - Leak Detector Settings
QGCLabel
{
text
:
"
Threshold:
"
width
:
failsafeSettings
.
_labelWidth
visible
:
pressureEnableCombo
.
currentIndex
!=
0
anchors.baseline
:
pressureEnableCombo
.
baseline
}
FactTextField
{
width
:
failsafeSettings
.
_editWidth
visible
:
pressureEnableCombo
.
currentIndex
!=
0
anchors.baseline
:
pressureEnableCombo
.
baseline
fact
:
_failsafePressureThreshold
}
}
}
// Column - Failsafe Settings
}
// Rectangle - Failsafe Settings
}
// Column - Failsafe Settings
Column
{
spacing
:
_margins
/
2
...
...
src/AutoPilotPlugins/APM/APMSafetyComponentSummarySub.qml
View file @
fdfb5a3e
...
...
@@ -14,14 +14,24 @@ FactPanel {
QGCPalette
{
id
:
qgcPal
;
colorGroupEnabled
:
enabled
}
FactPanelController
{
id
:
controller
;
factPanel
:
panel
}
// Enable/Action parameters
property
Fact
_failsafeBatteryEnable
:
controller
.
getParameterFact
(
-
1
,
"
FS_BATT_ENABLE
"
)
property
Fact
_failsafeEKFEnable
:
controller
.
getParameterFact
(
-
1
,
"
FS_EKF_ACTION
"
)
property
Fact
_failsafeGCSEnable
:
controller
.
getParameterFact
(
-
1
,
"
FS_GCS_ENABLE
"
)
property
Fact
_failsafeLeakEnable
:
controller
.
getParameterFact
(
-
1
,
"
FS_LEAK_ENABLE
"
)
property
Fact
_failsafePilotEnable
:
controller
.
getParameterFact
(
-
1
,
"
FS_PILOT_INPUT
"
)
property
Fact
_failsafePressureEnable
:
controller
.
getParameterFact
(
-
1
,
"
FS_PRESS_ENABLE
"
)
property
Fact
_failsafeTemperatureEnable
:
controller
.
getParameterFact
(
-
1
,
"
FS_TEMP_ENABLE
"
)
property
Fact
_fenceAction
:
controller
.
getParameterFact
(
-
1
,
"
FENCE_ACTION
"
)
property
Fact
_fenceEnable
:
controller
.
getParameterFact
(
-
1
,
"
FENCE_ENABLE
"
)
property
Fact
_fenceType
:
controller
.
getParameterFact
(
-
1
,
"
FENCE_TYPE
"
)
property
Fact
_leakPin
:
controller
.
getParameterFact
(
-
1
,
"
LEAK1_PIN
"
)
// Threshold parameters
property
Fact
_failsafePressureThreshold
:
controller
.
getParameterFact
(
-
1
,
"
FS_PRESS_MAX
"
)
property
Fact
_failsafeTemperatureThreshold
:
controller
.
getParameterFact
(
-
1
,
"
FS_TEMP_MAX
"
)
property
Fact
_failsafePilotTimeout
:
controller
.
getParameterFact
(
-
1
,
"
FS_PILOT_TIMEOUT
"
)
property
Fact
_failsafeLeakPin
:
controller
.
getParameterFact
(
-
1
,
"
LEAK1_PIN
"
)
property
Fact
_failsafeLeakLogic
:
controller
.
getParameterFact
(
-
1
,
"
LEAK1_LOGIC
"
)
property
Fact
_failsafeEKFThreshold
:
controller
.
getParameterFact
(
-
1
,
"
FS_EKF_THRESH
"
)
property
Fact
_failsafeBatteryVoltage
:
controller
.
getParameterFact
(
-
1
,
"
FS_BATT_VOLTAGE
"
)
property
Fact
_failsafeBatteryCapacity
:
controller
.
getParameterFact
(
-
1
,
"
FS_BATT_MAH
"
)
property
Fact
_armingCheck
:
controller
.
getParameterFact
(
-
1
,
"
ARMING_CHECK
"
)
...
...
@@ -32,35 +42,33 @@ FactPanel {
labelText
:
qsTr
(
"
Arming Checks:
"
)
valueText
:
_armingCheck
.
value
&
1
?
qsTr
(
"
Enabled
"
)
:
qsTr
(
"
Some disabled
"
)
}
VehicleSummaryRow
{
labelText
:
qsTr
(
"
GCS failsafe:
"
)
valueText
:
_failsafeGCSEnable
.
enumOrValueString
}
VehicleSummaryRow
{
labelText
:
qsTr
(
"
Leak failsafe:
"
)
valueText
:
_failsafeLeakEnable
.
enumOrValueString
}
VehicleSummaryRow
{
labelText
:
qsTr
(
"
Leak detector
:
"
)
valueText
:
_leakPin
.
enumOrValueString
labelText
:
qsTr
(
"
Battery failsafe
:
"
)
valueText
:
_failsafeBatteryEnable
.
enumOrValueString
}
VehicleSummaryRow
{
labelText
:
qsTr
(
"
GeoFence:
"
)
valueText
:
_fenceEnable
.
value
==
0
||
_fenceType
==
0
?
qsTr
(
"
Disabled
"
)
:
(
_fenceType
.
value
==
1
?
qsTr
(
"
Depth
"
)
:
(
_fenceType
.
value
==
2
?
qsTr
(
"
Circle
"
)
:
qsTr
(
"
Depth,Circle
"
)))
labelText
:
qsTr
(
"
EKF failsafe:
"
)
valueText
:
_failsafeEKFEnable
.
enumOrValueString
}
VehicleSummaryRow
{
labelText
:
qsTr
(
"
Pilot Input failsafe:
"
)
valueText
:
_failsafePilotEnable
.
enumOrValueString
}
VehicleSummaryRow
{
labelText
:
qsTr
(
"
Int. Temperature failsafe:
"
)
valueText
:
_failsafeTemperatureEnable
.
enumOrValueString
}
VehicleSummaryRow
{
labelText
:
qsTr
(
"
GeoFence:
"
)
valueText
:
qsTr
(
"
Report only
"
)
visible
:
_fenceEnable
.
value
!=
0
labelText
:
qsTr
(
"
Int. Pressure failsafe:
"
)
valueText
:
_failsafePressureEnable
.
enumOrValueString
}
}
}
src/AutoPilotPlugins/APM/APMSubFrameComponentSummary.qml
View file @
fdfb5a3e
...
...
@@ -51,7 +51,7 @@ FactPanel {
VehicleSummaryRow
{
labelText
:
qsTr
(
"
Firmware Version:
"
)
valueText
:
activeVehicle
.
firmwareMajorVersion
==
-
1
?
qsTr
(
"
Unknown
"
)
:
activeVehicle
.
firmwareMajorVersion
+
"
.
"
+
activeVehicle
.
firmwareMinorVersion
+
"
.
"
+
activeVehicle
.
firmwarePatchVersion
+
"
-
"
+
activeVehicle
.
firmwareVersionTypeString
valueText
:
activeVehicle
.
firmwareMajorVersion
==
-
1
?
qsTr
(
"
Unknown
"
)
:
activeVehicle
.
firmwareMajorVersion
+
"
.
"
+
activeVehicle
.
firmwareMinorVersion
+
"
.
"
+
activeVehicle
.
firmwarePatchVersion
+
"
"
+
activeVehicle
.
firmwareVersionTypeString
}
VehicleSummaryRow
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment