小程序ble demo注释

159 阅读2分钟

十分钟按摩指令👇

[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]

对照
数据头0x4D77
默认加密:0x02;不加密:0x002
seg?不清楚0
内容区长度content.length62
内容区数据[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;
}