Add bounded X4 Bluetooth wake and record Android recovery proof

This commit is contained in:
DCCONSTRUCTIONS
2026-09-10 12:48:09 +03:00
parent 556e376a62
commit f164606828
14 changed files with 789 additions and 43 deletions
+11 -1
View File
@@ -83,6 +83,7 @@ class PacketReader:
def __init__(self):
self.buffer = bytearray()
self.heartbeats = 0
def feed(self, chunk):
if not chunk or len(self.buffer) + len(chunk) > MAX_PACKET * 2:
@@ -91,12 +92,21 @@ class PacketReader:
result = []
while len(self.buffer) >= 4:
size = struct.unpack_from("<I", self.buffer)[0]
if not 16 <= size <= MAX_PACKET:
if size != 7 and not 16 <= size <= MAX_PACKET:
raise ValueError("Unknown packet framing")
if len(self.buffer) < size:
break
raw = bytes(self.buffer[:size])
del self.buffer[:size]
if size == 7:
# X4 BLE04 capture; SDK CameraSession::Start registers type5
# with OnHeartbeatHandler. This is not an Options response.
if raw != b"\x07\x00\x00\x00\x05\x00\x00":
raise ValueError("Unsupported short control packet")
self.heartbeats += 1
if self.heartbeats > 64:
raise ValueError("Heartbeat bound exceeded")
continue
_, kind, reserved, code, content, ident, tail = struct.unpack("<IBHHBIH", raw[:16])
if kind != 4 or reserved or tail or content != 2 or ident & 0xC0000000 != 0xC0000000:
raise ValueError("Unsupported message header/direction/fragmentation")