Protocol update adds FFE4 Status format: 7×PD sensors (little-endian) + VBAT battery voltage (mV) + XOR checksum = 17 bytes. - parseVendorStatus: handles 1-byte heartbeat, 17-byte ADC, 33-byte params - handleValueChange: ADC type extracts PD array + battery % from VBAT - Battery calculated as linear 3000mV(0%) to 4200mV(100%) - PD data passed through status event for treatment pages - Updated protocol doc with full byte table and old/new comparison
73 行
2.6 KiB
Markdown
73 行
2.6 KiB
Markdown
# 协议简述补充解析
|
||
|
||
来源:仓库根目录 `协议简述(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 字节表示停止
|