From 305a6d6c2aa3e43bd125e0a453ed3f7aea7e8cc3 Mon Sep 17 00:00:00 2001 From: darken Date: Tue, 28 Jul 2026 18:14:00 +0200 Subject: [PATCH] docs(aap): Warn that 0x0001 closes the stream mid-session --- .../pods/core/apple/aap/protocol/AapMessageType.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/aap/protocol/AapMessageType.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/aap/protocol/AapMessageType.kt index cb44f41c..615af932 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/aap/protocol/AapMessageType.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/aap/protocol/AapMessageType.kt @@ -14,6 +14,16 @@ package eu.darken.capod.pods.core.apple.aap.protocol * logging still reports a named opcode instead of a bare int. */ enum class AapMessageType(val value: Int, val wiresharkName: String) { + /** + * Handshake-phase only — **never send this on an established session.** + * + * Verified on Pro 3 (fw `81.2675000075000000.6503`): sending `04 00 04 00 01 00` mid-session + * makes the device close the L2CAP stream ("Stream closed by remote"), forcing a reconnect. + * + * It looks like a cheap "re-read settings" probe, but AAP has no read-setting primitive at all — + * settings are push-only (on connect, on external change, or never). Use optimistic state plus + * profile-learned persistence instead, and let reconnects refresh. + */ CAPABILITIES_REQUEST(0x0001, "Capabilities Request"), CAPABILITIES(0x0002, "Capabilities"), BATTERY_INFO_REQUEST(0x0003, "Battery Info Request"),