Repository navigation
add MOONDROP PILL adapter - #130
Merged
Merged
Conversation
kiyonoRin
force-pushed
the
add-moondrop-pill
branch
2 times, most recently
from
November 12, 2026 14:01
546edd0 to
5ac6da2
Compare
PILL is the base model of ZZZ-ANGELS-OWS and speaks the same MOONDROP GAIA subset. A 2026-11-12 btsnoop capture of the official app (firmware 1.6.0, SPP DLCI 2) confirms the API-version handshake and battery exchange are byte-identical to the ZZZ-ANGELS-OWS capture: the handshake answers 00 04 03 01, supported components are 01 02, and 01 64 02 50 decodes to left 100% / right 80%, matching the vendor app display. The model is an open-ear clip headset without noise cancellation: 151 captured frames across three sessions contain zero noise commands and the vendor device page exposes no noise entry, so no noise mode is opened. Reuse MoondropZzzAngelsWireCodec and MoondropZzzAngelsBatteryPolicy unchanged and leave the revalidated ZZZ-ANGELS-OWS adapter and session untouched. Control apps reuse the registered MOONDROP entry; no new package or scope. Device validation: first connection and private per-ear battery projection, MiLink card, reconnect replaying the byte-identical handshake, vendor app yield recovery after backoff, and settings navigation all pass; ANC capabilities report zero modes. While one earbud sits in the case its reading stays frozen, the next refresh after removal returns the real value without a reconnect, and the vendor app shows the same frozen reading, so that path is documented as a limit rather than a verified case. Verification: testDebugUnitTest, :protocol-test:assembleDebug, :system-module:lintRelease and :system-module:assembleRelease pass (83 suites, 655 tests, 0 failures); markdownlint-cli2 and tools/validate-docs.mjs pass.
kiyonoRin
force-pushed
the
add-moondrop-pill
branch
from
November 12, 2026 14:03
5ac6da2 to
ed47fdf
Compare
Owner
|
@kiyonoRin 谢谢提供完整的抓包说明、适配代码和实机记录。这个 PR 的范围与现有架构一致,CI 通过后已保留你的原提交合入,随 3.3.0 发布。 我补齐了应用内兼容性条目、文档矩阵、控制 App 型号列表和来源署名,没有修改你已实测的协议与生命周期实现。左右耳电量、入盒期间读数冻结和充电盒/充电标志的边界均按记录保留。后续若有固件差异,欢迎继续提交日志或新的 PR。 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
新增水月雨 PILL 耳夹式 OWS(蓝牙名称
MOONDROP PILL)适配。PILL 是 ZZZ-ANGELS-OWS 的基础款,GAIA 握手与电量命令逐字节同构,复用
MoondropZzzAngelsWireCodec与电量策略,不改动 ZZZ-ANGELS-OWS 实现。该型号无降噪,不开放任何噪声控制。
Scope and impact
integration:新增MoondropPillAdapter与MoondropPillProtocolSession,注册于moondropGroup内 ZZZ-ANGELS-OWS 之后、家族回退之前docs:新增docs/moondrop-pill-protocol.md@SerialName、无EarbudState/IPC 字段变化ControlAppCatalog.moondrop,不新增包名,不改scope.list改动只涉及系统设备接入与电量投影,详细配置仍留在厂商 App,符合项目范围。
Evidence
抓包:2026-11-12,固件 1.6.0,官方 App
2.16.1c-251216ai(versionCode 102017),Xiaomi 13 / HyperOS 4.0,SPP DLCI 2,151 帧 / 3 次连接。抓包原文件未入库。
握手(三次连接回答一致):
响应参数 4 字节:状态
00与版本三元组04 03 01(协议 v4 / API 3.1)。电量(同一会话):
字段解释:
1D 1B 01之后按<id> <值>成对,01左耳、02右耳、03充电盒;左右耳1..100有效,00与FF解码为未知;充电盒0..100有效(空盒0是真实状态)。1 至 3 对、任意顺序均可解析,重复或未知 id、奇数长度、非法百分比拒绝整帧。
交叉验证:抓包同期官方 App 设备页显示 L 100% / R 80%,与
64/50一致;模块实机两次读数为
1D 1B 01 01 64 02 50(100 / 80)与1D 1B 01 01 64 02 5A(100 / 90),随耳机状态变化,说明是实时读数而非固定值。
负证据:151 帧内
1D 40/1D 41噪声命令零条;1D 1B 00是支持组件表而非电量读数,按未知帧忽略;未见
1D 1A 81主动推送变体,故不接受推送,仅响应Refresh查询。本型号无控制命令:只有支持组件与电量两类只读查询,无写入帧,因此没有回读与失败行为
需要记录。抓包中的
1D 00 05返回固件版本 ASCII1.6.0,1D 0A 05、1D 1C/1D/1E、1D 28(双设备连接,回答含已配对设备名)等命令语义未确认,不开放。端点:标准 SPP,实测 DLCI 2。设备类
0x240404,身份 DUAL。判型只认领规范化名称
moondroppill;未观察到-LEA身份与更宽别名,不认领。地址为合成值
25:02:13:00:00:01,仅保留 OUI。Validation
testDebugUnitTest83 套件 / 655 用例,0 失败,其中MoondropPillAdapterTest22 例:system-module:lintRelease、:system-module:assembleRelease均通过MiLink 卡片、重连握手(帧与抓包逐字节一致)、厂商 App 让位与退出后通道恢复、
“更多设置”跳转均正常;
published raw ANC capabilities modes=0markdownlint-cli2@0.18.10 error,tools/validate-docs.mjspassedcatalog、scope.list、docs/control-apps.md无需同步单耳入盒:入盒期间该耳读数冻结,跨数分钟的四次刷新均返回同一帧
1D 1B 01 01 64 02 5A;出盒后第一次普通
Refresh即变为1D 1B 01 01 64 02 64(右耳 80→100),未重新握手。官方 App 显示同一读数,
charging恒为false,与 ZZZ-ANGELS-OWS 固件 1.2.0 的限制同源。模块保留设备实际回报,不按数值不变猜测离线或充电。
Risks and rollback
GPL-3.0-only。