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

splitting MSP and CLI integration, new serial api

This commit is contained in:
cTn 2014-01-22 20:35:37 +01:00
parent 834345a80c
commit c0937ddbd4
3 changed files with 105 additions and 101 deletions

134
js/msp.js
View file

@ -72,79 +72,73 @@ function MSP_char_read(readInfo) {
var data = new Uint8Array(readInfo.data); var data = new Uint8Array(readInfo.data);
for (var i = 0; i < data.length; i++) { for (var i = 0; i < data.length; i++) {
if (CLI_active != true) { switch (MSP.state) {
// Standard "GUI" MSP handling case 0: // sync char 1
switch (MSP.state) { if (data[i] == 36) { // $
case 0: // sync char 1
if (data[i] == 36) { // $
MSP.state++;
}
break;
case 1: // sync char 2
if (data[i] == 77) { // M
MSP.state++;
} else { // restart and try again
MSP.state = 0;
}
break;
case 2: // direction (should be >)
if (data[i] == 62) { // >
message_status = 1;
} else { // unknown
message_status = 0;
}
MSP.state++; MSP.state++;
break; }
case 3: break;
MSP.message_length_expected = data[i]; case 1: // sync char 2
if (data[i] == 77) { // M
MSP.message_checksum = data[i];
// setup arraybuffer
MSP.message_buffer = new ArrayBuffer(MSP.message_length_expected);
MSP.message_buffer_uint8_view = new Uint8Array(MSP.message_buffer);
MSP.state++; MSP.state++;
break; } else { // restart and try again
case 4: MSP.state = 0;
MSP.code = data[i]; }
MSP.message_checksum ^= data[i]; break;
case 2: // direction (should be >)
if (data[i] == 62) { // >
message_status = 1;
} else { // unknown
message_status = 0;
}
MSP.state++;
break;
case 3:
MSP.message_length_expected = data[i];
MSP.message_checksum = data[i];
// setup arraybuffer
MSP.message_buffer = new ArrayBuffer(MSP.message_length_expected);
MSP.message_buffer_uint8_view = new Uint8Array(MSP.message_buffer);
MSP.state++;
break;
case 4:
MSP.code = data[i];
MSP.message_checksum ^= data[i];
if (MSP.message_length_expected != 0) { // standard message
MSP.state++;
} else { // MSP_ACC_CALIBRATION, etc...
MSP.state += 2;
}
break;
case 5: // payload
MSP.message_buffer_uint8_view[MSP.message_length_received] = data[i];
MSP.message_checksum ^= data[i];
MSP.message_length_received++;
if (MSP.message_length_received >= MSP.message_length_expected) {
MSP.state++;
}
break;
case 6:
if (MSP.message_checksum == data[i]) {
// message received, process
process_data(MSP.code, MSP.message_buffer, MSP.message_length_expected);
} else {
console.log('code: ' + MSP.code + ' - crc failed');
if (MSP.message_length_expected != 0) { // standard message MSP.packet_error++;
MSP.state++; $('span.packet-error').html(MSP.packet_error);
} else { // MSP_ACC_CALIBRATION, etc... }
MSP.state += 2;
} // Reset variables
break; MSP.message_length_received = 0;
case 5: // payload MSP.state = 0;
MSP.message_buffer_uint8_view[MSP.message_length_received] = data[i]; break;
MSP.message_checksum ^= data[i];
MSP.message_length_received++;
if (MSP.message_length_received >= MSP.message_length_expected) {
MSP.state++;
}
break;
case 6:
if (MSP.message_checksum == data[i]) {
// message received, process
process_data(MSP.code, MSP.message_buffer, MSP.message_length_expected);
} else {
console.log('code: ' + MSP.code + ' - crc failed');
MSP.packet_error++;
$('span.packet-error').html(MSP.packet_error);
}
// Reset variables
MSP.message_length_received = 0;
MSP.state = 0;
break;
}
} else {
// CLI Enabled (Terminal "style" handling)
handle_CLI(data[i]);
} }
char_counter++; char_counter++;

View file

@ -288,7 +288,11 @@ function onClosed(result) {
} }
function read_serial(info) { function read_serial(info) {
MSP_char_read(info); if (!CLI_active) {
MSP_char_read(info);
} else {
handle_CLI(info);
}
} }
function port_usage() { function port_usage() {

View file

@ -118,39 +118,45 @@ function send_slowly(out_arr, i, timeout_needle) {
*/ */
var sequence_elements = 0; var sequence_elements = 0;
function handle_CLI(readInfo) {
function handle_CLI(data) { var data = new Uint8Array(readInfo.data);
if (data == 27 || sequence_elements > 0) { // ESC + other var text = "";
sequence_elements++;
for (var i = 0; i < data.length; i++) {
// delete previous space if (data[i] == 27 || sequence_elements > 0) { // ESC + other
if (sequence_elements == 1) { sequence_elements++;
var content_string = $('.tab-cli .window .wrapper').html();
var new_string = content_string.substring(0, content_string.length -1); // delete previous space
$('.tab-cli .window .wrapper').html(new_string); if (sequence_elements == 1) {
text = text.substring(0, text.length -1);
}
// Reset
if (sequence_elements >= 5) {
sequence_elements = 0;
}
} }
// Reset if (sequence_elements == 0) {
if (sequence_elements >= 5) { switch (data[i]) {
sequence_elements = 0; case 10: // line feed
if (GUI.operating_system == "Windows" || GUI.operating_system == "Linux" || GUI.operating_system == "UNIX") {
text += "<br />";
}
break;
case 13: // carriage return
if (GUI.operating_system == "MacOS") {
text += "<br />";
}
break;
default:
text += String.fromCharCode(data[i]);
}
} }
char_counter++;
} }
if (sequence_elements == 0) { $('.tab-cli .window .wrapper').append(text);
switch (data) { $('.tab-cli .window').scrollTop($('.tab-cli .window .wrapper').height()); // there seems to be some sort of initial rendering glitch in 33+, why?
case 10: // line feed
if (GUI.operating_system == "Windows" || GUI.operating_system == "Linux" || GUI.operating_system == "UNIX") {
$('.tab-cli .window .wrapper').append("<br />");
}
break;
case 13: // carriage return
if (GUI.operating_system == "MacOS") {
$('.tab-cli .window .wrapper').append("<br />");
}
break;
default:
$('.tab-cli .window .wrapper').append(String.fromCharCode(data));
$('.tab-cli .window').scrollTop($('.tab-cli .window .wrapper').height());
}
}
} }