From e03fb7da2a08b575ad7b251c43e1499f2b97b7b1 Mon Sep 17 00:00:00 2001 From: Aiden <68633820+awils27@users.noreply.github.com> Date: Wed, 13 May 2026 18:59:20 +1000 Subject: [PATCH] run 18 --- captures/rcp-camerainfo-40-then-b0.txt | 57 +++ captures/rcp-camerainfo-40-then-b5.txt | 57 +++ captures/rcp-camerainfo-c0-then-a0.txt | 32 ++ captures/rcp-camerainfo-mixed-40-b0-c0.txt | 53 ++ captures/rcp-camerainfo-mixed-a0-b0-b5.txt | 52 ++ captures/rcp-camerainfo-preheart-40.txt | 15 + captures/rcp-camerainfo-preheart-c0.txt | 16 + .../rcp-decouple-connectnotact-then-40.txt | 11 + .../rcp-decouple-connectnotact-then-a0-a0.txt | 14 + .../rcp-decouple-connectnotact-then-a0.txt | 11 + .../rcp-decouple-connectnotact-then-b0.txt | 11 + captures/rcp-decouple-no-connectnotact-a0.txt | 46 ++ docs/discovery-notes.md | 458 ++++++++++++++++++ 13 files changed, 833 insertions(+) create mode 100644 captures/rcp-camerainfo-40-then-b0.txt create mode 100644 captures/rcp-camerainfo-40-then-b5.txt create mode 100644 captures/rcp-camerainfo-c0-then-a0.txt create mode 100644 captures/rcp-camerainfo-mixed-40-b0-c0.txt create mode 100644 captures/rcp-camerainfo-mixed-a0-b0-b5.txt create mode 100644 captures/rcp-camerainfo-preheart-40.txt create mode 100644 captures/rcp-camerainfo-preheart-c0.txt create mode 100644 captures/rcp-decouple-connectnotact-then-40.txt create mode 100644 captures/rcp-decouple-connectnotact-then-a0-a0.txt create mode 100644 captures/rcp-decouple-connectnotact-then-a0.txt create mode 100644 captures/rcp-decouple-connectnotact-then-b0.txt create mode 100644 captures/rcp-decouple-no-connectnotact-a0.txt diff --git a/captures/rcp-camerainfo-40-then-b0.txt b/captures/rcp-camerainfo-40-then-b0.txt new file mode 100644 index 0000000..190357d --- /dev/null +++ b/captures/rcp-camerainfo-40-then-b0.txt @@ -0,0 +1,57 @@ +Sequence probe: 5 frames x 4 group(s) on COM5 at 38400 8N1 +FRAME 1: 00 00 00 00 80 DA +FRAME 2: 00 00 00 00 80 DA +FRAME 3: 00 00 B0 00 80 6A +FRAME 4: 00 00 00 00 80 DA +FRAME 5: 00 00 00 00 80 DA +BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +BEGIN group 1/4 +18:47:29.233 TX group=1 frame=1 len=006 00 00 00 00 80 DA +18:47:29.233 RX group=1 frame=1 no RX bytes +18:47:29.576 TX group=1 frame=2 len=006 00 00 00 00 80 DA +18:47:29.576 RX group=1 frame=2 ANOMALY 18 RX bytes; first mismatch at byte 6: got 07, heartbeat offset 0 expected 00 +18:47:29.576 RX group=1 frame=2 raw 00 00 00 00 80 DA 07 80 C0 40 30 6D 07 80 C0 40 30 6D +18:47:29.925 TX group=1 frame=3 len=006 00 00 B0 00 80 6A +18:47:29.925 RX group=1 frame=3 heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +18:47:30.271 TX group=1 frame=4 len=006 00 00 00 00 80 DA +18:47:30.271 RX group=1 frame=4 heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +18:47:30.615 TX group=1 frame=5 len=006 00 00 00 00 80 DA +18:47:30.615 RX group=1 frame=5 heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +GROUP 1 TAIL heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +BEGIN group 2/4 +18:47:31.380 TX group=2 frame=1 len=006 00 00 00 00 80 DA +18:47:31.380 RX group=2 frame=1 heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +18:47:31.726 TX group=2 frame=2 len=006 00 00 00 00 80 DA +18:47:31.726 RX group=2 frame=2 heartbeat-compatible RX: 13 bytes, offset 0, 2 frames + 1 bytes +18:47:32.101 TX group=2 frame=3 len=006 00 00 B0 00 80 6A +18:47:32.101 RX group=2 frame=3 heartbeat-compatible RX: 12 bytes, offset 1, 2 frames + 0 bytes +18:47:32.476 TX group=2 frame=4 len=006 00 00 00 00 80 DA +18:47:32.476 RX group=2 frame=4 heartbeat-compatible RX: 12 bytes, offset 1, 2 frames + 0 bytes +18:47:32.853 TX group=2 frame=5 len=006 00 00 00 00 80 DA +18:47:32.853 RX group=2 frame=5 heartbeat-compatible RX: 12 bytes, offset 1, 2 frames + 0 bytes +GROUP 2 TAIL heartbeat-compatible RX: 17 bytes, offset 1, 2 frames + 5 bytes +BEGIN group 3/4 +18:47:33.645 TX group=3 frame=1 len=006 00 00 00 00 80 DA +18:47:33.645 RX group=3 frame=1 heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +18:47:33.990 TX group=3 frame=2 len=006 00 00 00 00 80 DA +18:47:33.990 RX group=3 frame=2 heartbeat-compatible RX: 13 bytes, offset 0, 2 frames + 1 bytes +18:47:34.367 TX group=3 frame=3 len=006 00 00 B0 00 80 6A +18:47:34.367 RX group=3 frame=3 heartbeat-compatible RX: 12 bytes, offset 1, 2 frames + 0 bytes +18:47:34.741 TX group=3 frame=4 len=006 00 00 00 00 80 DA +18:47:34.741 RX group=3 frame=4 heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +18:47:35.087 TX group=3 frame=5 len=006 00 00 00 00 80 DA +18:47:35.087 RX group=3 frame=5 heartbeat-compatible RX: 13 bytes, offset 0, 2 frames + 1 bytes +GROUP 3 TAIL heartbeat-compatible RX: 17 bytes, offset 1, 2 frames + 5 bytes +BEGIN group 4/4 +18:47:35.878 TX group=4 frame=1 len=006 00 00 00 00 80 DA +18:47:35.878 RX group=4 frame=1 heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +18:47:36.223 TX group=4 frame=2 len=006 00 00 00 00 80 DA +18:47:36.223 RX group=4 frame=2 heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +18:47:36.568 TX group=4 frame=3 len=006 00 00 B0 00 80 6A +18:47:36.568 RX group=4 frame=3 heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +18:47:36.914 TX group=4 frame=4 len=006 00 00 00 00 80 DA +18:47:36.914 RX group=4 frame=4 heartbeat-compatible RX: 13 bytes, offset 0, 2 frames + 1 bytes +18:47:37.290 TX group=4 frame=5 len=006 00 00 00 00 80 DA +18:47:37.290 RX group=4 frame=5 heartbeat-compatible RX: 12 bytes, offset 1, 2 frames + 0 bytes +GROUP 4 TAIL heartbeat-compatible RX: 17 bytes, offset 1, 2 frames + 5 bytes +Anomalies: 1 diff --git a/captures/rcp-camerainfo-40-then-b5.txt b/captures/rcp-camerainfo-40-then-b5.txt new file mode 100644 index 0000000..9a15987 --- /dev/null +++ b/captures/rcp-camerainfo-40-then-b5.txt @@ -0,0 +1,57 @@ +Sequence probe: 5 frames x 4 group(s) on COM5 at 38400 8N1 +FRAME 1: 00 00 00 00 80 DA +FRAME 2: 00 00 00 00 80 DA +FRAME 3: 00 00 B5 00 80 6F +FRAME 4: 00 00 00 00 80 DA +FRAME 5: 00 00 00 00 80 DA +BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +BEGIN group 1/4 +18:47:55.898 TX group=1 frame=1 len=006 00 00 00 00 80 DA +18:47:55.898 RX group=1 frame=1 no RX bytes +18:47:56.273 TX group=1 frame=2 len=006 00 00 00 00 80 DA +18:47:56.273 RX group=1 frame=2 ANOMALY 18 RX bytes; first mismatch at byte 6: got 07, heartbeat offset 0 expected 00 +18:47:56.273 RX group=1 frame=2 raw 00 00 00 00 80 DA 07 80 40 40 30 ED 07 80 40 40 30 ED +18:47:56.651 TX group=1 frame=3 len=006 00 00 B5 00 80 6F +18:47:56.651 RX group=1 frame=3 heartbeat-compatible RX: 7 bytes, offset 0, 1 frames + 1 bytes +18:47:57.025 TX group=1 frame=4 len=006 00 00 00 00 80 DA +18:47:57.025 RX group=1 frame=4 heartbeat-compatible RX: 12 bytes, offset 1, 2 frames + 0 bytes +18:47:57.400 TX group=1 frame=5 len=006 00 00 00 00 80 DA +18:47:57.400 RX group=1 frame=5 heartbeat-compatible RX: 12 bytes, offset 1, 2 frames + 0 bytes +GROUP 1 TAIL heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +BEGIN group 2/4 +18:47:58.163 TX group=2 frame=1 len=006 00 00 00 00 80 DA +18:47:58.163 RX group=2 frame=1 heartbeat-compatible RX: 7 bytes, offset 0, 1 frames + 1 bytes +18:47:58.538 TX group=2 frame=2 len=006 00 00 00 00 80 DA +18:47:58.538 RX group=2 frame=2 heartbeat-compatible RX: 12 bytes, offset 1, 2 frames + 0 bytes +18:47:58.914 TX group=2 frame=3 len=006 00 00 B5 00 80 6F +18:47:58.914 RX group=2 frame=3 heartbeat-compatible RX: 12 bytes, offset 1, 2 frames + 0 bytes +18:47:59.290 TX group=2 frame=4 len=006 00 00 00 00 80 DA +18:47:59.290 RX group=2 frame=4 heartbeat-compatible RX: 12 bytes, offset 1, 2 frames + 0 bytes +18:47:59.666 TX group=2 frame=5 len=006 00 00 00 00 80 DA +18:47:59.666 RX group=2 frame=5 heartbeat-compatible RX: 12 bytes, offset 1, 2 frames + 0 bytes +GROUP 2 TAIL heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +BEGIN group 3/4 +18:48:00.431 TX group=3 frame=1 len=006 00 00 00 00 80 DA +18:48:00.431 RX group=3 frame=1 heartbeat-compatible RX: 7 bytes, offset 0, 1 frames + 1 bytes +18:48:00.806 TX group=3 frame=2 len=006 00 00 00 00 80 DA +18:48:00.806 RX group=3 frame=2 heartbeat-compatible RX: 12 bytes, offset 1, 2 frames + 0 bytes +18:48:01.180 TX group=3 frame=3 len=006 00 00 B5 00 80 6F +18:48:01.180 RX group=3 frame=3 heartbeat-compatible RX: 12 bytes, offset 1, 2 frames + 0 bytes +18:48:01.553 TX group=3 frame=4 len=006 00 00 00 00 80 DA +18:48:01.553 RX group=3 frame=4 heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +18:48:01.898 TX group=3 frame=5 len=006 00 00 00 00 80 DA +18:48:01.898 RX group=3 frame=5 heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +GROUP 3 TAIL heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +BEGIN group 4/4 +18:48:02.660 TX group=4 frame=1 len=006 00 00 00 00 80 DA +18:48:02.660 RX group=4 frame=1 heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +18:48:03.005 TX group=4 frame=2 len=006 00 00 00 00 80 DA +18:48:03.005 RX group=4 frame=2 heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +18:48:03.349 TX group=4 frame=3 len=006 00 00 B5 00 80 6F +18:48:03.349 RX group=4 frame=3 heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +18:48:03.694 TX group=4 frame=4 len=006 00 00 00 00 80 DA +18:48:03.694 RX group=4 frame=4 heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +18:48:04.039 TX group=4 frame=5 len=006 00 00 00 00 80 DA +18:48:04.039 RX group=4 frame=5 heartbeat-compatible RX: 13 bytes, offset 0, 2 frames + 1 bytes +GROUP 4 TAIL heartbeat-compatible RX: 17 bytes, offset 1, 2 frames + 5 bytes +Anomalies: 1 diff --git a/captures/rcp-camerainfo-c0-then-a0.txt b/captures/rcp-camerainfo-c0-then-a0.txt new file mode 100644 index 0000000..8546520 --- /dev/null +++ b/captures/rcp-camerainfo-c0-then-a0.txt @@ -0,0 +1,32 @@ +Sequence probe: 3 frames x 3 group(s) on COM5 at 38400 8N1 +FRAME 1: 00 00 00 00 80 DA +FRAME 2: 00 00 00 00 80 DA +FRAME 3: 00 00 A0 00 80 7A +BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +BEGIN group 1/3 +18:49:55.415 TX group=1 frame=1 len=006 00 00 00 00 80 DA +18:49:55.415 RX group=1 frame=1 no RX bytes +18:49:57.374 TX group=1 frame=2 len=006 00 00 00 00 80 DA +18:49:57.374 RX group=1 frame=2 heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +18:49:59.331 TX group=1 frame=3 len=006 00 00 A0 00 80 7A +18:49:59.331 RX group=1 frame=3 ANOMALY 54 RX bytes; first mismatch at byte 36: got 07, heartbeat offset 0 expected 00 +18:49:59.331 RX group=1 frame=3 raw 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 07 80 68 40 30 C5 07 80 68 40 30 C5 07 80 68 40 30 C5 +GROUP 1 TAIL ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00 +GROUP 1 TAIL raw 07 80 68 40 30 C5 07 80 68 40 30 C5 07 80 68 40 30 C5 07 80 68 40 30 C5 +BEGIN group 2/3 +18:50:00.796 TX group=2 frame=1 len=006 00 00 00 00 80 DA +18:50:00.796 RX group=2 frame=1 heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +18:50:02.756 TX group=2 frame=2 len=006 00 00 00 00 80 DA +18:50:02.756 RX group=2 frame=2 heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +18:50:04.713 TX group=2 frame=3 len=006 00 00 A0 00 80 7A +18:50:04.713 RX group=2 frame=3 heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes +GROUP 2 TAIL heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +BEGIN group 3/3 +18:50:06.178 TX group=3 frame=1 len=006 00 00 00 00 80 DA +18:50:06.178 RX group=3 frame=1 heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +18:50:08.134 TX group=3 frame=2 len=006 00 00 00 00 80 DA +18:50:08.134 RX group=3 frame=2 heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes +18:50:10.094 TX group=3 frame=3 len=006 00 00 A0 00 80 7A +18:50:10.094 RX group=3 frame=3 heartbeat-compatible RX: 37 bytes, offset 0, 6 frames + 1 bytes +GROUP 3 TAIL heartbeat-compatible RX: 24 bytes, offset 1, 4 frames + 0 bytes +Anomalies: 2 diff --git a/captures/rcp-camerainfo-mixed-40-b0-c0.txt b/captures/rcp-camerainfo-mixed-40-b0-c0.txt new file mode 100644 index 0000000..76116fb --- /dev/null +++ b/captures/rcp-camerainfo-mixed-40-b0-c0.txt @@ -0,0 +1,53 @@ +Sequence probe: 6 frames x 3 group(s) on COM5 at 38400 8N1 +FRAME 1: 00 00 00 00 80 DA +FRAME 2: 00 00 40 00 80 9A +FRAME 3: 00 00 00 00 80 DA +FRAME 4: 00 00 B0 00 80 6A +FRAME 5: 00 00 00 00 80 DA +FRAME 6: 00 00 C0 00 80 1A +BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +BEGIN group 1/3 +18:49:28.409 TX group=1 frame=1 len=006 00 00 00 00 80 DA +18:49:28.409 RX group=1 frame=1 no RX bytes +18:49:28.876 TX group=1 frame=2 len=006 00 00 40 00 80 9A +18:49:28.876 RX group=1 frame=2 ANOMALY 18 RX bytes; first mismatch at byte 6: got 07, heartbeat offset 0 expected 00 +18:49:28.876 RX group=1 frame=2 raw 00 00 00 00 80 DA 07 80 50 40 30 FD 07 80 50 40 30 FD +18:49:29.324 TX group=1 frame=3 len=006 00 00 00 00 80 DA +18:49:29.324 RX group=1 frame=3 ANOMALY 13 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 0 expected 00 +18:49:29.324 RX group=1 frame=3 raw 07 80 50 40 30 FD 00 00 00 00 80 DA 00 +18:49:29.798 TX group=1 frame=4 len=006 00 00 B0 00 80 6A +18:49:29.798 RX group=1 frame=4 heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +18:49:30.242 TX group=1 frame=5 len=006 00 00 00 00 80 DA +18:49:30.242 RX group=1 frame=5 heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +18:49:30.687 TX group=1 frame=6 len=006 00 00 C0 00 80 1A +18:49:30.687 RX group=1 frame=6 heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +GROUP 1 TAIL heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +BEGIN group 2/3 +18:49:31.754 TX group=2 frame=1 len=006 00 00 00 00 80 DA +18:49:31.754 RX group=2 frame=1 heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +18:49:32.198 TX group=2 frame=2 len=006 00 00 40 00 80 9A +18:49:32.198 RX group=2 frame=2 heartbeat-compatible RX: 13 bytes, offset 0, 2 frames + 1 bytes +18:49:32.673 TX group=2 frame=3 len=006 00 00 00 00 80 DA +18:49:32.673 RX group=2 frame=3 heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +18:49:33.120 TX group=2 frame=4 len=006 00 00 B0 00 80 6A +18:49:33.120 RX group=2 frame=4 heartbeat-compatible RX: 13 bytes, offset 0, 2 frames + 1 bytes +18:49:33.596 TX group=2 frame=5 len=006 00 00 00 00 80 DA +18:49:33.596 RX group=2 frame=5 heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +18:49:34.042 TX group=2 frame=6 len=006 00 00 C0 00 80 1A +18:49:34.042 RX group=2 frame=6 heartbeat-compatible RX: 13 bytes, offset 0, 2 frames + 1 bytes +GROUP 2 TAIL heartbeat-compatible RX: 23 bytes, offset 1, 3 frames + 5 bytes +BEGIN group 3/3 +18:49:35.137 TX group=3 frame=1 len=006 00 00 00 00 80 DA +18:49:35.137 RX group=3 frame=1 heartbeat-compatible RX: 7 bytes, offset 0, 1 frames + 1 bytes +18:49:35.612 TX group=3 frame=2 len=006 00 00 40 00 80 9A +18:49:35.612 RX group=3 frame=2 heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +18:49:36.057 TX group=3 frame=3 len=006 00 00 00 00 80 DA +18:49:36.057 RX group=3 frame=3 heartbeat-compatible RX: 13 bytes, offset 0, 2 frames + 1 bytes +18:49:36.532 TX group=3 frame=4 len=006 00 00 B0 00 80 6A +18:49:36.532 RX group=3 frame=4 heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +18:49:36.978 TX group=3 frame=5 len=006 00 00 00 00 80 DA +18:49:36.978 RX group=3 frame=5 heartbeat-compatible RX: 13 bytes, offset 0, 2 frames + 1 bytes +18:49:37.452 TX group=3 frame=6 len=006 00 00 C0 00 80 1A +18:49:37.452 RX group=3 frame=6 heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +GROUP 3 TAIL heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +Anomalies: 2 diff --git a/captures/rcp-camerainfo-mixed-a0-b0-b5.txt b/captures/rcp-camerainfo-mixed-a0-b0-b5.txt new file mode 100644 index 0000000..d75a7c6 --- /dev/null +++ b/captures/rcp-camerainfo-mixed-a0-b0-b5.txt @@ -0,0 +1,52 @@ +Sequence probe: 6 frames x 3 group(s) on COM5 at 38400 8N1 +FRAME 1: 00 00 00 00 80 DA +FRAME 2: 00 00 A0 00 80 7A +FRAME 3: 00 00 00 00 80 DA +FRAME 4: 00 00 B0 00 80 6A +FRAME 5: 00 00 00 00 80 DA +FRAME 6: 00 00 B5 00 80 6F +BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +BEGIN group 1/3 +18:49:02.262 TX group=1 frame=1 len=006 00 00 00 00 80 DA +18:49:02.262 RX group=1 frame=1 no RX bytes +18:49:02.738 TX group=1 frame=2 len=006 00 00 A0 00 80 7A +18:49:02.738 RX group=1 frame=2 ANOMALY 6 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00 +18:49:02.738 RX group=1 frame=2 raw 07 80 68 40 30 C5 +18:49:03.185 TX group=1 frame=3 len=006 00 00 00 00 80 DA +18:49:03.185 RX group=1 frame=3 heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +18:49:03.659 TX group=1 frame=4 len=006 00 00 B0 00 80 6A +18:49:03.659 RX group=1 frame=4 heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +18:49:04.104 TX group=1 frame=5 len=006 00 00 00 00 80 DA +18:49:04.104 RX group=1 frame=5 heartbeat-compatible RX: 13 bytes, offset 0, 2 frames + 1 bytes +18:49:04.580 TX group=1 frame=6 len=006 00 00 B5 00 80 6F +18:49:04.580 RX group=1 frame=6 heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +GROUP 1 TAIL heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +BEGIN group 2/3 +18:49:05.646 TX group=2 frame=1 len=006 00 00 00 00 80 DA +18:49:05.646 RX group=2 frame=1 heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +18:49:06.092 TX group=2 frame=2 len=006 00 00 A0 00 80 7A +18:49:06.092 RX group=2 frame=2 heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +18:49:06.538 TX group=2 frame=3 len=006 00 00 00 00 80 DA +18:49:06.538 RX group=2 frame=3 heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +18:49:06.983 TX group=2 frame=4 len=006 00 00 B0 00 80 6A +18:49:06.983 RX group=2 frame=4 heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +18:49:07.429 TX group=2 frame=5 len=006 00 00 00 00 80 DA +18:49:07.429 RX group=2 frame=5 heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +18:49:07.872 TX group=2 frame=6 len=006 00 00 B5 00 80 6F +18:49:07.872 RX group=2 frame=6 heartbeat-compatible RX: 13 bytes, offset 0, 2 frames + 1 bytes +GROUP 2 TAIL heartbeat-compatible RX: 23 bytes, offset 1, 3 frames + 5 bytes +BEGIN group 3/3 +18:49:08.969 TX group=3 frame=1 len=006 00 00 00 00 80 DA +18:49:08.969 RX group=3 frame=1 heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +18:49:09.412 TX group=3 frame=2 len=006 00 00 A0 00 80 7A +18:49:09.412 RX group=3 frame=2 heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +18:49:09.856 TX group=3 frame=3 len=006 00 00 00 00 80 DA +18:49:09.856 RX group=3 frame=3 heartbeat-compatible RX: 13 bytes, offset 0, 2 frames + 1 bytes +18:49:10.331 TX group=3 frame=4 len=006 00 00 B0 00 80 6A +18:49:10.331 RX group=3 frame=4 heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +18:49:10.776 TX group=3 frame=5 len=006 00 00 00 00 80 DA +18:49:10.776 RX group=3 frame=5 heartbeat-compatible RX: 13 bytes, offset 0, 2 frames + 1 bytes +18:49:11.251 TX group=3 frame=6 len=006 00 00 B5 00 80 6F +18:49:11.251 RX group=3 frame=6 heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +GROUP 3 TAIL heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +Anomalies: 1 diff --git a/captures/rcp-camerainfo-preheart-40.txt b/captures/rcp-camerainfo-preheart-40.txt new file mode 100644 index 0000000..a0725fd --- /dev/null +++ b/captures/rcp-camerainfo-preheart-40.txt @@ -0,0 +1,15 @@ +Sequence probe: 3 frames x 1 group(s) on COM5 at 38400 8N1 +FRAME 1: 00 00 00 00 80 DA +FRAME 2: 00 00 00 00 80 DA +FRAME 3: 00 00 40 00 80 9A +BASELINE heartbeat-compatible RX: 29 bytes, offset 1, 4 frames + 5 bytes +BEGIN group 1/1 +18:48:22.547 TX group=1 frame=1 len=006 00 00 00 00 80 DA +18:48:22.547 RX group=1 frame=1 no RX bytes +18:48:23.024 TX group=1 frame=2 len=006 00 00 00 00 80 DA +18:48:23.024 RX group=1 frame=2 ANOMALY 6 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00 +18:48:23.024 RX group=1 frame=2 raw 07 80 40 40 30 ED +18:48:23.503 TX group=1 frame=3 len=006 00 00 40 00 80 9A +18:48:23.503 RX group=1 frame=3 heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +GROUP 1 TAIL heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +Anomalies: 1 diff --git a/captures/rcp-camerainfo-preheart-c0.txt b/captures/rcp-camerainfo-preheart-c0.txt new file mode 100644 index 0000000..9429eb8 --- /dev/null +++ b/captures/rcp-camerainfo-preheart-c0.txt @@ -0,0 +1,16 @@ +Sequence probe: 3 frames x 1 group(s) on COM5 at 38400 8N1 +FRAME 1: 00 00 00 00 80 DA +FRAME 2: 00 00 00 00 80 DA +FRAME 3: 00 00 C0 00 80 1A +BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +BEGIN group 1/1 +18:48:40.672 TX group=1 frame=1 len=006 00 00 00 00 80 DA +18:48:40.672 RX group=1 frame=1 heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +18:48:41.148 TX group=1 frame=2 len=006 00 00 00 00 80 DA +18:48:41.148 RX group=1 frame=2 ANOMALY 18 RX bytes; first mismatch at byte 6: got 07, heartbeat offset 0 expected 00 +18:48:41.148 RX group=1 frame=2 raw 00 00 00 00 80 DA 07 80 40 40 30 ED 07 80 40 40 30 ED +18:48:41.629 TX group=1 frame=3 len=006 00 00 C0 00 80 1A +18:48:41.629 RX group=1 frame=3 ANOMALY 18 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 0 expected 00 +18:48:41.629 RX group=1 frame=3 raw 07 80 40 40 30 ED 00 00 00 00 80 DA 00 00 00 00 80 DA +GROUP 1 TAIL heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +Anomalies: 2 diff --git a/captures/rcp-decouple-connectnotact-then-40.txt b/captures/rcp-decouple-connectnotact-then-40.txt new file mode 100644 index 0000000..c89d2e6 --- /dev/null +++ b/captures/rcp-decouple-connectnotact-then-40.txt @@ -0,0 +1,11 @@ +Sequence probe: 2 frames x 1 group(s) on COM5 at 38400 8N1 +FRAME 1: 00 00 00 00 80 DA +FRAME 2: 00 00 40 00 80 9A +BASELINE heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +BEGIN group 1/1 +18:56:42.466 TX group=1 frame=1 len=006 00 00 00 00 80 DA +18:56:42.466 RX group=1 frame=1 heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +18:56:45.302 TX group=1 frame=2 len=006 00 00 40 00 80 9A +18:56:45.302 RX group=1 frame=2 heartbeat-compatible RX: 42 bytes, offset 0, 7 frames + 0 bytes +GROUP 1 TAIL heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +Anomalies: 0 diff --git a/captures/rcp-decouple-connectnotact-then-a0-a0.txt b/captures/rcp-decouple-connectnotact-then-a0-a0.txt new file mode 100644 index 0000000..23f7f85 --- /dev/null +++ b/captures/rcp-decouple-connectnotact-then-a0-a0.txt @@ -0,0 +1,14 @@ +Sequence probe: 3 frames x 1 group(s) on COM5 at 38400 8N1 +FRAME 1: 00 00 00 00 80 DA +FRAME 2: 00 00 A0 00 80 7A +FRAME 3: 00 00 A0 00 80 7A +BASELINE heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +BEGIN group 1/1 +18:55:50.709 TX group=1 frame=1 len=006 00 00 00 00 80 DA +18:55:50.709 RX group=1 frame=1 no RX bytes +18:55:53.516 TX group=1 frame=2 len=006 00 00 A0 00 80 7A +18:55:53.516 RX group=1 frame=2 heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes +18:55:56.353 TX group=1 frame=3 len=006 00 00 A0 00 80 7A +18:55:56.353 RX group=1 frame=3 heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes +GROUP 1 TAIL heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +Anomalies: 0 diff --git a/captures/rcp-decouple-connectnotact-then-a0.txt b/captures/rcp-decouple-connectnotact-then-a0.txt new file mode 100644 index 0000000..e453cca --- /dev/null +++ b/captures/rcp-decouple-connectnotact-then-a0.txt @@ -0,0 +1,11 @@ +Sequence probe: 2 frames x 1 group(s) on COM5 at 38400 8N1 +FRAME 1: 00 00 00 00 80 DA +FRAME 2: 00 00 A0 00 80 7A +BASELINE heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +BEGIN group 1/1 +18:55:27.804 TX group=1 frame=1 len=006 00 00 00 00 80 DA +18:55:27.804 RX group=1 frame=1 no RX bytes +18:55:30.609 TX group=1 frame=2 len=006 00 00 A0 00 80 7A +18:55:30.609 RX group=1 frame=2 heartbeat-compatible RX: 42 bytes, offset 0, 7 frames + 0 bytes +GROUP 1 TAIL heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +Anomalies: 0 diff --git a/captures/rcp-decouple-connectnotact-then-b0.txt b/captures/rcp-decouple-connectnotact-then-b0.txt new file mode 100644 index 0000000..9666b4f --- /dev/null +++ b/captures/rcp-decouple-connectnotact-then-b0.txt @@ -0,0 +1,11 @@ +Sequence probe: 2 frames x 1 group(s) on COM5 at 38400 8N1 +FRAME 1: 00 00 00 00 80 DA +FRAME 2: 00 00 B0 00 80 6A +BASELINE heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +BEGIN group 1/1 +18:56:18.474 TX group=1 frame=1 len=006 00 00 00 00 80 DA +18:56:18.474 RX group=1 frame=1 no RX bytes +18:56:21.282 TX group=1 frame=2 len=006 00 00 B0 00 80 6A +18:56:21.282 RX group=1 frame=2 heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes +GROUP 1 TAIL heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +Anomalies: 0 diff --git a/captures/rcp-decouple-no-connectnotact-a0.txt b/captures/rcp-decouple-no-connectnotact-a0.txt new file mode 100644 index 0000000..a2206b1 --- /dev/null +++ b/captures/rcp-decouple-no-connectnotact-a0.txt @@ -0,0 +1,46 @@ +Sequence probe: 5 frames x 3 group(s) on COM5 at 38400 8N1 +FRAME 1: 00 00 00 00 80 DA +FRAME 2: 00 00 A0 00 80 7A +FRAME 3: 00 00 00 00 80 DA +FRAME 4: 00 00 00 00 80 DA +FRAME 5: 00 00 00 00 80 DA +BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +BEGIN group 1/3 +18:55:00.199 TX group=1 frame=1 len=006 00 00 00 00 80 DA +18:55:00.199 RX group=1 frame=1 no RX bytes +18:55:00.815 TX group=1 frame=2 len=006 00 00 A0 00 80 7A +18:55:00.815 RX group=1 frame=2 ANOMALY 24 RX bytes; first mismatch at byte 6: got 07, heartbeat offset 0 expected 00 +18:55:00.815 RX group=1 frame=2 raw 00 00 00 00 80 DA 07 80 E8 40 30 45 07 80 E8 40 30 45 07 80 E8 40 30 45 +18:55:01.432 TX group=1 frame=3 len=006 00 00 00 00 80 DA +18:55:01.432 RX group=1 frame=3 ANOMALY 18 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 0 expected 00 +18:55:01.432 RX group=1 frame=3 raw 07 80 E8 40 30 45 00 00 00 00 80 DA 00 00 00 00 80 DA +18:55:02.049 TX group=1 frame=4 len=006 00 00 00 00 80 DA +18:55:02.049 RX group=1 frame=4 heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes +18:55:02.666 TX group=1 frame=5 len=006 00 00 00 00 80 DA +18:55:02.666 RX group=1 frame=5 heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes +GROUP 1 TAIL heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +BEGIN group 2/3 +18:55:03.550 TX group=2 frame=1 len=006 00 00 00 00 80 DA +18:55:03.550 RX group=2 frame=1 heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +18:55:04.167 TX group=2 frame=2 len=006 00 00 A0 00 80 7A +18:55:04.167 RX group=2 frame=2 heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes +18:55:04.784 TX group=2 frame=3 len=006 00 00 00 00 80 DA +18:55:04.784 RX group=2 frame=3 heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes +18:55:05.400 TX group=2 frame=4 len=006 00 00 00 00 80 DA +18:55:05.400 RX group=2 frame=4 heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes +18:55:06.017 TX group=2 frame=5 len=006 00 00 00 00 80 DA +18:55:06.017 RX group=2 frame=5 heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes +GROUP 2 TAIL heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +BEGIN group 3/3 +18:55:06.871 TX group=3 frame=1 len=006 00 00 00 00 80 DA +18:55:06.871 RX group=3 frame=1 heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +18:55:07.487 TX group=3 frame=2 len=006 00 00 A0 00 80 7A +18:55:07.487 RX group=3 frame=2 heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes +18:55:08.103 TX group=3 frame=3 len=006 00 00 00 00 80 DA +18:55:08.103 RX group=3 frame=3 heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes +18:55:08.719 TX group=3 frame=4 len=006 00 00 00 00 80 DA +18:55:08.719 RX group=3 frame=4 heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes +18:55:09.338 TX group=3 frame=5 len=006 00 00 00 00 80 DA +18:55:09.338 RX group=3 frame=5 heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes +GROUP 3 TAIL heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +Anomalies: 2 diff --git a/docs/discovery-notes.md b/docs/discovery-notes.md index c50f68e..bf2580e 100644 --- a/docs/discovery-notes.md +++ b/docs/discovery-notes.md @@ -4293,3 +4293,461 @@ Next branch worth testing: - or combine heartbeat maintenance with the synthetic CALL path, to test whether "host present" plus an event-path trigger behaves differently than "host present" plus a plain table query + +## Camera-Info-Stream Hypothesis Ladder + +Goal: + +- Test the idea that the panel wants more than a plain link heartbeat. +- Treat one frame family as "host present" and another as possible + camera-state/camera-info traffic. +- Check whether the transient heartbeat-induced `0x40` / `0xC0` family is a + different readable page or context, not just noise. + +Working model: + +1. host heartbeat says "I am here" +2. a second family says "here is current camera state" +3. only then does the panel become fully active + +### CI1: Provoke `0x40` Family, Then Query `B0` + +Use the same dense double-heartbeat pattern that previously provoked +`07 80 40 40 30 ED`, then immediately ask for a known `B0` block. + +```powershell +python scripts/serial_sequence_probe.py --port COM5 --prompt --frame "00 00 00 00 80 DA" --frame "00 00 00 00 80 DA" --frame "00 00 B0 00 80 6A" --frame "00 00 00 00 80 DA" --frame "00 00 00 00 80 DA" --repeat 4 --frame-interval 0.10 --read-after-frame 0.25 --read-after-group 0.5 --log captures/rcp-camerainfo-40-then-b0.txt +``` + +Question: + +- Does the `0x40` family suppress `B0`, alter `B0`, or allow a different `B0` + response family than the normal `07 80 6C 40 30 C1`? + +### CI2: Provoke `0x40` Family, Then Query `B5` + +Same idea, but use the strongest discovery-like block we have. + +```powershell +python scripts/serial_sequence_probe.py --port COM5 --prompt --frame "00 00 00 00 80 DA" --frame "00 00 00 00 80 DA" --frame "00 00 B5 00 80 6F" --frame "00 00 00 00 80 DA" --frame "00 00 00 00 80 DA" --repeat 4 --frame-interval 0.10 --read-after-frame 0.25 --read-after-group 0.5 --log captures/rcp-camerainfo-40-then-b5.txt +``` + +Question: + +- If `B5` is really a discovery/status block, does entering the heartbeat-driven + `0x40` state make it return a different page, or consume it entirely? + +### CI3: Probe Commands Aligned With The Heartbeat-Induced Family + +Try a simple `00 -> 40` and `00 -> C0` query again, but now with a small +heartbeat run-up first instead of a bare primer. + +```powershell +python scripts/serial_sequence_probe.py --port COM5 --prompt --frame "00 00 00 00 80 DA" --frame "00 00 00 00 80 DA" --frame "00 00 40 00 80 9A" --read-after-frame 0.4 --read-after-group 1.0 --log captures/rcp-camerainfo-preheart-40.txt +python scripts/serial_sequence_probe.py --port COM5 --prompt --frame "00 00 00 00 80 DA" --frame "00 00 00 00 80 DA" --frame "00 00 C0 00 80 1A" --read-after-frame 0.4 --read-after-group 1.0 --log captures/rcp-camerainfo-preheart-c0.txt +``` + +Question: + +- Do these commands return something closer to the transient `0x40` / `0xC0` + response families when the panel has just seen two host heartbeats? + +### CI4: Sustained Mixed Stream, Status-Block Style + +Instead of repeating one query, rotate through a small set of known readable +blocks while keeping heartbeat in the stream. + +```powershell +python scripts/serial_sequence_probe.py --port COM5 --prompt --frame "00 00 00 00 80 DA" --frame "00 00 A0 00 80 7A" --frame "00 00 00 00 80 DA" --frame "00 00 B0 00 80 6A" --frame "00 00 00 00 80 DA" --frame "00 00 B5 00 80 6F" --repeat 3 --frame-interval 0.20 --read-after-frame 0.25 --read-after-group 0.8 --log captures/rcp-camerainfo-mixed-a0-b0-b5.txt +``` + +Question: + +- Does a rotating "camera info block" stream behave differently from hammering a + single one-shot query? + +### CI5: Sustained Mixed Stream, Heartbeat-Driven Family + +Rotate heartbeat around `0x40`-family and normal query candidates to see +whether the panel prefers a page/state rhythm instead of a static query. + +```powershell +python scripts/serial_sequence_probe.py --port COM5 --prompt --frame "00 00 00 00 80 DA" --frame "00 00 40 00 80 9A" --frame "00 00 00 00 80 DA" --frame "00 00 B0 00 80 6A" --frame "00 00 00 00 80 DA" --frame "00 00 C0 00 80 1A" --repeat 3 --frame-interval 0.20 --read-after-frame 0.25 --read-after-group 0.8 --log captures/rcp-camerainfo-mixed-40-b0-c0.txt +``` + +Question: + +- Does mixing the heartbeat-aligned family with a known readable block expose a + reusable page, a new response family, or any visible panel state change? + +### CI6: Sparse Heartbeat Run-Up, Then `A0` + +Try the same idea as the dense `0x40` trigger, but with slower heartbeat spacing +that previously nudged the `0xC0` family. + +```powershell +python scripts/serial_sequence_probe.py --port COM5 --prompt --frame "00 00 00 00 80 DA" --frame "00 00 00 00 80 DA" --frame "00 00 A0 00 80 7A" --repeat 3 --frame-interval 1.50 --read-after-frame 0.45 --read-after-group 1.0 --log captures/rcp-camerainfo-c0-then-a0.txt +``` + +Question: + +- Does a slower heartbeat-derived state family behave differently from the dense + `0x40` case? + +What to watch for: + +- the panel stays out of `CONNECT NOT ACT` for the whole run +- a known readable block changes family or value fields +- a later query responds where it previously would not +- the transient `0x40` / `0xC0` family appears immediately before a different + stable block +- any lamp or display change beyond the usual timeout behavior + +Recommended order: + +1. `CI1` +2. `CI2` +3. `CI4` +4. `CI5` +5. `CI6` + +### 2026-05-13 Camera-Info-Stream Result + +Captures: + +- `captures/rcp-camerainfo-40-then-b0.txt` +- `captures/rcp-camerainfo-40-then-b5.txt` +- `captures/rcp-camerainfo-preheart-40.txt` +- `captures/rcp-camerainfo-preheart-c0.txt` +- `captures/rcp-camerainfo-mixed-a0-b0-b5.txt` +- `captures/rcp-camerainfo-mixed-40-b0-c0.txt` +- `captures/rcp-camerainfo-c0-then-a0.txt` + +User observation: + +- In `CI6`, the panel appeared to enter `CONNECT NOT ACT` and then emit a + single latch/readable response afterward. + +#### CI1: Provoke `0x40`/`0xC0`, Then Query `B0` + +Observed result: + +- Group 1: + - the second heartbeat produced `07 80 C0 40 30 6D` + - the following `B0` query produced only heartbeat-compatible RX +- Groups 2-4: + - no structured `B0` response + - all later frames stayed heartbeat-compatible + +Read: + +- The heartbeat-induced `0xC0` family did not open a new `B0` page. +- It appears to consume or displace the normal one-shot response opportunity. + +#### CI2: Provoke `0x40`, Then Query `B5` + +Observed result: + +- Group 1: + - the second heartbeat produced `07 80 40 40 30 ED` + - the following `B5` query produced only heartbeat-compatible RX +- Groups 2-4: + - `B5` remained heartbeat-compatible only + +Read: + +- Same story as `CI1`: the heartbeat-driven family does not seem to lead into a + richer `B5` discovery page. +- It suppresses or replaces it. + +#### CI3: Probe Commands Aligned With The Heartbeat-Induced Family + +Observed result: + +| Sequence | Result | +| --- | --- | +| double heartbeat, then `00 -> 40` | heartbeat-induced `07 80 40 40 30 ED`, then `00 -> 40` gave heartbeat only | +| double heartbeat, then `00 -> C0` | heartbeat-induced `07 80 40 40 30 ED`, then `00 -> C0` only drained more `07 80 40 40 30 ED` plus heartbeat | + +Read: + +- The pre-heartbeat `0x40` state does not make the explicit `40` or `C0` + commands bloom into a clear new readable block. +- The explicit commands mostly arrive after the transient state is already in + progress. + +#### CI4: Sustained Mixed Stream, Status-Block Style + +Observed result: + +- Group 1: + - `A0` produced `07 80 68 40 30 C5` + - later `B0` and `B5` in the same mixed stream were heartbeat only +- Groups 2-3: + - `A0`, `B0`, and `B5` were all heartbeat-compatible only + +Read: + +- A rotating "camera info block" stream did not keep opening new readable + status pages. +- The first successful block still wins, then the rest are suppressed. + +#### CI5: Sustained Mixed Stream, Heartbeat-Driven Family + +Observed result: + +- Group 1: + - `00 -> 40` produced `07 80 50 40 30 FD` + - later `B0` and `C0` in the same stream were heartbeat only +- Groups 2-3: + - all later frames were heartbeat-compatible only + +Read: + +- This confirms `00 -> 40` is a stable explicit query family in its own right. +- But, again, the first successful readable family suppresses later queries in + the same stream. + +#### CI6: Sparse Heartbeat Run-Up, Then `A0` + +Observed result: + +- Group 1: + - two widely spaced heartbeat frames stayed heartbeat-compatible + - the later `A0` produced a delayed `07 80 68 40 30 C5` burst +- Groups 2-3: + - the same pattern returned heartbeat-compatible RX only + +Read: + +- This matches the user's observation well: a slow run-up can leave the panel + visibly in `CONNECT NOT ACT`, yet a later single readable/latch response can + still occur afterward. +- That suggests the visible display state and the one-shot readable window are + related, but not identical. +- A panel that has already fallen into `CONNECT NOT ACT` may still accept one + later readable query under the right timing. + +Overall interpretation: + +- The "camera info stream" hypothesis is not wrong, but this particular test set + did not show a sustained multi-block camera-state feed. +- The heartbeat-induced `0x40` / `0xC0` family is real, but it mostly acts like + a competing one-shot response family, not a gateway into a larger page. +- Mixed streams still collapse into "first successful block wins." +- The cleanest new points are: + - `00 -> 40` is a real explicit readable family: `07 80 50 40 30 FD` + - heartbeat cadence can provoke `0x40` / `0xC0` families without an explicit + query + - a visible `CONNECT NOT ACT` state does not completely forbid one later + readable/latch response + +Next branch worth testing: + +- isolate the delayed-after-`CONNECT NOT ACT` case from `CI6` with a small + timing ladder around the final `A0` +- compare `A0`, `B0`, and `40` after a deliberate wait-until-`CONNECT NOT ACT` + phase +- test whether the `0x40` / `0xC0` families are better thought of as alternate + readable pages rather than camera-info keepalives + +## `CONNECT NOT ACT` vs Latch-State Decoupling Test + +Goal: + +- Prove that the visible `CONNECT NOT ACT` state and the one-shot readable/latch + state are related, but not the same thing. +- Show one case where the latch is spent even though the panel does **not** + enter `CONNECT NOT ACT`. +- Show another case where the panel **does** enter `CONNECT NOT ACT` and can + still produce one later readable response. + +Interpretation target: + +- If both paths happen, the LCD state is not a direct indicator of whether the + one-shot readable window is still available. + +### DL1: Latch Spent While `CONNECT NOT ACT` Stays Away + +This is the "no visible timeout, but latch already consumed" proof. + +Watch the LCD throughout. The expected result is that the panel stays out of +`CONNECT NOT ACT` while running. + +```powershell +python scripts/serial_sequence_probe.py --port COM5 --prompt --frame "00 00 00 00 80 DA" --frame "00 00 A0 00 80 7A" --frame "00 00 00 00 80 DA" --frame "00 00 00 00 80 DA" --frame "00 00 00 00 80 DA" --repeat 3 --frame-interval 0.25 --read-after-frame 0.35 --read-after-group 0.5 --log captures/rcp-decouple-no-connectnotact-a0.txt +``` + +What proves decoupling: + +- group 1: `A0` responds +- later groups: `A0` does not respond +- LCD never enters `CONNECT NOT ACT` during the run + +That shows the latch can be spent even while the display does not show the +timeout/not-active state. + +### DL2: Deliberate `CONNECT NOT ACT`, Then Late `A0` + +This is the "visible timeout, but one late readable response still exists" +proof. + +Method: + +- power-cycle +- watch for the panel to show `CONNECT NOT ACT` between the first heartbeat and + the later `A0` + +```powershell +python scripts/serial_sequence_probe.py --port COM5 --prompt --pre-read 1.0 --frame "00 00 00 00 80 DA" --frame "00 00 A0 00 80 7A" --frame-interval 2.50 --read-after-frame 0.30 --read-after-group 1.0 --log captures/rcp-decouple-connectnotact-then-a0.txt +``` + +What proves decoupling: + +- the panel visibly enters `CONNECT NOT ACT` +- the later `A0` still returns `07 80 68 40 30 C5` + +That shows the visible `CONNECT NOT ACT` state does not automatically mean the +readable/latch opportunity is gone. + +### DL3: Deliberate `CONNECT NOT ACT`, Then Two Late `A0` Queries + +This tightens `DL2` by checking whether the first late query can consume the +remaining one-shot readable window while the LCD state stays the same. + +```powershell +python scripts/serial_sequence_probe.py --port COM5 --prompt --pre-read 1.0 --frame "00 00 00 00 80 DA" --frame "00 00 A0 00 80 7A" --frame "00 00 A0 00 80 7A" --frame-interval 2.50 --read-after-frame 0.30 --read-after-group 1.0 --log captures/rcp-decouple-connectnotact-then-a0-a0.txt +``` + +What proves decoupling: + +- panel enters `CONNECT NOT ACT` +- first late `A0` responds +- second late `A0` does not +- LCD remains in the same visible state + +That shows the latch/readable state can change while the display state does not. + +### DL4: Compare Late `A0`, `B0`, and `40` After `CONNECT NOT ACT` + +This checks whether only some readable families survive the visible timeout +state. + +```powershell +python scripts/serial_sequence_probe.py --port COM5 --prompt --pre-read 1.0 --frame "00 00 00 00 80 DA" --frame "00 00 B0 00 80 6A" --frame-interval 2.50 --read-after-frame 0.30 --read-after-group 1.0 --log captures/rcp-decouple-connectnotact-then-b0.txt +python scripts/serial_sequence_probe.py --port COM5 --prompt --pre-read 1.0 --frame "00 00 00 00 80 DA" --frame "00 00 40 00 80 9A" --frame-interval 2.50 --read-after-frame 0.30 --read-after-group 1.0 --log captures/rcp-decouple-connectnotact-then-40.txt +``` + +Useful outcomes: + +- only `A0` responds late: + the post-timeout window may be family-specific +- `A0`, `B0`, and `40` all respond late: + the timeout state is clearly not the same as the latch state +- none respond late: + the `CI6` late response was timing-sensitive and needs a tighter delay ladder + +### DL5: Tight Delay Ladder Around Late `A0` + +If `DL2` or `DL3` looks close but inconsistent, bracket the timeout edge. + +```powershell +python scripts/serial_sequence_probe.py --port COM5 --prompt --pre-read 1.0 --frame "00 00 00 00 80 DA" --frame "00 00 A0 00 80 7A" --frame-interval 2.00 --read-after-frame 0.30 --read-after-group 1.0 --log captures/rcp-decouple-delay-2000ms-a0.txt +python scripts/serial_sequence_probe.py --port COM5 --prompt --pre-read 1.0 --frame "00 00 00 00 80 DA" --frame "00 00 A0 00 80 7A" --frame-interval 2.25 --read-after-frame 0.30 --read-after-group 1.0 --log captures/rcp-decouple-delay-2250ms-a0.txt +python scripts/serial_sequence_probe.py --port COM5 --prompt --pre-read 1.0 --frame "00 00 00 00 80 DA" --frame "00 00 A0 00 80 7A" --frame-interval 2.50 --read-after-frame 0.30 --read-after-group 1.0 --log captures/rcp-decouple-delay-2500ms-a0.txt +python scripts/serial_sequence_probe.py --port COM5 --prompt --pre-read 1.0 --frame "00 00 00 00 80 DA" --frame "00 00 A0 00 80 7A" --frame-interval 2.75 --read-after-frame 0.30 --read-after-group 1.0 --log captures/rcp-decouple-delay-2750ms-a0.txt +``` + +Recommended order: + +1. `DL1` +2. `DL2` +3. `DL3` +4. `DL4` +5. `DL5` only if `DL2`/`DL3` are close but inconsistent + +### 2026-05-13 `CONNECT NOT ACT` vs Latch-State Decoupling Result + +Captures: + +- `captures/rcp-decouple-no-connectnotact-a0.txt` +- `captures/rcp-decouple-connectnotact-then-a0.txt` +- `captures/rcp-decouple-connectnotact-then-a0-a0.txt` + +User LCD observation: + +- `DL1`: the panel never presented `CONNECT NOT ACT` while the script was + running. +- `DL2` and `DL3`: the panel presented `CONNECT NOT ACT` at the start of the + script. + +#### DL1: Latch Spent While `CONNECT NOT ACT` Stays Away + +Observed result: + +- Group 1: + - `A0` produced a readable block, but this run returned + `07 80 E8 40 30 45` rather than `07 80 68 40 30 C5` +- Groups 2-3: + - `A0` produced heartbeat-compatible RX only +- LCD: + - no `CONNECT NOT ACT` while the script was active + +Read: + +- This is strong evidence for decoupling in one direction: + the readable/latch state can be consumed while the panel does **not** show + `CONNECT NOT ACT`. +- It also reinforces that the `A0` family can vary between at least `68` and + `E8` forms depending on context/timing. + +#### DL2: Deliberate `CONNECT NOT ACT`, Then Late `A0` + +Observed result: + +- The panel showed `CONNECT NOT ACT` early in the run. +- The later `A0` query produced heartbeat-compatible RX only. +- No delayed `A0` readable block appeared at this exact timing. + +Read: + +- At a `2.50 s` gap in this two-frame form, visible `CONNECT NOT ACT` did not + guarantee a late readable response. +- This weakens the simple "enter `CONNECT NOT ACT`, then `A0` always still + works once" idea. + +#### DL3: Deliberate `CONNECT NOT ACT`, Then Two Late `A0` Queries + +Observed result: + +- The panel showed `CONNECT NOT ACT` early in the run. +- Both later `A0` queries produced heartbeat-compatible RX only. +- No readable block appeared on either late `A0`. + +Read: + +- This does not provide the hoped-for second half of the decoupling proof. +- Instead, it says that once the panel has visibly entered `CONNECT NOT ACT` in + this specific timing pattern, the late `A0` opportunity may already be gone or + may require narrower timing than `2.50 s`. + +Overall interpretation: + +- We now have solid evidence for one half of the claim: + `CONNECT NOT ACT` is **not required** for the latch/readable state to be + consumed. +- We do **not** yet have equally solid evidence for the other half at this + timing: + a visible `CONNECT NOT ACT` state did not still yield a late `A0` response in + `DL2` or `DL3`. +- So the current safest statement is: + the LCD state and the latch/readable state are not directly coupled, but the + exact post-timeout behavior is more timing-sensitive than the earlier `CI6` + observation first suggested. + +Best next move: + +- run `DL4` and then a tight `DL5` delay bracket +- especially around `2.00 s`, `2.25 s`, `2.50 s`, and `2.75 s` +- because the difference between the earlier `CI6` late hit and these no-hit + decoupling runs is now most likely timing, framing shape, or both