diff --git a/miniprogram/services/ble/connection.js b/miniprogram/services/ble/connection.js index c89709c..f68a7f4 100644 --- a/miniprogram/services/ble/connection.js +++ b/miniprogram/services/ble/connection.js @@ -83,14 +83,34 @@ function handleNotification(frame) { function handleValueChange(res) { if (protocol.PROTOCOL_MODE === 'vendor_33') { - var bytes = protocol.bufferToBytes(res.value) - var uuid = (res.characteristicId || '').toUpperCase() - var isStatus = uuid.indexOf(CHAR.STATUS) !== -1 - if (isStatus) { - emit('vendor_status', { raw: bytes, heartbeat: bytes[0] }) - } else { - emit('vendor_data', { raw: bytes, hex: protocol.bytesToHex(bytes) }) + var parsed = protocol.parseVendorStatus(res.value) + emit('vendor_raw', parsed) + var status = { + mode_state: parsed.is_heartbeat ? (parsed.heartbeat || 0) : protocol.MODE_STATE.IDLE, + region_mask: protocol.REGION.FULL_FACE, + wavelength: 0, + brightness: 0, + remaining_ms: 0, + error_code: 0, + battery: 0, + temperature: 0, + bind_status: 1, + subscription: 1 } + if (!parsed.is_heartbeat && parsed.ios) { + var anyActive = false + for (var i = 0; i < parsed.ios.length; i++) { + if (parsed.ios[i].red || parsed.ios[i].infrared || parsed.ios[i].uv || parsed.ios[i].warm_yellow) { + anyActive = true + break + } + } + status.mode_state = anyActive ? protocol.MODE_STATE.ACTIVE : protocol.MODE_STATE.IDLE + if (parsed.hold_time > 0) { + status.remaining_ms = parsed.hold_time * 1000 + } + } + emit('status', status) return } var frame = protocol.parseFrame(res.value)