typedef unsigned char uchar;
typedef unsigned int uint;
uchar tool_ctrl_crc(uchar *ptr, uchar length)
{
uchar i = 0;
uchar crc = 0;
while (length--)
{
crc ^= *ptr++;
for (i = 0; i < 8; i++)
{
if (crc & 0x01)
{
crc = (crc >> 1) ^ 0x8C;
}
else crc >>= 1;
}
}
return crc;
}
void fire_key_status(uchar left, uchar right, uchar door, uchar firewall, uchar gass)
{
uchar buf[9] = {0xA5, 0x86, 0x00, 0x00, 0x08, 0x00, 0x01, 0x01, 0x00};
if (right == 1) buf[2] |= 0x01;
else buf[2] &= ~0x01;
if (left == 1) buf[2] |= 0x02;
else buf[2] &= ~0x02;
if (door == 1) buf[4] |= 0x10;
else buf[4] &= ~0x10;
if (firewall == 1) buf[3] |= 0x04;
else buf[3] &= ~0x04;
if (gass == 1) buf[4] |= 0x04;
else buf[4] &= ~0x04;
buf[8] = tool_ctrl_crc(buf, 8);
printf("Code: ");
for (uchar i = 0; i < 9; i++)
{
if (buf[i] < 0x10) printf("0%x ", buf[i]);
else printf("%x ", buf[i]);
}
printf("\r\n");
}
int main ()
{
fire_key_status(1, 1, 0, 1, 0);
return 0;
}