gpt4 book ai didi

c# - 逆向工程串行命令

转载 作者:太空狗 更新时间:2023-10-29 19:47:11 27 4
gpt4 key购买 nike

tl;博士;

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

即:

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.

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

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

[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 和 100 之间的值,用于引用暗淡级别
    • hex 55 再次发送回来告诉你它已经准备好了
  2. 第二对使用第一个字符作为字母代码(HouseCode = A、B、C 等),第二个字符是地址(DeviceCode = 1 , 2, 3, 等等)
    • 有了这些信息,我个人的猜测是……
      • 6 必须直接对应A
      • e 必须直接对应B
  3. 第四对以与第二对相同的 HouseCode 开头
  4. 第四对以FunctionCode结尾
    • 1 = 全开
    • 2 = 开
    • 3 = 关闭
    • 4 = 昏暗
    • 5 = 明亮
    • 6 = 全部关闭
    • 等..
  5. 第五对仅在 bright/dim 命令中显示,代表 0 到 100 之间的数字

最后,在文档中,每个命令都与二进制数据相关,因此可能不是A1 转换为 hex ,而是 binaryhex

HouseCode       DeviceCode      Binary Value
A 1 0110
B 2 1110
C 3 0010
D 4 1010
E 5 0001
F 6 1001
G 7 0101
H 8 1101
I 9 0111
J 10 1111
K 11 0011
L 12 1011
M 13 0000
N 14 1000
O 15 0100
P 16 1100

FunctionCode Binary Value
All Units Off 0000
All Lights On 0001
On 0010
Off 0011
Dim 0100
Bright 0101
All Lights Off 0110
Extended Code 0111
Hail Request 1000
Hail Acknowledge 1001
Pre-set Dim (1) 1010
Pre-set Dim (2) 1011
Extended Data Transfer 1100
Status On 1101
Status Off 1110
Status Request 1111

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

最佳答案

Heyu是用于 X10 设备的出色开源应用程序。他们发布了非常全面的 X10 protocol specification基于 X10 的原始文档。

这应该可以消除您工作中的猜测工作。重要的是housecode和unitcode是静态 map ,无法计算。协议(protocol)规范明确指定了比特流是如何形成的。例如

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.

关于c# - 逆向工程串行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13352485/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com