9 changed files with 283 additions and 50 deletions
@ -0,0 +1,151 @@
@@ -0,0 +1,151 @@
|
||||
/*===================================================================== |
||||
|
||||
QGroundControl Open Source Ground Control Station |
||||
|
||||
(c) 2009 - 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org> |
||||
|
||||
This file is part of the QGROUNDCONTROL project |
||||
|
||||
QGROUNDCONTROL is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 3 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
QGROUNDCONTROL is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>. |
||||
|
||||
======================================================================*/ |
||||
|
||||
import QtQuick 2.5 |
||||
import QtQuick.Controls 1.2 |
||||
import QtQuick.Dialogs 1.2 |
||||
|
||||
import QGroundControl 1.0 |
||||
import QGroundControl.Palette 1.0 |
||||
import QGroundControl.Controls 1.0 |
||||
import QGroundControl.FactControls 1.0 |
||||
import QGroundControl.ScreenTools 1.0 |
||||
import QGroundControl.Controllers 1.0 |
||||
|
||||
FactPanel { |
||||
id: _root |
||||
height: monitorColumn.height |
||||
|
||||
QGCPalette { id: qgcPal; colorGroupEnabled: panel.enabled } |
||||
|
||||
RCChannelMonitorController { |
||||
id: controller |
||||
factPanel: _root |
||||
} |
||||
|
||||
// Live channel monitor control component |
||||
Component { |
||||
id: channelMonitorDisplayComponent |
||||
|
||||
Item { |
||||
property int rcValue: 1500 |
||||
|
||||
|
||||
property int __lastRcValue: 1500 |
||||
readonly property int __rcValueMaxJitter: 2 |
||||
property color __barColor: qgcPal.windowShade |
||||
|
||||
// Bar |
||||
Rectangle { |
||||
id: bar |
||||
anchors.verticalCenter: parent.verticalCenter |
||||
width: parent.width |
||||
height: parent.height / 2 |
||||
color: __barColor |
||||
} |
||||
|
||||
// Center point |
||||
Rectangle { |
||||
anchors.horizontalCenter: parent.horizontalCenter |
||||
width: ScreenTools.defaultTextWidth / 2 |
||||
height: parent.height |
||||
color: qgcPal.window |
||||
} |
||||
|
||||
// Indicator |
||||
Rectangle { |
||||
anchors.verticalCenter: parent.verticalCenter |
||||
width: parent.height * 0.75 |
||||
height: width |
||||
x: ((Math.abs((rcValue - 1000) - (reversed ? 1000 : 0)) / 1000) * parent.width) - (width / 2) |
||||
radius: width / 2 |
||||
color: qgcPal.text |
||||
visible: mapped |
||||
} |
||||
|
||||
QGCLabel { |
||||
anchors.fill: parent |
||||
horizontalAlignment: Text.AlignHCenter |
||||
verticalAlignment: Text.AlignVCenter |
||||
text: "Not Mapped" |
||||
visible: !mapped |
||||
} |
||||
|
||||
ColorAnimation { |
||||
id: barAnimation |
||||
target: bar |
||||
property: "color" |
||||
from: "yellow" |
||||
to: __barColor |
||||
duration: 1500 |
||||
} |
||||
} |
||||
} // Component - channelMonitorDisplayComponent |
||||
|
||||
Column { |
||||
id: monitorColumn |
||||
width: parent.width |
||||
spacing: 5 |
||||
|
||||
QGCLabel { text: "Channel Monitor" } |
||||
|
||||
Connections { |
||||
target: controller |
||||
|
||||
onChannelRCValueChanged: { |
||||
if (channelMonitorRepeater.itemAt(channel)) { |
||||
channelMonitorRepeater.itemAt(channel).loader.item.rcValue = rcValue |
||||
} |
||||
} |
||||
} |
||||
|
||||
Repeater { |
||||
id: channelMonitorRepeater |
||||
model: controller.channelCount |
||||
width: parent.width |
||||
|
||||
Row { |
||||
spacing: 5 |
||||
|
||||
// Need this to get to loader from Connections above |
||||
property Item loader: theLoader |
||||
|
||||
QGCLabel { |
||||
id: channelLabel |
||||
text: modelData + 1 |
||||
} |
||||
|
||||
Loader { |
||||
id: theLoader |
||||
anchors.verticalCenter: channelLabel.verticalCenter |
||||
height: qgcView.defaultTextHeight |
||||
width: 200 |
||||
sourceComponent: channelMonitorDisplayComponent |
||||
|
||||
property bool mapped: true |
||||
readonly property bool reversed: false |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,53 @@
@@ -0,0 +1,53 @@
|
||||
/*=====================================================================
|
||||
|
||||
QGroundControl Open Source Ground Control Station |
||||
|
||||
(c) 2009, 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
|
||||
|
||||
This file is part of the QGROUNDCONTROL project |
||||
|
||||
QGROUNDCONTROL is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 3 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
QGROUNDCONTROL is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
======================================================================*/ |
||||
|
||||
#include "RCChannelMonitorController.h" |
||||
|
||||
RCChannelMonitorController::RCChannelMonitorController(void) |
||||
: _chanCount(0) |
||||
{ |
||||
connect(_vehicle, &Vehicle::rcChannelsChanged, this, &RCChannelMonitorController::_rcChannelsChanged); |
||||
} |
||||
|
||||
void RCChannelMonitorController::_rcChannelsChanged(int channelCount, int pwmValues[Vehicle::cMaxRcChannels]) |
||||
{ |
||||
int maxChannel = std::min(channelCount, _chanMax()); |
||||
|
||||
for (int channel=0; channel<maxChannel; channel++) { |
||||
int channelValue = pwmValues[channel]; |
||||
|
||||
if (_chanCount != channelCount) { |
||||
_chanCount = channelCount; |
||||
emit channelCountChanged(_chanCount); |
||||
} |
||||
|
||||
if (channelValue != -1) { |
||||
emit channelRCValueChanged(channel, channelValue); |
||||
} |
||||
} |
||||
} |
||||
|
||||
int RCChannelMonitorController::_chanMax(void) const |
||||
{ |
||||
return _vehicle->firmwareType() == MAV_AUTOPILOT_PX4 ? _chanMaxPX4 : _chanMaxAPM; |
||||
} |
@ -0,0 +1,61 @@
@@ -0,0 +1,61 @@
|
||||
/*=====================================================================
|
||||
|
||||
QGroundControl Open Source Ground Control Station |
||||
|
||||
(c) 2009, 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
|
||||
|
||||
This file is part of the QGROUNDCONTROL project |
||||
|
||||
QGROUNDCONTROL is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 3 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
QGROUNDCONTROL is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
======================================================================*/ |
||||
|
||||
#ifndef RCChannelMonitorController_H |
||||
#define RCChannelMonitorController_H |
||||
|
||||
#include <QTimer> |
||||
|
||||
#include "FactPanelController.h" |
||||
#include "UASInterface.h" |
||||
#include "QGCLoggingCategory.h" |
||||
#include "AutoPilotPlugin.h" |
||||
|
||||
class RCChannelMonitorController : public FactPanelController |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
public: |
||||
RCChannelMonitorController(void); |
||||
|
||||
Q_PROPERTY(int channelCount READ channelCount NOTIFY channelCountChanged) |
||||
|
||||
int channelCount(void) { return _chanCount; } |
||||
|
||||
signals: |
||||
void channelCountChanged(int channelCount); |
||||
void channelRCValueChanged(int channel, int rcValue); |
||||
|
||||
private slots: |
||||
void _rcChannelsChanged(int channelCount, int pwmValues[Vehicle::cMaxRcChannels]); |
||||
|
||||
private: |
||||
int _chanMax(void) const; |
||||
|
||||
int _chanCount; |
||||
|
||||
static const int _chanMaxPX4 = 18; ///< Maximum number of supported rc channels, PX4 Firmware
|
||||
static const int _chanMaxAPM = 14; ///< Maximum number of supported rc channels, APM firmware
|
||||
}; |
||||
|
||||
#endif // RCChannelMonitorController_H
|
Loading…
Reference in new issue