首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用WebUSB API从条形码扫描器读取数据

使用WebUSB API从条形码扫描器读取数据
EN

Stack Overflow用户
提问于 2021-04-20 08:00:31
回答 2查看 1K关注 0票数 0

我试图使用usb从WebUSB条形码设备读取数据。

(具体来说,我使用了一个Datalogic QuickScan Lite qw2100。我已经配置了扫描仪来使用USB-COM-STD接口。)

使用下面的代码,我实际上可以从设备中读取数据。但只有点点滴滴。transferIn调用只返回一个字符。所以,要读取整个条形码,我需要循环。

我的问题:

  1. ,这是transferIn的预期行为吗?还是我用错了界面?或者可以使用controlTransferOut?

配置传输模式。

另外,

  1. 的其他接口设置都是基于interfaceClass 10 (HID)的。但是我没有运气在这个设备上使用WebHID。当我试图调用NotAllowedError: Failed to open the device.对象.

上的open()时,会得到一个HIDDevice错误。

  1. 最后但并非最不重要的一点是,使用WebUSB (或WebHID)构建条形码应用程序是一种实用的途径。我见过许多使用WebUSB的usb设备的例子,但是很少有条形码阅读器的例子。这让我觉得我走错了路。--

亲切的问候!

代码语言:javascript
复制
    try {

      const filters = [{
        vendorId: 1529,    // Datalogic ADC, Inc
        productId: 16900   // Handheld Barcode Scanner
      }];
      const device = await navigator.usb.requestDevice({ filters })

      const configuration_number = 1  // device.configuration.configurationValue
      const interface_number = 1      // device.configuration.interfaces[1].interfaceNumber
      const interface_class = 10      // device.configuration.interfaces[1].alternates[0].interfaceClass
      console.log(device);
      console.log(`configuration number :  ${configuration_number}`);
      console.log(`interface number : ${interface_number} `);
      console.log(`interface class : ${interface_class} `);

      await device.open();
      await device.selectConfiguration(configuration_number);
      await device.claimInterface(interface_number);
      await device.controlTransferOut({
        requestType: 'class',
        recipient: 'interface',
        request: 0x22,
        value: 0x10,
        index: interface_number
      });

      const read = async (device) => {
        const result = await device.transferIn(2, 64);
        const decoder = new TextDecoder();
        const message = decoder.decode(result.data);
        return message
      }

      var m
      do {
        m = await read(device)
        console.log(m);
      } while (m.charCodeAt(0) !== 13)

    } catch (error) {
      console.log(error);
    }
EN

回答 2

Stack Overflow用户

发布于 2021-04-20 13:17:08

我没有使用你正在使用的条形码扫描器,但我在条形码扫描器方面的经验是,它们被配置成像键盘一样工作,并且不需要任何特定于USB的代码才能工作。

尝试将鼠标光标放在文本编辑器中并扫描条形码--与条形码相关的数字应显示在编辑器中。

票数 1
EN

Stack Overflow用户

发布于 2021-04-21 21:29:21

在每次传输中,从设备(条形码扫描器)发送到主机(膝上型计算机)的数据的数量完全由设备控制。对于一个也可以选择模仿键盘的设备来说,它一次只发送一个字符对我来说就不足为奇了。正如您建议的那样,可以通过发送控制传输来配置这一点。我会要求设备制造商提供它所支持的任何控制转移的文件。

使用WebHID从条形码扫描器读取数据可能不太实际,因为在HID模式下,设备很可能无法与键盘区分开来,这些都是API实现所不允许的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67174789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档