From 63a393b25bbc2749f0c071c455398695cc2994bd Mon Sep 17 00:00:00 2001 From: Lorenz Meier Date: Thu, 11 Jun 2015 19:22:23 +0200 Subject: [PATCH] XPlane HIL interface: Fix link deletion logic so no QGC reboots are required between runs --- src/comm/QGCXPlaneLink.cc | 22 +++++++++++++++------- src/uas/UAS.cc | 2 ++ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/comm/QGCXPlaneLink.cc b/src/comm/QGCXPlaneLink.cc index 98e7f63d9..302ee5982 100644 --- a/src/comm/QGCXPlaneLink.cc +++ b/src/comm/QGCXPlaneLink.cc @@ -80,12 +80,12 @@ QGCXPlaneLink::~QGCXPlaneLink() storeSettings(); // Tell the thread to exit _should_exit = true; - // Wait for it to exit - wait(); -// if(connectState) { -// disconnectSimulation(); -// } + if (socket) { + socket->close(); + socket->deleteLater(); + socket = NULL; + } } void QGCXPlaneLink::loadSettings() @@ -169,11 +169,13 @@ void QGCXPlaneLink::run() emit statusMessage("Binding socket failed!"); - delete socket; + socket->deleteLater(); socket = NULL; return; } + emit statusMessage(tr("Waiting for XPlane..")); + QObject::connect(socket, SIGNAL(readyRead()), this, SLOT(readBytes())); UAS* uas = dynamic_cast(mav); @@ -188,6 +190,9 @@ void QGCXPlaneLink::run() connect(this, SIGNAL(sensorHilRawImuChanged(quint64,float,float,float,float,float,float,float,float,float,float,float,float,float,quint32)), uas, SLOT(sendHilSensors(quint64,float,float,float,float,float,float,float,float,float,float,float,float,float,quint32)), Qt::QueuedConnection); uas->startHil(); + } else { + emit statusMessage(tr("Failed to connect to drone instance")); + return; } #pragma pack(push, 1) @@ -254,12 +259,16 @@ void QGCXPlaneLink::run() connectState = false; + QObject::disconnect(socket, SIGNAL(readyRead()), this, SLOT(readBytes())); + socket->close(); socket->deleteLater(); socket = NULL; emit simulationDisconnected(); emit simulationConnected(false); + + this->deleteLater(); } void QGCXPlaneLink::setPort(int localPort) @@ -908,7 +917,6 @@ bool QGCXPlaneLink::disconnectSimulation() if (connectState) { _should_exit = true; - wait(); } else { emit simulationDisconnected(); emit simulationConnected(false); diff --git a/src/uas/UAS.cc b/src/uas/UAS.cc index 957bc5004..5d7cb2430 100644 --- a/src/uas/UAS.cc +++ b/src/uas/UAS.cc @@ -242,6 +242,8 @@ UAS::UAS(MAVLinkProtocol* protocol, int id) : UASInterface(), */ UAS::~UAS() { + stopHil(); + simulation->deleteLater(); writeSettings(); } -- 2.22.0