diff --git a/js/gui.js b/js/gui.js index 8a95c88246..5db3541994 100644 --- a/js/gui.js +++ b/js/gui.js @@ -204,7 +204,8 @@ GUI_control.prototype.tab_switch_cleanup = function(callback) { if (callback) callback(); break; case 'sensors': - GUI.interval_kill_all(['port-update', 'port_usage', 'serial_read']); + GUI.interval_kill_all(['port-update', 'port_usage']); + serial.empty_output_buffer(); // sensor data tab uses scrollbars, emptying the content before loading another tab // prevents scrollbar exposure to any of the tabs while new content is loaded in diff --git a/js/serial.js b/js/serial.js index b8dacf1c33..bdd1854297 100644 --- a/js/serial.js +++ b/js/serial.js @@ -59,11 +59,20 @@ var serial = { self.transmitting = true; var sending = function() { - chrome.serial.send(self.connectionId, self.output_buffer[0].data, function(sendInfo) { - self.output_buffer[0].callback(sendInfo); + // store inside separate variables in case array gets destroyed + var data = self.output_buffer[0].data; + var callback = self.output_buffer[0].callback; + + chrome.serial.send(self.connectionId, data, function(sendInfo) { + callback(sendInfo); self.output_buffer.shift(); if (self.output_buffer.length) { + // keep the buffer withing reasonable limits + while (self.output_buffer.length > 500) { + self.output_buffer.pop(); + } + sending(); } else { self.transmitting = false; @@ -83,5 +92,9 @@ var serial = { removeListener: function(function_reference) { chrome.serial.onReceive.removeListener(function_reference); } + }, + empty_output_buffer: function() { + this.output_buffer = []; + this.transmitting = false; } }; \ No newline at end of file diff --git a/tabs/sensors.js b/tabs/sensors.js index 2e3c1faa29..0cd91f3737 100644 --- a/tabs/sensors.js +++ b/tabs/sensors.js @@ -209,7 +209,7 @@ function tab_initialize_sensors() { } // timer initialization - GUI.interval_kill_all(['port-update', 'port_usage', 'serial_read']); + GUI.interval_kill_all(['port-update', 'port_usage']); // data pulling timers GUI.interval_add('status_pull', function() {