mirror of
https://github.com/iNavFlight/inav-configurator.git
synced 2025-07-24 00:35:20 +03:00
Run message deduplication based on full roundtrip, not only input queue
This commit is contained in:
parent
93bb0eba4f
commit
2156090a0d
5 changed files with 47 additions and 11 deletions
|
@ -1621,6 +1621,9 @@ var mspHelper = (function () {
|
||||||
mspQueue.putHardwareRoundtrip(new Date().getTime() - dataHandler.callbacks[i].sentOn);
|
mspQueue.putHardwareRoundtrip(new Date().getTime() - dataHandler.callbacks[i].sentOn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//remove message from queue as received
|
||||||
|
mspQueue.removeMessage(dataHandler.code);
|
||||||
|
|
||||||
// remove object from array
|
// remove object from array
|
||||||
dataHandler.callbacks.splice(i, 1);
|
dataHandler.callbacks.splice(i, 1);
|
||||||
|
|
||||||
|
|
|
@ -239,6 +239,7 @@ var SerialBackend = (function () {
|
||||||
mspQueue.flush();
|
mspQueue.flush();
|
||||||
mspQueue.freeHardLock();
|
mspQueue.freeHardLock();
|
||||||
mspQueue.freeSoftLock();
|
mspQueue.freeSoftLock();
|
||||||
|
mspQueue.flushMessages();
|
||||||
|
|
||||||
CONFIGURATOR.connection.disconnect(privateScope.onClosed);
|
CONFIGURATOR.connection.disconnect(privateScope.onClosed);
|
||||||
MSP.disconnect_cleanup();
|
MSP.disconnect_cleanup();
|
||||||
|
@ -376,6 +377,7 @@ var SerialBackend = (function () {
|
||||||
mspQueue.flush();
|
mspQueue.flush();
|
||||||
mspQueue.freeHardLock();
|
mspQueue.freeHardLock();
|
||||||
mspQueue.freeSoftLock();
|
mspQueue.freeSoftLock();
|
||||||
|
mspQueue.flushMessages();
|
||||||
CONFIGURATOR.connection.emptyOutputBuffer();
|
CONFIGURATOR.connection.emptyOutputBuffer();
|
||||||
|
|
||||||
$('div.connect_controls a').click(); // disconnect
|
$('div.connect_controls a').click(); // disconnect
|
||||||
|
|
|
@ -42,6 +42,38 @@ var mspQueue = function () {
|
||||||
privateScope.removeCallback = null;
|
privateScope.removeCallback = null;
|
||||||
privateScope.putCallback = null;
|
privateScope.putCallback = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the list of all messages that are currently in queue, including being already dispatched via radio and waiting for response
|
||||||
|
*/
|
||||||
|
privateScope.messagesInQueue = [];
|
||||||
|
|
||||||
|
//Store new code in the queue
|
||||||
|
publicScope.storeMessage = function (code) {
|
||||||
|
privateScope.messagesInQueue.push(code);
|
||||||
|
};
|
||||||
|
|
||||||
|
//Remove code from the queue
|
||||||
|
publicScope.removeMessage = function (code) {
|
||||||
|
var index = privateScope.messagesInQueue.indexOf(code);
|
||||||
|
if (index > -1) {
|
||||||
|
privateScope.messagesInQueue.splice(index, 1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//List all messages in the queue
|
||||||
|
publicScope.getMessages = function () {
|
||||||
|
return privateScope.messagesInQueue;
|
||||||
|
};
|
||||||
|
|
||||||
|
//Check if message is in the queue
|
||||||
|
publicScope.isMessageInQueue = function (code) {
|
||||||
|
return privateScope.messagesInQueue.indexOf(code) > -1;
|
||||||
|
};
|
||||||
|
|
||||||
|
publicScope.flushMessages = function () {
|
||||||
|
privateScope.messagesInQueue = [];
|
||||||
|
};
|
||||||
|
|
||||||
publicScope.computeDropRatio = function () {
|
publicScope.computeDropRatio = function () {
|
||||||
privateScope.dropRatio = privateScope.loadPidController.run(publicScope.getLoad());
|
privateScope.dropRatio = privateScope.loadPidController.run(publicScope.getLoad());
|
||||||
};
|
};
|
||||||
|
@ -59,15 +91,6 @@ var mspQueue = function () {
|
||||||
|
|
||||||
privateScope.queueLocked = false;
|
privateScope.queueLocked = false;
|
||||||
|
|
||||||
privateScope.isMessageInQueue = function (code) {
|
|
||||||
for (var i = 0; i < privateScope.queue.length; i++) {
|
|
||||||
if (privateScope.queue[i].code == code) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
|
|
||||||
publicScope.setremoveCallback = function(cb) {
|
publicScope.setremoveCallback = function(cb) {
|
||||||
privateScope.removeCallback = cb;
|
privateScope.removeCallback = cb;
|
||||||
}
|
}
|
||||||
|
@ -173,6 +196,7 @@ var mspQueue = function () {
|
||||||
|
|
||||||
request.timer = setTimeout(function () {
|
request.timer = setTimeout(function () {
|
||||||
console.log('MSP data request timed-out: ' + request.code);
|
console.log('MSP data request timed-out: ' + request.code);
|
||||||
|
publicScope.removeMessage(request.code);
|
||||||
/*
|
/*
|
||||||
* Remove current callback
|
* Remove current callback
|
||||||
*/
|
*/
|
||||||
|
@ -236,12 +260,17 @@ var mspQueue = function () {
|
||||||
*/
|
*/
|
||||||
publicScope.put = function (mspRequest) {
|
publicScope.put = function (mspRequest) {
|
||||||
|
|
||||||
console.log(mspRequest.code);
|
console.log('Received message ', mspRequest.code);
|
||||||
if (privateScope.isMessageInQueue(mspRequest.code)) {
|
|
||||||
|
const isMessageInQueue = publicScope.isMessageInQueue(mspRequest.code);
|
||||||
|
|
||||||
|
if (isMessageInQueue) {
|
||||||
console.log('Message already in queue: ' + mspRequest.code);
|
console.log('Message already in queue: ' + mspRequest.code);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
publicScope.storeMessage(mspRequest.code);
|
||||||
|
|
||||||
if (privateScope.queueLocked === true) {
|
if (privateScope.queueLocked === true) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,6 +94,7 @@ TABS.cli.initialize = function (callback) {
|
||||||
|
|
||||||
// Flush MSP queue as well as all MSP registered callbacks
|
// Flush MSP queue as well as all MSP registered callbacks
|
||||||
mspQueue.flush();
|
mspQueue.flush();
|
||||||
|
mspQueue.flushMessages();
|
||||||
MSP.callbacks_cleanup();
|
MSP.callbacks_cleanup();
|
||||||
|
|
||||||
self.outputHistory = "";
|
self.outputHistory = "";
|
||||||
|
|
|
@ -780,6 +780,7 @@ TABS.firmware_flasher.closeTempConnection = function() {
|
||||||
mspQueue.flush();
|
mspQueue.flush();
|
||||||
mspQueue.freeHardLock();
|
mspQueue.freeHardLock();
|
||||||
mspQueue.freeSoftLock();
|
mspQueue.freeSoftLock();
|
||||||
|
mspQueue.flushMessages();
|
||||||
CONFIGURATOR.connection.emptyOutputBuffer();
|
CONFIGURATOR.connection.emptyOutputBuffer();
|
||||||
|
|
||||||
CONFIGURATOR.connectionValid = false;
|
CONFIGURATOR.connectionValid = false;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue