146 lines
4.1 KiB
C
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;
|
|
}
|
|
}
|