mirror of
https://github.com/betaflight/betaflight-configurator.git
synced 2025-07-17 05:15:21 +03:00
Implemented support for MSP jumbo frames, switched dataflash reading to be using jumbo frames.
This commit is contained in:
parent
e61ef7bb93
commit
ca772a0896
6 changed files with 84 additions and 22 deletions
47
js/msp.js
47
js/msp.js
|
@ -10,6 +10,7 @@ var MSP = {
|
|||
message_buffer: null,
|
||||
message_buffer_uint8_view: null,
|
||||
message_checksum: 0,
|
||||
messageIsJumboFrame: false,
|
||||
|
||||
callbacks: [],
|
||||
packet_error: 0,
|
||||
|
@ -17,6 +18,8 @@ var MSP = {
|
|||
|
||||
last_received_timestamp: null,
|
||||
listeners: [],
|
||||
|
||||
JUMBO_FRAME_SIZE_LIMIT: 255,
|
||||
|
||||
read: function (readInfo) {
|
||||
var data = new Uint8Array(readInfo.data);
|
||||
|
@ -50,13 +53,12 @@ var MSP = {
|
|||
break;
|
||||
case 3:
|
||||
this.message_length_expected = data[i];
|
||||
if (this.message_length_expected === this.JUMBO_FRAME_SIZE_LIMIT) {
|
||||
this.messageIsJumboFrame = true;
|
||||
}
|
||||
|
||||
this.message_checksum = data[i];
|
||||
|
||||
// setup arraybuffer
|
||||
this.message_buffer = new ArrayBuffer(this.message_length_expected);
|
||||
this.message_buffer_uint8_view = new Uint8Array(this.message_buffer);
|
||||
|
||||
this.state++;
|
||||
break;
|
||||
case 4:
|
||||
|
@ -65,13 +67,39 @@ var MSP = {
|
|||
|
||||
if (this.message_length_expected > 0) {
|
||||
// process payload
|
||||
this.state++;
|
||||
if (this.messageIsJumboFrame) {
|
||||
this.state++;
|
||||
} else {
|
||||
this.state = this.state + 3;
|
||||
}
|
||||
} else {
|
||||
// no payload
|
||||
this.state += 2;
|
||||
this.state += 5;
|
||||
}
|
||||
break;
|
||||
case 5: // payload
|
||||
case 5:
|
||||
this.message_length_expected = data[i];
|
||||
|
||||
this.message_checksum ^= data[i];
|
||||
|
||||
this.state++;
|
||||
|
||||
break;
|
||||
case 6:
|
||||
this.message_length_expected = this.message_length_expected + 256 * data[i];
|
||||
|
||||
this.message_checksum ^= data[i];
|
||||
|
||||
this.state++;
|
||||
|
||||
break;
|
||||
case 7:
|
||||
// setup arraybuffer
|
||||
this.message_buffer = new ArrayBuffer(this.message_length_expected);
|
||||
this.message_buffer_uint8_view = new Uint8Array(this.message_buffer);
|
||||
|
||||
this.state++;
|
||||
case 8: // payload
|
||||
this.message_buffer_uint8_view[this.message_length_received] = data[i];
|
||||
this.message_checksum ^= data[i];
|
||||
this.message_length_received++;
|
||||
|
@ -80,7 +108,7 @@ var MSP = {
|
|||
this.state++;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
case 9:
|
||||
if (this.message_checksum == data[i]) {
|
||||
// message received, store dataview
|
||||
this.dataView = new DataView(this.message_buffer, 0, this.message_length_expected);
|
||||
|
@ -92,6 +120,7 @@ var MSP = {
|
|||
// Reset variables
|
||||
this.message_length_received = 0;
|
||||
this.state = 0;
|
||||
this.messageIsJumboFrame = false;
|
||||
this.notify();
|
||||
break;
|
||||
|
||||
|
@ -210,4 +239,4 @@ var MSP = {
|
|||
|
||||
this.callbacks_cleanup();
|
||||
}
|
||||
};
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue