1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-01-29 14:52:12 +01:00

OP-51: GCS Antenna Tracker plugin, My (first) quick tester plugin for antennatracker. Not included into build. Heavily based on gps display plugin.

git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@2176 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
sambas 2010-11-29 16:41:53 +00:00 committed by sambas
parent 74249f8e41
commit bf8b9fd00c
22 changed files with 2149 additions and 0 deletions

View File

@ -0,0 +1,11 @@
<plugin name="AntennaTrack" version="1.0.0" compatVersion="1.0.0">
<vendor>The OpenPilot Project</vendor>
<copyright>(C) 2010 SK</copyright>
<license>The GNU Public License (GPL) Version 3</license>
<description>Plugin for antenna tracker</description>
<url>http://www.openpilot.org</url>
<dependencyList>
<dependency name="Core" version="1.0.0"/>
<dependency name="UAVObjects" version="1.0.0"/>
</dependencyList>
</plugin>

View File

@ -0,0 +1,25 @@
TEMPLATE = lib
TARGET = AntennaTrack
include(../../openpilotgcsplugin.pri)
include(../../plugins/coreplugin/coreplugin.pri)
include(antennatrack_dependencies.pri)
include(../../libs/qwt/qwt.pri)
HEADERS += antennatrackplugin.h
HEADERS += gpsparser.h
HEADERS += telemetryparser.h
HEADERS += antennatrackgadget.h
HEADERS += antennatrackwidget.h
HEADERS += antennatrackgadgetfactory.h
HEADERS += antennatrackgadgetconfiguration.h
HEADERS += antennatrackgadgetoptionspage.h
SOURCES += antennatrackplugin.cpp
SOURCES += gpsparser.cpp
SOURCES += telemetryparser.cpp
SOURCES += antennatrackgadget.cpp
SOURCES += antennatrackgadgetfactory.cpp
SOURCES += antennatrackwidget.cpp
SOURCES += antennatrackgadgetconfiguration.cpp
SOURCES += antennatrackgadgetoptionspage.cpp
OTHER_FILES += AntennaTrack.pluginspec
FORMS += antennatrackgadgetoptionspage.ui
FORMS += antennatrackwidget.ui

View File

@ -0,0 +1,3 @@
include(../../plugins/uavobjects/uavobjects.pri)
#include(../../plugins/coreplugin/coreplugin.pri)
#include(../../libs/utils/utils.pri)

View File

@ -0,0 +1,155 @@
/**
******************************************************************************
*
* @file AntennaTracgadget.cpp
* @author Sami Korhonen & the OpenPilot team Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup AntennaTrackGadgetPlugin Antenna Track Gadget Plugin
* @{
* @brief A gadget that communicates with antenna tracker and enables basic configuration
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "antennatrackgadget.h"
#include "antennatrackwidget.h"
#include "antennatrackgadgetconfiguration.h"
AntennaTrackGadget::AntennaTrackGadget(QString classId, AntennaTrackWidget *widget, QWidget *parent) :
IUAVGadget(classId, parent),
m_widget(widget),
connected(FALSE)
{
connect(m_widget->connectButton, SIGNAL(clicked(bool)), this,SLOT(onConnect()));
connect(m_widget->disconnectButton, SIGNAL(clicked(bool)), this,SLOT(onDisconnect()));
}
AntennaTrackGadget::~AntennaTrackGadget()
{
}
/*
This is called when a configuration is loaded, and updates the plugin's settings.
Careful: the plugin is already drawn before the loadConfiguration method is called the
first time, so you have to be careful not to assume all the plugin values are initialized
the first time you use them
*/
void AntennaTrackGadget::loadConfiguration(IUAVGadgetConfiguration* config)
{
// Delete the (old)port, this also closes it.
if(port) {
delete port;
}
// Delete the (old)parser, this also disconnects all signals.
if(parser) {
delete parser;
}
AntennaTrackGadgetConfiguration *AntennaTrackConfig = qobject_cast< AntennaTrackGadgetConfiguration*>(config);
PortSettings portsettings;
portsettings.BaudRate=AntennaTrackConfig->speed();
portsettings.DataBits=AntennaTrackConfig->dataBits();
portsettings.FlowControl=AntennaTrackConfig->flow();
portsettings.Parity=AntennaTrackConfig->parity();
portsettings.StopBits=AntennaTrackConfig->stopBits();
portsettings.Timeout_Millisec=AntennaTrackConfig->timeOut();
// In case we find no port, buttons disabled
m_widget->connectButton->setEnabled(false);
m_widget->disconnectButton->setEnabled(false);
QList<QextPortInfo> ports = QextSerialEnumerator::getPorts();
foreach( QextPortInfo nport, ports ) {
if(nport.friendName == AntennaTrackConfig->port())
{
qDebug() << "Using Serial port";
//parser = new NMEAParser();
#ifdef Q_OS_WIN
port=new QextSerialPort(nport.portName,portsettings,QextSerialPort::EventDriven);
#else
port=new QextSerialPort(nport.physName,portsettings,QextSerialPort::EventDriven);
#endif
m_widget->setPort(port);
m_widget->connectButton->setEnabled(true);
m_widget->disconnectButton->setEnabled(false);
m_widget->connectButton->setHidden(false);
m_widget->disconnectButton->setHidden(false);
connect(port, SIGNAL(readyRead()), this, SLOT(onDataAvailable()));
}
}
m_widget->dataStreamGroupBox->setHidden(false);
qDebug() << "Using Telemetry parser";
parser = new TelemetryParser();
connect(parser, SIGNAL(position(double,double,double)), m_widget,SLOT(setPosition(double,double,double)));
connect(parser, SIGNAL(home(double,double,double)), m_widget,SLOT(setHomePosition(double,double,double)));
connect(parser, SIGNAL(packet(QString)), m_widget, SLOT(dumpPacket(QString)));
}
void AntennaTrackGadget::onConnect() {
m_widget->textBrowser->append(QString("Connecting to Tracker ...\n"));
// TODO: Somehow mark that we're running, and disable connect button while so?
if (port) {
qDebug() << "Opening: " << port->portName() << ".";
bool isOpen = port->open(QIODevice::ReadWrite);
qDebug() << "Open: " << isOpen;
if(isOpen) {
m_widget->connectButton->setEnabled(false);
m_widget->disconnectButton->setEnabled(true);
}
} else {
qDebug() << "Port undefined or invalid.";
}
}
void AntennaTrackGadget::onDisconnect() {
if (port) {
qDebug() << "Closing: " << port->portName() << ".";
port->close();
m_widget->connectButton->setEnabled(true);
m_widget->disconnectButton->setEnabled(false);
} else {
qDebug() << "Port undefined or invalid.";
}
}
void AntennaTrackGadget::onDataAvailable() {
int avail = port->bytesAvailable();
if( avail > 0 ) {
QByteArray serialData;
serialData.resize(avail);
int bytesRead = port->read(serialData.data(), serialData.size());
if( bytesRead > 0 ) {
processNewSerialData(serialData);
}
}
}
void AntennaTrackGadget::processNewSerialData(QByteArray serialData) {
int dataLength = serialData.size();
const char* data = serialData.constData();
m_widget->textBrowser->append(QString(serialData));
for(int pos = 0; pos < dataLength; pos++) {
//parser->processInputStream(data[pos]);
}
}

View File

@ -0,0 +1,72 @@
/**
******************************************************************************
*
* @file AntennaTrackgadget.h
* @author Sami Korhonen & the OpenPilot team Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup AntennaTrackGadgetPlugin Antenna Track Gadget Plugin
* @{
* @brief A gadget that communicates with antenna tracker and enables basic configuration
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef ANTENNATRACKGADGET_H_
#define ANTENNATRACKGADGET_H_
#include <qextserialport/src/qextserialport.h>
#include <qextserialport/src/qextserialenumerator.h>
#include <coreplugin/iuavgadget.h>
#include "antennatrackwidget.h"
#include "telemetryparser.h"
class IUAVGadget;
class QWidget;
class QString;
class AntennaTrackWidget;
using namespace Core;
class AntennaTrackGadget : public Core::IUAVGadget
{
Q_OBJECT
public:
AntennaTrackGadget(QString classId, AntennaTrackWidget *widget, QWidget *parent = 0);
~AntennaTrackGadget();
QWidget *widget() { return m_widget; }
// void setMode(QString mode); // Either UAVTalk or serial port
void loadConfiguration(IUAVGadgetConfiguration* config);
public slots:
void onConnect();
void onDisconnect();
private slots:
void onDataAvailable();
private:
QPointer<AntennaTrackWidget> m_widget;
QPointer<QextSerialPort> port;
QPointer<GPSParser> parser;
bool connected;
void processNewSerialData(QByteArray serialData);
};
#endif // ANTENNATRACKGADGET_H_

View File

@ -0,0 +1,109 @@
/**
******************************************************************************
*
* @file AntennaTracgadgetconfiguration.cpp
* @author Sami Korhonen & the OpenPilot team Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup AntennaTrackGadgetPlugin Antenna Track Gadget Plugin
* @{
* @brief A gadget that communicates with antenna tracker and enables basic configuration
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "antennatrackgadgetconfiguration.h"
#include <qextserialport/src/qextserialport.h>
/**
* Loads a saved configuration or defaults if non exist.
*
*/
AntennaTrackGadgetConfiguration::AntennaTrackGadgetConfiguration(QString classId, QSettings* qSettings, QObject *parent) :
IUAVGadgetConfiguration(classId, parent),
m_connectionMode("Serial"),
m_defaultPort("Unknown"),
m_defaultSpeed(BAUD4800),
m_defaultDataBits(DATA_8),
m_defaultFlow(FLOW_OFF),
m_defaultParity(PAR_NONE),
m_defaultStopBits(STOP_1),
m_defaultTimeOut(5000)
{
//if a saved configuration exists load it
if(qSettings != 0) {
BaudRateType speed;
DataBitsType databits;
FlowType flow;
ParityType parity;
StopBitsType stopbits;
int ispeed = qSettings->value("defaultSpeed").toInt();
int idatabits = qSettings->value("defaultDataBits").toInt();
int iflow = qSettings->value("defaultFlow").toInt();
int iparity = qSettings->value("defaultParity").toInt();
int istopbits = qSettings->value("defaultStopBits").toInt();
QString port = qSettings->value("defaultPort").toString();
QString conMode = qSettings->value("connectionMode").toString();
databits = (DataBitsType) idatabits;
flow = (FlowType)iflow;
parity = (ParityType)iparity;
stopbits = (StopBitsType)istopbits;
speed = (BaudRateType)ispeed;
m_defaultPort = port;
m_defaultSpeed = speed;
m_defaultDataBits = databits;
m_defaultFlow = flow;
m_defaultParity = parity;
m_defaultStopBits = stopbits;
m_connectionMode = conMode;
}
}
/**
* Clones a configuration.
*
*/
IUAVGadgetConfiguration *AntennaTrackGadgetConfiguration::clone()
{
AntennaTrackGadgetConfiguration *m = new AntennaTrackGadgetConfiguration(this->classId());
m->m_defaultSpeed = m_defaultSpeed;
m->m_defaultDataBits = m_defaultDataBits;
m->m_defaultFlow = m_defaultFlow;
m->m_defaultParity = m_defaultParity;
m->m_defaultStopBits = m_defaultStopBits;
m->m_defaultPort = m_defaultPort;
m->m_connectionMode = m_connectionMode;
return m;
}
/**
* Saves a configuration.
*
*/
void AntennaTrackGadgetConfiguration::saveConfig(QSettings* settings) const {
settings->setValue("defaultSpeed", m_defaultSpeed);
settings->setValue("defaultDataBits", m_defaultDataBits);
settings->setValue("defaultFlow", m_defaultFlow);
settings->setValue("defaultParity", m_defaultParity);
settings->setValue("defaultStopBits", m_defaultStopBits);
settings->setValue("defaultPort", m_defaultPort);
settings->setValue("connectionMode", m_connectionMode);
}

View File

@ -0,0 +1,78 @@
/**
******************************************************************************
*
* @file AntennaTracgadgetconfiguration.h
* @author Sami Korhonen & the OpenPilot team Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup AntennaTrackGadgetPlugin Antenna Track Gadget Plugin
* @{
* @brief A gadget that communicates with antenna tracker and enables basic configuration
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef ANTENNATRACKGADGETCONFIGURATION_H
#define ANTENNATRACKGADGETCONFIGURATION_H
#include <coreplugin/iuavgadgetconfiguration.h>
#include <qextserialport/src/qextserialport.h>
using namespace Core;
class AntennaTrackGadgetConfiguration : public IUAVGadgetConfiguration
{
Q_OBJECT
public:
explicit AntennaTrackGadgetConfiguration(QString classId, QSettings* qSettings = 0, QObject *parent = 0);
void setConnectionMode(QString mode) { m_connectionMode = mode; }
QString connectionMode() { return m_connectionMode; }
//set port configuration functions
void setSpeed(BaudRateType speed) {m_defaultSpeed=speed;}
void setDataBits(DataBitsType databits) {m_defaultDataBits=databits;}
void setFlow(FlowType flow) {m_defaultFlow=flow;}
void setParity(ParityType parity) {m_defaultParity=parity;}
void setStopBits(StopBitsType stopbits) {m_defaultStopBits=stopbits;}
void setPort(QString port){m_defaultPort=port;}
void setTimeOut(long timeout){m_defaultTimeOut=timeout;}
//get port configuration functions
QString port(){return m_defaultPort;}
BaudRateType speed() {return m_defaultSpeed;}
FlowType flow() {return m_defaultFlow;}
DataBitsType dataBits() {return m_defaultDataBits;}
StopBitsType stopBits() {return m_defaultStopBits;}
ParityType parity() {return m_defaultParity;}
long timeOut(){return m_defaultTimeOut;}
void saveConfig(QSettings* settings) const;
IUAVGadgetConfiguration *clone();
private:
QString m_connectionMode;
QString m_defaultPort;
BaudRateType m_defaultSpeed;
DataBitsType m_defaultDataBits;
FlowType m_defaultFlow;
ParityType m_defaultParity;
StopBitsType m_defaultStopBits;
long m_defaultTimeOut;
};
#endif // ANTENNATRACKGADGETCONFIGURATION_H

View File

@ -0,0 +1,60 @@
/**
******************************************************************************
*
* @file AntennaTracgadgetfactory.cpp
* @author Sami Korhonen & the OpenPilot team Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup AntennaTrackGadgetPlugin Antenna Track Gadget Plugin
* @{
* @brief A gadget that communicates with antenna tracker and enables basic configuration
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "antennatrackgadgetfactory.h"
#include "antennatrackwidget.h"
#include "antennatrackgadget.h"
#include "antennatrackgadgetconfiguration.h"
#include "antennatrackgadgetoptionspage.h"
#include <coreplugin/iuavgadget.h>
AntennaTrackGadgetFactory::AntennaTrackGadgetFactory(QObject *parent) :
IUAVGadgetFactory(QString("AntennaTrackGadget"),
tr("Antenna Track Gadget"),
parent)
{
}
AntennaTrackGadgetFactory::~AntennaTrackGadgetFactory()
{
}
Core::IUAVGadget* AntennaTrackGadgetFactory::createGadget(QWidget *parent)
{
AntennaTrackWidget* gadgetWidget = new AntennaTrackWidget(parent);
return new AntennaTrackGadget(QString("AntennaTrackGadget"), gadgetWidget, parent);
}
IUAVGadgetConfiguration *AntennaTrackGadgetFactory::createConfiguration(QSettings* qSettings)
{
return new AntennaTrackGadgetConfiguration(QString("AntennaTrackGadget"), qSettings);
}
IOptionsPage *AntennaTrackGadgetFactory::createOptionsPage(IUAVGadgetConfiguration *config)
{
return new AntennaTrackGadgetOptionsPage(qobject_cast<AntennaTrackGadgetConfiguration*>(config));
}

View File

@ -0,0 +1,52 @@
/**
******************************************************************************
*
* @file antennatracgadgetfactory.h
* @author Sami Korhonen & the OpenPilot team Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup AntennaTrackGadgetPlugin Antenna Track Gadget Plugin
* @{
* @brief A gadget that communicates with antenna tracker and enables basic configuration
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef ANTENNATRACKGADGETFACTORY_H_
#define ANTENNATRACKGADGETFACTORY_H_
#include <coreplugin/iuavgadgetfactory.h>
namespace Core {
class IUAVGadget;
class IUAVGadgetFactory;
}
using namespace Core;
class AntennaTrackGadgetFactory : public IUAVGadgetFactory
{
Q_OBJECT
public:
AntennaTrackGadgetFactory(QObject *parent = 0);
~AntennaTrackGadgetFactory();
Core::IUAVGadget *createGadget(QWidget *parent);
IUAVGadgetConfiguration *createConfiguration(QSettings* qSettings);
IOptionsPage *createOptionsPage(IUAVGadgetConfiguration *config);
};
#endif // ANTENNATRACKGADGETFACTORY_H_

View File

@ -0,0 +1,266 @@
/**
******************************************************************************
*
* @file AntennaTracgadgetoptionspage.cpp
* @author Sami Korhonen & the OpenPilot team Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup AntennaTrackGadgetPlugin Antenna Track Gadget Plugin
* @{
* @brief A gadget that communicates with antenna tracker and enables basic configuration
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "antennatrackgadgetoptionspage.h"
#include "antennatrackgadgetconfiguration.h"
#include "ui_antennatrackgadgetoptionspage.h"
#include <QFileDialog>
#include <QtAlgorithms>
#include <QStringList>
AntennaTrackGadgetOptionsPage::AntennaTrackGadgetOptionsPage(AntennaTrackGadgetConfiguration *config, QObject *parent) :
IOptionsPage(parent),
m_config(config)
{
// Taken from the uploader gadget, since we also can use a serial port for this
// Gadget
//the begining of some ugly code
//diferent OS's have diferent serial port capabilities
#ifdef Q_OS_WIN
//load windows port capabilities
BaudRateTypeString
<<"BAUD110"
<<"BAUD300"
<<"BAUD600"
<<"BAUD1200"
<<"BAUD2400"
<<"BAUD4800"
<<"BAUD9600"
<<"BAUD14400"
<<"BAUD19200"
<<"BAUD38400"
<<"BAUD56000"
<<"BAUD57600"
<<"BAUD115200"
<<"BAUD128000"
<<"BAUD256000";
DataBitsTypeString
<<"DATA_5"
<<"DATA_6"
<<"DATA_7"
<<"DATA_8";
ParityTypeString
<<"PAR_NONE"
<<"PAR_ODD"
<<"PAR_EVEN"
<<"PAR_MARK" //WINDOWS ONLY
<<"PAR_SPACE";
StopBitsTypeString
<<"STOP_1"
<<"STOP_1_5" //WINDOWS ONLY
<<"STOP_2";
#else
//load POSIX port capabilities
BaudRateTypeString
<<"BAUD50" //POSIX ONLY
<<"BAUD75" //POSIX ONLY
<<"BAUD110"
<<"BAUD134" //POSIX ONLY
<<"BAUD150" //POSIX ONLY
<<"BAUD200" //POSIX ONLY
<<"BAUD300"
<<"BAUD600"
<<"BAUD1200"
<<"BAUD1800" //POSIX ONLY
<<"BAUD2400"
<<"BAUD4800"
<<"BAUD9600"
<<"BAUD19200"
<<"BAUD38400"
<<"BAUD57600"
<<"BAUD76800" //POSIX ONLY
<<"BAUD115200";
DataBitsTypeString
<<"DATA_5"
<<"DATA_6"
<<"DATA_7"
<<"DATA_8";
ParityTypeString
<<"PAR_NONE"
<<"PAR_ODD"
<<"PAR_EVEN"
<<"PAR_SPACE";
StopBitsTypeString
<<"STOP_1"
<<"STOP_2";
#endif
//load all OS's capabilities
BaudRateTypeStringALL
<<"BAUD50" //POSIX ONLY
<<"BAUD75" //POSIX ONLY
<<"BAUD110"
<<"BAUD134" //POSIX ONLY
<<"BAUD150" //POSIX ONLY
<<"BAUD200" //POSIX ONLY
<<"BAUD300"
<<"BAUD600"
<<"BAUD1200"
<<"BAUD1800" //POSIX ONLY
<<"BAUD2400"
<<"BAUD4800"
<<"BAUD9600"
<<"BAUD14400"
<<"BAUD19200"
<<"BAUD38400"
<<"BAUD56000"
<<"BAUD57600"
<<"BAUD76800" //POSIX ONLY
<<"BAUD115200"
<<"BAUD128000"
<<"BAUD256000";
DataBitsTypeStringALL
<<"DATA_5"
<<"DATA_6"
<<"DATA_7"
<<"DATA_8";
ParityTypeStringALL
<<"PAR_NONE"
<<"PAR_ODD"
<<"PAR_EVEN"
<<"PAR_MARK" //WINDOWS ONLY
<<"PAR_SPACE";
StopBitsTypeStringALL
<<"STOP_1"
<<"STOP_1_5" //WINDOWS ONLY
<<"STOP_2";
FlowTypeString
<<"FLOW_OFF"
<<"FLOW_HARDWARE"
<<"FLOW_XONXOFF";
}
bool sortPorts(QextPortInfo const& s1,QextPortInfo const& s2)
{
return s1.portName<s2.portName;
}
//creates options page widget (uses the UI file)
QWidget *AntennaTrackGadgetOptionsPage::createPage(QWidget *parent)
{
options_page = new Ui::AntennaTrackGadgetOptionsPage();
QWidget *optionsPageWidget = new QWidget;
options_page->setupUi(optionsPageWidget);
// PORTS
QList<QextPortInfo> ports = QextSerialEnumerator::getPorts();
qSort(ports.begin(), ports.end(),sortPorts);
foreach( QextPortInfo port, ports ) {
qDebug() << "Adding port: " << port.friendName << " (" << port.portName << ")";
options_page->portComboBox->addItem(port.friendName, port.friendName);
}
int portIndex = options_page->portComboBox->findData(m_config->port());
if(portIndex!=-1){
qDebug() << "createPage(): port is " << m_config->port();
options_page->portComboBox->setCurrentIndex(portIndex);
}
// BAUDRATES
options_page->portSpeedComboBox->addItems(BaudRateTypeString);
int portSpeedIndex = options_page->portSpeedComboBox->findText(BaudRateTypeStringALL.at((int)m_config->speed()));
if(portSpeedIndex != -1){
options_page->portSpeedComboBox->setCurrentIndex(portSpeedIndex);
}
// FLOW CONTROL
options_page->flowControlComboBox->addItems(FlowTypeString);
int flowControlIndex = options_page->flowControlComboBox->findText(FlowTypeString.at((int)m_config->flow()));
if(flowControlIndex != -1){
options_page->flowControlComboBox->setCurrentIndex(flowControlIndex);
}
// DATABITS
options_page->dataBitsComboBox->addItems(DataBitsTypeString);
int dataBitsIndex = options_page->dataBitsComboBox->findText(DataBitsTypeStringALL.at((int)m_config->dataBits()));
if(dataBitsIndex != -1){
options_page->dataBitsComboBox->setCurrentIndex(dataBitsIndex);
}
// STOPBITS
options_page->stopBitsComboBox->addItems(StopBitsTypeString);
int stopBitsIndex = options_page->stopBitsComboBox->findText(StopBitsTypeStringALL.at((int)m_config->stopBits()));
if(stopBitsIndex != -1){
options_page->stopBitsComboBox->setCurrentIndex(stopBitsIndex);
}
// PARITY
options_page->parityComboBox->addItems(ParityTypeString);
int parityIndex = options_page->parityComboBox->findText(ParityTypeStringALL.at((int)m_config->parity()));
if(parityIndex != -1){
options_page->parityComboBox->setCurrentIndex(parityIndex);
}
// TIMEOUT
options_page->timeoutSpinBox->setValue(m_config->timeOut());
QStringList connectionModes;
connectionModes << "Serial";
options_page->connectionMode->addItems(connectionModes);
int conMode = options_page->connectionMode->findText(m_config->connectionMode());
if (conMode != -1)
options_page->connectionMode->setCurrentIndex(conMode);
return optionsPageWidget;
}
/**
* Called when the user presses apply or OK.
*
* Saves the current values
*
*/
void AntennaTrackGadgetOptionsPage::apply()
{
int portIndex = options_page->portComboBox->currentIndex();
m_config->setPort(options_page->portComboBox->itemData(portIndex).toString());
qDebug() << "apply(): port is " << m_config->port();
m_config->setSpeed((BaudRateType)BaudRateTypeStringALL.indexOf(options_page->portSpeedComboBox->currentText()));
m_config->setFlow((FlowType)FlowTypeString.indexOf(options_page->flowControlComboBox->currentText()));
m_config->setDataBits((DataBitsType)DataBitsTypeStringALL.indexOf(options_page->dataBitsComboBox->currentText()));
m_config->setStopBits((StopBitsType)StopBitsTypeStringALL.indexOf(options_page->stopBitsComboBox->currentText()));
m_config->setParity((ParityType)ParityTypeStringALL.indexOf(options_page->parityComboBox->currentText()));
m_config->setTimeOut( options_page->timeoutSpinBox->value());
m_config->setConnectionMode(options_page->connectionMode->currentText());
}
void AntennaTrackGadgetOptionsPage::finish()
{
delete options_page;
}

View File

@ -0,0 +1,76 @@
/**
******************************************************************************
*
* @file antennatrackgadgetoptionspage.h
* @author Sami Korhonen & the OpenPilot team Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup AntennaTrackGadgetPlugin Antenna Track Gadget Plugin
* @{
* @brief A gadget that communicates with antenna tracker and enables basic configuration
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef ANTENNATRACKGADGETOPTIONSPAGE_H
#define ANTENNATRACKGADGETOPTIONSPAGE_H
#include <qextserialport/src/qextserialenumerator.h>
#include "coreplugin/dialogs/ioptionspage.h"
#include "QString"
#include <QStringList>
#include <QDebug>
namespace Core {
class IUAVGadgetConfiguration;
}
class AntennaTrackGadgetConfiguration;
namespace Ui {
class AntennaTrackGadgetOptionsPage;
}
using namespace Core;
class AntennaTrackGadgetOptionsPage : public IOptionsPage
{
Q_OBJECT
public:
explicit AntennaTrackGadgetOptionsPage(AntennaTrackGadgetConfiguration *config, QObject *parent = 0);
QWidget *createPage(QWidget *parent);
void apply();
void finish();
private:
Ui::AntennaTrackGadgetOptionsPage *options_page;
AntennaTrackGadgetConfiguration *m_config;
QStringList BaudRateTypeString;
QStringList BaudRateTypeStringALL;
QStringList DataBitsTypeStringALL;
QStringList ParityTypeStringALL;
QStringList StopBitsTypeStringALL;
QStringList DataBitsTypeString;
QStringList ParityTypeString;
QStringList StopBitsTypeString;
QStringList FlowTypeString;
private slots:
};
#endif // ANTENNATRACKGADGETOPTIONSPAGE_H

View File

@ -0,0 +1,186 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>AntennaTrackGadgetOptionsPage</class>
<widget class="QWidget" name="AntennaTrackGadgetOptionsPage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>587</width>
<height>359</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="margin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QWidget" name="widget" native="true">
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Mode:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="connectionMode"/>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QStackedWidget" name="stackedWidget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="serialPage">
<layout class="QVBoxLayout" name="verticalLayout_2" stretch="0,1">
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="serialLabel">
<property name="text">
<string>Serial Connection</string>
</property>
</widget>
</item>
<item>
<layout class="QFormLayout" name="serialFormLayout">
<item row="0" column="1">
<widget class="QComboBox" name="portComboBox"/>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="portSpeedComboBox"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="dataBitsLabel">
<property name="text">
<string>Data Bits:</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="stopBitsLabel">
<property name="text">
<string>Stop Bits:</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="parityLabel">
<property name="text">
<string>Parity:</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="timeoutLabel">
<property name="text">
<string>Timeout(ms):</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="flowControlComboBox"/>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="dataBitsComboBox"/>
</item>
<item row="4" column="1">
<widget class="QComboBox" name="stopBitsComboBox"/>
</item>
<item row="0" column="0">
<widget class="QLabel" name="portLabel">
<property name="text">
<string>Port:</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="portSpeedLabel">
<property name="text">
<string>Port Speed:</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QComboBox" name="parityComboBox"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="flowControlLabel">
<property name="text">
<string>Flow Control:</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QSpinBox" name="timeoutSpinBox">
<property name="maximum">
<number>100000</number>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>connectionMode</sender>
<signal>currentIndexChanged(int)</signal>
<receiver>stackedWidget</receiver>
<slot>setCurrentIndex(int)</slot>
<hints>
<hint type="sourcelabel">
<x>77</x>
<y>16</y>
</hint>
<hint type="destinationlabel">
<x>293</x>
<y>194</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -0,0 +1,34 @@
#include "antennatrackplugin.h"
#include "antennatrackgadgetfactory.h"
#include <QDebug>
#include <QtPlugin>
#include <QStringList>
#include <extensionsystem/pluginmanager.h>
AntennaTrackPlugin::AntennaTrackPlugin() {
// Do nothing
}
AntennaTrackPlugin::~AntennaTrackPlugin() {
// Do nothing
}
bool AntennaTrackPlugin::initialize(const QStringList& args, QString *errMsg) {
Q_UNUSED(args);
Q_UNUSED(errMsg);
mf = new AntennaTrackGadgetFactory(this);
addAutoReleasedObject(mf);
return true;
}
void AntennaTrackPlugin::extensionsInitialized() {
// Do nothing
}
void AntennaTrackPlugin::shutdown() {
// Do nothing
}
Q_EXPORT_PLUGIN(AntennaTrackPlugin)

View File

@ -0,0 +1,21 @@
#ifndef ANTENNATRACKPLUGIN_H
#define ANTENNATRACKPLUGIN_H
#include <extensionsystem/iplugin.h>
class AntennaTrackGadgetFactory;
class AntennaTrackPlugin : public ExtensionSystem::IPlugin
{
public:
AntennaTrackPlugin();
~AntennaTrackPlugin();
void extensionsInitialized();
bool initialize(const QStringList & arguments, QString * errorString);
void shutdown();
private:
AntennaTrackGadgetFactory *mf;
};
#endif // ANTENNATRACKPLUGIN_H

View File

@ -0,0 +1,206 @@
/**
******************************************************************************
*
* @file Antennatrackwidget.cpp
* @author Sami Korhonen & the OpenPilot team Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup AntennaTrackGadgetPlugin Antenna Track Gadget Plugin
* @{
* @brief A gadget that communicates with antenna tracker and enables basic configuration
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "antennatrackwidget.h"
#include "extensionsystem/pluginmanager.h"
#include "uavobjects/uavobjectmanager.h"
#include <iostream>
#include <QtGui>
#include <QDebug>
/*
* Initialize the widget
*/
AntennaTrackWidget::AntennaTrackWidget(QWidget *parent) : QWidget(parent)
{
setupUi(this);
azimuth_old=0;
elevation_old=0;
}
AntennaTrackWidget::~AntennaTrackWidget()
{
}
void AntennaTrackWidget::setPort(QPointer<QextSerialPort> portx)
{
port=portx;
}
void AntennaTrackWidget::dumpPacket(const QString &packet)
{
textBrowser->append(packet);
if(textBrowser->document()->lineCount() > 200) {
QTextCursor tc = textBrowser->textCursor();
tc.movePosition(QTextCursor::Start);
tc.movePosition(QTextCursor::Down, QTextCursor::KeepAnchor);
tc.movePosition(QTextCursor::StartOfLine, QTextCursor::KeepAnchor);
tc.removeSelectedText();
}
}
void AntennaTrackWidget::setPosition(double lat, double lon, double alt)
{
//lat *= 1E-7;
//lon *= 1E-7;
double deg = floor(fabs(lat));
double min = (fabs(lat)-deg)*60;
QString str1;
str1.sprintf("%.0f%c%.3f' ", deg,0x00b0, min);
if (lat>0)
str1.append("N");
else
str1.append("S");
coord_value->setText(str1);
deg = floor(fabs(lon));
min = (fabs(lon)-deg)*60;
QString str2;
str2.sprintf("%.0f%c%.3f' ", deg,0x00b0, min);
if (lon>0)
str2.append("E");
else
str2.append("W");
coord_value_2->setText(str2);
QString str3;
str3.sprintf("%.2f m", alt);
coord_value_3->setText(str3);
TrackData.Latitude=lat;
TrackData.Longitude=lon;
TrackData.Altitude=alt;
calcAntennaPosition();
}
void AntennaTrackWidget::setHomePosition(double lat, double lon, double alt)
{
//lat *= 1E-7;
//lon *= 1E-7;
double deg = floor(fabs(lat));
double min = (fabs(lat)-deg)*60;
QString str1;
str1.sprintf("%.0f%c%.3f' ", deg,0x00b0, min);
if (lat>0)
str1.append("N");
else
str1.append("S");
speed_value->setText(str1);
deg = floor(fabs(lon));
min = (fabs(lon)-deg)*60;
QString str2;
str2.sprintf("%.0f%c%.3f' ", deg,0x00b0, min);
if (lon>0)
str2.append("E");
else
str2.append("W");
bear_label->setText(str2);
QString str3;
str3.sprintf("%.2f m", alt);
bear_value->setText(str3);
TrackData.HomeLatitude=lat;
TrackData.HomeLongitude=lon;
TrackData.HomeAltitude=alt;
calcAntennaPosition();
}
void AntennaTrackWidget::calcAntennaPosition(void)
{
/** http://www.movable-type.co.uk/scripts/latlong.html **/
double lat1, lat2, lon1, lon2, a, c, d, x, y, brng;
double azimuth, elevation;
double gcsAlt=TrackData.HomeAltitude; // Home MSL altitude
double uavAlt=TrackData.Altitude; // UAV MSL altitude
double dAlt=uavAlt-gcsAlt; // Altitude difference
// Convert to radians
lat1 = TrackData.HomeLatitude*(M_PI/180); // Home lat
lon1 = TrackData.HomeLongitude*(M_PI/180); // Home lon
lat2 = TrackData.Latitude*(M_PI/180); // UAV lat
lon2 = TrackData.Longitude*(M_PI/180); // UAV lon
// Bearing
/**
var y = Math.sin(dLon) * Math.cos(lat2);
var x = Math.cos(lat1)*Math.sin(lat2) -
Math.sin(lat1)*Math.cos(lat2)*Math.cos(dLon);
var brng = Math.atan2(y, x).toDeg();
**/
y = sin(lon2-lon1) * cos(lat2);
x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(lon2-lon1);
brng = atan2((sin(lon2-lon1)*cos(lat2)),(cos(lat1)*sin(lat2)-sin(lat1)*cos(lat2)*cos(lon2-lon1)))*(180/M_PI);
if(brng<0)
brng+=360;
// bearing to stepper
azimuth = brng;
// Haversine formula for distance
/**
var R = 6371; // km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).toRad();
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) *
Math.sin(dLon/2) * Math.sin(dLon/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
**/
a = sin((lat2-lat1)/2) * sin((lat2-lat1)/2) +
cos(lat1) * cos(lat2) *
sin((lon2-lon1)/2) * sin((lon2-lon1)/2);
c = 2 * atan2(sqrt(a), sqrt(1-a));
d = 6371 * 1000 * c;
// Elevation v depends servo direction
if(d!=0)
elevation = 90-(atan(dAlt/d)*(180/M_PI));
else
elevation = 0;
//! TODO: sanity check
QString str3;
str3.sprintf("%.0f deg", azimuth);
azimuth_value->setText(str3);
str3.sprintf("%.0f deg", elevation);
elevation_value->setText(str3);
//servo value 2000-4000
int servo = (int)(2000.0/180*elevation+2000);
int stepper = (int)(400.0/360*(azimuth-azimuth_old));
// send azimuth and elevation to tracker hardware
str3.sprintf("move %d 2000 2000 2000 %d\r", stepper,servo);
if(port->isOpen())
{
if(azimuth_old!=azimuth || elevation!=elevation_old)
port->write(str3.toAscii());
azimuth_old = azimuth;
elevation_old = elevation;
}
}

View File

@ -0,0 +1,75 @@
/**
******************************************************************************
*
* @file antennatrackwidget.h
* @author Sami Korhonen & the OpenPilot team Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup AntennaTrackGadgetPlugin Antenna Track Gadget Plugin
* @{
* @brief A gadget that communicates with antenna tracker and enables basic configuration
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef ANTENNATRACKWIDGET_H_
#define ANTENNATRACKWIDGET_H_
#include "ui_antennatrackwidget.h"
#include "antennatrackgadgetconfiguration.h"
#include "uavobjects/uavobject.h"
#include <QGraphicsView>
#include <QtSvg/QSvgRenderer>
#include <QtSvg/QGraphicsSvgItem>
#include <qextserialport/src/qextserialport.h>
#include <QPointer>
class Ui_AntennaTrackWidget;
typedef struct struct_TrackData
{
double Latitude;
double Longitude;
double Altitude;
double HomeLatitude;
double HomeLongitude;
double HomeAltitude;
}TrackData_t;
class AntennaTrackWidget : public QWidget, public Ui_AntennaTrackWidget
{
Q_OBJECT
public:
AntennaTrackWidget(QWidget *parent = 0);
~AntennaTrackWidget();
TrackData_t TrackData;
void setPort(QPointer<QextSerialPort> portx);
private slots:
void setPosition(double, double, double);
void setHomePosition(double, double, double);
void dumpPacket(const QString &packet);
private:
void calcAntennaPosition(void);
QGraphicsSvgItem * marker;
QPointer<QextSerialPort> port;
double azimuth_old;
double elevation_old;
};
#endif /* ANTENNATRACKWIDGET_H_ */

View File

@ -0,0 +1,479 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>AntennaTrackWidget</class>
<widget class="QWidget" name="AntennaTrackWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>560</width>
<height>376</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="verticalLayoutTop">
<property name="spacing">
<number>0</number>
</property>
<property name="margin">
<number>6</number>
</property>
<item>
<widget class="QSplitter" name="splitter">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="childrenCollapsible">
<bool>true</bool>
</property>
<widget class="QWidget" name="layoutWidget">
<layout class="QGridLayout" name="gridLayout" rowstretch="1,0" columnstretch="1">
<item row="0" column="0">
<layout class="QVBoxLayout" name="infoVerticalLayout" stretch="0,0,0,0,0,0,0,0,0,1">
<property name="spacing">
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="infoHorizontalLayout1" stretch="0,0,1,0,1,0,1">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="lat_label">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Coord:</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>6</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="coord_value">
<property name="text">
<string>Unknown</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>6</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="coord_value_2">
<property name="text">
<string>Unknown</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_6">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>6</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="coord_value_3">
<property name="text">
<string>Unknown</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Preferred</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>6</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="infoHorizontalLayout2" stretch="0,0,1,0,1,0,1">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="speed_label">
<property name="text">
<string>HomeCoord:</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_7">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>6</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="speed_value">
<property name="text">
<string>Unknown</string>
</property>
<property name="scaledContents">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_9">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>6</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="bear_label">
<property name="text">
<string>Unknown</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_8">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>6</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="bear_value">
<property name="text">
<string>Unknown</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer_5">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Preferred</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>4</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="Line" name="line2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_7">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Preferred</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>4</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="infoHorizontalLayout4" stretch="0,0,1">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="status_label">
<property name="text">
<string>Azimuth</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_10">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>6</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="azimuth_value">
<property name="text">
<string>Unknown</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Preferred</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>6</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="infoHorizontalLayout5" stretch="0,0,1">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="fix_label">
<property name="text">
<string>Elevation</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_11">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>6</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="elevation_value">
<property name="text">
<string>Unknown</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Ignored</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>6</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="1" column="0">
<layout class="QHBoxLayout" name="horizontalLayout2" stretch="0,0,1">
<property name="spacing">
<number>0</number>
</property>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Preferred</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>9</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QPushButton" name="connectButton">
<property name="text">
<string>Connect</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="disconnectButton">
<property name="text">
<string>Disconnect</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>0</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QGroupBox" name="dataStreamGroupBox">
<property name="title">
<string>Output</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="QTextBrowser" name="textBrowser">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Ignored">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>50</height>
</size>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
<property name="lineWrapMode">
<enum>QTextEdit::WidgetWidth</enum>
</property>
<property name="acceptRichText">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,43 @@
/**
******************************************************************************
*
* @file gpsparser.cpp
* @author Sami Korhonen & the OpenPilot team Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup AntennaTrackGadgetPlugin Antenna Track Gadget Plugin
* @{
* @brief A gadget that communicates with antenna tracker and enables basic configuration
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "gpsparser.h"
GPSParser::GPSParser(QObject *parent) : QObject(parent)
{
qRegisterMetaType<QList<int> >("QList<int>");
}
GPSParser::~GPSParser()
{
}
void GPSParser::processInputStream(char c) {
{
Q_UNUSED(c)}
}

View File

@ -0,0 +1,59 @@
/**
******************************************************************************
*
* @file gpsparser.h
* @author Sami Korhonen & the OpenPilot team Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup AntennaTrackGadgetPlugin Antenna Track Gadget Plugin
* @{
* @brief A gadget that communicates with antenna tracker and enables basic configuration
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef GPSPARSER_H
#define GPSPARSER_H
#include <QObject>
#include <QtCore>
#include <stdint.h>
class GPSParser: public QObject
{
Q_OBJECT
public:
~GPSParser();
virtual void processInputStream(char c);
protected:
GPSParser(QObject *parent = 0);
signals:
void sv(int); // Satellites in view
void position(double,double,double); // Lat, Lon, Alt
void home(double,double,double); // Lat, Lon, Alt
void datetime(double,double); // Date then time
void speedheading(double,double);
void packet(QString); // Raw NMEA Packet (or just info)
void satellite(int,int,int,int,int); // Index, PRN, Elevation, Azimuth, SNR
void fixmode(QString); // Mode of fix: "Auto", "Manual".
void fixtype(QString); // Type of fix: "NoGPS", "NoFix", "Fix2D", "Fix3D".
void dop(double, double, double); // HDOP, VDOP, PDOP
void fixSVs(QList<int>); // SV's used for fix.
};
#endif // GPSPARSER_H

View File

@ -0,0 +1,81 @@
/**
******************************************************************************
*
* @file telemetryparser.cpp
* @author Sami Korhonen & the OpenPilot team Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup AntennaTrackGadgetPlugin Antenna Track Gadget Plugin
* @{
* @brief A gadget that communicates with antenna tracker and enables basic configuration
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "telemetryparser.h"
#include <math.h>
#include <QDebug>
#include <QStringList>
/**
* Initialize the parser
*/
TelemetryParser::TelemetryParser(QObject *parent) : GPSParser(parent)
{
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
UAVDataObject *gpsObj = dynamic_cast<UAVDataObject*>(objManager->getObject("GPSPosition"));
if (gpsObj != NULL) {
connect(gpsObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(updateGPS(UAVObject*)));
} else {
qDebug() << "Error: Object is unknown (GPSPosition).";
}
gpsObj = dynamic_cast<UAVDataObject*>(objManager->getObject("HomeLocation"));
if (gpsObj != NULL) {
connect(gpsObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(updateHome(UAVObject*)));
} else {
qDebug() << "Error: Object is unknown (HomeLocation).";
}
}
TelemetryParser::~TelemetryParser()
{
}
void TelemetryParser::updateHome( UAVObject* object1) {
double lat = object1->getField(QString("Latitude"))->getDouble();
double lon = object1->getField(QString("Longitude"))->getDouble();
double alt = object1->getField(QString("Altitude"))->getDouble();
lat *= 1E-7;
lon *= 1E-7;
emit home(lat,lon,alt);
}
void TelemetryParser::updateGPS( UAVObject* object1) {
double lat = object1->getField(QString("Latitude"))->getDouble();
double lon = object1->getField(QString("Longitude"))->getDouble();
double alt = object1->getField(QString("Altitude"))->getDouble();
lat *= 1E-7;
lon *= 1E-7;
emit position(lat,lon,alt);
}

View File

@ -0,0 +1,52 @@
/**
******************************************************************************
*
* @file telemetryparser.h
* @author Sami Korhonen & the OpenPilot team Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup AntennaTrackGadgetPlugin Antenna Track Gadget Plugin
* @{
* @brief A gadget that communicates with antenna tracker and enables basic configuration
*****************************************************************************/
/*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef TELEMETRYPARSER_H
#define TELEMETRYPARSER_H
#include <QObject>
#include <QtCore>
#include "extensionsystem/pluginmanager.h"
#include "uavobjects/uavobjectmanager.h"
#include "uavobjects/uavobject.h"
#include "gpsparser.h"
class TelemetryParser: public GPSParser
{
Q_OBJECT
public:
TelemetryParser(QObject *parent = 0);
~TelemetryParser();
public slots:
void updateGPS(UAVObject* object1);
void updateHome(UAVObject* object1);
};
#endif // TELEMETRYPARSER_H

View File

@ -151,6 +151,12 @@ plugin_gcscontrol.depends += plugin_uavobjects
plugin_gcscontrol.depends += plugin_uavtalk
SUBDIRS += plugin_gcscontrol
# Antenna tracker
#plugin_antennatrack.subdir = antennatrack
#plugin_antennatrack.depends = plugin_coreplugin
#plugin_antennatrack.depends = plugin_uavtalk
#SUBDIRS += plugin_antennatrack
# Empty UAVGadget - Default for new splits
plugin_magicwaypoint.subdir = magicwaypoint
plugin_magicwaypoint.depends = plugin_coreplugin