我正在使用 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
您似乎同时使用了 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
中提取序列号。