# 协议简述补充解析 来源:仓库根目录 `协议简述(1).docx`(更新版),已归档到 `docs/protocols/`。 ## 服务/特征值摘要 | UUID | 名称 | 属性 | 说明 | | --- | --- | --- | --- | | `FFE1` | Command | Write+Read | 下发 33 字节控制指令 | | `FFE4` | Status | Read+Notify | 上报 17 字节 ADC/电池数据 | ## Command 参数(FFE1 Write,33 字节) | 字节 | 含义 | | --- | --- | | Byte1 | IO1 红灯光强 | | Byte2 | IO1 红外灯光强 | | Byte3 | IO1 紫外灯光强 | | Byte4 | IO1 暖黄灯光强 | | Byte5 | IO1 电流增益高字节 | | Byte6 | IO1 电流增益低字节 | | Byte7-12 | IO2(同 IO1 结构) | | Byte13-18 | IO3 | | Byte19-24 | IO4 | | Byte25-30 | IO5 | | Byte31 | 保持时间高字节 | | Byte32 | 保持时间低字节 | | Byte33 | 异或校验(Byte1-Byte32) | 每个 IO 为 6 字节:红灯(1) + 红外(1) + 紫外(1) + 暖黄(1) + 电流增益(2, 大端)。 ## Status 上报(FFE4 Notify,17 字节)— 新增 | 字节 | 含义 | 字节序 | | --- | --- | --- | | Byte1-2 | PD1 ADC 值 | 小端(低字节在前) | | Byte3-4 | PD2 ADC 值 | 小端 | | Byte5-6 | PD3 ADC 值 | 小端 | | Byte7-8 | PD4 ADC 值 | 小端 | | Byte9-10 | PD5 ADC 值 | 小端 | | Byte11-12 | PD6 ADC 值 | 小端 | | Byte13-14 | PD7 ADC 值 | 小端 | | Byte15-16 | VBAT 电池电压 | 小端(单位 mV) | | Byte17 | 异或校验(Byte1-Byte16) | 7 个 PD(光电传感器)通道 + 1 个电池电压通道。 ## 与旧版协议简述的差异 | 项目 | 旧版 | 新版(当前) | | --- | --- | --- | | FFE4 上报格式 | 仅说"设备状态及 ADC 值",无字节定义 | 完整定义:7×PD + VBAT + XOR,共 17 字节 | | FFE1 Command | 33 字节(相同) | 33 字节(不变) | | PD 通道数 | 未知 | 7 个通道 | | 电池信息 | 未知 | VBAT,小端 mV | | 字节序 | 未标注 | Status 明确小端序 | ## 对代码的影响 ### 已更新 - `protocol.js` 的 `parseVendorStatus()` 增加 17 字节解析:提取 7 个 PD 值 + VBAT,校验 XOR - `connection.js` 的 `handleValueChange()` 处理 `type === 'adc'`:从 VBAT 计算电量百分比,PD 数据通过 `status` 事件传递 ### 仍待确认 1. PD1-PD7 与面部区域的对应关系 2. PD 值的物理含义(光照强度?反射率?)和有效范围 3. VBAT 值的精度(是否直接 mV?是否需要系数换算?) 4. 电量百分比计算方式(当前假设 3000mV=0%,4200mV=100%,可能不准确) 5. 上报频率(当前实测是每秒一次,但可能固件更新后改变) 6. 是否有 start/stop 命令,还是全 0 的 33 字节表示停止