增加W13设备设置蓝牙名称功能
This commit is contained in:
@@ -15,6 +15,8 @@ export const COMMANDS = {
|
||||
// 读取门磁/卫浴事件触发/释放参数
|
||||
READ_DOOR_BATH_EVENT: 0x17,
|
||||
RADAR_STATUS: 0x11,
|
||||
// 设置蓝牙名称(仅后四位)
|
||||
SET_BLE_NAME: 0x20,
|
||||
TEST_KEYS: 0x13,
|
||||
};
|
||||
|
||||
@@ -238,6 +240,37 @@ export function buildReadDoorBathEvent(options = {}) {
|
||||
return buildCommand(COMMANDS.READ_DOOR_BATH_EVENT, [0x01], options);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造:设置蓝牙名(Frame_Type=0x20)
|
||||
* 协议要求:P0 = 有效长度(1..4)
|
||||
* P1~P4: 后四位字符(ASCII 字节),不足用 0x00 填充;若输入长度>4,取最后 4 个字符
|
||||
* @param {string|number[]|Uint8Array} name 后四位字符串或字节数组
|
||||
* @param {{frame?:number, framNum?:number, crcType?:('CCITT'|'MODBUS'), head?:number[]}} [options]
|
||||
*/
|
||||
export function buildSetBluetoothName(name, options = {}) {
|
||||
// 接受字符串或字节数组
|
||||
let arr = [];
|
||||
if (typeof name === 'string') {
|
||||
const s = name.slice(-4);
|
||||
for (let i = 0; i < s.length; i++) arr.push(s.charCodeAt(i) & 0xFF);
|
||||
} else if (name instanceof Uint8Array) {
|
||||
for (let i = 0; i < Math.min(4, name.length); i++) arr.push(name[i] & 0xFF);
|
||||
} else if (Array.isArray(name)) {
|
||||
for (let i = 0; i < Math.min(4, name.length); i++) arr.push(name[i] & 0xFF);
|
||||
} else if (name == null) {
|
||||
arr = [];
|
||||
} else {
|
||||
// 尝试转换
|
||||
const u = ensureUint8Array(name);
|
||||
for (let i = 0; i < Math.min(4, u.length); i++) arr.push(u[i] & 0xFF);
|
||||
}
|
||||
const len = Math.min(4, Math.max(0, arr.length));
|
||||
// P1~P4 必须有 4 字节位置,短则补 0
|
||||
const p = [len];
|
||||
for (let i = 0; i < 4; i++) p.push(i < arr.length ? (arr[i] & 0xFF) : 0x00);
|
||||
return buildCommand(COMMANDS.SET_BLE_NAME, p, options);
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证十六进制字符串包并计算/写入 CRC(默认 MODBUS),返回完整包与CRC值
|
||||
* @param {string} hexStr 如 'CC C0 0C 00 00 00 01 00 02 00 0C 08' 或连续hex
|
||||
|
||||
Reference in New Issue
Block a user