十分钟按摩指令👇
[77,2,0,62,123,34,118,34,58,49,44,34,116,111,112,105,99,34,58,34,115,101,116,34,44,34,100,101,118,105,99,101,95,105,100,34,58,34,50,48,50,51,48,56,48,48,48,52,34,44,34,112,97,114,97,109,115,34,58,91,49,44,49,48,93,125,35,250]
| 对照 | |
|---|---|
| 数据头0x4D | 77 |
| 默认加密:0x02;不加密:0x00 | 2 |
| seg?不清楚 | 0 |
| 内容区长度content.length | 62 |
| 内容区数据 | [123,34,118,34,58,49,44,34,116,111,112,105,99,34,58,34,115,101,116,34,44,34,100,101,118,105,99,101,95,105,100,34,58,34,50,48,50,51,48,56,48,48,48,52,34,44,34,112,97,114,97,109,115,34,58,91,49,44,49,48,93,125] |
| 默认需要CRC加密算法;不加密就不需要 | [35,250] |
内容区数据解读
- 内容区JSON例
{
"v": 1, // 不清楚
"topic": "set", //下发指令
"device_id": 2023080004, // 设备号
"params": [1,1] // 第一个模式参数:1按摩,2充电 ;第二参数是分钟数
}
- demo代码中用js的charCodeAt方法把👆转为👇unicode值
"{".charCodeAt(); // =>123
`"`.charCodeAt(); // =>34
"v".charCodeAt(); // =>118
`"`.charCodeAt(); // =>34
`:`.charCodeAt(); // =>58
串起来就是↑表格里的内容区数据[123,34,118,34,58,49,44,34, ......]
CRC加密
/**
* crc加密
* @param {array} list // 十六进制数组
* @param {number} len
* @param {hex} sequence // 十六进制
*/
export function crcCheck(list, len, sequence) {
var checkData = [];
checkData.push(sequence);
checkData.push(len);
checkData = checkData.concat(list);
var crc = caluCRC(0, checkData);
var checksumByte1 = crc & 0xff;
var checksumByte2 = (crc >> 8) & 0xff;
return [
checksumByte1,
checksumByte2
]
}
const caluCRC = (crc, pByte) => {
crc = (~crc) & 0xffff;
for (var i in pByte) {
crc = CRC_TB[((crc & 0xffff) >> 8) ^ (pByte[i] & 0xff)] ^ ((crc & 0xffff) << 8);
}
return (~crc) & 0xffff;
}