ihciah / miaomiaoji-tool

A python tool to control MiaoMiaoJi / Paperang / 喵喵机
https://www.ihcblog.com/miaomiaoji/
MIT License
157 stars 52 forks source link

关于喵喵机P2的USB协议 #8

Open hurui200320 opened 4 years ago

hurui200320 commented 4 years ago

原本想研究一下蓝牙的,但是开发起来有点困难,于是开始着手于USB协议的研究。最新版的喵喵机P2配合原版软件安装驱动后已经能够被Windows识别成打印机了,可以在Office等软件中使用。在对原版软件抓包的过程中发现USB BULK的数据包和项目中喵喵机所用的蓝牙协议有类似的地方。详情如下: 喵喵机P2在USB中ID为:4348:5584,写打印的Endpoint地址是0x02。数据Payload如下:

0000   02 00 e0 40 02 ff ff ff ff ff ff ff ff ff ff ff
0010   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0020   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0030   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0040   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0050   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0060   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0070   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0080   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0090   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
00a0   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
00b0   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
00c0   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
00d0   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
00e0   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
00f0   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0100   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0110   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0120   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0130   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0140   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0150   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0160   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0170   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0180   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0190   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
01a0   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
01b0   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
01c0   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
01d0   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
01e0   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
01f0   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0200   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0210   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0220   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0230   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0240   ff ff ff ff ff 7a 52 58 6a 03

其中首字节是0x02。随后一个字节的控制命令:打印是0x00,查询设备信息是0x1a,设备响应是0x0a。之后一个字节是包的序列号。 之后两个字节是payload长度,如上例是0x0240,十进制576。接着是4字节CRC32校验码,但是目前上不明确是怎么算得。抓包发现payload序列在变化,而CRC却没有变,由此可以确定起点应该在第三个字节之后,但是通过各种尝试并没有算出与原文相符的值。 最后一个字节就是0x03。

上面的内容与项目中所说的喵喵机蓝牙协议极为相似,几乎是完全相同。

这里想请教一下CRC32的验证是怎么出来的,我感觉应该就是单纯的payload,就是一堆ff,但是算出来不对,加上面前两个字节的长度也不对。

PS:以前没抓过USB包,这算是现学现买,说的可能有错,还请多指教。

ihciah commented 4 years ago

+1 我也算了下,没算出来这个。 可能key改了?你可以逆一下驱动试试。我的这个代码是17年夏天写的了

e7h4n commented 4 years ago

我试了下之前的代码,把蓝牙连接部分改成串口,可以打印出一条黑线。但是打印图片和文字都不 ok

e7h4n commented 4 years ago

搞定了通讯的部分。但图片打印出来都是花的。不确定是不是因为 P2 的分辨率和之前的喵喵机不一样

lzcjames commented 4 years ago

我幸运的找到了一篇文章,详细介绍P1和P2用USB打印的原理,末尾也有他的Github链接。