数码之家

 找回密码
 立即注册
搜索
查看: 6536|回复: 43

[外设] USB邮箱灯折腾手记:定位驱动、重写高层并实现编译指示灯(原创)

  [复制链接]
发表于 2021-6-21 01:26:25 | 显示全部楼层 |阅读模式
某宝剁手的时候入了几个 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 脚本果然成功驱动:

  1. DreamCheekyLED.exe  device="0x1D34,0x000A,0"  testblink
  2. 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

打赏

参与人数 9家元 +161 收起 理由
snowrose2000 + 20 謝謝分享
兔包公 + 20 膜拜大婶
kkdkj + 20 謝謝分享
jf201006 + 20 原創內容
hfsp + 20 謝謝分享
aacyxjz + 20 優秀文章
miqi328 + 20 謝謝分享
chenzoutie + 1 原創內容
azzajazz + 20

查看全部打赏

发表于 2021-6-21 01:47:21 | 显示全部楼层
创意不错,不知道可以做出消息提示灯?不同软件的提示,用不同灯光。就算关闭了屏幕,或者全屏看电影时也知道收到什么类型的消息:lol:
回复 支持 反对

使用道具 举报

发表于 2021-6-21 02:01:30 来自手机浏览器 | 显示全部楼层
grkuqq 发表于 2021-6-21 01:47
创意不错,不知道可以做出消息提示灯?不同软件的提示,用不同灯光。就算关闭了屏幕,或者全屏看电影时也知 ...

微信绿色,QQ红色,看看有没有啥办法读取图标闪烁应该能解决
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-21 02:35:23 | 显示全部楼层
grkuqq 发表于 2021-6-21 01:47
创意不错,不知道可以做出消息提示灯?不同软件的提示,用不同灯光。就算关闭了屏幕,或者全屏看电影时也知 ...

理论上可以,但实际这些大佬的软件都不公开,基本都是要破解。

以 qq 为例,接收消息过程大致为:网络数据包 -> qq接收/内核/显示 -> 屏幕。
a. 网络数据包可以用 python 之类工具爬取,但是前提是要知道协议(可参考开源);
b. qq 内部细节不用讲了,这个软件从头到尾都是“不让你看到内部数据”的非标准模式。
   窗体不标准、结构不标准,啥都不标准就怕你破解。
c. 屏幕一端还好弄点,定期指定位置截屏,分析位图还是可以知道点状态,但屏保时不适用。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-21 02:36:47 | 显示全部楼层
azzajazz 发表于 2021-6-21 02:01
微信绿色,QQ红色,看看有没有啥办法读取图标闪烁应该能解决

在桌面模式下,用 WinAPI 截屏再位图比对,的确可以获取app状态。

不过这个不太适合屏保、锁屏状态。这俩状态下基本需要网络截包、内存抓取
回复 支持 反对

使用道具 举报

发表于 2021-6-21 08:08:29 | 显示全部楼层
建议改成:老板距离10米就亮灯:lol:
回复 支持 反对

使用道具 举报

发表于 2021-6-21 08:32:55 | 显示全部楼层
好文章,好技术,能申精
回复 支持 反对

使用道具 举报

发表于 2021-6-21 08:33:11 | 显示全部楼层
wangk 发表于 2021-6-21 08:08
建议改成:老板距离10米就亮灯

那你还得给老板脖子上挂一个项圈,再弄一个距离探测装置或者搞个人脸识别装置。哈哈
回复 支持 反对

使用道具 举报

发表于 2021-6-21 08:45:54 | 显示全部楼层
创意不错,不过大部分的邮箱客户端都有语音或者声音提示啦。楼主这个建议有来信的时候做成持续闪烁,现在图中貌似是只闪烁几下就停了?
回复 支持 反对

使用道具 举报

发表于 2021-6-21 09:14:38 | 显示全部楼层
楼主很腻害,加分点赞支持
回复 支持 反对

使用道具 举报

发表于 2021-6-21 09:19:14 | 显示全部楼层
拆开外壳改到笔记本内置里,台式机可以改到键盘里:lol:
不过我邮箱软件都后台运行的,看桌面图标提示就知道。
回复 支持 反对

使用道具 举报

发表于 2021-6-21 10:29:30 | 显示全部楼层
t3486784401 发表于 2021-6-21 02:36
在桌面模式下,用 WinAPI 截屏再位图比对,的确可以获取app状态。

不过这个不太适合屏保、锁屏状态。这 ...

检测声音提醒也行吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-21 10:58:19 | 显示全部楼层
wangk 发表于 2021-6-21 08:08
建议改成:老板距离10米就亮灯

摸鱼专用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-21 10:58:54 | 显示全部楼层
liu98986623 发表于 2021-6-21 08:32
好文章,好技术,能申精

感谢支持!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-21 10:59:40 | 显示全部楼层
狗剩的青春 发表于 2021-6-21 08:33
那你还得给老板脖子上挂一个项圈,再弄一个距离探测装置或者搞个人脸识别装置。哈哈 ...

给老板的手机里植木马比较隐蔽,但前提是老板技术小白
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-21 11:01:02 | 显示全部楼层
enlike 发表于 2021-6-21 08:45
创意不错,不过大部分的邮箱客户端都有语音或者声音提示啦。楼主这个建议有来信的时候做成持续闪烁,现在图 ...

闪几下、亮多久是程序里控制的,1L 动图里那个是测试脚本,自然是要各种花样闪烁
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-21 11:01:39 | 显示全部楼层
aacyxjz 发表于 2021-6-21 09:14
楼主很腻害,加分点赞支持

感谢支持,欢迎折腾!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-21 11:06:17 | 显示全部楼层
solarshen666 发表于 2021-6-21 09:19
拆开外壳改到笔记本内置里,台式机可以改到键盘里
不过我邮箱软件都后台运行的,看桌面图标提示就知道 ...

这几这个硬件的老外,估计就是厌烦看桌面了。

我也时常嫌桌面不够用,搞一些副屏来显示额外信息
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-21 11:06:58 | 显示全部楼层
瞳教授 发表于 2021-6-21 10:29
检测声音提醒也行吧

理论上没毛病,实际不如单片机来做,结果这个灯就晾一边了
回复 支持 反对

使用道具 举报

发表于 2021-6-21 13:58:05 | 显示全部楼层
这个还能定位的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-10 23:18 , Processed in 0.280801 second(s), 14 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表