我试图使用usb从WebUSB条形码设备读取数据。
(具体来说,我使用了一个Datalogic QuickScan Lite qw2100。我已经配置了扫描仪来使用USB-COM-STD接口。)
使用下面的代码,我实际上可以从设备中读取数据。但只有点点滴滴。transferIn调用只返回一个字符。所以,要读取整个条形码,我需要循环。
我的问题:
配置传输模式。
另外,
NotAllowedError: Failed to open the device.对象.上的open()时,会得到一个HIDDevice错误。
亲切的问候!
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);
}发布于 2021-04-20 13:17:08
我没有使用你正在使用的条形码扫描器,但我在条形码扫描器方面的经验是,它们被配置成像键盘一样工作,并且不需要任何特定于USB的代码才能工作。
尝试将鼠标光标放在文本编辑器中并扫描条形码--与条形码相关的数字应显示在编辑器中。
发布于 2021-04-21 21:29:21
在每次传输中,从设备(条形码扫描器)发送到主机(膝上型计算机)的数据的数量完全由设备控制。对于一个也可以选择模仿键盘的设备来说,它一次只发送一个字符对我来说就不足为奇了。正如您建议的那样,可以通过发送控制传输来配置这一点。我会要求设备制造商提供它所支持的任何控制转移的文件。
使用WebHID从条形码扫描器读取数据可能不太实际,因为在HID模式下,设备很可能无法与键盘区分开来,这些都是API实现所不允许的。
https://stackoverflow.com/questions/67174789
复制相似问题