70 lines
2.1 KiB
C
70 lines
2.1 KiB
C
/* ================================================================
|
|
* jb_common.c — 工具函数实现
|
|
* ================================================================
|
|
*/
|
|
#include "jb_common.h"
|
|
|
|
/* ════════════════════════════════════════════════════════════════
|
|
* 校验和
|
|
* ════════════════════════════════════════════════════════════════ */
|
|
uint8_t jbChecksum(const uint8_t *frame, uint16_t totalLen)
|
|
{
|
|
if (!frame || totalLen < 4)
|
|
{
|
|
return 0;
|
|
}
|
|
uint16_t sum = 0;
|
|
/* 从 LEN_H(buf[2]) 累加到最后一个 payload 字节(buf[totalLen-2]) */
|
|
for (uint16_t i = 2; i < totalLen - 1; i++)
|
|
{
|
|
sum += frame[i];
|
|
}
|
|
return (uint8_t)(sum & 0xFF);
|
|
}
|
|
|
|
/* ════════════════════════════════════════════════════════════════
|
|
* 大端序读写
|
|
* ════════════════════════════════════════════════════════════════ */
|
|
uint16_t jbReadU16BE(const uint8_t *buf)
|
|
{
|
|
if (!buf)
|
|
{
|
|
return 0;
|
|
}
|
|
return ((uint16_t)buf[0] << 8) | buf[1];
|
|
}
|
|
|
|
uint32_t jbReadU32BE(const uint8_t *buf)
|
|
{
|
|
if (!buf)
|
|
{
|
|
return 0;
|
|
}
|
|
return ((uint32_t)buf[0] << 24)
|
|
| ((uint32_t)buf[1] << 16)
|
|
| ((uint32_t)buf[2] << 8)
|
|
| buf[3];
|
|
}
|
|
|
|
void jbWriteU16BE(uint8_t *buf, uint16_t val)
|
|
{
|
|
if (!buf)
|
|
{
|
|
return;
|
|
}
|
|
buf[0] = (uint8_t)(val >> 8);
|
|
buf[1] = (uint8_t)(val & 0xFF);
|
|
}
|
|
|
|
void jbWriteU32BE(uint8_t *buf, uint32_t val)
|
|
{
|
|
if (!buf)
|
|
{
|
|
return;
|
|
}
|
|
buf[0] = (uint8_t)(val >> 24);
|
|
buf[1] = (uint8_t)(val >> 16);
|
|
buf[2] = (uint8_t)(val >> 8);
|
|
buf[3] = (uint8_t)(val & 0xFF);
|
|
}
|