diff --git a/locales/en/messages.json b/locales/en/messages.json index 0840e057..cfe97855 100755 --- a/locales/en/messages.json +++ b/locales/en/messages.json @@ -90,6 +90,10 @@ "message": "--- I can't find my Bluetooth device---", "description": "Option in the port selection dropdown to allow the user to give permissions to the system to access a Bluetooth device." }, + "portsSelectPermissionDFU": { + "message": "--- I can't find my DFU device ---", + "description": "Option in the port selection dropdown to allow the user to give permissions to the system to access a DFU device." + }, "bluetoothConnected": { "message": "Connected to Bluetooth device: $1" }, diff --git a/src/components/port-picker/PortsInput.vue b/src/components/port-picker/PortsInput.vue index bfd9409d..ec6016a8 100644 --- a/src/components/port-picker/PortsInput.vue +++ b/src/components/port-picker/PortsInput.vue @@ -45,6 +45,9 @@ +
@@ -159,6 +162,8 @@ export default defineComponent({ EventBus.$emit("ports-input:request-permission"); } else if (value === "requestpermissionbluetooth") { EventBus.$emit("ports-input:request-permission-bluetooth"); + } else if (value === "requestpermissionusb") { + EventBus.$emit("ports-input:request-permission-usb"); } else { EventBus.$emit("ports-input:change", value); } diff --git a/src/js/port_handler.js b/src/js/port_handler.js index 0b37592b..b6fd2d2b 100644 --- a/src/js/port_handler.js +++ b/src/js/port_handler.js @@ -36,6 +36,7 @@ const PortHandler = new (function () { PortHandler.initialize = function () { EventBus.$on("ports-input:request-permission-bluetooth", () => this.requestDevicePermission("bluetooth")); EventBus.$on("ports-input:request-permission", () => this.requestDevicePermission("serial")); + EventBus.$on("ports-input:request-permission-usb", () => this.requestDevicePermission("usb")); EventBus.$on("ports-input:change", this.onChangeSelectedPort.bind(this)); // Use serial for all protocol events @@ -134,25 +135,27 @@ PortHandler.onChangeSelectedPort = function (port) { /** * Request permission for a device of the specified type - * @param {string} deviceType - Type of device ('serial' or 'bluetooth') + * @param {string} deviceType - Type of device ('serial', 'bluetooth', 'usb') */ -PortHandler.requestDevicePermission = function (deviceType = "serial") { - // Determine whether to show all devices based on device type - const showAllDevices = deviceType === "serial" ? this.showAllSerialDevices : false; +PortHandler.requestDevicePermission = function (deviceType) { + const requestPromise = + deviceType === "usb" + ? WEBUSBDFU.requestPermission() + : serial.requestPermissionDevice(this.showAllSerialDevices, deviceType); - // Use serial facade to request permission - serial - .requestPermissionDevice(showAllDevices, deviceType) + console.log(`${this.logHead} Requesting permission for ${deviceType} device...`); + + requestPromise .then((port) => { if (port) { console.log(`${this.logHead} Permission granted for ${deviceType} device:`, port); this.selectActivePort(port); } else { - console.log(`${this.logHead} Permission request cancelled or failed for ${deviceType}`); + console.log(`${this.logHead} Permission request cancelled or failed for ${deviceType} device`); } }) .catch((error) => { - console.error(`${this.logHead} Error requesting permission for ${deviceType}:`, error); + console.error(`${this.logHead} Error requesting permission for ${deviceType} device:`, error); }); };