使用 Web HID API 在浏览器中进行HID设备交互(纯前端)

目的

最近在搞HID透传 《STM32 USB使用记录:HID类设备(后篇)》

市面上的各种测试工具都或多或少存在问题,所以就自己写一个工具进行测试。目前来说纯前端方案编写这个工具应该是最方便的,这里对 Web HID API 相关内容做个记录。

基础说明

Web HID API 相关内容参考如下:
https://developer.mozilla.org/en-US/docs/Web/API/WebHID_API
https://developer.mozilla.org/en-US/docs/Web/API/HID
https://developer.mozilla.org/en-US/docs/Web/API/HIDDevice
https://developer.mozilla.org/en-US/docs/Web/API/HIDInputReportEvent
https://wicg.github.io/webhid/

这个API目前还处于实验性质,只有电脑上的Chrome、Edge、Opera等浏览器支持:
在这里插入图片描述

另外还需要注意的是从网页操作设备是比较容易产生安全风险的,所以这个API只支持本地调用或者是HTTPS方式调用。

使用下面方法可以侦测电脑上HID设备插入与拔出:

// 全局HID设备插入事件
navigator.hid.onconnect = (event) => {
    console.log("HID connected: ", event.device);
};

// 全局HID设备拔出事件
navigator.hid.ondisconnect = (event) => {
    console.log("HID connected: ", event.device);
};

使用下面方法可以显示电脑上的HID设备选择授权,或者显示已授权的HID设备列表:

// requestDevice方法将显示一个包含已连接设备列表的对话框,用户选择可以并授予其中一个设备访问权限
const devices = await navigator.hid.requestDevice({ filters: [] });
// 注意这里返回的是一个数组

// const devices = await navigator.hid.requestDevice({
//     filters: [{
//         vendorId: 0xabcd,  // 根据VID进行过滤
//         productId: 0x1234, // 根据PID进行过滤
//         usagePage: 0x0c,   // 根据usagePage进行过滤
//         usage: 0x01,       // 根据usage进行过滤
//     },],
// });

// getDevices方法可以返回已连接的授权过的设备列表
// let devices = await navigator.hid.getDevices(); 

使用下面方法可以打开或关闭HID设备等:

if (!device.opened) { // 检查设备是否打开
    await device.open(); // 打开设备
}
// await device.close(); // 关闭设备
// await device.forget() // 遗忘设备

使用下面可以读写数据:
对于HID设备而言主要有 featureinputoutput 三项可以用来数据读写交互的当然前提是设备自身支持。

// 读取Feature
const dataView = await device.receiveFeatureReport(reportId);

// 写Feature
await device.sendFeatureReport(reportId, data);

// 向HID设备发送数据
await device.sendReport(reportId, data); // reportId写0表示不适用reportId

// 监听来自HID设备的数据(input)
device.oninputreport = (event) => {
    console.log(event); // event中包含device、reportId、data等内容
};

示例工程(HID透传测试工具)

代码与说明:《基于 Web HID API 的HID透传测试工具(纯前端)》
项目地址:https://github.com/NaisuXu/HID_Passthrough_Tool
在这里插入图片描述

总结

使用 Web HID API 访问HID设备非常方便,目前来说唯一的问题是这还是实验性质的功能,可能之后接口还会变动,等根据实际情况进行调整。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: hidapi.dll是一个用于控制和访问USB HID设备的动态链接库。HID(Human Interface Device)是一种通用的设备类别,包括键盘、鼠标、游戏手柄等。hidapi.dll提供了一系列函数,使得开发人员可以使用C/C++语言进行编程,以控制和读取USB HID设备的数据。 使用hidapi.dll的第一步是将该库文件包含在项目,并确保编译器可以找到相关的头文件和导入库。接下来,我们需要初始化hidapi库并获得设备列表,以便在程序选择和打开所需的USB HID设备。 一旦成功地打开了设备,我们就可以使用hidapi提供的函数来读取设备发送的数据或发送命令到设备hidapi.dll提供了读取和写入函数,使得我们可以与USB HID设备进行双向通信。我们可以根据需求,选择一次读取一个字节或一次读取多个字节,以及写入单个字节或多个字节。 在处理完数据后,我们需要关闭设备,释放资源,并退出hidapi库。这样可以确保设备使用完成后被正常关闭,避免资源泄露和错误。 总而言之,hidapi.dll是一个非常有用的动态链接库,可以帮助我们方便地控制和读取USB HID设备的数据。通过正确使用hidapi.dll提供的函数,我们可以轻松地开发各种与USB HID设备交互的应用程序。 ### 回答2: hidapi.dll是一个用于访问Human Interface Device (HID) 的动态链接库文件。HID是一个规范,用于定义计算机与外部设备(如键盘、鼠标、游戏手柄等)之间的通信协议。hidapi.dll提供了一组接口函数,使开发人员可以通过编程方式与HID设备进行通信。 要使用hidapi.dll,首先需要将该文件引入到你的项目。可以通过将hidapi.dll复制到你的项目文件夹,或者将其路径添加到系统环境变量。然后,在你的代码引入hidapi.dll的头文件,并使用的接口函数。 hidapi.dll的接口函数可以帮助你实现与HID设备的连接、数据读写、设备信息获取等功能。例如,你可以使用hid_init函数来初始化hidapi库,在连接设备之前执行一些必要的初始化操作。然后,使用hid_open函数打开一个HID设备的连接,并返回一个操作句柄。通过该句柄,你可以使用hid_read、hid_write等函数来读写HID设备的数据。最后,使用hid_close来关闭与设备的连接。 使用hidapi.dll需要一定的编程知识和对HID设备通信协议的了解。你需要知道HID设备的Vendor ID和Product ID,以便确定要连接的设备,并使用对应的接口函数进行通信。此外,hidapi.dll也提供了一些其他的辅助函数,用于获取设备列表、获取设备信息等。 总而言之,hidapi.dll是一个方便的工具,用于与HID设备进行通信。通过使用的接口函数,你可以方便地实现与HID设备的连接、数据读写等功能。一旦你掌握了hidapi.dll的使用方法,你就可以更灵活地利用HID设备,并开发出更加丰富的应用程序。 ### 回答3: hidapi.dll是一个动态链接库(DLL)文件,用于与HID(Human Interface Device)设备通信。HID设备是指基于USB(Universal Serial Bus)接口的各种设备,如键盘、鼠标、游戏手柄等。hidapi.dll提供了一组函数和接口,用于与HID设备进行连接、数据读写和设备管理。 要使用hidapi.dll,首先需要在计算机上安装该库文件。然后,在开发环境创建一个项目,并将hidapi.dll添加到项目作为依赖库。接下来,需要引入hidapi的头文件,并根据需要调用相应的函数和接口。 hidapi.dll提供了一系列函数来管理和操作HID设备。例如,可以使用hid_open函数打开一个HID设备,并返回一个句柄,通过这个句柄可以进行后续的操作。通过hid_read和hid_write函数可以分别读取和写入HID设备的数据。另外,hid_close函数可以关闭与HID设备的连接。 使用hidapi.dll需要注意一些事项。首先,需要根据HID设备的规格和要求,了解设备所需的通信协议和数据格式。其次,需要根据具体的使用场景和需求,选择合适的函数和接口进行调用。最后,使用hidapi.dll进行开发时,需要进行错误处理和异常处理,以确保程序的稳定性和可靠性。 总之,hidapi.dll提供了一种方便和灵活的方式,使开发者能够与HID设备进行通信和交互。通过学习和了解hidapi.dll的使用方法,开发者可以更加高效地开发各种基于HID接口的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Naisu Xu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值