diff --git a/js/serial_backend.js b/js/serial_backend.js index c6a92d83..1dbc16d3 100644 --- a/js/serial_backend.js +++ b/js/serial_backend.js @@ -36,6 +36,7 @@ $(document).ready(function() { MSP.disconnect_cleanup(); PortUsage.reset(); configuration_received = false; // reset valid config received variable (used to block tabs while not connected properly) + MSP_pass_through = false; // unlock port select & baud $('div#port-picker #port').prop('disabled', false); @@ -125,34 +126,39 @@ function onOpen(openInfo) { serial.onReceive.addListener(read_serial); - // disconnect after 10 seconds with error if we don't get IDENT data - GUI.timeout_add('connecting', function() { - if (!configuration_received) { - GUI.log(chrome.i18n.getMessage('noConfigurationReceived')); + if (!MSP_pass_through) { + // disconnect after 10 seconds with error if we don't get IDENT data + GUI.timeout_add('connecting', function() { + if (!configuration_received) { + GUI.log(chrome.i18n.getMessage('noConfigurationReceived')); - $('div#port-picker a.connect').click(); // disconnect - } - }, 10000); - - // request configuration data - MSP.send_message(MSP_codes.MSP_UID, false, false, function() { - GUI.log(chrome.i18n.getMessage('uniqueDeviceIdReceived', [CONFIG.uid[0].toString(16) + CONFIG.uid[1].toString(16) + CONFIG.uid[2].toString(16)])); - MSP.send_message(MSP_codes.MSP_IDENT, false, false, function() { - GUI.timeout_remove('connecting'); // kill connecting timer - - GUI.log(chrome.i18n.getMessage('firmwareVersion', [CONFIG.version])); - - if (CONFIG.version >= firmware_version_accepted) { - configuration_received = true; - - $('div#port-picker a.connect').text(chrome.i18n.getMessage('disconnect')).addClass('active'); - $('#tabs li a:first').click(); - } else { - GUI.log(chrome.i18n.getMessage('firmwareVersionNotSupported', [firmware_version_accepted])); $('div#port-picker a.connect').click(); // disconnect } + }, 10000); + + // request configuration data + MSP.send_message(MSP_codes.MSP_UID, false, false, function() { + GUI.log(chrome.i18n.getMessage('uniqueDeviceIdReceived', [CONFIG.uid[0].toString(16) + CONFIG.uid[1].toString(16) + CONFIG.uid[2].toString(16)])); + MSP.send_message(MSP_codes.MSP_IDENT, false, false, function() { + GUI.timeout_remove('connecting'); // kill connecting timer + + GUI.log(chrome.i18n.getMessage('firmwareVersion', [CONFIG.version])); + + if (CONFIG.version >= firmware_version_accepted) { + configuration_received = true; + + $('div#port-picker a.connect').text(chrome.i18n.getMessage('disconnect')).addClass('active'); + $('#tabs li a:first').click(); + } else { + GUI.log(chrome.i18n.getMessage('firmwareVersionNotSupported', [firmware_version_accepted])); + $('div#port-picker a.connect').click(); // disconnect + } + }); }); - }); + } else { + $('div#port-picker a.connect').text(chrome.i18n.getMessage('disconnect')).addClass('active'); + GUI.log('Connection opened in pass-through mode'); + } } else { console.log('Failed to open serial port'); GUI.log(chrome.i18n.getMessage('serialPortOpenFail')); @@ -177,10 +183,12 @@ function onClosed(result) { } function read_serial(info) { - if (!CLI_active) { + if (!CLI_active && !MSP_pass_through) { MSP.read(info); - } else { + } else if (CLI_active) { handle_CLI(info); + } else if (MSP_pass_through) { // needs to be verified, might be removed after pass_through is 100% deployed + MSP.read(info); } } diff --git a/main.js b/main.js index 6a11f081..ded65821 100644 --- a/main.js +++ b/main.js @@ -54,10 +54,11 @@ $(document).ready(function() { if ($(this).parent().hasClass('active') == false) { // only initialize when the tab isn't already active var self = this; var index = $(self).parent().index(); + var tab = $(self).parent().prop('class'); // if there is no active connection, return - if (configuration_received == false) { - GUI.log('You need to connect before you can view any of the tabs', 'red'); + if (!configuration_received && tab != 'tab_logging') { + GUI.log('You need to connect before you can view any of the tabs'); return; } @@ -65,9 +66,6 @@ $(document).ready(function() { // disable previously active tab highlight $('li', tabs).removeClass('active'); - // get tab class name (there should be only one class listed) - var tab = $(self).parent().prop('class'); - // Highlight selected tab $(self).parent().addClass('active'); diff --git a/tabs/logging.js b/tabs/logging.js index ea453700..cc261e0a 100644 --- a/tabs/logging.js +++ b/tabs/logging.js @@ -1,16 +1,34 @@ +var MSP_pass_through = false; + function tab_initialize_logging() { ga_tracker.sendAppView('Logging'); GUI.active_tab = 'logging'; var requested_properties = []; - MSP.send_message(MSP_codes.MSP_RC, false, false, get_motor_data); + if (configuration_received) { + MSP.send_message(MSP_codes.MSP_RC, false, false, get_motor_data); - function get_motor_data() { - MSP.send_message(MSP_codes.MSP_MOTOR, false, false, load_html); - } + function get_motor_data() { + MSP.send_message(MSP_codes.MSP_MOTOR, false, false, load_html); + } + + function load_html() { + $('#content').load("./tabs/logging.html", process_html); + } + } else { + MSP_pass_through = true; + + // we will initialize RC.channels array and MOTOR_DATA array manually + RC.active_channels = 8; + for (var i = 0; i < RC.active_channels; i++) { + RC.channels[i] = 0; + } + + for (var i = 0; i < 8; i++) { + MOTOR_DATA[i] = 0; + } - function load_html() { $('#content').load("./tabs/logging.html", process_html); } @@ -36,7 +54,7 @@ function tab_initialize_logging() { }); if (requested_properties.length) { - // print header for the + // print header for the csv file print_head(); function poll_data() { @@ -44,16 +62,18 @@ function tab_initialize_logging() { crunch_data(); // request new - for (var i = 0; i < requested_properties.length; i++) { - MSP.send_message(MSP_codes[requested_properties[i]]); - - /* this approach could be used if we want to utilize request time compensation - if (i < requested_properties.length -1) { - MSP.send_message(requested_properties[i]); - } else { - MSP.send_message(requested_properties[i], false, false, poll_data); + if (!MSP_pass_through) { + for (var i = 0; i < requested_properties.length; i++) { + MSP.send_message(MSP_codes[requested_properties[i]]); + + /* this approach could be used if we want to utilize request time compensation + if (i < requested_properties.length -1) { + MSP.send_message(requested_properties[i]); + } else { + MSP.send_message(requested_properties[i], false, false, poll_data); + } + */ } - */ } }