Commit 2dea8976 authored by pixhawk's avatar pixhawk

Merge branch 'master' of pixhawk.ethz.ch:qgroundcontrol

parents d125dd65 19f73a78
...@@ -94,7 +94,7 @@ void UASWaypointManager::handleWaypoint(quint8 systemId, quint8 compId, mavlink_ ...@@ -94,7 +94,7 @@ void UASWaypointManager::handleWaypoint(quint8 systemId, quint8 compId, mavlink_
if(wp->seq == current_wp_id) if(wp->seq == current_wp_id)
{ {
//update the UI FIXME //update the UI FIXME
emit waypointUpdated(uas.getUASID(), wp->seq, wp->x, wp->y, wp->z, wp->yaw, wp->autocontinue, wp->current, wp->orbit, wp->hold_time); emit waypointUpdated(wp->seq, wp->x, wp->y, wp->z, wp->yaw, wp->autocontinue, wp->current, wp->orbit, wp->hold_time);
//get next waypoint //get next waypoint
current_wp_id++; current_wp_id++;
...@@ -206,15 +206,15 @@ void UASWaypointManager::requestWaypoints() ...@@ -206,15 +206,15 @@ void UASWaypointManager::requestWaypoints()
} }
} }
void UASWaypointManager::sendWaypoints(const QVector<Waypoint*> &list) void UASWaypointManager::sendWaypoints()
{ {
if (current_state == WP_IDLE) if (current_state == WP_IDLE)
{ {
if (list.count() > 0) if (waypoints.count() > 0)
{ {
protocol_timer.start(PROTOCOL_TIMEOUT_MS); protocol_timer.start(PROTOCOL_TIMEOUT_MS);
current_count = list.count(); current_count = waypoints.count();
current_state = WP_SENDLIST; current_state = WP_SENDLIST;
current_wp_id = 0; current_wp_id = 0;
current_partner_systemid = uas.getUASID(); current_partner_systemid = uas.getUASID();
...@@ -233,7 +233,7 @@ void UASWaypointManager::sendWaypoints(const QVector<Waypoint*> &list) ...@@ -233,7 +233,7 @@ void UASWaypointManager::sendWaypoints(const QVector<Waypoint*> &list)
waypoint_buffer.push_back(new mavlink_waypoint_t); waypoint_buffer.push_back(new mavlink_waypoint_t);
mavlink_waypoint_t *cur_d = waypoint_buffer.back(); mavlink_waypoint_t *cur_d = waypoint_buffer.back();
memset(cur_d, 0, sizeof(mavlink_waypoint_t)); //initialize with zeros memset(cur_d, 0, sizeof(mavlink_waypoint_t)); //initialize with zeros
const Waypoint *cur_s = list.at(i); const Waypoint *cur_s = waypoints.at(i);
cur_d->autocontinue = cur_s->getAutoContinue(); cur_d->autocontinue = cur_s->getAutoContinue();
cur_d->current = cur_s->getCurrent(); cur_d->current = cur_s->getCurrent();
......
...@@ -60,6 +60,8 @@ public: ...@@ -60,6 +60,8 @@ public:
void handleWaypointReached(quint8 systemId, quint8 compId, mavlink_waypoint_reached_t *wpr); void handleWaypointReached(quint8 systemId, quint8 compId, mavlink_waypoint_reached_t *wpr);
void handleWaypointSetCurrent(quint8 systemId, quint8 compId, mavlink_waypoint_set_current_t *wpr); void handleWaypointSetCurrent(quint8 systemId, quint8 compId, mavlink_waypoint_set_current_t *wpr);
QVector<Waypoint *> &getWaypointList(void) { return waypoints; }
private: private:
void sendWaypointRequest(quint16 seq); void sendWaypointRequest(quint16 seq);
void sendWaypoint(quint16 seq); void sendWaypoint(quint16 seq);
...@@ -68,10 +70,10 @@ public slots: ...@@ -68,10 +70,10 @@ public slots:
void timeout(); void timeout();
void clearWaypointList(); void clearWaypointList();
void requestWaypoints(); void requestWaypoints();
void sendWaypoints(const QVector<Waypoint *> &list); void sendWaypoints();
signals: signals:
void waypointUpdated(int,quint16,double,double,double,double,bool,bool,double,int); ///< Adds a waypoint to the waypoint list widget void waypointUpdated(quint16,double,double,double,double,bool,bool,double,int); ///< Adds a waypoint to the waypoint list widget
void currentWaypointChanged(quint16); ///< emits the new current waypoint sequence number void currentWaypointChanged(quint16); ///< emits the new current waypoint sequence number
void updateStatusString(const QString &); ///< emits the current status string void updateStatusString(const QString &); ///< emits the current status string
...@@ -83,6 +85,7 @@ private: ...@@ -83,6 +85,7 @@ private:
quint8 current_partner_systemid; ///< The current protocol communication target system quint8 current_partner_systemid; ///< The current protocol communication target system
quint8 current_partner_compid; ///< The current protocol communication target component quint8 current_partner_compid; ///< The current protocol communication target component
QVector<Waypoint *> waypoints; ///< local waypoint list
QVector<mavlink_waypoint_t *> waypoint_buffer; ///< communication buffer for waypoints QVector<mavlink_waypoint_t *> waypoint_buffer; ///< communication buffer for waypoints
QTimer protocol_timer; ///< Timer to catch timeouts QTimer protocol_timer; ///< Timer to catch timeouts
}; };
......
...@@ -79,11 +79,11 @@ WaypointList::WaypointList(QWidget *parent, UASInterface* uas) : ...@@ -79,11 +79,11 @@ WaypointList::WaypointList(QWidget *parent, UASInterface* uas) :
connect(UASManager::instance(), SIGNAL(activeUASSet(UASInterface*)), this, SLOT(setUAS(UASInterface*))); connect(UASManager::instance(), SIGNAL(activeUASSet(UASInterface*)), this, SLOT(setUAS(UASInterface*)));
// STATUS LABEL
updateStatusLabel("");
// SET UAS AFTER ALL SIGNALS/SLOTS ARE CONNECTED // SET UAS AFTER ALL SIGNALS/SLOTS ARE CONNECTED
setUAS(uas); setUAS(uas);
// STATUS LABEL
updateStatusLabel("");
} }
WaypointList::~WaypointList() WaypointList::~WaypointList()
...@@ -93,7 +93,10 @@ WaypointList::~WaypointList() ...@@ -93,7 +93,10 @@ WaypointList::~WaypointList()
void WaypointList::updateStatusLabel(const QString &string) void WaypointList::updateStatusLabel(const QString &string)
{ {
if (this->uas)
{
m_ui->statusLabel->setText(string); m_ui->statusLabel->setText(string);
}
} }
void WaypointList::updateLocalPosition(UASInterface* uas, double x, double y, double z, quint64 usec) void WaypointList::updateLocalPosition(UASInterface* uas, double x, double y, double z, quint64 usec)
...@@ -121,36 +124,40 @@ void WaypointList::setUAS(UASInterface* uas) ...@@ -121,36 +124,40 @@ void WaypointList::setUAS(UASInterface* uas)
this->uas = uas; this->uas = uas;
connect(&uas->getWaypointManager(), SIGNAL(updateStatusString(const QString &)), this, SLOT(updateStatusLabel(const QString &))); connect(&uas->getWaypointManager(), SIGNAL(updateStatusString(const QString &)), this, SLOT(updateStatusLabel(const QString &)));
connect(&uas->getWaypointManager(), SIGNAL(waypointUpdated(int,quint16,double,double,double,double,bool,bool,double,int)), this, SLOT(setWaypoint(int,quint16,double,double,double,double,bool,bool,double,int))); connect(&uas->getWaypointManager(), SIGNAL(waypointUpdated(quint16,double,double,double,double,bool,bool,double,int)), this, SLOT(setWaypoint(quint16,double,double,double,double,bool,bool,double,int)));
connect(&uas->getWaypointManager(), SIGNAL(currentWaypointChanged(quint16)), this, SLOT(currentWaypointChanged(quint16))); connect(&uas->getWaypointManager(), SIGNAL(currentWaypointChanged(quint16)), this, SLOT(currentWaypointChanged(quint16)));
connect(uas, SIGNAL(localPositionChanged(UASInterface*,double,double,double,quint64)), this, SLOT(updateLocalPosition(UASInterface*,double,double,double,quint64))); connect(uas, SIGNAL(localPositionChanged(UASInterface*,double,double,double,quint64)), this, SLOT(updateLocalPosition(UASInterface*,double,double,double,quint64)));
connect(uas, SIGNAL(attitudeChanged(UASInterface*,double,double,double,quint64)), this, SLOT(updateAttitude(UASInterface*,double,double,double,quint64))); connect(uas, SIGNAL(attitudeChanged(UASInterface*,double,double,double,quint64)), this, SLOT(updateAttitude(UASInterface*,double,double,double,quint64)));
connect(this, SIGNAL(sendWaypoints(const QVector<Waypoint*> &)), &uas->getWaypointManager(), SLOT(sendWaypoints(const QVector<Waypoint*> &))); connect(this, SIGNAL(sendWaypoints()), &uas->getWaypointManager(), SLOT(sendWaypoints()));
connect(this, SIGNAL(requestWaypoints()), &uas->getWaypointManager(), SLOT(requestWaypoints())); connect(this, SIGNAL(requestWaypoints()), &uas->getWaypointManager(), SLOT(requestWaypoints()));
connect(this, SIGNAL(clearWaypointList()), &uas->getWaypointManager(), SLOT(clearWaypointList())); connect(this, SIGNAL(clearWaypointList()), &uas->getWaypointManager(), SLOT(clearWaypointList()));
} }
} }
void WaypointList::setWaypoint(int uasId, quint16 id, double x, double y, double z, double yaw, bool autocontinue, bool current, double orbit, int holdTime) void WaypointList::setWaypoint(quint16 id, double x, double y, double z, double yaw, bool autocontinue, bool current, double orbit, int holdTime)
{ {
if (uasId == this->uas->getUASID()) if (this->uas)
{ {
Waypoint* wp = new Waypoint(id, x, y, z, yaw, autocontinue, current, orbit, holdTime); Waypoint* wp = new Waypoint(id, x, y, z, yaw, autocontinue, current, orbit, holdTime);
addWaypoint(wp); addWaypoint(wp);
} }
} }
void WaypointList::waypointReached(UASInterface* uas, quint16 waypointId) void WaypointList::waypointReached(quint16 waypointId)
{ {
Q_UNUSED(uas); if (this->uas)
qDebug() << "Waypoint reached: " << waypointId; {
updateStatusLabel(QString("Waypoint %1 reached.").arg(waypointId)); updateStatusLabel(QString("Waypoint %1 reached.").arg(waypointId));
}
} }
void WaypointList::currentWaypointChanged(quint16 seq) void WaypointList::currentWaypointChanged(quint16 seq)
{ {
if (this->uas)
{
QVector<Waypoint *> &waypoints = uas->getWaypointManager().getWaypointList();
if (seq < waypoints.size()) if (seq < waypoints.size())
{ {
for(int i = 0; i < waypoints.size(); i++) for(int i = 0; i < waypoints.size(); i++)
...@@ -170,21 +177,27 @@ void WaypointList::currentWaypointChanged(quint16 seq) ...@@ -170,21 +177,27 @@ void WaypointList::currentWaypointChanged(quint16 seq)
} }
redrawList(); redrawList();
} }
}
} }
void WaypointList::read() void WaypointList::read()
{ {
if (uas)
{
QVector<Waypoint *> &waypoints = uas->getWaypointManager().getWaypointList();
while(waypoints.size()>0) while(waypoints.size()>0)
{ {
removeWaypoint(waypoints[0]); removeWaypoint(waypoints[0]);
} }
emit requestWaypoints(); emit requestWaypoints();
}
} }
void WaypointList::transmit() void WaypointList::transmit()
{ {
emit sendWaypoints(waypoints); emit sendWaypoints();
//emit requestWaypoints(); FIXME //emit requestWaypoints(); FIXME
} }
...@@ -193,6 +206,8 @@ void WaypointList::add() ...@@ -193,6 +206,8 @@ void WaypointList::add()
// Only add waypoints if UAS is present // Only add waypoints if UAS is present
if (uas) if (uas)
{ {
QVector<Waypoint *> &waypoints = uas->getWaypointManager().getWaypointList();
if (waypoints.size() > 0) if (waypoints.size() > 0)
{ {
Waypoint *last = waypoints.at(waypoints.size()-1); Waypoint *last = waypoints.at(waypoints.size()-1);
...@@ -209,6 +224,8 @@ void WaypointList::addCurrentPositonWaypoint() ...@@ -209,6 +224,8 @@ void WaypointList::addCurrentPositonWaypoint()
{ {
if (uas) if (uas)
{ {
QVector<Waypoint *> &waypoints = uas->getWaypointManager().getWaypointList();
if (waypoints.size() > 0) if (waypoints.size() > 0)
{ {
Waypoint *last = waypoints.at(waypoints.size()-1); Waypoint *last = waypoints.at(waypoints.size()-1);
...@@ -224,7 +241,9 @@ void WaypointList::addCurrentPositonWaypoint() ...@@ -224,7 +241,9 @@ void WaypointList::addCurrentPositonWaypoint()
void WaypointList::addWaypoint(Waypoint* wp) void WaypointList::addWaypoint(Waypoint* wp)
{ {
waypoints.push_back(wp); if (uas)
{
uas->getWaypointManager().getWaypointList().push_back(wp);
if (!wpViews.contains(wp)) if (!wpViews.contains(wp))
{ {
WaypointView* wpview = new WaypointView(wp, this); WaypointView* wpview = new WaypointView(wp, this);
...@@ -235,10 +254,15 @@ void WaypointList::addWaypoint(Waypoint* wp) ...@@ -235,10 +254,15 @@ void WaypointList::addWaypoint(Waypoint* wp)
connect(wpview, SIGNAL(removeWaypoint(Waypoint*)), this, SLOT(removeWaypoint(Waypoint*))); connect(wpview, SIGNAL(removeWaypoint(Waypoint*)), this, SLOT(removeWaypoint(Waypoint*)));
connect(wpview, SIGNAL(currentWaypointChanged(quint16)), this, SLOT(currentWaypointChanged(quint16))); connect(wpview, SIGNAL(currentWaypointChanged(quint16)), this, SLOT(currentWaypointChanged(quint16)));
} }
}
} }
void WaypointList::redrawList() void WaypointList::redrawList()
{ {
if (uas)
{
QVector<Waypoint *> &waypoints = uas->getWaypointManager().getWaypointList();
// Clear list layout // Clear list layout
if (!wpViews.empty()) if (!wpViews.empty())
{ {
...@@ -255,10 +279,15 @@ void WaypointList::redrawList() ...@@ -255,10 +279,15 @@ void WaypointList::redrawList()
listLayout->addWidget(wpViews.value(waypoints[i])); listLayout->addWidget(wpViews.value(waypoints[i]));
} }
} }
}
} }
void WaypointList::moveUp(Waypoint* wp) void WaypointList::moveUp(Waypoint* wp)
{ {
if (uas)
{
QVector<Waypoint *> &waypoints = uas->getWaypointManager().getWaypointList();
int id = wp->getId(); int id = wp->getId();
if (waypoints.size() > 1 && waypoints.size() > id) if (waypoints.size() > 1 && waypoints.size() > id)
{ {
...@@ -279,10 +308,15 @@ void WaypointList::moveUp(Waypoint* wp) ...@@ -279,10 +308,15 @@ void WaypointList::moveUp(Waypoint* wp)
} }
redrawList(); redrawList();
} }
}
} }
void WaypointList::moveDown(Waypoint* wp) void WaypointList::moveDown(Waypoint* wp)
{ {
if (uas)
{
QVector<Waypoint *> &waypoints = uas->getWaypointManager().getWaypointList();
int id = wp->getId(); int id = wp->getId();
if (waypoints.size() > 1 && waypoints.size() > id) if (waypoints.size() > 1 && waypoints.size() > id)
{ {
...@@ -303,10 +337,15 @@ void WaypointList::moveDown(Waypoint* wp) ...@@ -303,10 +337,15 @@ void WaypointList::moveDown(Waypoint* wp)
} }
redrawList(); redrawList();
} }
}
} }
void WaypointList::removeWaypoint(Waypoint* wp) void WaypointList::removeWaypoint(Waypoint* wp)
{ {
if (uas)
{
QVector<Waypoint *> &waypoints = uas->getWaypointManager().getWaypointList();
// Delete from list // Delete from list
if (wp != NULL) if (wp != NULL)
{ {
...@@ -323,6 +362,7 @@ void WaypointList::removeWaypoint(Waypoint* wp) ...@@ -323,6 +362,7 @@ void WaypointList::removeWaypoint(Waypoint* wp)
listLayout->removeWidget(widget); listLayout->removeWidget(widget);
delete wp; delete wp;
} }
}
} }
void WaypointList::changeEvent(QEvent *e) void WaypointList::changeEvent(QEvent *e)
...@@ -338,11 +378,15 @@ void WaypointList::changeEvent(QEvent *e) ...@@ -338,11 +378,15 @@ void WaypointList::changeEvent(QEvent *e)
void WaypointList::saveWaypoints() void WaypointList::saveWaypoints()
{ {
if (uas)
{
QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"), "./waypoints.txt", tr("Waypoint File (*.txt)")); QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"), "./waypoints.txt", tr("Waypoint File (*.txt)"));
QFile file(fileName); QFile file(fileName);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
return; return;
QVector<Waypoint *> &waypoints = uas->getWaypointManager().getWaypointList();
QTextStream in(&file); QTextStream in(&file);
for (int i = 0; i < waypoints.size(); i++) for (int i = 0; i < waypoints.size(); i++)
{ {
...@@ -351,15 +395,20 @@ void WaypointList::saveWaypoints() ...@@ -351,15 +395,20 @@ void WaypointList::saveWaypoints()
in.flush(); in.flush();
} }
file.close(); file.close();
}
} }
void WaypointList::loadWaypoints() void WaypointList::loadWaypoints()
{ {
if (uas)
{
QString fileName = QFileDialog::getOpenFileName(this, tr("Load File"), ".", tr("Waypoint File (*.txt)")); QString fileName = QFileDialog::getOpenFileName(this, tr("Load File"), ".", tr("Waypoint File (*.txt)"));
QFile file(fileName); QFile file(fileName);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return; return;
QVector<Waypoint *> &waypoints = uas->getWaypointManager().getWaypointList();
while(waypoints.size()>0) while(waypoints.size()>0)
{ {
removeWaypoint(waypoints[0]); removeWaypoint(waypoints[0]);
...@@ -373,5 +422,6 @@ void WaypointList::loadWaypoints() ...@@ -373,5 +422,6 @@ void WaypointList::loadWaypoints()
addWaypoint(new Waypoint(wpParams[1].toInt(), wpParams[2].toDouble(), wpParams[3].toDouble(), wpParams[4].toDouble(), wpParams[5].toDouble(), (wpParams[6].toInt() == 1 ? true : false), (wpParams[7].toInt() == 1 ? true : false), wpParams[8].toDouble(), wpParams[9].toInt())); addWaypoint(new Waypoint(wpParams[1].toInt(), wpParams[2].toDouble(), wpParams[3].toDouble(), wpParams[4].toDouble(), wpParams[5].toDouble(), (wpParams[6].toInt() == 1 ? true : false), (wpParams[7].toInt() == 1 ? true : false), wpParams[8].toDouble(), wpParams[9].toInt()));
} }
file.close(); file.close();
}
} }
...@@ -73,24 +73,21 @@ public slots: ...@@ -73,24 +73,21 @@ public slots:
void updateStatusLabel(const QString &string); void updateStatusLabel(const QString &string);
void currentWaypointChanged(quint16 seq); void currentWaypointChanged(quint16 seq);
void setWaypoint(quint16 id, double x, double y, double z, double yaw, bool autocontinue, bool current, double orbit, int holdTime);
//To be moved to UASWaypointManager (?)
void setWaypoint(int uasId, quint16 id, double x, double y, double z, double yaw, bool autocontinue, bool current, double orbit, int holdTime);
void addWaypoint(Waypoint* wp); void addWaypoint(Waypoint* wp);
void removeWaypoint(Waypoint* wp); void removeWaypoint(Waypoint* wp);
void waypointReached(UASInterface* uas, quint16 waypointId); void waypointReached(quint16 waypointId);
void updateLocalPosition(UASInterface*, double x, double y, double z, quint64 usec); void updateLocalPosition(UASInterface*, double x, double y, double z, quint64 usec);
void updateAttitude(UASInterface*, double roll, double pitch, double yaw, quint64 usec); void updateAttitude(UASInterface*, double roll, double pitch, double yaw, quint64 usec);
signals: signals:
void sendWaypoints(const QVector<Waypoint*> &); void sendWaypoints();
void requestWaypoints(); void requestWaypoints();
void clearWaypointList(); void clearWaypointList();
protected: protected:
virtual void changeEvent(QEvent *e); virtual void changeEvent(QEvent *e);
QVector<Waypoint*> waypoints;
QMap<Waypoint*, WaypointView*> wpViews; QMap<Waypoint*, WaypointView*> wpViews;
QVBoxLayout* listLayout; QVBoxLayout* listLayout;
UASInterface* uas; UASInterface* uas;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment