1
0
Fork 0
mirror of https://github.com/iNavFlight/inav-configurator.git synced 2025-07-16 12:55:13 +03:00

Deduplicatrion of the queue and delayed release of hard lock

This commit is contained in:
Pawel Spychalski (DzikuVx) 2024-04-26 12:05:17 +02:00
parent a4fd2bce9d
commit 93bb0eba4f
3 changed files with 32 additions and 1 deletions

View file

@ -2,6 +2,8 @@
const MSPCodes = require('./msp/MSPCodes')
const mspQueue = require('./serial_queue');
const eventFrequencyAnalyzer = require('./eventFrequencyAnalyzer');
const timeout = require('./timeouts');
/**
*
@ -265,7 +267,9 @@ var MSP = {
/*
* Free port
*/
timeout.add('delayedFreeHardLock', function() {
mspQueue.freeHardLock();
}, 50);
// Reset variables
this.message_length_received = 0;
@ -301,6 +305,8 @@ var MSP = {
var checksum;
var ii;
eventFrequencyAnalyzer.put('MPS ' + code);
if (!protocolVersion) {
protocolVersion = this.protocolVersion;
}

View file

@ -35,6 +35,8 @@ var SerialBackend = (function () {
privateScope.isDemoRunning = false;
privateScope.isWirelessMode = false;
/*
* Handle "Wireless" mode with strict queueing of messages
*/

View file

@ -59,6 +59,15 @@ var mspQueue = function () {
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) {
privateScope.removeCallback = cb;
}
@ -86,6 +95,10 @@ var mspQueue = function () {
privateScope.lockMethod = method;
};
publicScope.getLockMethod = function () {
return privateScope.lockMethod;
};
publicScope.setSoftLock = function () {
privateScope.softLock = new Date().getTime();
};
@ -223,6 +236,12 @@ var mspQueue = function () {
*/
publicScope.put = function (mspRequest) {
console.log(mspRequest.code);
if (privateScope.isMessageInQueue(mspRequest.code)) {
console.log('Message already in queue: ' + mspRequest.code);
return false;
}
if (privateScope.queueLocked === true) {
return false;
}
@ -317,6 +336,10 @@ var mspQueue = function () {
}
};
publicScope.getQueue = function () {
return privateScope.queue;
};
setInterval(publicScope.executor, Math.round(1000 / privateScope.handlerFrequency));
setInterval(publicScope.balancer, Math.round(1000 / privateScope.balancerFrequency));