对从 navigator.usb.getDevices 收到的设备进行排序时出现问题

问题描述 投票:0回答:1

我正在使用 Electron 和 node.js,并且在与多个相同的 USB 设备(传感器)进行通信时遇到问题,这些设备(传感器)仅在序列号上有所不同。

如何对 USB 设备进行排序(相同制造商名称和相同产品名称,但不同序列号)?

如果我尝试按照下面的代码对 deviceList 进行排序,我的 renderer.js 中会出现“未定义”

串行.js

var serial = {};

(function() {
  'use strict';

  serial.getDevices = async function() {
    console.log('FCT: getDevices');
    return navigator.usb.getDevices().then(devices => {
      const deviceList  = [];

      devices.forEach(async (element) => {
        if (element.manufacturerName==='Tardy' && 
            element.productName == 'T-BOS V3.0'){
          deviceList.push(await new serial.Port(element)) 
        } 
      })

      deviceList.sort((a, b) =>  a.serialNumber < b.serialNumber ? -1 : 1 );

      return deviceList;
    });
  }

...

渲染器.js

      serial.getDevices().then(ports => {
        console.log('App: getPorts: ', ports);
        if (ports.length === 0) {
          statusDisplay.textContent = 'No device found.';
        } else {
          statusDisplay.textContent = 'Connecting...';

          Array.from(ports).forEach((element) => {
            console.log("Port: ", element)
          });

          port = ports[0];

          connect();  // uses port to connect to
        }

在渲染器中,我无法访问返回的 deviceList 的任何成员(在渲染器中,例如 port[x].manufacturerName)

我更希望能够在 renderer.js 中对返回的设备进行排序。

搜索网络并没有让我找到任何解决方案......

谢谢
GvTT

sorting electron webusb
1个回答
0
投票

您似乎同时使用了 WebUSB (

navigator.usb
) 和 Web Serial API。假设您只想使用 Web Serial。在 Electron 中,您需要在主进程中使用
mainWindow.webContents.session.on('select-serial-port', (event, portList, webContents, callback)
来列出和选择端口。有用的示例代码可以在 https://www.electronjs.org/docs/latest/tutorial/devices#web-serial-api

找到

请注意,序列号可能并非在所有平台上都可用。在 Windows 上,您可能需要从

deviceInstanceId
中提取序列号。

© www.soinside.com 2019 - 2024. All rights reserved.