Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qgroundcontrol
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Valentin Platzgummer
qgroundcontrol
Commits
42351ee0
Commit
42351ee0
authored
Dec 09, 2014
by
Don Gagne
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Restructure LinkManager/MAVLinkProtocol
parent
e7d85710
Changes
34
Hide whitespace changes
Inline
Side-by-side
Showing
34 changed files
with
249 additions
and
284 deletions
+249
-284
QGCApplication.cc
src/QGCApplication.cc
+2
-2
LinkInterface.h
src/comm/LinkInterface.h
+0
-5
LinkManager.cc
src/comm/LinkManager.cc
+35
-67
LinkManager.h
src/comm/LinkManager.h
+41
-46
MAVLinkProtocol.cc
src/comm/MAVLinkProtocol.cc
+18
-7
MAVLinkProtocol.h
src/comm/MAVLinkProtocol.h
+10
-4
MAVLinkSimulationLink.cc
src/comm/MAVLinkSimulationLink.cc
+1
-3
SerialLink.cc
src/comm/SerialLink.cc
+0
-3
TCPLink.cc
src/comm/TCPLink.cc
+0
-2
UDPLink.cc
src/comm/UDPLink.cc
+0
-2
LinkManagerTest.cc
src/qgcunittest/LinkManagerTest.cc
+4
-4
MainWindowTest.cc
src/qgcunittest/MainWindowTest.cc
+1
-2
MavlinkLogTest.cc
src/qgcunittest/MavlinkLogTest.cc
+1
-2
MockLink.cc
src/qgcunittest/MockLink.cc
+0
-2
TCPLinkTest.cc
src/qgcunittest/TCPLinkTest.cc
+7
-14
TCPLinkTest.h
src/qgcunittest/TCPLinkTest.h
+0
-2
UnitTest.cc
src/qgcunittest/UnitTest.cc
+2
-0
QGCUASFileManager.cc
src/uas/QGCUASFileManager.cc
+1
-1
UAS.cc
src/uas/UAS.cc
+1
-1
UASParameterCommsMgr.cc
src/uas/UASParameterCommsMgr.cc
+1
-1
CommConfigurationWindow.cc
src/ui/CommConfigurationWindow.cc
+20
-19
CommConfigurationWindow.h
src/ui/CommConfigurationWindow.h
+6
-2
DebugConsole.cc
src/ui/DebugConsole.cc
+14
-4
DebugConsole.h
src/ui/DebugConsole.h
+7
-2
MAVLinkSettingsWidget.cc
src/ui/MAVLinkSettingsWidget.cc
+1
-1
MainWindow.cc
src/ui/MainWindow.cc
+22
-41
MainWindow.h
src/ui/MainWindow.h
+1
-10
OpalLinkConfigurationWindow.cc
src/ui/OpalLinkConfigurationWindow.cc
+13
-2
OpalLinkConfigurationWindow.h
src/ui/OpalLinkConfigurationWindow.h
+5
-3
QGCToolBar.cc
src/ui/QGCToolBar.cc
+21
-11
QGCToolBar.h
src/ui/QGCToolBar.h
+8
-2
SerialConfigurationWindow.cc
src/ui/SerialConfigurationWindow.cc
+0
-4
SettingsDialog.cc
src/ui/SettingsDialog.cc
+2
-9
UASListWidget.cc
src/ui/uas/UASListWidget.cc
+4
-4
No files found.
src/QGCApplication.cc
View file @
42351ee0
...
...
@@ -281,11 +281,11 @@ bool QGCApplication::_initForNormalAppBoot(void)
// to make sure that all components are initialized when the
// first messages arrive
udpLink
=
new
UDPLink
(
QHostAddress
::
Any
,
14550
);
LinkManager
::
instance
()
->
add
(
udpLink
);
LinkManager
::
instance
()
->
add
Link
(
udpLink
);
}
else
{
// We want to have a default serial link available for "quick" connecting.
SerialLink
*
slink
=
new
SerialLink
();
LinkManager
::
instance
()
->
add
(
slink
);
LinkManager
::
instance
()
->
add
Link
(
slink
);
}
#ifdef QGC_RTLAB_ENABLED
...
...
src/comm/LinkInterface.h
View file @
42351ee0
...
...
@@ -186,11 +186,6 @@ signals:
**/
void
disconnected
();
/**
* @brief This signal is emitted instantly when the link status changes
**/
void
connected
(
bool
connected
);
/**
* @brief This signal is emitted if the human readable name of this link changes
*/
...
...
src/comm/LinkManager.cc
View file @
42351ee0
...
...
@@ -43,7 +43,7 @@ LinkManager* LinkManager::_instance = NULL;
LinkManager
*
LinkManager
::
instance
(
void
)
{
if
(
_instance
==
0
)
{
_instance
=
new
LinkManager
(
qgcApp
());
new
LinkManager
(
qgcApp
());
Q_CHECK_PTR
(
_instance
);
}
...
...
@@ -65,10 +65,14 @@ void LinkManager::deleteInstance(void)
**/
LinkManager
::
LinkManager
(
QObject
*
parent
,
bool
registerSingleton
)
:
QGCSingleton
(
parent
,
registerSingleton
),
_connectionsSuspended
(
false
)
_connectionsSuspended
(
false
),
_mavlink
(
NULL
)
{
_links
=
QList
<
LinkInterface
*>
();
_protocolLinks
=
QMap
<
ProtocolInterface
*
,
LinkInterface
*>
();
Q_ASSERT
(
_instance
==
NULL
);
_instance
=
this
;
_mavlink
=
new
MAVLinkProtocol
;
Q_CHECK_PTR
(
_mavlink
);
}
LinkManager
::~
LinkManager
()
...
...
@@ -80,69 +84,39 @@ LinkManager::~LinkManager()
deleteLink
(
link
);
}
_links
.
clear
();
// Clear out the queue so disconnects make it all the way through threads
qgcApp
()
->
processEvents
(
QEventLoop
::
ExcludeUserInputEvents
);
delete
_mavlink
;
}
void
LinkManager
::
add
(
LinkInterface
*
link
)
void
LinkManager
::
add
Link
(
LinkInterface
*
link
)
{
Q_ASSERT
(
link
);
// Take ownership for delete
link
->
_ownedByLinkManager
=
true
;
_
data
Mutex
.
lock
();
_
linkList
Mutex
.
lock
();
if
(
!
_links
.
contains
(
link
))
{
_links
.
append
(
link
);
_
data
Mutex
.
unlock
();
_
linkList
Mutex
.
unlock
();
emit
newLink
(
link
);
}
else
{
_
data
Mutex
.
unlock
();
_
linkList
Mutex
.
unlock
();
}
}
void
LinkManager
::
addProtocol
(
LinkInterface
*
link
,
ProtocolInterface
*
protocol
)
{
Q_ASSERT
(
link
);
Q_ASSERT
(
protocol
);
// Connect link to protocol
// the protocol will receive new bytes from the link
_dataMutex
.
lock
();
QList
<
LinkInterface
*>
linkList
=
_protocolLinks
.
values
(
protocol
);
// If protocol has not been added before (list length == 0)
// OR if link has not been added to protocol, add
if
(
!
linkList
.
contains
(
link
))
{
// Protocol is new, add
connect
(
link
,
SIGNAL
(
bytesReceived
(
LinkInterface
*
,
QByteArray
)),
protocol
,
SLOT
(
receiveBytes
(
LinkInterface
*
,
QByteArray
)));
// Add status
connect
(
link
,
SIGNAL
(
connected
(
bool
)),
protocol
,
SLOT
(
linkStatusChanged
(
bool
)));
// Store the connection information in the protocol links map
_protocolLinks
.
insertMulti
(
protocol
,
link
);
_dataMutex
.
unlock
();
// Make sure the protocol clears its metadata for this link.
protocol
->
resetMetadataForLink
(
link
);
}
else
{
_dataMutex
.
unlock
();
// MainWindow may be around when doing things like running unit tests
if
(
MainWindow
::
instance
())
{
connect
(
link
,
SIGNAL
(
communicationError
(
QString
,
QString
)),
MainWindow
::
instance
(),
SLOT
(
showCriticalMessage
(
QString
,
QString
)),
Qt
::
QueuedConnection
);
}
//qDebug() << __FILE__ << __LINE__ << "ADDED LINK TO PROTOCOL" << link->getName() << protocol->getName() << "NEW SIZE OF LINK LIST:" << _protocolLinks.size();
}
QList
<
LinkInterface
*>
LinkManager
::
getLinksForProtocol
(
ProtocolInterface
*
protocol
)
{
_dataMutex
.
lock
();
QList
<
LinkInterface
*>
links
=
_protocolLinks
.
values
(
protocol
);
_dataMutex
.
unlock
();
return
links
;
}
ProtocolInterface
*
LinkManager
::
getProtocolForLink
(
LinkInterface
*
link
)
{
_dataMutex
.
lock
();
ProtocolInterface
*
protocol
=
_protocolLinks
.
key
(
link
);
_dataMutex
.
unlock
();
return
protocol
;
connect
(
link
,
&
LinkInterface
::
bytesReceived
,
_mavlink
,
&
MAVLinkProtocol
::
receiveBytes
);
connect
(
link
,
&
LinkInterface
::
connected
,
_mavlink
,
&
MAVLinkProtocol
::
linkConnected
);
connect
(
link
,
&
LinkInterface
::
disconnected
,
_mavlink
,
&
MAVLinkProtocol
::
linkDisconnected
);
_mavlink
->
resetMetadataForLink
(
link
);
}
bool
LinkManager
::
connectAll
()
...
...
@@ -153,14 +127,14 @@ bool LinkManager::connectAll()
bool
allConnected
=
true
;
_
data
Mutex
.
lock
();
_
linkList
Mutex
.
lock
();
foreach
(
LinkInterface
*
link
,
_links
)
{
Q_ASSERT
(
link
);
if
(
!
link
->
_connect
())
{
allConnected
=
false
;
}
}
_
data
Mutex
.
unlock
();
_
linkList
Mutex
.
unlock
();
return
allConnected
;
}
...
...
@@ -169,7 +143,7 @@ bool LinkManager::disconnectAll()
{
bool
allDisconnected
=
true
;
_
data
Mutex
.
lock
();
_
linkList
Mutex
.
lock
();
foreach
(
LinkInterface
*
link
,
_links
)
{
Q_ASSERT
(
link
);
...
...
@@ -177,7 +151,7 @@ bool LinkManager::disconnectAll()
allDisconnected
=
false
;
}
}
_
data
Mutex
.
unlock
();
_
linkList
Mutex
.
unlock
();
return
allDisconnected
;
}
...
...
@@ -203,19 +177,13 @@ void LinkManager::deleteLink(LinkInterface* link)
{
Q_ASSERT
(
link
);
_
data
Mutex
.
lock
();
_
linkList
Mutex
.
lock
();
Q_ASSERT
(
_links
.
contains
(
link
));
_links
.
removeOne
(
link
);
Q_ASSERT
(
!
_links
.
contains
(
link
));
// Remove link from protocol map
QList
<
ProtocolInterface
*
>
protocols
=
_protocolLinks
.
keys
(
link
);
foreach
(
ProtocolInterface
*
proto
,
protocols
)
{
_protocolLinks
.
remove
(
proto
,
link
);
}
_dataMutex
.
unlock
();
_linkListMutex
.
unlock
();
// Emit removal of link
emit
linkDeleted
(
link
);
...
...
@@ -230,15 +198,15 @@ void LinkManager::deleteLink(LinkInterface* link)
*/
const
QList
<
LinkInterface
*>
LinkManager
::
getLinks
()
{
_
data
Mutex
.
lock
();
_
linkList
Mutex
.
lock
();
QList
<
LinkInterface
*>
ret
(
_links
);
_
data
Mutex
.
unlock
();
_
linkList
Mutex
.
unlock
();
return
ret
;
}
const
QList
<
SerialLink
*>
LinkManager
::
getSerialLinks
()
{
_
data
Mutex
.
lock
();
_
linkList
Mutex
.
lock
();
QList
<
SerialLink
*>
s
;
foreach
(
LinkInterface
*
link
,
_links
)
...
...
@@ -250,7 +218,7 @@ const QList<SerialLink*> LinkManager::getSerialLinks()
if
(
serialLink
)
s
.
append
(
serialLink
);
}
_
data
Mutex
.
unlock
();
_
linkList
Mutex
.
unlock
();
return
s
;
}
...
...
src/comm/LinkManager.h
View file @
42351ee0
...
...
@@ -21,13 +21,8 @@ This file is part of the PIXHAWK project
======================================================================*/
/**
* @file
* @brief Manage communication links
*
* @author Lorenz Meier <mavteam@student.ethz.ch>
*
*/
/// @file
/// @author Lorenz Meier <mavteam@student.ethz.ch>
#ifndef _LINKMANAGER_H_
#define _LINKMANAGER_H_
...
...
@@ -41,15 +36,16 @@ This file is part of the PIXHAWK project
#include "SerialLink.h"
#include "ProtocolInterface.h"
#include "QGCSingleton.h"
#include "MAVLinkProtocol.h"
class
LinkManagerTest
;
/
**
* The Link Manager organizes the physical Links. It can manage arbitrary
* links and takes care of connecting them as well assigning the correct
* protocol instance to transport the link data into the application.
*
**/
/
// Manage communication links
///
/// The Link Manager organizes the physical Links. It can manage arbitrary
/// links and takes care of connecting them as well assigning the correct
/// protocol instance to transport the link data into the application.
class
LinkManager
:
public
QGCSingleton
{
Q_OBJECT
...
...
@@ -62,65 +58,64 @@ public:
~
LinkManager
();
QList
<
LinkInterface
*>
getLinksForProtocol
(
ProtocolInterface
*
protocol
);
ProtocolInterface
*
getProtocolForLink
(
LinkInterface
*
link
);
/** @brief Get a list of all links */
/// Returns list of all links
const
QList
<
LinkInterface
*>
getLinks
();
/
** @brief Get a list of all serial links */
/
/ Returns list of all serial links
const
QList
<
SerialLink
*>
getSerialLinks
();
/** @brief Get a list of all protocols */
const
QList
<
ProtocolInterface
*>
getProtocols
()
{
return
_protocolLinks
.
uniqueKeys
();
}
/// @brief Sets the lag to suspend the all new connections
/// Sets the flag to suspend the all new connections
/// @param reason User visible reason to suspend connections
void
setConnectionsSuspended
(
QString
reason
);
///
@brief
Sets the flag to allow new connections to be made
/// Sets the flag to allow new connections to be made
void
setConnectionsAllowed
(
void
)
{
_connectionsSuspended
=
false
;
}
/// @brief Deletes the specified link. Will disconnect if connected.
/// Adds the link to the LinkManager. LinkManager takes ownership of this object. To delete
/// it, call LinkManager::deleteLink.
void
addLink
(
LinkInterface
*
link
);
/// Deletes the specified link. Will disconnect if connected.
void
deleteLink
(
LinkInterface
*
link
);
public
slots
:
/// @brief Adds the link to the LinkManager. LinkManager takes ownership of this object. To delete
// it, call LinkManager::deleteLink.
void
add
(
LinkInterface
*
link
);
void
addProtocol
(
LinkInterface
*
link
,
ProtocolInterface
*
protocol
);
/// Re-connects all existing links
bool
connectAll
();
bool
connectLink
(
LinkInterface
*
link
);
/// Disconnects all existing links
bool
disconnectAll
();
/// Connect the specified link
bool
connectLink
(
LinkInterface
*
link
);
/// Disconnect the specified link
bool
disconnectLink
(
LinkInterface
*
link
);
/// Returns the one mavlink protocol object in the system
MAVLinkProtocol
*
mavlink
(
void
)
{
return
_mavlink
;
}
signals:
void
newLink
(
LinkInterface
*
link
);
void
linkDeleted
(
LinkInterface
*
link
);
private:
///
@brief
All access to LinkManager is through LinkManager::instance
/// All access to LinkManager is through LinkManager::instance
LinkManager
(
QObject
*
parent
=
NULL
,
bool
registerSingleton
=
true
);
// LinkManager unit test is allowed to new LinkManager objects
//
/
LinkManager unit test is allowed to new LinkManager objects
friend
class
LinkManagerTest
;
static
LinkManager
*
_instance
;
bool
_connectionsSuspendedMsg
(
void
)
;
QList
<
LinkInterface
*>
_links
;
QMultiMap
<
ProtocolInterface
*
,
LinkInterface
*>
_protocolLinks
;
QMutex
_dataMutex
;
static
LinkManager
*
_instance
;
/// LinkManager singleton
bool
_connectionsSuspendedMsg
(
void
);
QList
<
LinkInterface
*>
_links
;
///< List of available links
QMutex
_linkListMutex
;
///< Mutex for thread safe access to _links list
bool
_connectionsSuspended
;
///< true: all new connections should not be allowed
QString
_connectionsSuspendedReason
;
///< User visible reason for suspension
bool
_connectionsSuspended
;
///< true: all new connections should not be allowed
QString
_connectionsSuspendedReason
;
///< User visible reason for suspension
MAVLinkProtocol
*
_mavlink
;
///< The one and only mavlink protocol
};
#endif
src/comm/MAVLinkProtocol.cc
View file @
42351ee0
...
...
@@ -179,14 +179,25 @@ void MAVLinkProtocol::resetMetadataForLink(const LinkInterface *link)
currLossCounter
[
linkId
]
=
0
;
}
void
MAVLinkProtocol
::
link
StatusChanged
(
bool
connecte
d
)
void
MAVLinkProtocol
::
link
Connected
(
voi
d
)
{
LinkInterface
*
link
=
qobject_cast
<
LinkInterface
*>
(
QObject
::
sender
());
Q_ASSERT
(
link
);
if
(
link
==
NULL
)
{
Q_ASSERT
(
false
);
return
;
}
_linkStatusChanged
(
link
,
true
);
}
void
MAVLinkProtocol
::
linkDisconnected
(
void
)
{
LinkInterface
*
link
=
qobject_cast
<
LinkInterface
*>
(
QObject
::
sender
());
Q_ASSERT
(
link
);
_linkStatusChanged
(
link
,
false
);
}
void
MAVLinkProtocol
::
_linkStatusChanged
(
LinkInterface
*
link
,
bool
connected
)
{
Q_ASSERT
(
link
);
if
(
connected
)
{
Q_ASSERT
(
!
_connectedLinks
.
contains
(
link
));
...
...
@@ -441,7 +452,7 @@ void MAVLinkProtocol::receiveBytes(LinkInterface* link, QByteArray b)
if
(
m_multiplexingEnabled
)
{
// Get all links connected to this unit
QList
<
LinkInterface
*>
links
=
LinkManager
::
instance
()
->
getLinks
ForProtocol
(
this
);
QList
<
LinkInterface
*>
links
=
LinkManager
::
instance
()
->
getLinks
(
);
// Emit message on all links that are currently connected
foreach
(
LinkInterface
*
currLink
,
links
)
...
...
@@ -486,7 +497,7 @@ int MAVLinkProtocol::getComponentId()
void
MAVLinkProtocol
::
sendMessage
(
mavlink_message_t
message
)
{
// Get all links connected to this unit
QList
<
LinkInterface
*>
links
=
LinkManager
::
instance
()
->
getLinks
ForProtocol
(
this
);
QList
<
LinkInterface
*>
links
=
LinkManager
::
instance
()
->
getLinks
(
);
// Emit message on all links that are currently connected
QList
<
LinkInterface
*>::
iterator
i
;
...
...
src/comm/MAVLinkProtocol.h
View file @
42351ee0
...
...
@@ -38,7 +38,6 @@ This file is part of the QGROUNDCONTROL project
#include <QMap>
#include <QByteArray>
#include "ProtocolInterface.h"
#include "LinkInterface.h"
#include "QGCMAVLink.h"
#include "QGC.h"
...
...
@@ -51,10 +50,10 @@ This file is part of the QGROUNDCONTROL project
* for more information, please see the official website.
* @ref http://pixhawk.ethz.ch/software/mavlink/
**/
class
MAVLinkProtocol
:
public
ProtocolInterface
class
MAVLinkProtocol
:
public
QThread
{
Q_OBJECT
public:
MAVLinkProtocol
();
~
MAVLinkProtocol
();
...
...
@@ -143,7 +142,10 @@ public:
public
slots
:
/** @brief Receive bytes from a communication interface */
void
receiveBytes
(
LinkInterface
*
link
,
QByteArray
b
);
void
linkStatusChanged
(
bool
connected
);
void
linkConnected
(
void
);
void
linkDisconnected
(
void
);
/** @brief Send MAVLink message through serial interface */
void
sendMessage
(
mavlink_message_t
message
);
/** @brief Send MAVLink message */
...
...
@@ -257,6 +259,9 @@ signals:
void
actionGuardChanged
(
bool
enabled
);
/** @brief Emitted if actiion request timeout changed */
void
actionRetransmissionTimeoutChanged
(
int
ms
);
/** @brief Update the packet loss from one system */
void
receiveLossChanged
(
int
uasId
,
float
loss
);
/**
* @brief Emitted if a new radio status packet received
*
...
...
@@ -275,6 +280,7 @@ signals:
void
saveTempFlightDataLog
(
QString
tempLogfile
);
private:
void
_linkStatusChanged
(
LinkInterface
*
link
,
bool
connected
);
bool
_closeLogFile
(
void
);
void
_startLogging
(
void
);
void
_stopLogging
(
void
);
...
...
src/comm/MAVLinkSimulationLink.cc
View file @
42351ee0
...
...
@@ -106,7 +106,7 @@ MAVLinkSimulationLink::MAVLinkSimulationLink(QString readFile, QString writeFile
srand
(
QTime
::
currentTime
().
msec
());
maxTimeNoise
=
0
;
this
->
id
=
getNextLinkId
();
LinkManager
::
instance
()
->
add
(
this
);
LinkManager
::
instance
()
->
add
Link
(
this
);
}
MAVLinkSimulationLink
::~
MAVLinkSimulationLink
()
...
...
@@ -802,7 +802,6 @@ bool MAVLinkSimulationLink::_disconnect(void)
_isConnected
=
false
;
emit
disconnected
();
emit
connected
(
false
);
//exit();
}
...
...
@@ -820,7 +819,6 @@ bool MAVLinkSimulationLink::_connect(void)
{
_isConnected
=
true
;
emit
connected
();
emit
connected
(
true
);
start
(
LowPriority
);
MAVLinkSimulationMAV
*
mav1
=
new
MAVLinkSimulationMAV
(
this
,
1
,
37.480391
,
-
122.282883
);
...
...
src/comm/SerialLink.cc
View file @
42351ee0
...
...
@@ -240,7 +240,6 @@ void SerialLink::run()
m_port
=
NULL
;
emit
disconnected
();
emit
connected
(
false
);
}
QGC
::
SLEEP
::
msleep
(
500
);
...
...
@@ -340,7 +339,6 @@ void SerialLink::run()
m_port
=
NULL
;
emit
disconnected
();
emit
connected
(
false
);
}
}
...
...
@@ -503,7 +501,6 @@ bool SerialLink::hardwareConnect(QString &type)
emit
communicationUpdate
(
getName
(),
"Opened port!"
);
emit
connected
();
emit
connected
(
true
);
qDebug
()
<<
"CONNECTING LINK: "
<<
__FILE__
<<
__LINE__
<<
"type:"
<<
type
<<
"with settings"
<<
m_port
->
portName
()
<<
getBaudRate
()
<<
getDataBits
()
<<
getParityType
()
<<
getStopBits
();
...
...
src/comm/TCPLink.cc
View file @
42351ee0
...
...
@@ -191,7 +191,6 @@ bool TCPLink::_disconnect(void)
_socket
=
NULL
;
emit
disconnected
();
emit
connected
(
false
);
}
return
true
;
...
...
@@ -241,7 +240,6 @@ bool TCPLink::_hardwareConnect(void)
}
_socketIsConnected
=
true
;
emit
connected
(
true
);
emit
connected
();
return
true
;
...
...
src/comm/UDPLink.cc
View file @
42351ee0
...
...
@@ -287,7 +287,6 @@ bool UDPLink::_disconnect(void)
connectState
=
false
;
emit
disconnected
();
emit
connected
(
false
);
return
!
connectState
;
}
...
...
@@ -352,7 +351,6 @@ bool UDPLink::hardwareConnect(void)
//QObject::connect(socket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams()));
QObject
::
connect
(
socket
,
SIGNAL
(
readyRead
()),
this
,
SLOT
(
readBytes
()));
emit
connected
(
connectState
);
if
(
connectState
)
{
emit
connected
();
}
...
...
src/qgcunittest/LinkManagerTest.cc
View file @
42351ee0
...
...
@@ -85,7 +85,7 @@ void LinkManagerTest::_add_test(void)
Q_ASSERT
(
_linkMgr
->
getLinks
().
count
()
==
0
);
MockLink
*
link
=
new
MockLink
();
_linkMgr
->
add
(
link
);
_linkMgr
->
add
Link
(
link
);
QList
<
LinkInterface
*>
links
=
_linkMgr
->
getLinks
();
QCOMPARE
(
links
.
count
(),
1
);
...
...
@@ -98,7 +98,7 @@ void LinkManagerTest::_delete_test(void)
Q_ASSERT
(
_linkMgr
->
getLinks
().
count
()
==
0
);
MockLink
*
link
=
new
MockLink
();
_linkMgr
->
add
(
link
);
_linkMgr
->
add
Link
(
link
);
_linkMgr
->
deleteLink
(
link
);
QCOMPARE
(
_linkMgr
->
getLinks
().
count
(),
0
);
...
...
@@ -111,7 +111,7 @@ void LinkManagerTest::_addSignals_test(void)
Q_ASSERT
(
_multiSpy
->
checkNoSignals
()
==
true
);
MockLink
*
link
=
new
MockLink
();
_linkMgr
->
add
(
link
);
_linkMgr
->
add
Link
(
link
);
QCOMPARE
(
_multiSpy
->
checkOnlySignalByMask
(
newLinkSignalMask
),
true
);
QSignalSpy
*
spy
=
_multiSpy
->
getSpyByIndex
(
newLinkSignalIndex
);
...
...
@@ -132,7 +132,7 @@ void LinkManagerTest::_deleteSignals_test(void)
Q_ASSERT
(
_multiSpy
->
checkNoSignals
()
==
true
);
MockLink
*
link
=
new
MockLink
();
_linkMgr
->
add
(
link
);
_linkMgr
->
add
Link
(
link
);
_multiSpy
->
clearAllSignals
();
_linkMgr
->
deleteLink
(
link
);
...
...
src/qgcunittest/MainWindowTest.cc
View file @
42351ee0
...
...
@@ -76,8 +76,7 @@ void MainWindowTest::_connectWindowClose_test(void)
MockLink
*
link
=
new
MockLink
();
Q_CHECK_PTR
(
link
);
// FIXME: LinkManager/MainWindow needs to be re-architected so that you don't have to addLink to MainWindow to get things to work
_mainWindow
->
addLink
(
link
);
LinkManager
::
instance
()
->
addLink
(
link
);
linkMgr
->
connectLink
(
link
);
QTest
::
qWait
(
5000
);
// Give enough time for UI to settle and heartbeats to go through
...
...
src/qgcunittest/MavlinkLogTest.cc
View file @
42351ee0
...
...
@@ -147,8 +147,7 @@ void MavlinkLogTest::_connectLog_test(void)
MockLink
*
link
=
new
MockLink
();
Q_CHECK_PTR
(
link
);
// FIXME: LinkManager/MainWindow needs to be re-architected so that you don't have to addLink to MainWindow to get things to work
mainWindow
->
addLink
(
link
);
LinkManager
::
instance
()
->
addLink
(
link
);
linkMgr
->
connectLink
(
link
);
QTest
::
qWait
(
5000
);
// Give enough time for UI to settle and heartbeats to go through
...
...
src/qgcunittest/MockLink.cc
View file @
42351ee0
...
...
@@ -104,7 +104,6 @@ bool MockLink::_connect(void)
_connected
=
true
;
start
();
emit
connected
();
emit
connected
(
true
);
}
return
true
;
...
...
@@ -116,7 +115,6 @@ bool MockLink::_disconnect(void)
_connected
=
false
;
exit
();
emit
disconnected
();
emit
connected
(
false
);
}
return
true
;
...
...
src/qgcunittest/TCPLinkTest.cc
View file @
42351ee0
...
...
@@ -56,7 +56,6 @@ void TCPLinkUnitTest::init(void)
_rgSignals
[
bytesReceivedSignalIndex
]
=
SIGNAL
(
bytesReceived
(
LinkInterface
*
,
QByteArray
));
_rgSignals
[
connectedSignalIndex
]
=
SIGNAL
(
connected
(
void
));
_rgSignals
[
disconnectedSignalIndex
]
=
SIGNAL
(
disconnected
(
void
));
_rgSignals
[
connected2SignalIndex
]
=
SIGNAL
(
connected
(
bool
));
_rgSignals
[
nameChangedSignalIndex
]
=
SIGNAL
(
nameChanged
(
QString
));
_rgSignals
[
communicationErrorSignalIndex
]
=
SIGNAL
(
communicationError
(
const
QString
&
,
const
QString
&
));
_rgSignals
[
communicationUpdateSignalIndex
]
=
SIGNAL
(
communicationUpdate
(
const
QString
&
,
const
QString
&
));
...
...
@@ -157,11 +156,9 @@ void TCPLinkUnitTest::_connectSucceed_test(void)
// Connect to the server
QCOMPARE
(
_link
->
_connect
(),
true
);
// Make sure we get the
two different
connected signals
// Make sure we get the connected signals
QCOMPARE
(
_multiSpy
->
waitForSignalByIndex
(
connectedSignalIndex
,
10000
),
true
);
QCOMPARE
(
_multiSpy
->
checkOnlySignalByMask
(
connectedSignalMask
|
connected2SignalMask
),
true
);
QList
<
QVariant
>
arguments
=
_multiSpy
->
getSpyByIndex
(
connected2SignalIndex
)
->
takeFirst
();
QCOMPARE
(
arguments
.
at
(
0
).
toBool
(),
true
);
QCOMPARE
(
_multiSpy
->
checkOnlySignalByMask
(
connectedSignalMask
),
true
);
_multiSpy
->
clearAllSignals
();
// Test link->server data path
...
...
@@ -186,7 +183,7 @@ void TCPLinkUnitTest::_connectSucceed_test(void)
QCOMPARE
(
_multiSpy
->
checkOnlySignalByMask
(
bytesReceivedSignalMask
),
true
);
// Read the data and make sure it matches
arguments
=
_multiSpy
->
getSpyByIndex
(
bytesReceivedSignalIndex
)
->
takeFirst
();
QList
<
QVariant
>
arguments
=
_multiSpy
->
getSpyByIndex
(
bytesReceivedSignalIndex
)
->
takeFirst
();
QVERIFY
(
arguments
.
at
(
1
).
toByteArray
()
==
bytesOut
);
_multiSpy
->
clearAllSignals
();
...
...
@@ -194,11 +191,9 @@ void TCPLinkUnitTest::_connectSucceed_test(void)
// Disconnect the link
_link
->
_disconnect
();
// Make sure we get the disconnected signal
s
on link side
// Make sure we get the disconnected signal on link side
QCOMPARE
(
_multiSpy
->
waitForSignalByIndex
(
disconnectedSignalIndex
,
1000
),
true
);
QCOMPARE
(
_multiSpy
->
checkOnlySignalByMask
(
disconnectedSignalMask
|
connected2SignalMask
),
true
);
arguments
=
_multiSpy
->
getSpyByIndex
(
connected2SignalIndex
)
->
takeFirst
();
QCOMPARE
(
arguments
.
at
(
0
).
toBool
(),
false
);
QCOMPARE
(
_multiSpy
->
checkOnlySignalByMask
(
disconnectedSignalMask
),
true
);
_multiSpy
->
clearAllSignals
();
// Try to connect again to make sure everything was cleaned up correctly from previous connection
...
...
@@ -206,11 +201,9 @@ void TCPLinkUnitTest::_connectSucceed_test(void)
// Connect to the server
QCOMPARE
(
_link
->
_connect
(),
true
);
// Make sure we get the
two different connected signals
// Make sure we get the
connected signal
QCOMPARE
(
_multiSpy
->
waitForSignalByIndex
(
connectedSignalIndex
,
1000
),
true
);
QCOMPARE
(
_multiSpy
->
checkOnlySignalByMask
(
connectedSignalMask
|
connected2SignalMask
),
true
);
arguments
=
_multiSpy
->
getSpyByIndex
(
connected2SignalIndex
)
->
takeFirst
();
QCOMPARE
(
arguments
.
at
(
0
).
toBool
(),
true
);
QCOMPARE
(
_multiSpy
->
checkOnlySignalByMask
(
connectedSignalMask
),
true
);
_multiSpy
->
clearAllSignals
();
server
->
quit
();
...
...
src/qgcunittest/TCPLinkTest.h
View file @
42351ee0
...
...
@@ -58,7 +58,6 @@ private:
bytesReceivedSignalIndex
=
0
,
connectedSignalIndex
,
disconnectedSignalIndex
,
connected2SignalIndex
,
nameChangedSignalIndex
,
communicationErrorSignalIndex
,
communicationUpdateSignalIndex
,
...
...
@@ -70,7 +69,6 @@ private:
bytesReceivedSignalMask
=
1
<<
bytesReceivedSignalIndex
,
connectedSignalMask
=
1
<<
connectedSignalIndex
,
disconnectedSignalMask
=
1
<<
disconnectedSignalIndex
,
connected2SignalMask
=
1
<<
connected2SignalIndex
,
nameChangedSignalMask
=
1
<<
nameChangedSignalIndex
,
communicationErrorSignalMask
=
1
<<
communicationErrorSignalIndex
,
communicationUpdateSignalMask
=
1
<<
communicationUpdateSignalIndex
,
...
...
src/qgcunittest/UnitTest.cc
View file @
42351ee0
...
...
@@ -135,6 +135,8 @@ void UnitTest::cleanup(void)
QEXPECT_FAIL
(
""
,
"Expecting failure due internal testing"
,
Continue
);
}
QCOMPARE
(
_missedFileDialogCount
,
0
);
qgcApp
()
->
destroySingletonsForUnitTest
();
}
void
UnitTest
::
setExpectedMessageBox
(
QMessageBox
::
StandardButton
response
)
...
...
src/uas/QGCUASFileManager.cc
View file @
42351ee0
...
...
@@ -481,7 +481,7 @@ void QGCUASFileManager::_sendRequest(Request* request)
request
->
hdr
.
seqNumber
=
_lastOutgoingSeqNumber
;
if
(
_systemIdQGC
==
0
)
{
_systemIdQGC
=
MainWindow
::
instance
()
->
getMAVL
ink
()
->
getSystemId
();
_systemIdQGC
=
LinkManager
::
instance
()
->
mavl
ink
()
->
getSystemId
();
}
Q_ASSERT
(
_mav
);
...
...
src/uas/UAS.cc
View file @
42351ee0
...
...
@@ -1765,7 +1765,7 @@ void UAS::sendMessage(mavlink_message_t message)
void
UAS
::
forwardMessage
(
mavlink_message_t
message
)
{
// Emit message on all links that are currently connected
QList
<
LinkInterface
*>
link_list
=
LinkManager
::
instance
()
->
getLinks
ForProtocol
(
mavlink
);
QList
<
LinkInterface
*>
link_list
=
LinkManager
::
instance
()
->
getLinks
(
);
foreach
(
LinkInterface
*
link
,
link_list
)
{
...
...
src/uas/UASParameterCommsMgr.cc
View file @
42351ee0
...
...
@@ -71,7 +71,7 @@ void UASParameterCommsMgr::loadParamCommsSettings()
void
UASParameterCommsMgr
::
_sendParamRequestListMsg
(
void
)
{
MAVLinkProtocol
*
mavlink
=
MainWindow
::
instance
()
->
getMAVL
ink
();
MAVLinkProtocol
*
mavlink
=
LinkManager
::
instance
()
->
mavl
ink
();
Q_ASSERT
(
mavlink
);
mavlink_message_t
msg
;
...
...
src/ui/CommConfigurationWindow.cc
View file @
42351ee0
...
...
@@ -60,7 +60,7 @@ This file is part of the QGROUNDCONTROL project
#include "LinkManager.h"
#include "MainWindow.h"
CommConfigurationWindow
::
CommConfigurationWindow
(
LinkInterface
*
link
,
ProtocolInterface
*
protocol
,
QWidget
*
parent
)
:
QDialog
(
parent
)
CommConfigurationWindow
::
CommConfigurationWindow
(
LinkInterface
*
link
,
QWidget
*
parent
)
:
QDialog
(
parent
)
{
this
->
link
=
link
;
...
...
@@ -112,7 +112,6 @@ CommConfigurationWindow::CommConfigurationWindow(LinkInterface* link, ProtocolIn
// Create configuration action for this link
// Connect the current UAS
action
=
new
QAction
(
QIcon
(
":/files/images/devices/network-wireless.svg"
),
""
,
this
);
LinkManager
::
instance
()
->
add
(
link
);
action
->
setData
(
link
->
getId
());
action
->
setEnabled
(
true
);
action
->
setVisible
(
true
);
...
...
@@ -127,12 +126,11 @@ CommConfigurationWindow::CommConfigurationWindow(LinkInterface* link, ProtocolIn
connect
(
ui
.
closeButton
,
SIGNAL
(
clicked
()),
this
->
window
(),
SLOT
(
close
()));
connect
(
ui
.
deleteButton
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
remove
()));
connect
(
this
->
link
,
SIGNAL
(
connected
(
bool
)),
this
,
SLOT
(
connectionState
(
bool
))
);
connect
(
link
,
&
LinkInterface
::
connected
,
this
,
&
CommConfigurationWindow
::
_linkConnected
);
connect
(
link
,
&
LinkInterface
::
disconnected
,
this
,
&
CommConfigurationWindow
::
_linkDisconnected
);
// Fill in the current data
if
(
this
->
link
->
isConnected
())
ui
.
connectButton
->
setChecked
(
true
);
//connect(this->link, SIGNAL(connected(bool)), ui.connectButton, SLOT(setChecked(bool)));
if
(
this
->
link
->
isConnected
())
{
ui
.
connectionStatusLabel
->
setText
(
tr
(
"Connected"
));
...
...
@@ -226,14 +224,10 @@ CommConfigurationWindow::CommConfigurationWindow(LinkInterface* link, ProtocolIn
connect
(
ui
.
linkType
,
SIGNAL
(
currentIndexChanged
(
int
)),
this
,
SLOT
(
linkCurrentIndexChanged
(
int
)));
// Open details pane for MAVLink if necessary
MAVLinkProtocol
*
mavlink
=
dynamic_cast
<
MAVLinkProtocol
*>
(
protocol
);
if
(
mavlink
!=
0
)
{
QWidget
*
conf
=
new
MAVLinkSettingsWidget
(
mavlink
,
this
);
ui
.
protocolScrollArea
->
setWidget
(
conf
);
ui
.
protocolGroupBox
->
setTitle
(
protocol
->
getName
()
+
" (Global Settings)"
);
}
else
{
qDebug
()
<<
"Protocol is NOT MAVLink, can't open configuration window"
;
}
MAVLinkProtocol
*
mavlink
=
LinkManager
::
instance
()
->
mavlink
();
QWidget
*
conf
=
new
MAVLinkSettingsWidget
(
mavlink
,
this
);
ui
.
protocolScrollArea
->
setWidget
(
conf
);
ui
.
protocolGroupBox
->
setTitle
(
mavlink
->
getName
()
+
" (Global Settings)"
);
// Open details for UDP link if necessary
// TODO
...
...
@@ -288,7 +282,6 @@ void CommConfigurationWindow::setLinkType(qgc_link_t linktype)
{
UDPLink
*
udp
=
new
UDPLink
();
tmpLink
=
udp
;
MainWindow
::
instance
()
->
addLink
(
tmpLink
);
break
;
}
...
...
@@ -296,7 +289,6 @@ void CommConfigurationWindow::setLinkType(qgc_link_t linktype)
{
TCPLink
*
tcp
=
new
TCPLink
();
tmpLink
=
tcp
;
MainWindow
::
instance
()
->
addLink
(
tmpLink
);
break
;
}
...
...
@@ -305,7 +297,6 @@ void CommConfigurationWindow::setLinkType(qgc_link_t linktype)
{
OpalLink
*
opal
=
new
OpalLink
();
tmpLink
=
opal
;
MainWindow
::
instance
()
->
addLink
(
tmpLink
);
break
;
}
#endif // QGC_RTLAB_ENABLED
...
...
@@ -315,7 +306,6 @@ void CommConfigurationWindow::setLinkType(qgc_link_t linktype)
{
MockLink
*
mock
=
new
MockLink
;
tmpLink
=
mock
;
MainWindow
::
instance
()
->
addLink
(
tmpLink
);
break
;
}
#endif
...
...
@@ -325,10 +315,13 @@ void CommConfigurationWindow::setLinkType(qgc_link_t linktype)
{
SerialLink
*
serial
=
new
SerialLink
();
tmpLink
=
serial
;
MainWindow
::
instance
()
->
addLink
(
tmpLink
);
break
;
}
}
if
(
tmpLink
)
{
LinkManager
::
instance
()
->
addLink
(
tmpLink
);
}
// trigger new window
const
int32_t
&
linkIndex
(
LinkManager
::
instance
()
->
getLinks
().
indexOf
(
tmpLink
));
...
...
@@ -385,7 +378,15 @@ void CommConfigurationWindow::remove()
this
->
deleteLater
();
}
void
CommConfigurationWindow
::
connectionState
(
bool
connect
)
void
CommConfigurationWindow
::
_linkConnected
(
void
)
{
_connectionState
(
true
);
}
void
CommConfigurationWindow
::
_linkDisconnected
(
void
)
{
_connectionState
(
false
);
}
void
CommConfigurationWindow
::
_connectionState
(
bool
connect
)
{
ui
.
connectButton
->
setChecked
(
connect
);
if
(
connect
)
{
...
...
src/ui/CommConfigurationWindow.h
View file @
42351ee0
...
...
@@ -73,7 +73,7 @@ class CommConfigurationWindow : public QDialog
Q_OBJECT
public:
CommConfigurationWindow
(
LinkInterface
*
link
,
ProtocolInterface
*
protocol
,
QWidget
*
parent
=
0
);
CommConfigurationWindow
(
LinkInterface
*
link
,
QWidget
*
parent
=
0
);
~
CommConfigurationWindow
();
QAction
*
getAction
();
...
...
@@ -86,12 +86,16 @@ public slots:
/** @brief Set the protocol for this link */
void
setProtocol
(
int
protocol
);
void
setConnection
();
void
connectionState
(
bool
connect
);
void
setLinkName
(
QString
name
);
/** @brief Disconnects the associated link, removes it from all menus and closes the window. */
void
remove
();
private
slots
:
void
_linkConnected
(
void
);
void
_linkDisconnected
(
void
);
private:
void
_connectionState
(
bool
connect
);
Ui
::
commSettings
ui
;
LinkInterface
*
link
;
...
...
src/ui/DebugConsole.cc
View file @
42351ee0
...
...
@@ -217,7 +217,7 @@ void DebugConsole::linkSelected(int linkId)
if
(
currLink
)
{
disconnect
(
currLink
,
SIGNAL
(
bytesReceived
(
LinkInterface
*
,
QByteArray
)),
this
,
SLOT
(
receiveBytes
(
LinkInterface
*
,
QByteArray
)));
disconnect
(
currLink
,
SIGNAL
(
connected
(
bool
)),
this
,
SLOT
(
setConnectionState
(
bool
))
);
disconnect
(
currLink
,
&
LinkInterface
::
connected
,
this
,
&
DebugConsole
::
_linkConnected
);
disconnect
(
currLink
,
SIGNAL
(
communicationUpdate
(
QString
,
QString
)),
this
,
SLOT
(
linkStatusUpdate
(
QString
,
QString
)));
snapShotTimer
.
stop
();
}
...
...
@@ -229,9 +229,9 @@ void DebugConsole::linkSelected(int linkId)
if
(
linkId
!=
-
1
)
{
currLink
=
links
[
linkId
];
connect
(
currLink
,
SIGNAL
(
bytesReceived
(
LinkInterface
*
,
QByteArray
)),
this
,
SLOT
(
receiveBytes
(
LinkInterface
*
,
QByteArray
)));
connect
(
currLink
,
SIGNAL
(
connected
(
bool
)),
this
,
SLOT
(
setConnectionState
(
bool
))
);
disconnect
(
currLink
,
&
LinkInterface
::
connected
,
this
,
&
DebugConsole
::
_linkConnected
);
connect
(
currLink
,
SIGNAL
(
communicationUpdate
(
QString
,
QString
)),
this
,
SLOT
(
linkStatusUpdate
(
QString
,
QString
)));
setConnectionState
(
currLink
->
isConnected
());
_
setConnectionState
(
currLink
->
isConnected
());
snapShotTimer
.
start
();
}
}
...
...
@@ -761,10 +761,20 @@ void DebugConsole::hold(bool hold)
}
}
void
DebugConsole
::
_linkConnected
(
void
)
{
_setConnectionState
(
true
);
}
void
DebugConsole
::
_linkDisconnected
(
void
)
{
_setConnectionState
(
false
);
}
/**
* Sets the connection state the widget shows to this state
*/
void
DebugConsole
::
setConnectionState
(
bool
connected
)
void
DebugConsole
::
_
setConnectionState
(
bool
connected
)
{
if
(
connected
)
{
m_ui
->
connectButton
->
setText
(
tr
(
"Disconn."
));
...
...
src/ui/DebugConsole.h
View file @
42351ee0
...
...
@@ -81,8 +81,6 @@ public slots:
void
MAVLINKfilterEnabled
(
bool
filter
);
/** @brief Freeze input, do not store new incoming data */
void
hold
(
bool
hold
);
/** @brief Set connection state of the current link */
void
setConnectionState
(
bool
);
/** @brief Handle the connect button */
void
handleConnectButton
();
/** @brief Enable auto-freeze mode if traffic intensity is too high to display */
...
...
@@ -144,8 +142,15 @@ protected:
QStringList
commandHistory
;
QString
currCommand
;
int
commandIndex
;
private
slots
:
void
_linkConnected
(
void
);
void
_linkDisconnected
(
void
);
private:
/** @brief Set connection state of the current link */
void
_setConnectionState
(
bool
);
Ui
::
DebugConsole
*
m_ui
;
};
...
...
src/ui/MAVLinkSettingsWidget.cc
View file @
42351ee0
...
...
@@ -142,7 +142,7 @@ void MAVLinkSettingsWidget::enableDroneOS(bool enable)
// Delete from all lists first
UDPLink
*
firstUdp
=
NULL
;
QList
<
LinkInterface
*>
links
=
LinkManager
::
instance
()
->
getLinks
ForProtocol
(
protocol
);
QList
<
LinkInterface
*>
links
=
LinkManager
::
instance
()
->
getLinks
(
);
foreach
(
LinkInterface
*
link
,
links
)
{
UDPLink
*
udp
=
dynamic_cast
<
UDPLink
*>
(
link
);
...
...
src/ui/MainWindow.cc
View file @
42351ee0
...
...
@@ -112,7 +112,6 @@ void MainWindow::deleteInstance(void)
MainWindow
::
MainWindow
(
QSplashScreen
*
splashScreen
,
enum
MainWindow
::
CUSTOM_MODE
mode
)
:
currentView
(
VIEW_FLIGHT
),
currentStyle
(
QGC_MAINWINDOW_STYLE_DARK
),
mavlink
(
new
MAVLinkProtocol
()),
centerStackActionGroup
(
new
QActionGroup
(
this
)),
autoReconnect
(
false
),
simulationLink
(
NULL
),
...
...
@@ -131,8 +130,8 @@ MainWindow::MainWindow(QSplashScreen* splashScreen, enum MainWindow::CUSTOM_MODE
this
->
setAttribute
(
Qt
::
WA_DeleteOnClose
);
connect
(
menuActionHelper
,
SIGNAL
(
needToShowDockWidget
(
QString
,
bool
)),
SLOT
(
showDockWidget
(
QString
,
bool
)));
connect
(
mavlink
,
SIGNAL
(
protocolStatusMessage
(
const
QString
&
,
const
QString
&
)),
this
,
SLOT
(
showCriticalMessage
(
const
QString
&
,
const
QString
&
)));
connect
(
mavlink
,
SIGNAL
(
saveTempFlightDataLog
(
QString
)),
this
,
SLOT
(
_saveTempFlightDataLog
(
QString
)));
connect
(
LinkManager
::
instance
()
->
mavlink
()
,
SIGNAL
(
protocolStatusMessage
(
const
QString
&
,
const
QString
&
)),
this
,
SLOT
(
showCriticalMessage
(
const
QString
&
,
const
QString
&
)));
connect
(
LinkManager
::
instance
()
->
mavlink
()
,
SIGNAL
(
saveTempFlightDataLog
(
QString
)),
this
,
SLOT
(
_saveTempFlightDataLog
(
QString
)));
loadSettings
();
...
...
@@ -242,11 +241,11 @@ MainWindow::MainWindow(QSplashScreen* splashScreen, enum MainWindow::CUSTOM_MODE
QList
<
LinkInterface
*>
links
=
LinkManager
::
instance
()
->
getLinks
();
foreach
(
LinkInterface
*
link
,
links
)
{
this
->
addLink
(
link
);
_addLinkMenu
(
link
);
}
connect
(
LinkManager
::
instance
(),
SIGNAL
(
newLink
(
LinkInterface
*
)),
this
,
SLOT
(
addLink
(
LinkInterface
*
))
);
connect
(
LinkManager
::
instance
(),
&
LinkManager
::
newLink
,
this
,
&
MainWindow
::
_addLinkMenu
);
// Connect user interface devices
emit
initStatusChanged
(
tr
(
"Initializing joystick interface"
),
Qt
::
AlignLeft
|
Qt
::
AlignBottom
,
QColor
(
62
,
93
,
141
));
joystick
=
new
JoystickInput
();
...
...
@@ -274,8 +273,7 @@ MainWindow::MainWindow(QSplashScreen* splashScreen, enum MainWindow::CUSTOM_MODE
SerialLink
*
link
=
new
SerialLink
();
// Add to registry
linkMgr
->
add
(
link
);
linkMgr
->
addProtocol
(
link
,
mavlink
);
linkMgr
->
addLink
(
link
);
linkMgr
->
connectLink
(
link
);
}
...
...
@@ -365,11 +363,6 @@ MainWindow::MainWindow(QSplashScreen* splashScreen, enum MainWindow::CUSTOM_MODE
MainWindow
::~
MainWindow
()
{
if
(
mavlink
)
{
delete
mavlink
;
mavlink
=
NULL
;
}
if
(
simulationLink
)
{
delete
simulationLink
;
...
...
@@ -496,12 +489,12 @@ void MainWindow::buildCustomWidget()
void
MainWindow
::
buildCommonWidgets
()
{
// Add generic MAVLink decoder
mavlinkDecoder
=
new
MAVLinkDecoder
(
mavlink
,
this
);
mavlinkDecoder
=
new
MAVLinkDecoder
(
LinkManager
::
instance
()
->
mavlink
()
,
this
);
connect
(
mavlinkDecoder
,
SIGNAL
(
valueChanged
(
int
,
QString
,
QString
,
QVariant
,
quint64
)),
this
,
SIGNAL
(
valueChanged
(
int
,
QString
,
QString
,
QVariant
,
quint64
)));
// Log player
logPlayer
=
new
QGCMAVLinkLogPlayer
(
mavlink
,
statusBar
());
logPlayer
=
new
QGCMAVLinkLogPlayer
(
LinkManager
::
instance
()
->
mavlink
()
,
statusBar
());
statusBar
()
->
addPermanentWidget
(
logPlayer
);
// Initialize all of the views, if they haven't been already, and add their central widgets
...
...
@@ -588,7 +581,7 @@ void MainWindow::buildCommonWidgets()
createDockWidget
(
simView
,
new
PrimaryFlightDisplay
(
this
),
tr
(
"Primary Flight Display"
),
"PRIMARY_FLIGHT_DISPLAY_DOCKWIDGET"
,
VIEW_SIMULATION
,
Qt
::
RightDockWidgetArea
);
// Add dock widgets for the engineering view
createDockWidget
(
engineeringView
,
new
QGCMAVLinkInspector
(
mavlink
,
this
),
tr
(
"MAVLink Inspector"
),
"MAVLINK_INSPECTOR_DOCKWIDGET"
,
VIEW_ENGINEER
,
Qt
::
RightDockWidgetArea
);
createDockWidget
(
engineeringView
,
new
QGCMAVLinkInspector
(
LinkManager
::
instance
()
->
mavlink
()
,
this
),
tr
(
"MAVLink Inspector"
),
"MAVLINK_INSPECTOR_DOCKWIDGET"
,
VIEW_ENGINEER
,
Qt
::
RightDockWidgetArea
);
createDockWidget
(
engineeringView
,
new
ParameterInterface
(
this
),
tr
(
"Onboard Parameters"
),
"PARAMETER_INTERFACE_DOCKWIDGET"
,
VIEW_ENGINEER
,
Qt
::
RightDockWidgetArea
);
createDockWidget
(
engineeringView
,
new
QGCUASFileViewMulti
(
this
),
tr
(
"Onboard Files"
),
"FILE_VIEW_DOCKWIDGET"
,
VIEW_ENGINEER
,
Qt
::
RightDockWidgetArea
);
createDockWidget
(
engineeringView
,
new
HUD
(
320
,
240
,
this
),
tr
(
"Video Downlink"
),
"HEAD_UP_DISPLAY_DOCKWIDGET"
,
VIEW_ENGINEER
,
Qt
::
RightDockWidgetArea
);
...
...
@@ -669,7 +662,7 @@ void MainWindow::loadDockWidget(const QString& name)
}
else
if
(
name
==
"MAVLINK_INSPECTOR_DOCKWIDGET"
)
{
createDockWidget
(
centerStack
->
currentWidget
(),
new
QGCMAVLinkInspector
(
mavlink
,
this
),
tr
(
"MAVLink Inspector"
),
"MAVLINK_INSPECTOR_DOCKWIDGET"
,
currentView
,
Qt
::
RightDockWidgetArea
);
createDockWidget
(
centerStack
->
currentWidget
(),
new
QGCMAVLinkInspector
(
LinkManager
::
instance
()
->
mavlink
()
,
this
),
tr
(
"MAVLink Inspector"
),
"MAVLINK_INSPECTOR_DOCKWIDGET"
,
currentView
,
Qt
::
RightDockWidgetArea
);
}
else
if
(
name
==
"PARAMETER_INTERFACE_DOCKWIDGET"
)
{
...
...
@@ -800,7 +793,6 @@ void MainWindow::closeEvent(QCloseEvent *event)
storeViewState
();
storeSettings
();
mavlink
->
storeSettings
();
UASManager
::
instance
()
->
storeSettings
();
event
->
accept
();
}
...
...
@@ -812,7 +804,7 @@ void MainWindow::connectCommonWidgets()
{
if
(
infoDockWidget
&&
infoDockWidget
->
widget
())
{
connect
(
mavlink
,
SIGNAL
(
receiveLossChanged
(
int
,
float
)),
connect
(
LinkManager
::
instance
()
->
mavlink
()
,
SIGNAL
(
receiveLossChanged
(
int
,
float
)),
infoDockWidget
->
widget
(),
SLOT
(
updateSendLoss
(
int
,
float
)));
}
}
...
...
@@ -1290,13 +1282,13 @@ void MainWindow::showSettings()
settings
.
exec
();
}
// FIXME: Where is this called from
LinkInterface
*
MainWindow
::
addLink
()
{
SerialLink
*
link
=
new
SerialLink
();
// TODO This should be only done in the dialog itself
LinkManager
::
instance
()
->
add
(
link
);
LinkManager
::
instance
()
->
addProtocol
(
link
,
mavlink
);
LinkManager
::
instance
()
->
addLink
(
link
);
// Go fishing for this link's configuration window
QList
<
QAction
*>
actions
=
ui
.
menuNetwork
->
actions
();
...
...
@@ -1339,41 +1331,29 @@ bool MainWindow::configLink(LinkInterface *link)
return
found
;
}
void
MainWindow
::
addLink
(
LinkInterface
*
link
)
void
MainWindow
::
_addLinkMenu
(
LinkInterface
*
link
)
{
// IMPORTANT! KEEP THESE TWO LINES
// THEY MAKE SURE THE LINK IS PROPERLY REGISTERED
// BEFORE LINKING THE UI AGAINST IT
// Register (does nothing if already registered)
LinkManager
::
instance
()
->
add
(
link
);
LinkManager
::
instance
()
->
addProtocol
(
link
,
mavlink
);
// Go fishing for this link's configuration window
QList
<
QAction
*>
actions
=
ui
.
menuNetwork
->
actions
();
bool
found
(
false
)
;
bool
alreadyAdded
=
false
;
const
int32_t
&
linkIndex
(
LinkManager
::
instance
()
->
getLinks
().
indexOf
(
link
));
const
int32_t
&
linkID
(
LinkManager
::
instance
()
->
getLinks
()[
linkIndex
]
->
getId
());
foreach
(
QAction
*
act
,
actions
)
{
if
(
act
->
data
().
toInt
()
==
linkID
)
{
found
=
true
;
foreach
(
QAction
*
act
,
actions
)
{
if
(
act
->
data
().
toInt
()
==
linkID
)
{
alreadyAdded
=
true
;
break
;
}
}
if
(
!
found
)
{
CommConfigurationWindow
*
commWidget
=
new
CommConfigurationWindow
(
link
,
mavlink
,
this
);
if
(
!
alreadyAdded
)
{
CommConfigurationWindow
*
commWidget
=
new
CommConfigurationWindow
(
link
,
this
);
commsWidgetList
.
append
(
commWidget
);
connect
(
commWidget
,
SIGNAL
(
destroyed
(
QObject
*
)),
this
,
SLOT
(
commsWidgetDestroyed
(
QObject
*
)));
QAction
*
action
=
commWidget
->
getAction
();
ui
.
menuNetwork
->
addAction
(
action
);
// Error handling
connect
(
link
,
SIGNAL
(
communicationError
(
QString
,
QString
)),
this
,
SLOT
(
showCriticalMessage
(
QString
,
QString
)),
Qt
::
QueuedConnection
);
}
}
...
...
@@ -1750,6 +1730,7 @@ bool MainWindow::dockWidgetTitleBarsEnabled() const
return
menuActionHelper
->
dockWidgetTitleBarsEnabled
();
}
/// @brief Save the specified Flight Data Log
void
MainWindow
::
_saveTempFlightDataLog
(
QString
tempLogfile
)
{
QString
saveFilename
=
QGCFileDialog
::
getSaveFileName
(
this
,
...
...
src/ui/MainWindow.h
View file @
42351ee0
...
...
@@ -46,7 +46,6 @@ This file is part of the QGROUNDCONTROL project
#include "WaypointList.h"
#include "CameraView.h"
#include "UASListWidget.h"
#include "MAVLinkProtocol.h"
#include "MAVLinkSimulationLink.h"
#include "submainwindow.h"
#include "input/JoystickInput.h"
...
...
@@ -175,7 +174,6 @@ public slots:
void
showSettings
();
/** @brief Add a communication link */
LinkInterface
*
addLink
();
void
addLink
(
LinkInterface
*
link
);
bool
configLink
(
LinkInterface
*
link
);
/** @brief Simulate a link */
void
simulateLink
(
bool
simulate
);
...
...
@@ -293,11 +291,6 @@ public:
return
logPlayer
;
}
MAVLinkProtocol
*
getMAVLink
()
{
return
mavlink
;
}
protected:
typedef
enum
_VIEW_SECTIONS
...
...
@@ -360,8 +353,6 @@ protected:
void
loadSettings
();
void
storeSettings
();
// TODO Should be moved elsewhere, as the protocol does not belong to the UI
QPointer
<
MAVLinkProtocol
>
mavlink
;
LinkInterface
*
udpLink
;
...
...
@@ -461,8 +452,8 @@ protected:
CUSTOM_MODE
customMode
;
private
slots
:
/// @brief Save the specified Flight Data Log
void
_saveTempFlightDataLog
(
QString
tempLogfile
);
void
_addLinkMenu
(
LinkInterface
*
link
);
private:
/// Constructor is private since all creation should be through MainWindow::_create
...
...
src/ui/OpalLinkConfigurationWindow.cc
View file @
42351ee0
...
...
@@ -14,11 +14,22 @@ OpalLinkConfigurationWindow::OpalLinkConfigurationWindow(OpalLink* link,
ui
.
opalInstIDSpinBox
->
setValue
(
this
->
link
->
getOpalInstID
());
connect
(
ui
.
opalInstIDSpinBox
,
SIGNAL
(
valueChanged
(
int
)),
link
,
SLOT
(
setOpalInstID
(
int
)));
connect
(
link
,
SIGNAL
(
connected
(
bool
)),
this
,
SLOT
(
allowSettingsAccess
(
bool
)));
connect
(
link
,
&
LinkInterface
::
connected
,
this
,
OpalLinkConfigurationWindow
::
_linkConnected
);
connect
(
link
,
&
LinkInterface
::
disconnected
,
this
,
OpalLinkConfigurationWindow
::
_linkDisConnected
);
this
->
show
();
}
void
OpalLinkConfigurationWindow
::
allowSettingsAccess
(
bool
enabled
)
void
OpalLinkConfigurationWindow
::
_linkConnected
(
void
)
{
_allowSettingsAccess
(
true
);
}
void
OpalLinkConfigurationWindow
::
_linkConnected
(
void
)
{
_allowSettingsAccess
(
false
);
}
void
OpalLinkConfigurationWindow
::
_allowSettingsAccess
(
bool
enabled
)
{
ui
.
paramFileButton
->
setEnabled
(
enabled
);
ui
.
servoConfigFileButton
->
setEnabled
(
enabled
);
...
...
src/ui/OpalLinkConfigurationWindow.h
View file @
42351ee0
...
...
@@ -15,11 +15,13 @@ public:
explicit
OpalLinkConfigurationWindow
(
OpalLink
*
link
,
QWidget
*
parent
=
0
,
Qt
::
WindowFlags
flags
=
Qt
::
Sheet
);
signals:
p
ublic
slots
:
void
allowSettingsAccess
(
bool
enable
d
);
p
rivate
slots
:
void
_linkConnected
(
void
);
void
_linkDisconnected
(
voi
d
);
private:
void
_allowSettingsAccess
(
bool
enabled
);
Ui
::
OpalLinkSettings
ui
;
OpalLink
*
link
;
};
...
...
src/ui/QGCToolBar.cc
View file @
42351ee0
...
...
@@ -661,8 +661,8 @@ void QGCToolBar::addLink(LinkInterface* link)
toolBarBaudAction
->
setVisible
(
true
);
currentLink
=
link
;
connect
(
currentLink
,
SIGNAL
(
connected
(
bool
)),
this
,
SLOT
(
updateLinkState
(
bool
))
);
updateLinkState
(
link
->
isConnected
());
connect
(
currentLink
,
&
LinkInterface
::
connected
,
this
,
&
QGCToolBar
::
_linkConnected
);
_
updateLinkState
(
link
->
isConnected
());
qDebug
()
<<
"ADD LINK"
;
...
...
@@ -683,7 +683,7 @@ void QGCToolBar::removeLink(LinkInterface* link)
// Update GUI according to scan result
if
(
currentLink
)
{
updateLinkState
(
currentLink
->
isConnected
());
_
updateLinkState
(
currentLink
->
isConnected
());
}
else
{
connectButton
->
setText
(
tr
(
"New Serial Link"
));
portComboBox
->
hide
();
...
...
@@ -740,7 +740,17 @@ void QGCToolBar::updateComboBox()
}
}
void
QGCToolBar
::
updateLinkState
(
bool
connected
)
void
QGCToolBar
::
_linkConnected
(
void
)
{
_updateLinkState
(
true
);
}
void
QGCToolBar
::
_linkDisconnected
(
void
)
{
_updateLinkState
(
false
);
}
void
QGCToolBar
::
_updateLinkState
(
bool
connected
)
{
Q_UNUSED
(
connected
);
if
(
currentLink
&&
currentLink
->
isConnected
()
&&
portComboBox
->
isVisible
())
...
...
@@ -767,32 +777,32 @@ void QGCToolBar::updateLinkState(bool connected)
}
}
void
QGCToolBar
::
connectLink
(
bool
connect
)
void
QGCToolBar
::
connectLink
(
bool
connect
Link
)
{
LinkManager
*
linkMgr
=
LinkManager
::
instance
();
Q_ASSERT
(
linkMgr
);
// No serial port yet present
if
(
connect
&&
linkMgr
->
getSerialLinks
().
count
()
==
0
)
{
if
(
connect
Link
&&
linkMgr
->
getSerialLinks
().
count
()
==
0
)
{
MainWindow
::
instance
()
->
addLink
();
currentLink
=
linkMgr
->
getLinks
().
last
();
}
else
if
(
connect
)
{
}
else
if
(
connect
Link
)
{
SerialLink
*
link
=
qobject_cast
<
SerialLink
*>
(
currentLink
);
if
(
link
)
{
link
->
setPortName
(
portComboBox
->
itemData
(
portComboBox
->
currentIndex
()).
toString
().
trimmed
());
int
baud
=
baudcomboBox
->
currentText
().
toInt
();
link
->
setBaudRate
(
baud
);
QObject
::
connect
(
link
,
SIGNAL
(
connected
(
bool
)),
this
,
SLOT
(
updateLinkState
(
bool
))
);
connect
(
link
,
&
LinkInterface
::
connected
,
this
,
&
QGCToolBar
::
_linkConnected
);
linkMgr
->
connectLink
(
link
);
}
}
else
if
(
!
connect
&&
currentLink
)
{
}
else
if
(
!
connect
Link
&&
currentLink
)
{
linkMgr
->
disconnectLink
(
currentLink
);
QObject
::
disconnect
(
currentLink
,
SIGNAL
(
connected
(
bool
)),
this
,
SLOT
(
updateLinkState
(
bool
))
);
disconnect
(
currentLink
,
&
LinkInterface
::
connected
,
this
,
&
QGCToolBar
::
_linkConnected
);
}
if
(
currentLink
)
{
updateLinkState
(
currentLink
->
isConnected
());
_
updateLinkState
(
currentLink
->
isConnected
());
}
}
...
...
src/ui/QGCToolBar.h
View file @
42351ee0
...
...
@@ -52,8 +52,6 @@ public slots:
void
addLink
(
LinkInterface
*
link
);
/** @brief Remove link which is currently handled */
void
removeLink
(
LinkInterface
*
link
);
/** @brief Update the link state */
void
updateLinkState
(
bool
connected
);
/** @brief Set the system state */
void
updateState
(
UASInterface
*
system
,
QString
name
,
QString
description
);
/** @brief Set the system mode */
...
...
@@ -146,6 +144,14 @@ protected:
QAction
*
firstAction
;
QToolButton
*
advancedButton
;
QButtonGroup
*
group
;
private
slots
:
void
_linkConnected
(
void
);
void
_linkDisconnected
(
void
);
private:
/** @brief Update the link state */
void
_updateLinkState
(
bool
connected
);
};
#endif // QGCTOOLBAR_H
src/ui/SerialConfigurationWindow.cc
View file @
42351ee0
...
...
@@ -137,10 +137,6 @@ SerialConfigurationWindow::SerialConfigurationWindow(LinkInterface* link, QWidge
ui
.
advCheckBox
->
setChecked
(
false
);
ui
.
advGroupBox
->
setVisible
(
false
);
//connect(this->link, SIGNAL(connected(bool)), this, SLOT());
//ui.portName->setSizeAdjustPolicy(QComboBox::AdjustToContentsOnFirstShow);
//ui.baudRate->setSizeAdjustPolicy(QComboBox::AdjustToContentsOnFirstShow);
switch
(
this
->
link
->
getParityType
())
{
case
0
:
ui
.
parNone
->
setChecked
(
true
);
...
...
src/ui/SettingsDialog.cc
View file @
42351ee0
...
...
@@ -52,15 +52,8 @@ _ui(new Ui::SettingsDialog)
// Add the joystick settings pane
_ui
->
tabWidget
->
addTab
(
new
JoystickWidget
(
joystick
,
this
),
"Controllers"
);
// Add all protocols
QList
<
ProtocolInterface
*>
protocols
=
LinkManager
::
instance
()
->
getProtocols
();
foreach
(
ProtocolInterface
*
protocol
,
protocols
)
{
MAVLinkProtocol
*
mavlink
=
dynamic_cast
<
MAVLinkProtocol
*>
(
protocol
);
if
(
mavlink
)
{
MAVLinkSettingsWidget
*
msettings
=
new
MAVLinkSettingsWidget
(
mavlink
,
this
);
_ui
->
tabWidget
->
addTab
(
msettings
,
"MAVLink"
);
}
}
MAVLinkSettingsWidget
*
msettings
=
new
MAVLinkSettingsWidget
(
LinkManager
::
instance
()
->
mavlink
(),
this
);
_ui
->
tabWidget
->
addTab
(
msettings
,
"MAVLink"
);
this
->
window
()
->
setWindowTitle
(
tr
(
"QGroundControl Settings"
));
...
...
src/ui/uas/UASListWidget.cc
View file @
42351ee0
...
...
@@ -124,20 +124,20 @@ void UASListWidget::updateStatus()
if
(
!
link
)
continue
;
ProtocolInterface
*
p
=
LinkManager
::
instance
()
->
getProtocolForLink
(
link
);
MAVLinkProtocol
*
mavlink
=
LinkManager
::
instance
()
->
mavlink
(
);
// Build the tooltip out of the protocol parsing data: received, dropped, and parsing errors.
QString
displayString
(
""
);
int
c
;
if
((
c
=
p
->
getReceivedPacketCount
(
link
))
!=
-
1
)
if
((
c
=
mavlink
->
getReceivedPacketCount
(
link
))
!=
-
1
)
{
displayString
+=
QString
(
tr
(
"<br/>Received: %2"
)).
arg
(
QString
::
number
(
c
));
}
if
((
c
=
p
->
getDroppedPacketCount
(
link
))
!=
-
1
)
if
((
c
=
mavlink
->
getDroppedPacketCount
(
link
))
!=
-
1
)
{
displayString
+=
QString
(
tr
(
"<br/>Dropped: %2"
)).
arg
(
QString
::
number
(
c
));
}
if
((
c
=
p
->
getParsingErrorCount
(
link
))
!=
-
1
)
if
((
c
=
mavlink
->
getParsingErrorCount
(
link
))
!=
-
1
)
{
displayString
+=
QString
(
tr
(
"<br/>Errors: %2"
)).
arg
(
QString
::
number
(
c
));
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment