7import QGroundControl.FactControls
8import QGroundControl.Controls
12 pageComponent: sensorsPageComponent
15 id: sensorsPageComponent
19 height: availableHeight
21 // Help text which is shown both in the status text area prior to pressing a cal button and in the
22 // pre-calibration dialog.
24 readonly property string orientationHelpSet: qsTr("If mounted in the direction of flight, select None.")
25 readonly property string orientationHelpCal: qsTr("Before calibrating make sure rotation settings are correct. ") + orientationHelpSet
26 readonly property string compassRotationText: qsTr("If the compass or GPS module is mounted in flight direction, leave the default value (None)")
28 readonly property string compassHelp: qsTr("For Compass calibration you will need to rotate your vehicle through a number of positions.")
29 readonly property string gyroHelp: qsTr("For Gyroscope calibration you will need to place your vehicle on a surface and leave it still.")
30 readonly property string accelHelp: qsTr("For Accelerometer calibration you will need to place your vehicle on all six sides on a perfectly level surface and hold it still in each orientation for a few seconds.")
31 readonly property string levelHelp: qsTr("To level the horizon you need to place the vehicle in its level flight position and press OK.")
33 readonly property string statusTextAreaDefaultText: qsTr("Start the individual calibration steps by clicking one of the buttons to the left.")
35 // Used to pass help text to the preCalibrationDialog dialog
36 property string preCalibrationDialogHelp
38 property string _postCalibrationDialogText
39 property var _postCalibrationDialogParams
41 readonly property string _badCompassCalText: qsTr("The calibration for Compass %1 appears to be poor. ") +
42 qsTr("Check the compass position within your vehicle and re-do the calibration.")
44 readonly property int sideBarH1PointSize: ScreenTools.mediumFontPointSize
45 readonly property int mainTextH1PointSize: ScreenTools.mediumFontPointSize // Seems to be unused
47 readonly property int rotationColumnWidth: 250
49 property Fact noFact: Fact { }
51 property bool accelCalNeeded: controller.accelSetupNeeded
52 property bool compassCalNeeded: controller.compassSetupNeeded
54 property Fact boardRot: controller.getParameterFact(-1, "AHRS_ORIENTATION")
56 readonly property int _calTypeCompass: 1 ///< Calibrate compass
57 readonly property int _calTypeAccel: 2 ///< Calibrate accel
58 readonly property int _calTypeSet: 3 ///< Set orientations only
59 readonly property int _buttonWidth: ScreenTools.defaultFontPixelWidth * 15
61 property bool _orientationsDialogShowCompass: true
62 property string _orientationDialogHelp: orientationHelpSet
63 property int _orientationDialogCalType
64 property real _margins: ScreenTools.defaultFontPixelHeight / 2
65 property bool _compassAutoRotAvailable: controller.parameterExists(-1, "COMPASS_AUTO_ROT")
66 property Fact _compassAutoRotFact: controller.getParameterFact(-1, "COMPASS_AUTO_ROT", false /* reportMissing */)
67 property bool _compassAutoRot: _compassAutoRotAvailable ? _compassAutoRotFact.rawValue == 2 : false
68 property bool _showSimpleAccelCalOption: false
69 property bool _doSimpleAccelCal: false
70 property var _gcsPosition: QGroundControl.positionManager.gcsPosition
71 property var _mapPosition: QGroundControl.flightMapPosition
73 function showOrientationsDialog(calType) {
75 let dialogButtons = Dialog.Ok
76 _showSimpleAccelCalOption = false
78 _orientationDialogCalType = calType
81 _orientationsDialogShowCompass = true
82 _orientationDialogHelp = orientationHelpCal
83 dialogTitle = qsTr("Calibrate Compass")
84 dialogButtons |= Dialog.Cancel
87 _orientationsDialogShowCompass = false
88 _orientationDialogHelp = orientationHelpCal
89 dialogTitle = qsTr("Calibrate Accelerometer")
90 dialogButtons |= Dialog.Cancel
93 _orientationsDialogShowCompass = true
94 _orientationDialogHelp = orientationHelpSet
95 dialogTitle = qsTr("Sensor Settings")
99 orientationsDialogFactory.open({ title: dialogTitle, buttons: dialogButtons })
102 function showSimpleAccelCalOption() {
103 _showSimpleAccelCalOption = true
106 // Maps the APM controller per-side done/inProgress bools to a VehicleRotationCal.CalState
107 function sideCalState(done, inProgress) {
109 return VehicleRotationCal.CalState.InProgress
111 return done ? VehicleRotationCal.CalState.Completed : VehicleRotationCal.CalState.Incomplete
114 function compassLabel(index) {
115 let label = qsTr("Compass %1 ").arg(index+1)
116 let addOpenParan = true
118 if (sensorParams.compassPrimaryFactAvailable) {
119 label += sensorParams.rgCompassPrimary[index] ? qsTr("(primary") : qsTr("(secondary")
123 if (sensorParams.rgCompassExternalParamAvailable[index]) {
130 label += sensorParams.rgCompassExternal[index] ? qsTr("external") : qsTr("internal")
138 factPanelController: controller
141 APMSensorsComponentController {
143 statusLog: statusTextArea
144 progressBar: progressBar
145 nextButton: nextButton
146 cancelButton: cancelButton
147 orientationCalAreaHelpText: orientationCalAreaHelpText
149 property var rgCompassCalFitness: [ controller.compass1CalFitness, controller.compass2CalFitness, controller.compass3CalFitness ]
151 onResetStatusTextArea: statusLog.text = statusTextAreaDefaultText
153 onWaitingForCancelChanged: {
154 if (controller.waitingForCancel) {
155 waitForCancelDialogFactory.open()
159 onCalibrationComplete: (calType) => {
161 case MAVLink.CalibrationMag:
162 _singleCompassSettingsComponentShowPriority = true
163 postOnboardCompassCalibrationFactory.open()
165 case MAVLink.CalibrationAccel:
166 postCalibrationFactory.open()
171 onSetAllCalButtonsEnabled: (enabled) => {
172 buttonColumn.enabled = enabled
175 onCalibrationActiveChanged: {
176 if (controller.calibrationActive) {
177 globals.navigationBlockedReason = qsTr("Complete or cancel the current calibration first")
179 globals.navigationBlockedReason = ""
184 Component.onDestruction: globals.navigationBlockedReason = ""
186 QGCPalette { id: qgcPal; colorGroupEnabled: true }
188 QGCPopupDialogFactory {
189 id: waitForCancelDialogFactory
191 dialogComponent: waitForCancelDialogComponent
195 id: waitForCancelDialogComponent
197 QGCSimpleMessageDialog {
198 title: qsTr("Calibration Cancel")
199 text: qsTr("Waiting for Vehicle to response to Cancel. This may take a few seconds.")
205 onWaitingForCancelChanged: {
206 if (!controller.waitingForCancel) {
215 id: singleCompassOnboardResultsComponent
218 anchors.left: parent ? parent.left : undefined
219 anchors.right: parent ? parent.right : undefined
220 spacing: Math.round(ScreenTools.defaultFontPixelHeight / 2)
221 visible: sensorParams.rgCompassAvailable[index] && sensorParams.rgCompassUseFact[index].value
223 property int _index: index
225 property real greenMaxThreshold: 8 * (sensorParams.rgCompassExternal[index] ? 1 : 2)
226 property real yellowMaxThreshold: 15 * (sensorParams.rgCompassExternal[index] ? 1 : 2)
227 property real fitnessRange: 25 * (sensorParams.rgCompassExternal[index] ? 1 : 2)
230 anchors.left: parent.left
231 anchors.right: parent.right
232 height: ScreenTools.defaultFontPixelHeight
239 width: parent.width * (greenMaxThreshold / fitnessRange)
240 height: parent.height
244 width: parent.width * ((yellowMaxThreshold - greenMaxThreshold) / fitnessRange)
245 height: parent.height
249 width: parent.width * ((fitnessRange - yellowMaxThreshold) / fitnessRange)
250 height: parent.height
256 height: fitnessRow.height * 0.66
258 anchors.verticalCenter: fitnessRow.verticalCenter
259 x: (fitnessRow.width * (Math.min(Math.max(controller.rgCompassCalFitness[index], 0.0), fitnessRange) / fitnessRange)) - (width / 2)
262 border.color: "black"
267 anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 2
268 anchors.left: parent.left
269 anchors.right: parent.right
270 sourceComponent: singleCompassSettingsComponent
272 property int index: _index
277 QGCPopupDialogFactory {
278 id: postOnboardCompassCalibrationFactory
280 dialogComponent: postOnboardCompassCalibrationComponent
284 id: postOnboardCompassCalibrationComponent
287 id: postOnboardCompassCalibrationDialog
288 title: qsTr("Calibration complete")
292 objectName: "postOnboardCompassCalibrationDialog"
293 width: 40 * ScreenTools.defaultFontPixelWidth
294 spacing: ScreenTools.defaultFontPixelHeight
298 delegate: singleCompassOnboardResultsComponent
302 anchors.left: parent.left
303 anchors.right: parent.right
304 wrapMode: Text.WordWrap
305 text: qsTr("Shown in the indicator bars is the quality of the calibration for each compass.\n\n") +
306 qsTr("- Green indicates a well functioning compass.\n") +
307 qsTr("- Yellow indicates a questionable compass or calibration.\n") +
308 qsTr("- Red indicates a compass which should not be used.\n\n") +
309 qsTr("YOU MUST REBOOT YOUR VEHICLE AFTER EACH CALIBRATION.")
315 QGCPopupDialogFactory {
316 id: postCalibrationFactory
318 dialogComponent: postCalibrationComponent
322 id: postCalibrationComponent
325 id: postCalibrationDialog
326 title: qsTr("Calibration complete")
329 objectName: "postCalibrationDialog"
330 width: 40 * ScreenTools.defaultFontPixelWidth
331 spacing: ScreenTools.defaultFontPixelHeight
334 anchors.left: parent.left
335 anchors.right: parent.right
336 wrapMode: Text.WordWrap
337 text: qsTr("YOU MUST REBOOT YOUR VEHICLE AFTER EACH CALIBRATION.")
343 property bool _singleCompassSettingsComponentShowPriority: true
345 id: singleCompassSettingsComponent
348 spacing: Math.round(ScreenTools.defaultFontPixelHeight / 2)
349 visible: sensorParams.rgCompassAvailable[index]
352 text: compassLabel(index)
355 fact: sensorParams.rgCompassId[index]
359 anchors.margins: ScreenTools.defaultFontPixelWidth * 2
360 anchors.left: parent.left
361 spacing: Math.round(ScreenTools.defaultFontPixelHeight / 4)
364 spacing: ScreenTools.defaultFontPixelWidth
367 id: useCompassCheckBox
368 text: qsTr("Use Compass")
369 fact: sensorParams.rgCompassUseFact[index]
370 visible: sensorParams.rgCompassUseParamAvailable[index] && !sensorParams.rgCompassPrimary[index]
374 model: [ qsTr("Priority 1"), qsTr("Priority 2"), qsTr("Priority 3"), qsTr("Not Set") ]
375 visible: _singleCompassSettingsComponentShowPriority && sensorParams.compassPrioFactsAvailable && useCompassCheckBox.visible && useCompassCheckBox.checked
377 property int _compassIndex: index
379 function selectPriorityfromParams() {
381 let compassId = sensorParams.rgCompassId[_compassIndex].rawValue
382 for (let prioIndex=0; prioIndex<3; prioIndex++) {
383 if (compassId == sensorParams.rgCompassPrio[prioIndex].rawValue) {
384 currentIndex = prioIndex
390 Component.onCompleted: selectPriorityfromParams()
392 onActivated: (index) => {
394 // User cannot select Not Set
395 selectPriorityfromParams()
397 sensorParams.rgCompassPrio[index].rawValue = sensorParams.rgCompassId[_compassIndex].rawValue
404 visible: !_compassAutoRot && sensorParams.rgCompassExternal[index] && sensorParams.rgCompassRotParamAvailable[index]
406 QGCLabel { text: qsTr("Orientation:") }
409 width: rotationColumnWidth
411 fact: sensorParams.rgCompassRotFact[index]
418 QGCPopupDialogFactory {
419 id: orientationsDialogFactory
421 dialogComponent: orientationsDialogComponent
425 id: orientationsDialogComponent
428 function compassMask () {
430 mask |= (0 + (sensorParams.rgCompassPrio[0].rawValue !== 0)) << 0
431 mask |= (0 + (sensorParams.rgCompassPrio[1].rawValue !== 0)) << 1
432 mask |= (0 + (sensorParams.rgCompassPrio[2].rawValue !== 0)) << 2
437 if (_orientationDialogCalType == _calTypeAccel) {
438 controller.calibrateAccel(_doSimpleAccelCal)
439 } else if (_orientationDialogCalType == _calTypeCompass) {
440 if (!northCalibrationCheckBox.checked) {
441 controller.calibrateCompass()
443 let lat = parseFloat(northCalLat.text)
444 let lon = parseFloat(northCalLon.text)
445 if (useMapPositionCheckbox.checked) {
446 lat = _mapPosition.latitude
447 lon = _mapPosition.longitude
449 if (useGcsPositionCheckbox.checked) {
450 lat = _gcsPosition.latitude
451 lon = _gcsPosition.longitude
453 if (isNaN(lat) || isNaN(lon)) {
456 controller.calibrateCompassNorth(lat, lon, compassMask())
462 width: 40 * ScreenTools.defaultFontPixelWidth
463 spacing: ScreenTools.defaultFontPixelHeight
467 wrapMode: Text.WordWrap
468 text: _orientationDialogHelp
472 QGCLabel { text: qsTr("Autopilot Rotation:") }
475 width: rotationColumnWidth
483 visible: _orientationDialogCalType == _calTypeAccel
484 spacing: ScreenTools.defaultFontPixelHeight
488 wrapMode: Text.WordWrap
489 text: qsTr("Simple accelerometer calibration is less precise but allows calibrating without rotating the vehicle. Check this if you have a large/heavy vehicle.")
493 text: qsTr("Simple Accelerometer Calibration")
494 onClicked: _doSimpleAccelCal = this.checked
499 model: _orientationsDialogShowCompass ? 3 : 0
500 delegate: singleCompassSettingsComponent
504 id: magneticDeclinationLabel
506 visible: globals.activeVehicle.sub && _orientationsDialogShowCompass
507 text: qsTr("Magnetic Declination")
511 visible: magneticDeclinationLabel.visible
512 anchors.margins: ScreenTools.defaultFontPixelWidth
513 anchors.left: parent.left
514 anchors.right: parent.right
515 spacing: ScreenTools.defaultFontPixelHeight
518 id: manualMagneticDeclinationCheckBox
519 text: qsTr("Manual Magnetic Declination")
520 property Fact autoDecFact: controller.getParameterFact(-1, "COMPASS_AUTODEC")
521 property int manual: 0
522 property int automatic: 1
524 checked: autoDecFact.rawValue === manual
525 onClicked: autoDecFact.value = (checked ? manual : automatic)
529 fact: sensorParams.declinationFact
530 enabled: manualMagneticDeclinationCheckBox.checked
534 Item { height: ScreenTools.defaultFontPixelHeight; width: 10 } // spacer
537 id: northCalibrationLabel
539 visible: _orientationsDialogShowCompass
540 wrapMode: Text.WordWrap
541 text: qsTr("Fast compass calibration given vehicle position and yaw. This ") +
542 qsTr("results in zero diagonal and off-diagonal elements, so is only ") +
543 qsTr("suitable for vehicles where the field is close to spherical. It is ") +
544 qsTr("useful for large vehicles where moving the vehicle to calibrate it ") +
545 qsTr("is difficult. Point the vehicle North before using it.")
549 visible: northCalibrationLabel.visible
550 anchors.margins: ScreenTools.defaultFontPixelWidth
551 anchors.left: parent.left
552 anchors.right: parent.right
553 spacing: ScreenTools.defaultFontPixelHeight
556 id: northCalibrationCheckBox
557 visible: northCalibrationLabel.visible
558 text: qsTr("Fast Calibration")
562 id: northCalibrationManualPosition
564 visible: northCalibrationCheckBox.checked && !globals.activeVehicle.coordinate.isValid
565 wrapMode: Text.WordWrap
566 text: qsTr("Vehicle has no Valid positon, please provide it")
570 visible: northCalibrationManualPosition.visible && _gcsPosition.isValid
571 id: useGcsPositionCheckbox
572 text: qsTr("Use GCS position instead")
573 checked: _gcsPosition.isValid
576 visible: northCalibrationManualPosition.visible && !_gcsPosition.isValid
577 id: useMapPositionCheckbox
578 text: qsTr("Use current map position instead")
583 visible: useMapPositionCheckbox.checked
584 wrapMode: Text.WordWrap
585 //: %1 is latitude, %2 is longitude
586 text: qsTr("Lat: %1 Lon: %2").arg(_mapPosition.latitude.toFixed(4)).arg(_mapPosition.longitude.toFixed(4))
591 visible: !useGcsPositionCheckbox.checked && !useMapPositionCheckbox.checked && northCalibrationCheckBox.checked
593 textColor: isNaN(parseFloat(text)) ? qgcPal.warningText: qgcPal.textFieldText
594 enabled: !useGcsPositionCheckbox.checked
598 visible: !useGcsPositionCheckbox.checked && !useMapPositionCheckbox.checked && northCalibrationCheckBox.checked
600 textColor: isNaN(parseFloat(text)) ? qgcPal.warningText: qgcPal.textFieldText
601 enabled: !useGcsPositionCheckbox.checked
609 QGCPopupDialogFactory {
610 id: compassMotDialogFactory
612 dialogComponent: compassMotDialogComponent
616 id: compassMotDialogComponent
619 title: qsTr("Compass Motor Interference Calibration")
620 buttons: Dialog.Cancel | Dialog.Ok
622 onAccepted: controller.calibrateMotorInterference()
625 width: 40 * ScreenTools.defaultFontPixelWidth
626 spacing: ScreenTools.defaultFontPixelHeight
629 anchors.left: parent.left
630 anchors.right: parent.right
631 wrapMode: Text.WordWrap
632 text: qsTr("This is recommended for vehicles that have only an internal compass and on vehicles where there is significant interference on the compass from the motors, power wires, etc. ") +
633 qsTr("CompassMot only works well if you have a battery current monitor because the magnetic interference is linear with current drawn. ") +
634 qsTr("It is technically possible to set-up CompassMot using throttle but this is not recommended.")
638 anchors.left: parent.left
639 anchors.right: parent.right
640 wrapMode: Text.WordWrap
641 text: qsTr("Disconnect your props, flip them over and rotate them one position around the frame. ") +
642 qsTr("In this configuration they should push the copter down into the ground when the throttle is raised.")
646 anchors.left: parent.left
647 anchors.right: parent.right
648 wrapMode: Text.WordWrap
649 text: qsTr("Secure the copter (perhaps with tape) so that it does not move.")
653 anchors.left: parent.left
654 anchors.right: parent.right
655 wrapMode: Text.WordWrap
656 text: qsTr("Turn on your transmitter and keep throttle at zero.")
660 anchors.left: parent.left
661 anchors.right: parent.right
662 wrapMode: Text.WordWrap
663 text: qsTr("Click Ok to start CompassMot calibration.")
671 anchors.left: parent.left
672 anchors.top: parent.top
673 anchors.bottom: parent.bottom
675 contentHeight: nextCancelColumn.y + nextCancelColumn.height + _margins
677 // Calibration button column - Calibratin buttons are kept in a separate column from Next/Cancel buttons
678 // so we can enable/disable them all as a group
682 Layout.alignment: Qt.AlignLeft | Qt.AlignTop
685 objectName: "sensorsSetup_calibrateAccel"
687 text: qsTr("Accelerometer")
688 indicatorGreen: !accelCalNeeded
690 onClicked: function () {
691 showOrientationsDialog(_calTypeAccel);
692 showSimpleAccelCalOption();
697 objectName: "sensorsSetup_calibrateCompass"
699 text: qsTr("Compass")
700 indicatorGreen: !compassCalNeeded
703 if (controller.accelSetupNeeded) {
704 QGroundControl.showMessageDialog(sensorsPage, qsTr("Calibrate Compass"), qsTr("Accelerometer must be calibrated prior to Compass."))
706 showOrientationsDialog(_calTypeCompass)
713 text: _levelHorizonText
715 readonly property string _levelHorizonText: qsTr("Level Horizon")
718 if (controller.accelSetupNeeded) {
719 QGroundControl.showMessageDialog(sensorsPage, _levelHorizonText, qsTr("Accelerometer must be calibrated prior to Level Horizon."))
721 QGroundControl.showMessageDialog(sensorsPage, _levelHorizonText,
722 qsTr("To level the horizon you need to place the vehicle in its level flight position and press Ok."),
723 Dialog.Cancel | Dialog.Ok,
724 function() { controller.levelHorizon() })
732 visible: globals.activeVehicle && (globals.activeVehicle.multiRotor | globals.activeVehicle.rover | globals.activeVehicle.sub)
733 onClicked: QGroundControl.showMessageDialog(sensorsPage, qsTr("Calibrate Gyro"),
734 qsTr("For Gyroscope calibration you will need to place your vehicle on a surface and leave it still.\n\nClick Ok to start calibration."),
735 Dialog.Cancel | Dialog.Ok,
736 function() { controller.calibrateGyro() })
741 text: _calibratePressureText
742 onClicked: QGroundControl.showMessageDialog(sensorsPage, _calibratePressureText,
743 qsTr("Pressure calibration will set the %1 to zero at the current pressure reading. %2").arg(_altText).arg(_helpTextFW),
744 Dialog.Cancel | Dialog.Ok,
745 function() { controller.calibratePressure() })
747 readonly property string _altText: globals.activeVehicle.sub ? qsTr("depth") : qsTr("altitude")
748 readonly property string _helpTextFW: globals.activeVehicle.fixedWing ? qsTr("To calibrate the airspeed sensor shield it from the wind. Do not touch the sensor or obstruct any holes during the calibration.") : ""
749 readonly property string _calibratePressureText: globals.activeVehicle.fixedWing ? qsTr("Baro/Airspeed") : qsTr("Pressure")
754 text: qsTr("CompassMot")
755 visible: globals.activeVehicle ? globals.activeVehicle.supports.motorInterference : false
756 onClicked: compassMotDialogFactory.open()
761 text: qsTr("Sensor Settings")
762 onClicked: showOrientationsDialog(_calTypeSet)
764 } // Column - Cal Buttons
768 anchors.topMargin: buttonColumn.spacing
769 anchors.top: buttonColumn.bottom
770 anchors.left: buttonColumn.left
771 spacing: buttonColumn.spacing
775 objectName: "sensorsSetup_nextButton"
779 onClicked: controller.nextClicked()
784 objectName: "sensorsSetup_cancelButton"
788 onClicked: controller.cancelCalibration()
791 } // QGCFlickable - buttons
793 /// Right column - cal area
795 anchors.leftMargin: _margins
796 anchors.top: parent.top
797 anchors.bottom: parent.bottom
798 anchors.left: buttonFlickable.right
799 anchors.right: parent.right
803 objectName: "sensorsSetup_progressBar"
804 anchors.left: parent.left
805 anchors.right: parent.right
808 Item { height: ScreenTools.defaultFontPixelHeight; width: 10 } // spacer
813 height: parent.height - y
819 text: statusTextAreaDefaultText
821 background: Rectangle { color: qgcPal.windowShade }
825 id: orientationCalArea
827 visible: controller.showOrientationCalArea
828 color: qgcPal.windowShade
831 id: orientationCalAreaHelpText
832 anchors.margins: ScreenTools.defaultFontPixelWidth
833 anchors.top: orientationCalArea.top
834 anchors.left: orientationCalArea.left
836 wrapMode: Text.WordWrap
837 font.pointSize: ScreenTools.mediumFontPointSize
841 anchors.topMargin: ScreenTools.defaultFontPixelWidth
842 anchors.top: orientationCalAreaHelpText.bottom
843 anchors.bottom: parent.bottom
844 anchors.left: parent.left
845 anchors.right: parent.right
846 spacing: ScreenTools.defaultFontPixelWidth
848 property real indicatorWidth: (width / 3) - (spacing * 2)
849 property real indicatorHeight: (height / 2) - spacing
852 objectName: "sensorsCal_downSide"
853 width: parent.indicatorWidth
854 height: parent.indicatorHeight
855 visible: controller.orientationCalDownSideVisible
856 calState: sideCalState(controller.orientationCalDownSideDone, controller.orientationCalDownSideInProgress)
857 calInProgressText: controller.orientationCalDownSideRotate ? qsTr("Rotate") : qsTr("Hold Still")
858 imageSource: "qrc:///qmlimages/VehicleDown.png"
861 objectName: "sensorsCal_leftSide"
862 width: parent.indicatorWidth
863 height: parent.indicatorHeight
864 visible: controller.orientationCalLeftSideVisible
865 calState: sideCalState(controller.orientationCalLeftSideDone, controller.orientationCalLeftSideInProgress)
866 calInProgressText: controller.orientationCalLeftSideRotate ? qsTr("Rotate") : qsTr("Hold Still")
867 imageSource: "qrc:///qmlimages/VehicleLeft.png"
870 objectName: "sensorsCal_rightSide"
871 width: parent.indicatorWidth
872 height: parent.indicatorHeight
873 visible: controller.orientationCalRightSideVisible
874 calState: sideCalState(controller.orientationCalRightSideDone, controller.orientationCalRightSideInProgress)
875 calInProgressText: controller.orientationCalRightSideRotate ? qsTr("Rotate") : qsTr("Hold Still")
876 imageSource: "qrc:///qmlimages/VehicleRight.png"
879 objectName: "sensorsCal_noseDownSide"
880 width: parent.indicatorWidth
881 height: parent.indicatorHeight
882 visible: controller.orientationCalNoseDownSideVisible
883 calState: sideCalState(controller.orientationCalNoseDownSideDone, controller.orientationCalNoseDownSideInProgress)
884 calInProgressText: controller.orientationCalNoseDownSideRotate ? qsTr("Rotate") : qsTr("Hold Still")
885 imageSource: "qrc:///qmlimages/VehicleNoseDown.png"
888 objectName: "sensorsCal_tailDownSide"
889 width: parent.indicatorWidth
890 height: parent.indicatorHeight
891 visible: controller.orientationCalTailDownSideVisible
892 calState: sideCalState(controller.orientationCalTailDownSideDone, controller.orientationCalTailDownSideInProgress)
893 calInProgressText: controller.orientationCalTailDownSideRotate ? qsTr("Rotate") : qsTr("Hold Still")
894 imageSource: "qrc:///qmlimages/VehicleTailDown.png"
897 objectName: "sensorsCal_upsideDownSide"
898 width: parent.indicatorWidth
899 height: parent.indicatorHeight
900 visible: controller.orientationCalUpsideDownSideVisible
901 calState: sideCalState(controller.orientationCalUpsideDownSideDone, controller.orientationCalUpsideDownSideInProgress)
902 calInProgressText: controller.orientationCalUpsideDownSideRotate ? qsTr("Rotate") : qsTr("Hold Still")
903 imageSource: "qrc:///qmlimages/VehicleUpsideDown.png"
907 } // Item - Cal display area
908 } // Column - cal display
910 } // Component - sensorsPageComponent