/* ================================================================ * 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); }