0

我正在尝试访问通过 USB 连接的 Voyager 1450g 条形码扫描仪,但 navigator.usb.requestDevices() 看不到此设备。

let button = document.getElementById('request-device');
button.addEventListener('click', async () => {
let device;
try {
    device = await navigator.usb.requestDevice({ filters: [{}]});
} catch (err) {
    // No device was selected.
    console.log('Error:', err);
}

navigator.usb.requestDevices() 的输出 设备管理器中的设置 我将不胜感激任何想法。

4

2 回答 2

2

我有一台 Honeywell Voyagar 1202g 条码扫描仪,我设法在 Mac 和 Windows 上工作。

首先,您需要将条形码扫描仪界面更改为 CDC-ACM,方法是使用 EZConfig(霍尼韦尔软件)或扫描您可以在其网站上找到的条形码。

使其在 Windows 上运行的步骤:

  1. 安装 Zadig
  2. 安装 HSM USB 串行驱动程序包
  3. 在 Windows 设置中找到您的设备并更新 USB 复合设备驱动程序(让我从驱动程序列表中选择,取消选中兼容驱动程序)以使用 Honeywell->WinFlash Intermec 设备(没有这一步 Zadig 无法找到正确的接口)。
  4. 使用 Zadig,您现在应该可以看到您的设备,将驱动程序更新为 libusbk
  5. 重启电脑(重要)

代码:

const decoder = new TextDecoder();

const startDevice = async () => {
    try {
        // you should be able to discover your PRODUCT_ID and VENDOR_ID from
        // chrome://device-log
        const device = await navigator.usb.requestDevice({
            filters: {
                productId: PRODUCT_ID,
                vendorId: VENDOR_ID
            }
        });

        // log device data to see available configurations and interfaces
        await device.open();
        // only 1 configuration was available for me
        await device.selectConfiguration(1);
        // interface 1 was bulk transfer
        await device.claimInterface(1);

        readLoop(device);
    } catch (error) {
        console.error(error);
    }
}

const readLoop = async (device) => {
    try {
        const result = await device.transferIn(1, 64);
        // this is your incoming data
        const data = decoder.decode(result.data).trim();

        readLoop(device);
    } catch (error) {
        console.error(error);
    }
}
于 2018-11-21T17:09:29.127 回答
1

我的猜测是虚拟串行端口驱动程序(将其安装为 COM3)已捕获该设备。也许卸载驱动程序再试一次?

于 2018-05-17T10:18:46.863 回答