逆向工程串行命令

时间:2012-11-12 22:17:46

标签: c# serial-port hex reverse-engineering x10

TL;博士;

我需要做的是逆向工程串行命令,以便我可以弄清楚如何将人类可读值或二进制值序列化为原始串行命令。

IE:

if
   66 = 'A1' or '0110 1'
   6e = 'A2' or '0110 2'
   e6 = 'B1' or '1110 1'
   ee = 'B2' or '1110 2'
then
   what is A3 or B3, etc.

我正在开发一个开源自动化项目的包装器。

有一种方法可以发送raw命令,理论上可以将多个命令串在一起 我嗅了几个串行命令,这就是它们的样子。

[init] [HouseCode | DeviceCode] [ready] [HouseCode | FunctionCode]   

04 66 06 62       // A1 ON
04 6e 06 62       // A2 ON 
04 62 06 62       // A3 ON
04 6a 06 62       // A4 ON
04 61 06 62       // A5 ON
04 69 06 62       // A6 ON
04 65 06 62       // A7 ON
04 6d 06 62       // A8 ON
04 67 06 62       // A9 ON
04 6f 06 62       // A10 ON
04 63 06 62       // A11 ON
04 6b 06 62       // A12 ON
04 60 06 62       // A13 ON
04 68 06 62       // A14 ON
04 64 06 62       // A15 ON
04 6c 06 62       // A16 ON

04 e6 06 e2       // B1 ON 
04 ee 06 e2       // B2 ON  
04 e2 06 e2       // B3 ON 
04 ea 06 e2       // B4 ON 
....
04 ec 06 e2       // B16 ON
04 66 06 63       // A1 Off
04 e6 06 e3       // B1 Off

04 66 06 61       // All A lights On (using A1 as the starting point)
04 e6 06 e1       // All B lights On (using B1 as the starting point)
04 66 06 66       // All A lights Off (using A1 as the starting point)
04 e6 06 66       // All B lights Off (using A1 as the starting point)

04 66 06 64 2a    // A1 Dim 20
04 66 06 64 2c    // A1 Dim 21
04 66 06 64 2e    // A1 Dim 22

04 66 06 65 2a    // A1 Bright 20
04 66 06 65 69    // A1 Bright 50

我需要做的是对其进行逆向工程,以便我可以通过编程方式进行串行调用,或者更好地了解人类可读值或二进制值值被序列化为原始串行命令。

是的,我可以嗅探所有命令并分别存储每个值,但我想知道这是怎么做的。

这是我目前的观察结果。

  1. 电话分为两部分。
      启动
    • 04并告诉设备要查找的内容
    • **告诉系统正在控制哪个设备[HouseCode& DeviceCode]
    • hex 55返回告诉您已准备就绪
    • 启动
    • 06并告诉设备预期会发生什么
    • **告诉系统房屋代码和命令[HouseCode& FunctionCode]
      • **可选择发送,且值介于0和0之间。 100来引用昏暗的水平
    • 再次发送
    • hex 55告诉您已准备就绪
  2. 第二对使用第一个字符作为字母代码(HouseCode = A,B,C等),第二个字符是地址(DeviceCode = 1,2,3等)
    • 有了这些信息,我的个人猜测是......
      • 6必须直接对应A
      • e必须直接对应B
  3. 第四对以与第二对
  4. 相同的HouseCode开头
  5. 第四对以FunctionCode结尾
    • 1 =全部开启
    • 2 = on
    • 3 =关闭
    • 4 =昏暗
    • 5 =明亮
    • 6 =全部关闭
    • 等。
  6. 第五对仅显示在明亮/暗淡的命令上,表示0到100之间的数字
  7. 最后,在文档中,每个命令都与二进制数据相关,因此将A1转换为hex可能,而是{{} 1}}到binary

    hex

    有谁知道如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

Heyu是一个用于处理X10设备的出色开源应用程序。他们根据X10的原始文档发布了一篇非常全面的X10 protocol specification

这应该可以让你的工作完成猜测。重要的是房屋代码和单位代码是静态地图,无法计算。协议规范确切地指定了比特流的形成方式。 E.g。

PC      Interface   Description
0x04,0x66           Address A1
        0x6a        Checksum ((0x04 + 0x66)&0xff)
0x00                OK for transmission.
        0x55        Interface ready.

0x86,0x64           Function: A Dim 16/22*100%
        0xea        Checksum ((0x86 + 0x64)&0xff)
0x00                OK for transmission.
        0x55        Interface ready.