|
某宝剁手的时候入了几个 USB 邮箱灯,外形颇为精致。原单是外贸货,店家并未折腾成功,故无资料。
本想买来拆外壳玩,不料居然在 Win10 下成功驱动了起来,特来分享之。
【剁手】
USB 邮箱灯是个邮箱形状的红色小灯,一端有 USB 插头,尺寸非常迷你:
原本设计的是用来提醒新邮件的,插在 USB 口上由 PC 软件控制:
但也许是时间过于久远,店家这批邮箱灯配套的 CD、驱动软件都已丢失,于是廉价处理。
入手后这包装也是满满的小清新风格,仿佛要把整张图纸都画上一样:
【分析驱动:USB-HID】
虽然从最开始就已做好拆壳准备,但还是在笔记本上插了一下,结果 Win10 x64 居然成功安装了驱动:
不得不说 Win10 自带的 USB 驱动是真的很全,这么偏的硬件居然可以免驱运行。
为了安全起见(例如防止硬件内部短路),我把邮箱灯插在了外供电集线器上,这样一来想要找到新增硬件也略微费劲。
Usb Device Viewer 搞起来,很快就在 USB 树下找到了设备,信息如下:
从 Device Information 报告来看,设备在 USB 物理传输层没毛病,可以正确向 PC 报告设备自身信息。
再仔细分析设备信息 Open_Pipe=1,Interface=HID,基本可以确认邮箱灯使用了单传输通道的 HID 协议。
难怪可以在 PC 层直接免驱运行,HID 协议(常用于鼠标键盘)也算是 Windows 着重关照的一类设备。
虽说可以直接使用 libusb 之类开源库重编写驱动,但由于并不知道高层控制协议,只得求助网络。
这一查不要紧,原来老外早就有了开源项目,已完整破解了高层控制协议,并有直接 C# 编写的控制台驱动。
分享来开源驱动包的项目地址:
http://www.java2s.com/Open-Sourc ... d_Stress_Button.htm
为防止网址被墙,C# 源码驱动包也转来:
直接运行代码包中可执行文件,提示需要使用控制台脚本加参数,同时居然提示找不到设备:
查看源码发现,默认邮箱灯访问的是 Vid/Pid=0x1d34/0x0004,而设备报告的是 Vid/Pid=0x1d34/0x000a.
想来是山寨厂家修改了 PID 来做独立驱动,结果最后厂子也黄了,产品也被处理给了剁手怪....
还好驱动已经考虑到了这种情况,直接指定 device 参数即可设定。编写了一个简单的 bat 脚本果然成功驱动:
- DreamCheekyLED.exe device="0x1D34,0x000A,0" testblink
- pause
复制代码
另存 bat 文件后,放在 DreamCheekyLED.exe 目录运行脚本效果如下:
附上几个写好的 bat 脚本,可直接运行:
【重写高层:监视编译器】
至此获得了一只可控的硬件 LED,但仍缺少高层事件源。原设计是通过 PowerShell 脚本接收新邮件通知,但如今邮箱用的太少故作罢。
不过既然外形这么可爱,不指示点啥实在浪费颜值,思前想后决定做一个 CPU 负担指示器。
经常写高层、HDL层程序的各位,可能经常会被慢如老牛的编译器折腾到崩溃,如果拿此灯指示编译进行中,想来比较新鲜。
至于原理也并不复杂:后台监控 CPU 负担,当负担达到了设定的阈值即亮灯,待负载降下来再熄灭。MFC走起来:
简单获取 CPU 负担,并与现有设定阈值比较,超负荷后使用 WinExec 调用 C# 写好的底层驱动,界面外观如下:
调整下阈值,就可以灵敏地监测编译器工作了。例如监视 Quartus 编译过程(编译中亮灯,完成后熄灭):
附上可执行文件及源码:
这个 USB 邮箱灯说白了就是个自定义 HID 协议的双色硬件灯,可以通过 HID 驱动或者现成 C# 驱动控制。
至于高层的事件源,可以是原新邮件通知,也可以使用 PC 本地数据。编写不同的事件捕获器,即可实现任意门通知。
--------------------------------------------------------
以上,剁手了一批 USB 接口的邮箱指示灯,通过分析 USB 报告配合网上开源代码,实现了 HID 层的点灯驱动。
顺手写了一个 CPU 负担监控器,负担超限后点亮邮箱灯,可用于监控编译器工作状态,终得物尽其用。
最后祝大家折腾愉快!
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|