Commit d967b1fb authored by Lorenz Meier's avatar Lorenz Meier

Merge branch 'mp_merge' of https://github.com/diydrones/qgroundcontrol into mp3

parents c555a9fd 0dd146b9
This source diff could not be displayed because it is too large. You can view the blob instead.
[Fixed%20Wing%20Failsafe%20Configuration]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_DESCRIPTION=GCS failsafe enable
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_PARAMID=FS_GCS_ENABL
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Enabled
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\2\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_DESCRIPTION=GCS Short (1 second) Failsafe Enable
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_PARAMID=FS_SHORT_ACTN
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Enabled
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\3\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_DESCRIPTION=GCS Long (20 seconds) Failsafe Enable
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_PARAMID=FS_LONG_ACTN
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Enabled
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\4\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_DESCRIPTION=Throttle Failsafe Enable
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_PARAMID=THR_FAILSAFE
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Enabled
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\5\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_DESCRIPTION=Throttle Failsafe Action
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_PARAMID=THR_FS_ACTION
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Enabled
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\6\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_DESCRIPTION=Throttle Failsafe Value (PWM)
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_PARAMID=THR_FS_VALUE
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_MAX=1200
QGC_TOOL_WIDGET_ITEMS\size=6
[Servo%20Pitch%20Calibration]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DESCRIPTION=P Gain
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_PARAMID=PTCH2SRV_P
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\2\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DESCRIPTION=I Gain
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_PARAMID=PTCH2SRV_I
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\3\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=D Gain
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=PTCH2SRV_D
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\4\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_DESCRIPTION=I Max
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_PARAMID=PTCH2SRV_IMAX
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\size=4
[Servo%20Roll%20Calibration]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DESCRIPTION=P Gain
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_PARAMID=RLL2SRV_P
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\2\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DESCRIPTION=I Gain
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_PARAMID=RLL2SRV_I
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\3\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=D Gain
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=RLL2SRV_D
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\4\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_DESCRIPTION=I Max
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_PARAMID=RLL2SRV_IMAX
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\size=4
[Servo%20Yaw]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DESCRIPTION=P Gain
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_PARAMID=YW2SRV_P
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\2\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DESCRIPTION=I Gain
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_PARAMID=YW2SRV_I
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\3\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=D Gain
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=YW2SRV_D
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\4\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_DESCRIPTION=I Max
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_PARAMID=YW2SRV_IMAX
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\size=4
[Calibration%20Tool]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=COMMANDBUTTON
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_DESCRIPTION=Reboot (only in standby)
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_BUTTONTEXT=REBOOT
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_COMMANDID=246
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM1=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM2=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM3=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM4=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM5=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM6=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM7=0
QGC_TOOL_WIDGET_ITEMS\2\TYPE=TEXT
QGC_TOOL_WIDGET_ITEMS\2\QGC_TEXT_SOURCE=NONE
QGC_TOOL_WIDGET_ITEMS\2\QGC_TEXT_ID=MAG_LABEL
QGC_TOOL_WIDGET_ITEMS\2\QGC_TEXT_TEXT=
QGC_TOOL_WIDGET_ITEMS\3\TYPE=COMMANDBUTTON
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_DESCRIPTION=Magnetometer calibration
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_BUTTONTEXT=MAG
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_COMMANDID=241
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_LABEL=MAG_TEXT
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM1=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM2=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM3=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM4=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM5=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM6=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM7=0
QGC_TOOL_WIDGET_ITEMS\4\TYPE=TEXT
QGC_TOOL_WIDGET_ITEMS\4\QGC_TEXT_SOURCE=MAV
QGC_TOOL_WIDGET_ITEMS\4\QGC_TEXT_ID=MAG_TEXT
QGC_TOOL_WIDGET_ITEMS\4\QGC_TEXT_TEXT=
QGC_TOOL_WIDGET_ITEMS\5\TYPE=TEXT
QGC_TOOL_WIDGET_ITEMS\5\QGC_TEXT_SOURCE=NONE
QGC_TOOL_WIDGET_ITEMS\5\QGC_TEXT_ID=ACCEL_LABEL
QGC_TOOL_WIDGET_ITEMS\5\QGC_TEXT_TEXT=
QGC_TOOL_WIDGET_ITEMS\6\TYPE=COMMANDBUTTON
QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_DESCRIPTION=Accelerometer calibration
QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_BUTTONTEXT=ACCEL
QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_COMMANDID=241
QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_LABEL=ACCEL_TEXT
QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false
QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_PARAM1=0
QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_PARAM2=0
QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_PARAM3=0
QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_PARAM4=0
QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_PARAM5=1
QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_PARAM6=0
QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_PARAM7=0
QGC_TOOL_WIDGET_ITEMS\7\TYPE=TEXT
QGC_TOOL_WIDGET_ITEMS\7\QGC_TEXT_SOURCE=MAV
QGC_TOOL_WIDGET_ITEMS\7\QGC_TEXT_ID=ACCEL_TEXT
QGC_TOOL_WIDGET_ITEMS\7\QGC_TEXT_TEXT=
QGC_TOOL_WIDGET_ITEMS\8\TYPE=TEXT
QGC_TOOL_WIDGET_ITEMS\8\QGC_TEXT_SOURCE=NONE
QGC_TOOL_WIDGET_ITEMS\8\QGC_TEXT_ID=GYRO_LABEL
QGC_TOOL_WIDGET_ITEMS\8\QGC_TEXT_TEXT=
QGC_TOOL_WIDGET_ITEMS\9\TYPE=COMMANDBUTTON
QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_DESCRIPTION=Gyroscope calibration
QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_BUTTONTEXT=GYRO
QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_COMMANDID=241
QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_LABEL=GYRO_TEXT
QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false
QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_PARAM1=1
QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_PARAM2=0
QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_PARAM3=0
QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_PARAM4=0
QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_PARAM5=0
QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_PARAM6=0
QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_PARAM7=0
QGC_TOOL_WIDGET_ITEMS\10\TYPE=TEXT
QGC_TOOL_WIDGET_ITEMS\10\QGC_TEXT_SOURCE=MAV
QGC_TOOL_WIDGET_ITEMS\10\QGC_TEXT_ID=GYRO_TEXT
QGC_TOOL_WIDGET_ITEMS\10\QGC_TEXT_TEXT=
QGC_TOOL_WIDGET_ITEMS\11\QGC_COMMAND_BUTTON_DESCRIPTION=RC Trim calibration
QGC_TOOL_WIDGET_ITEMS\11\QGC_COMMAND_BUTTON_BUTTONTEXT=TRIM
QGC_TOOL_WIDGET_ITEMS\11\QGC_COMMAND_BUTTON_COMMANDID=241
QGC_TOOL_WIDGET_ITEMS\11\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false
QGC_TOOL_WIDGET_ITEMS\11\QGC_COMMAND_BUTTON_PARAM1=1
QGC_TOOL_WIDGET_ITEMS\11\QGC_COMMAND_BUTTON_PARAM2=0
QGC_TOOL_WIDGET_ITEMS\11\QGC_COMMAND_BUTTON_PARAM3=0
QGC_TOOL_WIDGET_ITEMS\11\QGC_COMMAND_BUTTON_PARAM4=1
QGC_TOOL_WIDGET_ITEMS\11\QGC_COMMAND_BUTTON_PARAM5=0
QGC_TOOL_WIDGET_ITEMS\11\QGC_COMMAND_BUTTON_PARAM6=0
QGC_TOOL_WIDGET_ITEMS\11\QGC_COMMAND_BUTTON_PARAM7=0
QGC_TOOL_WIDGET_ITEMS\size=11
<html>
<body>
<h1>Sensor Calibration</h1>
The APM sensors can be calibrated with the buttons on the right. Gyroscope (GYRO) and Magnometer (MAG) calibrations have to be performed with a static, unmoved system. The Accelerometer (ACCEL) calibrations involve rotating the vehicle around. Please ensure all props are removed and motor power is off.
<h2>Magnetometer Calibration</h2>
Ensure the vehicle is clear of any metal, magnetic, or ferrus materials, and sitting on a flat surface. Click the MAG button and wait for the calibration to complete.
<h2>Accelerometer Calibration</h2>
Ensure the vehicle is on a absolutely level surface and click ACCEL. Follow the instructions that will show up below the button. This calibration procedure will require moving the vehicle at 90 degree angles (upright, left, right, front, back, and upside down), then clicking the button to save that position.
<h2>Gyroscope Calibration</h2>
Place the vehicle on an absolutely flat surface, and click the GYRO button. wait for the system to calibrate.
</body>
</html>
\ No newline at end of file
[Battery%20Monitor]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_DESCRIPTION=Battery Monitor
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_PARAMID=BATT_MONITOR
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COUNT=3
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Voltage Only
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_VAL=3
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=Voltage And Current
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_2_VAL=4
QGC_TOOL_WIDGET_ITEMS\2\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_DESCRIPTION=Battery Current sensing pin
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_PARAMID=BATT_CURR_PIN
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_COUNT=14
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=A0
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=A1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=A2
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=A3
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_3_VAL=3
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=A4
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_4_VAL=4
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_5_TEXT=A5
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_5_VAL=5
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_6_TEXT=A6
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_6_VAL=6
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_7_TEXT=A7
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_7_VAL=7
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_8_TEXT=A8
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_8_VAL=8
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_9_TEXT=A9
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_9_VAL=9
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_10_TEXT=A10
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_10_VAL=10
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_11_TEXT=A11
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_11_VAL=11
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_12_TEXT=A12
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_12_VAL=12
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_13_TEXT=A13
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_13_VAL=13
QGC_TOOL_WIDGET_ITEMS\3\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_DESCRIPTION=Battery Voltage sensing pin
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_PARAMID=BATT_VOLT_PIN
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_COUNT=14
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=A0
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=A1
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=A2
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=A3
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_3_VAL=3
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=A4
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_4_VAL=4
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_5_TEXT=A5
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_5_VAL=5
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_6_TEXT=A6
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_6_VAL=6
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_7_TEXT=A7
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_7_VAL=7
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_8_TEXT=A8
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_8_VAL=8
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_9_TEXT=A9
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_9_VAL=9
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_10_TEXT=A10
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_10_VAL=10
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_11_TEXT=A11
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_11_VAL=11
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_12_TEXT=A12
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_12_VAL=12
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_13_TEXT=A3
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_13_VAL=13
QGC_TOOL_WIDGET_ITEMS\4\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_DESCRIPTION=APM Input Voltage
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_PARAMID=INPUT_VOLTS
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MAX=24
QGC_TOOL_WIDGET_ITEMS\5\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_DESCRIPTION=Battery Capacity
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_PARAMID=BATT_CAPACITY
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MAX=10000
QGC_TOOL_WIDGET_ITEMS\6\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_DESCRIPTION=Voltage Divider
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_PARAMID=VOLT_DIVIDER
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_MAX=10
QGC_TOOL_WIDGET_ITEMS\7\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_DESCRIPTION=Amps per Volt
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_PARAMID=AMP_PER_VOLT
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\size=7
[Camera%20Pan]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DESCRIPTION=RC5 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_PARAMID=RC5_MIN
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC5_FUNCTION
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_VISIBLE_VAL=6
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\2\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DESCRIPTION=RC5 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_PARAMID=RC5_MAX
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC5_FUNCTION
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_VISIBLE_VAL=6
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\3\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=RC6 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=RC6_MIN
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC6_FUNCTION
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_VISIBLE_VAL=6
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\4\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_DESCRIPTION=RC6 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_PARAMID=RC6_MAX
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC6_FUNCTION
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_VISIBLE_VAL=6
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\5\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_DESCRIPTION=RC7 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_PARAMID=RC7_MIN
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC7_FUNCTION
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_VISIBLE_VAL=6
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\6\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_DESCRIPTION=RC7 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_PARAMID=RC7_MAX
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC7_FUNCTION
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_VISIBLE_VAL=6
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\7\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_DESCRIPTION=RC8 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_PARAMID=RC8_MIN
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC8_FUNCTION
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_VISIBLE_VAL=6
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\8\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_DESCRIPTION=RC8 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_PARAMID=RC8_MAX
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC8_FUNCTION
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_VISIBLE_VAL=6
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\9\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_DESCRIPTION=RC9 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_PARAMID=RC9_MIN
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC9_FUNCTION
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_VISIBLE_VAL=6
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\10\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_DESCRIPTION=RC9 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_PARAMID=RC9_MAX
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC9_FUNCTION
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_VISIBLE_VAL=6
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\11\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_DESCRIPTION=RC10 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_PARAMID=RC10_MIN
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC10_FUNCTION
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_VISIBLE_VAL=6
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\12\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_DESCRIPTION=RC10 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_PARAMID=RC10_MAX
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC10_FUNCTION
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_VISIBLE_VAL=6
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\13\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_DESCRIPTION=RC11 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_PARAMID=RC11_MIN
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC11_FUNCTION
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_VISIBLE_VAL=6
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\14\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_DESCRIPTION=RC11 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_PARAMID=RC11_MAX
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC11_FUNCTION
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_VISIBLE_VAL=6
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\15\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\15\QGC_PARAM_SLIDER_DESCRIPTION=Tilt Min Angle Limit
QGC_TOOL_WIDGET_ITEMS\15\QGC_PARAM_SLIDER_PARAMID=MNT_ANGMIN_PAN
QGC_TOOL_WIDGET_ITEMS\15\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\15\QGC_PARAM_SLIDER_MIN=-90
QGC_TOOL_WIDGET_ITEMS\15\QGC_PARAM_SLIDER_MAX=0
QGC_TOOL_WIDGET_ITEMS\16\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\16\QGC_PARAM_SLIDER_DESCRIPTION=Tilt Max Angle Limit
QGC_TOOL_WIDGET_ITEMS\16\QGC_PARAM_SLIDER_PARAMID=MNT_ANGMAX_PAN
QGC_TOOL_WIDGET_ITEMS\16\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\16\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\16\QGC_PARAM_SLIDER_MAX=90
QGC_TOOL_WIDGET_ITEMS\17\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_DESCRIPTION=RC5 Invert
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_PARAMID=RC5_REV
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_VISIBLE_PARAM=RC5_FUNCTION
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_VISIBLE_VAL=6
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Normal
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Inverted
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_ITEM_1_VAL=-1
QGC_TOOL_WIDGET_ITEMS\18\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_DESCRIPTION=RC6 Invert
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_PARAMID=RC6_REV
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_VISIBLE_PARAM=RC6_FUNCTION
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_VISIBLE_VAL=6
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Normal
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Inverted
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_ITEM_1_VAL=-1
QGC_TOOL_WIDGET_ITEMS\19\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_DESCRIPTION=RC7 Invert
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_PARAMID=RC7_REV
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_VISIBLE_PARAM=RC7_FUNCTION
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_VISIBLE_VAL=6
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Normal
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Inverted
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_ITEM_1_VAL=-1
QGC_TOOL_WIDGET_ITEMS\20\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_DESCRIPTION=RC8 Invert
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_PARAMID=RC8_REV
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_VISIBLE_PARAM=RC8_FUNCTION
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_VISIBLE_VAL=6
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Normal
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Inverted
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_ITEM_1_VAL=-1
QGC_TOOL_WIDGET_ITEMS\21\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_DESCRIPTION=RC9 Invert
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_PARAMID=RC9_REV
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_VISIBLE_PARAM=RC9_FUNCTION
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_VISIBLE_VAL=6
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Normal
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Inverted
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_ITEM_1_VAL=-1
QGC_TOOL_WIDGET_ITEMS\22\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_DESCRIPTION=RC10 Invert
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_PARAMID=RC10_REV
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_VISIBLE_PARAM=RC10_FUNCTION
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_VISIBLE_VAL=6
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Normal
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Inverted
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_ITEM_1_VAL=-1
QGC_TOOL_WIDGET_ITEMS\23\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_DESCRIPTION=RC11 Invert
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_PARAMID=RC11_REV
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_VISIBLE_PARAM=RC11_FUNCTION
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_VISIBLE_VAL=6
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Normal
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Inverted
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_ITEM_1_VAL=-1
QGC_TOOL_WIDGET_ITEMS\24\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_DESCRIPTION=RC Input
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_PARAMID=MNT_RC_IN_PAN
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_COUNT=5
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disable
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=RC5
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_1_VAL=5
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=RC6
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_2_VAL=6
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=RC7
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_3_VAL=7
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=RC8
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_4_VAL=8
QGC_TOOL_WIDGET_ITEMS\size=24
[RC%20Select]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_DESCRIPTION=RC5
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_PARAMID=RC5_FUNCTION
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COUNT=5
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Unused
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Camera Pan
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_VAL=6
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=Camera Tilt
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_2_VAL=7
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=Camera Roll
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_3_VAL=8
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=Camera Shutter
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_4_VAL=10
QGC_TOOL_WIDGET_ITEMS\2\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_DESCRIPTION=RC6
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_PARAMID=RC6_FUNCTION
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_COUNT=5
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Unused
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Camera Pan
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_1_VAL=6
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=Camera Tilt
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_2_VAL=7
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=Camera Roll
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_3_VAL=8
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=Camera Shutter
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_4_VAL=10
QGC_TOOL_WIDGET_ITEMS\3\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_DESCRIPTION=RC7
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_PARAMID=RC7_FUNCTION
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_COUNT=5
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Unused
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Camera Pan
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_1_VAL=6
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=Camera Tilt
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_2_VAL=7
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=Camera Roll
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_3_VAL=8
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=Camera Shutter
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_4_VAL=10
QGC_TOOL_WIDGET_ITEMS\4\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_DESCRIPTION=RC8
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_PARAMID=RC8_FUNCTION
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_COUNT=5
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Unused
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Camera Pan
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_1_VAL=6
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=Camera Tilt
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_2_VAL=7
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=Camera Roll
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_3_VAL=8
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=Camera Shutter
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_4_VAL=10
QGC_TOOL_WIDGET_ITEMS\5\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_DESCRIPTION=RC9
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_PARAMID=RC9_FUNCTION
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_COUNT=5
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Unused
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Camera Pan
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_1_VAL=6
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=Camera Tilt
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_2_VAL=7
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=Camera Roll
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_3_VAL=8
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=Camera Shutter
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_4_VAL=10
QGC_TOOL_WIDGET_ITEMS\6\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_DESCRIPTION=RC10
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_PARAMID=RC10_FUNCTION
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_COUNT=5
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Unused
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Camera Pan
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_1_VAL=6
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=Camera Tilt
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_2_VAL=7
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=Camera Roll
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_3_VAL=8
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=Camera Shutter
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_4_VAL=10
QGC_TOOL_WIDGET_ITEMS\7\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_DESCRIPTION=RC11
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_PARAMID=RC11_FUNCTION
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_COUNT=5
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Unused
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Camera Pan
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_1_VAL=6
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=Camera Tilt
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_2_VAL=7
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=Camera Roll
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_3_VAL=8
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=Camera Shutter
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_4_VAL=10
QGC_TOOL_WIDGET_ITEMS\size=7
[Camera%20Roll]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DESCRIPTION=RC5 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_PARAMID=RC5_MIN
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC5_FUNCTION
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_VISIBLE_VAL=8
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\2\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DESCRIPTION=RC5 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_PARAMID=RC5_MAX
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC5_FUNCTION
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_VISIBLE_VAL=8
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\3\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=RC6 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=RC6_MIN
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC6_FUNCTION
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_VISIBLE_VAL=8
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\4\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_DESCRIPTION=RC6 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_PARAMID=RC6_MAX
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC6_FUNCTION
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_VISIBLE_VAL=8
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\5\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_DESCRIPTION=RC7 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_PARAMID=RC7_MIN
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC7_FUNCTION
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_VISIBLE_VAL=8
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\6\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_DESCRIPTION=RC7 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_PARAMID=RC7_MAX
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC7_FUNCTION
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_VISIBLE_VAL=8
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\7\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_DESCRIPTION=RC8 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_PARAMID=RC8_MIN
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC8_FUNCTION
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_VISIBLE_VAL=8
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\8\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_DESCRIPTION=RC8 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_PARAMID=RC8_MAX
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC8_FUNCTION
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_VISIBLE_VAL=8
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\9\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_DESCRIPTION=RC9 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_PARAMID=RC9_MIN
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC9_FUNCTION
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_VISIBLE_VAL=8
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\10\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_DESCRIPTION=RC9 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_PARAMID=RC9_MAX
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC9_FUNCTION
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_VISIBLE_VAL=8
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\11\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_DESCRIPTION=RC10 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_PARAMID=RC10_MIN
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC10_FUNCTION
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_VISIBLE_VAL=8
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\12\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_DESCRIPTION=RC10 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_PARAMID=RC10_MAX
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC10_FUNCTION
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_VISIBLE_VAL=8
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\13\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_DESCRIPTION=RC11 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_PARAMID=RC11_MIN
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC11_FUNCTION
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_VISIBLE_VAL=8
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\14\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_DESCRIPTION=RC11 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_PARAMID=RC11_MAX
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC11_FUNCTION
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_VISIBLE_VAL=8
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\15\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\15\QGC_PARAM_SLIDER_DESCRIPTION=Tilt Min Angle Limit
QGC_TOOL_WIDGET_ITEMS\15\QGC_PARAM_SLIDER_PARAMID=MNT_ANGMIN_ROL
QGC_TOOL_WIDGET_ITEMS\15\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\15\QGC_PARAM_SLIDER_MIN=-90
QGC_TOOL_WIDGET_ITEMS\15\QGC_PARAM_SLIDER_MAX=0
QGC_TOOL_WIDGET_ITEMS\16\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\16\QGC_PARAM_SLIDER_DESCRIPTION=Tilt Max Angle Limit
QGC_TOOL_WIDGET_ITEMS\16\QGC_PARAM_SLIDER_PARAMID=MNT_ANGMAX_ROL
QGC_TOOL_WIDGET_ITEMS\16\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\16\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\16\QGC_PARAM_SLIDER_MAX=90
QGC_TOOL_WIDGET_ITEMS\17\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_DESCRIPTION=RC5 Invert
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_PARAMID=RC5_REV
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_VISIBLE_PARAM=RC5_FUNCTION
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_VISIBLE_VAL=8
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Normal
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Inverted
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_ITEM_1_VAL=-1
QGC_TOOL_WIDGET_ITEMS\18\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_DESCRIPTION=RC6 Invert
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_PARAMID=RC6_REV
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_VISIBLE_PARAM=RC6_FUNCTION
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_VISIBLE_VAL=8
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Normal
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Inverted
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_ITEM_1_VAL=-1
QGC_TOOL_WIDGET_ITEMS\19\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_DESCRIPTION=RC7 Invert
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_PARAMID=RC7_REV
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_VISIBLE_PARAM=RC7_FUNCTION
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_VISIBLE_VAL=8
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Normal
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Inverted
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_ITEM_1_VAL=-1
QGC_TOOL_WIDGET_ITEMS\20\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_DESCRIPTION=RC8 Invert
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_PARAMID=RC8_REV
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_VISIBLE_PARAM=RC8_FUNCTION
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_VISIBLE_VAL=8
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Normal
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Inverted
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_ITEM_1_VAL=-1
QGC_TOOL_WIDGET_ITEMS\21\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_DESCRIPTION=RC9 Invert
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_PARAMID=RC9_REV
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_VISIBLE_PARAM=RC9_FUNCTION
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_VISIBLE_VAL=8
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Normal
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Inverted
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_ITEM_1_VAL=-1
QGC_TOOL_WIDGET_ITEMS\22\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_DESCRIPTION=RC10 Invert
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_PARAMID=RC10_REV
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_VISIBLE_PARAM=RC10_FUNCTION
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_VISIBLE_VAL=8
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Normal
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Inverted
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_ITEM_1_VAL=-1
QGC_TOOL_WIDGET_ITEMS\23\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_DESCRIPTION=RC11 Invert
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_PARAMID=RC11_REV
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_VISIBLE_PARAM=RC11_FUNCTION
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_VISIBLE_VAL=8
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Normal
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Inverted
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_ITEM_1_VAL=-1
QGC_TOOL_WIDGET_ITEMS\24\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_DESCRIPTION=RC Input
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_PARAMID=MNT_RC_IN_ROLL
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_COUNT=5
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disable
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=RC5
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_1_VAL=5
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=RC6
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_2_VAL=6
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=RC7
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_3_VAL=7
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=RC8
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_4_VAL=8
QGC_TOOL_WIDGET_ITEMS\size=24
[Camera%20Shutter]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DESCRIPTION=RC5 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_PARAMID=RC5_MIN
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC5_FUNCTION
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_VISIBLE_VAL=10
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\2\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DESCRIPTION=RC5 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_PARAMID=RC5_MAX
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC5_FUNCTION
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_VISIBLE_VAL=10
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\3\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=RC6 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=RC6_MIN
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC6_FUNCTION
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_VISIBLE_VAL=10
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\4\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_DESCRIPTION=RC6 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_PARAMID=RC6_MAX
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC6_FUNCTION
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_VISIBLE_VAL=10
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\5\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_DESCRIPTION=RC7 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_PARAMID=RC7_MIN
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC7_FUNCTION
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_VISIBLE_VAL=10
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\6\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_DESCRIPTION=RC7 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_PARAMID=RC7_MAX
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC7_FUNCTION
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_VISIBLE_VAL=10
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\7\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_DESCRIPTION=RC8 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_PARAMID=RC8_MIN
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC8_FUNCTION
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_VISIBLE_VAL=10
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\8\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_DESCRIPTION=RC8 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_PARAMID=RC8_MAX
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC8_FUNCTION
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_VISIBLE_VAL=10
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\9\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_DESCRIPTION=RC9 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_PARAMID=RC9_MIN
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC9_FUNCTION
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_VISIBLE_VAL=10
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\10\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_DESCRIPTION=RC9 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_PARAMID=RC9_MAX
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC9_FUNCTION
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_VISIBLE_VAL=10
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\11\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_DESCRIPTION=RC10 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_PARAMID=RC10_MIN
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC10_FUNCTION
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_VISIBLE_VAL=10
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\12\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_DESCRIPTION=RC10 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_PARAMID=RC10_MAX
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC10_FUNCTION
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_VISIBLE_VAL=10
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\13\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_DESCRIPTION=RC11 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_PARAMID=RC11_MIN
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC11_FUNCTION
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_VISIBLE_VAL=10
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\14\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_DESCRIPTION=RC11 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_PARAMID=RC11_MAX
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC11_FUNCTION
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_VISIBLE_VAL=10
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\15\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\15\QGC_PARAM_SLIDER_DESCRIPTION=Shutter Pushed
QGC_TOOL_WIDGET_ITEMS\15\QGC_PARAM_SLIDER_PARAMID=CAM_SERVO_ON
QGC_TOOL_WIDGET_ITEMS\15\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\15\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\15\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\16\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\16\QGC_PARAM_SLIDER_DESCRIPTION=Shutter Not Pushed
QGC_TOOL_WIDGET_ITEMS\16\QGC_PARAM_SLIDER_PARAMID=CAM_SERVO_OFF
QGC_TOOL_WIDGET_ITEMS\16\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\16\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\16\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\17\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_SLIDER_DESCRIPTION=Duration (1/10th sec)
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_SLIDER_PARAMID=CAM_DURATION
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_SLIDER_MIN=1
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_SLIDER_MAX=200
QGC_TOOL_WIDGET_ITEMS\size=17
[Camera%20Tilt]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DESCRIPTION=RC5 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_PARAMID=RC5_MIN
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC5_FUNCTION
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_VISIBLE_VAL=7
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\2\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DESCRIPTION=RC5 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_PARAMID=RC5_MAX
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC5_FUNCTION
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_VISIBLE_VAL=7
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\3\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=RC6 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=RC6_MIN
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC6_FUNCTION
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_VISIBLE_VAL=7
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\4\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_DESCRIPTION=RC6 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_PARAMID=RC6_MAX
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC6_FUNCTION
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_VISIBLE_VAL=7
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\5\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_DESCRIPTION=RC7 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_PARAMID=RC7_MIN
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC7_FUNCTION
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_VISIBLE_VAL=7
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\6\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_DESCRIPTION=RC7 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_PARAMID=RC7_MAX
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC7_FUNCTION
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_VISIBLE_VAL=7
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\7\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_DESCRIPTION=RC8 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_PARAMID=RC8_MIN
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC8_FUNCTION
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_VISIBLE_VAL=7
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\8\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_DESCRIPTION=RC8 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_PARAMID=RC8_MAX
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC8_FUNCTION
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_VISIBLE_VAL=7
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\9\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_DESCRIPTION=RC9 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_PARAMID=RC9_MIN
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC9_FUNCTION
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_VISIBLE_VAL=7
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\10\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_DESCRIPTION=RC9 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_PARAMID=RC9_MAX
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC9_FUNCTION
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_VISIBLE_VAL=7
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\11\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_DESCRIPTION=RC10 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_PARAMID=RC10_MIN
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC10_FUNCTION
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_VISIBLE_VAL=7
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\11\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\12\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_DESCRIPTION=RC10 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_PARAMID=RC10_MAX
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC10_FUNCTION
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_VISIBLE_VAL=7
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\12\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\13\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_DESCRIPTION=RC11 Min Servo Limit
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_PARAMID=RC11_MIN
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC11_FUNCTION
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_VISIBLE_VAL=7
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\13\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\14\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_DESCRIPTION=RC11 Max Servo Limit
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_PARAMID=RC11_MAX
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC11_FUNCTION
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_VISIBLE_VAL=7
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_MIN=800
QGC_TOOL_WIDGET_ITEMS\14\QGC_PARAM_SLIDER_MAX=2200
QGC_TOOL_WIDGET_ITEMS\15\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\15\QGC_PARAM_SLIDER_DESCRIPTION=Tilt Min Angle Limit
QGC_TOOL_WIDGET_ITEMS\15\QGC_PARAM_SLIDER_PARAMID=MNT_ANGMIN_TIL
QGC_TOOL_WIDGET_ITEMS\15\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\15\QGC_PARAM_SLIDER_MIN=-90
QGC_TOOL_WIDGET_ITEMS\15\QGC_PARAM_SLIDER_MAX=0
QGC_TOOL_WIDGET_ITEMS\16\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\16\QGC_PARAM_SLIDER_DESCRIPTION=Tilt Max Angle Limit
QGC_TOOL_WIDGET_ITEMS\16\QGC_PARAM_SLIDER_PARAMID=MNT_ANGMAX_TIL
QGC_TOOL_WIDGET_ITEMS\16\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\16\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\16\QGC_PARAM_SLIDER_MAX=90
QGC_TOOL_WIDGET_ITEMS\17\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_DESCRIPTION=RC5 Invert
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_PARAMID=RC5_REV
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_VISIBLE_PARAM=RC5_FUNCTION
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_VISIBLE_VAL=7
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Normal
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Inverted
QGC_TOOL_WIDGET_ITEMS\17\QGC_PARAM_COMBOBOX_ITEM_1_VAL=-1
QGC_TOOL_WIDGET_ITEMS\18\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_DESCRIPTION=RC6 Invert
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_PARAMID=RC6_REV
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_VISIBLE_PARAM=RC6_FUNCTION
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_VISIBLE_VAL=7
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Normal
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Inverted
QGC_TOOL_WIDGET_ITEMS\18\QGC_PARAM_COMBOBOX_ITEM_1_VAL=-1
QGC_TOOL_WIDGET_ITEMS\19\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_DESCRIPTION=RC7 Invert
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_PARAMID=RC7_REV
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_VISIBLE_PARAM=RC7_FUNCTION
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_VISIBLE_VAL=7
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Normal
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Inverted
QGC_TOOL_WIDGET_ITEMS\19\QGC_PARAM_COMBOBOX_ITEM_1_VAL=-1
QGC_TOOL_WIDGET_ITEMS\20\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_DESCRIPTION=RC8 Invert
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_PARAMID=RC8_REV
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_VISIBLE_PARAM=RC8_FUNCTION
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_VISIBLE_VAL=7
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Normal
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Inverted
QGC_TOOL_WIDGET_ITEMS\20\QGC_PARAM_COMBOBOX_ITEM_1_VAL=-1
QGC_TOOL_WIDGET_ITEMS\21\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_DESCRIPTION=RC9 Invert
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_PARAMID=RC9_REV
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_VISIBLE_PARAM=RC9_FUNCTION
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_VISIBLE_VAL=7
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Normal
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Inverted
QGC_TOOL_WIDGET_ITEMS\21\QGC_PARAM_COMBOBOX_ITEM_1_VAL=-1
QGC_TOOL_WIDGET_ITEMS\22\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_DESCRIPTION=RC10 Invert
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_PARAMID=RC10_REV
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_VISIBLE_PARAM=RC10_FUNCTION
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_VISIBLE_VAL=7
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Normal
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Inverted
QGC_TOOL_WIDGET_ITEMS\22\QGC_PARAM_COMBOBOX_ITEM_1_VAL=-1
QGC_TOOL_WIDGET_ITEMS\23\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_DESCRIPTION=RC11 Invert
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_PARAMID=RC11_REV
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_VISIBLE_PARAM=RC11_FUNCTION
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_VISIBLE_VAL=7
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Normal
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Inverted
QGC_TOOL_WIDGET_ITEMS\23\QGC_PARAM_COMBOBOX_ITEM_1_VAL=-1
QGC_TOOL_WIDGET_ITEMS\24\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_DESCRIPTION=RC Input
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_PARAMID=MNT_RC_IN_TILT
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_COUNT=5
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disable
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=RC5
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_1_VAL=5
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=RC6
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_2_VAL=6
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=RC7
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_3_VAL=7
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=RC8
QGC_TOOL_WIDGET_ITEMS\24\QGC_PARAM_COMBOBOX_ITEM_4_VAL=8
QGC_TOOL_WIDGET_ITEMS\size=24
[Extra%20Sensors]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_DESCRIPTION=Compass Enable
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_PARAMID=MAG_ENABLE
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Enabled
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\2\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_DESCRIPTION=Auto Declination
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_PARAMID=COMPASS_AUTODEC
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Enabled
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\3\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=Compass Declination
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=COMPASS_DEC
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\4\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_DESCRIPTION=Sonar Enable
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_PARAMID=SONAR_ENABLE
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Enabled
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\5\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_DESCRIPTION=Sonar Type
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_PARAMID=SONAR_TYPE
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_COUNT=4
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=XL-EZ0
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=LV-EZ0
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=XL-EZL0
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=HRLV
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_3_VAL=3
QGC_TOOL_WIDGET_ITEMS\6\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_DESCRIPTION=Air speed Enable
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_PARAMID=ARSPD_ENABLE
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Enabled
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\7\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_DESCRIPTION=Air speed use
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_PARAMID=AIRSPD_USE
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Do Not Use
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Use
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\8\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_COMBOBOX_DESCRIPTION=Optical Flow Enable
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_COMBOBOX_PARAMID=FLOW_ENABLE
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Enabled
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\size=8
[Heading%20PID%20Tuning]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DESCRIPTION=Heading D Gain
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_PARAMID=HDNG2RLL_D
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_COMPONENTID=200
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MAX=1
QGC_TOOL_WIDGET_ITEMS\2\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DESCRIPTION=Heading P Gain
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_PARAMID=HDNG2RLL_P
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_COMPONENTID=200
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MAX=5
QGC_TOOL_WIDGET_ITEMS\3\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=Heading I Gain
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=HDNG2RLL_I
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_COMPONENTID=200
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MAX=1
QGC_TOOL_WIDGET_ITEMS\4\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_DESCRIPTION=Heading I Limit
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_PARAMID=HDNG2RLL_IMAX
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_COMPONENTID=200
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MAX=3000
QGC_TOOL_WIDGET_ITEMS\size=4
[General]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_DESCRIPTION=Channel 7 Option
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_PARAMID=CH7_OPTION
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Nothing
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Learn Waypoint
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\2\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DESCRIPTION=Target cruise speed in auto modes
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_PARAMID=CRUISE_SPEED
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\3\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=Base throttle percentage in auto
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=CRUISE_THROTTLE
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\4\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_DESCRIPTION=Receiver RSSI sensing pin
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_PARAMID=RSSI_PIN
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_COUNT=14
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=A0
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=A1
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=A2
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=A3
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_3_VAL=3
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=A4
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_4_VAL=4
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_5_TEXT=A5
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_5_VAL=5
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_6_TEXT=A6
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_6_VAL=6
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_7_TEXT=A7
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_7_VAL=7
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_8_TEXT=A8
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_8_VAL=8
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_9_TEXT=A9
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_9_VAL=9
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_10_TEXT=A10
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_10_VAL=10
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_11_TEXT=A11
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_11_VAL=11
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_12_TEXT=A12
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_12_VAL=12
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_13_TEXT=A13
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_13_VAL=13
QGC_TOOL_WIDGET_ITEMS\5\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_DESCRIPTION=USB Console Baud Rate
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_PARAMID=SERIAL0_BAUD
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_COUNT=9
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=1200
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=2400
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_1_VAL=2
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=4800
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_2_VAL=4
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=9600
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_3_VAL=9
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=19200
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_4_VAL=19
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_5_TEXT=38400
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_5_VAL=38
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_6_TEXT=57600
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_6_VAL=57
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_7_TEXT=111100
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_7_VAL=111
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_8_TEXT=115200
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_8_VAL=115
QGC_TOOL_WIDGET_ITEMS\6\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_DESCRIPTION=Telemetry Baud Rate
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_PARAMID=SERIAL3_BAUD
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_COUNT=9
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=1200
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=2400
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_1_VAL=2
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=4800
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_2_VAL=4
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=9600
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_3_VAL=9
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=19200
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_4_VAL=19
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_5_TEXT=38400
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_5_VAL=38
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_6_TEXT=57600
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_6_VAL=57
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_7_TEXT=111100
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_7_VAL=111
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_8_TEXT=115200
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_8_VAL=115
QGC_TOOL_WIDGET_ITEMS\size=6
[Energy%20Alt%20Pid%20Calibration]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DESCRIPTION=P
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_PARAMID=ENRGY2THR_P
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\2\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DESCRIPTION=I
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_PARAMID=ENRGY2THR_I
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\3\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=D
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=ENRGY2THR_D
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\4\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_DESCRIPTION=INT_MAX
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_PARAMID=ENRGY2THR_IMAX
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\size=4
[Nav%20Roll%20Pid%20Calibration]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DESCRIPTION=P
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_PARAMID=HDNG2RLL_P
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\2\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DESCRIPTION=I
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_PARAMID=HDNG2RLL_I
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\3\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=D
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=HDNG2RLL_D
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\4\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_DESCRIPTION=INT_MAX
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_PARAMID=HDNG2RLL_IMAX
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\size=4
[Nav%20Angles%20Calibration]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DESCRIPTION=Bank Max
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_PARAMID=LIM_ROLL_CD
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\2\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DESCRIPTION=Pitch Mac
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_PARAMID=LIM_PITCH_MAX
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\3\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=Pitch Min
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=LIM_PITCH_MIN
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\size=3
[Rover%20Calibration]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DESCRIPTION=Auto WP Rad
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_PARAMID=ROV_AWPR_NAV
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\2\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DESCRIPTION=Booster
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_PARAMID=ROV_BOOSTER
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\3\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=Closed Loop Nav
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=ROV_CL_NAV
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\4\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_DESCRIPTION=Turn Gain
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_PARAMID=ROV_GAIN
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\5\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_DESCRIPTION=Sonar Trigger Dist
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_PARAMID=ROV_SONAR_TRIG
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\6\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_DESCRIPTION=Skid Steering Input
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_PARAMID=SKID_STEER_IN
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Enabled
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\7\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_DESCRIPTION=Skid Steering Output
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_PARAMID=SKID_STEER_OUT
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Enabled
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\size=6
\ No newline at end of file
[Speed%20Control%20Calibration]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DESCRIPTION=Cruise
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_PARAMID=TRIM_ARSPD_CM
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\2\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DESCRIPTION=FBW min
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_PARAMID=ARSPD_FBW_MIN
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\3\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=FBW max
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=ARSPD_FBW_MAX
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\4\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_DESCRIPTION=Ratio
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_PARAMID=ARSPD_RATIO
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\size=4
[Throttle%20Calibration]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DESCRIPTION=Cruise
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_PARAMID=TRIM_THROTTLE
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\2\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DESCRIPTION=Min
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_PARAMID=THR_MIN
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\3\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=Max
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=THR_MAX
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\4\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_DESCRIPTION=FS Value
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_PARAMID=THR_FS_VALUE
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\size=4
[XTrack%20Pids%20Calibration]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DESCRIPTION=Gain (cm)
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_PARAMID=XTRK_GAIN_SC
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\2\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DESCRIPTION=Entry Angle
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_PARAMID=XTRK_ANGLE_CD
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\size=2
[QuadCoptor%20Frame Setup]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_DESCRIPTION=Quadcoptor Frame Type
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_PARAMID=FRAME
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COUNT=3
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Plus
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_IMG=files/images/mavs/frames_plus.png
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=X
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_IMG=files/images/mavs/frames_x.png
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=V
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_2_IMG=files/images/mavs/frames-05.png
QGC_TOOL_WIDGET_ITEMS\size=1
\ No newline at end of file
[Failsafe%20Configuration]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_DESCRIPTION=Failsafe Action
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_PARAMID=FS_ACTION
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COUNT=3
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=RTL
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=Hold
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2
QGC_TOOL_WIDGET_ITEMS\2\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_DESCRIPTION=GCS failsafe enable
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_PARAMID=FS_GCS_ENABLE
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Enabled
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\3\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=Failsafe timeout (In Seconds)
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=FS_TIMEOUT
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MAX=100
QGC_TOOL_WIDGET_ITEMS\4\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_DESCRIPTION=Throttle Failsafe Enable
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_PARAMID=FS_THR_ENABLE
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_COUNT=2
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Enabled
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\5\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_DESCRIPTION=Throttle Failsafe Value (PWM)
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_PARAMID=FS_THR_VALUE
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MAX=1000
QGC_TOOL_WIDGET_ITEMS\size=5
[Flight%20Modes]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_DESCRIPTION=Mode Channel
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_PARAMID=FLTMODE_CH
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COUNT=12
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=RC 1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=RC 2
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_VAL=2
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=RC 3
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_2_VAL=3
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=RC 4
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_3_VAL=4
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=RC 5
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_4_VAL=5
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_5_TEXT=RC 6
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_5_VAL=6
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_6_TEXT=RC 7
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_6_VAL=7
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_7_TEXT=RC 8
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_7_VAL=8
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_8_TEXT=RC 9
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_8_VAL=9
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_9_TEXT=RC 10
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_9_VAL=10
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_10_TEXT=RC 11
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_10_VAL=11
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_11_TEXT=RC 12
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_11_VAL=12
QGC_TOOL_WIDGET_ITEMS\2\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_DESCRIPTION=Mode 1 (PWM 0-1230)
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_PARAMID=FLTMODE1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_COUNT=11
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Stablilize
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Acro
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=Alt Hold
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=Auto
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_3_VAL=3
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=Guided
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_4_VAL=4
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_5_TEXT=Loiter
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_5_VAL=6
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_6_TEXT=RTL
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_6_VAL=6
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_7_TEXT=Circle
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_7_VAL=7
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_8_TEXT=Pos Hold
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_8_VAL=8
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_9_TEXT=Land
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_9_VAL=9
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_10_TEXT=Toy
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_10_VAL=11
QGC_TOOL_WIDGET_ITEMS\3\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_DESCRIPTION=Mode 2 (PWM 1231-1360)
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_PARAMID=FLTMODE2
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_COUNT=11
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Stablilize
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Acro
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=Alt Hold
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=Auto
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_3_VAL=3
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=Guided
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_4_VAL=4
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_5_TEXT=Loiter
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_5_VAL=6
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_6_TEXT=RTL
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_6_VAL=6
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_7_TEXT=Circle
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_7_VAL=7
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_8_TEXT=Pos Hold
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_8_VAL=8
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_9_TEXT=Land
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_9_VAL=9
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_10_TEXT=Toy
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_10_VAL=1
1QGC_TOOL_WIDGET_ITEMS\4\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_DESCRIPTION=Mode 3 (PWM 1361-1490)
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_PARAMID=FLTMODE3
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_COUNT=11
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Stablilize
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Acro
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=Alt Hold
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=Auto
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_3_VAL=3
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=Guided
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_4_VAL=4
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_5_TEXT=Loiter
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_5_VAL=6
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_6_TEXT=RTL
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_6_VAL=6
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_7_TEXT=Circle
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_7_VAL=7
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_8_TEXT=Pos Hold
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_8_VAL=8
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_9_TEXT=Land
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_9_VAL=9
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_10_TEXT=Toy
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_10_VAL=11
QGC_TOOL_WIDGET_ITEMS\5\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_DESCRIPTION=Mode 4 (PWM 1491-1620)
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_PARAMID=FLTMODE4
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_COUNT=11
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Stablilize
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Acro
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=Alt Hold
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=Auto
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_3_VAL=3
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=Guided
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_4_VAL=4
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_5_TEXT=Loiter
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_5_VAL=6
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_6_TEXT=RTL
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_6_VAL=6
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_7_TEXT=Circle
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_7_VAL=7
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_8_TEXT=Pos Hold
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_8_VAL=8
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_9_TEXT=Land
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_9_VAL=9
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_10_TEXT=Toy
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_10_VAL=11
QGC_TOOL_WIDGET_ITEMS\6\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_DESCRIPTION=Mode 5 (PWM 1621-1749)
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_PARAMID=FLTMODE5
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_COUNT=11
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Stablilize
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Acro
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=Alt Hold
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=Auto
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_3_VAL=3
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=Guided
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_4_VAL=4
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_5_TEXT=Loiter
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_5_VAL=6
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_6_TEXT=RTL
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_6_VAL=6
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_7_TEXT=Circle
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_7_VAL=7
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_8_TEXT=Pos Hold
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_8_VAL=8
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_9_TEXT=Land
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_9_VAL=9
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_10_TEXT=Toy
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_10_VAL=11
QGC_TOOL_WIDGET_ITEMS\7\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_DESCRIPTION=Mode 6 (PWM 1750+)
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_PARAMID=FLTMODE6
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_COUNT=11
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Stablilize
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Acro
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=Alt Hold
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=Auto
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_3_VAL=3
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=Guided
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_4_VAL=4
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_5_TEXT=Loiter
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_5_VAL=6
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_6_TEXT=RTL
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_6_VAL=6
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_7_TEXT=Circle
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_7_VAL=7
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_8_TEXT=Pos Hold
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_8_VAL=8
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_9_TEXT=Land
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_9_VAL=9
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_10_TEXT=Toy
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_10_VAL=11
QGC_TOOL_WIDGET_ITEMS\size=7
[Airframe%20Config]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=COMBO
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_DESCRIPTION=Quadcoptor Configuration
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_PARAMID=FRAME
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COMPONENTID=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COUNT=3
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Plus
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=X
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=V
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2
QGC_TOOL_WIDGET_ITEMS\size=1
[PX4%20Calibration%20Tool]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=COMMANDBUTTON
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_DESCRIPTION=Reboot (only in standby)
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_BUTTONTEXT=REBOOT
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_COMMANDID=246
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM1=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM2=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM3=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM4=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM5=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM6=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM7=0
QGC_TOOL_WIDGET_ITEMS\2\TYPE=COMMANDBUTTON
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_DESCRIPTION=Magnetometer calibration
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_BUTTONTEXT=MAG
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_COMMANDID=241
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM1=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM2=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM3=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM4=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM5=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM6=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM7=0
QGC_TOOL_WIDGET_ITEMS\3\TYPE=COMMANDBUTTON
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_DESCRIPTION=Accelerometer calibration
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_BUTTONTEXT=ACCEL
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_COMMANDID=241
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM1=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM2=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM3=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM4=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM5=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM6=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM7=0
QGC_TOOL_WIDGET_ITEMS\4\TYPE=COMMANDBUTTON
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_DESCRIPTION=Gyroscope calibration
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_BUTTONTEXT=GYRO
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_COMMANDID=241
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM1=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM2=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM3=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM4=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM5=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM6=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM7=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_DESCRIPTION=RC Trim calibration
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_BUTTONTEXT=TRIM
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_COMMANDID=241
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM1=1
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM2=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM3=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM4=1
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM5=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM6=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM7=0
QGC_TOOL_WIDGET_ITEMS\size=5
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:18pt;">Sensor Calibration</span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:16pt;"><br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:12pt;">The PX4FMU sensors can be calibrated with the buttons on the right. Gyroscope (GYRO) and Accelerometer (ACCEL) calibrations have to be performed with a static, unmoved system. The magnetometer calibration needs to be performed while moving the device.</span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:12pt;"><br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:16pt;">Magnetometer Calibration</span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:16pt;"><br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:12pt;">Carefully follow the instructions. Click on MAG to start the calibration. Watch the communication console for further instructions (Available through Main Menu -&gt; Tool Widgets -&gt; Communication Console). Do not calibrate the vehicle in vincinity of metal, e.g. from a table or chair. Start the calibration, leave the system unmoved on the table. Wait for the double beep. Next move the system in a figure eight, roll and pitch it strongly, rotate around all axes and perform the figure eight also upside-down. The calibration is finished after the triple beep.</span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:12pt;"><br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:16pt;">Accelerometer Calibration</span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:16pt;"><br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:12pt;">Put the system on an absolutely level surface and press ACCEL, wait for the the triple beep. Do not move the system. If no flat surface is available, rather not calibrate the system.</span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:12pt;"><br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:16pt;">Gyroscope Calibration</span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:16pt;"><br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:12pt;">The orientation is not important for this calibration, but do not move the system until the triple beep or the matching text message in the console.</span></p></body></html>
\ No newline at end of file
[PX4%20Fixed%20Wing%20Attitude%20Control]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DESCRIPTION=Roll Rate P Gain
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_PARAMID=FW_ROLLRATE_P
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_COMPONENTID=50
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MAX=2
QGC_TOOL_WIDGET_ITEMS\size=1
[PX4%20Fixed%20Wing%20Position%20Control]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DESCRIPTION=Heading P Gain
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_PARAMID=FW_HEADING_P
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_COMPONENTID=50
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MAX=2
QGC_TOOL_WIDGET_ITEMS\size=1
[PX4%20Multirotor%20Attitude%20Control]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DESCRIPTION=Attitude P Gain
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_PARAMID=MC_ATT_P
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_COMPONENTID=50
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MAX=1.5
QGC_TOOL_WIDGET_ITEMS\2\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DESCRIPTION=Attitude I Gain
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_PARAMID=MC_ATT_I
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_COMPONENTID=50
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MAX=1
QGC_TOOL_WIDGET_ITEMS\3\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=Attitude D Gain
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=MC_ATT_D
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_COMPONENTID=50
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MAX=1
QGC_TOOL_WIDGET_ITEMS\4\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_DESCRIPTION=Attitude Anti-Windup
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_PARAMID=MC_ATT_AWU
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_COMPONENTID=50
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MAX=1
QGC_TOOL_WIDGET_ITEMS\5\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_DESCRIPTION=Attitude Output Limit
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_PARAMID=MC_ATT_LIM
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_COMPONENTID=50
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MAX=3
QGC_TOOL_WIDGET_ITEMS\6\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_DESCRIPTION=Heading / Yaw P Gain
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_PARAMID=MC_YAWPOS_P
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_COMPONENTID=50
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_MAX=1.2
QGC_TOOL_WIDGET_ITEMS\7\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_DESCRIPTION=Heading / Yaw D Gain
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_PARAMID=MC_YAWPOS_D
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_COMPONENTID=50
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_MAX=1
QGC_TOOL_WIDGET_ITEMS\8\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_DESCRIPTION=Roll / Pitch Rate P Gain
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_PARAMID=MC_ATTRATE_P
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_COMPONENTID=50
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_MAX=1.5
QGC_TOOL_WIDGET_ITEMS\9\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_DESCRIPTION=Roll / Pitch Rate D Gain
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_PARAMID=MC_ATTRATE_D
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_COMPONENTID=50
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_MAX=0.3
QGC_TOOL_WIDGET_ITEMS\10\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_DESCRIPTION=Yaw Rate P Gain
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_PARAMID=MC_YAWRATE_P
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_COMPONENTID=50
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_MAX=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DISPLAY_INFO=false
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DISPLAY_INFO=true
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DISPLAY_INFO=true
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_DISPLAY_INFO=true
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_DISPLAY_INFO=true
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_DISPLAY_INFO=true
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_DISPLAY_INFO=true
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_DISPLAY_INFO=true
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_DISPLAY_INFO=true
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_DISPLAY_INFO=true
QGC_TOOL_WIDGET_ITEMS\size=10
[PX4%20Multirotor%20Attitude%20Control]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DESCRIPTION=Attitude P Gain
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_PARAMID=MC_ATT_P
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_COMPONENTID=50
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MAX=1.5
QGC_TOOL_WIDGET_ITEMS\2\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DESCRIPTION=Attitude I Gain
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_PARAMID=MC_ATT_I
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_COMPONENTID=50
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MAX=1
QGC_TOOL_WIDGET_ITEMS\3\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=Attitude D Gain
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=MC_ATT_D
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_COMPONENTID=50
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MAX=1
QGC_TOOL_WIDGET_ITEMS\4\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_DESCRIPTION=Attitude Anti-Windup
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_PARAMID=MC_ATT_AWU
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_COMPONENTID=50
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MAX=1
QGC_TOOL_WIDGET_ITEMS\5\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_DESCRIPTION=Attitude Output Limit
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_PARAMID=MC_ATT_LIM
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_COMPONENTID=50
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MAX=3
QGC_TOOL_WIDGET_ITEMS\6\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_DESCRIPTION=Heading / Yaw P Gain
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_PARAMID=MC_YAWPOS_P
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_COMPONENTID=50
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_MAX=1.2
QGC_TOOL_WIDGET_ITEMS\7\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_DESCRIPTION=Heading / Yaw D Gain
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_PARAMID=MC_YAWPOS_D
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_COMPONENTID=50
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_MAX=1
QGC_TOOL_WIDGET_ITEMS\8\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_DESCRIPTION=Roll / Pitch Rate P Gain
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_PARAMID=MC_ATTRATE_P
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_COMPONENTID=50
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_MAX=1.5
QGC_TOOL_WIDGET_ITEMS\9\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_DESCRIPTION=Roll / Pitch Rate D Gain
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_PARAMID=MC_ATTRATE_D
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_COMPONENTID=50
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_MAX=0.3
QGC_TOOL_WIDGET_ITEMS\10\TYPE=SLIDER
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_DESCRIPTION=Yaw Rate P Gain
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_PARAMID=MC_YAWRATE_P
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_COMPONENTID=50
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_MIN=0
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_MAX=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DISPLAY_INFO=false
QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DISPLAY_INFO=true
QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DISPLAY_INFO=true
QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_DISPLAY_INFO=true
QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_DISPLAY_INFO=true
QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_DISPLAY_INFO=true
QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_DISPLAY_INFO=true
QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_DISPLAY_INFO=true
QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_DISPLAY_INFO=true
QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_DISPLAY_INFO=true
QGC_TOOL_WIDGET_ITEMS\size=10
[PX4%20Calibration%20Tool]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=COMMANDBUTTON
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_DESCRIPTION=Reboot (only in standby)
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_BUTTONTEXT=REBOOT
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_COMMANDID=246
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM1=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM2=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM3=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM4=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM5=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM6=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM7=0
QGC_TOOL_WIDGET_ITEMS\2\TYPE=COMMANDBUTTON
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_DESCRIPTION=Magnetometer calibration
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_BUTTONTEXT=MAG
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_COMMANDID=241
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM1=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM2=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM3=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM4=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM5=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM6=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM7=0
QGC_TOOL_WIDGET_ITEMS\3\TYPE=COMMANDBUTTON
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_DESCRIPTION=Accelerometer calibration
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_BUTTONTEXT=ACCEL
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_COMMANDID=241
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM1=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM2=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM3=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM4=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM5=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM6=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM7=0
QGC_TOOL_WIDGET_ITEMS\4\TYPE=COMMANDBUTTON
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_DESCRIPTION=Gyroscope calibration
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_BUTTONTEXT=GYRO
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_COMMANDID=241
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM1=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM2=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM3=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM4=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM5=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM6=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM7=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_DESCRIPTION=RC Trim calibration
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_BUTTONTEXT=TRIM
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_COMMANDID=241
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM1=1
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM2=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM3=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM4=1
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM5=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM6=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM7=0
QGC_TOOL_WIDGET_ITEMS\size=5
[PX4%20Calibration%20Tool]
QGC_TOOL_WIDGET_ITEMS\1\TYPE=COMMANDBUTTON
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_DESCRIPTION=Reboot (only in standby)
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_BUTTONTEXT=REBOOT
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_COMMANDID=246
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM1=1
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM2=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM3=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM4=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM5=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM6=0
QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM7=0
QGC_TOOL_WIDGET_ITEMS\2\TYPE=COMMANDBUTTON
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_DESCRIPTION=Magnetometer calibration
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_BUTTONTEXT=MAG
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_COMMANDID=241
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM1=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM2=1
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM3=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM4=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM5=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM6=0
QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM7=0
QGC_TOOL_WIDGET_ITEMS\3\TYPE=COMMANDBUTTON
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_DESCRIPTION=Accelerometer calibration
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_BUTTONTEXT=ACCEL
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_COMMANDID=241
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM1=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM2=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM3=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM4=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM5=1
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM6=0
QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM7=0
QGC_TOOL_WIDGET_ITEMS\4\TYPE=COMMANDBUTTON
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_DESCRIPTION=Gyroscope calibration
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_BUTTONTEXT=GYRO
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_COMMANDID=241
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM1=1
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM2=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM3=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM4=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM5=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM6=0
QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM7=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_DESCRIPTION=RC Trim calibration
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_BUTTONTEXT=TRIM
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_COMMANDID=241
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM1=1
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM2=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM3=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM4=1
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM5=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM6=0
QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM7=0
QGC_TOOL_WIDGET_ITEMS\size=5
......@@ -35,6 +35,8 @@ typedef struct param_union {
uint32_t param_uint32;
uint8_t param_uint8;
uint8_t bytes[4];
int16_t param_int16;
int8_t param_int8;
};
uint8_t type;
} mavlink_param_union_t;
......
......@@ -19,7 +19,7 @@
message(Qt version $$[QT_VERSION])
win32-msvc2008|win32-msvc2010 {
win32-msvc2008|win32-msvc2010|win32-msvc2012 {
QMAKE_POST_LINK += $$quote(echo "Copying files"$$escape_expand(\\n))
} else {
QMAKE_POST_LINK += $$quote(echo "Copying files")
......@@ -261,7 +261,7 @@ linux-g++-64 {
}
# Windows (32bit), Visual Studio
win32-msvc2008|win32-msvc2010 {
win32-msvc2008|win32-msvc2010|win32-msvc2012 {
win32-msvc2008 {
message(Building for Windows Visual Studio 2008 (32bit))
......
......@@ -148,7 +148,6 @@ INCLUDEPATH += . \
libs/thirdParty/qserialport/include/QtSerialPort \
libs/thirdParty/qserialport/src \
libs/qextserialport
# Include serial port library (QSerial)
include(qserialport.pri)
......@@ -156,9 +155,7 @@ include(qserialport.pri)
macx|macx-g++|macx-g++42::SOURCES += libs/qextserialport/qextserialenumerator_osx.cpp
linux-g++::SOURCES += libs/qextserialport/qextserialenumerator_unix.cpp
linux-g++-64::SOURCES += libs/qextserialport/qextserialenumerator_unix.cpp
win32::SOURCES += libs/qextserialport/qextserialenumerator_win.cpp
win32-msvc2008|win32-msvc2010::SOURCES += libs/qextserialport/qextserialenumerator_win.cpp
win32-msvc2008|win32-msvc2010|win32-msvc2012::SOURCES += libs/qextserialport/qextserialenumerator_win.cpp
# Input
FORMS += src/ui/MainWindow.ui \
src/ui/CommSettings.ui \
......@@ -227,7 +224,9 @@ FORMS += src/ui/MainWindow.ui \
src/ui/QGCHilConfiguration.ui \
src/ui/QGCHilFlightGearConfiguration.ui \
src/ui/QGCHilJSBSimConfiguration.ui \
src/ui/QGCHilXPlaneConfiguration.ui
src/ui/QGCHilXPlaneConfiguration.ui \
src/ui/designer/QGCComboBox.ui \
src/ui/designer/QGCTextLabel.ui
INCLUDEPATH += src \
src/ui \
src/ui/linechart \
......@@ -370,10 +369,13 @@ HEADERS += src/MG.h \
src/ui/QGCHilConfiguration.h \
src/ui/QGCHilFlightGearConfiguration.h \
src/ui/QGCHilJSBSimConfiguration.h \
src/ui/QGCHilXPlaneConfiguration.h
src/ui/QGCHilXPlaneConfiguration.h \
src/ui/designer/QGCComboBox.h \
src/ui/designer/QGCTextLabel.h \
src/ui/submainwindow.h
# Google Earth is only supported on Mac OS and Windows with Visual Studio Compiler
macx|macx-g++|macx-g++42|win32-msvc2008|win32-msvc2010::HEADERS += src/ui/map3D/QGCGoogleEarthView.h
macx|macx-g++|macx-g++42|win32-msvc2008|win32-msvc2010|win32-msvc2012::HEADERS += src/ui/map3D/QGCGoogleEarthView.h
contains(DEPENDENCIES_PRESENT, osg) {
message("Including headers for OpenSceneGraph")
......@@ -532,10 +534,13 @@ SOURCES += src/main.cc \
src/ui/QGCHilConfiguration.cc \
src/ui/QGCHilFlightGearConfiguration.cc \
src/ui/QGCHilJSBSimConfiguration.cc \
src/ui/QGCHilXPlaneConfiguration.cc
src/ui/QGCHilXPlaneConfiguration.cc \
src/ui/designer/QGCComboBox.cc \
src/ui/designer/QGCTextLabel.cc \
src/ui/submainwindow.cpp
# Enable Google Earth only on Mac OS and Windows with Visual Studio compiler
macx|macx-g++|macx-g++42|win32-msvc2008|win32-msvc2010::SOURCES += src/ui/map3D/QGCGoogleEarthView.cc
macx|macx-g++|macx-g++42|win32-msvc2008|win32-msvc2010|win32-msvc2012::SOURCES += src/ui/map3D/QGCGoogleEarthView.cc
# Enable OSG only if it has been found
contains(DEPENDENCIES_PRESENT, osg) {
......@@ -616,7 +621,7 @@ TRANSLATIONS += es-MX.ts \
# xbee support
# libxbee only supported by linux and windows systems
win32-msvc2008|win32-msvc2010|linux {
win32-msvc2008|win32-msvc2010|win32-msvc2012|linux {
HEADERS += src/comm/XbeeLinkInterface.h \
src/comm/XbeeLink.h \
src/comm/HexSpinBox.h \
......@@ -628,8 +633,7 @@ win32-msvc2008|win32-msvc2010|linux {
DEFINES += XBEELINK
INCLUDEPATH += libs/thirdParty/libxbee
# TO DO: build library when it does not exist already
LIBS += -Llibs/thirdParty/libxbee/lib \
-llibxbee
LIBS += -llibs/thirdParty/libxbee/lib/libxbee
}
###################################################################
......@@ -652,7 +656,7 @@ linux-g++|linux-g++-64{
# Support for Windows systems
# You have to install the official 3DxWare driver for Windows to use the 3D mouse support on Windows systems!
win32-msvc2008|win32-msvc2010 {
win32-msvc2008|win32-msvc2010|win32-msvc2012 {
message("Including support for 3DxWare for Windows system.")
SOURCES += libs/thirdParty/3DMouse/win/MouseParameters.cpp \
libs/thirdParty/3DMouse/win/Mouse3DInput.cpp \
......
......@@ -26,7 +26,7 @@ macx|linux-g++|linux-g++-64 {
HEADERS += $$QSERIALPORT_ROOT/src/posix/termioshelper.h
}
win32-msvc2008|win32-msvc2010|win32-g++ {
win32-msvc2008|win32-msvc2010|win32-msvc2012|win32-g++ {
HEADERS += $$QSERIALPORT_ROOT/src/win32/commdcbhelper.h \
$$QSERIALPORT_ROOT/src/win32/qwincommevtnotifier.h \
$$QSERIALPORT_ROOT/src/win32/wincommevtbreaker.h \
......@@ -43,7 +43,7 @@ SOURCES += $$QSERIALPORT_ROOT/src/posix/qserialportnative_posix.cpp \
$$QSERIALPORT_ROOT/src/posix/termioshelper.cpp
}
win32-msvc2008|win32-msvc2010|win32-g++ {
win32-msvc2008|win32-msvc2010|win32-msvc2012|win32-g++ {
SOURCES += $$QSERIALPORT_ROOT/src/win32/commdcbhelper.cpp \
$$QSERIALPORT_ROOT/src/win32/qserialportnative_win32.cpp \
$$QSERIALPORT_ROOT/src/win32/qwincommevtnotifier.cpp \
......
......@@ -130,7 +130,7 @@ void JoystickInput::init()
int numJoysticks = SDL_NumJoysticks();
// Wait for joysticks if none is connected
while (numJoysticks == 0)
while (numJoysticks == 0 && !done)
{
QGC::SLEEP::msleep(400);
// INITIALIZE SDL Joystick support
......@@ -140,6 +140,10 @@ void JoystickInput::init()
}
numJoysticks = SDL_NumJoysticks();
}
if (done)
{
return;
}
printf("%d Input devices found:\n", numJoysticks);
for(int i=0; i < SDL_NumJoysticks(); i++ )
......@@ -157,6 +161,10 @@ void JoystickInput::init()
// Make sure active UAS is set
setActiveUAS(UASManager::instance()->getActiveUAS());
}
void JoystickInput::shutdown()
{
done = true;
}
/**
* @brief Execute the Joystick process
......@@ -169,8 +177,9 @@ void JoystickInput::run()
{
if (done)
{
done = false;
exit();
done = false;
exit();
return;
}
while(SDL_PollEvent(&event))
{
......
......@@ -55,6 +55,7 @@ public:
JoystickInput();
~JoystickInput();
void run();
void shutdown();
const QString& getName();
......
......@@ -27,7 +27,6 @@ This file is part of the QGROUNDCONTROL project
*/
#include "ArduPilotMegaMAV.h"
ArduPilotMegaMAV::ArduPilotMegaMAV(MAVLinkProtocol* mavlink, int id) :
UAS(mavlink, id)//,
// place other initializers here
......@@ -63,3 +62,23 @@ void ArduPilotMegaMAV::receiveMessage(LinkInterface* link, mavlink_message_t mes
}
}
}
void ArduPilotMegaMAV::setMountConfigure(unsigned char mode, bool stabilize_roll,bool stabilize_pitch,bool stabilize_yaw)
{
//Only supported by APM
mavlink_message_t msg;
mavlink_msg_mount_configure_pack(255,1,&msg,this->uasId,1,mode,stabilize_roll,stabilize_pitch,stabilize_yaw);
sendMessage(msg);
}
void ArduPilotMegaMAV::setMountControl(double pa,double pb,double pc,bool islatlong)
{
mavlink_message_t msg;
if (islatlong)
{
mavlink_msg_mount_control_pack(255,1,&msg,this->uasId,1,pa*10000000.0,pb*10000000.0,pc*10000000.0,0);
}
else
{
mavlink_msg_mount_control_pack(255,1,&msg,this->uasId,1,pa,pb,pc,0);
}
sendMessage(msg);
}
......@@ -25,12 +25,18 @@ This file is part of the QGROUNDCONTROL project
#define ARDUPILOTMEGAMAV_H
#include "UAS.h"
#include "ardupilotmega/mavlink_msg_mount_configure.h"
#include "ardupilotmega/mavlink_msg_mount_control.h"
#include "ardupilotmega/mavlink_msg_mount_status.h"
class ArduPilotMegaMAV : public UAS
{
Q_OBJECT
public:
ArduPilotMegaMAV(MAVLinkProtocol* mavlink, int id = 0);
/** @brief Set camera mount stabilization modes */
void setMountConfigure(unsigned char mode, bool stabilize_roll,bool stabilize_pitch,bool stabilize_yaw);
/** @brief Set camera mount control */
void setMountControl(double pa,double pb,double pc,bool islatlong);
public slots:
/** @brief Receive a MAVLink message from this MAV */
void receiveMessage(LinkInterface* link, mavlink_message_t message);
......
......@@ -43,6 +43,7 @@ public:
virtual double getParamMax(const QString& param) = 0;
virtual double getParamDefault(const QString& param) = 0;
virtual QString getParamInfo(const QString& param) = 0;
virtual void setParamInfo(const QMap<QString,QString>& param) = 0;
/** @brief Request an update for the parameter list */
void requestParameterListUpdate(int component = 0);
......
......@@ -881,12 +881,21 @@ void UAS::receiveMessage(LinkInterface* link, mavlink_message_t message)
if (parameters.value(component)->contains(parameterName)) parameters.value(component)->remove(parameterName);
// Insert with correct type
// TODO: This is a hack for MAV_AUTOPILOT_ARDUPILOTMEGA until the new version of MAVLink and a fix for their param handling.
switch (value.param_type)
{
case MAV_PARAM_TYPE_REAL32:
{
// Variant
QVariant param(val.param_float);
QVariant param;
if (getAutopilotType() == MAV_AUTOPILOT_ARDUPILOTMEGA)
{
param = QVariant(val.param_float);
}
else
{
param = QVariant(val.param_float);
}
parameters.value(component)->insert(parameterName, param);
// Emit change
emit parameterChanged(uasId, message.compid, parameterName, param);
......@@ -897,17 +906,72 @@ void UAS::receiveMessage(LinkInterface* link, mavlink_message_t message)
case MAV_PARAM_TYPE_UINT8:
{
// Variant
QVariant param(val.param_uint8);
QVariant param;
if (getAutopilotType() == MAV_AUTOPILOT_ARDUPILOTMEGA)
{
param = QVariant(QChar((unsigned char)val.param_float));
}
else
{
param = QVariant(QChar((unsigned char)val.param_uint8));
}
parameters.value(component)->insert(parameterName, param);
// Emit change
emit parameterChanged(uasId, message.compid, parameterName, param);
emit parameterChanged(uasId, message.compid, value.param_count, value.param_index, parameterName, param);
//qDebug() << "RECEIVED PARAM:" << param;
}
break;
case MAV_PARAM_TYPE_INT8:
{
// Variant
QVariant param;
if (getAutopilotType() == MAV_AUTOPILOT_ARDUPILOTMEGA)
{
param = QVariant(QChar((char)val.param_float));
}
else
{
param = QVariant(QChar((char)val.param_int8));
}
parameters.value(component)->insert(parameterName, param);
// Emit change
emit parameterChanged(uasId, message.compid, parameterName, param);
emit parameterChanged(uasId, message.compid, value.param_count, value.param_index, parameterName, param);
//qDebug() << "RECEIVED PARAM:" << param;
}
break;
case MAV_PARAM_TYPE_INT16:
{
// Variant
QVariant param;
if (getAutopilotType() == MAV_AUTOPILOT_ARDUPILOTMEGA)
{
param = QVariant((short)val.param_float);
}
else
{
param = QVariant(val.param_int16);
}
parameters.value(component)->insert(parameterName, param);
// Emit change
emit parameterChanged(uasId, message.compid, parameterName, param);
emit parameterChanged(uasId, message.compid, value.param_count, value.param_index, parameterName, param);
//qDebug() << "RECEIVED PARAM:" << param;
}
break;
case MAV_PARAM_TYPE_UINT32:
{
// Variant
QVariant param(val.param_uint32);
QVariant param;
if (getAutopilotType() == MAV_AUTOPILOT_ARDUPILOTMEGA)
{
param = QVariant((unsigned int)val.param_float);
}
else
{
param = QVariant(val.param_uint32);
}
parameters.value(component)->insert(parameterName, param);
// Emit change
emit parameterChanged(uasId, message.compid, parameterName, param);
......@@ -917,7 +981,15 @@ void UAS::receiveMessage(LinkInterface* link, mavlink_message_t message)
case MAV_PARAM_TYPE_INT32:
{
// Variant
QVariant param(val.param_int32);
QVariant param;
if (getAutopilotType() == MAV_AUTOPILOT_ARDUPILOTMEGA)
{
param = QVariant((int)val.param_float);
}
else
{
param = QVariant(val.param_int32);
}
parameters.value(component)->insert(parameterName, param);
// Emit change
emit parameterChanged(uasId, message.compid, parameterName, param);
......@@ -927,7 +999,7 @@ void UAS::receiveMessage(LinkInterface* link, mavlink_message_t message)
break;
default:
qCritical() << "INVALID DATA TYPE USED AS PARAMETER VALUE: " << value.param_type;
}
} //switch (value.param_type)
}
break;
case MAVLINK_MSG_ID_COMMAND_ACK:
......@@ -2263,23 +2335,56 @@ void UAS::setParameter(const int component, const QString& id, const QVariant& v
mavlink_param_union_t union_value;
// Assign correct value based on QVariant
switch (value.type())
// TODO: This is a hack for MAV_AUTOPILOT_ARDUPILOTMEGA until the new version of MAVLink and a fix for their param handling.
if (getAutopilotType() == MAV_AUTOPILOT_ARDUPILOTMEGA)
{
case QVariant::Int:
union_value.param_int32 = value.toInt();
p.param_type = MAV_PARAM_TYPE_INT32;
break;
case QVariant::UInt:
union_value.param_uint32 = value.toUInt();
p.param_type = MAV_PARAM_TYPE_UINT32;
break;
case QMetaType::Float:
union_value.param_float = value.toFloat();
p.param_type = MAV_PARAM_TYPE_REAL32;
break;
default:
qCritical() << "ABORTED PARAM SEND, NO VALID QVARIANT TYPE";
return;
switch (value.type())
{
case QVariant::Char:
union_value.param_float = (unsigned char)value.toChar().toAscii();
p.param_type = MAV_PARAM_TYPE_INT8;
break;
case QVariant::Int:
union_value.param_float = value.toInt();
p.param_type = MAV_PARAM_TYPE_INT32;
break;
case QVariant::UInt:
union_value.param_float = value.toUInt();
p.param_type = MAV_PARAM_TYPE_UINT32;
break;
case QMetaType::Float:
union_value.param_float = value.toFloat();
p.param_type = MAV_PARAM_TYPE_REAL32;
break;
default:
qCritical() << "ABORTED PARAM SEND, NO VALID QVARIANT TYPE";
return;
}
}
else
{
switch (value.type())
{
case QVariant::Char:
union_value.param_int8 = (unsigned char)value.toChar().toAscii();
p.param_type = MAV_PARAM_TYPE_INT8;
break;
case QVariant::Int:
union_value.param_int32 = value.toInt();
p.param_type = MAV_PARAM_TYPE_INT32;
break;
case QVariant::UInt:
union_value.param_uint32 = value.toUInt();
p.param_type = MAV_PARAM_TYPE_UINT32;
break;
case QMetaType::Float:
union_value.param_float = value.toFloat();
p.param_type = MAV_PARAM_TYPE_REAL32;
break;
default:
qCritical() << "ABORTED PARAM SEND, NO VALID QVARIANT TYPE";
return;
}
}
p.param_value = union_value.param_float;
......
......@@ -799,6 +799,40 @@ void UASWaypointManager::readWaypoints(bool readToEdit)
}
}
bool UASWaypointManager::guidedModeSupported()
{
return (uas->getAutopilotType() == MAV_AUTOPILOT_ARDUPILOTMEGA);
}
void UASWaypointManager::goToWaypoint(Waypoint *wp)
{
//Don't try to send a guided mode message to an AP that does not support it.
if (uas->getAutopilotType() == MAV_AUTOPILOT_ARDUPILOTMEGA)
{
mavlink_mission_item_t mission;
memset(&mission, 0, sizeof(mavlink_mission_item_t)); //initialize with zeros
//const Waypoint *cur_s = waypointsEditable.at(i);
mission.autocontinue = 0;
mission.current = 2; //2 for guided mode
mission.param1 = wp->getParam1();
mission.param2 = wp->getParam2();
mission.param3 = wp->getParam3();
mission.param4 = wp->getParam4();
mission.frame = wp->getFrame();
mission.command = wp->getAction();
mission.seq = 0; // don't read out the sequence number of the waypoint class
mission.x = wp->getX();
mission.y = wp->getY();
mission.z = wp->getZ();
mavlink_message_t message;
mission.target_system = uasid;
mission.target_component = MAV_COMP_ID_MISSIONPLANNER;
mavlink_msg_mission_item_encode(uas->mavlink->getSystemId(), uas->mavlink->getComponentId(), &message, &mission);
uas->sendMessage(message);
QGC::SLEEP::msleep(PROTOCOL_DELAY_MS);
}
}
void UASWaypointManager::writeWaypoints()
{
......
......@@ -66,7 +66,9 @@ private:
public:
UASWaypointManager(UAS* uas=NULL); ///< Standard constructor
~UASWaypointManager();
bool guidedModeSupported();
void goToWaypoint(Waypoint *wp);
/** @name Received message handlers */
/*@{*/
void handleWaypointCount(quint8 systemId, quint8 compId, quint16 count); ///< Handles received waypoint count messages
......
......@@ -94,7 +94,7 @@ MainWindow* MainWindow::instance(QSplashScreen* screen)
**/
MainWindow::MainWindow(QWidget *parent):
QMainWindow(parent),
currentView(VIEW_UNCONNECTED),
currentView(VIEW_MISSION),
currentStyle(QGC_MAINWINDOW_STYLE_INDOOR),
aboutToCloseFlag(false),
changingViewsFlag(false),
......@@ -104,8 +104,14 @@ MainWindow::MainWindow(QWidget *parent):
lowPowerMode(false)
{
hide();
isAdvancedMode = false;
emit initStatusChanged("Loading UI Settings..");
loadSettings();
if (settings.contains("ADVANCED_MODE"))
{
isAdvancedMode = settings.value("ADVANCED_MODE").toBool();
}
if (!settings.contains("CURRENT_VIEW"))
{
// Set this view as default view
......@@ -116,8 +122,8 @@ MainWindow::MainWindow(QWidget *parent):
// LOAD THE LAST VIEW
VIEW_SECTIONS currentViewCandidate = (VIEW_SECTIONS) settings.value("CURRENT_VIEW", currentView).toInt();
if (currentViewCandidate != VIEW_ENGINEER &&
currentViewCandidate != VIEW_OPERATOR &&
currentViewCandidate != VIEW_PILOT &&
currentViewCandidate != VIEW_MISSION &&
currentViewCandidate != VIEW_FLIGHT &&
currentViewCandidate != VIEW_FULL)
{
currentView = currentViewCandidate;
......@@ -159,16 +165,18 @@ MainWindow::MainWindow(QWidget *parent):
QList<QAction*> actions;
actions << ui.actionOperatorsView;
actions << ui.actionPilotsView;
actions << ui.actionMissionView;
actions << ui.actionFlightView;
actions << ui.actionEngineersView;
actions << ui.actionSimulation_View;
actions << ui.actionConfiguration_2;
toolBar->setPerspectiveChangeActions(actions);
customStatusBar = new QGCStatusBar(this);
setStatusBar(customStatusBar);
statusBar()->setSizeGripEnabled(true);
emit initStatusChanged("Building common widgets.");
buildCommonWidgets();
......@@ -276,6 +284,8 @@ MainWindow::~MainWindow()
// }
if (joystick)
{
joystick->shutdown();
joystick->wait(5000);
delete joystick;
joystick = NULL;
}
......@@ -380,76 +390,91 @@ void MainWindow::buildCommonWidgets()
logPlayer = new QGCMAVLinkLogPlayer(mavlink, customStatusBar);
customStatusBar->setLogPlayer(logPlayer);
// Dock widgets
if (!controlDockWidget)
// Center widgets
if (!plannerView)
{
controlDockWidget = new QDockWidget(tr("Control"), this);
controlDockWidget->setObjectName("UNMANNED_SYSTEM_CONTROL_DOCKWIDGET");
controlDockWidget->setWidget( new UASControlWidget(this) );
addTool(controlDockWidget, tr("Control"), Qt::LeftDockWidgetArea);
plannerView = new SubMainWindow(this);
plannerView->setCentralWidget(new QGCMapTool(this));
//mapWidget = new QGCMapTool(this);
addCentralWidget(plannerView, "Maps");
}
if (!listDockWidget)
//pilotView
if (!pilotView)
{
listDockWidget = new QDockWidget(tr("Unmanned Systems"), this);
listDockWidget->setWidget( new UASListWidget(this) );
listDockWidget->setObjectName("UNMANNED_SYSTEMS_LIST_DOCKWIDGET");
addTool(listDockWidget, tr("Unmanned Systems"), Qt::RightDockWidgetArea);
pilotView = new SubMainWindow(this);
pilotView->setObjectName("VIEW_FLIGHT");
pilotView->setCentralWidget(new HUD(320,240,this));
//hudWidget = new HUD(320, 240, this);
//addCentralWidget(hudWidget, tr("Head Up Display"));
//mapWidget = new QGCMapTool(this);
addCentralWidget(pilotView, "Pilot");
}
if (!configView)
{
configView = new SubMainWindow(this);
configView->setObjectName("VIEW_CONFIGURATION");
configView->setCentralWidget(new QGCVehicleConfig(this));
addCentralWidget(configView,"Config");
centralWidgetToDockWidgetsMap[VIEW_CONFIGURATION] = QMap<QString,QWidget*>();
if (!waypointsDockWidget)
}
if (!engineeringView)
{
waypointsDockWidget = new QDockWidget(tr("Mission Plan"), this);
waypointsDockWidget->setWidget( new QGCWaypointListMulti(this) );
waypointsDockWidget->setObjectName("WAYPOINT_LIST_DOCKWIDGET");
addTool(waypointsDockWidget, tr("Mission Plan"), Qt::BottomDockWidgetArea);
engineeringView = new SubMainWindow(this);
engineeringView->setObjectName("VIEW_ENGINEER");
engineeringView->setCentralWidget(new XMLCommProtocolWidget(this));
addCentralWidget(engineeringView,"Mavlink Generator");
}
if (!infoDockWidget)
if (!dataView)
{
infoDockWidget = new QDockWidget(tr("Status Details"), this);
infoDockWidget->setWidget( new UASInfoWidget(this) );
infoDockWidget->setObjectName("UAS_STATUS_DETAILS_DOCKWIDGET");
addTool(infoDockWidget, tr("Status Details"), Qt::RightDockWidgetArea);
dataView = new SubMainWindow(this);
dataView->setObjectName("VIEW_DATA");
dataView->setCentralWidget(new QGCDataPlot2D(this));
addCentralWidget(dataView,tr("Logfile Plot"));
}
if (!debugConsoleDockWidget)
if (!simView)
{
debugConsoleDockWidget = new QDockWidget(tr("Communication Console"), this);
debugConsoleDockWidget->setWidget( new DebugConsole(this) );
debugConsoleDockWidget->setObjectName("COMMUNICATION_DEBUG_CONSOLE_DOCKWIDGET");
simView = new SubMainWindow(this);
simView->setObjectName("VIEW_SIMULATOR");
simView->setCentralWidget(new QGCMapTool(this));
addCentralWidget(simView,tr("Simulation View"));
}
DebugConsole *debugConsole = dynamic_cast<DebugConsole*>(debugConsoleDockWidget->widget());
connect(mavlinkDecoder, SIGNAL(textMessageReceived(int, int, int, const QString)), debugConsole, SLOT(receiveTextMessage(int, int, int, const QString)));
// Dock widgets
QAction* tempAction = ui.menuTools->addAction(tr("Control"));
tempAction->setCheckable(true);
connect(tempAction,SIGNAL(triggered(bool)),this, SLOT(showTool(bool)));
addTool(debugConsoleDockWidget, tr("Communication Console"), Qt::BottomDockWidgetArea);
}
createDockWidget(simView,new UASControlWidget(this),tr("Control"),"UNMANNED_SYSTEM_CONTROL_DOCKWIDGET",VIEW_SIMULATION,Qt::LeftDockWidgetArea);
createDockWidget(pilotView,new UASListWidget(this),tr("Unmanned Systems"),"UNMANNED_SYSTEM_LIST_DOCKWIDGET",VIEW_FLIGHT,Qt::LeftDockWidgetArea);
createDockWidget(plannerView,new UASListWidget(this),tr("Unmanned Systems"),"UNMANNED_SYSTEM_LIST_DOCKWIDGET",VIEW_MISSION,Qt::LeftDockWidgetArea);
createDockWidget(plannerView,new QGCWaypointListMulti(this),tr("Mission Plan"),"WAYPOINT_LIST_DOCKWIDGET",VIEW_MISSION,Qt::BottomDockWidgetArea);
createDockWidget(simView,new QGCWaypointListMulti(this),tr("Mission Plan"),"WAYPOINT_LIST_DOCKWIDGET",VIEW_SIMULATION,Qt::BottomDockWidgetArea);
createDockWidget(engineeringView,new QGCMAVLinkInspector(mavlink,this),tr("MAVLink Inspector"),"MAVLINK_INSPECTOR_DOCKWIDGET",VIEW_ENGINEER,Qt::RightDockWidgetArea);
// if (!logPlayerDockWidget)
// {
// logPlayerDockWidget = new QDockWidget(tr("MAVLink Log Player"), this);
// logPlayer = new QGCMAVLinkLogPlayer(mavlink, this);
// customStatusBar->setLogPlayer(logPlayer);
// logPlayerDockWidget->setWidget(logPlayer);
// logPlayerDockWidget->setObjectName("MAVLINK_LOG_PLAYER_DOCKWIDGET");
// addTool(logPlayerDockWidget, tr("MAVLink Log Replay"), Qt::RightDockWidgetArea);
// }
createDockWidget(engineeringView,new ParameterInterface(this),tr("Onboard Parameters"),"PARAMETER_INTERFACE_DOCKWIDGET",VIEW_ENGINEER,Qt::RightDockWidgetArea);
createDockWidget(simView,new ParameterInterface(this),tr("Onboard Parameters"),"PARAMETER_INTERFACE_DOCKWIDGET",VIEW_SIMULATION,Qt::RightDockWidgetArea);
{
QAction* tempAction = ui.menuTools->addAction(tr("Status Details"));
menuToDockNameMap[tempAction] = "UAS_STATUS_DETAILS_DOCKWIDGET";
tempAction->setCheckable(true);
connect(tempAction,SIGNAL(triggered(bool)),this, SLOT(showTool(bool)));
}
{
QAction* tempAction = ui.menuTools->addAction(tr("Communication Console"));
menuToDockNameMap[tempAction] = "COMMUNICATION_DEBUG_CONSOLE_DOCKWIDGET";
tempAction->setCheckable(true);
connect(tempAction,SIGNAL(triggered(bool)),this, SLOT(showTool(bool)));
}
createDockWidget(pilotView,new HSIDisplay(this),tr("Horizontal Situation"),"HORIZONTAL_SITUATION_INDICATOR_DOCKWIDGET",VIEW_FLIGHT,Qt::BottomDockWidgetArea);
createDockWidget(simView,new HSIDisplay(this),tr("Horizontal Situation"),"HORIZONTAL_SITUATION_INDICATOR_DOCKWIDGET",VIEW_SIMULATION,Qt::BottomDockWidgetArea);
if (!mavlinkInspectorWidget)
{
mavlinkInspectorWidget = new QDockWidget(tr("MAVLink Message Inspector"), this);
mavlinkInspectorWidget->setWidget( new QGCMAVLinkInspector(mavlink, this) );
mavlinkInspectorWidget->setObjectName("MAVLINK_INSPECTOR_DOCKWIDGET");
addTool(mavlinkInspectorWidget, tr("MAVLink Inspector"), Qt::RightDockWidgetArea);
}
if (!mavlinkSenderWidget)
{
// mavlinkSenderWidget = new QDockWidget(tr("MAVLink Message Sender"), this);
// mavlinkSenderWidget->setWidget( new QGCMAVLinkMessageSender(mavlink, this) );
// mavlinkSenderWidget->setObjectName("MAVLINK_SENDER_DOCKWIDGET");
// addTool(mavlinkSenderWidget, tr("MAVLink Sender"), Qt::RightDockWidgetArea);
}
//FIXME: memory of acceptList will never be freed again
QStringList* acceptList = new QStringList();
......@@ -461,119 +486,34 @@ void MainWindow::buildCommonWidgets()
QStringList* acceptList2 = new QStringList();
acceptList2->append("0,RAW_PRESSURE.pres_abs,hPa,65500");
if (!parametersDockWidget)
{
parametersDockWidget = new QDockWidget(tr("Onboard Parameters"), this);
parametersDockWidget->setWidget( new ParameterInterface(this) );
parametersDockWidget->setObjectName("PARAMETER_INTERFACE_DOCKWIDGET");
addTool(parametersDockWidget, tr("Onboard Parameters"), Qt::RightDockWidgetArea);
}
if (!hsiDockWidget)
{
hsiDockWidget = new QDockWidget(tr("Horizontal Situation Indicator"), this);
hsiDockWidget->setWidget( new HSIDisplay(this) );
hsiDockWidget->setObjectName("HORIZONTAL_SITUATION_INDICATOR_DOCK_WIDGET");
addTool(hsiDockWidget, tr("Horizontal Situation"), Qt::BottomDockWidgetArea);
}
if (!headDown1DockWidget)
{
headDown1DockWidget = new QDockWidget(tr("Flight Display"), this);
HDDisplay* hdDisplay = new HDDisplay(acceptList, "Flight Display", this);
hdDisplay->addSource(mavlinkDecoder);
headDown1DockWidget->setWidget(hdDisplay);
headDown1DockWidget->setObjectName("HEAD_DOWN_DISPLAY_1_DOCK_WIDGET");
addTool(headDown1DockWidget, tr("Flight Display"), Qt::RightDockWidgetArea);
}
if (!headDown2DockWidget)
{
headDown2DockWidget = new QDockWidget(tr("Actuator Status"), this);
HDDisplay* hdDisplay = new HDDisplay(acceptList2, "Actuator Status", this);
hdDisplay->addSource(mavlinkDecoder);
headDown2DockWidget->setWidget(hdDisplay);
headDown2DockWidget->setObjectName("HEAD_DOWN_DISPLAY_2_DOCK_WIDGET");
addTool(headDown2DockWidget, tr("Actuator Status"), Qt::RightDockWidgetArea);
}
if (!rcViewDockWidget)
{
rcViewDockWidget = new QDockWidget(tr("Radio Control"), this);
rcViewDockWidget->setWidget( new QGCRemoteControlView(this) );
rcViewDockWidget->setObjectName("RADIO_CONTROL_CHANNELS_DOCK_WIDGET");
addTool(rcViewDockWidget, tr("Radio Control"), Qt::BottomDockWidgetArea);
}
HDDisplay* hdDisplay = new HDDisplay(acceptList, "Flight Display", this);
hdDisplay->addSource(mavlinkDecoder);
createDockWidget(pilotView,hdDisplay,tr("Flight Display"),"HEAD_DOWN_DISPLAY_1_DOCKWIDGET",VIEW_FLIGHT,Qt::RightDockWidgetArea);
if (!headUpDockWidget)
{
headUpDockWidget = new QDockWidget(tr("HUD"), this);
headUpDockWidget->setWidget( new HUD(320, 240, this));
headUpDockWidget->setObjectName("HEAD_UP_DISPLAY_DOCK_WIDGET");
addTool(headUpDockWidget, tr("Head Up Display"), Qt::RightDockWidgetArea);
}
if (!video1DockWidget)
{
video1DockWidget = new QDockWidget(tr("Video Stream 1"), this);
QGCRGBDView* video1 = new QGCRGBDView(160, 120, this);
video1->enableHUDInstruments(false);
video1->enableVideo(false);
// FIXME select video stream as well
video1DockWidget->setWidget(video1);
video1DockWidget->setObjectName("VIDEO_STREAM_1_DOCK_WIDGET");
addTool(video1DockWidget, tr("Video Stream 1"), Qt::LeftDockWidgetArea);
}
HDDisplay* hdDisplay2 = new HDDisplay(acceptList2, "Actuator Status", this);
hdDisplay2->addSource(mavlinkDecoder);
createDockWidget(pilotView,hdDisplay2,tr("Actuator Status"),"HEAD_DOWN_DISPLAY_2_DOCKWIDGET",VIEW_FLIGHT,Qt::RightDockWidgetArea);
if (!video2DockWidget)
{
video2DockWidget = new QDockWidget(tr("Video Stream 2"), this);
QGCRGBDView* video2 = new QGCRGBDView(160, 120, this);
video2->enableHUDInstruments(false);
video2->enableVideo(false);
// FIXME select video stream as well
video2DockWidget->setWidget(video2);
video2DockWidget->setObjectName("VIDEO_STREAM_2_DOCK_WIDGET");
addTool(video2DockWidget, tr("Video Stream 2"), Qt::LeftDockWidgetArea);
QAction* tempAction = ui.menuTools->addAction(tr("Radio Control"));
tempAction->setCheckable(true);
connect(tempAction,SIGNAL(triggered(bool)),this, SLOT(showTool(bool)));
}
createDockWidget(simView,new HUD(320,240,this),tr("Head Up Display"),"HEAD_UP_DISPLAY_DOCKWIDGET",VIEW_SIMULATION,Qt::RightDockWidgetArea,this->width()/1.5);
// if (!rgbd1DockWidget) {
// rgbd1DockWidget = new QDockWidget(tr("Video Stream 1"), this);
// HUD* video1 = new HUD(160, 120, this);
// video1->enableHUDInstruments(false);
// video1->enableVideo(true);
// // FIXME select video stream as well
// video1DockWidget->setWidget(video1);
// video1DockWidget->setObjectName("VIDEO_STREAM_1_DOCK_WIDGET");
// addTool(video1DockWidget, tr("Video Stream 1"), Qt::LeftDockWidgetArea);
// }
// if (!rgbd2DockWidget) {
// video2DockWidget = new QDockWidget(tr("Video Stream 2"), this);
// HUD* video2 = new HUD(160, 120, this);
// video2->enableHUDInstruments(false);
// video2->enableVideo(true);
// // FIXME select video stream as well
// video2DockWidget->setWidget(video2);
// video2DockWidget->setObjectName("VIDEO_STREAM_2_DOCK_WIDGET");
// addTool(video2DockWidget, tr("Video Stream 2"), Qt::LeftDockWidgetArea);
// }
// Custom widgets, added last to all menus and layouts
buildCustomWidget();
// Center widgets
if (!mapWidget)
{
mapWidget = new QGCMapTool(this);
addCentralWidget(mapWidget, "Maps");
}
if (!protocolWidget)
/*if (!protocolWidget)
{
protocolWidget = new XMLCommProtocolWidget(this);
addCentralWidget(protocolWidget, "Mavlink Generator");
}
}*/
// if (!firmwareUpdateWidget)
// {
......@@ -581,23 +521,24 @@ void MainWindow::buildCommonWidgets()
// addCentralWidget(firmwareUpdateWidget, "Firmware Update");
// }
if (!hudWidget)
/*if (!hudWidget)
{
hudWidget = new HUD(320, 240, this);
addCentralWidget(hudWidget, tr("Head Up Display"));
}
}*/
if (!configWidget)
/*if (!configWidget)
{
configWidget = new QGCVehicleConfig(this);
addCentralWidget(configWidget, tr("Vehicle Configuration"));
}
}*/
if (!dataplotWidget)
/*if (!dataplotWidget)
{
dataplotWidget = new QGCDataPlot2D(this);
addCentralWidget(dataplotWidget, tr("Logfile Plot"));
}
}*/
#ifdef QGC_OSG_ENABLED
if (!_3DWidget)
......@@ -616,28 +557,185 @@ void MainWindow::buildCommonWidgets()
#endif
}
void MainWindow::addTool(QDockWidget* widget, const QString& title, Qt::DockWidgetArea area)
void MainWindow::addTool(SubMainWindow *parent,VIEW_SECTIONS view,QDockWidget* widget, const QString& title, Qt::DockWidgetArea area)
{
QAction* tempAction = ui.menuTools->addAction(title);
tempAction->setCheckable(true);
QVariant var;
var.setValue((QWidget*)widget);
tempAction->setData(var);
connect(tempAction,SIGNAL(triggered(bool)),this, SLOT(showTool(bool)));
connect(widget, SIGNAL(visibilityChanged(bool)), tempAction, SLOT(setChecked(bool)));
tempAction->setChecked(widget->isVisible());
addDockWidget(area, widget);
QList<QAction*> actionlist = ui.menuTools->actions();
bool found = false;
QAction *targetAction;
for (int i=0;i<actionlist.size();i++)
{
if (actionlist[i]->text() == title)
{
found = true;
targetAction = actionlist[i];
}
}
if (!found)
{
QAction* tempAction = ui.menuTools->addAction(title);
tempAction->setCheckable(true);
menuToDockNameMap[tempAction] = widget->objectName();
if (!centralWidgetToDockWidgetsMap.contains(view))
{
centralWidgetToDockWidgetsMap[view] = QMap<QString,QWidget*>();
}
centralWidgetToDockWidgetsMap[view][widget->objectName()]= widget;
connect(tempAction,SIGNAL(triggered(bool)),this, SLOT(showTool(bool)));
connect(widget, SIGNAL(visibilityChanged(bool)), tempAction, SLOT(setChecked(bool)));
tempAction->setChecked(widget->isVisible());
}
else
{
if (!menuToDockNameMap.contains(targetAction))
{
menuToDockNameMap[targetAction] = widget->objectName();
//menuToDockNameMap[targetAction] = title;
}
if (!centralWidgetToDockWidgetsMap.contains(view))
{
centralWidgetToDockWidgetsMap[view] = QMap<QString,QWidget*>();
}
centralWidgetToDockWidgetsMap[view][widget->objectName()]= widget;
connect(widget, SIGNAL(visibilityChanged(bool)), targetAction, SLOT(setChecked(bool)));
}
parent->addDockWidget(area,widget);
}
void MainWindow::createDockWidget(QWidget *parent,QWidget *child,QString title,QString objectname,VIEW_SECTIONS view,Qt::DockWidgetArea area,int minwidth,int minheight)
{
QDockWidget *widget = new QDockWidget(title,this);
if (!isAdvancedMode)
{
dockToTitleBarMap[widget] = widget->titleBarWidget();
widget->setTitleBarWidget(new QWidget(this));
}
else
{
dockToTitleBarMap[widget] = new QWidget(this);
}
widget->setObjectName(objectname);
widget->setWidget(child);
if (minheight != 0 || minwidth != 0)
{
widget->setMinimumHeight(minheight);
widget->setMinimumWidth(minwidth);
}
addTool(qobject_cast<SubMainWindow*>(parent),view,widget,title,area);
}
void MainWindow::loadDockWidget(QString name)
{
if (centralWidgetToDockWidgetsMap[currentView].contains(name))
{
return;
}
if (name == "UNMANNED_SYSTEM_CONTROL_DOCKWIDGET")
{
createDockWidget(centerStack->currentWidget(),new UASControlWidget(this),tr("Control"),"UNMANNED_SYSTEM_CONTROL_DOCKWIDGET",currentView,Qt::LeftDockWidgetArea);
}
else if (name == "UNMANNED_SYSTEM_LIST_DOCKWIDGET")
{
createDockWidget(centerStack->currentWidget(),new UASListWidget(this),tr("Unmanned Systems"),"UNMANNED_SYSTEM_LIST_DOCKWIDGET",currentView,Qt::RightDockWidgetArea);
}
else if (name == "WAYPOINT_LIST_DOCKWIDGET")
{
createDockWidget(centerStack->currentWidget(),new QGCWaypointListMulti(this),tr("Mission Plan"),"WAYPOINT_LIST_DOCKWIDGET",currentView,Qt::BottomDockWidgetArea);
}
else if (name == "MAVLINK_INSPECTOR_DOCKWIDGET")
{
createDockWidget(centerStack->currentWidget(),new QGCMAVLinkInspector(mavlink,this),tr("MAVLink Inspector"),"MAVLINK_INSPECTOR_DOCKWIDGET",currentView,Qt::RightDockWidgetArea);
}
else if (name == "PARAMETER_INTERFACE_DOCKWIDGET")
{
createDockWidget(centerStack->currentWidget(),new ParameterInterface(this),tr("Onboard Parameters"),"PARAMETER_INTERFACE_DOCKWIDGET",currentView,Qt::RightDockWidgetArea);
}
else if (name == "UAS_STATUS_DETAILS_DOCKWIDGET")
{
createDockWidget(centerStack->currentWidget(),new UASInfoWidget(this),tr("Status Details"),"UAS_STATUS_DETAILS_DOCKWIDGET",currentView,Qt::RightDockWidgetArea);
}
else if (name == "COMMUNICATION_DEBUG_CONSOLE_DOCKWIDGET")
{
createDockWidget(centerStack->currentWidget(),new DebugConsole(this),tr("Communication Console"),"COMMUNICATION_DEBUG_CONSOLE_DOCKWIDGET",currentView,Qt::BottomDockWidgetArea);
}
else if (name == "HORIZONTAL_SITUATION_INDICATOR_DOCKWIDGET")
{
createDockWidget(centerStack->currentWidget(),new HSIDisplay(this),tr("Horizontal Situation"),"HORIZONTAL_SITUATION_INDICATOR_DOCKWIDGET",currentView,Qt::BottomDockWidgetArea);
}
else if (name == "HEAD_DOWN_DISPLAY_1_DOCKWIDGET")
{
//FIXME: memory of acceptList will never be freed again
QStringList* acceptList = new QStringList();
acceptList->append("-3.3,ATTITUDE.roll,rad,+3.3,s");
acceptList->append("-3.3,ATTITUDE.pitch,deg,+3.3,s");
acceptList->append("-3.3,ATTITUDE.yaw,deg,+3.3,s");
HDDisplay *hddisplay = new HDDisplay(acceptList,"Flight Display",this);
hddisplay->addSource(mavlinkDecoder);
createDockWidget(centerStack->currentWidget(),hddisplay,tr("Flight Display"),"HEAD_DOWN_DISPLAY_1_DOCKWIDGET",currentView,Qt::RightDockWidgetArea);
}
else if (name == "HEAD_DOWN_DISPLAY_2_DOCKWIDGET")
{
//FIXME: memory of acceptList2 will never be freed again
QStringList* acceptList2 = new QStringList();
acceptList2->append("0,RAW_PRESSURE.pres_abs,hPa,65500");
HDDisplay *hddisplay = new HDDisplay(acceptList2,"Actuator Status",this);
hddisplay->addSource(mavlinkDecoder);
createDockWidget(centerStack->currentWidget(),hddisplay,tr("Actuator Status"),"HEAD_DOWN_DISPLAY_2_DOCKWIDGET",currentView,Qt::RightDockWidgetArea);
}
else if (name == "Radio Control")
{
qDebug() << "Error loading window:" << name << "Unknown window type";
//createDockWidget(centerStack->currentWidget(),hddisplay,tr("Actuator Status"),"HEADS_DOWN_DISPLAY_2_DOCKWIDGET",currentView,Qt::RightDockWidgetArea);
}
else if (name == "HEAD_UP_DISPLAY_DOCKWIDGET")
{
createDockWidget(centerStack->currentWidget(),new HUD(320,240,this),tr("Head Up Display"),"HEAD_UP_DISPLAY_DOCKWIDGET",currentView,Qt::RightDockWidgetArea);
}
else
{
qDebug() << "Error loading window:" << name;
}
}
void MainWindow::showTool(bool show)
{
//Called when a menu item is clicked on, regardless of view.
QAction* act = qobject_cast<QAction *>(sender());
QWidget* widget = qVariantValue<QWidget *>(act->data());
widget->setVisible(show);
if (menuToDockNameMap.contains(act))
{
QString name = menuToDockNameMap[act];
if (centralWidgetToDockWidgetsMap.contains(currentView))
{
if (centralWidgetToDockWidgetsMap[currentView].contains(name))
{
if (show)
{
centralWidgetToDockWidgetsMap[currentView][name]->show();
}
else
{
centralWidgetToDockWidgetsMap[currentView][name]->hide();
}
}
else if (show)
{
loadDockWidget(name);
}
}
}
//QWidget* widget = qVariantValue<QWidget *>(act->data());
//widget->setVisible(show);
}
/*void addToolByName(QString name,SubMainWindow parent,const QString& title, Qt::DockWidgetArea area)
{
if (name == "Control")
{
QDockWidget *widget = new QDockWidget(tr("Control"),this);
dockToTitleBarMap[widget] = widget->titleBarWidget();
widget->setObjectName("UNMANNED_SYSTEM_CONTROL_DOCKWIDGET");
widget->setWidget(new UASControlWidget(this));
addTool(parent,VIEW_SIMULATION,widget,tr("Control"),area);
}
}*/
void MainWindow::addCentralWidget(QWidget* widget, const QString& title)
{
// Check if this widget already has been added
......@@ -653,7 +751,7 @@ void MainWindow::addCentralWidget(QWidget* widget, const QString& title)
tempAction->setData(var);
centerStackActionGroup->addAction(tempAction);
connect(tempAction,SIGNAL(triggered()),this, SLOT(showCentralWidget()));
connect(widget, SIGNAL(visibilityChanged(bool)), tempAction, SLOT(setChecked(bool)));
//connect(widget, SIGNAL(visibilityChanged(bool)), tempAction, SLOT(setChecked(bool)));
tempAction->setChecked(widget->isVisible());
}
}
......@@ -678,7 +776,7 @@ void MainWindow::showHILConfigurationWidget(UASInterface* uas)
QDockWidget* hilDock = new QDockWidget(hilDockName, this);
hilDock->setWidget(hconf);
hilDock->setObjectName(QString("HIL_CONFIG_%1").arg(uas->getUASID()));
addTool(hilDock, hilDockName, Qt::LeftDockWidgetArea);
//addTool(hilDock, hilDockName, Qt::LeftDockWidgetArea);
hilDocks.insert(mav->getUASID(), hilDock);
if (currentView != VIEW_SIMULATION)
......@@ -1043,9 +1141,10 @@ void MainWindow::connectCommonActions()
QActionGroup* perspectives = new QActionGroup(ui.menuPerspectives);
perspectives->addAction(ui.actionEngineersView);
perspectives->addAction(ui.actionMavlinkView);
perspectives->addAction(ui.actionPilotsView);
perspectives->addAction(ui.actionFlightView);
perspectives->addAction(ui.actionSimulation_View);
perspectives->addAction(ui.actionOperatorsView);
perspectives->addAction(ui.actionMissionView);
perspectives->addAction(ui.actionConfiguration_2);
perspectives->addAction(ui.actionFirmwareUpdateView);
perspectives->addAction(ui.actionUnconnectedView);
perspectives->setExclusive(true);
......@@ -1053,9 +1152,10 @@ void MainWindow::connectCommonActions()
// Mark the right one as selected
if (currentView == VIEW_ENGINEER) ui.actionEngineersView->setChecked(true);
if (currentView == VIEW_MAVLINK) ui.actionMavlinkView->setChecked(true);
if (currentView == VIEW_PILOT) ui.actionPilotsView->setChecked(true);
if (currentView == VIEW_FLIGHT) ui.actionFlightView->setChecked(true);
if (currentView == VIEW_SIMULATION) ui.actionSimulation_View->setChecked(true);
if (currentView == VIEW_OPERATOR) ui.actionOperatorsView->setChecked(true);
if (currentView == VIEW_MISSION) ui.actionMissionView->setChecked(true);
if (currentView == VIEW_CONFIGURATION) ui.actionConfiguration_2->setChecked(true);
if (currentView == VIEW_FIRMWAREUPDATE) ui.actionFirmwareUpdateView->setChecked(true);
if (currentView == VIEW_UNCONNECTED) ui.actionUnconnectedView->setChecked(true);
......@@ -1068,6 +1168,7 @@ void MainWindow::connectCommonActions()
// Connect actions from ui
connect(ui.actionAdd_Link, SIGNAL(triggered()), this, SLOT(addLink()));
connect(ui.actionAdvanced_Mode,SIGNAL(triggered()),this,SLOT(setAdvancedMode()));
// Connect internal actions
connect(UASManager::instance(), SIGNAL(UASCreated(UASInterface*)), this, SLOT(UASCreated(UASInterface*)));
......@@ -1082,11 +1183,12 @@ void MainWindow::connectCommonActions()
connect(ui.actionConfiguration, SIGNAL(triggered()), UASManager::instance(), SLOT(configureActiveUAS()));
// Views actions
connect(ui.actionPilotsView, SIGNAL(triggered()), this, SLOT(loadPilotView()));
connect(ui.actionFlightView, SIGNAL(triggered()), this, SLOT(loadPilotView()));
connect(ui.actionSimulation_View, SIGNAL(triggered()), this, SLOT(loadSimulationView()));
connect(ui.actionEngineersView, SIGNAL(triggered()), this, SLOT(loadEngineerView()));
connect(ui.actionOperatorsView, SIGNAL(triggered()), this, SLOT(loadOperatorView()));
connect(ui.actionMissionView, SIGNAL(triggered()), this, SLOT(loadOperatorView()));
connect(ui.actionUnconnectedView, SIGNAL(triggered()), this, SLOT(loadUnconnectedView()));
connect(ui.actionConfiguration_2,SIGNAL(triggered()),this,SLOT(loadConfigurationView()));
connect(ui.actionFirmwareUpdateView, SIGNAL(triggered()), this, SLOT(loadFirmwareUpdateView()));
connect(ui.actionMavlinkView, SIGNAL(triggered()), this, SLOT(loadMAVLinkView()));
......@@ -1288,8 +1390,8 @@ void MainWindow::UASCreated(UASInterface* uas)
//if (uas != NULL)
//{
// The pilot, operator and engineer views were not available on startup, enable them now
ui.actionPilotsView->setEnabled(true);
ui.actionOperatorsView->setEnabled(true);
ui.actionFlightView->setEnabled(true);
ui.actionMissionView->setEnabled(true);
ui.actionEngineersView->setEnabled(true);
// The UAS actions are not enabled without connection to system
ui.actionLiftoff->setEnabled(true);
......@@ -1403,13 +1505,13 @@ void MainWindow::UASCreated(UASInterface* uas)
showHILConfigurationWidget(uas);
// Line chart
if (!linechartWidget)
/*if (!linechartWidget)
{
// Center widgets
linechartWidget = new Linecharts(this);
linechartWidget->addSource(mavlinkDecoder);
addCentralWidget(linechartWidget, tr("Realtime Plot"));
}
}*/
// Load default custom widgets for this autopilot type
loadCustomWidgetsFromDefaults(uas->getSystemTypeName(), uas->getAutopilotTypeName());
......@@ -1423,7 +1525,7 @@ void MainWindow::UASCreated(UASInterface* uas)
detectionDockWidget = new QDockWidget(tr("Object Recognition"), this);
detectionDockWidget->setWidget( new ObjectDetectionView("files/images/patterns", this) );
detectionDockWidget->setObjectName("OBJECT_DETECTION_DOCK_WIDGET");
addTool(detectionDockWidget, tr("Object Recognition"), Qt::RightDockWidgetArea);
//addTool(detectionDockWidget, tr("Object Recognition"), Qt::RightDockWidgetArea);
}
if (!watchdogControlDockWidget)
......@@ -1431,7 +1533,7 @@ void MainWindow::UASCreated(UASInterface* uas)
watchdogControlDockWidget = new QDockWidget(tr("Process Control"), this);
watchdogControlDockWidget->setWidget( new WatchdogControl(this) );
watchdogControlDockWidget->setObjectName("WATCHDOG_CONTROL_DOCKWIDGET");
addTool(watchdogControlDockWidget, tr("Process Control"), Qt::BottomDockWidgetArea);
//addTool(watchdogControlDockWidget, tr("Process Control"), Qt::BottomDockWidgetArea);
}
}
......@@ -1456,7 +1558,7 @@ void MainWindow::UASCreated(UASInterface* uas)
case VIEW_FIRMWAREUPDATE:
loadFirmwareUpdateView();
break;
case VIEW_PILOT:
case VIEW_FLIGHT:
loadPilotView();
break;
case VIEW_SIMULATION:
......@@ -1465,7 +1567,7 @@ void MainWindow::UASCreated(UASInterface* uas)
case VIEW_UNCONNECTED:
loadUnconnectedView();
break;
case VIEW_OPERATOR:
case VIEW_MISSION:
default:
loadOperatorView();
break;
......@@ -1513,7 +1615,17 @@ void MainWindow::storeViewState()
if (!aboutToCloseFlag)
{
// Save current state
settings.setValue(getWindowStateKey(), saveState(QGC::applicationVersion()));
SubMainWindow *win = qobject_cast<SubMainWindow*>(centerStack->currentWidget());
QList<QDockWidget*> widgets = win->findChildren<QDockWidget*>();
QString widgetnames = "";
for (int i=0;i<widgets.size();i++)
{
widgetnames += widgets[i]->objectName() + ",";
}
widgetnames = widgetnames.mid(0,widgetnames.length()-1);
settings.setValue(getWindowStateKey() + "WIDGETS",widgetnames);
settings.setValue(getWindowStateKey(), win->saveState(QGC::applicationVersion()));
settings.setValue(getWindowStateKey()+"CENTER_WIDGET", centerStack->currentIndex());
// Although we want save the state of the window, we do not want to change the top-leve state (minimized, maximized, etc)
// therefore this state is stored here and restored after applying the rest of the settings in the new
......@@ -1528,10 +1640,10 @@ void MainWindow::loadViewState()
// Restore center stack state
int index = settings.value(getWindowStateKey()+"CENTER_WIDGET", -1).toInt();
// The offline plot view is usually the consequence of a logging run, always show the realtime view first
if (centerStack->indexOf(dataplotWidget) == index)
if (centerStack->indexOf(dataView) == index)
{
// Rewrite to realtime plot
index = centerStack->indexOf(linechartWidget);
//index = centerStack->indexOf(linechartWidget);
}
if (index != -1)
......@@ -1547,137 +1659,94 @@ void MainWindow::loadViewState()
// Load defaults
switch (currentView)
{
case VIEW_CONFIGURATION:
centerStack->setCurrentWidget(configView);
break;
case VIEW_ENGINEER:
centerStack->setCurrentWidget(linechartWidget);
controlDockWidget->hide();
listDockWidget->hide();
waypointsDockWidget->hide();
infoDockWidget->hide();
debugConsoleDockWidget->show();
//mavlinkInspectorWidget->show();
//mavlinkSenderWidget->show();
parametersDockWidget->show();
hsiDockWidget->hide();
headDown1DockWidget->hide();
headDown2DockWidget->hide();
rcViewDockWidget->hide();
headUpDockWidget->hide();
video1DockWidget->hide();
video2DockWidget->hide();
centerStack->setCurrentWidget(dataView);
break;
case VIEW_PILOT:
centerStack->setCurrentWidget(hudWidget);
controlDockWidget->hide();
listDockWidget->hide();
waypointsDockWidget->hide();
infoDockWidget->hide();
debugConsoleDockWidget->hide();
// logPlayerDockWidget->hide();
mavlinkInspectorWidget->hide();
parametersDockWidget->hide();
hsiDockWidget->show();
headDown1DockWidget->show();
headDown2DockWidget->show();
rcViewDockWidget->hide();
headUpDockWidget->hide();
video1DockWidget->hide();
video2DockWidget->hide();
case VIEW_FLIGHT:
centerStack->setCurrentWidget(pilotView);
break;
case VIEW_MAVLINK:
centerStack->setCurrentWidget(protocolWidget);
controlDockWidget->hide();
listDockWidget->hide();
waypointsDockWidget->hide();
infoDockWidget->hide();
debugConsoleDockWidget->hide();
// logPlayerDockWidget->hide();
mavlinkInspectorWidget->show();
//mavlinkSenderWidget->show();
parametersDockWidget->hide();
hsiDockWidget->hide();
headDown1DockWidget->hide();
headDown2DockWidget->hide();
rcViewDockWidget->hide();
headUpDockWidget->hide();
video1DockWidget->hide();
video2DockWidget->hide();
centerStack->setCurrentWidget(engineeringView);
break;
case VIEW_FIRMWAREUPDATE:
centerStack->setCurrentWidget(firmwareUpdateWidget);
controlDockWidget->hide();
listDockWidget->hide();
waypointsDockWidget->hide();
infoDockWidget->hide();
debugConsoleDockWidget->hide();
// logPlayerDockWidget->hide();
mavlinkInspectorWidget->hide();
//mavlinkSenderWidget->hide();
parametersDockWidget->hide();
hsiDockWidget->hide();
headDown1DockWidget->hide();
headDown2DockWidget->hide();
rcViewDockWidget->hide();
headUpDockWidget->hide();
video1DockWidget->hide();
video2DockWidget->hide();
break;
case VIEW_OPERATOR:
centerStack->setCurrentWidget(mapWidget);
controlDockWidget->hide();
listDockWidget->show();
waypointsDockWidget->show();
infoDockWidget->hide();
debugConsoleDockWidget->show();
// logPlayerDockWidget->show();
parametersDockWidget->hide();
hsiDockWidget->hide();
headDown1DockWidget->hide();
headDown2DockWidget->hide();
rcViewDockWidget->hide();
headUpDockWidget->show();
video1DockWidget->hide();
video2DockWidget->hide();
mavlinkInspectorWidget->hide();
case VIEW_MISSION:
centerStack->setCurrentWidget(plannerView);
break;
case VIEW_SIMULATION:
centerStack->setCurrentWidget(mapWidget);
controlDockWidget->show();
waypointsDockWidget->show();
parametersDockWidget->show();
mavlinkInspectorWidget->hide();
foreach (int key, hilDocks.keys()) {
hilDocks.value(key)->show();
}
centerStack->setCurrentWidget(simView);
break;
case VIEW_UNCONNECTED:
case VIEW_FULL:
default:
centerStack->setCurrentWidget(mapWidget);
controlDockWidget->hide();
listDockWidget->show();
waypointsDockWidget->hide();
infoDockWidget->hide();
debugConsoleDockWidget->show();
// logPlayerDockWidget->show();
parametersDockWidget->hide();
hsiDockWidget->hide();
headDown1DockWidget->hide();
headDown2DockWidget->hide();
rcViewDockWidget->hide();
headUpDockWidget->show();
video1DockWidget->hide();
video2DockWidget->hide();
mavlinkInspectorWidget->hide();
//centerStack->setCurrentWidget(mapWidget);
if (controlDockWidget)
{
controlDockWidget->hide();
}
if (listDockWidget)
{
listDockWidget->show();
}
break;
}
}
// Restore the widget positions and size
if (settings.contains(getWindowStateKey() + "WIDGETS"))
{
QString widgetstr = settings.value(getWindowStateKey() + "WIDGETS").toString();
QStringList split = widgetstr.split(",");
foreach (QString widgetname,split)
{
if (widgetname != "")
{
loadDockWidget(widgetname);
}
}
}
if (settings.contains(getWindowStateKey()))
{
restoreState(settings.value(getWindowStateKey()).toByteArray(), QGC::applicationVersion());
SubMainWindow *win = qobject_cast<SubMainWindow*>(centerStack->currentWidget());
//settings.setValue(getWindowStateKey(), win->saveState(QGC::applicationVersion()))
win->restoreState(settings.value(getWindowStateKey()).toByteArray(), QGC::applicationVersion());
}
}
void MainWindow::setAdvancedMode()
{
if (!isAdvancedMode)
{
ui.actionAdvanced_Mode->setChecked(true);
isAdvancedMode = true;
settings.setValue("ADVANCED_MODE",true);
for (QMap<QDockWidget*,QWidget*>::const_iterator i=dockToTitleBarMap.constBegin();i!=dockToTitleBarMap.constEnd();i++)
{
//QWidget *widget = i.value();
QWidget *widget = i.key()->titleBarWidget();
i.key()->setTitleBarWidget(i.value());
dockToTitleBarMap[i.key()] = widget;
}
}
else
{
ui.actionAdvanced_Mode->setChecked(false);
isAdvancedMode = false;
settings.setValue("ADVANCED_MODE",false);
for (QMap<QDockWidget*,QWidget*>::const_iterator i=dockToTitleBarMap.constBegin();i!=dockToTitleBarMap.constEnd();i++)
{
//QWidget *widget = i.value();
QWidget *widget = i.key()->titleBarWidget();
i.key()->setTitleBarWidget(i.value());
dockToTitleBarMap[i.key()] = widget;
}
}
}
......@@ -1694,11 +1763,21 @@ void MainWindow::loadEngineerView()
void MainWindow::loadOperatorView()
{
if (currentView != VIEW_OPERATOR)
if (currentView != VIEW_MISSION)
{
storeViewState();
currentView = VIEW_OPERATOR;
ui.actionOperatorsView->setChecked(true);
currentView = VIEW_MISSION;
ui.actionMissionView->setChecked(true);
loadViewState();
}
}
void MainWindow::loadConfigurationView()
{
if (currentView != VIEW_CONFIGURATION)
{
storeViewState();
currentView = VIEW_CONFIGURATION;
ui.actionConfiguration_2->setChecked(true);
loadViewState();
}
}
......@@ -1716,11 +1795,11 @@ void MainWindow::loadUnconnectedView()
void MainWindow::loadPilotView()
{
if (currentView != VIEW_PILOT)
if (currentView != VIEW_FLIGHT)
{
storeViewState();
currentView = VIEW_PILOT;
ui.actionPilotsView->setChecked(true);
currentView = VIEW_FLIGHT;
ui.actionFlightView->setChecked(true);
loadViewState();
}
}
......@@ -1761,16 +1840,21 @@ void MainWindow::loadFirmwareUpdateView()
void MainWindow::loadDataView(QString fileName)
{
// Plot is now selected, now load data from file
if (dataplotWidget)
if (dataView)
{
dataplotWidget->loadFile(fileName);
//dataView->setCentralWidget(new QGCDataPlot2D(this));
QGCDataPlot2D *plot = qobject_cast<QGCDataPlot2D*>(dataView->centralWidget());
if (plot)
{
plot->loadFile(fileName);
}
}
QStackedWidget *centerStack = dynamic_cast<QStackedWidget*>(centralWidget());
/*QStackedWidget *centerStack = dynamic_cast<QStackedWidget*>(centralWidget());
if (centerStack)
{
centerStack->setCurrentWidget(dataplotWidget);
centerStack->setCurrentWidget(dataView);
dataplotWidget->loadFile(fileName);
}
}*/
}
......
......@@ -52,6 +52,7 @@ This file is part of the QGROUNDCONTROL project
#include "MAVLinkSimulationLink.h"
#include "ObjectDetectionView.h"
#include "HUD.h"
#include "submainwindow.h"
#include "JoystickWidget.h"
#include "input/JoystickInput.h"
#if (defined MOUSE_ENABLED_WIN) | (defined MOUSE_ENABLED_LINUX)
......@@ -127,7 +128,6 @@ public:
QList<QAction*> listLinkMenuActions(void);
public slots:
/** @brief Shows a status message on the bottom status bar */
void showStatusMessage(const QString& status, int timeout);
/** @brief Shows a status message on the bottom status bar */
......@@ -156,6 +156,10 @@ public slots:
void stopVideoCapture();
void saveScreen();
/** @brief Sets advanced mode, allowing for editing of tool widget locations */
void setAdvancedMode();
/** @brief Load configuration view */
void loadConfigurationView();
/** @brief Load default view when no MAV is connected */
void loadUnconnectedView();
/** @brief Load view for pilot */
......@@ -224,6 +228,7 @@ public slots:
*/
void showTool(bool visible);
/**
* @brief Shows a Widget from the center stack based on the action sender
*
......@@ -261,11 +266,12 @@ protected:
typedef enum _VIEW_SECTIONS
{
VIEW_ENGINEER,
VIEW_OPERATOR,
VIEW_PILOT,
VIEW_MISSION,
VIEW_FLIGHT,
VIEW_SIMULATION,
VIEW_MAVLINK,
VIEW_FIRMWAREUPDATE,
VIEW_CONFIGURATION,
VIEW_UNCONNECTED, ///< View in unconnected mode, when no UAS is available
VIEW_FULL ///< All widgets shown at once
} VIEW_SECTIONS;
......@@ -281,8 +287,9 @@ protected:
* @param title The entry that will appear in the Menu and in the QDockedWidget title bar
* @param location The default location for the QDockedWidget in case there is no previous key in the settings
*/
void addTool(QDockWidget* widget, const QString& title, Qt::DockWidgetArea location=Qt::RightDockWidgetArea);
void addTool(SubMainWindow *parent,VIEW_SECTIONS view,QDockWidget* widget, const QString& title, Qt::DockWidgetArea area);
void loadDockWidget(QString name);
void createDockWidget(QWidget *parent,QWidget *child,QString title,QString objectname,VIEW_SECTIONS view,Qt::DockWidgetArea area,int minwidth=0,int minheight=0);
/**
* @brief Adds an already instantiated QWidget to the center stack
*
......@@ -328,12 +335,20 @@ protected:
QActionGroup* centerStackActionGroup;
// Center widgets
QPointer<Linecharts> linechartWidget;
QPointer<HUD> hudWidget;
QPointer<QGCVehicleConfig> configWidget;
QPointer<QGCMapTool> mapWidget;
QPointer<XMLCommProtocolWidget> protocolWidget;
QPointer<QGCDataPlot2D> dataplotWidget;
QPointer<SubMainWindow> plannerView;
QPointer<SubMainWindow> pilotView;
QPointer<SubMainWindow> configView;
QPointer<SubMainWindow> dataView;
QPointer<SubMainWindow> engineeringView;
QPointer<SubMainWindow> simView;
// Center widgets
//QPointer<Linecharts> linechartWidget;
//QPointer<HUD> hudWidget;
//QPointer<QGCVehicleConfig> configWidget;
//QPointer<QGCMapTool> mapWidget;
//QPointer<XMLCommProtocolWidget> protocolWidget;
//QPointer<QGCDataPlot2D> dataplotWidget;
#ifdef QGC_OSG_ENABLED
QPointer<QWidget> _3DWidget;
#endif
......@@ -417,6 +432,10 @@ protected:
QTimer windowNameUpdateTimer;
private:
QMap<QAction*,QString > menuToDockNameMap;
QMap<QDockWidget*,QWidget*> dockToTitleBarMap;
QMap<VIEW_SECTIONS,QMap<QString,QWidget*> > centralWidgetToDockWidgetsMap;
bool isAdvancedMode;
Ui::MainWindow ui;
QString getWindowStateKey();
......
......@@ -51,7 +51,7 @@
<x>0</x>
<y>0</y>
<width>800</width>
<height>22</height>
<height>21</height>
</rect>
</property>
<widget class="QMenu" name="menuMGround">
......@@ -72,6 +72,7 @@
<addaction name="actionJoystickSettings"/>
<addaction name="actionSettings"/>
<addaction name="menuPreferences"/>
<addaction name="actionAdvanced_Mode"/>
<addaction name="separator"/>
<addaction name="actionExit"/>
</widget>
......@@ -101,9 +102,11 @@
<property name="title">
<string>Perspectives</string>
</property>
<addaction name="actionOperatorsView"/>
<addaction name="actionMissionView"/>
<addaction name="actionFlightView"/>
<addaction name="actionConfiguration_2"/>
<addaction name="actionEngineersView"/>
<addaction name="actionPilotsView"/>
<addaction name="actionSimulationView"/>
<addaction name="separator"/>
<addaction name="actionFirmwareUpdateView"/>
<addaction name="actionMavlinkView"/>
......@@ -279,7 +282,7 @@
<string>Developer Credits</string>
</property>
</action>
<action name="actionOperatorsView">
<action name="actionMissionView">
<property name="checkable">
<bool>true</bool>
</property>
......@@ -333,7 +336,7 @@
<string>Select Stylesheet</string>
</property>
</action>
<action name="actionPilotsView">
<action name="actionFlightView">
<property name="checkable">
<bool>true</bool>
</property>
......@@ -468,6 +471,31 @@
<string>Open the simulation view</string>
</property>
</action>
<action name="actionConfiguration_2">
<property name="checkable">
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="../../qgroundcontrol.qrc">
<normaloff>:/files/images/categories/preferences-system.svg</normaloff>:/files/images/categories/preferences-system.svg</iconset>
</property>
<property name="text">
<string>Configuration</string>
</property>
</action>
<action name="actionAdvanced_Mode">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Advanced Mode</string>
</property>
</action>
<action name="actionSimulationView">
<property name="text">
<string>Simulation</string>
</property>
</action>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources>
......
......@@ -400,6 +400,7 @@ void QGCParamWidget::addParameter(int uas, int component, int paramCount, int pa
if (map && map->contains(parameterName))
{
justWritten = true;
QVariant newval = map->value(parameterName);
if (map->value(parameterName) != value)
{
writeMismatch = true;
......@@ -551,7 +552,14 @@ void QGCParamWidget::addParameter(int uas, int component, QString parameterName,
{
//qDebug() << "UPDATED CHILD";
parameterItem = child;
parameterItem->setData(1, Qt::DisplayRole, value);
if (value.type() == QVariant::Char)
{
parameterItem->setData(1, Qt::DisplayRole, value.toUInt());
}
else
{
parameterItem->setData(1, Qt::DisplayRole, value);
}
found = true;
}
}
......@@ -564,7 +572,14 @@ void QGCParamWidget::addParameter(int uas, int component, QString parameterName,
// CREATE PARAMETER ITEM
parameterItem = new QTreeWidgetItem(plist);
// CONFIGURE PARAMETER ITEM
parameterItem->setData(1, Qt::DisplayRole, value);
if (value.type() == QVariant::Char)
{
parameterItem->setData(1, Qt::DisplayRole, value.toUInt());
}
else
{
parameterItem->setData(1, Qt::DisplayRole, value);
}
compParamGroups->value(parent)->addChild(parameterItem);
parameterItem->setFlags(parameterItem->flags() | Qt::ItemIsEditable);
......@@ -708,6 +723,12 @@ void QGCParamWidget::parameterItemChanged(QTreeWidgetItem* current, int column)
parameters.value(key)->insert(str, fixedValue);
}
break;
case QMetaType::QChar:
{
QVariant fixedValue(QChar((unsigned char)value.toUInt()));
parameters.value(key)->insert(str, fixedValue);
}
break;
default:
qCritical() << "ABORTED PARAM UPDATE, NO VALID QVARIANT TYPE";
return;
......@@ -999,6 +1020,13 @@ void QGCParamWidget::setParameter(int component, QString parameterName, QVariant
switch (parameters.value(component)->value(parameterName).type())
{
case QVariant::Char:
{
QVariant fixedValue(QChar((unsigned char)value.toInt()));
emit parameterChanged(component, parameterName, fixedValue);
//qDebug() << "PARAM WIDGET SENT:" << fixedValue;
}
break;
case QVariant::Int:
{
QVariant fixedValue(value.toInt());
......
......@@ -58,6 +58,7 @@ public:
double getParamMax(const QString& param) { return paramMax.value(param, 0.0f); }
double getParamDefault(const QString& param) { return paramDefault.value(param, 0.0f); }
QString getParamInfo(const QString& param) { return paramToolTips.value(param, ""); }
void setParamInfo(const QMap<QString,QString>& param) { paramToolTips = param; }
signals:
/** @brief A parameter was changed in the widget, NOT onboard */
......
......@@ -8,6 +8,8 @@
#endif
#include <QTimer>
#include <QDir>
#include <QXmlStreamReader>
#include "QGCVehicleConfig.h"
#include "UASManager.h"
......@@ -32,6 +34,12 @@ QGCVehicleConfig::QGCVehicleConfig(QWidget *parent) :
calibrationEnabled(false),
ui(new Ui::QGCVehicleConfig)
{
doneLoadingConfig = false;
systemTypeToParamMap["FIXED_WING"] = new QMap<QString,QGCToolWidget*>();
systemTypeToParamMap["QUADROTOR"] = new QMap<QString,QGCToolWidget*>();
systemTypeToParamMap["GROUND_ROVER"] = new QMap<QString,QGCToolWidget*>();
libParamToWidgetMap = new QMap<QString,QGCToolWidget*>();
setObjectName("QGC_VEHICLECONFIG");
ui->setupUi(this);
......@@ -149,6 +157,521 @@ void QGCVehicleConfig::stopCalibrationRC()
ui->rcCalibrationButton->setText(tr("Start RC Calibration"));
}
void QGCVehicleConfig::loadQgcConfig(bool primary)
{
QDir autopilotdir(qApp->applicationDirPath() + "/files/" + mav->getAutopilotTypeName().toLower());
QDir generaldir = QDir(autopilotdir.absolutePath() + "/general/widgets");
QDir vehicledir = QDir(autopilotdir.absolutePath() + "/" + mav->getSystemTypeName().toLower() + "/widgets");
if (!autopilotdir.exists("general"))
{
//TODO: Throw some kind of error here. There is no general configuration directory
qWarning() << "Invalid general dir. no general configuration will be loaded.";
}
if (!autopilotdir.exists(mav->getAutopilotTypeName().toLower()))
{
//TODO: Throw an error here too, no autopilot specific configuration
qWarning() << "Invalid vehicle dir, no vehicle specific configuration will be loaded.";
}
QGCToolWidget *tool;
bool left = true;
foreach (QString file,generaldir.entryList(QDir::Files | QDir::NoDotAndDotDot))
{
if (file.toLower().endsWith(".qgw")) {
tool = new QGCToolWidget("", this);
if (tool->loadSettings(generaldir.absoluteFilePath(file), false))
{
toolWidgets.append(tool);
//ui->sensorLayout->addWidget(tool);
QGroupBox *box = new QGroupBox(this);
box->setTitle(tool->objectName());
box->setLayout(new QVBoxLayout());
box->layout()->addWidget(tool);
if (left)
{
left = false;
ui->leftGeneralLayout->addWidget(box);
}
else
{
left = true;
ui->rightGeneralLayout->addWidget(box);
}
} else {
delete tool;
}
}
}
left = true;
foreach (QString file,vehicledir.entryList(QDir::Files | QDir::NoDotAndDotDot))
{
if (file.toLower().endsWith(".qgw")) {
tool = new QGCToolWidget("", this);
if (tool->loadSettings(vehicledir.absoluteFilePath(file), false))
{
toolWidgets.append(tool);
//ui->sensorLayout->addWidget(tool);
QGroupBox *box = new QGroupBox(this);
box->setTitle(tool->objectName());
box->setLayout(new QVBoxLayout());
box->layout()->addWidget(tool);
if (left)
{
left = false;
ui->leftAdvancedLayout->addWidget(box);
}
else
{
left = true;
ui->rightAdvancedLayout->addWidget(box);
}
} else {
delete tool;
}
}
}
//Load tabs for general configuration
foreach (QString dir,generaldir.entryList(QDir::Dirs | QDir::NoDotAndDotDot))
{
QWidget *tab = new QWidget(ui->tabWidget);
ui->tabWidget->insertTab(2,tab,dir);
tab->setLayout(new QVBoxLayout());
tab->show();
QScrollArea *area = new QScrollArea();
tab->layout()->addWidget(area);
QWidget *scrollArea = new QWidget();
scrollArea->setLayout(new QVBoxLayout());
area->setWidget(scrollArea);
area->setWidgetResizable(true);
area->show();
scrollArea->show();
QDir newdir = QDir(generaldir.absoluteFilePath(dir));
foreach (QString file,newdir.entryList(QDir::Files| QDir::NoDotAndDotDot))
{
if (file.toLower().endsWith(".qgw")) {
tool = new QGCToolWidget("", this);
if (tool->loadSettings(newdir.absoluteFilePath(file), false))
{
toolWidgets.append(tool);
//ui->sensorLayout->addWidget(tool);
QGroupBox *box = new QGroupBox(this);
box->setTitle(tool->objectName());
box->setLayout(new QVBoxLayout());
box->layout()->addWidget(tool);
scrollArea->layout()->addWidget(box);
} else {
delete tool;
}
}
}
}
//Load tabs for vehicle specific configuration
foreach (QString dir,vehicledir.entryList(QDir::Dirs | QDir::NoDotAndDotDot))
{
QWidget *tab = new QWidget(ui->tabWidget);
ui->tabWidget->insertTab(2,tab,dir);
tab->setLayout(new QVBoxLayout());
tab->show();
QScrollArea *area = new QScrollArea();
tab->layout()->addWidget(area);
QWidget *scrollArea = new QWidget();
scrollArea->setLayout(new QVBoxLayout());
area->setWidget(scrollArea);
area->setWidgetResizable(true);
area->show();
scrollArea->show();
QDir newdir = QDir(vehicledir.absoluteFilePath(dir));
foreach (QString file,newdir.entryList(QDir::Files| QDir::NoDotAndDotDot))
{
if (file.toLower().endsWith(".qgw")) {
tool = new QGCToolWidget("", this);
tool->addUAS(mav);
if (tool->loadSettings(newdir.absoluteFilePath(file), false))
{
toolWidgets.append(tool);
//ui->sensorLayout->addWidget(tool);
QGroupBox *box = new QGroupBox();
box->setTitle(tool->objectName());
box->setLayout(new QVBoxLayout());
box->layout()->addWidget(tool);
scrollArea->layout()->addWidget(box);
box->show();
//gbox->layout()->addWidget(box);
} else {
delete tool;
}
}
}
}
// Load calibration
//TODO: Handle this more gracefully, maybe have it scan the directory for multiple calibration entries?
tool = new QGCToolWidget("", this);
tool->addUAS(mav);
if (tool->loadSettings(autopilotdir.absolutePath() + "/general/calibration/calibration.qgw", false))
{
toolWidgets.append(tool);
QGroupBox *box = new QGroupBox(this);
box->setTitle(tool->objectName());
box->setLayout(new QVBoxLayout());
box->layout()->addWidget(tool);
ui->sensorLayout->addWidget(box);
} else {
delete tool;
}
tool = new QGCToolWidget("", this);
tool->addUAS(mav);
if (tool->loadSettings(autopilotdir.absolutePath() + "/" + mav->getSystemTypeName().toLower() + "/calibration/calibration.qgw", false))
{
toolWidgets.append(tool);
QGroupBox *box = new QGroupBox(this);
box->setTitle(tool->objectName());
box->setLayout(new QVBoxLayout());
box->layout()->addWidget(tool);
ui->sensorLayout->addWidget(box);
} else {
delete tool;
}
//description.txt
QFile sensortipsfile(autopilotdir.absolutePath() + "/general/calibration/description.txt");
sensortipsfile.open(QIODevice::ReadOnly);
ui->sensorTips->setHtml(sensortipsfile.readAll());
sensortipsfile.close();
}
void QGCVehicleConfig::loadConfig()
{
QGCToolWidget* tool;
QDir autopilotdir(qApp->applicationDirPath() + "/files/" + mav->getAutopilotTypeName().toLower());
QDir generaldir = QDir(autopilotdir.absolutePath() + "/general/widgets");
QDir vehicledir = QDir(autopilotdir.absolutePath() + "/" + mav->getSystemTypeName().toLower() + "/widgets");
if (!autopilotdir.exists("general"))
{
//TODO: Throw some kind of error here. There is no general configuration directory
qWarning() << "Invalid general dir. no general configuration will be loaded.";
}
if (!autopilotdir.exists(mav->getAutopilotTypeName().toLower()))
{
//TODO: Throw an error here too, no autopilot specific configuration
qWarning() << "Invalid vehicle dir, no vehicle specific configuration will be loaded.";
}
qDebug() << autopilotdir.absolutePath();
qDebug() << generaldir.absolutePath();
qDebug() << vehicledir.absolutePath();
QFile xmlfile(autopilotdir.absolutePath() + "/arduplane.pdef.xml");
if (xmlfile.exists() && !xmlfile.open(QIODevice::ReadOnly))
{
loadQgcConfig(false);
doneLoadingConfig = true;
return;
}
loadQgcConfig(true);
QXmlStreamReader xml(xmlfile.readAll());
xmlfile.close();
//TODO: Testing to ensure that incorrectly formated XML won't break this.
while (!xml.atEnd())
{
if (xml.isStartElement() && xml.name() == "paramfile")
{
xml.readNext();
while ((xml.name() != "paramfile") && !xml.atEnd())
{
QString valuetype = "";
if (xml.isStartElement() && (xml.name() == "vehicles" || xml.name() == "libraries")) //Enter into the vehicles loop
{
valuetype = xml.name().toString();
xml.readNext();
while ((xml.name() != valuetype) && !xml.atEnd())
{
if (xml.isStartElement() && xml.name() == "parameters") //This is a parameter block
{
QString parametersname = "";
if (xml.attributes().hasAttribute("name"))
{
parametersname = xml.attributes().value("name").toString();
}
QVariantMap genset;
QVariantMap advset;
QString setname = parametersname;
xml.readNext();
int genarraycount = 0;
int advarraycount = 0;
while ((xml.name() != "parameters") && !xml.atEnd())
{
if (xml.isStartElement() && xml.name() == "param")
{
QString humanname = xml.attributes().value("humanName").toString();
QString name = xml.attributes().value("name").toString();
QString tab= xml.attributes().value("user").toString();
if (tab == "Advanced")
{
advset["title"] = parametersname;
}
else
{
genset["title"] = parametersname;
}
if (name.contains(":"))
{
name = name.split(":")[1];
}
QString docs = xml.attributes().value("documentation").toString();
paramTooltips[name] = name + " - " + docs;
int type = -1; //Type of item
QMap<QString,QString> fieldmap;
xml.readNext();
while ((xml.name() != "param") && !xml.atEnd())
{
if (xml.isStartElement() && xml.name() == "values")
{
type = 1; //1 is a combobox
if (tab == "Advanced")
{
advset[setname + "\\" + QString::number(advarraycount) + "\\" + "TYPE"] = "COMBO";
advset[setname + "\\" + QString::number(advarraycount) + "\\" + "QGC_PARAM_COMBOBOX_DESCRIPTION"] = humanname;
advset[setname + "\\" + QString::number(advarraycount) + "\\" + "QGC_PARAM_COMBOBOX_PARAMID"] = name;
advset[setname + "\\" + QString::number(advarraycount) + "\\" + "QGC_PARAM_COMBOBOX_COMPONENTID"] = 1;
}
else
{
genset[setname + "\\" + QString::number(genarraycount) + "\\" + "TYPE"] = "COMBO";
genset[setname + "\\" + QString::number(genarraycount) + "\\" + "QGC_PARAM_COMBOBOX_DESCRIPTION"] = humanname;
genset[setname + "\\" + QString::number(genarraycount) + "\\" + "QGC_PARAM_COMBOBOX_PARAMID"] = name;
genset[setname + "\\" + QString::number(genarraycount) + "\\" + "QGC_PARAM_COMBOBOX_COMPONENTID"] = 1;
}
int paramcount = 0;
xml.readNext();
while ((xml.name() != "values") && !xml.atEnd())
{
if (xml.isStartElement() && xml.name() == "value")
{
QString code = xml.attributes().value("code").toString();
QString arg = xml.readElementText();
if (tab == "Advanced")
{
advset[setname + "\\" + QString::number(advarraycount) + "\\" + "QGC_PARAM_COMBOBOX_ITEM_" + QString::number(paramcount) + "_TEXT"] = arg;
advset[setname + "\\" + QString::number(advarraycount) + "\\" + "QGC_PARAM_COMBOBOX_ITEM_" + QString::number(paramcount) + "_VAL"] = code.toInt();
}
else
{
genset[setname + "\\" + QString::number(genarraycount) + "\\" + "QGC_PARAM_COMBOBOX_ITEM_" + QString::number(paramcount) + "_TEXT"] = arg;
genset[setname + "\\" + QString::number(genarraycount) + "\\" + "QGC_PARAM_COMBOBOX_ITEM_" + QString::number(paramcount) + "_VAL"] = code.toInt();
}
paramcount++;
}
xml.readNext();
}
if (tab == "Advanced")
{
advset[setname + "\\" + QString::number(advarraycount) + "\\" + "QGC_PARAM_COMBOBOX_COUNT"] = paramcount;
}
else
{
genset[setname + "\\" + QString::number(genarraycount) + "\\" + "QGC_PARAM_COMBOBOX_COUNT"] = paramcount;
}
}
if (xml.isStartElement() && xml.name() == "field")
{
type = 2; //2 is a slider
QString fieldtype = xml.attributes().value("name").toString();
QString text = xml.readElementText();
fieldmap[fieldtype] = text;
}
xml.readNext();
}
if (type == -1)
{
//Nothing inside! Assume it's a value, give it a default range.
type = 2;
QString fieldtype = "Range";
QString text = "0 100"; //TODO: Determine a better way of figuring out default ranges.
fieldmap[fieldtype] = text;
}
if (type == 2)
{
if (tab == "Advanced")
{
advset[setname + "\\" + QString::number(advarraycount) + "\\" + "TYPE"] = "SLIDER";
advset[setname + "\\" + QString::number(advarraycount) + "\\" + "QGC_PARAM_SLIDER_DESCRIPTION"] = humanname;
advset[setname + "\\" + QString::number(advarraycount) + "\\" + "QGC_PARAM_SLIDER_PARAMID"] = name;
advset[setname + "\\" + QString::number(advarraycount) + "\\" + "QGC_PARAM_SLIDER_COMPONENTID"] = 1;
}
else
{
genset[setname + "\\" + QString::number(genarraycount) + "\\" + "TYPE"] = "SLIDER";
genset[setname + "\\" + QString::number(genarraycount) + "\\" + "QGC_PARAM_SLIDER_DESCRIPTION"] = humanname;
genset[setname + "\\" + QString::number(genarraycount) + "\\" + "QGC_PARAM_SLIDER_PARAMID"] = name;
genset[setname + "\\" + QString::number(genarraycount) + "\\" + "QGC_PARAM_SLIDER_COMPONENTID"] = 1;
}
if (fieldmap.contains("Range"))
{
float min = 0;
float max = 0;
//Some range fields list "0-10" and some list "0 10". Handle both.
if (fieldmap["Range"].split(" ").size() > 1)
{
min = fieldmap["Range"].split(" ")[0].trimmed().toFloat();
max = fieldmap["Range"].split(" ")[1].trimmed().toFloat();
}
else if (fieldmap["Range"].split("-").size() > 1)
{
min = fieldmap["Range"].split("-")[0].trimmed().toFloat();
max = fieldmap["Range"].split("-")[1].trimmed().toFloat();
}
if (tab == "Advanced")
{
advset[setname + "\\" + QString::number(advarraycount) + "\\" + "QGC_PARAM_SLIDER_MIN"] = min;
advset[setname + "\\" + QString::number(advarraycount) + "\\" + "QGC_PARAM_SLIDER_MAX"] = max;
}
else
{
genset[setname + "\\" + QString::number(genarraycount) + "\\" + "QGC_PARAM_SLIDER_MIN"] = min;
genset[setname + "\\" + QString::number(genarraycount) + "\\" + "QGC_PARAM_SLIDER_MAX"] = max;
}
}
}
if (tab == "Advanced")
{
advarraycount++;
advset["count"] = advarraycount;
}
else
{
genarraycount++;
genset["count"] = genarraycount;
}
}
xml.readNext();
}
if (genarraycount > 0)
{
tool = new QGCToolWidget("", this);
tool->addUAS(mav);
tool->setTitle(parametersname);
tool->setObjectName(parametersname);
tool->setSettings(genset);
QList<QString> paramlist = tool->getParamList();
for (int i=0;i<paramlist.size();i++)
{
//Based on the airframe, we add the parameter to different categories.
if (parametersname == "ArduPlane") //MAV_TYPE_FIXED_WING FIXED_WING
{
systemTypeToParamMap["FIXED_WING"]->insert(paramlist[i],tool);
}
else if (parametersname == "ArduCopter") //MAV_TYPE_QUADROTOR "QUADROTOR
{
systemTypeToParamMap["QUADROTOR"]->insert(paramlist[i],tool);
}
else if (parametersname == "APMrover2") //MAV_TYPE_GROUND_ROVER GROUND_ROVER
{
systemTypeToParamMap["GROUND_ROVER"]->insert(paramlist[i],tool);
}
else
{
libParamToWidgetMap->insert(paramlist[i],tool);
}
}
toolWidgets.append(tool);
QGroupBox *box = new QGroupBox(this);
box->setTitle(tool->objectName());
box->setLayout(new QVBoxLayout());
box->layout()->addWidget(tool);
if (valuetype == "vehicles")
{
ui->leftGeneralLayout->addWidget(box);
}
else if (valuetype == "libraries")
{
ui->rightGeneralLayout->addWidget(box);
}
box->hide();
toolToBoxMap[tool] = box;
}
if (advarraycount > 0)
{
tool = new QGCToolWidget("", this);
tool->addUAS(mav);
tool->setTitle(parametersname);
tool->setObjectName(parametersname);
tool->setSettings(advset);
QList<QString> paramlist = tool->getParamList();
for (int i=0;i<paramlist.size();i++)
{
//Based on the airframe, we add the parameter to different categories.
if (parametersname == "ArduPlane") //MAV_TYPE_FIXED_WING FIXED_WING
{
systemTypeToParamMap["FIXED_WING"]->insert(paramlist[i],tool);
}
else if (parametersname == "ArduCopter") //MAV_TYPE_QUADROTOR "QUADROTOR
{
systemTypeToParamMap["QUADROTOR"]->insert(paramlist[i],tool);
}
else if (parametersname == "APMrover2") //MAV_TYPE_GROUND_ROVER GROUND_ROVER
{
systemTypeToParamMap["GROUND_ROVER"]->insert(paramlist[i],tool);
}
else
{
libParamToWidgetMap->insert(paramlist[i],tool);
}
}
toolWidgets.append(tool);
QGroupBox *box = new QGroupBox(this);
box->setTitle(tool->objectName());
box->setLayout(new QVBoxLayout());
box->layout()->addWidget(tool);
if (valuetype == "vehicles")
{
ui->leftAdvancedLayout->addWidget(box);
}
else if (valuetype == "libraries")
{
ui->rightAdvancedLayout->addWidget(box);
}
box->hide();
toolToBoxMap[tool] = box;
}
}
xml.readNext();
}
}
xml.readNext();
}
}
xml.readNext();
}
if (mav)
{
mav->getParamManager()->setParamInfo(paramTooltips);
}
doneLoadingConfig = true;
mav->requestParameters(); //Config is finished, lets do a parameter request to ensure none are missed if someone else started requesting before we were finished.
}
void QGCVehicleConfig::setActiveUAS(UASInterface* active)
{
// Do nothing if system is the same or NULL
......@@ -181,65 +704,33 @@ void QGCVehicleConfig::setActiveUAS(UASInterface* active)
connect(active, SIGNAL(parameterChanged(int,int,QString,QVariant)), this,
SLOT(parameterChanged(int,int,QString,QVariant)));
mav->requestParameters();
QString defaultsDir = qApp->applicationDirPath() + "/files/" + mav->getAutopilotTypeName().toLower() + "/widgets/";
QGCToolWidget* tool;
// Load calibration
tool = new QGCToolWidget("", this);
if (tool->loadSettings(defaultsDir + "px4_calibration.qgw", false))
if (systemTypeToParamMap.contains(mav->getSystemTypeName()))
{
toolWidgets.append(tool);
ui->sensorLayout->addWidget(tool);
} else {
delete tool;
paramToWidgetMap = systemTypeToParamMap[mav->getSystemTypeName()];
}
// Load multirotor attitude pid
tool = new QGCToolWidget("", this);
if (tool->loadSettings(defaultsDir + "px4_mc_attitude_pid_params.qgw", false))
else
{
toolWidgets.append(tool);
ui->multiRotorAttitudeLayout->addWidget(tool);
} else {
delete tool;
//Indication that we have no meta data for this system type.
qDebug() << "No parameters defined for system type:" << mav->getSystemTypeName();
}
// Load multirotor position pid
tool = new QGCToolWidget("", this);
if (tool->loadSettings(defaultsDir + "px4_mc_position_pid_params.qgw", false))
if (!paramTooltips.isEmpty())
{
toolWidgets.append(tool);
ui->multiRotorPositionLayout->addWidget(tool);
} else {
delete tool;
mav->getParamManager()->setParamInfo(paramTooltips);
}
// Load fixed wing attitude pid
tool = new QGCToolWidget("", this);
if (tool->loadSettings(defaultsDir + "px4_fw_attitude_pid_params.qgw", false))
{
toolWidgets.append(tool);
ui->fixedWingAttitudeLayout->addWidget(tool);
} else {
delete tool;
}
// mav->requestParameters();
QString defaultsDir = qApp->applicationDirPath() + "/files/" + mav->getAutopilotTypeName().toLower() + "/widgets/";
qDebug() << "CALIBRATION!! System Type Name:" << mav->getSystemTypeName();
// Load fixed wing position pid
tool = new QGCToolWidget("", this);
if (tool->loadSettings(defaultsDir + "px4_fw_position_pid_params.qgw", false))
{
toolWidgets.append(tool);
ui->fixedWingPositionLayout->addWidget(tool);
} else {
delete tool;
}
//Load configuration after 1ms. This allows it to go into the event loop, and prevents application hangups due to the
//amount of time it actually takes to load the configuration windows.
QTimer::singleShot(1,this,SLOT(loadConfig()));
updateStatus(QString("Reading from system %1").arg(mav->getUASName()));
}
void QGCVehicleConfig::resetCalibrationRC()
{
for (unsigned int i = 0; i < chanMax; ++i)
......@@ -459,6 +950,88 @@ void QGCVehicleConfig::parameterChanged(int uas, int component, QString paramete
{
Q_UNUSED(uas);
Q_UNUSED(component);
if (!doneLoadingConfig)
{
//We do not want to attempt to generate any UI elements until loading of the config file is complete.
//We should re-request params later if needed, that is not implemented yet.
return;
}
if (paramToWidgetMap->contains(parameterName))
{
//Main group of parameters of the selected airframe
paramToWidgetMap->value(parameterName)->setParameterValue(uas,component,parameterName,value);
if (toolToBoxMap.contains(paramToWidgetMap->value(parameterName)))
{
toolToBoxMap[paramToWidgetMap->value(parameterName)]->show();
}
else
{
qCritical() << "Widget with no box, possible memory corruption for param:" << parameterName;
}
}
else if (libParamToWidgetMap->contains(parameterName))
{
//All the library parameters
libParamToWidgetMap->value(parameterName)->setParameterValue(uas,component,parameterName,value);
if (toolToBoxMap.contains(libParamToWidgetMap->value(parameterName)))
{
toolToBoxMap[libParamToWidgetMap->value(parameterName)]->show();
}
else
{
qCritical() << "Widget with no box, possible memory corruption for param:" << parameterName;
}
}
else
{
//Param recieved that we have no metadata for. Search to see if it belongs in a
//group with some other params
bool found = false;
for (int i=0;i<toolWidgets.size();i++)
{
if (parameterName.startsWith(toolWidgets[i]->objectName()))
{
//It should be grouped with this one, add it.
toolWidgets[i]->addParam(uas,component,parameterName,value);
libParamToWidgetMap->insert(parameterName,toolWidgets[i]);
found = true;
break;
}
}
if (!found)
{
//New param type, create a QGroupBox for it.
QGCToolWidget *tool = new QGCToolWidget("", this);
QString tooltitle = parameterName;
if (parameterName.split("_").size() > 1)
{
tooltitle = parameterName.split("_")[0] + "_";
}
tool->setTitle(tooltitle);
tool->setObjectName(tooltitle);
//tool->setSettings(set);
tool->addParam(uas,component,parameterName,value);
libParamToWidgetMap->insert(parameterName,tool);
toolWidgets.append(tool);
QGroupBox *box = new QGroupBox(this);
box->setTitle(tool->objectName());
box->setLayout(new QVBoxLayout());
box->layout()->addWidget(tool);
//Make sure we have similar number of widgets on each side.
if (ui->leftAdvancedLayout->count() > ui->rightAdvancedLayout->count())
{
ui->rightAdvancedLayout->addWidget(box);
}
else
{
ui->leftAdvancedLayout->addWidget(box);
}
toolToBoxMap[tool] = box;
}
}
// Channel calibration values
QRegExp minTpl("RC?_MIN");
......
......@@ -4,6 +4,7 @@
#include <QWidget>
#include <QTimer>
#include <QList>
#include <QGroupBox>
#include "QGCToolWidget.h"
#include "UASInterface.h"
......@@ -30,7 +31,10 @@ public:
public slots:
/** Set the MAV currently being calibrated */
void setActiveUAS(UASInterface* active);
/** Fallback function, automatically called by loadConfig() upon failure to find and xml file*/
void loadQgcConfig(bool primary);
/** Load configuration from xml file */
void loadConfig();
/** Start the RC calibration routine */
void startCalibrationRC();
/** Stop the RC calibration routine */
......@@ -142,6 +146,7 @@ protected slots:
void updateInvertedCheckboxes(int index);
protected:
bool doneLoadingConfig;
UASInterface* mav; ///< The current MAV
static const unsigned int chanMax = 8; ///< Maximum number of channels
unsigned int chanCount; ///< Actual channels
......@@ -169,6 +174,12 @@ protected:
enum RC_MODE rc_mode; ///< Mode of the remote control, according to usual convention
QList<QGCToolWidget*> toolWidgets; ///< Configurable widgets
bool calibrationEnabled; ///< calibration mode on / off
QMap<QString,QGCToolWidget*> *paramToWidgetMap; ///< Holds the current active MAV's parameter widgets.
QMap<QString,QGCToolWidget*> *libParamToWidgetMap; ///< Holds the library parameter widgets
QMap<QString,QMap<QString,QGCToolWidget*>*> systemTypeToParamMap; ///< Holds all loaded MAV specific parameter widgets, for every MAV.
QMap<QGCToolWidget*,QGroupBox*> toolToBoxMap; ///< Easy method of figuring out which QGroupBox is tied to which ToolWidget.
QMap<QString,QString> paramTooltips; ///< Tooltips for the ? button next to a parameter.
private:
Ui::QGCVehicleConfig *ui;
......
......@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>780</width>
<height>586</height>
<width>760</width>
<height>541</height>
</rect>
</property>
<property name="windowTitle">
......@@ -40,7 +40,7 @@
<item row="0" column="0" colspan="2">
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>1</number>
<number>2</number>
</property>
<widget class="QWidget" name="rcTab">
<attribute name="title">
......@@ -725,264 +725,271 @@
<attribute name="title">
<string>Sensor Calibration</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_6" columnstretch="55,45">
<property name="topMargin">
<number>20</number>
</property>
<item row="0" column="1">
<layout class="QVBoxLayout" name="sensorLayout"/>
</item>
<item row="1" column="1">
<spacer name="verticalSpacer_8">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="0" rowspan="2">
<widget class="QTextBrowser" name="sensorTips">
<property name="html">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
<layout class="QHBoxLayout" name="horizontalLayout_9">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_8">
<item>
<widget class="QTextBrowser" name="sensorTips">
<property name="html">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:18pt;&quot;&gt;Sensor Calibration&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:16pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:12pt;&quot;&gt;The PX4FMU sensors can be calibrated with the buttons on the right. Gyroscope (GYRO) and Accelerometer (ACCEL) calibrations have to be performed with a static, unmoved system. The magnetometer calibration needs to be performed while moving the device.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:16pt;&quot;&gt;Magnetometer Calibration&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:16pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:12pt;&quot;&gt;Carefully follow the instructions. Click on MAG to start the calibration. Watch the communication console for further instructions (Available through Main Menu -&amp;gt; Tool Widgets -&amp;gt; Communication Console). Do not calibrate the vehicle in vincinity of metal, e.g. from a table or chair. Start the calibration, leave the system unmoved on the table. Wait for the double beep. Next move the system in a figure eight, roll and pitch it strongly, rotate around all axes and perform the figure eight also upside-down. The calibration is finished after the triple beep.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:16pt;&quot;&gt;Accelerometer Calibration&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:16pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:12pt;&quot;&gt;Put the system on an absolutely level surface and press ACCEL, wait for the the triple beep. Do not move the system. If no flat surface is available, rather not calibrate the system.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:16pt;&quot;&gt;Gyroscope Calibration&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:16pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:12pt;&quot;&gt;The orientation is not important for this calibration, but do not move the system until the triple beep or the matching text message in the console.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_9" stretch="0">
<item>
<widget class="QScrollArea" name="scrollArea_3">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents_7">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>354</width>
<height>448</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_10">
<item>
<layout class="QVBoxLayout" name="sensorLayout"/>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="multirotorTab">
<attribute name="title">
<string>Multirotor Control</string>
<string>General Config</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_3" columnstretch="80,0,0">
<property name="topMargin">
<number>20</number>
</property>
<item row="0" column="2">
<widget class="QPushButton" name="loadMultiRotorDefaultsButton">
<property name="text">
<string>Load Platform Defaults</string>
</property>
</widget>
</item>
<item row="0" column="0">
<spacer name="horizontalSpacer_8">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="multiRotorComboBox"/>
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<spacer name="horizontalSpacer_8">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QComboBox" name="multiRotorComboBox"/>
</item>
<item>
<widget class="QPushButton" name="loadMultiRotorDefaultsButton">
<property name="text">
<string>Load Platform Defaults</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0" colspan="3">
<widget class="QGroupBox" name="multiRotorControlPositionGroupBox">
<property name="title">
<string>Position</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_5">
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="QScrollArea" name="scrollArea_2">
<property name="widgetResizable">
<bool>true</bool>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="QGroupBox" name="multiRotorControlAttitudeGroupBox">
<property name="title">
<string>Configuration</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<property name="margin">
<number>0</number>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents_2">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>98</width>
<height>28</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<property name="margin">
<number>0</number>
<item>
<widget class="QScrollArea" name="scrollArea">
<property name="widgetResizable">
<bool>true</bool>
</property>
<item>
<layout class="QVBoxLayout" name="multiRotorPositionLayout"/>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="0" colspan="3">
<widget class="QGroupBox" name="multiRotorControlAttitudeGroupBox">
<property name="title">
<string>Attitude</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="QScrollArea" name="scrollArea">
<property name="widgetResizable">
<bool>true</bool>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>354</width>
<height>404</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<property name="margin">
<number>0</number>
</property>
<item>
<layout class="QVBoxLayout" name="leftGeneralLayout"/>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="multiRotorControlAttitudeGroupBox_2">
<property name="title">
<string>Configuration</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_5">
<property name="margin">
<number>0</number>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>98</width>
<height>28</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<property name="margin">
<number>0</number>
<item>
<widget class="QScrollArea" name="scrollArea_2">
<property name="widgetResizable">
<bool>true</bool>
</property>
<item>
<layout class="QVBoxLayout" name="multiRotorAttitudeLayout"/>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="scrollAreaWidgetContents_2">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>354</width>
<height>404</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<property name="margin">
<number>0</number>
</property>
<item>
<layout class="QVBoxLayout" name="rightGeneralLayout"/>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="fixedWingTab">
<attribute name="title">
<string>Fixed Wing Control</string>
<string>Advanced Config</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_4" columnstretch="65,30,19,1">
<property name="topMargin">
<number>20</number>
</property>
<item row="3" column="0" colspan="4">
<widget class="QGroupBox" name="fixedWingControlPositionGroupBox">
<property name="title">
<string>Position</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="QScrollArea" name="scrollArea_3">
<property name="widgetResizable">
<bool>true</bool>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<spacer name="horizontalSpacer_9">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QComboBox" name="fixedWingComboBox"/>
</item>
<item>
<widget class="QPushButton" name="loadFixedWingDefaultsButton">
<property name="text">
<string>Load Platform Defaults</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QGroupBox" name="fixedWingControlAttitudeGroupBox">
<property name="title">
<string>Configuration</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="margin">
<number>0</number>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents_3">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>98</width>
<height>28</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_6">
<property name="margin">
<number>0</number>
<item>
<widget class="QScrollArea" name="scrollArea_4">
<property name="widgetResizable">
<bool>true</bool>
</property>
<item>
<layout class="QVBoxLayout" name="fixedWingPositionLayout"/>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="fixedWingComboBox"/>
</item>
<item row="0" column="2" colspan="2">
<widget class="QPushButton" name="loadFixedWingDefaultsButton">
<property name="text">
<string>Load Platform Defaults</string>
</property>
</widget>
</item>
<item row="0" column="0">
<spacer name="horizontalSpacer_9">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0" colspan="4">
<widget class="QGroupBox" name="fixedWingControlAttitudeGroupBox">
<property name="title">
<string>Attitude</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="QScrollArea" name="scrollArea_4">
<property name="widgetResizable">
<bool>true</bool>
<widget class="QWidget" name="scrollAreaWidgetContents_4">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>354</width>
<height>404</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_7">
<property name="margin">
<number>0</number>
</property>
<item>
<layout class="QVBoxLayout" name="leftAdvancedLayout"/>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="fixedWingControlAttitudeGroupBox_2">
<property name="title">
<string>Configuration</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<property name="margin">
<number>0</number>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents_4">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>98</width>
<height>28</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_7">
<property name="margin">
<number>0</number>
<item>
<widget class="QScrollArea" name="scrollArea_5">
<property name="widgetResizable">
<bool>true</bool>
</property>
<item>
<layout class="QVBoxLayout" name="fixedWingAttitudeLayout"/>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="scrollAreaWidgetContents_5">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>354</width>
<height>404</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_8">
<property name="margin">
<number>0</number>
</property>
<item>
<layout class="QVBoxLayout" name="rightAdvancedLayout"/>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
......
#include <QMenu>
#include <QContextMenuEvent>
#include <QSettings>
#include <QTimer>
#include <QToolTip>
#include "QGCComboBox.h"
#include "ui_QGCComboBox.h"
#include "UASInterface.h"
#include "UASManager.h"
QGCComboBox::QGCComboBox(QWidget *parent) :
QGCToolWidgetItem("Combo", parent),
parameterName(""),
parameterValue(0.0f),
parameterScalingFactor(0.0),
parameterMin(0.0f),
parameterMax(0.0f),
component(0),
ui(new Ui::QGCComboBox)
{
ui->setupUi(this);
uas = NULL;
ui->editInfoCheckBox->hide();
ui->editDoneButton->hide();
ui->editNameLabel->hide();
ui->editRefreshParamsButton->hide();
ui->editSelectParamComboBox->hide();
ui->editSelectComponentComboBox->hide();
ui->editStatusLabel->hide();
ui->editLine1->hide();
ui->editLine2->hide();
ui->editAddItemButton->hide();
ui->editRemoveItemButton->hide();
ui->editItemValueSpinBox->hide();
ui->editItemNameLabel->hide();
ui->itemValueLabel->hide();
ui->itemNameLabel->hide();
ui->infoLabel->hide();
ui->editOptionComboBox->setEnabled(false);
isDisabled = true;
//ui->editLine1->setStyleSheet("QWidget { border: 1px solid #66666B; border-radius: 3px; padding: 10px 0px 0px 0px; background: #111122; }");
// ui->editLine2->setStyleSheet("QWidget { border: 1px solid #66666B; border-radius: 3px; padding: 10px 0px 0px 0px; background: #111122; }");
connect(ui->editDoneButton, SIGNAL(clicked()), this, SLOT(endEditMode()));
connect(ui->editOptionComboBox,SIGNAL(currentIndexChanged(QString)),this,SLOT(comboBoxIndexChanged(QString)));
connect(ui->editAddItemButton,SIGNAL(clicked()),this,SLOT(addButtonClicked()));
connect(ui->editRemoveItemButton,SIGNAL(clicked()),this,SLOT(delButtonClicked()));
// Sending actions
connect(ui->writeButton, SIGNAL(clicked()), this, SLOT(sendParameter()));
connect(ui->editSelectComponentComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(selectComponent(int)));
connect(ui->editSelectParamComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(selectParameter(int)));
//connect(ui->valueSlider, SIGNAL(valueChanged(int)), this, SLOT(setSliderValue(int)));
//connect(ui->doubleValueSpinBox, SIGNAL(valueChanged(double)), this, SLOT(setParamValue(double)));
//connect(ui->intValueSpinBox, SIGNAL(valueChanged(int)), this, SLOT(setParamValue(int)));
connect(ui->editNameLabel, SIGNAL(textChanged(QString)), ui->nameLabel, SLOT(setText(QString)));
connect(ui->readButton, SIGNAL(clicked()), this, SLOT(requestParameter()));
connect(ui->editRefreshParamsButton, SIGNAL(clicked()), this, SLOT(refreshParamList()));
connect(ui->editInfoCheckBox, SIGNAL(clicked(bool)), this, SLOT(showInfo(bool)));
// connect to self
connect(ui->infoLabel, SIGNAL(released()), this, SLOT(showTooltip()));
// Set the current UAS if present
connect(UASManager::instance(), SIGNAL(activeUASSet(UASInterface*)), this, SLOT(setActiveUAS(UASInterface*)));
}
QGCComboBox::~QGCComboBox()
{
delete ui;
}
void QGCComboBox::showTooltip()
{
QWidget* sender = dynamic_cast<QWidget*>(QObject::sender());
if (sender)
{
QPoint point = mapToGlobal(ui->infoLabel->pos());
QToolTip::showText(point, sender->toolTip());
}
}
void QGCComboBox::refreshParamList()
{
ui->editSelectParamComboBox->setEnabled(true);
ui->editSelectComponentComboBox->setEnabled(true);
if (uas)
{
uas->getParamManager()->requestParameterList();
ui->editStatusLabel->setText(tr("Parameter list updating.."));
}
}
void QGCComboBox::setActiveUAS(UASInterface* activeUas)
{
if (activeUas)
{
if (uas)
{
disconnect(uas, SIGNAL(parameterChanged(int,int,int,int,QString,QVariant)), this, SLOT(setParameterValue(int,int,int,int,QString,QVariant)));
}
// Connect buttons and signals
connect(activeUas, SIGNAL(parameterChanged(int,int,int,int,QString,QVariant)), this, SLOT(setParameterValue(int,int,int,int,QString,QVariant)), Qt::UniqueConnection);
uas = activeUas;
// Update current param value
//requestParameter();
// Set param info
QString text = uas->getParamManager()->getParamInfo(parameterName);
if (text != "")
{
ui->infoLabel->setToolTip(text);
ui->infoLabel->show();
}
// Force-uncheck and hide label if no description is available
if (ui->editInfoCheckBox->isChecked())
{
showInfo((text.length() > 0));
}
}
}
void QGCComboBox::requestParameter()
{
if (!parameterName.isEmpty() && uas)
{
uas->getParamManager()->requestParameterUpdate(this->component, this->parameterName);
}
}
void QGCComboBox::showInfo(bool enable)
{
ui->editInfoCheckBox->setChecked(enable);
ui->infoLabel->setVisible(enable);
}
void QGCComboBox::selectComponent(int componentIndex)
{
this->component = ui->editSelectComponentComboBox->itemData(componentIndex).toInt();
}
void QGCComboBox::selectParameter(int paramIndex)
{
// Set name
parameterName = ui->editSelectParamComboBox->itemText(paramIndex);
// Update min and max values if available
if (uas)
{
if (uas->getParamManager())
{
// Current value
uas->getParamManager()->requestParameterUpdate(component, parameterName);
// Minimum
if (uas->getParamManager()->isParamMinKnown(parameterName))
{
parameterMin = uas->getParamManager()->getParamMin(parameterName);
}
// Maximum
if (uas->getParamManager()->isParamMaxKnown(parameterName))
{
parameterMax = uas->getParamManager()->getParamMax(parameterName);
}
// Description
QString text = uas->getParamManager()->getParamInfo(parameterName);
//ui->infoLabel->setText(text);
showInfo(!(text.length() > 0));
}
}
}
void QGCComboBox::startEditMode()
{
ui->nameLabel->hide();
ui->writeButton->hide();
ui->readButton->hide();
ui->editInfoCheckBox->show();
ui->editDoneButton->show();
ui->editNameLabel->show();
ui->editRefreshParamsButton->show();
ui->editSelectParamComboBox->show();
ui->editSelectComponentComboBox->show();
ui->editStatusLabel->show();
ui->writeButton->hide();
ui->readButton->hide();
ui->editLine1->show();
ui->editLine2->show();
ui->editAddItemButton->show();
ui->editRemoveItemButton->show();
ui->editItemValueSpinBox->show();
ui->editItemNameLabel->show();
ui->itemValueLabel->show();
ui->itemNameLabel->show();
if (isDisabled)
{
ui->editOptionComboBox->setEnabled(true);
}
isInEditMode = true;
}
void QGCComboBox::endEditMode()
{
// Store component id
selectComponent(ui->editSelectComponentComboBox->currentIndex());
// Store parameter name and id
selectParameter(ui->editSelectParamComboBox->currentIndex());
// Min/max
ui->editInfoCheckBox->hide();
ui->editDoneButton->hide();
ui->editNameLabel->hide();
ui->editRefreshParamsButton->hide();
ui->editSelectParamComboBox->hide();
ui->editSelectComponentComboBox->hide();
ui->editStatusLabel->hide();
ui->editLine1->hide();
ui->editLine2->hide();
ui->writeButton->show();
ui->readButton->show();
ui->editAddItemButton->hide();
ui->editRemoveItemButton->hide();
ui->editItemValueSpinBox->hide();
ui->editItemNameLabel->hide();
ui->itemValueLabel->hide();
ui->itemNameLabel->hide();
ui->nameLabel->show();
if (isDisabled)
{
ui->editOptionComboBox->setEnabled(false);
}
isInEditMode = false;
emit editingFinished();
}
void QGCComboBox::sendParameter()
{
if (uas)
{
// Set value, param manager handles retransmission
if (uas->getParamManager())
{
qDebug() << "Sending param:" << parameterName << "to component" << component << "with a value of" << parameterValue;
uas->getParamManager()->setParameter(component, parameterName, parameterValue);
}
else
{
qDebug() << "UAS HAS NO PARAM MANAGER, DOING NOTHING";
}
}
else
{
qDebug() << __FILE__ << __LINE__ << "NO UAS SET, DOING NOTHING";
}
}
/**
* @brief uas Unmanned system sending the parameter
* @brief component UAS component sending the parameter
* @brief parameterName Key/name of the parameter
* @brief value Value of the parameter
*/
void QGCComboBox::setParameterValue(int uas, int component, int paramCount, int paramIndex, QString parameterName, QVariant value)
{
Q_UNUSED(paramCount);
// Check if this component and parameter are part of the list
bool found = false;
for (int i = 0; i< ui->editSelectComponentComboBox->count(); ++i)
{
if (component == ui->editSelectComponentComboBox->itemData(i).toInt())
{
found = true;
}
}
if (!found)
{
ui->editSelectComponentComboBox->addItem(tr("Component #%1").arg(component), component);
}
// Parameter checking
found = false;
for (int i = 0; i < ui->editSelectParamComboBox->count(); ++i)
{
if (parameterName == ui->editSelectParamComboBox->itemText(i))
{
found = true;
}
}
if (!found)
{
ui->editSelectParamComboBox->addItem(parameterName, paramIndex);
}
Q_UNUSED(uas);
//comboBoxTextToValMap[ui->editItemNameLabel->text()] = ui->editItemValueSpinBox->value();
if (visibleParam != "")
{
if (parameterName == visibleParam)
{
if (visibleVal == value.toInt())
{
this->uas->requestParameter(this->component,this->parameterName);
visibleEnabled = true;
this->show();
}
else
{
//Disable the component here.
//ui->valueSlider->setEnabled(false);
//ui->intValueSpinBox->setEnabled(false);
//ui->doubleValueSpinBox->setEnabled(false);
visibleEnabled = false;
this->hide();
}
}
}
if (component == this->component && parameterName == this->parameterName)
{
if (!visibleEnabled)
{
return;
}
ui->editOptionComboBox->setEnabled(true);
isDisabled = false;
for (int i=0;i<ui->editOptionComboBox->count();i++)
{
if (comboBoxTextToValMap[ui->editOptionComboBox->itemText(i)] == value.toInt())
{
ui->editOptionComboBox->setCurrentIndex(i);
break;
}
}
}
if (paramIndex == paramCount - 1)
{
ui->editStatusLabel->setText(tr("Complete parameter list received."));
}
}
void QGCComboBox::changeEvent(QEvent *e)
{
QWidget::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
void QGCComboBox::writeSettings(QSettings& settings)
{
settings.setValue("TYPE", "COMBOBOX");
settings.setValue("QGC_PARAM_COMBOBOX_DESCRIPTION", ui->nameLabel->text());
//settings.setValue("QGC_PARAM_COMBOBOX_BUTTONTEXT", ui->actionButton->text());
settings.setValue("QGC_PARAM_COMBOBOX_PARAMID", parameterName);
settings.setValue("QGC_PARAM_COMBOBOX_COMPONENTID", component);
settings.setValue("QGC_PARAM_COMBOBOX_DISPLAY_INFO", ui->editInfoCheckBox->isChecked());
settings.setValue("QGC_PARAM_COMBOBOX_COUNT", ui->editOptionComboBox->count());
for (int i=0;i<ui->editOptionComboBox->count();i++)
{
settings.setValue("QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_TEXT",ui->editOptionComboBox->itemText(i));
settings.setValue("QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_VAL",comboBoxTextToValMap[ui->editOptionComboBox->itemText(i)]);
}
settings.sync();
}
void QGCComboBox::readSettings(const QString& pre,const QVariantMap& settings)
{
parameterName = settings.value(pre + "QGC_PARAM_COMBOBOX_PARAMID").toString();
component = settings.value(pre + "QGC_PARAM_COMBOBOX_COMPONENTID").toInt();
ui->nameLabel->setText(settings.value(pre + "QGC_PARAM_COMBOBOX_DESCRIPTION").toString());
ui->editNameLabel->setText(settings.value(pre + "QGC_PARAM_COMBOBOX_DESCRIPTION").toString());
//settings.setValue("QGC_PARAM_SLIDER_BUTTONTEXT", ui->actionButton->text());
ui->editSelectParamComboBox->addItem(settings.value(pre + "QGC_PARAM_COMBOBOX_PARAMID").toString());
ui->editSelectParamComboBox->setCurrentIndex(ui->editSelectParamComboBox->count()-1);
ui->editSelectComponentComboBox->addItem(tr("Component #%1").arg(settings.value(pre + "QGC_PARAM_COMBOBOX_COMPONENTID").toInt()), settings.value(pre + "QGC_PARAM_COMBOBOX_COMPONENTID").toInt());
showInfo(settings.value(pre + "QGC_PARAM_COMBOBOX_DISPLAY_INFO", true).toBool());
ui->editSelectParamComboBox->setEnabled(true);
ui->editSelectComponentComboBox->setEnabled(true);
visibleParam = settings.value(pre+"QGC_PARAM_COMBOBOX_VISIBLE_PARAM","").toString();
visibleVal = settings.value(pre+"QGC_PARAM_COMBOBOX_VISIBLE_VAL",0).toInt();
QString type = settings.value(pre + "QGC_PARAM_COMBOBOX_TYPE","PARAM").toString();
int num = settings.value(pre + "QGC_PARAM_COMBOBOX_COUNT").toInt();
for (int i=0;i<num;i++)
{
QString pixmapfn = settings.value(pre + "QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_IMG","").toString();
if (pixmapfn != "")
{
comboBoxIndexToPixmap[i] = QPixmap(pixmapfn);
}
ui->editOptionComboBox->addItem(settings.value(pre + "QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_TEXT").toString());
//qDebug() << "Adding val:" << settings.value(pre + "QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_TEXT").toString() << settings.value(pre + "QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_VAL").toInt();
comboBoxTextToValMap[settings.value(pre + "QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_TEXT").toString()] = settings.value(pre + "QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_VAL").toInt();
if (type == "INDIVIDUAL")
{
comboBoxTextToParamMap[settings.value(pre + "QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_TEXT").toString()] = settings.value(pre + "QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_PARAM").toString();
ui->editOptionComboBox->setEnabled(true);
}
}
setActiveUAS(UASManager::instance()->getActiveUAS());
// Get param value after settings have been loaded
// requestParameter();
}
void QGCComboBox::readSettings(const QSettings& settings)
{
QVariantMap map;
foreach (QString key,settings.allKeys())
{
map[key] = settings.value(key);
}
readSettings("",map);
//parameterName = settings.value("QGC_PARAM_COMBOBOX_PARAMID").toString();
//component = settings.value("QGC_PARAM_COMBOBOX_COMPONENTID").toInt();
//ui->nameLabel->setText(settings.value("QGC_PARAM_COMBOBOX_DESCRIPTION").toString());
//ui->editNameLabel->setText(settings.value("QGC_PARAM_COMBOBOX_DESCRIPTION").toString());
//ui->editSelectParamComboBox->addItem(settings.value("QGC_PARAM_COMBOBOX_PARAMID").toString());
//ui->editSelectParamComboBox->setCurrentIndex(ui->editSelectParamComboBox->count()-1);
//ui->editSelectComponentComboBox->addItem(tr("Component #%1").arg(settings.value("QGC_PARAM_COMBOBOX_COMPONENTID").toInt()), settings.value("QGC_PARAM_COMBOBOX_COMPONENTID").toInt());
//showInfo(settings.value("QGC_PARAM_COMBOBOX_DISPLAY_INFO", true).toBool());
//ui->editSelectParamComboBox->setEnabled(true);
//ui->editSelectComponentComboBox->setEnabled(true);
/*int num = settings.value("QGC_PARAM_COMBOBOX_COUNT").toInt();
for (int i=0;i<num;i++)
{
QString pixmapfn = settings.value("QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_IMG","").toString();
if (pixmapfn != "")
{
comboBoxIndexToPixmap[i] = QPixmap(pixmapfn);
}
ui->editOptionComboBox->addItem(settings.value("QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_TEXT").toString());
qDebug() << "Adding val:" << settings.value("QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i)).toString() << settings.value("QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_VAL").toInt();
comboBoxTextToValMap[settings.value("QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_TEXT").toString()] = settings.value("QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_VAL").toInt();
}*/
//setActiveUAS(UASManager::instance()->getActiveUAS());*/
// Get param value after settings have been loaded
//requestParameter();
}
void QGCComboBox::addButtonClicked()
{
ui->editOptionComboBox->addItem(ui->editItemNameLabel->text());
comboBoxTextToValMap[ui->editItemNameLabel->text()] = ui->editItemValueSpinBox->value();
}
void QGCComboBox::delButtonClicked()
{
int index = ui->editOptionComboBox->currentIndex();
comboBoxTextToValMap.remove(ui->editOptionComboBox->currentText());
ui->editOptionComboBox->removeItem(index);
}
void QGCComboBox::comboBoxIndexChanged(QString val)
{
ui->imageLabel->setPixmap(comboBoxIndexToPixmap[ui->editOptionComboBox->currentIndex()]);
if (comboBoxTextToParamMap.contains(ui->editOptionComboBox->currentText()))
{
parameterName = comboBoxTextToParamMap.value(ui->editOptionComboBox->currentText());
}
switch (parameterValue.type())
{
case QVariant::Char:
parameterValue = QVariant(QChar((unsigned char)comboBoxTextToValMap[val]));
break;
case QVariant::Int:
parameterValue = (int)comboBoxTextToValMap[val];
break;
case QVariant::UInt:
parameterValue = (unsigned int)comboBoxTextToValMap[val];
break;
case QMetaType::Float:
parameterValue =(float)comboBoxTextToValMap[val];
break;
default:
qCritical() << "ERROR: NO VALID PARAM TYPE";
return;
}
}
#ifndef QGCCOMBOBOX_H
#define QGCCOMBOBOX_H
#include <QWidget>
#include <QAction>
#include <QtDesigner/QDesignerExportWidget>
#include "QGCToolWidgetItem.h"
namespace Ui
{
class QGCComboBox;
}
class QGCComboBox : public QGCToolWidgetItem
{
Q_OBJECT
public:
explicit QGCComboBox(QWidget *parent = 0);
~QGCComboBox();
public slots:
void startEditMode();
void endEditMode();
/** @brief Send the parameter to the MAV */
void sendParameter();
/** @brief Update the UI with the new parameter value */
void setParameterValue(int uas, int component, int paramCount, int paramIndex, QString parameterName, const QVariant value);
void writeSettings(QSettings& settings);
void readSettings(const QString& pre,const QVariantMap& settings);
void readSettings(const QSettings& settings);
void refreshParamList();
void setActiveUAS(UASInterface *uas);
void selectComponent(int componentIndex);
void selectParameter(int paramIndex);
/** @brief Show descriptive text next to slider */
void showInfo(bool enable);
/** @brief Show tool tip of calling element */
void showTooltip();
protected slots:
/** @brief Request the parameter of this widget from the MAV */
void requestParameter();
/** @brief Button click to add a new item to the combobox */
void addButtonClicked();
/** @brief Button click to remove the currently selected item from the combobox */
void delButtonClicked();
/** @brief Updates current parameter based on new combobox value */
void comboBoxIndexChanged(QString val);
protected:
bool visibleEnabled;
QString visibleParam;
int visibleVal;
QMap<QString,QString> comboBoxTextToParamMap;
QMap<int,QPixmap> comboBoxIndexToPixmap;
QMap<QString,int> comboBoxTextToValMap; ///< Comboboxtext/parameter value map
QString parameterName; ///< Key/Name of the parameter
QVariant parameterValue; ///< Value of the parameter
double parameterScalingFactor; ///< Factor to scale the parameter between slider and true value
float parameterMin;
bool isDisabled;
float parameterMax;
int component; ///< ID of the MAV component to address
//double scaledInt;
void changeEvent(QEvent *e);
private:
Ui::QGCComboBox *ui;
};
#endif // QGCCOMBOBOX_H
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QGCComboBox</class>
<widget class="QWidget" name="QGCComboBox">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>789</width>
<height>244</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<layout class="QGridLayout" name="gridLayout" columnstretch="10,0,0,0,0,0,0,0,0,0,0,0">
<property name="leftMargin">
<number>6</number>
</property>
<property name="topMargin">
<number>3</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>3</number>
</property>
<property name="horizontalSpacing">
<number>6</number>
</property>
<property name="verticalSpacing">
<number>12</number>
</property>
<item row="4" column="7">
<widget class="QLabel" name="nameLabel">
<property name="minimumSize">
<size>
<width>60</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Name</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="4" column="8">
<widget class="QToolButton" name="infoLabel">
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="text">
<string>?</string>
</property>
<property name="popupMode">
<enum>QToolButton::DelayedPopup</enum>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonIconOnly</enum>
</property>
<property name="autoRaise">
<bool>false</bool>
</property>
<property name="arrowType">
<enum>Qt::NoArrow</enum>
</property>
</widget>
</item>
<item row="1" column="9">
<widget class="QLineEdit" name="editNameLabel">
<property name="text">
<string>&lt;Parameter Name / Label&gt;</string>
</property>
</widget>
</item>
<item row="7" column="9">
<widget class="QLineEdit" name="editItemNameLabel"/>
</item>
<item row="7" column="7">
<widget class="QSpinBox" name="editItemValueSpinBox"/>
</item>
<item row="4" column="9">
<widget class="QComboBox" name="editOptionComboBox"/>
</item>
<item row="7" column="8">
<widget class="QLabel" name="itemNameLabel">
<property name="text">
<string>Name</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="8" column="8">
<widget class="QComboBox" name="editSelectComponentComboBox">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Select component</string>
</property>
<property name="statusTip">
<string>Select component</string>
</property>
</widget>
</item>
<item row="7" column="10">
<widget class="QPushButton" name="editAddItemButton">
<property name="text">
<string>Add Item</string>
</property>
</widget>
</item>
<item row="7" column="11">
<widget class="QPushButton" name="editRemoveItemButton">
<property name="text">
<string>Delete Item</string>
</property>
</widget>
</item>
<item row="7" column="6">
<widget class="QLabel" name="itemValueLabel">
<property name="text">
<string>Value</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="8" column="9">
<widget class="QComboBox" name="editSelectParamComboBox">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Select parameter</string>
</property>
<property name="statusTip">
<string>Select parameter</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="12">
<widget class="Line" name="editLine1">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="4" column="11">
<widget class="QPushButton" name="readButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="toolTip">
<string>Read the current parameter value on the system</string>
</property>
<property name="statusTip">
<string>Read the current parameter value on the system</string>
</property>
<property name="text">
<string>Get</string>
</property>
</widget>
</item>
<item row="11" column="11">
<widget class="QPushButton" name="editDoneButton">
<property name="text">
<string>Done</string>
</property>
</widget>
</item>
<item row="4" column="10">
<widget class="QPushButton" name="writeButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Transmit the current slider value to the system</string>
</property>
<property name="statusTip">
<string>Transmit the current slider value to the system</string>
</property>
<property name="text">
<string>Set</string>
</property>
</widget>
</item>
<item row="8" column="10">
<widget class="QCheckBox" name="editInfoCheckBox">
<property name="text">
<string>Show Info</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="13" column="0" colspan="12">
<widget class="Line" name="editLine2">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="12" column="2" colspan="10">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="4" column="0" colspan="3">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>0</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="11" column="3" colspan="7">
<widget class="QLabel" name="editStatusLabel">
<property name="text">
<string>Please click first on refresh to update selection menus..</string>
</property>
</widget>
</item>
<item row="8" column="11">
<widget class="QPushButton" name="editRefreshParamsButton">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Refresh</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="12">
<widget class="QLabel" name="imageLabel">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>150</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
......@@ -116,7 +116,10 @@ void QGCCommandButton::sendCommand()
float param6 = ui->editParam6SpinBox->value();
float param7 = ui->editParam7SpinBox->value();
int component = ui->editComponentSpinBox->value();
if (showlabelname != "")
{
emit showLabel(showlabelname,index);
}
QGCToolWidgetItem::uas->executeCommand(command, confirm, param1, param2, param3, param4, param5, param6, param7, component);
//qDebug() << __FILE__ << __LINE__ << "SENDING COMMAND" << index;
}
......@@ -241,7 +244,58 @@ void QGCCommandButton::writeSettings(QSettings& settings)
settings.setValue("QGC_COMMAND_BUTTON_PARAM7", ui->editParam7SpinBox->value());
settings.sync();
}
void QGCCommandButton::readSettings(const QString& pre,const QVariantMap& settings)
{
ui->editButtonName->setText(settings.value(pre + "QGC_COMMAND_BUTTON_BUTTONTEXT", "UNKNOWN").toString());
ui->editCommandComboBox->setCurrentIndex(settings.value(pre + "QGC_COMMAND_BUTTON_COMMANDID", 0).toInt());
ui->commandButton->setText(settings.value(pre + "QGC_COMMAND_BUTTON_BUTTONTEXT", "UNKNOWN").toString());
int commandId = settings.value(pre + "QGC_COMMAND_BUTTON_COMMANDID", 0).toInt();
ui->editParam1SpinBox->setValue(settings.value(pre + "QGC_COMMAND_BUTTON_PARAM1", 0.0).toDouble());
ui->editParam2SpinBox->setValue(settings.value(pre + "QGC_COMMAND_BUTTON_PARAM2", 0.0).toDouble());
ui->editParam3SpinBox->setValue(settings.value(pre + "QGC_COMMAND_BUTTON_PARAM3", 0.0).toDouble());
ui->editParam4SpinBox->setValue(settings.value(pre + "QGC_COMMAND_BUTTON_PARAM4", 0.0).toDouble());
ui->editParam5SpinBox->setValue(settings.value(pre + "QGC_COMMAND_BUTTON_PARAM5", 0.0).toDouble());
ui->editParam6SpinBox->setValue(settings.value(pre + "QGC_COMMAND_BUTTON_PARAM6", 0.0).toDouble());
ui->editParam7SpinBox->setValue(settings.value(pre + "QGC_COMMAND_BUTTON_PARAM7", 0.0).toDouble());
ui->editCommandComboBox->setCurrentIndex(0);
// Find combobox entry for this data
for (int i = 0; i < ui->editCommandComboBox->count(); ++i)
{
if (commandId == ui->editCommandComboBox->itemData(i).toInt())
{
ui->editCommandComboBox->setCurrentIndex(i);
}
}
ui->editParamsVisibleCheckBox->setChecked(settings.value(pre + "QGC_COMMAND_BUTTON_PARAMS_VISIBLE").toBool());
if (ui->editParamsVisibleCheckBox->isChecked())
{
ui->editParam1SpinBox->show();
ui->editParam2SpinBox->show();
ui->editParam3SpinBox->show();
ui->editParam4SpinBox->show();
ui->editParam5SpinBox->show();
ui->editParam6SpinBox->show();
ui->editParam7SpinBox->show();
}
else
{
ui->editParam1SpinBox->hide();
ui->editParam2SpinBox->hide();
ui->editParam3SpinBox->hide();
ui->editParam4SpinBox->hide();
ui->editParam5SpinBox->hide();
ui->editParam6SpinBox->hide();
ui->editParam7SpinBox->hide();
}
ui->editNameLabel->setText(settings.value(pre + "QGC_COMMAND_BUTTON_DESCRIPTION", "ERROR LOADING BUTTON").toString());
ui->nameLabel->setText(settings.value(pre + "QGC_COMMAND_BUTTON_DESCRIPTION", "ERROR LOADING BUTTON").toString());
}
void QGCCommandButton::readSettings(const QSettings& settings)
{
ui->editButtonName->setText(settings.value("QGC_COMMAND_BUTTON_BUTTONTEXT", "UNKNOWN").toString());
......@@ -258,6 +312,8 @@ void QGCCommandButton::readSettings(const QSettings& settings)
ui->editParam6SpinBox->setValue(settings.value("QGC_COMMAND_BUTTON_PARAM6", 0.0).toDouble());
ui->editParam7SpinBox->setValue(settings.value("QGC_COMMAND_BUTTON_PARAM7", 0.0).toDouble());
showlabelname = settings.value("QGC_COMMAND_BUTTON_LABEL","").toString();
ui->editCommandComboBox->setCurrentIndex(0);
// Find combobox entry for this data
......
......@@ -25,8 +25,11 @@ public slots:
void endEditMode();
void writeSettings(QSettings& settings);
void readSettings(const QSettings& settings);
void readSettings(const QString& pre,const QVariantMap& settings);
signals:
void showLabel(QString name, int num);
private:
QString showlabelname;
Ui::QGCCommandButton *ui;
UASInterface* uas;
};
......
......@@ -20,8 +20,13 @@ QGCParamSlider::QGCParamSlider(QWidget *parent) :
component(0),
ui(new Ui::QGCParamSlider)
{
valueModLock = false;
visibleEnabled = true;
valueModLockParam = false;
ui->setupUi(this);
ui->intValueSpinBox->hide();
ui->valueSlider->setEnabled(false);
ui->doubleValueSpinBox->setEnabled(false);
uas = NULL;
scaledInt = ui->valueSlider->maximum() - ui->valueSlider->minimum();
......@@ -37,9 +42,10 @@ QGCParamSlider::QGCParamSlider(QWidget *parent) :
ui->editMaxSpinBox->hide();
ui->editLine1->hide();
ui->editLine2->hide();
ui->infoLabel->hide();
ui->editLine1->setStyleSheet("QWidget { border: 1px solid #66666B; border-radius: 3px; padding: 10px 0px 0px 0px; background: #111122; }");
ui->editLine2->setStyleSheet("QWidget { border: 1px solid #66666B; border-radius: 3px; padding: 10px 0px 0px 0px; background: #111122; }");
//ui->editLine1->setStyleSheet("QWidget { border: 1px solid #66666B; border-radius: 3px; padding: 10px 0px 0px 0px; background: #111122; }");
//ui->editLine2->setStyleSheet("QWidget { border: 1px solid #66666B; border-radius: 3px; padding: 10px 0px 0px 0px; background: #111122; }");
connect(ui->editDoneButton, SIGNAL(clicked()), this, SLOT(endEditMode()));
......@@ -71,7 +77,7 @@ void QGCParamSlider::showTooltip()
if (sender)
{
QPoint point = mapToGlobal(pos());
QPoint point = mapToGlobal(ui->infoLabel->pos());
QToolTip::showText(point, sender->toolTip());
}
}
......@@ -100,10 +106,14 @@ void QGCParamSlider::setActiveUAS(UASInterface* activeUas)
connect(activeUas, SIGNAL(parameterChanged(int,int,int,int,QString,QVariant)), this, SLOT(setParameterValue(int,int,int,int,QString,QVariant)), Qt::UniqueConnection);
uas = activeUas;
// Update current param value
requestParameter();
//requestParameter();
// Set param info
QString text = uas->getParamManager()->getParamInfo(parameterName);
ui->infoLabel->setToolTip(text);
if (text != "")
{
ui->infoLabel->setToolTip(text);
ui->infoLabel->show();
}
// Force-uncheck and hide label if no description is available
if (ui->editInfoCheckBox->isChecked())
{
......@@ -129,13 +139,33 @@ void QGCParamSlider::showInfo(bool enable)
void QGCParamSlider::setParamValue(double value)
{
parameterValue = (float)value;
ui->valueSlider->setValue(floatToScaledInt(value));
//disconnect(ui->valueSlider,SIGNAL(valueChanged(int)));
if (!valueModLock && !valueModLockParam)
{
valueModLock = true;
ui->valueSlider->setValue(floatToScaledInt(value));
}
else
{
valueModLock = false;
}
//connect(ui->valueSlider, SIGNAL(valueChanged(int)), this, SLOT(setSliderValue(int)));
}
void QGCParamSlider::setParamValue(int value)
{
parameterValue = value;
ui->valueSlider->setValue(floatToScaledInt(value));
// disconnect(ui->valueSlider,SIGNAL(valueChanged(int)));
if (!valueModLock && !valueModLockParam)
{
valueModLock = true;
ui->valueSlider->setValue(floatToScaledInt(value));
}
else
{
valueModLock = false;
}
//connect(ui->valueSlider, SIGNAL(valueChanged(int)), this, SLOT(setSliderValue(int)));
}
void QGCParamSlider::selectComponent(int componentIndex)
......@@ -171,9 +201,10 @@ void QGCParamSlider::selectParameter(int paramIndex)
}
// Description
QString text = uas->getParamManager()->getParamInfo(parameterName);
ui->infoLabel->setText(text);
showInfo(!(text.length() > 0));
//QString text = uas->getParamManager()->getParamInfo(parameterName);
//ui->infoLabel->setText(text);
//showInfo(!(text.length() > 0));
}
}
}
......@@ -231,6 +262,9 @@ void QGCParamSlider::endEditMode()
ui->valueSlider->show();
switch (parameterValue.type())
{
case QVariant::Char:
ui->intValueSpinBox->show();
break;
case QVariant::Int:
ui->intValueSpinBox->show();
break;
......@@ -271,23 +305,36 @@ void QGCParamSlider::sendParameter()
void QGCParamSlider::setSliderValue(int sliderValue)
{
switch (parameterValue.type())
if (!valueModLock && !valueModLockParam)
{
case QVariant::Int:
parameterValue = (int)scaledIntToFloat(sliderValue);
ui->intValueSpinBox->setValue(parameterValue.toInt());
break;
case QVariant::UInt:
parameterValue = (unsigned int)scaledIntToFloat(sliderValue);
ui->intValueSpinBox->setValue(parameterValue.toUInt());
break;
case QMetaType::Float:
parameterValue = scaledIntToFloat(sliderValue);
ui->doubleValueSpinBox->setValue(parameterValue.toFloat());
break;
default:
qCritical() << "ERROR: NO VALID PARAM TYPE";
return;
valueModLock = true;
switch (parameterValue.type())
{
case QVariant::Char:
parameterValue = QVariant(QChar((unsigned char)scaledIntToFloat(sliderValue)));
ui->intValueSpinBox->setValue(parameterValue.toInt());
break;
case QVariant::Int:
parameterValue = (int)scaledIntToFloat(sliderValue);
ui->intValueSpinBox->setValue(parameterValue.toInt());
break;
case QVariant::UInt:
parameterValue = (unsigned int)scaledIntToFloat(sliderValue);
ui->intValueSpinBox->setValue(parameterValue.toUInt());
break;
case QMetaType::Float:
parameterValue = scaledIntToFloat(sliderValue);
ui->doubleValueSpinBox->setValue(parameterValue.toFloat());
break;
default:
qCritical() << "ERROR: NO VALID PARAM TYPE";
valueModLock = false;
return;
}
}
else
{
valueModLock = false;
}
}
......@@ -300,6 +347,10 @@ void QGCParamSlider::setSliderValue(int sliderValue)
void QGCParamSlider::setParameterValue(int uas, int component, int paramCount, int paramIndex, QString parameterName, QVariant value)
{
Q_UNUSED(paramCount);
if (ui->nameLabel->text() == "Name")
{
ui->nameLabel->setText(parameterName);
}
// Check if this component and parameter are part of the list
bool found = false;
for (int i = 0; i< ui->editSelectComponentComboBox->count(); ++i)
......@@ -330,34 +381,106 @@ void QGCParamSlider::setParameterValue(int uas, int component, int paramCount, i
ui->editSelectParamComboBox->addItem(parameterName, paramIndex);
}
if (this->parameterName == "RC5_MIN")
{
int stopper = 1;
}
if (parameterName == "RC5_MIN")
{
int stpoper = 1;
}
if (visibleParam != "")
{
if (parameterName == visibleParam)
{
if (visibleVal == value.toInt())
{
this->uas->requestParameter(this->component,this->parameterName);
visibleEnabled = true;
this->show();
}
else
{
//Disable the component here.
ui->valueSlider->setEnabled(false);
ui->intValueSpinBox->setEnabled(false);
ui->doubleValueSpinBox->setEnabled(false);
visibleEnabled = false;
this->hide();
}
}
}
Q_UNUSED(uas);
if (component == this->component && parameterName == this->parameterName)
{
if (!visibleEnabled)
{
return;
}
parameterValue = value;
ui->valueSlider->setEnabled(true);
valueModLockParam = true;
switch (value.type())
{
case QVariant::Char:
ui->intValueSpinBox->show();
ui->intValueSpinBox->setEnabled(true);
ui->doubleValueSpinBox->hide();
ui->intValueSpinBox->setValue(value.toUInt());
ui->intValueSpinBox->setMinimum(-ui->intValueSpinBox->maximum());
ui->valueSlider->setValue(floatToScaledInt(value.toUInt()));
if (parameterMax == 0 && parameterMin == 0)
{
ui->editMaxSpinBox->setValue(255);
ui->editMinSpinBox->setValue(0);
}
break;
case QVariant::Int:
ui->intValueSpinBox->show();
ui->intValueSpinBox->setEnabled(true);
ui->doubleValueSpinBox->hide();
ui->intValueSpinBox->setValue(value.toDouble());
ui->intValueSpinBox->setValue(value.toInt());
ui->valueSlider->setValue(floatToScaledInt(value.toInt()));
ui->intValueSpinBox->setMinimum(-ui->intValueSpinBox->maximum());
if (parameterMax == 0 && parameterMin == 0)
{
ui->editMaxSpinBox->setValue(65535);
ui->editMinSpinBox->setValue(0);
}
break;
case QVariant::UInt:
ui->intValueSpinBox->show();
ui->intValueSpinBox->setEnabled(true);
ui->doubleValueSpinBox->hide();
ui->intValueSpinBox->setValue(value.toDouble());
ui->intValueSpinBox->setValue(value.toUInt());
ui->valueSlider->setValue(floatToScaledInt(value.toUInt()));
ui->intValueSpinBox->setMinimum(0);
if (parameterMax == 0 && parameterMin == 0)
{
ui->editMaxSpinBox->setValue(65535);
ui->editMinSpinBox->setValue(0);
}
break;
case QMetaType::Float:
ui->doubleValueSpinBox->setValue(value.toDouble());
ui->doubleValueSpinBox->setValue(value.toFloat());
ui->doubleValueSpinBox->show();
ui->doubleValueSpinBox->setEnabled(true);
ui->intValueSpinBox->hide();
ui->valueSlider->setValue(floatToScaledInt(value.toFloat()));
if (parameterMax == 0 && parameterMin == 0)
{
ui->editMaxSpinBox->setValue(10000);
ui->editMinSpinBox->setValue(0);
}
break;
default:
qCritical() << "ERROR: NO VALID PARAM TYPE";
valueModLockParam = false;
return;
}
ui->valueSlider->setValue(floatToScaledInt(value.toDouble()));
valueModLockParam = false;
parameterMax = ui->editMaxSpinBox->value();
parameterMin = ui->editMinSpinBox->value();
}
if (paramIndex == paramCount - 1)
......@@ -404,9 +527,44 @@ void QGCParamSlider::writeSettings(QSettings& settings)
settings.setValue("QGC_PARAM_SLIDER_DISPLAY_INFO", ui->editInfoCheckBox->isChecked());
settings.sync();
}
void QGCParamSlider::readSettings(const QString& pre,const QVariantMap& settings)
{
parameterName = settings.value(pre + "QGC_PARAM_SLIDER_PARAMID").toString();
component = settings.value(pre + "QGC_PARAM_SLIDER_COMPONENTID").toInt();
ui->nameLabel->setText(settings.value(pre + "QGC_PARAM_SLIDER_DESCRIPTION").toString());
ui->editNameLabel->setText(settings.value(pre + "QGC_PARAM_SLIDER_DESCRIPTION").toString());
//settings.setValue("QGC_PARAM_SLIDER_BUTTONTEXT", ui->actionButton->text());
ui->editSelectParamComboBox->addItem(settings.value(pre + "QGC_PARAM_SLIDER_PARAMID").toString());
ui->editSelectParamComboBox->setCurrentIndex(ui->editSelectParamComboBox->count()-1);
ui->editSelectComponentComboBox->addItem(tr("Component #%1").arg(settings.value(pre + "QGC_PARAM_SLIDER_COMPONENTID").toInt()), settings.value(pre + "QGC_PARAM_SLIDER_COMPONENTID").toInt());
ui->editMinSpinBox->setValue(settings.value(pre + "QGC_PARAM_SLIDER_MIN").toFloat());
ui->editMaxSpinBox->setValue(settings.value(pre + "QGC_PARAM_SLIDER_MAX").toFloat());
visibleParam = settings.value(pre+"QGC_PARAM_SLIDER_VISIBLE_PARAM","").toString();
visibleVal = settings.value(pre+"QGC_PARAM_SLIDER_VISIBLE_VAL",0).toInt();
parameterMax = ui->editMaxSpinBox->value();
parameterMin = ui->editMinSpinBox->value();
//ui->valueSlider->setMaximum(parameterMax);
//ui->valueSlider->setMinimum(parameterMin);
showInfo(settings.value(pre + "QGC_PARAM_SLIDER_DISPLAY_INFO", true).toBool());
ui->editSelectParamComboBox->setEnabled(true);
ui->editSelectComponentComboBox->setEnabled(true);
setActiveUAS(UASManager::instance()->getActiveUAS());
// Get param value after settings have been loaded
//requestParameter();
}
void QGCParamSlider::readSettings(const QSettings& settings)
{
QVariantMap map;
foreach (QString key,settings.allKeys())
{
map[key] = settings.value(key);
}
readSettings("",map);
return;
parameterName = settings.value("QGC_PARAM_SLIDER_PARAMID").toString();
component = settings.value("QGC_PARAM_SLIDER_COMPONENTID").toInt();
ui->nameLabel->setText(settings.value("QGC_PARAM_SLIDER_DESCRIPTION").toString());
......@@ -417,6 +575,11 @@ void QGCParamSlider::readSettings(const QSettings& settings)
ui->editSelectComponentComboBox->addItem(tr("Component #%1").arg(settings.value("QGC_PARAM_SLIDER_COMPONENTID").toInt()), settings.value("QGC_PARAM_SLIDER_COMPONENTID").toInt());
ui->editMinSpinBox->setValue(settings.value("QGC_PARAM_SLIDER_MIN").toFloat());
ui->editMaxSpinBox->setValue(settings.value("QGC_PARAM_SLIDER_MAX").toFloat());
visibleParam = settings.value("QGC_PARAM_SLIDER_VISIBLE_PARAM","").toString();
//QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_VISIBLE_PARAM=RC5_FUNCTION
visibleVal = settings.value("QGC_PARAM_SLIDER_VISIBLE_VAL",0).toInt();
parameterMax = ui->editMaxSpinBox->value();
parameterMin = ui->editMinSpinBox->value();
showInfo(settings.value("QGC_PARAM_SLIDER_DISPLAY_INFO", true).toBool());
ui->editSelectParamComboBox->setEnabled(true);
ui->editSelectComponentComboBox->setEnabled(true);
......@@ -424,5 +587,5 @@ void QGCParamSlider::readSettings(const QSettings& settings)
setActiveUAS(UASManager::instance()->getActiveUAS());
// Get param value after settings have been loaded
requestParameter();
//requestParameter();
}
......@@ -31,6 +31,7 @@ public slots:
void setParameterValue(int uas, int component, int paramCount, int paramIndex, QString parameterName, const QVariant value);
void writeSettings(QSettings& settings);
void readSettings(const QSettings& settings);
void readSettings(const QString& pre,const QVariantMap& settings);
void refreshParamList();
void setActiveUAS(UASInterface *uas);
void selectComponent(int componentIndex);
......@@ -49,6 +50,13 @@ protected slots:
void requestParameter();
protected:
bool visibleEnabled;
QString visibleParam;
int visibleVal;
//The below variables, and usage in QGCParamSlider.cc are a bit of a hack, since disconnect() does not seem to take effect
//immediatly (perhaps it is put into the event loop?) - MLC
bool valueModLock; ///< Used to keep the slider/spinboxes from updating each other during user input
bool valueModLockParam; ///< Used to keep the slider/spinboxes from udpating each other when a new parametervalue comes in
QString parameterName; ///< Key/Name of the parameter
QVariant parameterValue; ///< Value of the parameter
double parameterScalingFactor; ///< Factor to scale the parameter between slider and true value
......
......@@ -171,7 +171,7 @@
<string>Read the current parameter value on the system</string>
</property>
<property name="text">
<string>R</string>
<string>Get</string>
</property>
</widget>
</item>
......@@ -223,7 +223,7 @@
<string>Transmit the current slider value to the system</string>
</property>
<property name="text">
<string>W</string>
<string>Set</string>
</property>
</widget>
</item>
......@@ -282,18 +282,12 @@
<item row="2" column="3">
<widget class="QToolButton" name="infoLabel">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../../qgroundcontrol.qrc">
<normaloff>:/files/images/status/dialog-information.svg</normaloff>:/files/images/status/dialog-information.svg</iconset>
<string>?</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources>
<include location="../../../qgroundcontrol.qrc"/>
</resources>
<resources/>
<connections/>
</ui>
#include <QDockWidget>
#include "QGCTextLabel.h"
#include "ui_QGCTextLabel.h"
#include "MAVLinkProtocol.h"
#include "UASManager.h"
QGCTextLabel::QGCTextLabel(QWidget *parent) :
QGCToolWidgetItem("Command Button", parent),
ui(new Ui::QGCTextLabel)
{
uas = 0;
enabledNum = -1;
ui->setupUi(this);
connect(ui->editFinishButton, SIGNAL(clicked()), this, SLOT(endEditMode()));
// Hide all edit items
ui->editFinishButton->hide();
ui->editNameLabel->hide();
ui->editTextParam->hide();
ui->editComponentSpinBox->hide();
ui->editLine1->hide();
ui->editLine2->hide();
ui->editLine1->setStyleSheet("QWidget { border: 1px solid #66666B; border-radius: 3px; padding: 10px 0px 0px 0px; background: #111122; }");
ui->editLine2->setStyleSheet("QWidget { border: 1px solid #66666B; border-radius: 3px; padding: 10px 0px 0px 0px; background: #111122; }");
// Add commands to combo box
}
QGCTextLabel::~QGCTextLabel()
{
delete ui;
}
void QGCTextLabel::startEditMode()
{
// Hide elements
ui->nameLabel->hide();
ui->editTextParam->show();
ui->editFinishButton->show();
ui->editNameLabel->show();
ui->editComponentSpinBox->show();
ui->editLine1->show();
ui->editLine2->show();
//setStyleSheet("QGroupBox { border: 1px solid #66666B; border-radius: 3px; padding: 10px 0px 0px 0px; background: #111122; }");
// Attempt to undock the dock widget
QWidget* p = this;
QDockWidget* dock;
do {
p = p->parentWidget();
dock = dynamic_cast<QDockWidget*>(p);
if (dock)
{
dock->setFloating(true);
break;
}
} while (p && !dock);
isInEditMode = true;
}
void QGCTextLabel::endEditMode()
{
ui->editFinishButton->hide();
ui->editTextParam->hide();
ui->editNameLabel->hide();
ui->editComponentSpinBox->hide();
ui->editLine1->hide();
ui->editLine2->hide();
ui->nameLabel->show();
// Write to settings
emit editingFinished();
//setStyleSheet("");
// Attempt to dock the dock widget
QWidget* p = this;
QDockWidget* dock;
do {
p = p->parentWidget();
dock = dynamic_cast<QDockWidget*>(p);
if (dock)
{
dock->setFloating(false);
break;
}
} while (p && !dock);
isInEditMode = false;
}
void QGCTextLabel::writeSettings(QSettings& settings)
{
qDebug() << "COMMAND BUTTON WRITING SETTINGS";
settings.setValue("TYPE", "COMMANDBUTTON");
settings.setValue("QGC_COMMAND_BUTTON_DESCRIPTION", ui->nameLabel->text());
settings.sync();
}
void QGCTextLabel::readSettings(const QString& pre,const QVariantMap& settings)
{
ui->editTextParam->setText(settings.value(pre + "QGC_TEXT_SOURCE", "UNKNOWN").toString());
//ui->editCommandComboBox->setCurrentIndex(settings.value(pre + "QGC_COMMAND_BUTTON_COMMANDID", 0).toInt());
if (ui->editTextParam->text() == "NONE")
{
ui->editNameLabel->setText(settings.value(pre + "QGC_TEXT_TEXT","").toString());
ui->nameLabel->setText(ui->editNameLabel->text());
}
else if (ui->editTextParam->text() == "MAV")
{
//MAV command text
connect(uas,SIGNAL(textMessageReceived(int,int,int,QString)),this,SLOT(textMessageReceived(int,int,int,QString)));
}
//int commandId = settings.value(pre + "QGC_COMMAND_BUTTON_COMMANDID", 0).toInt();
//ui->editNameLabel->setText(settings.value(pre + "QGC_COMMAND_BUTTON_DESCRIPTION", "ERROR LOADING BUTTON").toString());
//ui->nameLabel->setText(settings.value(pre + "QGC_COMMAND_BUTTON_DESCRIPTION", "ERROR LOADING BUTTON").toString());
}
void QGCTextLabel::textMessageReceived(int uasid, int component, int severity, QString message)
{
if (enabledNum != -1)
{
//SUCCESS: Executed CMD: 241
if (message.contains("SUCCESS"))
{
if (message.trimmed().endsWith(QString::number(enabledNum)))
{
enabledNum = -1;
ui->textLabel->setText(ui->textLabel->text() + " Complete");
}
}
else
{
ui->textLabel->setText(message);
}
}
}
void QGCTextLabel::readSettings(const QSettings& settings)
{
//ui->editNameLabel->setText(settings.value("QGC_COMMAND_BUTTON_DESCRIPTION", "ERROR LOADING BUTTON").toString());
//ui->nameLabel->setText(settings.value("QGC_COMMAND_BUTTON_DESCRIPTION", "ERROR LOADING BUTTON").toString());
ui->editTextParam->setText(settings.value("QGC_TEXT_SOURCE", "UNKNOWN").toString());
ui->editNameLabel->setText(settings.value("QGC_TEXT_TEXT","").toString());
//ui->editCommandComboBox->setCurrentIndex(settings.value(pre + "QGC_COMMAND_BUTTON_COMMANDID", 0).toInt());
if (ui->editTextParam->text() == "NONE")
{
ui->textLabel->setText(ui->editNameLabel->text());
ui->nameLabel->setText("");
}
else if (ui->editTextParam->text() == "MAV")
{
//MAV command text
ui->nameLabel->setText(ui->editNameLabel->text());
ui->textLabel->setText("");
connect(uas,SIGNAL(textMessageReceived(int,int,int,QString)),this,SLOT(textMessageReceived(int,int,int,QString)));
}
else
{
}
}
void QGCTextLabel::enableText(int num)
{
enabledNum = num;
}
void QGCTextLabel::setActiveUAS(UASInterface *uas)
{
this->uas = uas;
}
#ifndef QGCTEXTLABEL_H
#define QGCTEXTLABEL_H
#include "QGCToolWidgetItem.h"
namespace Ui
{
class QGCTextLabel;
}
class UASInterface;
class QGCTextLabel : public QGCToolWidgetItem
{
Q_OBJECT
public:
explicit QGCTextLabel(QWidget *parent = 0);
~QGCTextLabel();
void setActiveUAS(UASInterface *uas);
void enableText(int num);
public slots:
void startEditMode();
void endEditMode();
void writeSettings(QSettings& settings);
void readSettings(const QSettings& settings);
void readSettings(const QString& pre,const QVariantMap& settings);
void textMessageReceived(int uasid, int component, int severity, QString message);
private:
int enabledNum;
Ui::QGCTextLabel *ui;
};
#endif // QGCTEXTLABEL_H
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QGCTextLabel</class>
<widget class="QWidget" name="QGCTextLabel">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1183</width>
<height>166</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout" columnstretch="100,0,0">
<property name="leftMargin">
<number>6</number>
</property>
<property name="topMargin">
<number>3</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>3</number>
</property>
<item row="2" column="0" colspan="2">
<widget class="QLineEdit" name="editNameLabel">
<property name="text">
<string>&lt;Label Description Label (in front of text)&gt;</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="3">
<widget class="Line" name="editLine1">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QLabel" name="nameLabel">
<property name="minimumSize">
<size>
<width>50</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Description</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QLineEdit" name="editTextParam">
<property name="text">
<string>&lt;Text Param&gt;</string>
</property>
</widget>
</item>
<item row="6" column="2">
<widget class="QPushButton" name="editFinishButton">
<property name="text">
<string>Done</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QSpinBox" name="editComponentSpinBox">
<property name="prefix">
<string>Component ID: </string>
</property>
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>255</number>
</property>
</widget>
</item>
<item row="7" column="0" colspan="3">
<widget class="Line" name="editLine2">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QLabel" name="textLabel">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>editNameLabel</sender>
<signal>textChanged(QString)</signal>
<receiver>nameLabel</receiver>
<slot>setText(QString)</slot>
<hints>
<hint type="sourcelabel">
<x>114</x>
<y>22</y>
</hint>
<hint type="destinationlabel">
<x>114</x>
<y>55</y>
</hint>
</hints>
</connection>
</connections>
</ui>
......@@ -11,6 +11,8 @@
#include <QDesktopServices>
#include "QGCParamSlider.h"
#include "QGCComboBox.h"
#include "QGCTextLabel.h"
#include "QGCCommandButton.h"
#include "UASManager.h"
......@@ -21,6 +23,7 @@ QGCToolWidget::QGCToolWidget(const QString& title, QWidget *parent, QSettings* s
widgetTitle(title),
ui(new Ui::QGCToolWidget)
{
isFromMetaData = false;
ui->setupUi(this);
if (settings) loadSettings(*settings);
......@@ -64,7 +67,7 @@ QGCToolWidget::QGCToolWidget(const QString& title, QWidget *parent, QSettings* s
// Enforce storage if this not loaded from settings
// is MUST NOT BE SAVED if it was loaded from settings!
if (!settings) storeWidgetsToSettings();
//if (!settings) storeWidgetsToSettings();
}
QGCToolWidget::~QGCToolWidget()
......@@ -108,6 +111,7 @@ QList<QGCToolWidget*> QGCToolWidget::createWidgetsFromSettings(QWidget* parent,
}
QList<QGCToolWidget*> newWidgets;
settings->beginGroup("Custom_Tool_Widgets");
int size = settings->beginReadArray("QGC_TOOL_WIDGET_NAMES");
for (int i = 0; i < size; i++)
{
......@@ -139,10 +143,26 @@ QList<QGCToolWidget*> QGCToolWidget::createWidgetsFromSettings(QWidget* parent,
{
newWidgets.at(i)->loadSettings(*settings);
}
settings->endGroup();
settings->sync();
delete settings;
return instances()->values();
}
void QGCToolWidget::showLabel(QString name,int num)
{
for (int i=0;i<toolItemList.size();i++)
{
if (toolItemList[i]->objectName() == name)
{
QGCTextLabel *label = qobject_cast<QGCTextLabel*>(toolItemList[i]);
if (label)
{
label->enableText(num);
}
}
}
}
/**
* @param singleinstance If this is set to true, the widget settings will only be loaded if not another widget with the same title exists
......@@ -154,6 +174,7 @@ bool QGCToolWidget::loadSettings(const QString& settings, bool singleinstance)
if (groups.length() > 0)
{
QString widgetName = groups.first();
this->setObjectName(widgetName);
if (singleinstance && QGCToolWidget::instances()->keys().contains(widgetName)) return false;
// Do not use setTitle() here,
// interferes with loading settings
......@@ -167,6 +188,131 @@ bool QGCToolWidget::loadSettings(const QString& settings, bool singleinstance)
return false;
}
}
void QGCToolWidget::setSettings(QVariantMap& settings)
{
isFromMetaData = true;
settingsMap = settings;
QString widgetName = getTitle();
int size = settingsMap["count"].toInt();
for (int j = 0; j < size; j++)
{
QString type = settings.value(widgetName + "\\" + QString::number(j) + "\\" + "TYPE", "UNKNOWN").toString();
if (type == "SLIDER")
{
QString checkparam = settingsMap.value(widgetName + "\\" + QString::number(j) + "\\" + "QGC_PARAM_SLIDER_PARAMID").toString();
paramList.append(checkparam);
}
else if (type == "COMBO")
{
QString checkparam = settingsMap.value(widgetName + "\\" + QString::number(j) + "\\" + "QGC_PARAM_COMBOBOX_PARAMID").toString();
paramList.append(checkparam);
}
}
}
QList<QString> QGCToolWidget::getParamList()
{
return paramList;
}
void QGCToolWidget::setParameterValue(int uas, int component, QString parameterName, const QVariant value)
{
QString widgetName = getTitle();
int size = settingsMap["count"].toInt();
if (paramToItemMap.contains(parameterName))
{
//If we already have an item for this parameter, updates are handled internally.
return;
}
for (int j = 0; j < size; j++)
{
QString type = settingsMap.value(widgetName + "\\" + QString::number(j) + "\\" + "TYPE", "UNKNOWN").toString();
QGCToolWidgetItem* item = NULL;
if (type == "COMMANDBUTTON")
{
//This shouldn't happen, but I'm not sure... so lets test for it.
continue;
}
else if (type == "SLIDER")
{
QString checkparam = settingsMap.value(widgetName + "\\" + QString::number(j) + "\\" + "QGC_PARAM_SLIDER_PARAMID").toString();
if (checkparam == parameterName)
{
item = new QGCParamSlider(this);
paramToItemMap[parameterName] = item;
addToolWidget(item);
item->readSettings(widgetName + "\\" + QString::number(j) + "\\",settingsMap);
return;
}
}
else if (type == "COMBO")
{
QString checkparam = settingsMap.value(widgetName + "\\" + QString::number(j) + "\\" + "QGC_PARAM_COMBOBOX_PARAMID").toString();
if (checkparam == parameterName)
{
item = new QGCComboBox(this);
addToolWidget(item);
item->readSettings(widgetName + "\\" + QString::number(j) + "\\",settingsMap);
paramToItemMap[parameterName] = item;
return;
}
}
}
}
void QGCToolWidget::loadSettings(QVariantMap& settings)
{
QString widgetName = getTitle();
//settings.beginGroup(widgetName);
qDebug() << "LOADING FOR" << widgetName;
//int size = settings.beginReadArray("QGC_TOOL_WIDGET_ITEMS");
int size = settings["count"].toInt();
qDebug() << "CHILDREN SIZE:" << size;
for (int j = 0; j < size; j++)
{
QApplication::processEvents();
//settings.setArrayIndex(j);
QString type = settings.value(widgetName + "\\" + QString::number(j) + "\\" + "TYPE", "UNKNOWN").toString();
if (type != "UNKNOWN")
{
QGCToolWidgetItem* item = NULL;
if (type == "COMMANDBUTTON")
{
item = new QGCCommandButton(this);
//qDebug() << "CREATED COMMANDBUTTON";
}
else if (type == "TEXT")
{
item = new QGCTextLabel(this);
item->setActiveUAS(mav);
}
else if (type == "SLIDER")
{
item = new QGCParamSlider(this);
//qDebug() << "CREATED PARAM SLIDER";
}
else if (type == "COMBO")
{
item = new QGCComboBox(this);
//qDebug() << "CREATED PARAM COMBOBOX";
}
if (item)
{
// Configure and add to layout
addToolWidget(item);
item->readSettings(widgetName + "\\" + QString::number(j) + "\\",settings);
//qDebug() << "Created tool widget";
}
}
else
{
qDebug() << "UNKNOWN TOOL WIDGET TYPE" << type;
}
}
//settings.endArray();
//settings.endGroup();
}
void QGCToolWidget::loadSettings(QSettings& settings)
{
......@@ -184,14 +330,30 @@ void QGCToolWidget::loadSettings(QSettings& settings)
QGCToolWidgetItem* item = NULL;
if (type == "COMMANDBUTTON")
{
item = new QGCCommandButton(this);
QGCCommandButton *button = new QGCCommandButton(this);
connect(button,SIGNAL(showLabel(QString,int)),this,SLOT(showLabel(QString,int)));
item = button;
item->setActiveUAS(mav);
//qDebug() << "CREATED COMMANDBUTTON";
}
else if (type == "SLIDER")
{
item = new QGCParamSlider(this);
item->setActiveUAS(mav);
//qDebug() << "CREATED PARAM SLIDER";
}
else if (type == "COMBO")
{
item = new QGCComboBox(this);
item->setActiveUAS(mav);
qDebug() << "CREATED PARAM COMBOBOX";
}
else if (type == "TEXT")
{
item = new QGCTextLabel(this);
item->setObjectName(settings.value("QGC_TEXT_ID").toString());
item->setActiveUAS(mav);
}
if (item)
{
......@@ -226,18 +388,23 @@ void QGCToolWidget::storeWidgetsToSettings(QString settingsFile)
//qDebug() << "STORING SETTINGS TO DEFAULT" << settings->fileName();
}
settings->beginGroup("Custom_Tool_Widgets");
int preArraySize = settings->beginReadArray("QGC_TOOL_WIDGET_NAMES");
settings->endArray();
settings->beginWriteArray("QGC_TOOL_WIDGET_NAMES");
int num = 0;
for (int i = 0; i < qMax(preArraySize, instances()->size()); ++i)
{
settings->setArrayIndex(i);
if (i < instances()->size())
{
// Updating value
settings->setValue("TITLE", instances()->values().at(i)->getTitle());
//qDebug() << "WRITING TITLE" << instances()->values().at(i)->getTitle();
if (!instances()->values().at(i)->fromMetaData())
{
settings->setArrayIndex(num++);
settings->setValue("TITLE", instances()->values().at(i)->getTitle());
//qDebug() << "WRITING TITLE" << instances()->values().at(i)->getTitle();
}
}
else
{
......@@ -252,6 +419,8 @@ void QGCToolWidget::storeWidgetsToSettings(QString settingsFile)
{
instances()->values().at(i)->storeSettings(*settings);
}
settings->endGroup();
settings->sync();
delete settings;
}
......@@ -269,6 +438,11 @@ void QGCToolWidget::storeSettings(const QString& settingsFile)
void QGCToolWidget::storeSettings(QSettings& settings)
{
if (isFromMetaData)
{
//Refuse to store if this is loaded from metadata or dynamically generated.
return;
}
//qDebug() << "WRITING WIDGET" << widgetTitle << "TO SETTINGS";
settings.beginGroup(widgetTitle);
settings.beginWriteArray("QGC_TOOL_WIDGET_ITEMS");
......@@ -370,6 +544,22 @@ QList<QGCToolWidgetItem*>* QGCToolWidget::itemList()
if (!instances) instances = new QList<QGCToolWidgetItem*>();
return instances;
}
void QGCToolWidget::addParam(int uas,int component,QString paramname,QVariant value)
{
isFromMetaData = true;
QGCParamSlider* slider = new QGCParamSlider(this);
connect(slider, SIGNAL(destroyed()), this, SLOT(storeSettings()));
if (ui->hintLabel)
{
ui->hintLabel->deleteLater();
ui->hintLabel = NULL;
}
toolLayout->addWidget(slider);
slider->setActiveUAS(mav);
slider->setParameterValue(uas,component,0,-1,paramname,value);
}
void QGCToolWidget::addParam()
{
......@@ -406,6 +596,7 @@ void QGCToolWidget::addToolWidget(QGCToolWidgetItem* widget)
}
connect(widget, SIGNAL(destroyed()), this, SLOT(storeSettings()));
toolLayout->addWidget(widget);
toolItemList.append(widget);
}
void QGCToolWidget::exportWidget()
......@@ -457,11 +648,11 @@ void QGCToolWidget::setWindowTitle(const QString& title)
void QGCToolWidget::setTitle(QString title)
{
// Remove references to old title
QSettings settings;
/*QSettings settings;
settings.beginGroup(widgetTitle);
settings.remove("");
settings.endGroup();
settings.sync();
settings.sync();*/
if (instances()->contains(widgetTitle)) instances()->remove(widgetTitle);
......@@ -473,7 +664,7 @@ void QGCToolWidget::setTitle(QString title)
QDockWidget* parent = dynamic_cast<QDockWidget*>(this->parentWidget());
if (parent) parent->setWindowTitle(title);
// Store all widgets
storeWidgetsToSettings();
//storeWidgetsToSettings();
emit titleChanged(title);
if (mainMenuAction) mainMenuAction->setText(title);
......@@ -491,10 +682,11 @@ void QGCToolWidget::deleteWidget()
// Hide
this->hide();
instances()->remove(getTitle());
QSettings settings;
/*QSettings settings;
settings.beginGroup(getTitle());
settings.remove("");
settings.endGroup();
storeWidgetsToSettings();*/
storeWidgetsToSettings();
// Delete
......
......@@ -45,6 +45,7 @@ public slots:
void importWidget();
/** @brief Store all widgets of this type to QSettings */
static void storeWidgetsToSettings(QString settingsFile=QString());
void loadSettings(QVariantMap& settings);
/** @brief Load this widget from a QSettings object */
void loadSettings(QSettings& settings);
/** @brief Load this widget from a settings file */
......@@ -57,11 +58,20 @@ public slots:
void storeSettings();
/** @brief Store the view id and dock widget area */
void setViewVisibilityAndDockWidgetArea(int view, bool visible, Qt::DockWidgetArea area);
void setSettings(QVariantMap& settings);
QList<QString> getParamList();
void setParameterValue(int uas, int component, QString parameterName, const QVariant value);
bool fromMetaData() { return isFromMetaData; }
void showLabel(QString name,int num);
signals:
void titleChanged(QString);
protected:
bool isFromMetaData;
QMap<QString,QGCToolWidgetItem*> paramToItemMap;
QList<QGCToolWidgetItem*> toolItemList;
QList<QString> paramList;
QVariantMap settingsMap;
QAction* addParamAction;
QAction* addCommandAction;
QAction* setTitleAction;
......@@ -83,12 +93,14 @@ protected:
void addToolWidget(QGCToolWidgetItem* widget);
void hideEvent(QHideEvent* event);
public slots:
void setTitle(QString title);
void addParam(int uas,int component,QString paramname,QVariant value);
protected slots:
void addParam();
void addCommand();
void setTitle();
void setTitle(QString title);
void setWindowTitle(const QString& title);
......
......@@ -26,6 +26,7 @@ public slots:
}
virtual void writeSettings(QSettings& settings) = 0;
virtual void readSettings(const QSettings& settings) = 0;
virtual void readSettings(const QString& pre,const QVariantMap& settings) = 0;
virtual void setActiveUAS(UASInterface *uas);
signals:
......
......@@ -5,6 +5,7 @@
#include "MAV2DIcon.h"
#include "Waypoint2DIcon.h"
#include "UASWaypointManager.h"
#include "ArduPilotMegaMAV.h"
QGCMapWidget::QGCMapWidget(QWidget *parent) :
mapcontrol::OPMapWidget(parent),
......@@ -19,7 +20,66 @@ QGCMapWidget::QGCMapWidget(QWidget *parent) :
homeAltitude(0)
{
// Widget is inactive until shown
defaultGuidedAlt = -1;
loadSettings(false);
this->setContextMenuPolicy(Qt::ActionsContextMenu);
}
void QGCMapWidget::guidedActionTriggered()
{
if (currWPManager)
{
if (defaultGuidedAlt == -1)
{
if (!guidedAltActionTriggered())
{
return;
}
}
// Create new waypoint and send it to the WPManager to send out.
internals::PointLatLng pos = map->FromLocalToLatLng(mousePressPos.x(), mousePressPos.y());
qDebug() << "Guided action requested. Lat:" << pos.Lat() << "Lon:" << pos.Lng();
Waypoint wp;
wp.setLatitude(pos.Lat());
wp.setLongitude(pos.Lng());
wp.setAltitude(defaultGuidedAlt);
currWPManager->goToWaypoint(&wp);
}
}
bool QGCMapWidget::guidedAltActionTriggered()
{
bool ok = false;
int tmpalt = QInputDialog::getInt(this,"Altitude","Enter default altitude (in meters) of destination point for guided mode",100,0,30000,1,&ok);
if (!ok)
{
//Use has chosen cancel. Do not send the waypoint
return false;
}
defaultGuidedAlt = tmpalt;
guidedActionTriggered();
return true;
}
void QGCMapWidget::cameraActionTriggered()
{
ArduPilotMegaMAV *newmav = qobject_cast<ArduPilotMegaMAV*>(this->uas);
if (newmav)
{
newmav->setMountConfigure(4,true,true,true);
internals::PointLatLng pos = map->FromLocalToLatLng(mousePressPos.x(), mousePressPos.y());
newmav->setMountControl(pos.Lat(),pos.Lng(),100,true);
}
}
void QGCMapWidget::mousePressEvent(QMouseEvent *event)
{
mapcontrol::OPMapWidget::mousePressEvent(event);
}
void QGCMapWidget::mouseReleaseEvent(QMouseEvent *event)
{
mousePressPos = event->pos();
mapcontrol::OPMapWidget::mouseReleaseEvent(event);
}
QGCMapWidget::~QGCMapWidget()
......@@ -188,6 +248,7 @@ void QGCMapWidget::activeUASSet(UASInterface* uas)
{
// Only execute if proper UAS is set
if (!uas) return;
this->uas = uas;
// Disconnect old MAV manager
if (currWPManager)
......@@ -202,6 +263,31 @@ void QGCMapWidget::activeUASSet(UASInterface* uas)
if (uas)
{
currWPManager = uas->getWaypointManager();
QList<QAction*> actionList = this->actions();
for (int i=0;i<actionList.size();i++)
{
this->removeAction(actionList[i]);
actionList[i]->deleteLater();
}
if (currWPManager->guidedModeSupported())
{
QAction *guidedaction = new QAction(this);
guidedaction->setText("Go To Here (Guided Mode)");
connect(guidedaction,SIGNAL(triggered()),this,SLOT(guidedActionTriggered()));
this->addAction(guidedaction);
guidedaction = new QAction(this);
guidedaction->setText("Go To Here Alt (Guided Mode)");
connect(guidedaction,SIGNAL(triggered()),this,SLOT(guidedAltActionTriggered()));
this->addAction(guidedaction);
if (uas->getAutopilotType() == MAV_AUTOPILOT_ARDUPILOTMEGA)
{
QAction *cameraaction = new QAction(this);
cameraaction->setText("Point Camera Here");
connect(cameraaction,SIGNAL(triggered()),this,SLOT(cameraActionTriggered()));
this->addAction(cameraaction);
}
}
// Connect the waypoint manager / data storage to the UI
connect(currWPManager, SIGNAL(waypointEditableListChanged(int)), this, SLOT(updateWaypointList(int)));
......
......@@ -40,6 +40,12 @@ signals:
void waypointChanged(Waypoint* wp);
public slots:
/** @brief Action triggered with point-camera action is selected from the context menu */
void cameraActionTriggered();
/** @brief Action triggered when guided action is selected from the context menu */
void guidedActionTriggered();
/** @brief Action triggered when guided action is selected from the context menu, allows for altitude selection */
bool guidedAltActionTriggered();
/** @brief Add system to map view */
void addUAS(UASInterface* uas);
/** @brief Update the global position of a system */
......@@ -126,6 +132,8 @@ protected:
/** @brief Initialize */
void showEvent(QShowEvent* event);
void hideEvent(QHideEvent* event);
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseDoubleClickEvent(QMouseEvent* event);
UASWaypointManager* currWPManager; ///< The current waypoint manager
......@@ -150,6 +158,9 @@ protected:
int followUAVID; ///< Which UAV should be tracked?
bool mapInitialized; ///< Map initialized?
float homeAltitude; ///< Home altitude
QPoint mousePressPos; ///< Mouse position when the button is released.
int defaultGuidedAlt; ///< Default altitude for guided mode
UASInterface *uas; ///< Currently selected UAS.
};
......
#include "submainwindow.h"
SubMainWindow::SubMainWindow(QWidget *parent) : QMainWindow(parent)
{
}
#ifndef SUBMAINWINDOW_H
#define SUBMAINWINDOW_H
#include <QMainWindow>
class SubMainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit SubMainWindow(QWidget *parent = 0);
signals:
public slots:
};
#endif // SUBMAINWINDOW_H
......@@ -65,6 +65,8 @@ UASListWidget::UASListWidget(QWidget *parent) : QWidget(parent), m_ui(new Ui::UA
uasViews = QMap<UASInterface*, UASView*>();
this->setVisible(false);
connect(UASManager::instance(),SIGNAL(UASCreated(UASInterface*)),this,SLOT(addUAS(UASInterface*)));
}
UASListWidget::~UASListWidget()
......
......@@ -290,7 +290,7 @@ void UASView::hideEvent(QHideEvent* event)
// React only to internal (pre-display)
// events
Q_UNUSED(event);
refreshTimer->stop();
// refreshTimer->stop();
}
void UASView::receiveHeartbeat(UASInterface* uas)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment