diff --git a/flight/CopterControl/System/coptercontrol.c b/flight/CopterControl/System/coptercontrol.c index 9cc651e0f..916718ea5 100644 --- a/flight/CopterControl/System/coptercontrol.c +++ b/flight/CopterControl/System/coptercontrol.c @@ -84,7 +84,20 @@ int main() /* swap the stack to use the IRQ stack */ Stack_Change(); - /* Start the FreeRTOS scheduler which should never returns.*/ + /* Start the FreeRTOS scheduler, which should never return. + * + * NOTE: OpenPilot runs an operating system (FreeRTOS), which constantly calls + * (schedules) function files (modules). These functions never return from their + * while loops, which explains why each module has a while(1){} segment. Thus, + * the OpenPilot software actually starts at the vTaskStartScheduler() function, + * even though this is somewhat obscure. + * + * In addition, there are many main() functions in the OpenPilot firmware source tree + * This is because each main() refers to a separate hardware platform. Of course, + * C only allows one main(), so only the relevant main() function is compiled when + * making a specific firmware. + * + */ vTaskStartScheduler(); /* If all is well we will never reach here as the scheduler will now be running. */ diff --git a/ground/openpilotgcs/share/openpilotgcs/dials/default/flightmode-status.svg b/ground/openpilotgcs/share/openpilotgcs/dials/default/flightmode-status.svg index 56f2ae83b..3a9f27ba4 100755 --- a/ground/openpilotgcs/share/openpilotgcs/dials/default/flightmode-status.svg +++ b/ground/openpilotgcs/share/openpilotgcs/dials/default/flightmode-status.svg @@ -1272,9 +1272,9 @@ style="opacity:0.98000004;fill:#ffffff;fill-opacity:1;stroke:#e31717;stroke-width:3.18836617;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" id="value" width="132.66878" - height="13.323594" - x="15.425945" - y="33.75214" + height="23" + x="15" + y="41" ry="3.4474616" inkscape:label="#rect2989" /> diff --git a/ground/openpilotgcs/src/plugins/config/airframe.ui b/ground/openpilotgcs/src/plugins/config/airframe.ui index 1224614b5..0dcc5ec57 100644 --- a/ground/openpilotgcs/src/plugins/config/airframe.ui +++ b/ground/openpilotgcs/src/plugins/config/airframe.ui @@ -2571,6 +2571,9 @@ margin:1px; true + + Qt::StrongFocus + Overall level of feed forward (in percentage). @@ -2600,6 +2603,9 @@ margin:1px; true + + Qt::StrongFocus + In miliseconds. When tuning: Slowly raise accel time from zero to just @@ -2629,6 +2635,9 @@ its target speed. true + + Qt::StrongFocus + When tuning: Slowly raise decel time from zero to just under the level where the motor starts to undershoot @@ -2667,6 +2676,9 @@ Do it after accel time is setup. + + Qt::StrongFocus + Limits how much the engines can accelerate or decelerate. In 'units per second', a sound default is 1000. @@ -2704,6 +2716,9 @@ In 'units per second', a sound default is 1000. + + Qt::StrongFocus + <!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"> @@ -2719,6 +2734,9 @@ p, li { white-space: pre-wrap; } + + Qt::StrongFocus + <!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"> @@ -2734,6 +2752,9 @@ p, li { white-space: pre-wrap; } + + Qt::StrongFocus + <!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"> diff --git a/ground/openpilotgcs/src/plugins/config/camerastabilization.ui b/ground/openpilotgcs/src/plugins/config/camerastabilization.ui index b734ce54f..828cded66 100644 --- a/ground/openpilotgcs/src/plugins/config/camerastabilization.ui +++ b/ground/openpilotgcs/src/plugins/config/camerastabilization.ui @@ -51,6 +51,9 @@ QGroupBox::title { + + Qt::StrongFocus + Enable CameraStabilization module @@ -106,6 +109,9 @@ QGroupBox::title { + + Qt::StrongFocus + Camera yaw angle for 100% output value, deg. @@ -122,6 +128,9 @@ have to define channel output range using Output configuration tab. + + Qt::StrongFocus + Camera pitch angle for 100% output value, deg. @@ -138,6 +147,9 @@ have to define channel output range using Output configuration tab. + + Qt::StrongFocus + Camera roll angle for 100% output value, deg. @@ -154,6 +166,9 @@ have to define channel output range using Output configuration tab. + + Qt::StrongFocus + Yaw output channel for camera gimbal @@ -166,6 +181,9 @@ have to define channel output range using Output configuration tab. + + Qt::StrongFocus + Pitch output channel for camera gimbal @@ -178,6 +196,9 @@ have to define channel output range using Output configuration tab. + + Qt::StrongFocus + Roll output channel for camera gimbal @@ -356,6 +377,9 @@ margin:1px; + + Qt::StrongFocus + Input channel to control camera yaw @@ -370,6 +394,9 @@ Don't forget to map this channel using Input configuration tab. + + Qt::StrongFocus + Input channel to control camera pitch @@ -384,6 +411,9 @@ Don't forget to map this channel using Input configuration tab. + + Qt::StrongFocus + Input channel to control camera roll @@ -405,6 +435,9 @@ Don't forget to map this channel using Input configuration tab. + + Qt::StrongFocus + Axis stabilization mode @@ -420,6 +453,9 @@ AxisLock: camera remembers tracking attitude. Input controls the rate of deflect + + Qt::StrongFocus + Maximum camera yaw deflection for 100% input in Attitude mode, deg. @@ -433,6 +469,9 @@ AxisLock: camera remembers tracking attitude. Input controls the rate of deflect + + Qt::StrongFocus + Maximum camera yaw rate for 100% input in AxisLock mode, deg/s. @@ -446,6 +485,9 @@ AxisLock: camera remembers tracking attitude. Input controls the rate of deflect + + Qt::StrongFocus + Input low-pass filter response time for yaw axis, ms. @@ -461,6 +503,9 @@ This option smoothes the stick input. Zero value disables LPF. + + Qt::StrongFocus + Axis stabilization mode @@ -476,6 +521,9 @@ AxisLock: camera remembers tracking attitude. Input controls the rate of deflect + + Qt::StrongFocus + Maximum camera pitch deflection for 100% input in Attitude mode, deg. @@ -489,6 +537,9 @@ AxisLock: camera remembers tracking attitude. Input controls the rate of deflect + + Qt::StrongFocus + Maximum camera pitch rate for 100% input in AxisLock mode, deg/s. @@ -502,6 +553,9 @@ AxisLock: camera remembers tracking attitude. Input controls the rate of deflect + + Qt::StrongFocus + Input low-pass filter response time for pitch axis, ms. @@ -517,6 +571,9 @@ This option smoothes the stick input. Zero value disables LPF. + + Qt::StrongFocus + Axis stabilization mode @@ -532,6 +589,9 @@ AxisLock: camera remembers tracking attitude. Input controls the rate of deflect + + Qt::StrongFocus + Maximum camera roll deflection for 100% input in Attitude mode, deg. @@ -545,6 +605,9 @@ AxisLock: camera remembers tracking attitude. Input controls the rate of deflect + + Qt::StrongFocus + Maximum camera roll rate for 100% input in AxisLock mode, deg/s. @@ -558,6 +621,9 @@ AxisLock: camera remembers tracking attitude. Input controls the rate of deflect + + Qt::StrongFocus + Input low-pass filter response time for roll axis, ms. @@ -615,6 +681,9 @@ This option smoothes the stick input. Zero value disables LPF. + + Qt::StrongFocus + Stick input deadband for all axes in AxisLock mode, deg/s. diff --git a/ground/openpilotgcs/src/plugins/config/configcamerastabilizationwidget.cpp b/ground/openpilotgcs/src/plugins/config/configcamerastabilizationwidget.cpp index eece2e214..86ac30080 100644 --- a/ground/openpilotgcs/src/plugins/config/configcamerastabilizationwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configcamerastabilizationwidget.cpp @@ -89,6 +89,8 @@ ConfigCameraStabilizationWidget::ConfigCameraStabilizationWidget(QWidget *parent connect(m_camerastabilization->camerastabilizationSaveRAM, SIGNAL(clicked()), this, SLOT(applySettings())); connect(m_camerastabilization->camerastabilizationSaveSD, SIGNAL(clicked()), this, SLOT(saveSettings())); connect(m_camerastabilization->camerastabilizationHelp, SIGNAL(clicked()), this, SLOT(openHelp())); + + disbleMouseWheelEvents(); } ConfigCameraStabilizationWidget::~ConfigCameraStabilizationWidget() diff --git a/ground/openpilotgcs/src/plugins/config/configcamerastabilizationwidget.h b/ground/openpilotgcs/src/plugins/config/configcamerastabilizationwidget.h index 41fd5dc4d..743435adb 100644 --- a/ground/openpilotgcs/src/plugins/config/configcamerastabilizationwidget.h +++ b/ground/openpilotgcs/src/plugins/config/configcamerastabilizationwidget.h @@ -41,7 +41,6 @@ class ConfigCameraStabilizationWidget: public ConfigTaskWidget public: ConfigCameraStabilizationWidget(QWidget *parent = 0); ~ConfigCameraStabilizationWidget(); - private: Ui_CameraStabilizationWidget *m_camerastabilization; virtual void enableControls(bool enable); diff --git a/ground/openpilotgcs/src/plugins/config/configstabilizationwidget.cpp b/ground/openpilotgcs/src/plugins/config/configstabilizationwidget.cpp index f34e40900..7306475a4 100644 --- a/ground/openpilotgcs/src/plugins/config/configstabilizationwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configstabilizationwidget.cpp @@ -52,6 +52,8 @@ ConfigStabilizationWidget::ConfigStabilizationWidget(QWidget *parent) : ConfigTa connect(m_stabilization->checkBox_3,SIGNAL(stateChanged(int)),this,SLOT(linkCheckBoxes(int))); connect(this,SIGNAL(widgetContentsChanged(QWidget*)),this,SLOT(processLinkedWidgets(QWidget*))); + + disbleMouseWheelEvents(); } diff --git a/ground/openpilotgcs/src/plugins/config/configtxpidwidget.cpp b/ground/openpilotgcs/src/plugins/config/configtxpidwidget.cpp index 27df06ef9..1d65eaf1c 100644 --- a/ground/openpilotgcs/src/plugins/config/configtxpidwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configtxpidwidget.cpp @@ -67,6 +67,8 @@ ConfigTxPIDWidget::ConfigTxPIDWidget(QWidget *parent) : ConfigTaskWidget(parent) enableControls(false); populateWidgets(); refreshWidgetsValues(); + + disbleMouseWheelEvents(); } ConfigTxPIDWidget::~ConfigTxPIDWidget() diff --git a/ground/openpilotgcs/src/plugins/config/configtxpidwidget.h b/ground/openpilotgcs/src/plugins/config/configtxpidwidget.h index 9723e141f..14eb5925d 100644 --- a/ground/openpilotgcs/src/plugins/config/configtxpidwidget.h +++ b/ground/openpilotgcs/src/plugins/config/configtxpidwidget.h @@ -37,7 +37,6 @@ class ConfigTxPIDWidget : public ConfigTaskWidget public: ConfigTxPIDWidget(QWidget *parent = 0); ~ConfigTxPIDWidget(); - private: Ui_TxPIDWidget *m_txpid; diff --git a/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp b/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp index dfbb023e2..b16236fa0 100644 --- a/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp @@ -233,6 +233,7 @@ ConfigVehicleTypeWidget::ConfigVehicleTypeWidget(QWidget *parent) : ConfigTaskWi setupGroundVehicleUI( m_aircraft->groundVehicleType->currentText() ); setupFixedWingUI( m_aircraft->fixedWingType->currentText() ); + disbleMouseWheelEvents(); } @@ -244,7 +245,6 @@ ConfigVehicleTypeWidget::~ConfigVehicleTypeWidget() // Do nothing } - /** Slot for switching the airframe type. We do it explicitely rather than a signal in the UI, because we want to force a fitInView of the quad shapes. diff --git a/ground/openpilotgcs/src/plugins/config/input.ui b/ground/openpilotgcs/src/plugins/config/input.ui index 915df3d4b..da2a59ddd 100644 --- a/ground/openpilotgcs/src/plugins/config/input.ui +++ b/ground/openpilotgcs/src/plugins/config/input.ui @@ -291,6 +291,9 @@ margin:1px; 0 + + Qt::StrongFocus + @@ -301,6 +304,9 @@ margin:1px; 0 + + Qt::StrongFocus + @@ -311,6 +317,9 @@ margin:1px; 0 + + Qt::StrongFocus + @@ -324,13 +333,25 @@ margin:1px; - + + + Qt::StrongFocus + + - + + + Qt::StrongFocus + + - + + + Qt::StrongFocus + + @@ -343,13 +364,25 @@ margin:1px; - + + + Qt::StrongFocus + + - + + + Qt::StrongFocus + + - + + + Qt::StrongFocus + + @@ -424,6 +457,9 @@ margin:1px; 26 + + Qt::StrongFocus + @@ -434,6 +470,9 @@ margin:1px; 26 + + Qt::StrongFocus + Select the stabilization mode on this position (manual/stabilized/auto) @@ -460,6 +499,9 @@ margin:1px; 26 + + Qt::StrongFocus + @@ -499,6 +541,9 @@ margin:1px; 81 + + Qt::StrongFocus + This slider moves when you move the flight mode switch on your remote. Setup the flightmode channel on the RC Input tab @@ -572,6 +617,9 @@ if you have not done so already. + + Qt::StrongFocus + Indicate the control used for arming the airframe, in addition to setting the throttle to its minimum position. In other terms "Throttle Off". @@ -603,6 +651,9 @@ if you have not done so already. + + Qt::StrongFocus + After the time indicated here, the frame go back to disarmed state. @@ -733,17 +784,30 @@ Applies and Saves all settings to SD fmsSlider fmsModePos3 - fmsSsPos3Roll - fmsSsPos3Pitch - fmsSsPos3Yaw fmsModePos2 - fmsSsPos2Roll - fmsSsPos2Pitch - fmsSsPos2Yaw fmsModePos1 fmsSsPos1Roll fmsSsPos1Pitch fmsSsPos1Yaw + fmsSsPos2Roll + fmsSsPos2Pitch + fmsSsPos2Yaw + fmsSsPos3Roll + fmsSsPos3Pitch + fmsSsPos3Yaw + tabWidget + deadband + configurationWizard + runCalibration + graphicsView + wzBack + wzNext + wzCancel + armControl + armTimeout + inputHelp + saveRCInputToRAM + saveRCInputToSD diff --git a/ground/openpilotgcs/src/plugins/config/inputchannelform.cpp b/ground/openpilotgcs/src/plugins/config/inputchannelform.cpp index 7561e111f..dbab48cac 100644 --- a/ground/openpilotgcs/src/plugins/config/inputchannelform.cpp +++ b/ground/openpilotgcs/src/plugins/config/inputchannelform.cpp @@ -4,7 +4,7 @@ #include "manualcontrolsettings.h" inputChannelForm::inputChannelForm(QWidget *parent,bool showlegend) : - QWidget(parent), + ConfigTaskWidget(parent), ui(new Ui::inputChannelForm) { ui->setupUi(this); @@ -36,12 +36,16 @@ inputChannelForm::inputChannelForm(QWidget *parent,bool showlegend) : // a spin box fixes this connect(ui->channelNumberDropdown,SIGNAL(currentIndexChanged(int)),this,SLOT(channelDropdownUpdated(int))); connect(ui->channelNumber,SIGNAL(valueChanged(int)),this,SLOT(channelNumberUpdated(int))); + + disbleMouseWheelEvents(); } + inputChannelForm::~inputChannelForm() { delete ui; } + void inputChannelForm::setName(QString &name) { ui->channelName->setText(name); diff --git a/ground/openpilotgcs/src/plugins/config/inputchannelform.h b/ground/openpilotgcs/src/plugins/config/inputchannelform.h index c6534dc48..606ef2d78 100644 --- a/ground/openpilotgcs/src/plugins/config/inputchannelform.h +++ b/ground/openpilotgcs/src/plugins/config/inputchannelform.h @@ -7,7 +7,7 @@ namespace Ui { class inputChannelForm; } -class inputChannelForm : public QWidget +class inputChannelForm : public ConfigTaskWidget { Q_OBJECT diff --git a/ground/openpilotgcs/src/plugins/config/inputchannelform.ui b/ground/openpilotgcs/src/plugins/config/inputchannelform.ui index b53bbb6bf..a32599c30 100644 --- a/ground/openpilotgcs/src/plugins/config/inputchannelform.ui +++ b/ground/openpilotgcs/src/plugins/config/inputchannelform.ui @@ -65,6 +65,9 @@ 16777215 + + Qt::StrongFocus + @@ -75,6 +78,9 @@ 25 + + Qt::StrongFocus + QAbstractSpinBox::NoButtons @@ -94,6 +100,9 @@ 25 + + Qt::StrongFocus + QAbstractSpinBox::NoButtons @@ -275,6 +284,9 @@ font:bold; 22 + + Qt::StrongFocus + Qt::Horizontal @@ -300,6 +312,9 @@ font:bold; 16777215 + + Qt::StrongFocus + 7 @@ -471,6 +486,15 @@ font:bold; + + channelNumber + channelGroup + channelNumberDropdown + channelMin + channelNeutral + channelMax + channelRev + diff --git a/ground/openpilotgcs/src/plugins/config/outputchannelform.cpp b/ground/openpilotgcs/src/plugins/config/outputchannelform.cpp index 64e7df893..530244777 100644 --- a/ground/openpilotgcs/src/plugins/config/outputchannelform.cpp +++ b/ground/openpilotgcs/src/plugins/config/outputchannelform.cpp @@ -29,7 +29,7 @@ #include "configoutputwidget.h" OutputChannelForm::OutputChannelForm(const int index, QWidget *parent, const bool showLegend) : - QWidget(parent), + ConfigTaskWidget(parent), ui(), m_index(index), m_inChannelTest(false) @@ -70,6 +70,8 @@ OutputChannelForm::OutputChannelForm(const int index, QWidget *parent, const boo ui.actuatorLink->setChecked(false); connect(ui.actuatorLink, SIGNAL(toggled(bool)), this, SLOT(linkToggled(bool))); + + disbleMouseWheelEvents(); } OutputChannelForm::~OutputChannelForm() diff --git a/ground/openpilotgcs/src/plugins/config/outputchannelform.h b/ground/openpilotgcs/src/plugins/config/outputchannelform.h index 7d492dc1a..873a5ea50 100644 --- a/ground/openpilotgcs/src/plugins/config/outputchannelform.h +++ b/ground/openpilotgcs/src/plugins/config/outputchannelform.h @@ -29,10 +29,9 @@ #include #include "ui_outputchannelform.h" +#include "configtaskwidget.h" -class ConfigOnputWidget; - -class OutputChannelForm : public QWidget +class OutputChannelForm : public ConfigTaskWidget { Q_OBJECT diff --git a/ground/openpilotgcs/src/plugins/config/stabilization.ui b/ground/openpilotgcs/src/plugins/config/stabilization.ui index 5c79c104f..02a2c97e7 100755 --- a/ground/openpilotgcs/src/plugins/config/stabilization.ui +++ b/ground/openpilotgcs/src/plugins/config/stabilization.ui @@ -10198,7 +10198,7 @@ border-radius: 5; Full Stick -Angle +Angle (deg) Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -10226,7 +10226,7 @@ Angle - 100 + 180 50 @@ -10245,7 +10245,7 @@ Angle objname:StabilizationSettings fieldname:RollMax haslimits:yes - scale:1.8 + scale:1.0 buttongroup:3,10 @@ -10269,17 +10269,17 @@ Angle Qt::StrongFocus - 200 + 180 - 200 + 180 objname:StabilizationSettings fieldname:RollMax haslimits:yes - scale:1.8 + scale:1.0 buttongroup:3,10 @@ -10322,7 +10322,7 @@ Angle - 100 + 180 50 @@ -10341,7 +10341,7 @@ Angle objname:StabilizationSettings fieldname:PitchMax haslimits:yes - scale:1.8 + scale:1.0 buttongroup:3,10 @@ -10365,17 +10365,17 @@ Angle Qt::StrongFocus - 200 + 180 - 200 + 180 objname:StabilizationSettings fieldname:PitchMax haslimits:yes - scale:1.8 + scale:1.0 buttongroup:3,10 @@ -10418,7 +10418,7 @@ Angle - 100 + 180 50 @@ -10437,7 +10437,7 @@ Angle objname:StabilizationSettings fieldname:YawMax haslimits:yes - scale:1.8 + scale:1.0 buttongroup:3,10 @@ -10461,17 +10461,17 @@ Angle Qt::StrongFocus - 200 + 180 - 200 + 180 objname:StabilizationSettings fieldname:YawMax haslimits:yes - scale:1.8 + scale:1.0 buttongroup:3,10 @@ -10490,7 +10490,7 @@ Angle Full Stick -Rate +Rate (deg/s) Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -10518,7 +10518,7 @@ Rate - 100 + 500 50 @@ -10538,7 +10538,7 @@ Rate fieldname:ManualRate element:Roll haslimits:yes - scale:5 + scale:1 buttongroup:3,10 @@ -10562,10 +10562,10 @@ Rate Qt::StrongFocus - 200 + 500 - 200 + 180 @@ -10573,7 +10573,7 @@ Rate fieldname:ManualRate element:Roll haslimits:yes - scale:5 + scale:1 buttongroup:3,10 @@ -10600,7 +10600,7 @@ Rate - 100 + 500 50 @@ -10620,7 +10620,7 @@ Rate fieldname:ManualRate element:Pitch haslimits:yes - scale:5 + scale:1 buttongroup:3,10 @@ -10644,10 +10644,10 @@ Rate Qt::StrongFocus - 200 + 500 - 200 + 180 @@ -10655,7 +10655,7 @@ Rate fieldname:ManualRate element:Pitch haslimits:yes - scale:5 + scale:1 buttongroup:3,10 @@ -10682,7 +10682,7 @@ Rate - 100 + 500 50 @@ -10702,7 +10702,7 @@ Rate fieldname:ManualRate element:Yaw haslimits:yes - scale:5 + scale:1 buttongroup:3,10 @@ -10726,10 +10726,10 @@ Rate Qt::StrongFocus - 200 + 500 - 200 + 180 @@ -10737,7 +10737,7 @@ Rate fieldname:ManualRate element:Yaw haslimits:yes - scale:5 + scale:1 buttongroup:3,10 @@ -10784,7 +10784,7 @@ Attitude - 100 + 500 50 @@ -10804,7 +10804,7 @@ Attitude fieldname:MaximumRate element:Roll haslimits:yes - scale:5 + scale:1 buttongroup:3,10 @@ -10828,7 +10828,7 @@ Attitude Qt::StrongFocus - 200 + 500 200 @@ -10839,7 +10839,7 @@ Attitude fieldname:MaximumRate element:Roll haslimits:yes - scale:5 + scale:1 buttongroup:3,10 @@ -10866,7 +10866,7 @@ Attitude - 100 + 500 50 @@ -10886,7 +10886,7 @@ Attitude fieldname:MaximumRate element:Pitch haslimits:yes - scale:5 + scale:1 buttongroup:3,10 @@ -10910,7 +10910,7 @@ Attitude Qt::StrongFocus - 200 + 500 200 @@ -10921,7 +10921,7 @@ Attitude fieldname:MaximumRate element:Pitch haslimits:yes - scale:5 + scale:1 buttongroup:3,10 @@ -10948,7 +10948,7 @@ Attitude - 100 + 500 50 @@ -10968,7 +10968,7 @@ Attitude fieldname:MaximumRate element:Yaw haslimits:yes - scale:5 + scale:1 buttongroup:3,10 @@ -10992,7 +10992,7 @@ Attitude Qt::StrongFocus - 200 + 500 200 @@ -11003,7 +11003,7 @@ Attitude fieldname:MaximumRate element:Yaw haslimits:yes - scale:5 + scale:1 buttongroup:3,10 @@ -11885,7 +11885,7 @@ border-radius: 4; 0 - -403 + 0 673 1079 @@ -14743,7 +14743,7 @@ Then lower the value by 20% or so. - 6 + 5 0.000100000000000 @@ -14791,7 +14791,7 @@ Then lower the value by 20% or so. - 6 + 5 0.000100000000000 @@ -14841,7 +14841,7 @@ You can usually go for higher values for Yaw factors. - 6 + 5 0.000100000000000 @@ -14924,7 +14924,7 @@ value as the Kp. - 6 + 5 0.000100000000000 @@ -14988,7 +14988,7 @@ value as the Kp. - 6 + 5 0.000100000000000 @@ -15052,7 +15052,7 @@ value as the Kp. - 6 + 5 0.000100000000000 @@ -15299,7 +15299,7 @@ value as the Kp. - 6 + 4 1.000000000000000 @@ -15346,7 +15346,7 @@ value as the Kp. - 6 + 4 1.000000000000000 @@ -15396,7 +15396,7 @@ value as the Kp. - 6 + 4 1.000000000000000 @@ -18302,7 +18302,7 @@ border-radius: 5; - 6 + 3 0.100000000000000 @@ -18346,7 +18346,7 @@ border-radius: 5; - 6 + 3 0.100000000000000 @@ -18393,7 +18393,7 @@ border-radius: 5; - 6 + 3 0.100000000000000 @@ -18475,7 +18475,7 @@ border-radius: 5; - 6 + 3 0.100000000000000 @@ -18535,7 +18535,7 @@ border-radius: 5; - 6 + 3 0.100000000000000 @@ -18598,7 +18598,7 @@ border-radius: 5; - 6 + 3 0.100000000000000 @@ -18676,7 +18676,7 @@ border-radius: 5; - 6 + 2 0.100000000000000 @@ -18720,7 +18720,7 @@ border-radius: 5; - 6 + 2 0.100000000000000 @@ -18767,7 +18767,7 @@ border-radius: 5; - 6 + 2 0.100000000000000 diff --git a/ground/openpilotgcs/src/plugins/config/txpid.ui b/ground/openpilotgcs/src/plugins/config/txpid.ui index 3bfce4cd7..9862bfad1 100644 --- a/ground/openpilotgcs/src/plugins/config/txpid.ui +++ b/ground/openpilotgcs/src/plugins/config/txpid.ui @@ -34,6 +34,9 @@ + + Qt::StrongFocus + This module will periodically update values of stabilization PID settings depending on configured input control channels. New values of stabilization @@ -191,6 +194,9 @@ margin:1px; + + Qt::StrongFocus + Select PID option or option pair to update. Set to Disabled if not used. @@ -199,6 +205,9 @@ Set to Disabled if not used. + + Qt::StrongFocus + Select input used as a control source for this instance. It can be one of Accessory channels or Throttle channel. @@ -219,6 +228,9 @@ used, for instance, to decrease PID value when increasing Throttle. + + Qt::StrongFocus + Minimum PID value mapped to Accessory channel = 0 or Throttle channel lesser or equal to Throttle Min value. @@ -233,6 +245,9 @@ Throttle channel lesser or equal to Throttle Min value. + + Qt::StrongFocus + Maximum PID value mapped to Accessory channel = 1 or Throttle channel greater or equal to Throttle Max value. @@ -254,6 +269,9 @@ Throttle channel greater or equal to Throttle Max value. + + Qt::StrongFocus + Select PID option or option pair to update. Set to Disabled if not used. @@ -262,6 +280,9 @@ Set to Disabled if not used. + + Qt::StrongFocus + Select input used as a control source for this instance. It can be one of Accessory channels or Throttle channel. @@ -282,6 +303,9 @@ used, for instance, to decrease PID value when increasing Throttle. + + Qt::StrongFocus + Minimum PID value mapped to Accessory channel = 0 or Throttle channel lesser or equal to Throttle Min value. @@ -296,6 +320,9 @@ Throttle channel lesser or equal to Throttle Min value. + + Qt::StrongFocus + Maximum PID value mapped to Accessory channel = 1 or Throttle channel greater or equal to Throttle Max value. @@ -317,6 +344,9 @@ Throttle channel greater or equal to Throttle Max value. + + Qt::StrongFocus + Select PID option or option pair to update. Set to Disabled if not used. @@ -325,6 +355,9 @@ Set to Disabled if not used. + + Qt::StrongFocus + Select input used as a control source for this instance. It can be one of Accessory channels or Throttle channel. @@ -345,6 +378,9 @@ used, for instance, to decrease PID value when increasing Throttle. + + Qt::StrongFocus + Minimum PID value mapped to Accessory channel = 0 or Throttle channel lesser or equal to Throttle Min value. @@ -359,6 +395,9 @@ Throttle channel lesser or equal to Throttle Min value. + + Qt::StrongFocus + Maximum PID value mapped to Accessory channel = 1 or Throttle channel greater or equal to Throttle Max value. @@ -380,6 +419,9 @@ Throttle channel greater or equal to Throttle Max value. + + Qt::StrongFocus + PID values update mode which can be set to: - Never: this disables PID updates (but module still will be run if enabled), @@ -403,6 +445,9 @@ only when system is armed without disabling the module. + + Qt::StrongFocus + Throttle channel lower bound mapped to PID Min value @@ -416,6 +461,9 @@ only when system is armed without disabling the module. + + Qt::StrongFocus + Throttle channel upper bound mapped to PID Max value @@ -578,6 +626,21 @@ margin:1px; Apply Save scrollArea + PID1 + Input1 + MinPID1 + MaxPID1 + PID2 + Input2 + MinPID2 + MaxPID2 + PID3 + Input3 + MinPID3 + MaxPID3 + ThrottleMin + ThrottleMax + UpdateMode diff --git a/ground/openpilotgcs/src/plugins/coreplugin/coreconstants.h b/ground/openpilotgcs/src/plugins/coreplugin/coreconstants.h index f02315d2f..3398a3c89 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/coreconstants.h +++ b/ground/openpilotgcs/src/plugins/coreplugin/coreconstants.h @@ -49,6 +49,7 @@ const char * const GCS_VERSION_LONG = GCS_VERSION; const char * const GCS_AUTHOR = "OpenPilot Project"; const char * const GCS_YEAR = "2011"; +const char * const GCS_HELP = "http://wiki.openpilot.org"; #ifdef GCS_REVISION const char * const GCS_REVISION_STR = STRINGIFY(GCS_REVISION); #else diff --git a/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp b/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp index 1849b4e8b..b35f21cc3 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp @@ -83,6 +83,7 @@ #include #include #include +#include /* #ifdef Q_OS_UNIX @@ -731,10 +732,7 @@ void MainWindow::registerDefaultActions() cmd = am->registerAction(tmpaction, Constants::G_HELP_HELP, m_globalContext); mhelp->addAction(cmd, Constants::G_HELP_HELP); tmpaction->setEnabled(true); -#ifdef Q_WS_MAC - cmd->action()->setMenuRole(QAction::ApplicationSpecificRole); -#endif - connect(tmpaction, SIGNAL(triggered()), this, SLOT(aboutPlugins())); + connect(tmpaction, SIGNAL(triggered()), this, SLOT(showHelp())); // About sep #ifndef Q_WS_MAC // doesn't have the "About" actions in the Help menu @@ -870,6 +868,11 @@ void MainWindow::applyTabBarSettings(QTabWidget::TabPosition pos, bool movable) m_modeStack->setMovable(movable); } +void MainWindow::showHelp() +{ + QDesktopServices::openUrl( QUrl(Constants::GCS_HELP, QUrl::StrictMode) ); +} + ActionManager *MainWindow::actionManager() const { return m_actionManager; diff --git a/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.h b/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.h index 7d1c61ebc..7ae640fef 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.h +++ b/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.h @@ -163,6 +163,7 @@ private slots: void modeChanged(Core::IMode *mode); void showUavGadgetMenus(bool show, bool hasSplitter); void applyTabBarSettings(QTabWidget::TabPosition pos, bool movable); + void showHelp(); private: void updateContextObject(IContext *context); diff --git a/ground/openpilotgcs/src/plugins/pfd/pfdgadgetwidget.cpp b/ground/openpilotgcs/src/plugins/pfd/pfdgadgetwidget.cpp index 072c54be3..7fedb99ab 100644 --- a/ground/openpilotgcs/src/plugins/pfd/pfdgadgetwidget.cpp +++ b/ground/openpilotgcs/src/plugins/pfd/pfdgadgetwidget.cpp @@ -304,7 +304,7 @@ void PFDGadgetWidget::updateAirspeed(UAVObject *object) { UAVObjectField* eastField = object->getField("East"); if (northField && eastField) { double val = floor(sqrt(pow(northField->getDouble(),2) + pow(eastField->getDouble(),2))*10)/10; - groundspeedTarget = 3.6*val*speedScaleHeight/3000; + groundspeedTarget = 3.6*val*speedScaleHeight/30; if (!dialTimer.isActive()) dialTimer.start(); // Rearm the dial Timer which might be stopped. @@ -321,7 +321,7 @@ void PFDGadgetWidget::updateAltitude(UAVObject *object) { UAVObjectField* downField = object->getField("Down"); if (downField) { // The altitude scale represents 30 meters - altitudeTarget = -floor(downField->getDouble()*10)/10*altitudeScaleHeight/3000; + altitudeTarget = -floor(downField->getDouble()*10)/10*altitudeScaleHeight/30; if (!dialTimer.isActive()) dialTimer.start(); // Rearm the dial Timer which might be stopped. diff --git a/ground/openpilotgcs/src/plugins/uavobjectwidgetutils/configtaskwidget.cpp b/ground/openpilotgcs/src/plugins/uavobjectwidgetutils/configtaskwidget.cpp index 4bb570295..51bafbb2d 100644 --- a/ground/openpilotgcs/src/plugins/uavobjectwidgetutils/configtaskwidget.cpp +++ b/ground/openpilotgcs/src/plugins/uavobjectwidgetutils/configtaskwidget.cpp @@ -367,7 +367,7 @@ void ConfigTaskWidget::forceShadowUpdates() setDirty(true); } /** - * SLOT function called when on of the widgets contents added to the framework changes + * SLOT function called when one of the widgets contents added to the framework changes */ void ConfigTaskWidget::widgetsContentsChanged() { @@ -412,7 +412,8 @@ void ConfigTaskWidget::widgetsContentsChanged() } } } - smartsave->resetIcons(); + if(smartsave) + smartsave->resetIcons(); setDirty(true); } /** @@ -1144,6 +1145,30 @@ void ConfigTaskWidget::loadWidgetLimits(QWidget * widget,UAVObjectField * field, } } +void ConfigTaskWidget::disbleMouseWheelEvents() +{ + //Disable mouse wheel events + foreach( QSpinBox * sp, findChildren() ) { + sp->installEventFilter( this ); + } + foreach( QDoubleSpinBox * sp, findChildren() ) { + sp->installEventFilter( this ); + } + foreach( QSlider * sp, findChildren() ) { + sp->installEventFilter( this ); + } +} + +bool ConfigTaskWidget::eventFilter( QObject * obj, QEvent * evt ) { + //Filter all wheel events, and ignore them + if ( evt->type() == QEvent::Wheel && + (qobject_cast( obj ) || qobject_cast( obj ) )) + { + evt->ignore(); + return true; + } + return QWidget::eventFilter( obj, evt ); +} /** @} @} diff --git a/ground/openpilotgcs/src/plugins/uavobjectwidgetutils/configtaskwidget.h b/ground/openpilotgcs/src/plugins/uavobjectwidgetutils/configtaskwidget.h index deb297e32..a0e1feb7b 100644 --- a/ground/openpilotgcs/src/plugins/uavobjectwidgetutils/configtaskwidget.h +++ b/ground/openpilotgcs/src/plugins/uavobjectwidgetutils/configtaskwidget.h @@ -46,6 +46,7 @@ #include "uavobjectwidgetutils_global.h" #include #include +#include class UAVOBJECTWIDGETUTILS_EXPORT ConfigTaskWidget: public QWidget { @@ -85,6 +86,9 @@ public: ConfigTaskWidget(QWidget *parent = 0); ~ConfigTaskWidget(); + void disbleMouseWheelEvents(); + bool eventFilter( QObject * obj, QEvent * evt ); + void saveObjectToSD(UAVObject *obj); UAVObjectManager* getObjectManager(); static double listMean(QList list); diff --git a/ground/openpilotgcs/src/plugins/uavsettingsimportexport/importsummary.cpp b/ground/openpilotgcs/src/plugins/uavsettingsimportexport/importsummary.cpp index a7bf6f367..eb45634ff 100644 --- a/ground/openpilotgcs/src/plugins/uavsettingsimportexport/importsummary.cpp +++ b/ground/openpilotgcs/src/plugins/uavsettingsimportexport/importsummary.cpp @@ -71,18 +71,23 @@ void ImportSummaryDialog::addLine(QString uavObjectName, QString text, bool stat { ui->importSummaryList->setRowCount(ui->importSummaryList->rowCount()+1); int row = ui->importSummaryList->rowCount()-1; - ui->progressBar->setMaximum(row); ui->importSummaryList->setCellWidget(row,0,new QCheckBox(ui->importSummaryList)); QTableWidgetItem *objName = new QTableWidgetItem(uavObjectName); ui->importSummaryList->setItem(row, 1, objName); QCheckBox *box = dynamic_cast(ui->importSummaryList->cellWidget(row,0)); ui->importSummaryList->setItem(row,2,new QTableWidgetItem(text)); + + //Disable editability and selectability in table elements + ui->importSummaryList->item(row,1)->setFlags(!Qt::ItemIsEditable); + ui->importSummaryList->item(row,2)->setFlags(!Qt::ItemIsEditable); + if (status) { box->setChecked(true); } else { box->setChecked(false); box->setEnabled(false); } + this->repaint(); this->showEvent(NULL); } @@ -92,11 +97,22 @@ void ImportSummaryDialog::addLine(QString uavObjectName, QString text, bool stat */ void ImportSummaryDialog::doTheSaving() { + int itemCount=0; ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); UAVObjectManager *objManager = pm->getObject(); UAVObjectUtilManager *utilManager = pm->getObject(); connect(utilManager, SIGNAL(saveCompleted(int,bool)), this, SLOT(updateSaveCompletion())); + for(int i=0; i < ui->importSummaryList->rowCount(); i++) { + QCheckBox *box = dynamic_cast(ui->importSummaryList->cellWidget(i,0)); + if (box->isChecked()) { + ++itemCount; + } + } + if(itemCount==0) + return; + ui->progressBar->setMaximum(itemCount+1); + ui->progressBar->setValue(1); for(int i=0; i < ui->importSummaryList->rowCount(); i++) { QString uavObjectName = ui->importSummaryList->item(i,1)->text(); QCheckBox *box = dynamic_cast(ui->importSummaryList->cellWidget(i,0)); @@ -106,12 +122,21 @@ void ImportSummaryDialog::doTheSaving() this->repaint(); } } + + ui->saveToFlash->setEnabled(false); + ui->closeButton->setEnabled(false); + } void ImportSummaryDialog::updateSaveCompletion() { ui->progressBar->setValue(ui->progressBar->value()+1); + if(ui->progressBar->value()==ui->progressBar->maximum()) + { + ui->saveToFlash->setEnabled(true); + ui->closeButton->setEnabled(true); + } } void ImportSummaryDialog::changeEvent(QEvent *e) diff --git a/ground/openpilotgcs/src/plugins/uavsettingsimportexport/uavsettingsimportexportfactory.cpp b/ground/openpilotgcs/src/plugins/uavsettingsimportexport/uavsettingsimportexportfactory.cpp index 3552ad752..9c0088efa 100644 --- a/ground/openpilotgcs/src/plugins/uavsettingsimportexport/uavsettingsimportexportfactory.cpp +++ b/ground/openpilotgcs/src/plugins/uavsettingsimportexport/uavsettingsimportexportfactory.cpp @@ -79,14 +79,14 @@ UAVSettingsImportExportFactory::UAVSettingsImportExportFactory(QObject *parent): ac->addAction(cmd, Core::Constants::G_FILE_SAVE); connect(cmd->action(), SIGNAL(triggered(bool)), this, SLOT(importUAVSettings())); + ac = am->actionContainer(Core::Constants::M_HELP); cmd = am->registerAction(new QAction(this), "UAVSettingsImportExportPlugin.UAVDataExport", QList() << Core::Constants::C_GLOBAL_ID); cmd->action()->setText(tr("Export UAV Data...")); - ac->addAction(cmd, Core::Constants::G_FILE_SAVE); + ac->addAction(cmd, Core::Constants::G_HELP_HELP); connect(cmd->action(), SIGNAL(triggered(bool)), this, SLOT(exportUAVData())); - } // Slot called by the menu manager on user action diff --git a/ground/openpilotgcs/src/plugins/uploader/devicewidget.cpp b/ground/openpilotgcs/src/plugins/uploader/devicewidget.cpp index 38bf2aefc..39c7618c5 100644 --- a/ground/openpilotgcs/src/plugins/uploader/devicewidget.cpp +++ b/ground/openpilotgcs/src/plugins/uploader/devicewidget.cpp @@ -516,22 +516,47 @@ void deviceWidget::setProgress(int percent) } /** - -Opens an open file dialog. - -*/ + *Opens an open file dialog. + */ QString deviceWidget::setOpenFileName() { QFileDialog::Options options; QString selectedFilter; + QString fwDirectoryStr; + QDir fwDirectory; + + //Format filename for file chooser +#ifdef Q_OS_WIN + fwDirectoryStr=QCoreApplication::applicationDirPath(); + fwDirectory=QDir(fwDirectoryStr); + fwDirectory.cdUp(); + fwDirectory.cd("firmware"); + fwDirectoryStr=fwDirectory.absolutePath(); +#elif defined Q_OS_LINUX + fwDirectoryStr=QCoreApplication::applicationDirPath(); + fwDirectory=QDir(fwDirectoryStr); + fwDirectory.cd("../../.."); + fwDirectoryStr=fwDirectory.absolutePath(); + fwDirectoryStr=fwDirectoryStr+"/fw_"+myDevice->lblBrdName->text().toLower()+"/fw_"+myDevice->lblBrdName->text().toLower()+".opfw"; +#elif defined Q_OS_MAC + fwDirectoryStr=QCoreApplication::applicationDirPath(); + fwDirectory=QDir(fwDirectoryStr); + fwDirectory.cd("../../../../../.."); + fwDirectoryStr=fwDirectory.absolutePath(); + fwDirectoryStr=fwDirectoryStr+"/fw_"+myDevice->lblBrdName->text().toLower()+"/fw_"+myDevice->lblBrdName->text().toLower()+".opfw"; +#endif QString fileName = QFileDialog::getOpenFileName(this, tr("Select firmware file"), - "", + fwDirectoryStr, tr("Firmware Files (*.opfw *.bin)"), &selectedFilter, options); return fileName; } + +/** + *Set the save file name + */ QString deviceWidget::setSaveFileName() { QFileDialog::Options options; diff --git a/ground/openpilotgcs/src/plugins/uploader/devicewidget.h b/ground/openpilotgcs/src/plugins/uploader/devicewidget.h index 3530c3d6a..cf011f066 100644 --- a/ground/openpilotgcs/src/plugins/uploader/devicewidget.h +++ b/ground/openpilotgcs/src/plugins/uploader/devicewidget.h @@ -40,6 +40,8 @@ #include #include "uavobjectutilmanager.h" #include "devicedescriptorstruct.h" +#include +#include using namespace OP_DFU; class deviceWidget : public QWidget {