1
0
Fork 0
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:
Pawel Spychalski (DzikuVx) 2024-04-26 12:38:28 +02:00
parent 93bb0eba4f
commit 2156090a0d
5 changed files with 47 additions and 11 deletions

View file

@ -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);

View file

@ -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

View file

@ -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;
} }

View file

@ -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 = "";

View file

@ -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;