AVS/GD32F103C8T6/App/User/Peripheral/CAN/can_parsing.c

138 lines
3.9 KiB
C

#include "can_parsing.h"
/* 比亚迪一代 */
void can_byd_01_parsing(uint32_t id, uint8_t *data, uint8_t *door_front, uint8_t *door_back, uint8_t *turn_left, uint8_t *turn_right, uint8_t *reversing)
{
switch (id)
{
case 0x18FED925:
/* 右转向 */
*turn_right = (data[1] >> 2 & 0x03) == 0x01 ? 0 : 1;
/* 左转向 */
*turn_left = (data[1] >> 4 & 0x03) == 0x01 ? 0 : 1;
/* 前门 */
*door_front = (data[5] >> 4 & 0x03) == 0x01 ? 0 : 1;
/* 中门 */
*door_back = (data[5] >> 6 & 0x03) == 0x01 ? 0 : 1;
break;
case 0x18F00503:
/* 当前档位 */
*reversing = data[3] == 0x7C ? 0 : 1;
break;
}
}
void can_byd_02_parsing(uint32_t id, uint8_t *data, uint8_t *door_front, uint8_t *door_back, uint8_t *turn_left, uint8_t *turn_right, uint8_t *reversing)
{
switch (id)
{
case 0x18FDA589:
/* 前门 */
*door_front = (data[0] >> 4 & 0x03) == 0x01 ? 0 : 1;
/* 中门 */
*door_back = (data[0] >> 6 & 0x03) == 0x01 ? 0 : 1;
break;
case 0x18FE419B:
/* 左转向 */
*turn_left = (data[0] & 0x03) == 0x01 ? 0 : 1;
/* 右转向 */
*turn_right = (data[0] >> 2 & 0x03) == 0x01 ? 0 : 1;
break;
case 0x18F00503:
/* 当前档位 */
*reversing = data[3] == 0x7C ? 0 : 1;
break;
}
}
void can_yutong_parsing(uint32_t id, uint8_t *data, uint8_t *door_front, uint8_t *door_back, uint8_t *turn_left, uint8_t *turn_right, uint8_t *reversing)
{
switch (id)
{
case 0x18A70017:
/* 倒车 */
*reversing = (data[2] >> 2 & 0x03) == 0x01 ? 0 : 1;
/* 前门 */
*door_front = (data[2] >> 4 & 0x03) == 0x01 ? 0 : 1;
/* 中门 */
*door_back = (data[2] >> 6 & 0x03) == 0x01 ? 0 : 1;
/* 左转向 */
*turn_left = (data[4] & 0x03) == 0x01 ? 0 : 1;
/* 右转向 */
*turn_right = (data[4] >> 2 & 0x03) == 0x01 ? 0 : 1;
break;
}
}
void can_jinlong_parsing(uint32_t id, uint8_t *data, uint8_t *door_front, uint8_t *door_back, uint8_t *turn_left, uint8_t *turn_right, uint8_t *reversing)
{
switch (id)
{
//case 0x18F0B117:
// /* 左转向 */
// *turn_left = (data[1] & 0x01) == 0x01 ? 0 : 1;
// /* 右转向 */
// *turn_right = (data[1] >> 1 & 0x01) == 0x01 ? 0 : 1;
// /* 前门 */
// if ((data[2] & 0x01) == 0x01)
// *door_front = 0;
// if ((data[2] >> 1 & 0x01) == 0x01)
// *door_front = 1;
// /* 中门 */
// if ((data[2] >> 2 & 0x01) == 0x01)
// *door_back = 0;
// if ((data[2] >> 3 & 0x01) == 0x01)
// *door_back = 1;
// break;
//case 0x18F0BA17:
// /* 倒车 */
// *reversing = data[7] == 0xDF ? 0 : 1;
// break;
case 0x18F40117:
/* 左转向 */
*turn_left = (data[1] >> 6 & 0x01) == 0x01 ? 0 : 1;
/* 右转向 */
*turn_right = (data[1] >> 7 & 0x01) == 0x01 ? 0 : 1;
/* 前门 */
*door_front = (data[0] >> 1 & 0x01) == 0x01 ? 0 : 1;
/* 后门 */
*door_back = (data[0] & 0x01) == 0x01 ? 0 : 1;
break;
case 0x18F101D0:
/* 倒车 */
*reversing = data[3] & 0x07 ? 0 : 1;
break;
}
}
void can_ankai_parsing(uint32_t id, uint8_t *data, uint8_t *door_front, uint8_t *door_back, uint8_t *turn_left, uint8_t *turn_right, uint8_t *reversing)
{
switch (id)
{
case 0x18FFD117:
/* 倒车 */
*reversing = (data[0] & 0x01) == 0x01 ? 0 : 1;
/* 右前门 */
*door_front = (data[0] >> 5 & 0x01) == 0x01 ? 0 : 1;
/* 右后门 */
*door_back = (data[0] >> 7 & 0x01) == 0x01 ? 0 : 1;
/* 左转向 */
*turn_left = (data[1] >> 2 & 0x01) == 0x01 ? 0 : 1;
/* 右转向 */
*turn_right = (data[1] >> 3 & 0x01) == 0x01 ? 0 : 1;
break;
}
}