富士通IR远程校验和计算

时间:2018-01-30 22:37:37

标签: bit-manipulation protocols checksum infrared

我正在尝试对家庭自动化项目的Fujitsu AC远程控制协议进行逆向工程。我已经知道哪些字节对应于哪些控制信息,但最后有一个校验和。

我相信校验和是使用其他三个字节(温度,模式和风扇速度)计算的。

我使用电子表格尝试逆向工程已执行的操作以获得校验和,并发现温度为" 00001010"以及任何模式/风扇速度组合,以下算法都适用;

校验和= 392 - (温度+模式+风扇速度)

Example
392 - (10 + 64 + 128) = 190
392 - (10 + 192 + 128) = 62
392 - (10 + 32 + 128) = 222

然而,没有其他温度(我已经测试过)以这种方式工作。我目前的理论是温度首先对其进行了一些其他操作,无论这种操作是什么,都会产生相同的温度值,而不是其他温度。

原始数据:

Temperature, Mode, Fan Speed, Checksum

00000110, 10000000, 10000000, 01110110
00001010, 10000000, 10000000, 01111110
00000010, 10000000, 10000000, 01110001

完整的电子表格:This link

我无法确定正在对温度执行哪些操作,或者实际上,如果我对算法的假设是正确的,那么我就无法理解。

我想知道是否有人对此类问题有更多经验,可能会对此有所了解?

附加功能:

温度值是温度的整数比如21度(00010101)

1. Reversed to get 10101000
2. Only the first four bits taken - 1010
3. Then expanded to get a value of 00001010

因此,上述原始数据中的00001010是21度的温度

  

原始问题已被编辑,因为我最初接近这个并且假设我的假设是正确的

1 个答案:

答案 0 :(得分:1)

在对Google搜索结果进行一些筛选后,我找到了以下解决方案。

感谢George Dewar Github

1. Reverse (flip) bytes 8 - 13 (I - N in spreadsheet)
2. Sum those bytes
3. (208 - sum) % 256
4. Reverse (flip) bytes of result

E.g。

Data: 00000110, 10000000, 10000000, 00000000, 00000000, 00000000

1. Reverse:
   01100000, 00000001, 00000001, 00000000, 00000000, 00000000
         96,        1,        1,        0,        0,        0
2. Sum:
   96 + 1 + 1 + 0 + 0 + 0 = 98

3. Calculate:
   (208 - 98) % 256 = 110 (dec) or 01101110 (bin)

4. Reverse:
   01110110

@ george-dewar在Github上提供的答案。所以非常感谢他。我永远不会这样做。我的唯一不同之处在于我的遥控器有更少的选项,因此反转和求和的字节更少,否则它就像乔治在他的示例代码中那样工作。