edit | blame | history | raw

2026-06-24 MLV6 触摸采样

用户目标

围绕 MLV6 触摸功能继续验证三条目标:

  1. App 能收到 MLV6 触摸信号。
  2. App 能根据触摸信号计算快 / 中 / 慢速度区间。
  3. App 能按速度触发对应叫床声音频播放。

已完成事项

  • 已安装多 notify 订阅候选 APK:/Users/ar/Projects/langmei/.worktrees/lm-app-MV6touch-210/unpackage/release/apk/__UNI__693A991__20260624142318.apk
  • 真机版本已确认为 2.1.0 / 20100
  • MLV6 连接后,sdk.ble.characteristics.list 显示目标服务只有一个特征值 0000FFF1-0000-1000-8000-00805F9B34FB,属性为 read/write/notify
  • 已按要求播放触摸测试提醒音,并采集多触摸片同时触摸 / 挤压窗口日志:docs/round5/evidence/android-2.1.0-new-apk-multitouch-30s-20260624.log
  • 已再次播放触摸测试提醒音,并采集二次多触摸片挤压窗口日志:docs/round5/evidence/android-2.1.0-multitouch-pads-30s-20260624.log
  • 已打包并安装首版固件版本诊断 APK __UNI__693A991__20260624151545.apk,但连接 MLV6 后未触发 0x01 查询;已将只读 queryVersion() 诊断从 home onShow 补强到连接页 command.onReady
  • 已重新打包并通过无线 ADB 安装固件版本诊断新 APK:/Users/ar/Projects/langmei/.worktrees/lm-app-MV6touch-210/unpackage/release/apk/__UNI__693A991__20260624155248.apk,SHA256 b71bc697cbb2afc91f81889d678a069e67bd102a78127fb6d3bd0d8384571f6a;包内已检出 sdk.connect.queryVersion.request
  • 已用新 APK 第三次采集触摸窗口:docs/round5/evidence/android-2.1.0-touch-after-querydiag-20260624.log
  • 已按用户要求第四次采集“多触摸片同时触摸 / 挤压 30 秒”窗口:docs/round5/evidence/android-2.1.0-multitouch-many-pads-30s-20260624.log
  • 已新增触摸信号根因文档:docs/round5/MLV6_TOUCH_SIGNAL_ROOT_CAUSE.md
  • 已新增硬件 / 固件确认清单:docs/round5/MLV6_TOUCH_HARDWARE_FIRMWARE_CHECKLIST.md
  • 已更新 docs/round5/TODO.mddocs/round5/QA_RUN_20260624_1244.md

关键结论

  • “MLV6 触摸在另一个 notify/indicate 特征值上报,但客户端漏订阅”的假设被当前证据否定;当前设备目标服务只有一个 notify 特征值。
  • 本轮日志约 45 秒内只收到 10 次 BLE notify,首字节全部是 0x44 心跳包。
  • 独立触摸命令 0x31/0x32/0x33cmdTouchChest/Leg/Bsdk.touch.sample/engine/input、后端 sensorInstructionsfeedbackAudio 均为 0。
  • 如果该采集窗口确实覆盖用户真实触摸 / 挤压操作,则问题停在 BLE 上行是否产生协议定义触摸命令这一层;速度计算和音频链路尚未被触发。
  • MLV5 协议第 19-21 节写明触摸胸 / 腿 / 阴是设备主动上报,命令分别为 0x31/0x32/0x33,未列出 App 下发触摸启用命令。
  • 连接阶段日志已确认现有 0x44 0x01 0x01 心跳 / 上报命令写入成功;当前不是漏发已知心跳开关的问题。
  • 本地资料存在协议冲突:MLV5-蓝牙数据通讯协议_26.0420.pdf / SDK 整理稿包含 0x31/0x32/0x33 触摸主动上报;但 MLV5和MLV6/MLV5-蓝牙数据通讯协议V1_2026.0424.pdf 只有到 0x30,无触摸章节。
  • MLV6 触摸板资料确认产品层规划 5 个触摸片:2 个胸、2 个腿、1 个阴部,并说明 3 颗电阻代表 3 个不同部位,装配/焊接配置会影响部位。
  • 260512固件bin-MLV5和MLV6共用固件.zipmlv5-260512.hexmlv6-260512.hex 长度相同但 SHA256 不同,不是完全相同固件。
  • 0x44 心跳内部字段已排查:触摸采样期间 position/isEjaculation=255/255vibStrength=50clampGear=0workStatus=0,没有可用的触摸字段变化;accX/Y/Z 属于三轴/姿态字段,不能映射为触摸部位。
  • 二次多触摸片挤压采样中,去重后 BLE raw notify 共 17 条,首字节全部为 0x44;独立 0x31/0x32/0x33cmdTouchChest/Leg/Bsdk.touch.sample/engine/inputsensorInstructionsfeedbackAudio 均为 0。0x44 内 byte[11] 恒定为 0x32,不能作为触摸速度或部位依据。
  • 固件版本诊断首版未触发的原因是入口时机不稳:home onShow 中不一定已经有 command.device。已改为连接成功回调中对 MLV5/MLV6 设备执行 sdk.connect.queryVersion.request -> command.queryVersion()
  • 新入口验证结果:连接 MLV6 后 sdk.connect.queryVersion.request 已触发,0x01 写入尝试已出现,但返回 writeBLECharacteristicValue:fail property not support (10007);随后 0x44 0x01 0x01 心跳写入成功。固件版本响应未拿到。
  • 第三次触摸采样去重后 30 条 raw notify 全部为 0x44,独立 0x31/0x32/0x33、触摸采样、后端 /engine/input、音频返回均为 0;粗略 0x45 命中只是 0x44 内部数据字节,不是震动下发。
  • 第四次多触摸片挤压采样精确解析到 7 条 raw notify,全部为首字节 0x44;独立 0x31/0x32/0x33 为 0,cmdTouchChest/Leg/Bsdk.touch.sample/engine/inputsensorInstructionsfeedbackAudio、BLE 写入均为 0。
  • 连续四轮真机采样结论一致:当前 MLV6 样机 / 固件没有按现有协议向 App 输出独立触摸上行,App 侧速度计算和按速度播放音频暂时没有触发入口。
  • 触摸片资料补充结论:硬件产品层规划为一套主控配 5 个触摸片,2 胸、2 腿、1 阴部;3 颗料 / 电阻代表 3 个不同部位。触摸片侧另有原始键值资料:胸部 0xB0、腿部 0xC0、阴部 0xD0
  • 主控板资料补充结论:主控板 BOM 有 PHY6222QMA6100P、BLE 天线和多个 IN_P 测试 / 输入点;接线图只标电池、电源、泵、夹吸、震动,没有触摸片线束说明。当前资料不足以证明 MLV6 主控固件已经把触摸片信号转译为 BLE 0x31/0x32/0x33
  • 固件资料补充结论:260512固件bin-MLV5和MLV6共用固件.zip 中 MLV5/MLV6 两份固件按数据流比较只差 1 个字节,即设备名字符串 MLV5/MLV6;不能支持“MLV6 有另一套已定义 BLE 触摸协议但 App 未适配”的假设。
  • App/SDK 侧复核结论:SDK 源头 noStory.vue 已通过 1 秒窗口采样计算触摸 timeIntervalMs,阈值复用晃动逻辑:<=450ms 快、<=900ms 中、>900ms 慢;cmdTouchChest/Leg/B 都会通过 handleTouchSensor 发送带 timeIntervalMs/engine/input。SDK 源头和 lm-app 运行副本的 noStory.vuebluetooth.jssensor-event-gate.js 已确认 cmp=0
  • 后端复核结论:TouchSensor2AudioFilter 已按触摸 timeIntervalMs 匹配速度标签,优先查“部位 + 速度”组合,失败后回退速度标签。已有 surefire 历史报告显示 TouchSensor2AudioFilterTest 4 个用例通过;本轮未能重新执行 Maven,原因是本机没有 Java Runtime,JAVA_HOME=unset
  • 触摸片实物资料补查:鑫宇/触摸片 照片显示触摸片是带纽扣电池的小板,和主控/手柄分离,支持“触摸片信号需要先被主控接收,再由主控 BLE 转发给 App”的判断。照片中可见 4 个触摸片,和产品定义的一套 5 个触摸片不一致。
  • 原始 from 有缘.协议与晃动感应/command.js 只定义 0x31/0x32/0x33 触摸主动上报入口,未发现触摸配对、学码、启用或模式切换命令。
  • 固件二进制补查:mlv6-260512.hex0x30 0x31 0x32 0x33 的两个命中位置上下文均为 ASCII 十六进制字符表 0123456789abcdef... / 0123456789ABCDEF...,不是 BLE 命令表;不能用这个命中证明固件内已有 0x30~0x33 触摸 / 传感器上报逻辑。
  • MLV3 对照补查:用户现场确认连接一台以前和当前触摸片配对、且曾经能正常收到触摸信号的 MLV3,并进入辛灵通话页后连续触摸约 30 秒;日志 docs/round5/evidence/android-2.1.0-mlv3-touch-20260624-191757.log 显示 28 条 raw notify 全部为首字节 0x44,独立 0x31/0x32/0x33 为 0,cmdTouchChest/Leg/Bsdk.touch.sample/engine/inputsensorInstructionsfeedbackAudio 均为 0。日志侧设备 ID 为 8D:49:34:BB:32:58,没有设备名字段;因此严谨结论是“在用户确认的 MLV3 对照窗口内,App 仍未收到协议定义触摸上行”,下一步需要硬件侧确认触摸片电量 / 配对 / 主控接收链路。

文件变更

  • /Users/ar/Projects/langmei/.worktrees/lm-app-MV6touch-210/docs/round5/TODO.md
  • /Users/ar/Projects/langmei/.worktrees/lm-app-MV6touch-210/docs/round5/QA_RUN_20260624_1244.md
  • /Users/ar/Projects/langmei/.worktrees/lm-app-MV6touch-210/docs/round5/MLV6_TOUCH_SIGNAL_ROOT_CAUSE.md
  • /Users/ar/Projects/langmei/.worktrees/lm-app-MV6touch-210/docs/round5/MLV6_TOUCH_HARDWARE_FIRMWARE_CHECKLIST.md
  • /Users/ar/Projects/langmei/.worktrees/lm-app-MV6touch-210/docs/round5/evidence/android-2.1.0-mlv3-touch-20260624-191757.log
  • /Users/ar/Projects/langmei/.worktrees/lm-sdk-MV6touch-210/uni_modules/bobo-miniapp/pages/home/home.nvue
  • /Users/ar/Projects/langmei/.worktrees/lm-sdk-MV6touch-210/uni_modules/bobo-miniapp/pages/home/home.vue
  • /Users/ar/Projects/langmei/.worktrees/lm-sdk-MV6touch-210/uni_modules/bobo-miniapp/pages/connect/connect.vue
  • /Users/ar/Projects/langmei/.worktrees/lm-app-MV6touch-210/uni_modules/bobo-miniapp/pages/home/home.nvue
  • /Users/ar/Projects/langmei/.worktrees/lm-app-MV6touch-210/uni_modules/bobo-miniapp/pages/home/home.vue
  • /Users/ar/Projects/langmei/.worktrees/lm-app-MV6touch-210/uni_modules/bobo-miniapp/pages/connect/connect.vue
  • /Users/ar/Projects/langmei/doc/.codex-sessionhistory/2026-06-24-MLV6触摸采样.md
  • /Users/ar/Projects/langmei/.worktrees/lm-app-MV6touch-210/docs/round5/evidence/android-2.1.0-multitouch-many-pads-30s-20260624.log

未决问题

  • 需要用户确认 MLV3 对照采样窗口是否确实覆盖了持续触摸动作,并由硬件侧确认当前触摸片是否仍有电、仍配对、仍能被 MLV3 主控接收。
  • 需要确认 App 当前连接的 8D:49:34:BB:32:58 是否就是用户手上的 MLV3 主控;当前日志没有设备名字段。
  • 需要用户确认此前 MLV6 多触摸片采集窗口是否确实覆盖了多触摸片同时触摸 / 挤压动作。
  • 若继续追固件版本,需要把 queryVersion() 延后到心跳写入成功后,或调整 BLE 写入方式。
  • 若确认覆盖,需要继续排查 MLV6 固件是否与 MLV5 主动上报协议不同、是否存在未提供给前端的隐藏触摸启用命令,或当前硬件触摸片是否真正接入并触发固件上报。
  • App 侧诊断已落地:在 SDK 源头和 lm-app 运行副本的 home 页,针对 MLV5/MLV6 增加只读 0x01 固件版本查询日志;仍不得猜测写入未知触摸启用命令。

后续建议

  • 下一轮仍以“不改业务行为、先补证据”为原则。
  • 优先查协议 / 旧代码 / 硬件初始化流程中是否存在触摸启用或模式切换命令。
  • 下一次需要重新打包/安装后,再用真机日志确认 0x01 固件版本响应。
  • 继续不触碰震动、夹吸、加热等动作命令作为诊断手段。
  • 如果需要用户再次操作触摸片,必须先播放 /Users/ar/.codex/audioalert/Langmei-真机测试提醒.mp3
  • 目前不要继续盲目重测触摸片;除非换到确认支持触摸上报的样机 / 固件,或硬件 / 固件侧给出明确 BLE payload / 启用命令。否则 App 只能继续收到 0x44,无法进入速度和音频链路。
  • 与硬件侧沟通时必须补问当前样品是否完整包含 5 个触摸片,以及每个触摸片如何从实物区分胸 / 腿 / 阴部配置。