Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 反向工程松下红外代码校验和_Arduino_Reverse Engineering_Checksum - Fatal编程技术网

Arduino 反向工程松下红外代码校验和

Arduino 反向工程松下红外代码校验和,arduino,reverse-engineering,checksum,Arduino,Reverse Engineering,Checksum,我正在研制一台松下空调,它由红外遥控器控制。遥控器发送12个字节 前5个字节始终相同。下面的6个字节对应于空调温度、风扇、功能和其他选项,我可以自己计算出来 最后一个字节是从第一个11字节(或从字节6到11)获得的校验和 因为我在运行时重新创建IR代码,所以我需要能够计算这些数据包的校验和。我尝试了许多标准的校验和算法,但没有一个给出有意义的结果 你能帮我找出这个设备使用的校验和函数吗 下面是一个数据包列表,由标题+数据的11字节和校验和的1字节组成,我可以从设备中捕获: 40 00 14 8

我正在研制一台松下空调,它由红外遥控器控制。遥控器发送
12个字节

前5个字节始终相同。下面的
6个字节
对应于空调温度、风扇、功能和其他选项,我可以自己计算出来

最后一个
字节
是从第一个
11字节
(或从字节
6
11
)获得的校验和

因为我在运行时重新创建IR代码,所以我需要能够计算这些数据包的校验和。我尝试了许多标准的校验和算法,但没有一个给出有意义的结果

你能帮我找出这个设备使用的校验和函数吗


下面是一个数据包列表,由标题+数据的
11字节
和校验和的
1字节
组成,我可以从设备中捕获:

40 00 14 81 25 00 A0 65 00 00 26
40 00 14 81 25 00 A0 68 00 00 07 30
40 00 14 81 25 04 28 65 00 00 2A
40 00 14 81 25 04 28 68 00 00 2D
40 00 14 81 25 04 28 68 00 00 02 2F
40 00 14 81 25 04 28 68 00 00 03 30
40 00 14 81 25 04 28 68 00 00 04 31
40 00 14 81 25 04 28 68 00 00 05 32
40 00 14 81 25 04 28 68 00 00 07 34
40 00 14 81 25 04 28 69 00 00 01 2F
40 00 14 81 25 04 A0 68 00 00 07 34
40 00 14 81 25 08 9A 68 00 00 07 41
40 00 14 81 25 08 9C 68 00 00 07 43
40 00 14 81 25 08 9E 68 00 00 07 45
40 00 14 81 25 08 A0 68 00 31
40 00 14 81 25 08 A0 68 00 00 01 32
40 00 14 81 25 08 A0 68 00 00 02 33
40 00 14 81 25 08 A0 68 00 00 03 34
40 00 14 81 25 08 A0 68 00 00 07 38
40 00 14 81 25 08 A2 68 00 00 07 3A
40 00 14 81 25 08 A4 68 00 00 07 3C
40 00 14 81 25 08 A6 68 00 00 07 3E
40 00 14 81 25 08 A8 68 00 00 07 40
40 00 14 81 25 08 AA 68 00 00 07 42
40 00 14 81 25 08 AC 68 00 00 07 44
40 00 14 81 25 08 AE 68 00 00 07 46
40 00 14 81 25 09 A0 68 00 00 07 39
40 00 14 81 25 0A A0 68 00 00 07 3A
40 00 14 81 25 0C A0 68 00 00 07 3C
40 00 14 81 25 40 18 65 00 00 00 29
40 00 14 81 25 40 1A 65 00 00 2B
40 00 14 81 25 40 1C 65 00 00 2D
40 00 14 81 25 40 1E 65 00 00 2F
40 00 14 81 25 40 20 65 00 00 00 22
40 00 14 81 25 40 22 65 00 00 00 24
40 00 14 81 25 40 24 65 00 00 00 26
40 00 14 81 25 40 26 65 00 00 00 28
40 00 14 81 25 40 28 65 00 00 2A
40 00 14 81 25 40 2A 65 00 00 2C
40 00 14 81 25 40 2C 65 00 00 2E
40 00 14 81 25 40 2E 65 00 00 30
40 00 14 81 25 40 30 65 00 00 00 23
40 00 14 81 25 40 32 65 00 00 00 25
40 00 14 81 25 40 34 65 00 00 00 27
40 00 14 81 25 40 34 68 00 04 2E
40 00 14 81 25 80 1C 68 00 00 34
40 00 14 81 25 80 20 65 00 00 00 26
40 00 14 81 25 C0 20 65 00 00 2A
40 00 14 81 25 C0 28 68 00 00 02 37
我找到了一个匹配所有数据的候选校验和函数,但我认为需要进一步调整,因为我怀疑我使用的幻数取决于我没有正确考虑的其他因素


这就是我能够进行逆向工程的功能:

uint8\u t获取校验和(const uint8\u t data[],const size\u t size)
{
断言(数据);
uint8\u t校验和=0;
对于(大小i=0;i>4)+(数据[i]&0x0f);
}
校验和-=8;/*幻数*/
返回校验和;
};
替代版本:

uint8\u t获取校验和(const uint8\u t data[],const size\u t size)
{
断言(数据);
uint8\u t校验和=0xF8;/*幻数*/
对于(大小i=0;i>4)+(数据[i]&0x0f);
}
返回校验和;
};

示例:

#包括
#包括
#包括
uint8获取校验和(常数uint8数据[],常数大小)
{
断言(数据);
uint8\u t校验和=0xF8;/*幻数*/
对于(大小i=0;i>4)+(数据[i]&0x0f);
}
返回校验和;
};
int main()
{
常数大小=49;
常数大小=12;
uint8_tV[49][12]={
{0x40,0x00,0x14,0x81,0x25,0x00,0xA0,0x65,0x00,0x00,0x00,0x26},
{0x40,0x00,0x14,0x81,0x25,0x00,0xA0,0x68,0x00,0x00,0x07,0x30},
{0x40,0x00,0x14,0x81,0x25,0x04,0x28,0x65,0x00,0x00,0x00,0x2A},
{0x40,0x00,0x14,0x81,0x25,0x04,0x28,0x68,0x00,0x00,0x00,0x2D},
{0x40,0x00,0x14,0x81,0x25,0x04,0x28,0x68,0x00,0x00,0x02,0x2F},
{0x40,0x00,0x14,0x81,0x25,0x04,0x28,0x68,0x00,0x00,0x03,0x30},
{0x40,0x00,0x14,0x81,0x25,0x04,0x28,0x68,0x00,0x00,0x04,0x31},
{0x40,0x00,0x14,0x81,0x25,0x04,0x28,0x68,0x00,0x00,0x05,0x32},
{0x40,0x00,0x14,0x81,0x25,0x04,0x28,0x68,0x00,0x00,0x07,0x34},
{0x40,0x00,0x14,0x81,0x25,0x04,0x28,0x69,0x00,0x00,0x01,0x2F},
{0x40,0x00,0x14,0x81,0x25,0x04,0xA0,0x68,0x00,0x00,0x07,0x34},
{0x40,0x00,0x14,0x81,0x25,0x08,0x9A,0x68,0x00,0x00,0x07,0x41},
{0x40,0x00,0x14,0x81,0x25,0x08,0x9C,0x68,0x00,0x00,0x07,0x43},
{0x40,0x00,0x14,0x81,0x25,0x08,0x9E,0x68,0x00,0x00,0x07,0x45},
{0x40,0x00,0x14,0x81,0x25,0x08,0xA0,0x68,0x00,0x00,0x00,0x31},
{0x40,0x00,0x14,0x81,0x25,0x08,0xA0,0x68,0x00,0x00,0x01,0x32},
{0x40,0x00,0x14,0x81,0x25,0x08,0xA0,0x68,0x00,0x00,0x02,0x33},
{0x40,0x00,0x14,0x81,0x25,0x08,0xA0,0x68,0x00,0x00,0x03,0x34},
{0x40,0x00,0x14,0x81,0x25,0x08,0xA0,0x68,0x00,0x00,0x07,0x38},
{0x40,0x00,0x14,0x81,0x25,0x08,0xA2,0x68,0x00,0x00,0x07,0x3A},
{0x40,0x00,0x14,0x81,0x25,0x08,0xA4,0x68,0x00,0x00,0x07,0x3C},
{0x40,0x00,0x14,0x81,0x25,0x08,0xA6,0x68,0x00,0x00,0x07,0x3E},
{0x40,0x00,0x14,0x81,0x25,0x08,0xA8,0x68,0x00,0x00,0x07,0x40},
{0x40,0x00,0x14,0x81,0x25,0x08,0xAA,0x68,0x00,0x00,0x07,0x42},
{0x40,0x00,0x14,0x81,0x25,0x08,0xAC,0x68,0x00,0x00,0x07,0x44},
{0x40,0x00,0x14,0x81,0x25,0x08,0xAE,0x68,0x00,0x00,0x07,0x46},
{0x40,0x00,0x14,0x81,0x25,0