100J蓝牙设备上报问题解决
This commit is contained in:
@ -163,7 +163,12 @@ class HBY100JProtocol {
|
||||
this.onNotifyCallback = callback;
|
||||
}
|
||||
|
||||
parseBleData(buffer) {
|
||||
/**
|
||||
* @param {Uint8Array|ArrayBuffer} buffer
|
||||
* @param {{ skipSideEffects?: boolean }} [options] skipSideEffects=true:仅解析字段,不打日志、不触发 onNotify/文件回调(供 BleReceive 与设备页 bleValueNotify 双订阅时避免重复)
|
||||
*/
|
||||
parseBleData(buffer, options = {}) {
|
||||
const skipSideEffects = !!options.skipSideEffects;
|
||||
const view = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);
|
||||
if (view.length < 3) return null;
|
||||
|
||||
@ -175,8 +180,10 @@ class HBY100JProtocol {
|
||||
const macBytes = view.slice(1, 7);
|
||||
const macAddress = Array.from(macBytes).map(b => b.toString(16).padStart(2, '0').toUpperCase()).join(':');
|
||||
const result = { type: 'mac', macAddress };
|
||||
console.log('[100J-蓝牙] 设备上报MAC:', macAddress, '原始:', Array.from(view).map(b => b.toString(16).padStart(2, '0').toUpperCase()).join(' '));
|
||||
if (this.onNotifyCallback) this.onNotifyCallback(result);
|
||||
if (!skipSideEffects) {
|
||||
console.log('[100J-蓝牙] 设备上报MAC:', macAddress, '原始:', Array.from(view).map(b => b.toString(16).padStart(2, '0').toUpperCase()).join(' '));
|
||||
if (this.onNotifyCallback) this.onNotifyCallback(result);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -206,7 +213,7 @@ class HBY100JProtocol {
|
||||
// 05: 文件更新响应 FB 05 [fileType] [status] FF,status: 1=成功 2=失败
|
||||
if (data.length >= 1) result.fileType = data[0];
|
||||
if (data.length >= 2) result.fileStatus = data[1]; // 1=Success, 2=Failure
|
||||
if (this._fileResponseResolve) this._fileResponseResolve(result);
|
||||
if (!skipSideEffects && this._fileResponseResolve) this._fileResponseResolve(result);
|
||||
break;
|
||||
case 0x04:
|
||||
// 5.5 获取设备电源状态: 容量8B + 电压8B + 百分比1B + 车载1B + 续航2B(分钟) + [充电状态1B] + FF
|
||||
@ -265,10 +272,11 @@ class HBY100JProtocol {
|
||||
|
||||
const funcNames = { 0x01: '复位', 0x02: '基础信息', 0x03: '位置', 0x04: '电源状态', 0x05: '文件更新', 0x06: '语音播报', 0x09: '音量', 0x0A: '爆闪模式', 0x0B: '爆闪频率', 0x0C: '强制报警', 0x0D: 'LED亮度', 0x0E: '工作方式' };
|
||||
const name = funcNames[funcCode] || ('0x' + funcCode.toString(16));
|
||||
console.log('[100J-蓝牙] 设备响应 FB:', name, '解析:', JSON.stringify(result), '原始:', hexStr);
|
||||
|
||||
if (this.onNotifyCallback) {
|
||||
this.onNotifyCallback(result);
|
||||
if (!skipSideEffects) {
|
||||
console.log('[100J-蓝牙] 设备响应 FB:', name, '解析:', JSON.stringify(result), '原始:', hexStr);
|
||||
if (this.onNotifyCallback) {
|
||||
this.onNotifyCallback(result);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -883,9 +891,9 @@ export function cache100JVoiceFileForBle(deviceId, voiceListId, filePath) {
|
||||
});
|
||||
}
|
||||
|
||||
// 暴露给页面:解析蓝牙接收到的数据
|
||||
export function parseBleData(buffer) {
|
||||
return protocolInstance.parseBleData(buffer);
|
||||
// 暴露给页面:解析蓝牙接收到的数据(options 见类上 parseBleData 注释)
|
||||
export function parseBleData(buffer, options) {
|
||||
return protocolInstance.parseBleData(buffer, options);
|
||||
}
|
||||
|
||||
// 暴露给页面:蓝牙连接后主动拉取电源状态(电量、续航)
|
||||
|
||||
Reference in New Issue
Block a user