Commit a648d868 authored by Lorenz Meier's avatar Lorenz Meier

Merge branch 'master' of github.com:mavlink/qgroundcontrol

parents ff33c79e 27a9dab3
...@@ -476,44 +476,34 @@ void MAVLinkProtocol::receiveBytes(LinkInterface* link, QByteArray b) ...@@ -476,44 +476,34 @@ void MAVLinkProtocol::receiveBytes(LinkInterface* link, QByteArray b)
totalReceiveCounter[linkId]++; totalReceiveCounter[linkId]++;
currReceiveCounter[linkId]++; currReceiveCounter[linkId]++;
// Update last message sequence ID // Determine what the next expected sequence number is, accounting for
uint8_t expectedIndex; // never having seen a message for this system/component pair.
if (lastIndex[message.sysid][message.compid] == -1) int lastSeq = lastIndex[message.sysid][message.compid];
{ int expectedSeq = (lastSeq == -1) ? message.seq : (lastSeq + 1);
lastIndex[message.sysid][message.compid] = message.seq;
expectedIndex = message.seq;
}
else
{
// NOTE: Using uint8_t here auto-wraps the number around to 0.
expectedIndex = lastIndex[message.sysid][message.compid] + 1;
}
// Make some noise if a message was skipped // And if we didn't encounter that sequence number, record the error
//qDebug() << "SYSID" << message.sysid << "COMPID" << message.compid << "MSGID" << message.msgid << "EXPECTED INDEX:" << expectedIndex << "SEQ" << message.seq; if (message.seq != expectedSeq)
if (message.seq != expectedIndex)
{ {
// Determine how many messages were skipped accounting for 0-wraparound
int16_t lostMessages = message.seq - expectedIndex; // Determine how many messages were skipped
int lostMessages = message.seq - expectedSeq;
// Out of order messages or wraparound can cause this, but we just ignore these conditions for simplicity
if (lostMessages < 0) if (lostMessages < 0)
{ {
// Usually, this happens in the case of an out-of order packet
lostMessages = 0; lostMessages = 0;
} }
else
{ // And log how many were lost for all time and just this timestep
// Console generates excessive load at high loss rates, needs better GUI visualization
//qDebug() << QString("Lost %1 messages for comp %4: expected sequence ID %2 but received %3.").arg(lostMessages).arg(expectedIndex).arg(message.seq).arg(message.compid);
}
totalLossCounter[linkId] += lostMessages; totalLossCounter[linkId] += lostMessages;
currLossCounter[linkId] += lostMessages; currLossCounter[linkId] += lostMessages;
} }
// Update the last sequence ID // And update the last sequence number for this system/component pair
lastIndex[message.sysid][message.compid] = message.seq; lastIndex[message.sysid][message.compid] = expectedSeq;
// Update on every 32th packet // Update on every 32th packet
if (totalReceiveCounter[linkId] % 32 == 0) if ((totalReceiveCounter[linkId] & 0x1F) == 0)
{ {
// Calculate new loss ratio // Calculate new loss ratio
// Receive loss // Receive loss
......
...@@ -556,7 +556,7 @@ void MainWindow::buildCommonWidgets() ...@@ -556,7 +556,7 @@ void MainWindow::buildCommonWidgets()
{ {
pilotView = new SubMainWindow(this); pilotView = new SubMainWindow(this);
pilotView->setObjectName("VIEW_FLIGHT"); pilotView->setObjectName("VIEW_FLIGHT");
pilotView->setCentralWidget(new QGCMapTool(this)); pilotView->setCentralWidget(new PrimaryFlightDisplay(this));
addToCentralStackedWidget(pilotView, VIEW_FLIGHT, "Pilot"); addToCentralStackedWidget(pilotView, VIEW_FLIGHT, "Pilot");
} }
...@@ -658,6 +658,8 @@ void MainWindow::buildCommonWidgets() ...@@ -658,6 +658,8 @@ void MainWindow::buildCommonWidgets()
createDockWidget(engineeringView,new ParameterInterface(this),tr("Onboard Parameters"),"PARAMETER_INTERFACE_DOCKWIDGET",VIEW_ENGINEER,Qt::RightDockWidgetArea); createDockWidget(engineeringView,new ParameterInterface(this),tr("Onboard Parameters"),"PARAMETER_INTERFACE_DOCKWIDGET",VIEW_ENGINEER,Qt::RightDockWidgetArea);
createDockWidget(simView,new ParameterInterface(this),tr("Onboard Parameters"),"PARAMETER_INTERFACE_DOCKWIDGET",VIEW_SIMULATION,Qt::RightDockWidgetArea); createDockWidget(simView,new ParameterInterface(this),tr("Onboard Parameters"),"PARAMETER_INTERFACE_DOCKWIDGET",VIEW_SIMULATION,Qt::RightDockWidgetArea);
menuActionHelper->createToolAction(tr("Map View"), "MAP_VIEW_DOCKWIDGET");
menuActionHelper->createToolAction(tr("Status Details"), "UAS_STATUS_DETAILS_DOCKWIDGET"); menuActionHelper->createToolAction(tr("Status Details"), "UAS_STATUS_DETAILS_DOCKWIDGET");
{ {
...@@ -677,7 +679,7 @@ void MainWindow::buildCommonWidgets() ...@@ -677,7 +679,7 @@ void MainWindow::buildCommonWidgets()
menuActionHelper->createToolAction(tr("Actuator Status"), "HEAD_DOWN_DISPLAY_2_DOCKWIDGET"); menuActionHelper->createToolAction(tr("Actuator Status"), "HEAD_DOWN_DISPLAY_2_DOCKWIDGET");
menuActionHelper->createToolAction(tr("Radio Control")); menuActionHelper->createToolAction(tr("Radio Control"));
createDockWidget(engineeringView,new HUD(320,240,this),tr("Video Downlink"),"HEAD_UP_DISPLAY_DOCKWIDGET",VIEW_ENGINEER,Qt::RightDockWidgetArea); createDockWidget(engineeringView,new HUD(320,240,this),tr("Video Downlink"),"HEAD_UP_DISPLAY_DOCKWIDGET",VIEW_FLIGHT,Qt::RightDockWidgetArea);
createDockWidget(simView,new PrimaryFlightDisplay(this),tr("Primary Flight Display"),"PRIMARY_FLIGHT_DISPLAY_DOCKWIDGET",VIEW_SIMULATION,Qt::RightDockWidgetArea); createDockWidget(simView,new PrimaryFlightDisplay(this),tr("Primary Flight Display"),"PRIMARY_FLIGHT_DISPLAY_DOCKWIDGET",VIEW_SIMULATION,Qt::RightDockWidgetArea);
createDockWidget(pilotView,new PrimaryFlightDisplay(this),tr("Primary Flight Display"),"PRIMARY_FLIGHT_DISPLAY_DOCKWIDGET",VIEW_FLIGHT,Qt::LeftDockWidgetArea); createDockWidget(pilotView,new PrimaryFlightDisplay(this),tr("Primary Flight Display"),"PRIMARY_FLIGHT_DISPLAY_DOCKWIDGET",VIEW_FLIGHT,Qt::LeftDockWidgetArea);
...@@ -819,6 +821,10 @@ void MainWindow::loadDockWidget(const QString& name) ...@@ -819,6 +821,10 @@ void MainWindow::loadDockWidget(const QString& name)
{ {
createDockWidget(centerStack->currentWidget(),new UASInfoWidget(this),tr("Status Details"),"UAS_STATUS_DETAILS_DOCKWIDGET",currentView,Qt::RightDockWidgetArea); createDockWidget(centerStack->currentWidget(),new UASInfoWidget(this),tr("Status Details"),"UAS_STATUS_DETAILS_DOCKWIDGET",currentView,Qt::RightDockWidgetArea);
} }
else if (name == "MAP_VIEW_DOCKWIDGET")
{
createDockWidget(centerStack->currentWidget(),new QGCMapTool(this),tr("Map view"),"MAP_VIEW_DOCKWIDGET",currentView,Qt::RightDockWidgetArea);
}
else if (name == "COMMUNICATION_DEBUG_CONSOLE_DOCKWIDGET") else if (name == "COMMUNICATION_DEBUG_CONSOLE_DOCKWIDGET")
{ {
//This is now a permanently detached window. //This is now a permanently detached window.
......
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