36#define CRC_POLY 0x1021
37#define CRC_TOPBIT 0x8000
44 for (; len > 0; len--) {
45 crc = crc ^ (*buf++ << CRC_WIDTH);
46 for (i = 0; i < CRC_WIDTH; i++) {
47 if (crc & CRC_TOPBIT) {
48 crc = (crc << 1) ^ CRC_POLY;
68 (VOID)memcpy_s(body->
value, len, value, len);
69 return len +
sizeof(body->
type) +
sizeof(body->
len);
82 const TlvTable *tlvTableItem = table;
84 while (tlvTableItem->
tag != TRACE_TLV_TYPE_NULL) {
120 UINT8 *tlvBuf = NULL;
125 if ((tlvBufLen <= 0) || (table == NULL)) {
133 head->
magicNum = TRACE_TLV_MSG_HEAD;
UINT32 OsTraceDataEncode(UINT8 type, const TlvTable *table, UINT8 *src, UINT8 *dest, INT32 destLen)
Encode trace raw data.
TLV协议 消息头 https://blog.csdn.net/Shallwen_Deng/article/details/88930288
STATIC UINT32 OsWriteTlv(UINT8 *tlvBuf, UINT8 type, UINT8 len, UINT8 *value)
STATIC UINT32 OsTlvEncode(const TlvTable *table, UINT8 *srcBuf, UINT8 *tlvBuf, INT32 tlvBufLen)
STATIC UINT16 CalcCrc16(const UINT8 *buf, UINT32 len)