diff --git a/src/comm/MAVLinkProtocol.cc b/src/comm/MAVLinkProtocol.cc index 215a4a61366399a8ed3e2e53727f281d17dd4e53..06c1d218069786b1c02ba96717e8eeef72d3c6f2 100644 --- a/src/comm/MAVLinkProtocol.cc +++ b/src/comm/MAVLinkProtocol.cc @@ -170,16 +170,42 @@ void MAVLinkProtocol::receiveBytes(LinkInterface* link) { case MAV_AUTOPILOT_GENERIC: uas = new UAS(this, message.sysid); + // Connect this robot to the UAS object + connect(this, SIGNAL(messageReceived(LinkInterface*, mavlink_message_t)), uas, SLOT(receiveMessage(LinkInterface*, mavlink_message_t))); break; case MAV_AUTOPILOT_PIXHAWK: + { // Fixme differentiate between quadrotor and coaxial here - uas = new PxQuadMAV(this, message.sysid); + PxQuadMAV* mav = new PxQuadMAV(this, message.sysid); + // Connect this robot to the UAS object + // it is IMPORTANT here to use the right object type, + // else the slot of the parent object is called (and thus the special + // packets never reach their goal) + connect(this, SIGNAL(messageReceived(LinkInterface*, mavlink_message_t)), mav, SLOT(receiveMessage(LinkInterface*, mavlink_message_t))); + uas = mav; + } break; case MAV_AUTOPILOT_SLUGS: - uas = new SlugsMAV(this, message.sysid); + { + SlugsMAV* mav = new SlugsMAV(this, message.sysid); + // Connect this robot to the UAS object + // it is IMPORTANT here to use the right object type, + // else the slot of the parent object is called (and thus the special + // packets never reach their goal) + connect(this, SIGNAL(messageReceived(LinkInterface*, mavlink_message_t)), mav, SLOT(receiveMessage(LinkInterface*, mavlink_message_t))); + uas = mav; + } break; case MAV_AUTOPILOT_ARDUPILOT: - uas = new ArduPilotMAV(this, message.sysid); + { + ArduPilotMAV* mav = new ArduPilotMAV(this, message.sysid); + // Connect this robot to the UAS object + // it is IMPORTANT here to use the right object type, + // else the slot of the parent object is called (and thus the special + // packets never reach their goal) + connect(this, SIGNAL(messageReceived(LinkInterface*, mavlink_message_t)), mav, SLOT(receiveMessage(LinkInterface*, mavlink_message_t))); + uas = mav; + } break; default: uas = new UAS(this, message.sysid); @@ -189,8 +215,6 @@ void MAVLinkProtocol::receiveBytes(LinkInterface* link) // Make UAS aware that this link can be used to communicate with the actual robot uas->addLink(link); - // Connect this robot to the UAS object - connect(this, SIGNAL(messageReceived(LinkInterface*, mavlink_message_t)), uas, SLOT(receiveMessage(LinkInterface*, mavlink_message_t))); // Now add UAS to "official" list, which makes the whole application aware of it UASManager::instance()->addUAS(uas); } diff --git a/standalone/qgroundcontrol-server/qgroundcontrol-server.pro b/standalone/qgroundcontrol-server/qgroundcontrol-server.pro new file mode 100644 index 0000000000000000000000000000000000000000..8ab537f1f8261ec96c292cf1781967e55fe82523 --- /dev/null +++ b/standalone/qgroundcontrol-server/qgroundcontrol-server.pro @@ -0,0 +1,28 @@ +QT += net + +TEMPLATE = app +TARGET = qgroundcontrol-server + +BASEDIR = ../.. +BUILDDIR = $$BASEDIR/build/qgroundcontrol-server +LANGUAGE = C++ + +CONFIG += release +CONFIG -= debug + +OBJECTS_DIR = $$BUILDDIR/qgroundcontrol-server/obj +MOC_DIR = $$BUILDDIR/qgroundcontrol-server/moc + +macx:DESTDIR = $$BASEDIR/bin/mac + +INCLUDEPATH += $$BASEDIR/. \ + $$BASEDIR/src \ + $$BASEDIR/src/comm \ + $$BASEDIR/standalone/qgroundcontrol-server/src + +HEADERS += src/QGroundControlServer.h \ + $$BASEDIR/src/comm/MAVLinkProtocol.h +SOURCES += src/main.cc \ + src/QGroundControlServer.cc \ + $$BASEDIR/src/comm/MAVLinkProtocol.cc +RESOURCES = $$BASEDIR/mavground.qrc diff --git a/standalone/qgroundcontrol-server/src/QGroundControlServer.cc b/standalone/qgroundcontrol-server/src/QGroundControlServer.cc new file mode 100644 index 0000000000000000000000000000000000000000..86c06d47f3cf932da916989a665b4c3a76d14003 --- /dev/null +++ b/standalone/qgroundcontrol-server/src/QGroundControlServer.cc @@ -0,0 +1,93 @@ +/*===================================================================== + +PIXHAWK Micro Air Vehicle Flying Robotics Toolkit + +(c) 2009, 2010 PIXHAWK PROJECT + +This file is part of the PIXHAWK project + + PIXHAWK 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. + + PIXHAWK 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 PIXHAWK. If not, see . + +======================================================================*/ + +/** + * @file + * @brief Implementation of class MAVLinkGen + * + * @author Lorenz Meier + * + */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "MAVLinkGen.h" +#include "XMLCommProtocolWidget.h" + + +/** + * @brief Constructor for the main application. + * + * This constructor initializes and starts the whole application. It takes standard + * command-line parameters + * + * @param argc The number of command-line parameters + * @param argv The string array of parameters + **/ + +MAVLinkGen::MAVLinkGen(int &argc, char* argv[]) : QApplication(argc, argv) +{ + this->setApplicationName("MAVLink Generator"); + this->setApplicationVersion("v. 0.1.0 (Beta)"); + this->setOrganizationName(QLatin1String("OpenMAV Association")); + this->setOrganizationDomain("http://qgroundcontrol.org"); + + QSettings::setDefaultFormat(QSettings::IniFormat); + // Exit main application when last window is closed + connect(this, SIGNAL(lastWindowClosed()), this, SLOT(quit())); + + // Set application font + QFontDatabase fontDatabase = QFontDatabase(); + const QString fontFileName = ":/general/vera.ttf"; ///< Font file is part of the QRC file and compiled into the app + const QString fontFamilyName = "Bitstream Vera Sans"; + if(!QFile::exists(fontFileName)) printf("ERROR! font file: %s DOES NOT EXIST!\n", fontFileName.toStdString().c_str()); + fontDatabase.addApplicationFont(fontFileName); + setFont(fontDatabase.font(fontFamilyName, "Roman", 12)); + + // Create main window + QMainWindow* window = new QMainWindow(); + window->setCentralWidget(new XMLCommProtocolWidget(window)); + window->setWindowTitle(applicationName() + " " + applicationVersion()); + window->show(); +} + +/** + * @brief Destructor for the groundstation. It destroys all loaded instances. + * + **/ +MAVLinkGen::~MAVLinkGen() +{ +} + diff --git a/standalone/qgroundcontrol-server/src/QGroundControlServer.h b/standalone/qgroundcontrol-server/src/QGroundControlServer.h new file mode 100644 index 0000000000000000000000000000000000000000..518fed03d6e587b80de55db958e8db7f9714b9c7 --- /dev/null +++ b/standalone/qgroundcontrol-server/src/QGroundControlServer.h @@ -0,0 +1,58 @@ +/*===================================================================== + +PIXHAWK Micro Air Vehicle Flying Robotics Toolkit + +(c) 2009, 2010 PIXHAWK PROJECT + +This file is part of the PIXHAWK project + + PIXHAWK 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. + + PIXHAWK 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 PIXHAWK. If not, see . + +======================================================================*/ + +/** + * @file + * @brief Definition of class MAVLinkGen + * + * @author Lorenz Meier + * + */ + + +#ifndef MAVLINKGEN_H +#define MAVLINKGEN_H + +#include + +/** + * @brief The main application and management class. + * + * This class is started by the main method and provides + * the central management unit of the groundstation application. + * + **/ +class MAVLinkGen : public QApplication +{ + Q_OBJECT + +public: + MAVLinkGen(int &argc, char* argv[]); + ~MAVLinkGen(); + +protected: + +private: +}; + +#endif /* MAVLINKGEN_H */ diff --git a/standalone/qgroundcontrol-server/src/main.cc b/standalone/qgroundcontrol-server/src/main.cc new file mode 100644 index 0000000000000000000000000000000000000000..4a57b36902f237b23f4801f2a2e7ec75ab93e164 --- /dev/null +++ b/standalone/qgroundcontrol-server/src/main.cc @@ -0,0 +1,46 @@ +/*===================================================================== + +PIXHAWK Micro Air Vehicle Flying Robotics Toolkit + +(c) 2009, 2010 PIXHAWK PROJECT + +This file is part of the PIXHAWK project + + PIXHAWK 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. + + PIXHAWK 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 PIXHAWK. If not, see . + +======================================================================*/ + +/** + * @file + * @brief Main executable + * @author Lorenz Meier + * + */ + +#include +#include "MAVLinkGen.h" + +/** + * @brief Starts the application + * + * @param argc Number of commandline arguments + * @param argv Commandline arguments + * @return exit code, 0 for normal exit and !=0 for error cases + */ +int main(int argc, char *argv[]) +{ + + MAVLinkGen gen(argc, argv); + return gen.exec(); +}