更新校验函数
This commit is contained in:
parent
036a74c7ba
commit
f6a6dd5d29
36
tcl.c
36
tcl.c
@ -143,34 +143,44 @@ void retryTimerCallback(MultiTimer *timer, void *userData)
|
||||
printf("Timer 1 fired at %lu ms\n", getPlatformTicks());
|
||||
}
|
||||
|
||||
/// @brief
|
||||
/// @brief 计算异或XOR校验
|
||||
/// @param data
|
||||
/// @param len
|
||||
/// @return 0->校验失败 1->校验成功
|
||||
int crc(uint8_t *data, uint8_t len)
|
||||
/// @return 校验结果
|
||||
uint8_t bccCRC(uint8_t *data, uint8_t len)
|
||||
{
|
||||
return 0;
|
||||
uint8_t crc = 0;
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
crc ^= data[i];
|
||||
}
|
||||
return crc;
|
||||
}
|
||||
|
||||
/// @brief 检查数据有效性
|
||||
/// @param data
|
||||
/// @param len
|
||||
/// @return 1->有效 0->无效
|
||||
int isDataValid(uint8_t *data, uint8_t len)
|
||||
/// @return 0->有效 1->帧头无效 2->帧尾无效 3->校验位无效
|
||||
int chkDataValid(uint8_t *data, uint8_t len)
|
||||
{
|
||||
// 按帧发送数据
|
||||
// 判断帧的完整性及校验位
|
||||
if (data[0] != 0x5A || data[1] != 0xA5 || data[len - 1] != 0xED) // 帧头、帧尾校验
|
||||
if (data[0] != 0x5A || data[1] != 0xA5) // 帧头校验
|
||||
{
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (crc(data + 2, len - 2) != 0) // 校验位校验
|
||||
if (data[len - 1] != 0xED) // 帧尾校验
|
||||
{
|
||||
return 0;
|
||||
return 2;
|
||||
}
|
||||
|
||||
return 1;
|
||||
if (bccCRC(data + 2, len - 4) != data[len - 2]) // 校验位校验
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// @brief 用户接口接收数据回调
|
||||
@ -208,7 +218,7 @@ void userRecDataCallback(uint8_t *data, uint8_t len)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isDataValid(data, len))
|
||||
if (chkDataValid(data, len))
|
||||
{
|
||||
lineTransmitData(data, len);
|
||||
}
|
||||
@ -248,7 +258,7 @@ void lineRecCallback(uint8_t *data, uint8_t len)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isDataValid(data, len))
|
||||
if (chkDataValid(data, len))
|
||||
{
|
||||
userTransmitData(data, len);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user