1
0
Fork 0
mirror of https://github.com/betaflight/betaflight-configurator.git synced 2025-07-24 00:35:26 +03:00
This commit is contained in:
Mark Haslinghuis 2025-06-10 23:03:55 +02:00
parent 7b5f0de608
commit d13638befd

View file

@ -374,15 +374,23 @@ const MSP = {
serial.send(bufferOut);
},
send_message(code, data, callback_sent, callback_msp, doCallbackOnError) {
// Early validation
if (!this._validateSendMessage(code, callback_msp)) {
if (code === undefined || !serial.connected || CONFIGURATOR.virtualMode) {
if (callback_msp) {
callback_msp();
}
return false;
}
const isDuplicateRequest = this._isDuplicateRequest(code);
const bufferOut = this._encodeMessage(code, data);
const isDuplicateRequest = this.callbacks.some((instance) => instance.code === code);
const bufferOut = code <= 254 ? this.encode_message_v1(code, data) : this.encode_message_v2(code, data);
const requestObj = this._createRequestObject(code, bufferOut, callback_msp, doCallbackOnError);
const requestObj = {
code,
requestBuffer: bufferOut,
callback: callback_msp,
callbackOnError: doCallbackOnError,
start: performance.now(),
};
// Always set up timeout for all requests to ensure cleanup
this._setupTimeout(requestObj, bufferOut);
@ -390,44 +398,22 @@ const MSP = {
this.callbacks.push(requestObj);
// Send message if it has data or is a new request
if (this._shouldSendMessage(data, isDuplicateRequest)) {
this._sendBuffer(bufferOut, callback_sent);
}
return true;
},
_validateSendMessage(code, callback_msp) {
const connected = serial.connected;
if (code === undefined || !connected || CONFIGURATOR.virtualMode) {
if (callback_msp) {
callback_msp();
if (data || !isDuplicateRequest) {
// Optimize timeout for frequent requests
if (this.timeout > this.MIN_TIMEOUT) {
this.timeout--;
}
return false;
serial.send(bufferOut, (sendInfo) => {
if (sendInfo.bytesSent === bufferOut.byteLength && callback_sent) {
callback_sent();
}
});
}
return true;
},
_isDuplicateRequest(code) {
return this.callbacks.some((instance) => instance.code === code);
},
_encodeMessage(code, data) {
return code <= 254 ? this.encode_message_v1(code, data) : this.encode_message_v2(code, data);
},
_createRequestObject(code, bufferOut, callback_msp, doCallbackOnError) {
return {
code,
requestBuffer: bufferOut,
callback: callback_msp,
callbackOnError: doCallbackOnError,
start: performance.now(),
};
},
_setupTimeout(requestObj, bufferOut) {
requestObj.timer = setTimeout(() => {
this._handleTimeout(requestObj, bufferOut);
@ -454,23 +440,6 @@ const MSP = {
this._setupTimeout(requestObj, bufferOut);
},
_shouldSendMessage(data, isDuplicateRequest) {
return data || !isDuplicateRequest;
},
_sendBuffer(bufferOut, callback_sent) {
// Optimize timeout for frequent requests
if (this.timeout > this.MIN_TIMEOUT) {
this.timeout--;
}
serial.send(bufferOut, (sendInfo) => {
if (sendInfo.bytesSent === bufferOut.byteLength && callback_sent) {
callback_sent();
}
});
},
/**
* resolves: {command: code, data: data, length: message_length}
*/