使用 Web HID API 在浏览器中进行HID设备交互(纯前端)
创作时间:
作者:
@小白创作中心
使用 Web HID API 在浏览器中进行HID设备交互(纯前端)
引用
CSDN
1.
https://blog.csdn.net/Naisu_kun/article/details/132539918
Web HID API是浏览器中用于与HID(Human Interface Device)设备进行交互的实验性API,允许网页直接读写HID设备的数据。本文将详细介绍Web HID API的基础使用方法,并通过一个实际的HID透传测试工具项目,展示如何在纯前端环境中实现与HID设备的交互。
目的
最近在研究HID透传功能(参考《STM32 USB使用记录:HID类设备(后篇)》)。市面上现有的各种测试工具都存在一些问题,因此决定自己开发一个测试工具。考虑到纯前端方案的便利性,这里对Web HID API的相关内容进行记录。
基础说明
Web HID API的相关内容主要参考以下资源:
需要注意的是,这个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 disconnected: ", 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设备而言,主要有feature、input、output三项可以用来数据读写交互的,前提是设备自身支持:
// 读取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设备非常方便,目前来说唯一的问题是这还是实验性质的功能,可能之后接口还会变动,需要根据实际情况进行调整。
本文原文来自CSDN
热门推荐
东航“空港通”让往返虹桥浦东旅客高效中转、快速直达
ARTAS机器人植发技术:7000美元起,效果更自然
中国医大附院专家详解:植发手术全流程注意事项
痤疮治疗首选维A酸:三种常用药物对比及使用攻略
历代驰名第一妖的孙悟空,凭什么成为中国人的“梦中情猴”?
维A酸治痤疮:6月疗程见效,但有致畸风险需警惕
陈自瑶时尚大片曝光:42岁美腿吸睛,从模特到视后的坚韧之路
掌握“次要”之道,让表达更清晰有力
《迷你世界》地图更新完全攻略:从编辑到分享一文掌握!
《迷你世界》×《斗罗大陆》:跨地图数据存储打造沉浸式体验
油皮可全脸用,干皮只涂患处:弱酸清洁去除闭口指南
别再用维B6湿敷了!皮肤科医生教你科学治疗闭口
告别青春痘:科学解读痤疮形成与五步治疗方案
苏州园林边的潘玉麟糖粥,你打卡了吗?
金鸡湖畔:美食与休闲的完美邂逅
拙政园周边美食打卡攻略:从传统到创新的味觉盛宴
清宫苏宴:从乾隆年夜饭到苏州织造官府菜
松鹤楼:270年老字号的传承与创新
算法黑箱:设计师如何破解AI决策的神秘面纱?
笑口常开,健康自来——面对肺结节的正确姿势
西岭雪山滑雪攻略:7条雪道、4家酒店,成都最大滑雪场等你来
成都三大文化地标:诗圣草堂、三国祠庙与现代博物馆
探索游戏中的主要角色:背后的故事与玩家共鸣
讨厌一个人,其实不用翻脸,最有水平的处理方式是“空椅子技巧”
肉桂树的神奇生长秘密
武夷岩茶肉桂:品种特点一览
值得阅读的书籍推荐:15本非常值得阅读的好书,推荐给大家!
揭秘微信做任务赚钱公众号:高回报背后的风险与防范
《汪汪队立大功大电影2》爆火:从制作到教育意义的全面解析
微信收徒赚钱:是创业良机还是法律风险?