AVS/GD32F103C8T6/App/User/Peripheral/CAN/can_parsing.c
2023-10-18 17:36:51 +08:00

146 lines
4.1 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_byd_03_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 0x0CFE4199:
/* 左转向 */
*turn_left = (data[0] >> 6 & 0x03) == 0x01 ? 0 : 1;
/* 右转向 */
*turn_right = (data[1] & 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;
}
}
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;
}
}