From eb30f6bef03e2ae608c7f35c9c4905eeb8a23516 Mon Sep 17 00:00:00 2001 From: Miguel Angel Mulero Martinez Date: Wed, 26 Aug 2020 11:44:27 +0200 Subject: [PATCH 1/3] Refactor and clean port_handler.js --- src/js/port_handler.js | 177 +++++++++++++++++++++++------------------ 1 file changed, 101 insertions(+), 76 deletions(-) diff --git a/src/js/port_handler.js b/src/js/port_handler.js index 1c2f26f9..2097f52d 100644 --- a/src/js/port_handler.js +++ b/src/js/port_handler.js @@ -2,12 +2,12 @@ const TIMEOUT_CHECK = 500; // With 250 it seems that it produces a memory leak and slowdown in some versions, reason unknown -var usbDevices = { filters: [ +const usbDevices = { filters: [ {'vendorId': 1155, 'productId': 57105}, - {'vendorId': 10473, 'productId': 393} + {'vendorId': 10473, 'productId': 393}, ] }; -var PortHandler = new function () { +const PortHandler = new function () { this.initial_ports = false; this.port_detected_callbacks = []; this.port_removed_callbacks = []; @@ -15,31 +15,45 @@ var PortHandler = new function () { }; PortHandler.initialize = function () { + + this.portPickerElement = $('div#port-picker #port'); + // start listening, check after TIMEOUT_CHECK ms this.check(); }; PortHandler.check = function () { - var self = this; + + const self = this; + + self.check_serial_devices(); + self.check_usb_devices(); + + GUI.updateManualPortVisibility(); + + setTimeout(function () { + self.check(); + }, TIMEOUT_CHECK); + +}; + +PortHandler.check_serial_devices = function () { + const self = this; serial.getDevices(function(current_ports) { // port got removed or initial_ports wasn't initialized yet if (self.array_difference(self.initial_ports, current_ports).length > 0 || !self.initial_ports) { - var removed_ports = self.array_difference(self.initial_ports, current_ports); + const removed_ports = self.array_difference(self.initial_ports, current_ports); - if (self.initial_ports != false) { - if (removed_ports.length > 1) { - console.log('PortHandler - Removed: ' + removed_ports); - } else { - console.log('PortHandler - Removed: ' + removed_ports[0]); - } + if (self.initial_ports !== false && removed_ports.length > 0) { + console.log(`PortHandler - Removed: ${removed_ports}`); } // disconnect "UI" if necessary // Keep in mind that this routine can not fire during atmega32u4 reboot procedure !!! if (GUI.connected_to) { - for (var i = 0; i < removed_ports.length; i++) { - if (removed_ports[i] == GUI.connected_to) { + for (let i = 0; i < removed_ports.length; i++) { + if (removed_ports[i] === GUI.connected_to) { $('div#header_btns a.connect').click(); } } @@ -49,8 +63,8 @@ PortHandler.check = function () { // trigger callbacks (only after initialization) if (self.initial_ports) { - for (var i = (self.port_removed_callbacks.length - 1); i >= 0; i--) { - var obj = self.port_removed_callbacks[i]; + for (let i = (self.port_removed_callbacks.length - 1); i >= 0; i--) { + const obj = self.port_removed_callbacks[i]; // remove timeout clearTimeout(obj.timer); @@ -59,8 +73,10 @@ PortHandler.check = function () { obj.code(removed_ports); // remove object from array - var index = self.port_removed_callbacks.indexOf(obj); - if (index > -1) self.port_removed_callbacks.splice(index, 1); + const index = self.port_removed_callbacks.indexOf(obj); + if (index > -1) { + self.port_removed_callbacks.splice(index, 1); + } } } @@ -70,10 +86,10 @@ PortHandler.check = function () { // if last_used_port was set, we try to select it if (result.last_used_port) { current_ports.forEach(function(port) { - if (port == result.last_used_port) { - console.log('Selecting last used port: ' + result.last_used_port); + if (port === result.last_used_port) { + console.log(`Selecting last used port: ${result.last_used_port}`); - $('div#port-picker #port').val(result.last_used_port); + self.portPickerElement.val(result.last_used_port); } }); } else { @@ -86,44 +102,40 @@ PortHandler.check = function () { // initialize self.initial_ports = current_ports; } else { - for (var i = 0; i < removed_ports.length; i++) { + for (let i = 0; i < removed_ports.length; i++) { self.initial_ports.splice(self.initial_ports.indexOf(removed_ports[i]), 1); } } } // new port detected - var new_ports = self.array_difference(current_ports, self.initial_ports); + const new_ports = self.array_difference(current_ports, self.initial_ports); if (new_ports.length) { - if (new_ports.length > 1) { - console.log('PortHandler - Found: ' + new_ports); - } else { - console.log('PortHandler - Found: ' + new_ports[0]); + if (new_ports.length > 0) { + console.log(`PortHandler - Found: ${new_ports}`); } self.update_port_select(current_ports); // select / highlight new port, if connected -> select connected port if (!GUI.connected_to) { - $('div#port-picker #port').val(new_ports[0]); + self.portPickerElement.val(new_ports[0]); } else { - $('div#port-picker #port').val(GUI.connected_to); + self.portPickerElement.val(GUI.connected_to); } // start connect procedure (if statement is valid) - if (GUI.auto_connect && !GUI.connecting_to && !GUI.connected_to) { + if (GUI.active_tab !== 'firmware_flasher' && GUI.auto_connect && !GUI.connecting_to && !GUI.connected_to) { // we need firmware flasher protection over here - if (GUI.active_tab != 'firmware_flasher') { - GUI.timeout_add('auto-connect_timeout', function () { - $('div#header_btns a.connect').click(); - }, 100); // timeout so bus have time to initialize after being detected by the system - } + GUI.timeout_add('auto-connect_timeout', function () { + $('div#header_btns a.connect').click(); + }, 100); // timeout so bus have time to initialize after being detected by the system } // trigger callbacks - for (var i = (self.port_detected_callbacks.length - 1); i >= 0; i--) { - var obj = self.port_detected_callbacks[i]; + for (let i = (self.port_detected_callbacks.length - 1); i >= 0; i--) { + const obj = self.port_detected_callbacks[i]; // remove timeout clearTimeout(obj.timer); @@ -132,30 +144,27 @@ PortHandler.check = function () { obj.code(new_ports); // remove object from array - var index = self.port_detected_callbacks.indexOf(obj); - if (index > -1) self.port_detected_callbacks.splice(index, 1); + const index = self.port_detected_callbacks.indexOf(obj); + if (index > -1) { + self.port_detected_callbacks.splice(index, 1); + } } self.initial_ports = current_ports; } - - self.check_usb_devices(); - - GUI.updateManualPortVisibility(); - setTimeout(function () { - self.check(); - }, TIMEOUT_CHECK); }); + }; PortHandler.check_usb_devices = function (callback) { + const self = this; chrome.usb.getDevices(usbDevices, function (result) { - const portPickerElement = $("div#port-picker #port"); - const dfuElement = portPickerElement.children("[value='DFU']"); + + const dfuElement = self.portPickerElement.children("[value='DFU']"); if (result.length) { if (!dfuElement.length) { - portPickerElement.append($('