'use strict'; var usbDevices = { STM32DFU: {'vendorId': 1155, 'productId': 57105} }; var PortHandler = new function () { this.initial_ports = false; this.port_detected_callbacks = []; this.port_removed_callbacks = []; this.dfu_available = false; }; PortHandler.initialize = function () { // start listening, check after 250ms this.check(); }; PortHandler.check = function () { var self = this; ConnectionSerial.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); if (self.initial_ports != false) { if (removed_ports.length > 1) { console.log('PortHandler - Removed: ' + removed_ports); } else { console.log('PortHandler - Removed: ' + removed_ports[0]); } } // 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) { $('div#port-picker a.connect').click(); } } } self.update_port_select(current_ports); // 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]; // remove timeout clearTimeout(obj.timer); // trigger callback 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); } } // auto-select last used port (only during initialization) if (!self.initial_ports) { chrome.storage.local.get('last_used_port', function (result) { // if last_used_port was set, we try to select it if (result.last_used_port) { if (result.last_used_port == "ble" || result.last_used_port == "tcp" || result.last_used_port == "udp") { $('#port').val(result.last_used_port); } else { current_ports.forEach(function(port) { if (port == result.last_used_port) { console.log('Selecting last used port: ' + result.last_used_port); $('#port').val(result.last_used_port); } }); } } else { console.log('Last used port wasn\'t saved "yet", auto-select disabled.'); } }); chrome.storage.local.get('last_used_bps', function (result) { if (result['last_used_bps']) { $('#baud').val(result['last_used_bps']); } }); chrome.storage.local.get('wireless_mode_enabled', function (result) { if (result['wireless_mode_enabled']) { $('#wireless-mode').prop('checked', true).change(); } }); } if (!self.initial_ports) { // initialize self.initial_ports = current_ports; } else { for (var 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); if (new_ports.length) { if (new_ports.length > 1) { console.log('PortHandler - Found: ' + new_ports); } else { console.log('PortHandler - Found: ' + new_ports[0]); } 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]); } else { $('div#port-picker #port').val(GUI.connected_to); } // trigger callbacks for (var i = (self.port_detected_callbacks.length - 1); i >= 0; i--) { var obj = self.port_detected_callbacks[i]; // remove timeout clearTimeout(obj.timer); // trigger callback 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); } self.initial_ports = current_ports; } self.check_usb_devices(); GUI.updateManualPortVisibility(); setTimeout(function () { self.check(); }, 250); }); }; PortHandler.check_usb_devices = function (callback) { chrome.usb.getDevices(usbDevices.STM32DFU, function (result) { if (result.length) { if (!$("div#port-picker #port [value='DFU']").length) { $('div#port-picker #port').append($('