我正在尝试从通过RS-232串行通信进行通信的电子秤获取读数,并使用WebUsb API将其值输入到Web应用程序中。我正在获取数据,但是在解码之后,它像这样�
。我在串行终端中获取了正确的数据。
这是数据的代码。
`navigator.usb.requestDevice({ filters: []})
.then((requestedDevice) => {
device = requestedDevice;
}).then(() => {
console.log(device);
return device.open();
}).then(() => device.selectConfiguration(1)) // Select configuration #1 for the device.
.then(() => {
return device.reset();
}).then(() => device.claimInterface(0))
.then(() => {
return device.transferIn(1, 16)
})
.then((data) => {
console.log(data)
console.log(new TextDecoder().decode(data.data));
}).catch(err => {
console.log(err);
}); `
我是否对此有所遗漏?是波特率设置吗,我知道波特率是9600,但如何在这里设置。
请帮助。
答案 0 :(得分:1)
我已将 Gerrit 的 pl2303 repository 移植到 WebUSB:https://github.com/Folleon/pl2303-webusb
目前我只需要读取数据,因此我不确定写入是否也有效。但是,至少到目前为止,所有设置和批量读取都运行良好。
请注意,设置波特率失败,输入状态为 stall
– 我无法解决这个问题。但是,假设波特率为 9600,它仍然可以工作。
答案 1 :(得分:0)
您确定数据需要解码为文本吗?您要传递给解码()的DataView中的值是什么?
要设置波特率,您需要找到用于配置设备的USB控制传输的文档。我在Prolific的任何数据表中都找不到,但是该芯片的Linux驱动程序可能是一个很好的参考:
https://github.com/torvalds/linux/blob/v4.16/drivers/usb/serial/pl2303.c
该文件中的pl2303_set_termios
函数构造发送到设备的命令,以配置诸如波特率和奇偶校验等参数。