编辑代码

#include <stdio.h>

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;
}