2026-09-03 摄像头稳定标识与动态映射变更记录

变更原因

项目原先把 Android 运行期间分配的 USB deviceId 拼入菜品摄像头配置,并将三种 UVC 设备与 Camera2 ID 的关系写死。实际设备重启后,USB 枚举顺序会变化:同一台摄像头可能获得不同的 deviceId/dev/videoN,导致已保存的摄像头配置无法正确恢复,或人脸识别打开了另一台摄像头。

设备核验

FY-3576SE 当前连接 3 台 USB 摄像头,三台设备的 VID/PID 均不相同:

客户显示名称稳定标识当前 V4L2当前 Camera2 ID
MC-500U(XC-TECH)1374_41357/dev/video0100
USB 2.0 Camera(Sonix Technology Co., Ltd.)3141_25440/dev/video2102
USB2.0_CAM1(Sonix Technology Co., Ltd.)11391_19040/dev/video28128

历史记录中的另一轮启动曾出现 MC-500U 与 USB2.0_CAM1 的 V4L2/Camera2 编号互换,证明这些编号只能作为本次启动的运行时地址,不能直接作为持久化唯一标识。

本次变更

测试记录

采用测试先行:

  1. 先增加稳定标识迁移、稳定分辨率键、当前拓扑映射、重启后节点互换映射、非法与歧义映射测试。
  2. 首次运行因新接口和新类尚未实现而编译失败,确认 RED。
  3. 完成实现后定向单元测试通过。

最终验证结果:

设备侧本次只进行了只读枚举和 sysfs/Camera2 信息核验,未覆盖安装 APK,未修改设备现有配置。安装后的重启恢复、设置页显示和三台摄像头逐台预览仍需实机验收。

已知边界

当前设备的三台摄像头可以用 VID/PID 唯一区分。如果以后同时接入两台完全相同且 VID/PID 相同的摄像头,单独使用 VID/PID 无法唯一标定;后续需优先加入可靠 USB 序列号,缺少序列号时再使用固定 USB 物理端口,并在换口时提示重新绑定。本次映射遇到重复稳定标识或歧义时不会猜测设备。

影响范围

本次仅调整摄像头配置持久化、旧配置迁移、UVC/Camera2 动态映射和设置页名称展示。未修改菜品识别算法、人脸算法、支付接口、激活流程或 Git 历史;工作区中已有的人脸激活相关改动保持原样。