逆向工程黑盒串行协议

时间:2010-08-01 16:16:14

标签: serial-port driver reverse-engineering device-driver

我正在为NewTek LiveControl LC-11编写OS X驱动程序,如此处所示。

newtek.com/addons/livecontrol.php

在我的逆向工程过程中,我发现它正在使用串行到USB转换器,并且当按下按钮或模拟值改变时,它与十六进制输出通信。使用此输出我已经能够插入每个按钮,数字旋钮和模拟滑块,但目前仍然在解释两个模拟操纵杆和控制背光LED。 这是各个位置的操纵杆输出值表。

(很抱歉,我无法嵌入图像,但是因为我刚刚注册,所以堆栈溢出不会让我。)

         Left   Center  Right  
Top     ^529DC  ^587FF  ^5D6DA  
Center  ^50883  ^58181  ^5F280  
Bottom  ^51E2F  ^57C00  ^5BC1F  

http://i28.tinypic.com/217vbr.png

我认为'^'是某种标记(其他一些按钮的代码以'〜'开头,而某些发布事件除了来自消息的'\ r'之外没有任何标记之前我完全没有在这些标记中解释任何模式,但我认为它不一定重要。)我知道每个操纵杆都有自己独特的输出值范围。如果有人能对这个谜团有所了解,我们将不胜感激。 :d

2 个答案:

答案 0 :(得分:2)

有趣的谜题!

第一个(十六进制)数字总是5.让我们忽略那一个。 (也许它是操纵杆的标识符?)

左列中的第二个和第三个低(29,08,1E)。它们位于中间柱(87,81,7C)的一半范围内。它们在右栏(D6,F2,BC)中很大。所以这必须是X坐标。

顶行的最后两位数字很大(DC,FF,DA)。中间行的最后两个是范围的一半(83,81,80)。底行的最后两个是低(2F,00,1F)。所以这显然是Y坐标。从外部两个值远离极端的方式来判断,我猜测操纵杆在一个圆圈中移动(而不是方形)?

长话短说,格式似乎是:

^5xxyy

这里,xx是描述X位置的一个字节(以十六进制表示法写入),左边是0,中心是80,右边是FF。类似地,yy是Y位置,底部是0,中心是80,顶部是FF。

答案 1 :(得分:1)

看起来数据包以两个字节开头:^ 5后跟四个十六进制数字,代表两个字节。像这样:

^5   left/right   up/down

单独查看数字:

居中顶部和底部:

left:    ^5   08(8)    dont_care
center:  ^5   81(129)  dont_care
right:   ^5   F2(242)  dont_care

左右中心:

top:     ^5 dont_care  FF(255)
center:  ^5 dont_care  81(129)
bottom:  ^5 dont_care  00(0)

所以这意味着理想情况下,操纵杆的极左或底部值应为0,极端顶部或右侧的值应为255(0xFF)。

当然,物理上操纵杆看起来向右偏移一位(129而不是128)并且无法达到左右的最大值(8和242而不是0和255)。 / p>