Compare commits
3 Commits
5e736bf395
...
feb78475c0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
feb78475c0 | ||
|
|
9bcc75c2e9 | ||
|
|
769e47ed67 |
79
captures/rcp-direct-remaining-after-b5-pause.txt
Normal file
79
captures/rcp-direct-remaining-after-b5-pause.txt
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
Direct response sweep: 43 frames x 1 cycles (43 total) on COM5 at 38400 8N1
|
||||||
|
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:59:39.639 TX cycle=1 p1=0x00 p2=0x00 cmd=0x00 state=0x00 value=0x80 frame 006 00 00 00 00 80 DA
|
||||||
|
14:59:40.464 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB5 state=0x00 value=0x80 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:59:40.464 ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:59:40.464 RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:59:48.216 TX cycle=1 p1=0x00 p2=0x00 cmd=0x1B state=0x00 value=0x80 frame 006 00 00 1B 00 80 C1
|
||||||
|
14:59:49.043 TX cycle=1 p1=0x00 p2=0x00 cmd=0x36 state=0x00 value=0x80 frame 006 00 00 36 00 80 EC
|
||||||
|
14:59:49.863 TX cycle=1 p1=0x00 p2=0x00 cmd=0x40 state=0x00 value=0x80 frame 006 00 00 40 00 80 9A
|
||||||
|
14:59:49.863 ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:59:49.863 RX raw 07 80 50 40 30 FD 07 80 50 40 30 FD 07 80 50 40 30 FD 07 80 50 40 30 FD
|
||||||
|
14:59:57.647 TX cycle=1 p1=0x00 p2=0x00 cmd=0x6C state=0x00 value=0x80 frame 006 00 00 6C 00 80 B6
|
||||||
|
14:59:58.469 TX cycle=1 p1=0x00 p2=0x00 cmd=0x6D state=0x00 value=0x80 frame 006 00 00 6D 00 80 B7
|
||||||
|
14:59:58.469 ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:59:58.469 RX raw 07 80 5B 20 D8 7E 07 80 5B 20 D8 7E 07 80 5B 20 D8 7E 07 80 5B 20 D8 7E
|
||||||
|
15:00:04.979 TX cycle=1 p1=0x00 p2=0x00 cmd=0x20 state=0x00 value=0x80 frame 006 00 00 20 00 80 FA
|
||||||
|
15:00:05.804 TX cycle=1 p1=0x00 p2=0x00 cmd=0x2F state=0x00 value=0x80 frame 006 00 00 2F 00 80 F5
|
||||||
|
15:00:06.627 TX cycle=1 p1=0x00 p2=0x00 cmd=0x30 state=0x00 value=0x80 frame 006 00 00 30 00 80 EA
|
||||||
|
15:00:07.450 TX cycle=1 p1=0x00 p2=0x00 cmd=0x3F state=0x00 value=0x80 frame 006 00 00 3F 00 80 E5
|
||||||
|
15:00:08.273 TX cycle=1 p1=0x00 p2=0x00 cmd=0x40 state=0x00 value=0x80 frame 006 00 00 40 00 80 9A
|
||||||
|
15:00:08.273 ANOMALY 27 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
15:00:08.273 RX raw 07 80 50 40 30 FD 07 80 50 40 30 FD 07 80 50 40 30 FD 07 80 50 40 30 FD 07 80 50
|
||||||
|
15:00:20.236 TX cycle=1 p1=0x00 p2=0x00 cmd=0x4F state=0x00 value=0x80 frame 006 00 00 4F 00 80 95
|
||||||
|
15:00:20.236 ANOMALY 12 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 0 expected 00
|
||||||
|
15:00:20.236 RX raw 07 80 0A 04 AB 78 00 00 00 00 80 DA
|
||||||
|
15:00:26.062 TX cycle=1 p1=0x00 p2=0x00 cmd=0x50 state=0x00 value=0x80 frame 006 00 00 50 00 80 8A
|
||||||
|
15:00:26.884 TX cycle=1 p1=0x00 p2=0x00 cmd=0x5F state=0x00 value=0x80 frame 006 00 00 5F 00 80 85
|
||||||
|
15:00:27.707 TX cycle=1 p1=0x00 p2=0x00 cmd=0x7F state=0x00 value=0x80 frame 006 00 00 7F 00 80 A5
|
||||||
|
15:00:28.528 TX cycle=1 p1=0x00 p2=0x00 cmd=0x80 state=0x00 value=0x80 frame 006 00 00 80 00 80 5A
|
||||||
|
15:00:29.350 TX cycle=1 p1=0x00 p2=0x00 cmd=0x8F state=0x00 value=0x80 frame 006 00 00 8F 00 80 55
|
||||||
|
15:00:29.350 ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
15:00:29.350 RX raw 07 80 0C 04 AB 7E 07 80 0C 04 AB 7E 07 80 0C 04 AB 7E 07 80 0C 04 AB 7E
|
||||||
|
15:00:35.669 TX cycle=1 p1=0x00 p2=0x00 cmd=0x90 state=0x00 value=0x80 frame 006 00 00 90 00 80 4A
|
||||||
|
15:00:36.492 TX cycle=1 p1=0x00 p2=0x00 cmd=0x9F state=0x00 value=0x80 frame 006 00 00 9F 00 80 45
|
||||||
|
15:00:37.316 TX cycle=1 p1=0x00 p2=0x00 cmd=0xA0 state=0x00 value=0x80 frame 006 00 00 A0 00 80 7A
|
||||||
|
15:00:37.316 ANOMALY 12 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 0 expected 00
|
||||||
|
15:00:37.316 RX raw 07 80 E8 40 30 45 00 00 00 00 80 DA
|
||||||
|
15:00:44.466 TX cycle=1 p1=0x00 p2=0x00 cmd=0xAF state=0x00 value=0x80 frame 006 00 00 AF 00 80 75
|
||||||
|
15:00:45.289 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB0 state=0x00 value=0x80 frame 006 00 00 B0 00 80 6A
|
||||||
|
15:00:45.289 ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
15:00:45.289 RX raw 07 80 6C 40 30 C1 07 80 6C 40 30 C1 07 80 6C 40 30 C1 07 80 6C 40 30 C1
|
||||||
|
15:00:52.165 TX cycle=1 p1=0x00 p2=0x00 cmd=0xBF state=0x00 value=0x80 frame 006 00 00 BF 00 80 65
|
||||||
|
15:00:52.988 TX cycle=1 p1=0x00 p2=0x00 cmd=0xC0 state=0x00 value=0x80 frame 006 00 00 C0 00 80 1A
|
||||||
|
15:00:53.811 TX cycle=1 p1=0x00 p2=0x00 cmd=0xCF state=0x00 value=0x80 frame 006 00 00 CF 00 80 15
|
||||||
|
15:00:53.811 ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
15:00:53.811 RX raw 07 80 0E 04 AB 7C 07 80 0E 04 AB 7C 07 80 0E 04 AB 7C 07 80 0E 04 AB 7C
|
||||||
|
15:00:59.683 TX cycle=1 p1=0x00 p2=0x00 cmd=0xE0 state=0x00 value=0x80 frame 006 00 00 E0 00 80 3A
|
||||||
|
15:01:00.507 TX cycle=1 p1=0x00 p2=0x00 cmd=0xEF state=0x00 value=0x80 frame 006 00 00 EF 00 80 35
|
||||||
|
15:01:00.507 ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
15:01:00.507 RX raw 07 80 0F 04 EB 3D 07 80 0F 04 EB 3D 07 80 0F 04 EB 3D 07 80 0F 04 EB 3D
|
||||||
|
15:01:06.293 TX cycle=1 p1=0x00 p2=0x00 cmd=0xF0 state=0x00 value=0x80 frame 006 00 00 F0 00 80 2A
|
||||||
|
15:01:07.118 TX cycle=1 p1=0x00 p2=0x00 cmd=0xFF state=0x00 value=0x80 frame 006 00 00 FF 00 80 25
|
||||||
|
15:01:07.945 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB1 state=0x00 value=0x80 frame 006 00 00 B1 00 80 6B
|
||||||
|
15:01:07.945 ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
15:01:07.945 RX raw 07 80 6C 20 D8 49 07 80 6C 20 D8 49 07 80 6C 20 D8 49 07 80 6C 20 D8 49
|
||||||
|
15:01:16.350 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB2 state=0x00 value=0x80 frame 006 00 00 B2 00 80 68
|
||||||
|
15:01:17.172 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB3 state=0x00 value=0x80 frame 006 00 00 B3 00 80 69
|
||||||
|
15:01:17.172 ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
15:01:17.172 RX raw 07 80 36 10 2C D7 07 80 36 10 2C D7 07 80 36 10 2C D7 07 80 36 10 2C D7
|
||||||
|
15:01:22.380 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB4 state=0x00 value=0x80 frame 006 00 00 B4 00 80 6E
|
||||||
|
15:01:23.203 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB6 state=0x00 value=0x80 frame 006 00 00 B6 00 80 6C
|
||||||
|
15:01:23.203 ANOMALY 12 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 0 expected 00
|
||||||
|
15:01:23.203 RX raw 07 80 1B 08 C6 08 00 00 00 00 80 DA
|
||||||
|
15:01:28.861 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB7 state=0x00 value=0x80 frame 006 00 00 B7 00 80 6D
|
||||||
|
15:01:29.681 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB8 state=0x00 value=0x80 frame 006 00 00 B8 00 80 62
|
||||||
|
15:01:29.681 ANOMALY 12 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 0 expected 00
|
||||||
|
15:01:29.681 RX raw 07 80 6E 40 30 C3 00 00 00 00 80 DA
|
||||||
|
15:01:34.912 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB9 state=0x00 value=0x80 frame 006 00 00 B9 00 80 63
|
||||||
|
15:01:35.740 TX cycle=1 p1=0x00 p2=0x00 cmd=0xBA state=0x00 value=0x80 frame 006 00 00 BA 00 80 60
|
||||||
|
15:01:35.740 ANOMALY 12 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 0 expected 00
|
||||||
|
15:01:35.740 RX raw 07 80 37 10 0C F6 00 00 00 00 80 DA
|
||||||
|
15:01:43.081 TX cycle=1 p1=0x00 p2=0x00 cmd=0xBB state=0x00 value=0x80 frame 006 00 00 BB 00 80 61
|
||||||
|
15:01:43.907 TX cycle=1 p1=0x00 p2=0x00 cmd=0xBC state=0x00 value=0x80 frame 006 00 00 BC 00 80 66
|
||||||
|
15:01:43.907 ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
15:01:43.907 RX raw 07 80 6F 40 30 C2 07 80 6F 40 30 C2 07 80 6F 40 30 C2 07 80 6F 40 30 C2
|
||||||
|
15:01:50.437 TX cycle=1 p1=0x00 p2=0x00 cmd=0xBD state=0x00 value=0x80 frame 006 00 00 BD 00 80 67
|
||||||
|
15:01:51.262 TX cycle=1 p1=0x00 p2=0x00 cmd=0xBE state=0x00 value=0x80 frame 006 00 00 BE 00 80 64
|
||||||
|
FINAL heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
Anomalies: 16
|
||||||
149
captures/rcp-keepalive-after-b5-cmd00-200ms.txt
Normal file
149
captures/rcp-keepalive-after-b5-cmd00-200ms.txt
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
Keepalive-after-query on COM5 at 38400 8N1
|
||||||
|
Primer 00 00 00 00 80 DA; query 00 00 B5 00 80 6F; keepalive 00 00 00 00 80 DA
|
||||||
|
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:31:59.333 TX primer 00 00 00 00 80 DA
|
||||||
|
14:31:59.333 PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:31:59.546 TX query 00 00 B5 00 80 6F
|
||||||
|
14:31:59.546 QUERY RX NON_HEARTBEAT RX: 48 bytes 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:32:01.560 TX keepalive 001 00 00 00 00 80 DA
|
||||||
|
14:32:01.774 TX keepalive 002 00 00 00 00 80 DA
|
||||||
|
14:32:01.774 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:01.987 TX keepalive 003 00 00 00 00 80 DA
|
||||||
|
14:32:01.987 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:02.201 TX keepalive 004 00 00 00 00 80 DA
|
||||||
|
14:32:02.201 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:02.413 TX keepalive 005 00 00 00 00 80 DA
|
||||||
|
14:32:02.413 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:02.626 TX keepalive 006 00 00 00 00 80 DA
|
||||||
|
14:32:02.626 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:02.839 TX keepalive 007 00 00 00 00 80 DA
|
||||||
|
14:32:02.839 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:03.053 TX keepalive 008 00 00 00 00 80 DA
|
||||||
|
14:32:03.053 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:03.265 TX keepalive 009 00 00 00 00 80 DA
|
||||||
|
14:32:03.265 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:03.479 TX keepalive 010 00 00 00 00 80 DA
|
||||||
|
14:32:03.479 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:03.693 TX keepalive 011 00 00 00 00 80 DA
|
||||||
|
14:32:03.693 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:03.907 TX keepalive 012 00 00 00 00 80 DA
|
||||||
|
14:32:03.907 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:04.121 TX keepalive 013 00 00 00 00 80 DA
|
||||||
|
14:32:04.121 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:04.336 TX keepalive 014 00 00 00 00 80 DA
|
||||||
|
14:32:04.336 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:04.551 TX keepalive 015 00 00 00 00 80 DA
|
||||||
|
14:32:04.551 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:04.764 TX keepalive 016 00 00 00 00 80 DA
|
||||||
|
14:32:04.764 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:04.978 TX keepalive 017 00 00 00 00 80 DA
|
||||||
|
14:32:04.978 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:05.191 TX keepalive 018 00 00 00 00 80 DA
|
||||||
|
14:32:05.191 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:05.403 TX keepalive 019 00 00 00 00 80 DA
|
||||||
|
14:32:05.403 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:05.617 TX keepalive 020 00 00 00 00 80 DA
|
||||||
|
14:32:05.617 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:05.830 TX keepalive 021 00 00 00 00 80 DA
|
||||||
|
14:32:05.830 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:06.044 TX keepalive 022 00 00 00 00 80 DA
|
||||||
|
14:32:06.044 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:06.259 TX keepalive 023 00 00 00 00 80 DA
|
||||||
|
14:32:06.259 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:06.471 TX keepalive 024 00 00 00 00 80 DA
|
||||||
|
14:32:06.471 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:06.685 TX keepalive 025 00 00 00 00 80 DA
|
||||||
|
14:32:06.685 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:06.899 TX keepalive 026 00 00 00 00 80 DA
|
||||||
|
14:32:06.899 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:07.112 TX keepalive 027 00 00 00 00 80 DA
|
||||||
|
14:32:07.112 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:07.327 TX keepalive 028 00 00 00 00 80 DA
|
||||||
|
14:32:07.327 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:07.540 TX keepalive 029 00 00 00 00 80 DA
|
||||||
|
14:32:07.540 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:07.754 TX keepalive 030 00 00 00 00 80 DA
|
||||||
|
14:32:07.754 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:07.967 TX keepalive 031 00 00 00 00 80 DA
|
||||||
|
14:32:07.967 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:08.179 TX keepalive 032 00 00 00 00 80 DA
|
||||||
|
14:32:08.179 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:08.393 TX keepalive 033 00 00 00 00 80 DA
|
||||||
|
14:32:08.393 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:08.605 TX keepalive 034 00 00 00 00 80 DA
|
||||||
|
14:32:08.605 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:08.819 TX keepalive 035 00 00 00 00 80 DA
|
||||||
|
14:32:08.819 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:09.034 TX keepalive 036 00 00 00 00 80 DA
|
||||||
|
14:32:09.034 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:09.249 TX keepalive 037 00 00 00 00 80 DA
|
||||||
|
14:32:09.249 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:09.461 TX keepalive 038 00 00 00 00 80 DA
|
||||||
|
14:32:09.461 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:09.675 TX keepalive 039 00 00 00 00 80 DA
|
||||||
|
14:32:09.675 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:09.888 TX keepalive 040 00 00 00 00 80 DA
|
||||||
|
14:32:09.888 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:10.104 TX keepalive 041 00 00 00 00 80 DA
|
||||||
|
14:32:10.104 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:10.320 TX keepalive 042 00 00 00 00 80 DA
|
||||||
|
14:32:10.320 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:10.535 TX keepalive 043 00 00 00 00 80 DA
|
||||||
|
14:32:10.535 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:10.750 TX keepalive 044 00 00 00 00 80 DA
|
||||||
|
14:32:10.750 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:10.963 TX keepalive 045 00 00 00 00 80 DA
|
||||||
|
14:32:10.963 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:11.177 TX keepalive 046 00 00 00 00 80 DA
|
||||||
|
14:32:11.177 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:11.392 TX keepalive 047 00 00 00 00 80 DA
|
||||||
|
14:32:11.392 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:11.608 TX keepalive 048 00 00 00 00 80 DA
|
||||||
|
14:32:11.608 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:11.823 TX keepalive 049 00 00 00 00 80 DA
|
||||||
|
14:32:11.823 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:12.037 TX keepalive 050 00 00 00 00 80 DA
|
||||||
|
14:32:12.037 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:12.250 TX keepalive 051 00 00 00 00 80 DA
|
||||||
|
14:32:12.250 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:12.464 TX keepalive 052 00 00 00 00 80 DA
|
||||||
|
14:32:12.464 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:12.678 TX keepalive 053 00 00 00 00 80 DA
|
||||||
|
14:32:12.678 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:12.890 TX keepalive 054 00 00 00 00 80 DA
|
||||||
|
14:32:12.890 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:13.103 TX keepalive 055 00 00 00 00 80 DA
|
||||||
|
14:32:13.103 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:13.316 TX keepalive 056 00 00 00 00 80 DA
|
||||||
|
14:32:13.316 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:13.530 TX keepalive 057 00 00 00 00 80 DA
|
||||||
|
14:32:13.530 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:13.744 TX keepalive 058 00 00 00 00 80 DA
|
||||||
|
14:32:13.744 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:13.961 TX keepalive 059 00 00 00 00 80 DA
|
||||||
|
14:32:13.961 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:14.179 TX keepalive 060 00 00 00 00 80 DA
|
||||||
|
14:32:14.179 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:14.393 TX keepalive 061 00 00 00 00 80 DA
|
||||||
|
14:32:14.393 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:14.605 TX keepalive 062 00 00 00 00 80 DA
|
||||||
|
14:32:14.605 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:14.819 TX keepalive 063 00 00 00 00 80 DA
|
||||||
|
14:32:14.819 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:15.032 TX keepalive 064 00 00 00 00 80 DA
|
||||||
|
14:32:15.032 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:15.246 TX keepalive 065 00 00 00 00 80 DA
|
||||||
|
14:32:15.246 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:15.461 TX keepalive 066 00 00 00 00 80 DA
|
||||||
|
14:32:15.461 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:15.673 TX keepalive 067 00 00 00 00 80 DA
|
||||||
|
14:32:15.673 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:15.887 TX keepalive 068 00 00 00 00 80 DA
|
||||||
|
14:32:15.887 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:16.102 TX keepalive 069 00 00 00 00 80 DA
|
||||||
|
14:32:16.102 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:16.317 TX keepalive 070 00 00 00 00 80 DA
|
||||||
|
14:32:16.317 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:32:16.531 TX keepalive 071 00 00 00 00 80 DA
|
||||||
|
14:32:16.531 KEEPALIVE RX heartbeat-compatible RX: 1 bytes, offset 0, 0 frames + 1 bytes
|
||||||
|
14:32:20.819 SCREEN CONNECT NOT ACT
|
||||||
58
captures/rcp-keepalive-after-b5-cmd00-600ms.txt
Normal file
58
captures/rcp-keepalive-after-b5-cmd00-600ms.txt
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
Keepalive-after-query on COM5 at 38400 8N1
|
||||||
|
Primer 00 00 00 00 80 DA; query 00 00 B5 00 80 6F; keepalive 00 00 00 00 80 DA
|
||||||
|
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:30:00.588 TX primer 00 00 00 00 80 DA
|
||||||
|
14:30:00.588 PRIMER RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:01.198 TX query 00 00 B5 00 80 6F
|
||||||
|
14:30:01.198 QUERY RX NON_HEARTBEAT RX: 48 bytes 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:30:03.210 TX keepalive 001 00 00 00 00 80 DA
|
||||||
|
14:30:03.210 KEEPALIVE RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:30:03.820 TX keepalive 002 00 00 00 00 80 DA
|
||||||
|
14:30:03.820 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:04.429 TX keepalive 003 00 00 00 00 80 DA
|
||||||
|
14:30:04.429 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:05.038 TX keepalive 004 00 00 00 00 80 DA
|
||||||
|
14:30:05.038 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:05.649 TX keepalive 005 00 00 00 00 80 DA
|
||||||
|
14:30:05.649 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:06.256 TX keepalive 006 00 00 00 00 80 DA
|
||||||
|
14:30:06.256 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:06.865 TX keepalive 007 00 00 00 00 80 DA
|
||||||
|
14:30:06.865 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:07.479 TX keepalive 008 00 00 00 00 80 DA
|
||||||
|
14:30:07.479 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:08.088 TX keepalive 009 00 00 00 00 80 DA
|
||||||
|
14:30:08.088 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:08.699 TX keepalive 010 00 00 00 00 80 DA
|
||||||
|
14:30:08.699 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:09.309 TX keepalive 011 00 00 00 00 80 DA
|
||||||
|
14:30:09.309 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:09.917 TX keepalive 012 00 00 00 00 80 DA
|
||||||
|
14:30:09.917 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:10.525 TX keepalive 013 00 00 00 00 80 DA
|
||||||
|
14:30:10.525 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:11.135 TX keepalive 014 00 00 00 00 80 DA
|
||||||
|
14:30:11.135 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:11.743 TX keepalive 015 00 00 00 00 80 DA
|
||||||
|
14:30:11.743 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:12.354 TX keepalive 016 00 00 00 00 80 DA
|
||||||
|
14:30:12.354 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:12.963 TX keepalive 017 00 00 00 00 80 DA
|
||||||
|
14:30:12.963 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:13.573 TX keepalive 018 00 00 00 00 80 DA
|
||||||
|
14:30:13.573 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:14.183 TX keepalive 019 00 00 00 00 80 DA
|
||||||
|
14:30:14.183 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:14.793 TX keepalive 020 00 00 00 00 80 DA
|
||||||
|
14:30:14.793 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:15.403 TX keepalive 021 00 00 00 00 80 DA
|
||||||
|
14:30:15.403 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:16.011 TX keepalive 022 00 00 00 00 80 DA
|
||||||
|
14:30:16.011 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:16.620 TX keepalive 023 00 00 00 00 80 DA
|
||||||
|
14:30:16.620 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:17.229 TX keepalive 024 00 00 00 00 80 DA
|
||||||
|
14:30:17.229 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:17.839 TX keepalive 025 00 00 00 00 80 DA
|
||||||
|
14:30:17.839 KEEPALIVE RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:30:25.571 SCREEN CONNECT NOT ACT
|
||||||
58
captures/rcp-keepalive-after-b5-state80-600ms.txt
Normal file
58
captures/rcp-keepalive-after-b5-state80-600ms.txt
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
Keepalive-after-query on COM5 at 38400 8N1
|
||||||
|
Primer 00 00 00 00 80 DA; query 00 00 B5 00 80 6F; keepalive 00 00 00 80 00 DA
|
||||||
|
BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
14:31:25.424 TX primer 00 00 00 00 80 DA
|
||||||
|
14:31:25.424 PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:31:26.035 TX query 00 00 B5 00 80 6F
|
||||||
|
14:31:26.035 QUERY RX NON_HEARTBEAT RX: 48 bytes 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:31:28.051 TX keepalive 001 00 00 00 80 00 DA
|
||||||
|
14:31:28.051 KEEPALIVE RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:31:28.660 TX keepalive 002 00 00 00 80 00 DA
|
||||||
|
14:31:28.660 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:29.269 TX keepalive 003 00 00 00 80 00 DA
|
||||||
|
14:31:29.269 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:29.876 TX keepalive 004 00 00 00 80 00 DA
|
||||||
|
14:31:29.876 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:30.486 TX keepalive 005 00 00 00 80 00 DA
|
||||||
|
14:31:30.486 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:31.094 TX keepalive 006 00 00 00 80 00 DA
|
||||||
|
14:31:31.094 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:31.705 TX keepalive 007 00 00 00 80 00 DA
|
||||||
|
14:31:31.705 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:32.318 TX keepalive 008 00 00 00 80 00 DA
|
||||||
|
14:31:32.318 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:32.931 TX keepalive 009 00 00 00 80 00 DA
|
||||||
|
14:31:32.931 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:33.539 TX keepalive 010 00 00 00 80 00 DA
|
||||||
|
14:31:33.539 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:34.150 TX keepalive 011 00 00 00 80 00 DA
|
||||||
|
14:31:34.150 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:34.757 TX keepalive 012 00 00 00 80 00 DA
|
||||||
|
14:31:34.757 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:35.367 TX keepalive 013 00 00 00 80 00 DA
|
||||||
|
14:31:35.367 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:35.978 TX keepalive 014 00 00 00 80 00 DA
|
||||||
|
14:31:35.978 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:36.587 TX keepalive 015 00 00 00 80 00 DA
|
||||||
|
14:31:36.587 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:37.196 TX keepalive 016 00 00 00 80 00 DA
|
||||||
|
14:31:37.196 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:37.803 TX keepalive 017 00 00 00 80 00 DA
|
||||||
|
14:31:37.803 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:38.413 TX keepalive 018 00 00 00 80 00 DA
|
||||||
|
14:31:38.413 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:39.024 TX keepalive 019 00 00 00 80 00 DA
|
||||||
|
14:31:39.024 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:39.634 TX keepalive 020 00 00 00 80 00 DA
|
||||||
|
14:31:39.634 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:40.244 TX keepalive 021 00 00 00 80 00 DA
|
||||||
|
14:31:40.244 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:40.854 TX keepalive 022 00 00 00 80 00 DA
|
||||||
|
14:31:40.854 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:41.464 TX keepalive 023 00 00 00 80 00 DA
|
||||||
|
14:31:41.464 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:42.076 TX keepalive 024 00 00 00 80 00 DA
|
||||||
|
14:31:42.076 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:42.683 TX keepalive 025 00 00 00 80 00 DA
|
||||||
|
14:31:42.683 KEEPALIVE RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:31:47.293 SCREEN CONNECT NOT ACT
|
||||||
58
captures/rcp-keepalive-after-b5-zero-state-600ms.txt
Normal file
58
captures/rcp-keepalive-after-b5-zero-state-600ms.txt
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
Keepalive-after-query on COM5 at 38400 8N1
|
||||||
|
Primer 00 00 00 00 80 DA; query 00 00 B5 00 80 6F; keepalive 00 00 00 00 00 5A
|
||||||
|
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:30:49.577 TX primer 00 00 00 00 80 DA
|
||||||
|
14:30:49.577 PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:30:50.188 TX query 00 00 B5 00 80 6F
|
||||||
|
14:30:50.188 QUERY RX NON_HEARTBEAT RX: 54 bytes 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:30:52.201 TX keepalive 001 00 00 00 00 00 5A
|
||||||
|
14:30:52.201 KEEPALIVE RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:30:52.809 TX keepalive 002 00 00 00 00 00 5A
|
||||||
|
14:30:52.809 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:53.419 TX keepalive 003 00 00 00 00 00 5A
|
||||||
|
14:30:53.419 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:54.030 TX keepalive 004 00 00 00 00 00 5A
|
||||||
|
14:30:54.030 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:54.640 TX keepalive 005 00 00 00 00 00 5A
|
||||||
|
14:30:54.640 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:55.278 TX keepalive 006 00 00 00 00 00 5A
|
||||||
|
14:30:55.278 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:55.888 TX keepalive 007 00 00 00 00 00 5A
|
||||||
|
14:30:55.888 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:56.499 TX keepalive 008 00 00 00 00 00 5A
|
||||||
|
14:30:56.499 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:57.137 TX keepalive 009 00 00 00 00 00 5A
|
||||||
|
14:30:57.137 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:57.748 TX keepalive 010 00 00 00 00 00 5A
|
||||||
|
14:30:57.748 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:58.360 TX keepalive 011 00 00 00 00 00 5A
|
||||||
|
14:30:58.360 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:58.969 TX keepalive 012 00 00 00 00 00 5A
|
||||||
|
14:30:58.969 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:30:59.579 TX keepalive 013 00 00 00 00 00 5A
|
||||||
|
14:30:59.579 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:00.191 TX keepalive 014 00 00 00 00 00 5A
|
||||||
|
14:31:00.191 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:00.799 TX keepalive 015 00 00 00 00 00 5A
|
||||||
|
14:31:00.799 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:01.406 TX keepalive 016 00 00 00 00 00 5A
|
||||||
|
14:31:01.406 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:02.015 TX keepalive 017 00 00 00 00 00 5A
|
||||||
|
14:31:02.015 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:02.627 TX keepalive 018 00 00 00 00 00 5A
|
||||||
|
14:31:02.627 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:03.236 TX keepalive 019 00 00 00 00 00 5A
|
||||||
|
14:31:03.236 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:03.845 TX keepalive 020 00 00 00 00 00 5A
|
||||||
|
14:31:03.845 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:04.455 TX keepalive 021 00 00 00 00 00 5A
|
||||||
|
14:31:04.455 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:05.064 TX keepalive 022 00 00 00 00 00 5A
|
||||||
|
14:31:05.064 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:05.674 TX keepalive 023 00 00 00 00 00 5A
|
||||||
|
14:31:05.674 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:06.284 TX keepalive 024 00 00 00 00 00 5A
|
||||||
|
14:31:06.284 KEEPALIVE RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:31:06.894 TX keepalive 025 00 00 00 00 00 5A
|
||||||
|
14:31:06.894 KEEPALIVE RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:31:13.497 SCREEN CONNECT NOT ACT
|
||||||
327
captures/rcp-post-discovery-b5-candidates-00-1f.txt
Normal file
327
captures/rcp-post-discovery-b5-candidates-00-1f.txt
Normal file
@@ -0,0 +1,327 @@
|
|||||||
|
Post-discovery sweep: primer 00 00 00 00 80 DA, query 00 00 B5 00 80 6F, 32 candidates on COM5 at 38400 8N1
|
||||||
|
CANDIDATE 0x00 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
13:57:37.331 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
13:57:37.331 PRIMER RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
13:57:38.156 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
13:57:38.156 QUERY RX ANOMALY 30 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
13:57:38.156 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
13:57:39.376 TX candidate 0x00 frame 006 00 00 00 00 80 DA
|
||||||
|
13:57:39.376 CANDIDATE 0x00 RX ANOMALY 53 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 1 expected 00
|
||||||
|
13:57:39.376 CANDIDATE 0x00 RX raw 07 80 6D 20 D8 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 00 00 00 00 80 DA 00 00 00 00 80 DA
|
||||||
|
13:57:49.402 SCREEN candidate=0x00 CONNECT NOT ACT
|
||||||
|
Completed candidate 1/32
|
||||||
|
CANDIDATE 0x01 BASELINE heartbeat-compatible RX: 29 bytes, offset 1, 4 frames + 5 bytes
|
||||||
|
13:58:15.301 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
13:58:15.301 PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
13:58:16.124 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
13:58:16.124 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
13:58:16.124 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
13:58:17.340 TX candidate 0x01 frame 006 00 00 01 00 80 DB
|
||||||
|
13:58:17.340 CANDIDATE 0x01 RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
13:59:28.114 SCREEN candidate=0x01 CONNECT NOT ACTCONNECT NOT ACT
|
||||||
|
Completed candidate 2/32
|
||||||
|
CANDIDATE 0x02 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
13:59:38.147 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
13:59:38.147 PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
13:59:38.974 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
13:59:38.974 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
13:59:38.974 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
13:59:40.193 TX candidate 0x02 frame 006 00 00 02 00 80 D8
|
||||||
|
13:59:40.193 CANDIDATE 0x02 RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:00:09.105 SCREEN candidate=0x02 CONNECT NOT ACT
|
||||||
|
Completed candidate 3/32
|
||||||
|
CANDIDATE 0x03 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:00:17.993 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:00:17.993 PRIMER RX ANOMALY 12 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 0 expected 00
|
||||||
|
14:00:17.993 PRIMER RX raw 07 80 40 40 30 ED 00 00 00 00 80 DA
|
||||||
|
14:00:18.816 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:00:18.816 QUERY RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
14:00:20.035 TX candidate 0x03 frame 006 00 00 03 00 80 D9
|
||||||
|
14:00:20.035 CANDIDATE 0x03 RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:00:29.112 SCREEN candidate=0x03 CONNECT NOT ACT
|
||||||
|
Completed candidate 4/32
|
||||||
|
CANDIDATE 0x04 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:00:38.847 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:00:38.847 PRIMER RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:00:39.667 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:00:39.667 QUERY RX ANOMALY 30 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:00:39.667 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:00:40.858 TX candidate 0x04 frame 006 00 00 04 00 80 DE
|
||||||
|
14:00:40.858 CANDIDATE 0x04 RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:00:52.036 SCREEN candidate=0x04 CONNECT NOT ACT
|
||||||
|
Completed candidate 5/32
|
||||||
|
CANDIDATE 0x05 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
14:01:00.767 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:01:00.767 PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:01:01.585 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:01:01.585 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:01:01.585 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:01:02.809 TX candidate 0x05 frame 006 00 00 05 00 80 DF
|
||||||
|
14:01:02.809 CANDIDATE 0x05 RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:01:21.665 SCREEN candidate=0x05 CONNECT NOT ACT
|
||||||
|
Completed candidate 6/32
|
||||||
|
CANDIDATE 0x06 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
14:01:34.465 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:01:34.465 PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:01:35.290 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:01:35.290 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:01:35.290 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:01:36.508 TX candidate 0x06 frame 006 00 00 06 00 80 DC
|
||||||
|
14:01:36.508 CANDIDATE 0x06 RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:01:59.113 SCREEN candidate=0x06 CONNECT NOT ACT
|
||||||
|
Completed candidate 7/32
|
||||||
|
CANDIDATE 0x07 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
14:02:09.750 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:02:09.750 PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:02:10.576 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:02:10.576 QUERY RX ANOMALY 30 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:02:10.576 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:02:11.793 TX candidate 0x07 frame 006 00 00 07 00 80 DD
|
||||||
|
14:02:11.793 CANDIDATE 0x07 RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:02:18.645 SCREEN candidate=0x07 CONNECT NOT ACT
|
||||||
|
Completed candidate 8/32
|
||||||
|
CANDIDATE 0x08 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:02:47.194 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:02:47.194 PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:02:48.017 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:02:48.017 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:02:48.017 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:02:49.236 TX candidate 0x08 frame 006 00 00 08 00 80 D2
|
||||||
|
14:02:49.236 CANDIDATE 0x08 RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:02:57.276 SCREEN candidate=0x08 CONNECT NOT ACT
|
||||||
|
Completed candidate 9/32
|
||||||
|
CANDIDATE 0x09 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:03:09.529 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:03:09.529 PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:03:10.353 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:03:10.353 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:03:10.353 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:03:11.571 TX candidate 0x09 frame 006 00 00 09 00 80 D3
|
||||||
|
14:03:11.571 CANDIDATE 0x09 RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:03:22.406 SCREEN candidate=0x09 CONNECT NOT ACT
|
||||||
|
Completed candidate 10/32
|
||||||
|
CANDIDATE 0x0A BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:03:32.214 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:03:32.214 PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:03:33.038 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:03:33.038 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:03:33.038 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:03:34.261 TX candidate 0x0A frame 006 00 00 0A 00 80 D0
|
||||||
|
14:03:34.261 CANDIDATE 0x0A RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:04:31.913 SCREEN candidate=0x0A CONNECT NOT ACT
|
||||||
|
Completed candidate 11/32
|
||||||
|
CANDIDATE 0x0B BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:04:41.814 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:04:41.814 PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:04:42.641 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:04:42.641 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:04:42.641 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:04:43.863 TX candidate 0x0B frame 006 00 00 0B 00 80 D1
|
||||||
|
14:04:43.863 CANDIDATE 0x0B RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:04:51.132 SCREEN candidate=0x0B CONNECT NOT ACT
|
||||||
|
Completed candidate 12/32
|
||||||
|
CANDIDATE 0x0C BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
14:05:01.364 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:05:01.364 PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:05:02.183 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:05:02.183 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:05:02.183 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:05:03.401 TX candidate 0x0C frame 006 00 00 0C 00 80 D6
|
||||||
|
14:05:03.401 CANDIDATE 0x0C RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:05:11.289 SCREEN candidate=0x0C CONNECT NOT ACT
|
||||||
|
Completed candidate 13/32
|
||||||
|
CANDIDATE 0x0D BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:05:19.111 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:05:19.111 PRIMER RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:05:19.936 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:05:19.936 QUERY RX ANOMALY 30 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:05:19.936 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:05:21.126 TX candidate 0x0D frame 006 00 00 0D 00 80 D7
|
||||||
|
14:05:21.126 CANDIDATE 0x0D RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:05:31.382 SCREEN candidate=0x0D CONNECT NOT ACT
|
||||||
|
Completed candidate 14/32
|
||||||
|
CANDIDATE 0x0E BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
14:05:44.762 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:05:44.762 PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:05:45.588 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:05:45.588 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:05:45.588 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:05:46.806 TX candidate 0x0E frame 006 00 00 0E 00 80 D4
|
||||||
|
14:05:46.806 CANDIDATE 0x0E RX ANOMALY 25 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 0 expected 00
|
||||||
|
14:05:46.806 CANDIDATE 0x0E RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 00 00 00 00 80 DA 00
|
||||||
|
14:05:54.627 SCREEN candidate=0x0E CONNECT NOT ACT
|
||||||
|
Completed candidate 15/32
|
||||||
|
CANDIDATE 0x0F BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:06:05.428 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:06:05.428 PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:06:06.255 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:06:06.255 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:06:06.255 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:06:07.477 TX candidate 0x0F frame 006 00 00 0F 00 80 D5
|
||||||
|
14:06:07.477 CANDIDATE 0x0F RX ANOMALY 30 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 0 expected 00
|
||||||
|
14:06:07.477 CANDIDATE 0x0F RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 00 00 00 00 80 DA 00 00 00 00 80 DA
|
||||||
|
14:06:17.323 SCREEN candidate=0x0F CONNECT NOT ACT
|
||||||
|
Completed candidate 16/32
|
||||||
|
CANDIDATE 0x10 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:06:29.790 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:06:29.790 PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:06:30.613 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:06:30.613 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:06:30.613 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:06:31.834 TX candidate 0x10 frame 006 00 00 10 00 80 CA
|
||||||
|
14:06:31.834 CANDIDATE 0x10 RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:06:39.289 SCREEN candidate=0x10 CONNECT NOT ACT
|
||||||
|
Completed candidate 17/32
|
||||||
|
CANDIDATE 0x11 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:06:51.468 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:06:51.468 PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:06:52.289 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:06:52.289 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:06:52.289 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:06:53.511 TX candidate 0x11 frame 006 00 00 11 00 80 CB
|
||||||
|
14:06:53.511 CANDIDATE 0x11 RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:07:17.742 SCREEN candidate=0x11 CONNECT NOT ACT
|
||||||
|
Completed candidate 18/32
|
||||||
|
CANDIDATE 0x12 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:07:34.256 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:07:34.256 PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:07:35.077 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:07:35.077 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:07:35.077 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:07:36.296 TX candidate 0x12 frame 006 00 00 12 00 80 C8
|
||||||
|
14:07:36.296 CANDIDATE 0x12 RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:08:00.196 SCREEN candidate=0x12 CONNECT NOT ACT
|
||||||
|
Completed candidate 19/32
|
||||||
|
CANDIDATE 0x13 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:08:57.563 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:08:57.563 PRIMER RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:08:58.386 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:08:58.386 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:08:58.386 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:08:59.604 TX candidate 0x13 frame 006 00 00 13 00 80 C9
|
||||||
|
14:08:59.604 CANDIDATE 0x13 RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:09:08.311 SCREEN candidate=0x13 CONNECTION NOT ACT
|
||||||
|
Completed candidate 20/32
|
||||||
|
CANDIDATE 0x14 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:09:36.745 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:09:36.745 PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:09:37.571 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:09:37.571 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:09:37.571 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:09:38.789 TX candidate 0x14 frame 006 00 00 14 00 80 CE
|
||||||
|
14:09:38.789 CANDIDATE 0x14 RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:09:46.337 SCREEN candidate=0x14 CONNECT NOT ACT
|
||||||
|
Completed candidate 21/32
|
||||||
|
CANDIDATE 0x15 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:10:00.865 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:10:00.865 PRIMER RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:10:01.689 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:10:01.689 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:10:01.689 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:10:02.907 TX candidate 0x15 frame 006 00 00 15 00 80 CF
|
||||||
|
14:10:02.907 CANDIDATE 0x15 RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:10:11.428 SCREEN candidate=0x15 CONNECT NOT ACT
|
||||||
|
Completed candidate 22/32
|
||||||
|
CANDIDATE 0x16 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:10:23.417 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:10:23.417 PRIMER RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:10:24.240 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:10:24.240 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:10:24.240 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:10:25.460 TX candidate 0x16 frame 006 00 00 16 00 80 CC
|
||||||
|
14:10:25.460 CANDIDATE 0x16 RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:10:38.357 SCREEN candidate=0x16 CONNECT NOT ACT
|
||||||
|
Completed candidate 23/32
|
||||||
|
CANDIDATE 0x17 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
14:10:48.678 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:10:48.678 PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes
|
||||||
|
14:10:49.500 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:10:49.500 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:10:49.500 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:10:50.690 TX candidate 0x17 frame 006 00 00 17 00 80 CD
|
||||||
|
14:10:50.690 CANDIDATE 0x17 RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:10:57.530 SCREEN candidate=0x17 CONNECT NOT ACT
|
||||||
|
Completed candidate 24/32
|
||||||
|
CANDIDATE 0x18 BASELINE heartbeat-compatible RX: 29 bytes, offset 1, 4 frames + 5 bytes
|
||||||
|
14:11:06.439 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:11:06.439 PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:11:07.261 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:11:07.261 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:11:07.261 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:11:08.480 TX candidate 0x18 frame 006 00 00 18 00 80 C2
|
||||||
|
14:11:08.480 CANDIDATE 0x18 RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:11:16.993 SCREEN candidate=0x18 CONNECT NOT ACT
|
||||||
|
Completed candidate 25/32
|
||||||
|
CANDIDATE 0x19 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:11:27.321 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:11:27.321 PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:11:28.144 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:11:28.144 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:11:28.144 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:11:29.365 TX candidate 0x19 frame 006 00 00 19 00 80 C3
|
||||||
|
14:11:29.365 CANDIDATE 0x19 RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:11:36.120 SCREEN candidate=0x19 CONNECT NOT ACT
|
||||||
|
Completed candidate 26/32
|
||||||
|
CANDIDATE 0x1A BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:11:46.807 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:11:46.807 PRIMER RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:11:47.631 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:11:47.631 QUERY RX ANOMALY 30 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:11:47.631 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:11:48.848 TX candidate 0x1A frame 006 00 00 1A 00 80 C0
|
||||||
|
14:11:48.848 CANDIDATE 0x1A RX ANOMALY 54 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 0 expected 00
|
||||||
|
14:11:48.848 CANDIDATE 0x1A RX raw 07 80 6D 20 D8 48 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 00 00 00 00 80 DA 00 00 00 00 80 DA
|
||||||
|
14:12:00.487 SCREEN candidate=0x1A CONNECT NOT ACT
|
||||||
|
Completed candidate 27/32
|
||||||
|
CANDIDATE 0x1B BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
14:12:11.309 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:12:11.309 PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:12:12.132 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:12:12.132 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:12:12.132 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:12:13.352 TX candidate 0x1B frame 006 00 00 1B 00 80 C1
|
||||||
|
14:12:13.352 CANDIDATE 0x1B RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:12:25.370 SCREEN candidate=0x1B CONNECT NOT ACT
|
||||||
|
Completed candidate 28/32
|
||||||
|
CANDIDATE 0x1C BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:12:36.906 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:12:36.906 PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:12:37.710 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:12:37.710 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:12:37.710 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:12:38.928 TX candidate 0x1C frame 006 00 00 1C 00 80 C6
|
||||||
|
14:12:38.928 CANDIDATE 0x1C RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:12:46.949 SCREEN candidate=0x1C CONNECT NOT ACT
|
||||||
|
Completed candidate 29/32
|
||||||
|
CANDIDATE 0x1D BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:13:00.022 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:13:00.022 PRIMER RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:13:00.846 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:13:00.846 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:13:00.846 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:13:02.037 TX candidate 0x1D frame 006 00 00 1D 00 80 C7
|
||||||
|
14:13:02.037 CANDIDATE 0x1D RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes
|
||||||
|
14:13:21.735 SCREEN candidate=0x1D CONNECT NOT ACT
|
||||||
|
Completed candidate 30/32
|
||||||
|
CANDIDATE 0x1E BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:13:29.692 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:13:29.692 PRIMER RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:13:30.514 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:13:30.514 QUERY RX ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:13:30.514 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:13:31.732 TX candidate 0x1E frame 006 00 00 1E 00 80 C4
|
||||||
|
14:13:31.732 CANDIDATE 0x1E RX ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 0 expected 00
|
||||||
|
14:13:31.732 CANDIDATE 0x1E RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 00 00 00 00 80 DA
|
||||||
|
14:13:37.600 SCREEN candidate=0x1E CONNECT NOT ACT
|
||||||
|
Completed candidate 31/32
|
||||||
|
CANDIDATE 0x1F BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
14:13:45.189 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:13:45.189 PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:13:46.012 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:13:46.012 QUERY RX ANOMALY 30 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:13:46.012 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:13:47.229 TX candidate 0x1F frame 006 00 00 1F 00 80 C5
|
||||||
|
14:13:47.229 CANDIDATE 0x1F RX ANOMALY 30 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 0 expected 00
|
||||||
|
14:13:47.229 CANDIDATE 0x1F RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 00 00 00 00 80 DA 00 00 00 00 80 DA
|
||||||
|
14:13:52.562 SCREEN candidate=0x1F CONNECT NOT ACT
|
||||||
|
Completed candidate 32/32
|
||||||
12
captures/rcp-post-discovery-b5-candidates-20-3f.txt
Normal file
12
captures/rcp-post-discovery-b5-candidates-20-3f.txt
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
Post-discovery sweep: primer 00 00 00 00 80 DA, query 00 00 B5 00 80 6F, 32 candidates on COM5 at 38400 8N1
|
||||||
|
CANDIDATE 0x20 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
14:18:40.052 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:18:40.052 PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:18:40.878 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:18:40.878 QUERY RX ANOMALY 48 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:18:40.878 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:18:42.894 TX candidate 0x20 frame 006 00 00 20 00 80 FA
|
||||||
|
14:18:42.894 CANDIDATE 0x20 RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:18:54.471 SCREEN candidate=0x20 CONNECT NOT ACT
|
||||||
|
Completed candidate 1/32
|
||||||
|
Stopped.
|
||||||
81
captures/rcp-post-ladder-low-sample.txt
Normal file
81
captures/rcp-post-ladder-low-sample.txt
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
Post-discovery sweep: primer 00 00 00 00 80 DA, query 00 00 B5 00 80 6F, 8 candidates on COM5 at 38400 8N1
|
||||||
|
CANDIDATE 0x00 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:23:38.585 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:23:38.585 PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:23:39.408 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:23:39.408 QUERY RX ANOMALY 54 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:23:39.408 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:23:41.426 TX candidate 0x00 frame 006 00 00 00 00 80 DA
|
||||||
|
14:23:41.426 CANDIDATE 0x00 RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes
|
||||||
|
14:23:49.184 SCREEN candidate=0x00 CONNECT NOT ACT
|
||||||
|
Completed candidate 1/8
|
||||||
|
CANDIDATE 0x01 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:23:58.214 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:23:58.214 PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:23:59.034 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:23:59.034 QUERY RX ANOMALY 54 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:23:59.034 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:24:01.044 TX candidate 0x01 frame 006 00 00 01 00 80 DB
|
||||||
|
14:24:01.044 CANDIDATE 0x01 RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes
|
||||||
|
14:24:05.765 SCREEN candidate=0x01 CONNECT NOT ACT
|
||||||
|
Completed candidate 2/8
|
||||||
|
CANDIDATE 0x03 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:24:16.412 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:24:16.412 PRIMER RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:24:17.236 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:24:17.236 QUERY RX ANOMALY 54 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:24:17.236 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:24:19.251 TX candidate 0x03 frame 006 00 00 03 00 80 D9
|
||||||
|
14:24:19.251 CANDIDATE 0x03 RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes
|
||||||
|
14:24:25.861 SCREEN candidate=0x03 CONNECT NOT ACT
|
||||||
|
Completed candidate 3/8
|
||||||
|
CANDIDATE 0x07 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:24:34.363 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:24:34.363 PRIMER RX heartbeat-compatible RX: 19 bytes, offset 0, 3 frames + 1 bytes
|
||||||
|
14:24:35.186 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:24:35.186 QUERY RX ANOMALY 53 RX bytes; first mismatch at byte 0: got 00, heartbeat offset 4 expected 80
|
||||||
|
14:24:35.186 QUERY RX raw 00 00 00 80 DA 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:24:37.196 TX candidate 0x07 frame 006 00 00 07 00 80 DD
|
||||||
|
14:24:37.196 CANDIDATE 0x07 RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes
|
||||||
|
14:24:43.994 SCREEN candidate=0x07 CONNECT NOT ACT
|
||||||
|
Completed candidate 4/8
|
||||||
|
CANDIDATE 0x0F BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:24:54.811 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:24:54.811 PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:24:55.632 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:24:55.632 QUERY RX ANOMALY 54 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:24:55.632 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:24:57.640 TX candidate 0x0F frame 006 00 00 0F 00 80 D5
|
||||||
|
14:24:57.640 CANDIDATE 0x0F RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:25:05.820 SCREEN candidate=0x0F CONNECT NOT ACT
|
||||||
|
Completed candidate 5/8
|
||||||
|
CANDIDATE 0x10 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
14:25:15.731 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:25:15.731 PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:25:16.559 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:25:16.559 QUERY RX ANOMALY 48 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:25:16.559 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:25:18.572 TX candidate 0x10 frame 006 00 00 10 00 80 CA
|
||||||
|
14:25:18.572 CANDIDATE 0x10 RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes
|
||||||
|
14:25:23.775 SCREEN candidate=0x10 CONNECT NOT ACT
|
||||||
|
Completed candidate 6/8
|
||||||
|
CANDIDATE 0x1B BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:25:32.116 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:25:32.116 PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:25:32.939 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:25:32.939 QUERY RX ANOMALY 54 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:25:32.939 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:25:34.954 TX candidate 0x1B frame 006 00 00 1B 00 80 C1
|
||||||
|
14:25:34.954 CANDIDATE 0x1B RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes
|
||||||
|
14:25:46.206 SCREEN candidate=0x1B CONNECT NOT ACT
|
||||||
|
Completed candidate 7/8
|
||||||
|
CANDIDATE 0x1F BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:25:58.538 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:25:58.538 PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||||
|
14:25:59.361 TX query 0xB5 frame 006 00 00 B5 00 80 6F
|
||||||
|
14:25:59.361 QUERY RX ANOMALY 54 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:25:59.361 QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
14:26:01.377 TX candidate 0x1F frame 006 00 00 1F 00 80 C5
|
||||||
|
14:26:01.377 CANDIDATE 0x1F RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:26:14.985 SCREEN candidate=0x1F CONNECT NOT ACT
|
||||||
|
Completed candidate 8/8
|
||||||
98
captures/rcp-primer-sweep-a0-af.txt
Normal file
98
captures/rcp-primer-sweep-a0-af.txt
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
Primer/candidate sweep: primer 00 00 00 00 80 DA, 16 candidates on COM5 at 38400 8N1
|
||||||
|
CANDIDATE 0xA0 BASELINE heartbeat-compatible RX: 29 bytes, offset 1, 4 frames + 5 bytes
|
||||||
|
14:48:15.694 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:48:16.303 TX candidate 0xA0 frame 006 00 00 A0 00 80 7A
|
||||||
|
14:48:16.303 CANDIDATE 0xA0 ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:48:16.303 CANDIDATE 0xA0 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 07 80 68 40 30 C5 07 80 68 40 30 C5 07 80 68 40 30 C5
|
||||||
|
Completed candidate 1/16
|
||||||
|
CANDIDATE 0xA1 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:48:26.678 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:48:27.286 TX candidate 0xA1 frame 006 00 00 A1 00 80 7B
|
||||||
|
14:48:27.286 CANDIDATE 0xA1 ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:48:27.286 CANDIDATE 0xA1 raw 07 80 68 20 D8 4D 07 80 68 20 D8 4D 07 80 68 20 D8 4D 07 80 68 20 D8 4D 07 80 68 20 D8 4D 07 80 68 20 D8 4D 07 80 68 20 D8 4D
|
||||||
|
Completed candidate 2/16
|
||||||
|
CANDIDATE 0xA2 BASELINE heartbeat-compatible RX: 25 bytes, offset 0, 4 frames + 1 bytes
|
||||||
|
14:48:39.570 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:48:40.180 TX candidate 0xA2 frame 006 00 00 A2 00 80 78
|
||||||
|
14:48:40.180 CANDIDATE 0xA2 ANOMALY 30 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 0 expected 00
|
||||||
|
14:48:40.180 CANDIDATE 0xA2 raw 07 80 34 10 0C F5 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA
|
||||||
|
Completed candidate 3/16
|
||||||
|
CANDIDATE 0xA3 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
14:48:53.676 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:48:54.289 TX candidate 0xA3 frame 006 00 00 A3 00 80 79
|
||||||
|
14:48:54.289 CANDIDATE 0xA3 ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:48:54.289 CANDIDATE 0xA3 raw 07 80 34 10 2C D5 07 80 34 10 2C D5 07 80 34 10 2C D5 07 80 34 10 2C D5 07 80 34 10 2C D5 07 80 34 10 2C D5 07 80 34 10 2C D5
|
||||||
|
Completed candidate 4/16
|
||||||
|
CANDIDATE 0xA4 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
14:49:09.583 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:49:10.192 TX candidate 0xA4 frame 006 00 00 A4 00 80 7E
|
||||||
|
14:49:10.192 CANDIDATE 0xA4 ANOMALY 30 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 0 expected 00
|
||||||
|
14:49:10.192 CANDIDATE 0xA4 raw 07 80 69 40 30 C4 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA
|
||||||
|
Completed candidate 5/16
|
||||||
|
CANDIDATE 0xA5 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:49:20.586 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:49:21.195 TX candidate 0xA5 frame 006 00 00 A5 00 80 7F
|
||||||
|
14:49:21.195 CANDIDATE 0xA5 ANOMALY 30 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 0 expected 00
|
||||||
|
14:49:21.195 CANDIDATE 0xA5 raw 07 80 69 20 D8 4C 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA
|
||||||
|
Completed candidate 6/16
|
||||||
|
CANDIDATE 0xA6 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
14:49:31.236 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:49:31.848 TX candidate 0xA6 frame 006 00 00 A6 00 80 7C
|
||||||
|
14:49:31.848 CANDIDATE 0xA6 ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:49:31.848 CANDIDATE 0xA6 raw 07 80 1A 08 C6 09 07 80 1A 08 C6 09 07 80 1A 08 C6 09 07 80 1A 08 C6 09 07 80 1A 08 C6 09 07 80 1A 08 C6 09 07 80 1A 08 C6 09
|
||||||
|
Completed candidate 7/16
|
||||||
|
CANDIDATE 0xA7 BASELINE heartbeat-compatible RX: 29 bytes, offset 1, 4 frames + 5 bytes
|
||||||
|
14:49:44.172 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:49:44.781 TX candidate 0xA7 frame 006 00 00 A7 00 80 7D
|
||||||
|
14:49:44.781 CANDIDATE 0xA7 ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:49:44.781 CANDIDATE 0xA7 raw 07 80 1A 08 D6 19 07 80 1A 08 D6 19 07 80 1A 08 D6 19 07 80 1A 08 D6 19 07 80 1A 08 D6 19 07 80 1A 08 D6 19 07 80 1A 08 D6 19
|
||||||
|
Completed candidate 8/16
|
||||||
|
CANDIDATE 0xA8 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:49:55.419 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:49:56.029 TX candidate 0xA8 frame 006 00 00 A8 00 80 72
|
||||||
|
14:49:56.029 CANDIDATE 0xA8 ANOMALY 30 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 0 expected 00
|
||||||
|
14:49:56.029 CANDIDATE 0xA8 raw 07 80 6A 40 30 C7 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA
|
||||||
|
Completed candidate 9/16
|
||||||
|
CANDIDATE 0xA9 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:50:08.463 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:50:09.075 TX candidate 0xA9 frame 006 00 00 A9 00 80 73
|
||||||
|
14:50:09.075 CANDIDATE 0xA9 ANOMALY 47 RX bytes; first mismatch at byte 0: got 00, heartbeat offset 4 expected 80
|
||||||
|
14:50:09.075 CANDIDATE 0xA9 raw 00 00 00 80 DA 07 80 6A 20 D8 4F 07 80 6A 20 D8 4F 07 80 6A 20 D8 4F 07 80 6A 20 D8 4F 07 80 6A 20 D8 4F 07 80 6A 20 D8 4F 07 80 6A 20 D8 4F
|
||||||
|
Completed candidate 10/16
|
||||||
|
CANDIDATE 0xAA BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:50:19.356 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:50:19.965 TX candidate 0xAA frame 006 00 00 AA 00 80 70
|
||||||
|
14:50:19.965 CANDIDATE 0xAA ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:50:19.965 CANDIDATE 0xAA raw 07 80 35 10 0C F4 07 80 35 10 0C F4 07 80 35 10 0C F4 07 80 35 10 0C F4 07 80 35 10 0C F4 07 80 35 10 0C F4 07 80 35 10 0C F4
|
||||||
|
Completed candidate 11/16
|
||||||
|
CANDIDATE 0xAB BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:50:33.133 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:50:33.743 TX candidate 0xAB frame 006 00 00 AB 00 80 71
|
||||||
|
14:50:33.743 CANDIDATE 0xAB ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:50:33.743 CANDIDATE 0xAB raw 07 80 35 10 2C D4 07 80 35 10 2C D4 07 80 35 10 2C D4 07 80 35 10 2C D4 07 80 35 10 2C D4 07 80 35 10 2C D4 07 80 35 10 2C D4
|
||||||
|
Completed candidate 12/16
|
||||||
|
CANDIDATE 0xAC BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:50:49.511 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:50:50.120 TX candidate 0xAC frame 006 00 00 AC 00 80 76
|
||||||
|
14:50:50.120 CANDIDATE 0xAC ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:50:50.120 CANDIDATE 0xAC raw 07 80 6B 40 30 C6 07 80 6B 40 30 C6 07 80 6B 40 30 C6 07 80 6B 40 30 C6 07 80 6B 40 30 C6 07 80 6B 40 30 C6 07 80 6B 40 30 C6
|
||||||
|
Completed candidate 13/16
|
||||||
|
CANDIDATE 0xAD BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:51:03.030 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:51:03.640 TX candidate 0xAD frame 006 00 00 AD 00 80 77
|
||||||
|
14:51:03.640 CANDIDATE 0xAD ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:51:03.640 CANDIDATE 0xAD raw 07 80 6B 20 D8 4E 07 80 6B 20 D8 4E 07 80 6B 20 D8 4E 07 80 6B 20 D8 4E 07 80 6B 20 D8 4E 07 80 6B 20 D8 4E 07 80 6B 20 D8 4E
|
||||||
|
Completed candidate 14/16
|
||||||
|
CANDIDATE 0xAE BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:51:32.943 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:51:33.552 TX candidate 0xAE frame 006 00 00 AE 00 80 74
|
||||||
|
14:51:33.552 CANDIDATE 0xAE ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:51:33.552 CANDIDATE 0xAE raw 07 80 0D 04 A3 77 07 80 0D 04 A3 77 07 80 0D 04 A3 77 07 80 0D 04 A3 77 07 80 0D 04 A3 77 07 80 0D 04 A3 77 07 80 0D 04 A3 77
|
||||||
|
Completed candidate 15/16
|
||||||
|
CANDIDATE 0xAF BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
14:51:51.382 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:51:51.991 TX candidate 0xAF frame 006 00 00 AF 00 80 75
|
||||||
|
14:51:51.991 CANDIDATE 0xAF ANOMALY 41 RX bytes; first mismatch at byte 0: got 00, heartbeat offset 4 expected 80
|
||||||
|
14:51:51.991 CANDIDATE 0xAF raw 00 00 00 80 DA 07 80 0D 04 AB 7F 07 80 0D 04 AB 7F 07 80 0D 04 AB 7F 07 80 0D 04 AB 7F 07 80 0D 04 AB 7F 07 80 0D 04 AB 7F
|
||||||
|
Completed candidate 16/16
|
||||||
|
Anomalies: 16
|
||||||
66
captures/rcp-primer-sweep-b1-bf.tx
Normal file
66
captures/rcp-primer-sweep-b1-bf.tx
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
Primer/candidate sweep: primer 00 00 00 00 80 DA, 11 candidates on COM5 at 38400 8N1
|
||||||
|
CANDIDATE 0xB1 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:45:48.741 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:45:49.351 TX candidate 0xB1 frame 006 00 00 B1 00 80 6B
|
||||||
|
14:45:49.351 CANDIDATE 0xB1 ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:45:49.351 CANDIDATE 0xB1 raw 07 80 6C 20 D8 49 07 80 6C 20 D8 49 07 80 6C 20 D8 49 07 80 6C 20 D8 49 07 80 6C 20 D8 49 07 80 6C 20 D8 49 07 80 6C 20 D8 49
|
||||||
|
Completed candidate 1/11
|
||||||
|
CANDIDATE 0xB6 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:46:00.508 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:46:01.117 TX candidate 0xB6 frame 006 00 00 B6 00 80 6C
|
||||||
|
14:46:01.117 CANDIDATE 0xB6 ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:46:01.117 CANDIDATE 0xB6 raw 07 80 1B 08 C6 08 07 80 1B 08 C6 08 07 80 1B 08 C6 08 07 80 1B 08 C6 08 07 80 1B 08 C6 08 07 80 1B 08 C6 08 07 80 1B 08 C6 08
|
||||||
|
Completed candidate 2/11
|
||||||
|
CANDIDATE 0xB7 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:46:14.984 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:46:15.595 TX candidate 0xB7 frame 006 00 00 B7 00 80 6D
|
||||||
|
14:46:15.595 CANDIDATE 0xB7 ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:46:15.595 CANDIDATE 0xB7 raw 07 80 1B 08 F6 38 07 80 1B 08 F6 38 07 80 1B 08 F6 38 07 80 1B 08 F6 38 07 80 1B 08 F6 38 07 80 1B 08 F6 38 07 80 1B 08 F6 38
|
||||||
|
Completed candidate 3/11
|
||||||
|
CANDIDATE 0xB8 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:46:26.859 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:46:27.470 TX candidate 0xB8 frame 006 00 00 B8 00 80 62
|
||||||
|
14:46:27.470 CANDIDATE 0xB8 ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:46:27.470 CANDIDATE 0xB8 raw 07 80 EE 40 30 43 07 80 EE 40 30 43 07 80 EE 40 30 43 07 80 EE 40 30 43 07 80 EE 40 30 43 07 80 EE 40 30 43 07 80 EE 40 30 43
|
||||||
|
Completed candidate 4/11
|
||||||
|
CANDIDATE 0xB9 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:46:39.937 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:46:40.546 TX candidate 0xB9 frame 006 00 00 B9 00 80 63
|
||||||
|
14:46:40.546 CANDIDATE 0xB9 ANOMALY 41 RX bytes; first mismatch at byte 0: got 00, heartbeat offset 4 expected 80
|
||||||
|
14:46:40.546 CANDIDATE 0xB9 raw 00 00 00 80 DA 07 80 6E 20 D8 4B 07 80 6E 20 D8 4B 07 80 6E 20 D8 4B 07 80 6E 20 D8 4B 07 80 6E 20 D8 4B 07 80 6E 20 D8 4B
|
||||||
|
Completed candidate 5/11
|
||||||
|
CANDIDATE 0xBA BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:46:51.553 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:46:52.164 TX candidate 0xBA frame 006 00 00 BA 00 80 60
|
||||||
|
14:46:52.164 CANDIDATE 0xBA ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:46:52.164 CANDIDATE 0xBA raw 07 80 37 10 0C F6 07 80 37 10 0C F6 07 80 37 10 0C F6 07 80 37 10 0C F6 07 80 37 10 0C F6 07 80 37 10 0C F6 07 80 37 10 0C F6
|
||||||
|
Completed candidate 6/11
|
||||||
|
CANDIDATE 0xBB BASELINE heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:47:03.106 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:47:03.718 TX candidate 0xBB frame 006 00 00 BB 00 80 61
|
||||||
|
14:47:03.718 CANDIDATE 0xBB ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:47:03.718 CANDIDATE 0xBB raw 07 80 37 10 2C D6 07 80 37 10 2C D6 07 80 37 10 2C D6 07 80 37 10 2C D6 07 80 37 10 2C D6 07 80 37 10 2C D6 07 80 37 10 2C D6
|
||||||
|
Completed candidate 7/11
|
||||||
|
CANDIDATE 0xBC BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:47:13.483 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:47:14.092 TX candidate 0xBC frame 006 00 00 BC 00 80 66
|
||||||
|
14:47:14.092 CANDIDATE 0xBC ANOMALY 30 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 0 expected 00
|
||||||
|
14:47:14.092 CANDIDATE 0xBC raw 07 80 EF 40 30 42 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA
|
||||||
|
Completed candidate 8/11
|
||||||
|
CANDIDATE 0xBD BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:47:27.366 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:47:27.976 TX candidate 0xBD frame 006 00 00 BD 00 80 67
|
||||||
|
14:47:27.976 CANDIDATE 0xBD ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:47:27.976 CANDIDATE 0xBD raw 07 80 6F 20 D8 4A 07 80 6F 20 D8 4A 07 80 6F 20 D8 4A 07 80 6F 20 D8 4A 07 80 6F 20 D8 4A 07 80 6F 20 D8 4A 07 80 6F 20 D8 4A
|
||||||
|
Completed candidate 9/11
|
||||||
|
CANDIDATE 0xBE BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:47:39.896 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:47:40.503 TX candidate 0xBE frame 006 00 00 BE 00 80 64
|
||||||
|
14:47:40.503 CANDIDATE 0xBE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
Completed candidate 10/11
|
||||||
|
CANDIDATE 0xBF BASELINE heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||||
|
14:47:50.628 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:47:51.238 TX candidate 0xBF frame 006 00 00 BF 00 80 65
|
||||||
|
14:47:51.238 CANDIDATE 0xBF heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes
|
||||||
|
Completed candidate 11/11
|
||||||
|
Anomalies: 9
|
||||||
97
captures/rcp-primer-sweep-c0-cf.txt
Normal file
97
captures/rcp-primer-sweep-c0-cf.txt
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
Primer/candidate sweep: primer 00 00 00 00 80 DA, 16 candidates on COM5 at 38400 8N1
|
||||||
|
CANDIDATE 0xC0 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:52:21.270 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:52:21.881 TX candidate 0xC0 frame 006 00 00 C0 00 80 1A
|
||||||
|
14:52:21.881 CANDIDATE 0xC0 heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes
|
||||||
|
Completed candidate 1/16
|
||||||
|
CANDIDATE 0xC1 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:52:33.733 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:52:34.344 TX candidate 0xC1 frame 006 00 00 C1 00 80 1B
|
||||||
|
14:52:34.344 CANDIDATE 0xC1 ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:52:34.344 CANDIDATE 0xC1 raw 07 80 70 20 D8 55 07 80 70 20 D8 55 07 80 70 20 D8 55 07 80 70 20 D8 55 07 80 70 20 D8 55 07 80 70 20 D8 55 07 80 70 20 D8 55
|
||||||
|
Completed candidate 2/16
|
||||||
|
CANDIDATE 0xC2 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
14:52:45.838 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:52:46.445 TX candidate 0xC2 frame 006 00 00 C2 00 80 18
|
||||||
|
14:52:46.445 CANDIDATE 0xC2 ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:52:46.445 CANDIDATE 0xC2 raw 07 80 38 10 0C F9 07 80 38 10 0C F9 07 80 38 10 0C F9 07 80 38 10 0C F9 07 80 38 10 0C F9 07 80 38 10 0C F9 07 80 38 10 0C F9
|
||||||
|
Completed candidate 3/16
|
||||||
|
CANDIDATE 0xC3 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:52:57.631 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:52:58.240 TX candidate 0xC3 frame 006 00 00 C3 00 80 19
|
||||||
|
14:52:58.240 CANDIDATE 0xC3 ANOMALY 41 RX bytes; first mismatch at byte 0: got 00, heartbeat offset 4 expected 80
|
||||||
|
14:52:58.240 CANDIDATE 0xC3 raw 00 00 00 80 DA 07 80 38 10 2C D9 07 80 38 10 2C D9 07 80 38 10 2C D9 07 80 38 10 2C D9 07 80 38 10 2C D9 07 80 38 10 2C D9
|
||||||
|
Completed candidate 4/16
|
||||||
|
CANDIDATE 0xC4 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
14:53:08.501 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:53:09.109 TX candidate 0xC4 frame 006 00 00 C4 00 80 1E
|
||||||
|
14:53:09.109 CANDIDATE 0xC4 ANOMALY 30 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 0 expected 00
|
||||||
|
14:53:09.109 CANDIDATE 0xC4 raw 07 80 71 40 30 DC 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA
|
||||||
|
Completed candidate 5/16
|
||||||
|
CANDIDATE 0xC5 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:53:19.519 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:53:20.128 TX candidate 0xC5 frame 006 00 00 C5 00 80 1F
|
||||||
|
14:53:20.128 CANDIDATE 0xC5 ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:53:20.128 CANDIDATE 0xC5 raw 07 80 71 20 D8 54 07 80 71 20 D8 54 07 80 71 20 D8 54 07 80 71 20 D8 54 07 80 71 20 D8 54 07 80 71 20 D8 54 07 80 71 20 D8 54
|
||||||
|
Completed candidate 6/16
|
||||||
|
CANDIDATE 0xC6 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
14:53:31.064 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:53:31.676 TX candidate 0xC6 frame 006 00 00 C6 00 80 1C
|
||||||
|
14:53:31.676 CANDIDATE 0xC6 ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:53:31.676 CANDIDATE 0xC6 raw 07 80 1C 08 C6 0F 07 80 1C 08 C6 0F 07 80 1C 08 C6 0F 07 80 1C 08 C6 0F 07 80 1C 08 C6 0F 07 80 1C 08 C6 0F 07 80 1C 08 C6 0F
|
||||||
|
Completed candidate 7/16
|
||||||
|
CANDIDATE 0xC7 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
14:53:49.649 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:53:50.259 TX candidate 0xC7 frame 006 00 00 C7 00 80 1D
|
||||||
|
14:53:50.259 CANDIDATE 0xC7 ANOMALY 30 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 0 expected 00
|
||||||
|
14:53:50.259 CANDIDATE 0xC7 raw 07 80 1C 08 D6 1F 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA
|
||||||
|
Completed candidate 8/16
|
||||||
|
CANDIDATE 0xC8 BASELINE heartbeat-compatible RX: 29 bytes, offset 1, 4 frames + 5 bytes
|
||||||
|
14:54:02.047 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:54:02.656 TX candidate 0xC8 frame 006 00 00 C8 00 80 12
|
||||||
|
14:54:02.656 CANDIDATE 0xC8 ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:54:02.656 CANDIDATE 0xC8 raw 07 80 72 40 30 DF 07 80 72 40 30 DF 07 80 72 40 30 DF 07 80 72 40 30 DF 07 80 72 40 30 DF 07 80 72 40 30 DF 07 80 72 40 30 DF
|
||||||
|
Completed candidate 9/16
|
||||||
|
CANDIDATE 0xC9 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:54:14.717 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:54:15.326 TX candidate 0xC9 frame 006 00 00 C9 00 80 13
|
||||||
|
14:54:15.326 CANDIDATE 0xC9 ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:54:15.326 CANDIDATE 0xC9 raw 07 80 72 20 D8 57 07 80 72 20 D8 57 07 80 72 20 D8 57 07 80 72 20 D8 57 07 80 72 20 D8 57 07 80 72 20 D8 57 07 80 72 20 D8 57
|
||||||
|
Completed candidate 10/16
|
||||||
|
CANDIDATE 0xCA BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:54:29.004 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:54:29.616 TX candidate 0xCA frame 006 00 00 CA 00 80 10
|
||||||
|
14:54:29.616 CANDIDATE 0xCA ANOMALY 39 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:54:29.616 CANDIDATE 0xCA raw 07 80 39 10 0C F8 07 80 39 10 0C F8 07 80 39 10 0C F8 07 80 39 10 0C F8 07 80 39 10 0C F8 07 80 39 10 0C F8 07 80 39
|
||||||
|
Completed candidate 11/16
|
||||||
|
CANDIDATE 0xCB BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:54:42.342 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:54:42.952 TX candidate 0xCB frame 006 00 00 CB 00 80 11
|
||||||
|
14:54:42.952 CANDIDATE 0xCB ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:54:42.952 CANDIDATE 0xCB raw 07 80 39 10 2C D8 07 80 39 10 2C D8 07 80 39 10 2C D8 07 80 39 10 2C D8 07 80 39 10 2C D8 07 80 39 10 2C D8 07 80 39 10 2C D8
|
||||||
|
Completed candidate 12/16
|
||||||
|
CANDIDATE 0xCC BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:54:55.757 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:54:56.367 TX candidate 0xCC frame 006 00 00 CC 00 80 16
|
||||||
|
14:54:56.367 CANDIDATE 0xCC ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:54:56.367 CANDIDATE 0xCC raw 07 80 F3 40 30 5E 07 80 F3 40 30 5E 07 80 F3 40 30 5E 07 80 F3 40 30 5E 07 80 F3 40 30 5E 07 80 F3 40 30 5E 07 80 F3 40 30 5E
|
||||||
|
Completed candidate 13/16
|
||||||
|
CANDIDATE 0xCD BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:55:09.547 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:55:10.155 TX candidate 0xCD frame 006 00 00 CD 00 80 17
|
||||||
|
14:55:10.155 CANDIDATE 0xCD ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:55:10.155 CANDIDATE 0xCD raw 07 80 73 20 D8 56 07 80 73 20 D8 56 07 80 73 20 D8 56 07 80 73 20 D8 56 07 80 73 20 D8 56 07 80 73 20 D8 56 07 80 73 20 D8 56
|
||||||
|
Completed candidate 14/16
|
||||||
|
CANDIDATE 0xCE BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:55:21.792 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:55:22.400 TX candidate 0xCE frame 006 00 00 CE 00 80 14
|
||||||
|
14:55:22.400 CANDIDATE 0xCE ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:55:22.400 CANDIDATE 0xCE raw 07 80 0E 04 A3 74 07 80 0E 04 A3 74 07 80 0E 04 A3 74 07 80 0E 04 A3 74 07 80 0E 04 A3 74 07 80 0E 04 A3 74 07 80 0E 04 A3 74
|
||||||
|
Completed candidate 15/16
|
||||||
|
CANDIDATE 0xCF BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
14:55:32.994 TX primer frame 006 00 00 00 00 80 DA
|
||||||
|
14:55:33.602 TX candidate 0xCF frame 006 00 00 CF 00 80 15
|
||||||
|
14:55:33.602 CANDIDATE 0xCF ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
14:55:33.602 CANDIDATE 0xCF raw 07 80 0E 04 AB 7C 07 80 0E 04 AB 7C 07 80 0E 04 AB 7C 07 80 0E 04 AB 7C 07 80 0E 04 AB 7C 07 80 0E 04 AB 7C 07 80 0E 04 AB 7C
|
||||||
|
Completed candidate 16/16
|
||||||
|
Anomalies: 15
|
||||||
11
captures/rcp-seq-one-primer-b2-b5.txt
Normal file
11
captures/rcp-seq-one-primer-b2-b5.txt
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
Direct response sweep: 5 frames x 1 cycles (5 total) on COM5 at 38400 8N1
|
||||||
|
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
13:46:41.102 TX cycle=1 p1=0x00 p2=0x00 cmd=0x00 state=0x00 value=0x80 frame 006 00 00 00 00 80 DA
|
||||||
|
13:46:41.929 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB2 state=0x00 value=0x80 frame 006 00 00 B2 00 80 68
|
||||||
|
13:46:41.929 ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
13:46:41.929 RX raw 07 80 36 10 0C F7 07 80 36 10 0C F7 07 80 36 10 0C F7 07 80 36 10 0C F7
|
||||||
|
13:46:42.752 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB3 state=0x00 value=0x80 frame 006 00 00 B3 00 80 69
|
||||||
|
13:46:43.577 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB4 state=0x00 value=0x80 frame 006 00 00 B4 00 80 6E
|
||||||
|
13:46:44.400 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB5 state=0x00 value=0x80 frame 006 00 00 B5 00 80 6F
|
||||||
|
FINAL heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
Anomalies: 1
|
||||||
10
captures/rcp-seq-repeat-b5-no-reprimer-v2.txt
Normal file
10
captures/rcp-seq-repeat-b5-no-reprimer-v2.txt
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
Direct response sweep: 4 frames x 1 cycles (4 total) on COM5 at 38400 8N1
|
||||||
|
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
13:51:07.753 TX cycle=1 p1=0x00 p2=0x00 cmd=0x00 state=0x00 value=0x80 frame 006 00 00 00 00 80 DA
|
||||||
|
13:51:08.574 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB5 state=0x00 value=0x80 frame 006 00 00 B5 00 80 6F
|
||||||
|
13:51:08.574 ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
13:51:08.574 RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
13:51:09.396 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB5 state=0x00 value=0x80 frame 006 00 00 B5 00 80 6F
|
||||||
|
13:51:10.220 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB5 state=0x00 value=0x80 frame 006 00 00 B5 00 80 6F
|
||||||
|
FINAL heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
Anomalies: 1
|
||||||
9
captures/rcp-seq-repeat-b5-no-reprimer.txt
Normal file
9
captures/rcp-seq-repeat-b5-no-reprimer.txt
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
Direct response sweep: 2 frames x 1 cycles (2 total) on COM5 at 38400 8N1
|
||||||
|
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
13:47:32.862 TX cycle=1 p1=0x00 p2=0x00 cmd=0x00 state=0x00 value=0x80 frame 006 00 00 00 00 80 DA
|
||||||
|
13:47:33.688 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB5 state=0x00 value=0x80 frame 006 00 00 B5 00 80 6F
|
||||||
|
13:47:33.688 ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
13:47:33.688 RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
FINAL ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
FINAL raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 00 00 00 00 80 DA
|
||||||
|
Anomalies: 1
|
||||||
12
captures/rcp-seq-repeat-b5-reprimer-v2.txt
Normal file
12
captures/rcp-seq-repeat-b5-reprimer-v2.txt
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
Direct response sweep: 6 frames x 1 cycles (6 total) on COM5 at 38400 8N1
|
||||||
|
BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
13:51:31.244 TX cycle=1 p1=0x00 p2=0x00 cmd=0x00 state=0x00 value=0x80 frame 006 00 00 00 00 80 DA
|
||||||
|
13:51:32.067 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB5 state=0x00 value=0x80 frame 006 00 00 B5 00 80 6F
|
||||||
|
13:51:32.067 ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
13:51:32.067 RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
13:51:32.893 TX cycle=1 p1=0x00 p2=0x00 cmd=0x00 state=0x00 value=0x80 frame 006 00 00 00 00 80 DA
|
||||||
|
13:51:33.720 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB5 state=0x00 value=0x80 frame 006 00 00 B5 00 80 6F
|
||||||
|
13:51:34.544 TX cycle=1 p1=0x00 p2=0x00 cmd=0x00 state=0x00 value=0x80 frame 006 00 00 00 00 80 DA
|
||||||
|
13:51:35.366 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB5 state=0x00 value=0x80 frame 006 00 00 B5 00 80 6F
|
||||||
|
FINAL heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
Anomalies: 1
|
||||||
9
captures/rcp-seq-repeat-b5-reprimer.txt
Normal file
9
captures/rcp-seq-repeat-b5-reprimer.txt
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
Direct response sweep: 2 frames x 1 cycles (2 total) on COM5 at 38400 8N1
|
||||||
|
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
13:47:48.759 TX cycle=1 p1=0x00 p2=0x00 cmd=0x00 state=0x00 value=0x80 frame 006 00 00 00 00 80 DA
|
||||||
|
13:47:49.581 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB5 state=0x00 value=0x80 frame 006 00 00 B5 00 80 6F
|
||||||
|
13:47:49.581 ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
13:47:49.581 RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||||
|
FINAL ANOMALY 30 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 0 expected 00
|
||||||
|
FINAL raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 00 00 00 00 80 DA
|
||||||
|
Anomalies: 1
|
||||||
14
captures/rcp-seq-reprimer-b2-b5-v2.txt
Normal file
14
captures/rcp-seq-reprimer-b2-b5-v2.txt
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
Direct response sweep: 8 frames x 1 cycles (8 total) on COM5 at 38400 8N1
|
||||||
|
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
13:50:40.514 TX cycle=1 p1=0x00 p2=0x00 cmd=0x00 state=0x00 value=0x80 frame 006 00 00 00 00 80 DA
|
||||||
|
13:50:41.338 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB2 state=0x00 value=0x80 frame 006 00 00 B2 00 80 68
|
||||||
|
13:50:41.338 ANOMALY 30 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
13:50:41.338 RX raw 07 80 36 10 0C F7 07 80 36 10 0C F7 07 80 36 10 0C F7 07 80 36 10 0C F7 07 80 36 10 0C F7
|
||||||
|
13:50:42.161 TX cycle=1 p1=0x00 p2=0x00 cmd=0x00 state=0x00 value=0x80 frame 006 00 00 00 00 80 DA
|
||||||
|
13:50:42.989 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB3 state=0x00 value=0x80 frame 006 00 00 B3 00 80 69
|
||||||
|
13:50:43.813 TX cycle=1 p1=0x00 p2=0x00 cmd=0x00 state=0x00 value=0x80 frame 006 00 00 00 00 80 DA
|
||||||
|
13:50:44.638 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB4 state=0x00 value=0x80 frame 006 00 00 B4 00 80 6E
|
||||||
|
13:50:45.458 TX cycle=1 p1=0x00 p2=0x00 cmd=0x00 state=0x00 value=0x80 frame 006 00 00 00 00 80 DA
|
||||||
|
13:50:46.280 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB5 state=0x00 value=0x80 frame 006 00 00 B5 00 80 6F
|
||||||
|
FINAL heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
Anomalies: 1
|
||||||
11
captures/rcp-seq-reprimer-b2-b5.txt
Normal file
11
captures/rcp-seq-reprimer-b2-b5.txt
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
Direct response sweep: 5 frames x 1 cycles (5 total) on COM5 at 38400 8N1
|
||||||
|
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||||
|
13:47:04.045 TX cycle=1 p1=0x00 p2=0x00 cmd=0x00 state=0x00 value=0x80 frame 006 00 00 00 00 80 DA
|
||||||
|
13:47:04.870 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB2 state=0x00 value=0x80 frame 006 00 00 B2 00 80 68
|
||||||
|
13:47:04.870 ANOMALY 30 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||||
|
13:47:04.870 RX raw 07 80 36 10 0C F7 07 80 36 10 0C F7 07 80 36 10 0C F7 07 80 36 10 0C F7 07 80 36 10 0C F7
|
||||||
|
13:47:05.694 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB3 state=0x00 value=0x80 frame 006 00 00 B3 00 80 69
|
||||||
|
13:47:06.518 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB4 state=0x00 value=0x80 frame 006 00 00 B4 00 80 6E
|
||||||
|
13:47:07.341 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB5 state=0x00 value=0x80 frame 006 00 00 B5 00 80 6F
|
||||||
|
FINAL heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||||
|
Anomalies: 1
|
||||||
@@ -674,6 +674,11 @@ Recommended first direct sweep:
|
|||||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0x00-0xFF" --states 0x00 --values 0x80 --after-each 0.6 --stop-on-anomaly --log captures/rcp-direct-cmd-00-ff.txt
|
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0x00-0xFF" --states 0x00 --values 0x80 --after-each 0.6 --stop-on-anomaly --log captures/rcp-direct-cmd-00-ff.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
|
For a long sweep where every anomaly should be logged but the panel needs a
|
||||||
|
fresh power cycle before continuing, use `--pause-on-anomaly` instead of
|
||||||
|
`--stop-on-anomaly`. After the prompt, power-cycle the RCP, wait for the normal
|
||||||
|
heartbeat, then press Enter.
|
||||||
|
|
||||||
What to watch for:
|
What to watch for:
|
||||||
|
|
||||||
- If the script reports `Anomalies: 0`, the panel never sent raw bytes that
|
- If the script reports `Anomalies: 0`, the panel never sent raw bytes that
|
||||||
@@ -1413,3 +1418,742 @@ Optional latch test, without power-cycling after the first run:
|
|||||||
```powershell
|
```powershell
|
||||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0x00 0xB5" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --cycles 3 --cycle-pause 2 --log captures/rcp-latch-primer-00-b5-cycles.txt
|
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0x00 0xB5" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --cycles 3 --cycle-pause 2 --log captures/rcp-latch-primer-00-b5-cycles.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Current Inferred Behavior
|
||||||
|
|
||||||
|
The current evidence suggests the RCP is entering a discovery/query/status-read
|
||||||
|
phase, not a completed active-control handshake.
|
||||||
|
|
||||||
|
Working model:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Host/CCU -> RCP: valid primer frame
|
||||||
|
Host/CCU -> RCP: selected query/status command
|
||||||
|
RCP -> Host/CCU: checksum-valid response frame repeated briefly
|
||||||
|
RCP -> Host/CCU: returns to heartbeat
|
||||||
|
```
|
||||||
|
|
||||||
|
Important details:
|
||||||
|
|
||||||
|
- Single selected commands such as `B2`, `B6`, and `B7` do not respond from a
|
||||||
|
cold panel.
|
||||||
|
- A preceding valid frame is required. `00 00 00 00 80 DA` works as a generic
|
||||||
|
primer for several selected commands.
|
||||||
|
- The second command selects the response payload.
|
||||||
|
- The LCD can remain `CONNECT NOT ACT` while serial responses vary in a
|
||||||
|
structured way. Serial response does not yet mean the active control session
|
||||||
|
is accepted.
|
||||||
|
- At least some primed queries appear one-shot after power-up. Repeating the
|
||||||
|
same primed query without power-cycling can produce only heartbeat traffic.
|
||||||
|
|
||||||
|
Likely protocol role:
|
||||||
|
|
||||||
|
- These `B0`-range commands may be a CCU discovery or capability/status query
|
||||||
|
phase.
|
||||||
|
- The CCU may query RCP model/capability/state blocks before sending a later
|
||||||
|
activation/session command.
|
||||||
|
- The next unknown is the command or command sequence that follows these
|
||||||
|
discovery responses and moves the panel from `CONNECT NOT ACT` to active.
|
||||||
|
|
||||||
|
## Primer-Candidate Broad Sweep
|
||||||
|
|
||||||
|
Use `scripts/serial_primer_candidate_sweep.py` for broader searches based on
|
||||||
|
the current primer/query model. It sends:
|
||||||
|
|
||||||
|
```text
|
||||||
|
primer frame -> candidate frame -> raw RX classification
|
||||||
|
```
|
||||||
|
|
||||||
|
For clean mapping, use `--prompt-power-cycle` and power-cycle before each
|
||||||
|
candidate. This avoids the one-shot/latch behavior contaminating later
|
||||||
|
candidates.
|
||||||
|
|
||||||
|
Example dry run:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_primer_candidate_sweep.py --port COM5 --candidates "0xB0-0xB7" --dry-run
|
||||||
|
```
|
||||||
|
|
||||||
|
Continue the known `B` range first:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_primer_candidate_sweep.py --port COM5 --candidates "0xB1 0xB6 0xB7 0xB8 0xB9 0xBA 0xBB 0xBC 0xBD 0xBE 0xBF" --prompt-power-cycle --stop-on-anomaly --log captures/rcp-primer-sweep-b1-bf.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Because `--stop-on-anomaly` stops at the first response, after each hit:
|
||||||
|
|
||||||
|
1. Save the reported candidate and response frame.
|
||||||
|
2. Power-cycle the panel.
|
||||||
|
3. Restart the sweep from the next unmapped candidate.
|
||||||
|
|
||||||
|
For non-stop mapping, omit `--stop-on-anomaly`, but still power-cycle at each
|
||||||
|
prompt:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_primer_candidate_sweep.py --port COM5 --candidates "0xB8-0xBF" --prompt-power-cycle --log captures/rcp-primer-sweep-b8-bf.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Suggested broad ranges after `B0-BF`:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_primer_candidate_sweep.py --port COM5 --candidates "0xA0-0xAF" --prompt-power-cycle --log captures/rcp-primer-sweep-a0-af.txt
|
||||||
|
python scripts/serial_primer_candidate_sweep.py --port COM5 --candidates "0xC0-0xCF" --prompt-power-cycle --log captures/rcp-primer-sweep-c0-cf.txt
|
||||||
|
python scripts/serial_primer_candidate_sweep.py --port COM5 --candidates "0x00-0x1F" --prompt-power-cycle --log captures/rcp-primer-sweep-00-1f.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Recommended first run:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_primer_candidate_sweep.py --port COM5 --candidates "0xB1 0xB6 0xB7 0xB8 0xB9 0xBA 0xBB 0xBC 0xBD 0xBE 0xBF" --prompt-power-cycle --log captures/rcp-primer-sweep-b1-bf.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
## Primer Reuse and Sequential Query Tests
|
||||||
|
|
||||||
|
Two open questions:
|
||||||
|
|
||||||
|
1. After a cold boot, does the RCP only answer one selected query before it
|
||||||
|
latches/suppresses further responses?
|
||||||
|
2. Is a fresh primer required before every selected query, or can one primer
|
||||||
|
unlock several selected commands in sequence?
|
||||||
|
|
||||||
|
Use `scripts/serial_direct_response_sweep.py` for these tests because it can
|
||||||
|
send arbitrary command sequences without stopping between commands. For each
|
||||||
|
test below, power-cycle once before starting the script, then do not power-cycle
|
||||||
|
again until the script exits.
|
||||||
|
|
||||||
|
### Test S1: One Primer, Multiple Different Queries
|
||||||
|
|
||||||
|
Purpose: test whether one primer can unlock several different selected commands.
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0x00 0xB2 0xB3 0xB4 0xB5" --states 0x00 --values 0x80 --settle 3 --after-each 0.8 --log captures/rcp-seq-one-primer-b2-b5.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Interpretation:
|
||||||
|
|
||||||
|
- If only `B2` responds, the panel likely allows one selected response per
|
||||||
|
cold-boot/primer state.
|
||||||
|
- If `B2`, `B3`, `B4`, and `B5` all respond, one primer can unlock multiple
|
||||||
|
sequential queries.
|
||||||
|
- If some respond and some do not, there may be command-group or latch behavior.
|
||||||
|
|
||||||
|
### Test S2: Primer Before Every Query, No Power Cycle
|
||||||
|
|
||||||
|
Purpose: test whether a new primer can re-arm another selected query without
|
||||||
|
power-cycling.
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0x00 0xB2 0x00 0xB3 0x00 0xB4 0x00 0xB5" --states 0x00 --values 0x80 --settle 3 --after-each 0.8 --log captures/rcp-seq-reprimer-b2-b5.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Interpretation:
|
||||||
|
|
||||||
|
- If every selected command responds, a primer is required before each query but
|
||||||
|
power-cycling is not.
|
||||||
|
- If only the first selected command responds, power-cycle or another reset-like
|
||||||
|
command may be required to clear the latch.
|
||||||
|
|
||||||
|
### Test S3: Repeat Same Query With and Without Reprimer
|
||||||
|
|
||||||
|
Purpose: test whether the same selected query can be repeated in one powered
|
||||||
|
session.
|
||||||
|
|
||||||
|
Without re-primer:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0x00 0xB5 0xB5 0xB5" --states 0x00 --values 0x80 --settle 3 --after-each 0.8 --log captures/rcp-seq-repeat-b5-no-reprimer.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Power-cycle, then with re-primer:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0x00 0xB5 0x00 0xB5 0x00 0xB5" --states 0x00 --values 0x80 --settle 3 --after-each 0.8 --log captures/rcp-seq-repeat-b5-reprimer.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Interpretation:
|
||||||
|
|
||||||
|
- If only the first `B5` responds in both tests, the response is one-shot until
|
||||||
|
power cycle or a yet-unknown reset/ack command.
|
||||||
|
- If the re-primer version responds repeatedly, the primer re-arms the selected
|
||||||
|
query.
|
||||||
|
|
||||||
|
### 2026-05-13 Sequential Query Test Result
|
||||||
|
|
||||||
|
Captures:
|
||||||
|
|
||||||
|
- `captures/rcp-seq-one-primer-b2-b5.txt`
|
||||||
|
- `captures/rcp-seq-reprimer-b2-b5.txt`
|
||||||
|
- `captures/rcp-seq-repeat-b5-no-reprimer.txt`
|
||||||
|
- `captures/rcp-seq-repeat-b5-reprimer.txt`
|
||||||
|
|
||||||
|
Valid result:
|
||||||
|
|
||||||
|
| Test | Intended sequence | Actual sequence sent | Result |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| S1 | `00 -> B2 -> B3 -> B4 -> B5` | `00 -> B2 -> B3 -> B4 -> B5` | only `B2` responded: `07 80 36 10 0C F7` |
|
||||||
|
|
||||||
|
Tooling caveat:
|
||||||
|
|
||||||
|
- The original `serial_direct_response_sweep.py` de-duplicated command lists.
|
||||||
|
- Because of that, sequences containing repeated commands did not run as
|
||||||
|
intended.
|
||||||
|
- `S2`, `S3 no re-primer`, and `S3 re-primer` need to be rerun after the
|
||||||
|
script fix.
|
||||||
|
- The script has been updated to preserve repeated command values in explicit
|
||||||
|
command lists.
|
||||||
|
|
||||||
|
Interpretation from S1:
|
||||||
|
|
||||||
|
- One primer did not unlock a whole list of feature/status queries.
|
||||||
|
- After `00 -> B2` returned `07 80 36 10 0C F7`, later `B3`, `B4`, and `B5`
|
||||||
|
in the same powered session did not produce additional non-heartbeat frames.
|
||||||
|
- This supports a one-response latch model unless the re-primer test proves that
|
||||||
|
the primer can re-arm another query.
|
||||||
|
|
||||||
|
Rerun these tests after the script fix:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0x00 0xB2 0x00 0xB3 0x00 0xB4 0x00 0xB5" --states 0x00 --values 0x80 --settle 3 --after-each 0.8 --log captures/rcp-seq-reprimer-b2-b5-v2.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Power-cycle, then:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0x00 0xB5 0xB5 0xB5" --states 0x00 --values 0x80 --settle 3 --after-each 0.8 --log captures/rcp-seq-repeat-b5-no-reprimer-v2.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Power-cycle, then:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0x00 0xB5 0x00 0xB5 0x00 0xB5" --states 0x00 --values 0x80 --settle 3 --after-each 0.8 --log captures/rcp-seq-repeat-b5-reprimer-v2.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2026-05-13 Sequential Query Rerun Result
|
||||||
|
|
||||||
|
Captures:
|
||||||
|
|
||||||
|
- `captures/rcp-seq-reprimer-b2-b5-v2.txt`
|
||||||
|
- `captures/rcp-seq-repeat-b5-no-reprimer-v2.txt`
|
||||||
|
- `captures/rcp-seq-repeat-b5-reprimer-v2.txt`
|
||||||
|
|
||||||
|
These reruns used the fixed `serial_direct_response_sweep.py`, which preserves
|
||||||
|
repeated command values in explicit sequences.
|
||||||
|
|
||||||
|
Results:
|
||||||
|
|
||||||
|
| Test | Sequence | Non-heartbeat response(s) |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Re-primer between different queries | `00 -> B2 -> 00 -> B3 -> 00 -> B4 -> 00 -> B5` | only `B2`: `07 80 36 10 0C F7` |
|
||||||
|
| Repeat `B5`, no re-primer | `00 -> B5 -> B5 -> B5` | only first `B5`: `07 80 6D 20 D8 48` |
|
||||||
|
| Repeat `B5`, re-primer each time | `00 -> B5 -> 00 -> B5 -> 00 -> B5` | only first `B5`: `07 80 6D 20 D8 48` |
|
||||||
|
|
||||||
|
Interpretation:
|
||||||
|
|
||||||
|
- The RCP appears to allow only one selected query response per powered session
|
||||||
|
in the current `CONNECT NOT ACT` state.
|
||||||
|
- Sending another primer (`00 00 00 00 80 DA`) after the first response does not
|
||||||
|
re-arm the query responder.
|
||||||
|
- Repeating the same selected query does not produce another response.
|
||||||
|
- This strongly suggests a one-shot discovery/status response followed by a
|
||||||
|
required next-stage command, acknowledgement, reset, or activation step.
|
||||||
|
|
||||||
|
Implication for CCU behavior:
|
||||||
|
|
||||||
|
- The CCU may not scan a list of feature queries in the current state. It may
|
||||||
|
send one discovery/status query, receive one response, then decide what
|
||||||
|
activation/session command to send next.
|
||||||
|
- Alternatively, additional feature reads may require an acknowledgement or
|
||||||
|
state-advance command that has not yet been identified.
|
||||||
|
|
||||||
|
Recommended next direction:
|
||||||
|
|
||||||
|
- Stop broad feature scanning for the moment.
|
||||||
|
- Search for the post-discovery acknowledgement/activation command that follows
|
||||||
|
one known response such as `00 -> B5 => 07 80 6D 20 D8 48`.
|
||||||
|
- Use a three-step pattern:
|
||||||
|
|
||||||
|
```text
|
||||||
|
primer -> selected query -> candidate activation/ack command
|
||||||
|
```
|
||||||
|
|
||||||
|
Known reproducible setup:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Host -> RCP: 00 00 00 00 80 DA
|
||||||
|
Host -> RCP: 00 00 B5 00 80 6F
|
||||||
|
RCP -> Host: 07 80 6D 20 D8 48
|
||||||
|
Host -> RCP: candidate next-stage command
|
||||||
|
```
|
||||||
|
|
||||||
|
## Post-Discovery Candidate Sweep
|
||||||
|
|
||||||
|
Use `scripts/serial_post_discovery_sweep.py` to search for the command that
|
||||||
|
comes after one known discovery/status response. This is the likely next stage
|
||||||
|
after the one-shot response behavior.
|
||||||
|
|
||||||
|
Default setup:
|
||||||
|
|
||||||
|
```text
|
||||||
|
primer: 00 00 00 00 80 DA
|
||||||
|
query: 00 00 B5 00 80 6F
|
||||||
|
RCP: 07 80 6D 20 D8 48
|
||||||
|
then: candidate next-stage command
|
||||||
|
```
|
||||||
|
|
||||||
|
Recommended first post-discovery sweep:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_post_discovery_sweep.py --port COM5 --candidates "0x00-0x1F" --prompt-power-cycle --prompt-screen --log captures/rcp-post-discovery-b5-candidates-00-1f.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
For each candidate:
|
||||||
|
|
||||||
|
1. Power-cycle the RCP.
|
||||||
|
2. Wait for heartbeat/panel stable.
|
||||||
|
3. Press Enter at the prompt.
|
||||||
|
4. Watch for any screen change after the candidate frame.
|
||||||
|
5. Type the screen state if it changes, or press Enter for no visible change.
|
||||||
|
|
||||||
|
Why this range first:
|
||||||
|
|
||||||
|
- Earlier frame-length tests showed small command values can change screen state
|
||||||
|
to `CONNECT NOT ACT`.
|
||||||
|
- If a simple ACK/activation command exists, it may be in the low command range.
|
||||||
|
|
||||||
|
Next ranges if `00-1F` does not change state:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_post_discovery_sweep.py --port COM5 --candidates "0x20-0x3F" --prompt-power-cycle --prompt-screen --log captures/rcp-post-discovery-b5-candidates-20-3f.txt
|
||||||
|
python scripts/serial_post_discovery_sweep.py --port COM5 --candidates "0x80-0x9F" --prompt-power-cycle --prompt-screen --log captures/rcp-post-discovery-b5-candidates-80-9f.txt
|
||||||
|
python scripts/serial_post_discovery_sweep.py --port COM5 --candidates "0xB0-0xBF" --prompt-power-cycle --prompt-screen --log captures/rcp-post-discovery-b5-candidates-b0-bf.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
If any candidate changes the screen away from `CONNECT NOT ACT`, or produces a
|
||||||
|
new RCP response after the candidate stage, retest that candidate alone with
|
||||||
|
three fresh power cycles.
|
||||||
|
|
||||||
|
### 2026-05-13 Post-Discovery Sweep `00-1F` Result
|
||||||
|
|
||||||
|
Capture:
|
||||||
|
|
||||||
|
- `captures/rcp-post-discovery-b5-candidates-00-1f.txt`
|
||||||
|
|
||||||
|
Sweep setup:
|
||||||
|
|
||||||
|
```text
|
||||||
|
primer: 00 00 00 00 80 DA
|
||||||
|
query: 00 00 B5 00 80 6F
|
||||||
|
expected: 07 80 6D 20 D8 48
|
||||||
|
candidate: 00-1F
|
||||||
|
```
|
||||||
|
|
||||||
|
Screen result:
|
||||||
|
|
||||||
|
- Every candidate remained at `CONNECT NOT ACT` / `CONNECTION NOT ACT`.
|
||||||
|
- No candidate in `0x00-0x1F` moved the panel into an active state.
|
||||||
|
|
||||||
|
Serial result:
|
||||||
|
|
||||||
|
- Most candidates produced only heartbeat-compatible traffic after the candidate
|
||||||
|
frame.
|
||||||
|
- Candidate windows for `0x00`, `0x0E`, `0x0F`, `0x1A`, `0x1E`, and `0x1F`
|
||||||
|
included additional bytes matching the known discovery response
|
||||||
|
`07 80 6D 20 D8 48`.
|
||||||
|
- Those candidate-window anomalies are likely trailing/repeated discovery
|
||||||
|
response frames from the `B5` query, not new candidate-specific responses.
|
||||||
|
|
||||||
|
Notable outlier:
|
||||||
|
|
||||||
|
- During candidate `0x03`, the primer read window contained
|
||||||
|
`07 80 40 40 30 ED`, followed by heartbeat.
|
||||||
|
- This is checksum-valid, but it occurred before the `B5` query in that test
|
||||||
|
window. Treat it as an outlier until reproduced. Possible explanations include
|
||||||
|
incomplete power-cycle reset, a previous state/latch edge, or an accidental
|
||||||
|
timing artifact.
|
||||||
|
|
||||||
|
Interpretation:
|
||||||
|
|
||||||
|
- Low command range `0x00-0x1F` does not appear to contain the simple
|
||||||
|
post-discovery activation command when tested after the `B5` discovery query.
|
||||||
|
- The script's candidate read window can still catch residual discovery
|
||||||
|
response frames; candidate anomalies must be checked against the known query
|
||||||
|
response before treating them as new behavior.
|
||||||
|
|
||||||
|
Recommended next sweep:
|
||||||
|
|
||||||
|
Use a slightly longer query read window so the known discovery response has more
|
||||||
|
time to finish before the candidate frame:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_post_discovery_sweep.py --port COM5 --candidates "0x20-0x3F" --after-query 2.0 --prompt-power-cycle --prompt-screen --log captures/rcp-post-discovery-b5-candidates-20-3f.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
If `20-3F` also keeps the screen at `CONNECT NOT ACT`, continue:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_post_discovery_sweep.py --port COM5 --candidates "0x80-0x9F" --after-query 2.0 --prompt-power-cycle --prompt-screen --log captures/rcp-post-discovery-b5-candidates-80-9f.txt
|
||||||
|
python scripts/serial_post_discovery_sweep.py --port COM5 --candidates "0xB0-0xBF" --after-query 2.0 --prompt-power-cycle --prompt-screen --log captures/rcp-post-discovery-b5-candidates-b0-bf.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
## Post-Discovery Test Ladder
|
||||||
|
|
||||||
|
Before manually sweeping every command byte, sample representative patterns from
|
||||||
|
several command regions. The goal is to identify which command families are
|
||||||
|
worth expanding.
|
||||||
|
|
||||||
|
Use the same known discovery setup for each sample:
|
||||||
|
|
||||||
|
```text
|
||||||
|
primer: 00 00 00 00 80 DA
|
||||||
|
query: 00 00 B5 00 80 6F
|
||||||
|
RCP: 07 80 6D 20 D8 48
|
||||||
|
then: sampled candidate command
|
||||||
|
```
|
||||||
|
|
||||||
|
Power-cycle before each candidate prompt. Type any screen change, otherwise
|
||||||
|
press Enter.
|
||||||
|
|
||||||
|
### Ladder 1: Low-Range Sanity Sample
|
||||||
|
|
||||||
|
The full `00-1F` sweep did not activate the panel, but one outlier appeared
|
||||||
|
during the `0x03` test. Retest only representative low bytes plus the outlier:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_post_discovery_sweep.py --port COM5 --candidates "0x00 0x01 0x03 0x07 0x0F 0x10 0x1B 0x1F" --after-query 2.0 --prompt-power-cycle --prompt-screen --log captures/rcp-post-ladder-low-sample.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
What this checks:
|
||||||
|
|
||||||
|
- `0x00`, `0x01`: no-op / ACK-like small commands.
|
||||||
|
- `0x03`: the outlier run produced `07 80 40 40 30 ED`.
|
||||||
|
- `0x07`, `0x0F`, `0x1F`: bit-mask/boundary values.
|
||||||
|
- `0x10`, `0x1B`: response command-family values observed in RCP frames.
|
||||||
|
|
||||||
|
### Ladder 2: Response-Command Echo Sample
|
||||||
|
|
||||||
|
Test host commands that match command bytes seen in RCP responses. If the CCU
|
||||||
|
acknowledges or advances using related command IDs, these are good candidates.
|
||||||
|
|
||||||
|
Observed RCP response command bytes so far:
|
||||||
|
|
||||||
|
```text
|
||||||
|
1B 36 40 6C 6D
|
||||||
|
```
|
||||||
|
|
||||||
|
Run:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_post_discovery_sweep.py --port COM5 --candidates "0x1B 0x36 0x40 0x6C 0x6D" --after-query 2.0 --prompt-power-cycle --prompt-screen --log captures/rcp-post-ladder-response-cmds.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Expand only if one of these changes screen state or produces a new
|
||||||
|
candidate-stage response.
|
||||||
|
|
||||||
|
### Ladder 3: Boundary and Bit-Pattern Sample
|
||||||
|
|
||||||
|
This tests command bytes that often mark command classes, flags, or boundaries:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_post_discovery_sweep.py --port COM5 --candidates "0x20 0x2F 0x30 0x3F 0x40 0x4F 0x50 0x5F 0x7F 0x80 0x8F 0x90 0x9F 0xA0 0xAF 0xB0 0xBF 0xC0 0xCF 0xE0 0xEF 0xF0 0xFF" --after-query 2.0 --prompt-power-cycle --prompt-screen --log captures/rcp-post-ladder-boundaries.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
What this checks:
|
||||||
|
|
||||||
|
- Nibble/region boundaries.
|
||||||
|
- The high-bit transition at `0x80`.
|
||||||
|
- Known discovery query region around `0xB0`.
|
||||||
|
- High command space around `0xE0-0xFF`.
|
||||||
|
|
||||||
|
### Ladder 4: Known Query Region Sample
|
||||||
|
|
||||||
|
The `B0` range is known to produce discovery/status responses when used as the
|
||||||
|
selected query. It may also contain a next-stage command.
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_post_discovery_sweep.py --port COM5 --candidates "0xB0 0xB1 0xB2 0xB3 0xB4 0xB5 0xB6 0xB7 0xB8 0xBF" --after-query 2.0 --prompt-power-cycle --prompt-screen --log captures/rcp-post-ladder-b-region.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
If any `B` candidate changes behavior, expand locally around it rather than
|
||||||
|
sweeping the full byte space.
|
||||||
|
|
||||||
|
### Ladder 5: Alternate Discovery Response Bases
|
||||||
|
|
||||||
|
If all candidate ladders after `00 -> B5` leave the screen at `CONNECT NOT ACT`,
|
||||||
|
try the same sampled candidates after a different discovery query. Different RCP
|
||||||
|
responses may expect different follow-up ACKs.
|
||||||
|
|
||||||
|
Use `B2` discovery:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_post_discovery_sweep.py --port COM5 --query-command 0xB2 --candidates "0x00 0x01 0x1B 0x36 0x40 0x6C 0x6D 0x80 0xB0 0xB5 0xFF" --after-query 2.0 --prompt-power-cycle --prompt-screen --log captures/rcp-post-ladder-after-b2.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Use `B0` discovery:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_post_discovery_sweep.py --port COM5 --query-command 0xB0 --candidates "0x00 0x01 0x1B 0x36 0x40 0x6C 0x6D 0x80 0xB0 0xB5 0xFF" --after-query 2.0 --prompt-power-cycle --prompt-screen --log captures/rcp-post-ladder-after-b0.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Interpretation:
|
||||||
|
|
||||||
|
- If a candidate only works after one discovery response, the next-stage command
|
||||||
|
may depend on the returned block.
|
||||||
|
- If the same candidate works after multiple discovery responses, it is a
|
||||||
|
stronger activation/ACK candidate.
|
||||||
|
|
||||||
|
### When to Expand
|
||||||
|
|
||||||
|
Expand a region only when one of these occurs:
|
||||||
|
|
||||||
|
- Screen changes away from `CONNECT NOT ACT`.
|
||||||
|
- RCP sends a new candidate-stage frame that is not the known discovery response
|
||||||
|
trailing into the candidate window.
|
||||||
|
- The panel begins sending different heartbeat/status frames after the
|
||||||
|
candidate.
|
||||||
|
|
||||||
|
If none of the ladder samples produce a new behavior, stop command-byte guessing
|
||||||
|
and test other frame fields for the candidate stage: state byte, value byte, or
|
||||||
|
prefix bytes.
|
||||||
|
|
||||||
|
### 2026-05-13 Ladder 1 Result and Keepalive Hypothesis
|
||||||
|
|
||||||
|
Capture:
|
||||||
|
|
||||||
|
- `captures/rcp-post-ladder-low-sample.txt`
|
||||||
|
|
||||||
|
Ladder 1 candidates:
|
||||||
|
|
||||||
|
```text
|
||||||
|
00 01 03 07 0F 10 1B 1F
|
||||||
|
```
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
- Every sampled candidate left the screen at `CONNECT NOT ACT`.
|
||||||
|
- Candidate-stage RX was heartbeat-compatible for all candidates.
|
||||||
|
- The earlier `0x03` outlier did not reproduce.
|
||||||
|
- Query-stage response `07 80 6D 20 D8 48` reproduced reliably before each
|
||||||
|
candidate.
|
||||||
|
|
||||||
|
Interpretation:
|
||||||
|
|
||||||
|
- The low/outlier sample did not find a post-discovery activation/ACK command.
|
||||||
|
- `CONNECT NOT ACT` may be unrelated to a one-shot ACK. It may mean the RCP sees
|
||||||
|
host traffic but is not receiving the correct ongoing CCU heartbeat/session
|
||||||
|
cadence.
|
||||||
|
|
||||||
|
Alternative working model:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Host sends discovery/status query
|
||||||
|
RCP answers once
|
||||||
|
Host must then send a sustained keepalive/session heartbeat
|
||||||
|
RCP remains CONNECT NOT ACT until that heartbeat/cadence is correct
|
||||||
|
```
|
||||||
|
|
||||||
|
### Keepalive After Discovery Tests
|
||||||
|
|
||||||
|
Use `scripts/serial_keepalive_after_query.py` to test whether a sustained host
|
||||||
|
heartbeat changes the RCP state after a known discovery response.
|
||||||
|
|
||||||
|
Default setup:
|
||||||
|
|
||||||
|
```text
|
||||||
|
primer: 00 00 00 00 80 DA
|
||||||
|
query: 00 00 B5 00 80 6F
|
||||||
|
RCP reply: 07 80 6D 20 D8 48
|
||||||
|
keepalive: repeated candidate frame
|
||||||
|
```
|
||||||
|
|
||||||
|
Test K1: repeat the known primer/heartbeat shape:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_keepalive_after_query.py --port COM5 --keepalive-command 0x00 --duration 15 --interval 0.6 --prompt-screen --log captures/rcp-keepalive-after-b5-cmd00-600ms.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Test K2: repeat the zero-state frame:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_keepalive_after_query.py --port COM5 --keepalive-frame "00 00 00 00 00 5A" --duration 15 --interval 0.6 --prompt-screen --log captures/rcp-keepalive-after-b5-zero-state-600ms.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Test K3: repeat the alternate state frame:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_keepalive_after_query.py --port COM5 --keepalive-frame "00 00 00 80 00 DA" --duration 15 --interval 0.6 --prompt-screen --log captures/rcp-keepalive-after-b5-state80-600ms.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Test K4: faster primer/heartbeat cadence:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_keepalive_after_query.py --port COM5 --keepalive-command 0x00 --duration 15 --interval 0.2 --prompt-screen --log captures/rcp-keepalive-after-b5-cmd00-200ms.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Power-cycle before each keepalive test. Watch for:
|
||||||
|
|
||||||
|
- Screen changing away from `CONNECT NOT ACT`.
|
||||||
|
- Pin 4 changing from heartbeat to another recurring status frame.
|
||||||
|
- RCP controls beginning to transmit additional button/status data.
|
||||||
|
|
||||||
|
### 2026-05-13 Keepalive After Discovery Result
|
||||||
|
|
||||||
|
Captures:
|
||||||
|
|
||||||
|
- `captures/rcp-keepalive-after-b5-cmd00-600ms.txt`
|
||||||
|
- `captures/rcp-keepalive-after-b5-zero-state-600ms.txt`
|
||||||
|
- `captures/rcp-keepalive-after-b5-state80-600ms.txt`
|
||||||
|
- `captures/rcp-keepalive-after-b5-cmd00-200ms.txt`
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
| Test | Keepalive frame | Cadence | Screen result | Pin 4 RX |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| K1 | `00 00 00 00 80 DA` | 0.6 s | `CONNECT NOT ACT` | heartbeat-compatible |
|
||||||
|
| K2 | `00 00 00 00 00 5A` | 0.6 s | `CONNECT NOT ACT` | heartbeat-compatible |
|
||||||
|
| K3 | `00 00 00 80 00 DA` | 0.6 s | `CONNECT NOT ACT` | heartbeat-compatible |
|
||||||
|
| K4 | `00 00 00 00 80 DA` | 0.2 s | `CONNECT NOT ACT` | heartbeat-compatible |
|
||||||
|
|
||||||
|
Interpretation:
|
||||||
|
|
||||||
|
- A simple sustained host heartbeat after `00 -> B5` does not activate the RCP.
|
||||||
|
- The RCP continues emitting only the known heartbeat-compatible stream on pin
|
||||||
|
4 during these keepalive attempts.
|
||||||
|
- The correct next stage is probably not just "repeat the primer" or "hold a
|
||||||
|
no-op frame at CCU cadence".
|
||||||
|
- The better next branch is to map additional `primer -> request` commands that
|
||||||
|
cause one-shot RCP responses. Those response blocks may reveal the command
|
||||||
|
families, status bits, or identity data needed for the later activation step.
|
||||||
|
|
||||||
|
Recommended next request sweep:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_primer_candidate_sweep.py --port COM5 --candidates "0xB1 0xB6 0xB7 0xB8 0xB9 0xBA 0xBB 0xBC 0xBD 0xBE 0xBF" --prompt-power-cycle --log captures/rcp-primer-sweep-b1-bf.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Power-cycle before each candidate prompt. This fills the gaps around the known
|
||||||
|
`B0-B5` discovery/status region and checks whether `B8-BF` contain additional
|
||||||
|
one-shot readable blocks.
|
||||||
|
|
||||||
|
If this range is quiet, continue with neighboring command regions:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python scripts/serial_primer_candidate_sweep.py --port COM5 --candidates "0xA0-0xAF" --prompt-power-cycle --log captures/rcp-primer-sweep-a0-af.txt
|
||||||
|
python scripts/serial_primer_candidate_sweep.py --port COM5 --candidates "0xC0-0xCF" --prompt-power-cycle --log captures/rcp-primer-sweep-c0-cf.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2026-05-13 Primer Sweep A/B/C Region Result
|
||||||
|
|
||||||
|
Captures:
|
||||||
|
|
||||||
|
- `captures/rcp-primer-sweep-a0-af.txt`
|
||||||
|
- `captures/rcp-primer-sweep-b1-bf.tx`
|
||||||
|
- `captures/rcp-primer-sweep-c0-cf.txt`
|
||||||
|
|
||||||
|
These sweeps used a fresh power cycle before each candidate, with the standard
|
||||||
|
primer shape before the selected request:
|
||||||
|
|
||||||
|
```text
|
||||||
|
primer: 00 00 00 00 80 DA
|
||||||
|
candidate: 00 00 CMD 00 80 CHECKSUM
|
||||||
|
```
|
||||||
|
|
||||||
|
New selected-command response map:
|
||||||
|
|
||||||
|
| Selected command | Observed RCP response |
|
||||||
|
| ---: | --- |
|
||||||
|
| `A0` | `07 80 68 40 30 C5` |
|
||||||
|
| `A1` | `07 80 68 20 D8 4D` |
|
||||||
|
| `A2` | `07 80 34 10 0C F5` |
|
||||||
|
| `A3` | `07 80 34 10 2C D5` |
|
||||||
|
| `A4` | `07 80 69 40 30 C4` |
|
||||||
|
| `A5` | `07 80 69 20 D8 4C` |
|
||||||
|
| `A6` | `07 80 1A 08 C6 09` |
|
||||||
|
| `A7` | `07 80 1A 08 D6 19` |
|
||||||
|
| `A8` | `07 80 6A 40 30 C7` |
|
||||||
|
| `A9` | `07 80 6A 20 D8 4F` |
|
||||||
|
| `AA` | `07 80 35 10 0C F4` |
|
||||||
|
| `AB` | `07 80 35 10 2C D4` |
|
||||||
|
| `AC` | `07 80 6B 40 30 C6` |
|
||||||
|
| `AD` | `07 80 6B 20 D8 4E` |
|
||||||
|
| `AE` | `07 80 0D 04 A3 77` |
|
||||||
|
| `AF` | `07 80 0D 04 AB 7F` |
|
||||||
|
| `B1` | `07 80 6C 20 D8 49` |
|
||||||
|
| `B6` | `07 80 1B 08 C6 08` |
|
||||||
|
| `B7` | `07 80 1B 08 F6 38` |
|
||||||
|
| `B8` | `07 80 EE 40 30 43` |
|
||||||
|
| `B9` | `07 80 6E 20 D8 4B` |
|
||||||
|
| `BA` | `07 80 37 10 0C F6` |
|
||||||
|
| `BB` | `07 80 37 10 2C D6` |
|
||||||
|
| `BC` | `07 80 EF 40 30 42` |
|
||||||
|
| `BD` | `07 80 6F 20 D8 4A` |
|
||||||
|
| `BE` | heartbeat only |
|
||||||
|
| `BF` | heartbeat only |
|
||||||
|
| `C0` | heartbeat only |
|
||||||
|
| `C1` | `07 80 70 20 D8 55` |
|
||||||
|
| `C2` | `07 80 38 10 0C F9` |
|
||||||
|
| `C3` | `07 80 38 10 2C D9` |
|
||||||
|
| `C4` | `07 80 71 40 30 DC` |
|
||||||
|
| `C5` | `07 80 71 20 D8 54` |
|
||||||
|
| `C6` | `07 80 1C 08 C6 0F` |
|
||||||
|
| `C7` | `07 80 1C 08 D6 1F` |
|
||||||
|
| `C8` | `07 80 72 40 30 DF` |
|
||||||
|
| `C9` | `07 80 72 20 D8 57` |
|
||||||
|
| `CA` | `07 80 39 10 0C F8` |
|
||||||
|
| `CB` | `07 80 39 10 2C D8` |
|
||||||
|
| `CC` | `07 80 F3 40 30 5E` |
|
||||||
|
| `CD` | `07 80 73 20 D8 56` |
|
||||||
|
| `CE` | `07 80 0E 04 A3 74` |
|
||||||
|
| `CF` | `07 80 0E 04 AB 7C` |
|
||||||
|
|
||||||
|
Interpretation:
|
||||||
|
|
||||||
|
- The RCP has a much larger one-shot readable status/query surface than first
|
||||||
|
assumed.
|
||||||
|
- The `A0-CF` region looks highly structured. Most commands return stable
|
||||||
|
six-byte responses with the same `07 80` prefix and valid XOR checksum.
|
||||||
|
- Pairs often share a response command byte and differ in state/value fields:
|
||||||
|
`A0/A1`, `A2/A3`, `A4/A5`, `A6/A7`, and similar patterns continue through
|
||||||
|
the `B` and `C` regions.
|
||||||
|
- `BE`, `BF`, and `C0` are current no-response candidates in this mapping.
|
||||||
|
- This strongly supports a discovery/status table model: the CCU may read a
|
||||||
|
specific set of one-shot blocks, then choose a later activation/session
|
||||||
|
command based on the returned table values.
|
||||||
|
|
||||||
|
### 2026-05-13 Paused Direct Sweep Result
|
||||||
|
|
||||||
|
Capture:
|
||||||
|
|
||||||
|
- `captures/rcp-direct-remaining-after-b5-pause.txt`
|
||||||
|
|
||||||
|
The paused direct sweep logged anomalies and then allowed a manual power cycle
|
||||||
|
before continuing. Because the script continues with the next command after the
|
||||||
|
pause, this run is useful for finding response-producing commands, but it is
|
||||||
|
not a clean `00 -> B5 -> candidate` post-discovery sweep.
|
||||||
|
|
||||||
|
Response hits observed in this run:
|
||||||
|
|
||||||
|
| Command at anomaly | Observed RCP response | Caution |
|
||||||
|
| ---: | --- | --- |
|
||||||
|
| `B5` | `07 80 6D 20 D8 48` | expected known query response |
|
||||||
|
| `40` | `07 80 50 40 30 FD` | repeated twice in this run |
|
||||||
|
| `6D` | `07 80 5B 20 D8 7E` | may depend on prior `6C` |
|
||||||
|
| `4F` | `07 80 0A 04 AB 78` | needs clean one-per-boot confirmation |
|
||||||
|
| `8F` | `07 80 0C 04 AB 7E` | may depend on prior sequence |
|
||||||
|
| `A0` | `07 80 E8 40 30 45` | differs from primer-sweep `A0` response |
|
||||||
|
| `B0` | `07 80 6C 40 30 C1` | known response |
|
||||||
|
| `CF` | `07 80 0E 04 AB 7C` | matches primer-sweep `CF` response |
|
||||||
|
| `EF` | `07 80 0F 04 EB 3D` | needs clean one-per-boot confirmation |
|
||||||
|
| `B1` | `07 80 6C 20 D8 49` | known response |
|
||||||
|
| `B3` | `07 80 36 10 2C D7` | known response |
|
||||||
|
| `B6` | `07 80 1B 08 C6 08` | known response |
|
||||||
|
| `B8` | `07 80 6E 40 30 C3` | differs from primer-sweep `B8` response |
|
||||||
|
| `BA` | `07 80 37 10 0C F6` | matches primer-sweep `BA` response |
|
||||||
|
| `BC` | `07 80 6F 40 30 C2` | differs from primer-sweep `BC` response |
|
||||||
|
|
||||||
|
Next confirmations:
|
||||||
|
|
||||||
|
- Retest `40`, `4F`, `8F`, `EF`, and the differing `A0/B8/BC` cases as clean
|
||||||
|
one-per-boot primer pairs.
|
||||||
|
- If a response differs between a plain/direct command and a primer-pair query,
|
||||||
|
treat the first host frame as a mode/context selector rather than only a
|
||||||
|
generic wake-up primer.
|
||||||
|
|||||||
BIN
scripts/__pycache__/serial_direct_response_sweep.cpython-312.pyc
Normal file
BIN
scripts/__pycache__/serial_direct_response_sweep.cpython-312.pyc
Normal file
Binary file not shown.
@@ -58,7 +58,7 @@ def parse_byte_set(text: str) -> list[int]:
|
|||||||
values.append(parse_byte(part))
|
values.append(parse_byte(part))
|
||||||
if not values:
|
if not values:
|
||||||
raise argparse.ArgumentTypeError("empty byte set")
|
raise argparse.ArgumentTypeError("empty byte set")
|
||||||
return list(dict.fromkeys(values))
|
return values
|
||||||
|
|
||||||
|
|
||||||
def build_frame(prefix1: int, prefix2: int, command: int, state: int, value: int) -> bytes:
|
def build_frame(prefix1: int, prefix2: int, command: int, state: int, value: int) -> bytes:
|
||||||
@@ -159,6 +159,11 @@ def parse_args() -> argparse.Namespace:
|
|||||||
parser.add_argument("--log", help="append sweep log to this file")
|
parser.add_argument("--log", help="append sweep log to this file")
|
||||||
parser.add_argument("--dry-run", action="store_true")
|
parser.add_argument("--dry-run", action="store_true")
|
||||||
parser.add_argument("--stop-on-anomaly", action="store_true")
|
parser.add_argument("--stop-on-anomaly", action="store_true")
|
||||||
|
parser.add_argument(
|
||||||
|
"--pause-on-anomaly",
|
||||||
|
action="store_true",
|
||||||
|
help="after logging an anomaly, wait for Enter so the RCP can be power-cycled before continuing",
|
||||||
|
)
|
||||||
parser.add_argument("--verbose-heartbeat", action="store_true")
|
parser.add_argument("--verbose-heartbeat", action="store_true")
|
||||||
parser.add_argument("--cycles", type=int, default=1)
|
parser.add_argument("--cycles", type=int, default=1)
|
||||||
parser.add_argument("--cycle-pause", type=float, default=0.0)
|
parser.add_argument("--cycle-pause", type=float, default=0.0)
|
||||||
@@ -171,6 +176,18 @@ def parse_args() -> argparse.Namespace:
|
|||||||
return parser.parse_args()
|
return parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
|
def pause_after_anomaly(ser: serial.Serial, emit, label: str) -> bool:
|
||||||
|
answer = input(
|
||||||
|
f"{label}: anomaly logged. Power-cycle RCP, wait for heartbeat, "
|
||||||
|
"then press Enter to continue (q then Enter to stop): "
|
||||||
|
).strip()
|
||||||
|
if answer.lower() in {"q", "quit", "stop"}:
|
||||||
|
emit("Stopped after anomaly pause.")
|
||||||
|
return False
|
||||||
|
ser.reset_input_buffer()
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
def main() -> int:
|
def main() -> int:
|
||||||
args = parse_args()
|
args = parse_args()
|
||||||
if args.cycles < 1:
|
if args.cycles < 1:
|
||||||
@@ -253,6 +270,13 @@ def main() -> int:
|
|||||||
emit("Stopping after anomaly.")
|
emit("Stopping after anomaly.")
|
||||||
should_stop = True
|
should_stop = True
|
||||||
break
|
break
|
||||||
|
if args.pause_on_anomaly and not pause_after_anomaly(
|
||||||
|
ser,
|
||||||
|
emit,
|
||||||
|
f"cmd=0x{command:02X}",
|
||||||
|
):
|
||||||
|
should_stop = True
|
||||||
|
break
|
||||||
elif args.verbose_heartbeat:
|
elif args.verbose_heartbeat:
|
||||||
emit(f"{stamp} {note}")
|
emit(f"{stamp} {note}")
|
||||||
|
|
||||||
@@ -269,6 +293,12 @@ def main() -> int:
|
|||||||
if args.stop_on_anomaly:
|
if args.stop_on_anomaly:
|
||||||
emit("Stopping after anomaly.")
|
emit("Stopping after anomaly.")
|
||||||
break
|
break
|
||||||
|
if args.pause_on_anomaly and not pause_after_anomaly(
|
||||||
|
ser,
|
||||||
|
emit,
|
||||||
|
f"cycle {cycle} pause",
|
||||||
|
):
|
||||||
|
break
|
||||||
|
|
||||||
final_rx = read_window(ser, args.after)
|
final_rx = read_window(ser, args.after)
|
||||||
final_anomaly, final_note = classify_rx(final_rx)
|
final_anomaly, final_note = classify_rx(final_rx)
|
||||||
|
|||||||
201
scripts/serial_keepalive_after_query.py
Normal file
201
scripts/serial_keepalive_after_query.py
Normal file
@@ -0,0 +1,201 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Send discovery query, then repeat a candidate host keepalive frame.
|
||||||
|
|
||||||
|
This tests the hypothesis that the RCP enters CONNECT NOT ACT because it sees
|
||||||
|
some host traffic but does not receive the expected ongoing CCU heartbeat.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import datetime as dt
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
|
||||||
|
try:
|
||||||
|
import serial
|
||||||
|
except ImportError:
|
||||||
|
print(
|
||||||
|
"Missing dependency: pyserial\n"
|
||||||
|
"Install it with: python -m pip install pyserial",
|
||||||
|
file=sys.stderr,
|
||||||
|
)
|
||||||
|
raise SystemExit(2)
|
||||||
|
|
||||||
|
|
||||||
|
HEARTBEAT = bytes.fromhex("00 00 00 00 80 DA")
|
||||||
|
|
||||||
|
|
||||||
|
def parse_byte(text: str) -> int:
|
||||||
|
value = int(text, 0)
|
||||||
|
if not 0 <= value <= 0xFF:
|
||||||
|
raise argparse.ArgumentTypeError(f"must be a byte: {text}")
|
||||||
|
return value
|
||||||
|
|
||||||
|
|
||||||
|
def parse_hex_bytes(text: str) -> bytes:
|
||||||
|
parts = text.replace(",", " ").replace("0x", "").replace("0X", "").split()
|
||||||
|
values = [int(part, 16) for part in parts]
|
||||||
|
if not values:
|
||||||
|
raise argparse.ArgumentTypeError("hex frame cannot be empty")
|
||||||
|
if any(value < 0 or value > 0xFF for value in values):
|
||||||
|
raise argparse.ArgumentTypeError("hex values must be bytes")
|
||||||
|
return bytes(values)
|
||||||
|
|
||||||
|
|
||||||
|
def build_frame(prefix1: int, prefix2: int, command: int, state: int, value: int) -> bytes:
|
||||||
|
body = bytes([prefix1, prefix2, command, state, value])
|
||||||
|
checksum = 0x5A
|
||||||
|
for byte in body:
|
||||||
|
checksum ^= byte
|
||||||
|
return body + bytes([checksum])
|
||||||
|
|
||||||
|
|
||||||
|
def hex_preview(data: bytes) -> str:
|
||||||
|
return " ".join(f"{byte:02X}" for byte in data)
|
||||||
|
|
||||||
|
|
||||||
|
def make_logger(path: str | None):
|
||||||
|
log_file = open(path, "a", encoding="utf-8") if path else None
|
||||||
|
|
||||||
|
def emit(line: str) -> None:
|
||||||
|
print(line)
|
||||||
|
if log_file:
|
||||||
|
log_file.write(line + "\n")
|
||||||
|
log_file.flush()
|
||||||
|
|
||||||
|
return emit, log_file
|
||||||
|
|
||||||
|
|
||||||
|
def heartbeat_offset(data: bytes) -> int | None:
|
||||||
|
if not data:
|
||||||
|
return 0
|
||||||
|
for offset in range(len(HEARTBEAT)):
|
||||||
|
if all(byte == HEARTBEAT[(offset + index) % len(HEARTBEAT)] for index, byte in enumerate(data)):
|
||||||
|
return offset
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def classify_rx(data: bytes) -> str:
|
||||||
|
if not data:
|
||||||
|
return "no RX bytes"
|
||||||
|
offset = heartbeat_offset(data)
|
||||||
|
if offset is not None:
|
||||||
|
full = len(data) // len(HEARTBEAT)
|
||||||
|
extra = len(data) % len(HEARTBEAT)
|
||||||
|
return f"heartbeat-compatible RX: {len(data)} bytes, offset {offset}, {full} frames + {extra} bytes"
|
||||||
|
return f"NON_HEARTBEAT RX: {len(data)} bytes {hex_preview(data)}"
|
||||||
|
|
||||||
|
|
||||||
|
def read_window(ser: serial.Serial, duration: float) -> bytes:
|
||||||
|
stop_at = time.monotonic() + duration
|
||||||
|
data = bytearray()
|
||||||
|
while time.monotonic() < stop_at:
|
||||||
|
chunk = ser.read(128)
|
||||||
|
if chunk:
|
||||||
|
data.extend(chunk)
|
||||||
|
return bytes(data)
|
||||||
|
|
||||||
|
|
||||||
|
def parse_args() -> argparse.Namespace:
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="Send discovery query, then repeat a candidate keepalive frame."
|
||||||
|
)
|
||||||
|
parser.add_argument("--port", required=True, help="serial port, for example COM5")
|
||||||
|
parser.add_argument("--baud", type=int, default=38400)
|
||||||
|
parser.add_argument("--primer-command", type=parse_byte, default=0x00)
|
||||||
|
parser.add_argument("--query-command", type=parse_byte, default=0xB5)
|
||||||
|
parser.add_argument("--state", type=parse_byte, default=0x00)
|
||||||
|
parser.add_argument("--value", type=parse_byte, default=0x80)
|
||||||
|
parser.add_argument(
|
||||||
|
"--keepalive-frame",
|
||||||
|
type=parse_hex_bytes,
|
||||||
|
help="explicit keepalive frame; default builds from --keepalive-command",
|
||||||
|
)
|
||||||
|
parser.add_argument("--keepalive-command", type=parse_byte, default=0x00)
|
||||||
|
parser.add_argument("--duration", type=float, default=10.0)
|
||||||
|
parser.add_argument("--interval", type=float, default=0.6)
|
||||||
|
parser.add_argument("--settle", type=float, default=3.0)
|
||||||
|
parser.add_argument("--after-query", type=float, default=2.0)
|
||||||
|
parser.add_argument("--timeout", type=float, default=0.03)
|
||||||
|
parser.add_argument("--log", help="append log to this file")
|
||||||
|
parser.add_argument("--prompt-screen", action="store_true")
|
||||||
|
parser.add_argument("--dry-run", action="store_true")
|
||||||
|
return parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> int:
|
||||||
|
args = parse_args()
|
||||||
|
primer = build_frame(0x00, 0x00, args.primer_command, args.state, args.value)
|
||||||
|
query = build_frame(0x00, 0x00, args.query_command, args.state, args.value)
|
||||||
|
keepalive = args.keepalive_frame or build_frame(0x00, 0x00, args.keepalive_command, args.state, args.value)
|
||||||
|
|
||||||
|
if args.dry_run:
|
||||||
|
print(f"primer: {hex_preview(primer)}")
|
||||||
|
print(f"query: {hex_preview(query)}")
|
||||||
|
print(f"keepalive: {hex_preview(keepalive)} every {args.interval}s for {args.duration}s")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
emit, log_file = make_logger(args.log)
|
||||||
|
try:
|
||||||
|
with serial.Serial(
|
||||||
|
port=args.port,
|
||||||
|
baudrate=args.baud,
|
||||||
|
bytesize=serial.EIGHTBITS,
|
||||||
|
parity=serial.PARITY_NONE,
|
||||||
|
stopbits=serial.STOPBITS_ONE,
|
||||||
|
timeout=args.timeout,
|
||||||
|
write_timeout=1.0,
|
||||||
|
rtscts=False,
|
||||||
|
dsrdtr=False,
|
||||||
|
xonxoff=False,
|
||||||
|
) as ser:
|
||||||
|
ser.reset_input_buffer()
|
||||||
|
emit(f"Keepalive-after-query on {ser.port} at {ser.baudrate} 8N1")
|
||||||
|
emit(f"Primer {hex_preview(primer)}; query {hex_preview(query)}; keepalive {hex_preview(keepalive)}")
|
||||||
|
emit(f"BASELINE {classify_rx(read_window(ser, args.settle))}")
|
||||||
|
|
||||||
|
stamp = dt.datetime.now().strftime("%H:%M:%S.%f")[:-3]
|
||||||
|
emit(f"{stamp} TX primer {hex_preview(primer)}")
|
||||||
|
ser.write(primer)
|
||||||
|
ser.flush()
|
||||||
|
emit(f"{stamp} PRIMER RX {classify_rx(read_window(ser, args.interval))}")
|
||||||
|
|
||||||
|
stamp = dt.datetime.now().strftime("%H:%M:%S.%f")[:-3]
|
||||||
|
emit(f"{stamp} TX query {hex_preview(query)}")
|
||||||
|
ser.write(query)
|
||||||
|
ser.flush()
|
||||||
|
emit(f"{stamp} QUERY RX {classify_rx(read_window(ser, args.after_query))}")
|
||||||
|
|
||||||
|
stop_at = time.monotonic() + args.duration
|
||||||
|
count = 0
|
||||||
|
while time.monotonic() < stop_at:
|
||||||
|
stamp = dt.datetime.now().strftime("%H:%M:%S.%f")[:-3]
|
||||||
|
ser.write(keepalive)
|
||||||
|
ser.flush()
|
||||||
|
count += 1
|
||||||
|
emit(f"{stamp} TX keepalive {count:03d} {hex_preview(keepalive)}")
|
||||||
|
rx = read_window(ser, min(args.interval, max(0.0, stop_at - time.monotonic())))
|
||||||
|
if rx:
|
||||||
|
emit(f"{stamp} KEEPALIVE RX {classify_rx(rx)}")
|
||||||
|
|
||||||
|
if args.prompt_screen:
|
||||||
|
screen = input("Screen after keepalive run (blank = no change): ").strip()
|
||||||
|
if screen:
|
||||||
|
stamp = dt.datetime.now().strftime("%H:%M:%S.%f")[:-3]
|
||||||
|
emit(f"{stamp} SCREEN {screen}")
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
emit("Stopped.")
|
||||||
|
return 0
|
||||||
|
except serial.SerialException as exc:
|
||||||
|
print(f"Serial error: {exc}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
finally:
|
||||||
|
if log_file:
|
||||||
|
log_file.close()
|
||||||
|
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
raise SystemExit(main())
|
||||||
302
scripts/serial_post_discovery_sweep.py
Normal file
302
scripts/serial_post_discovery_sweep.py
Normal file
@@ -0,0 +1,302 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Sweep candidate commands after a known RCP-TX7 discovery response.
|
||||||
|
|
||||||
|
Current working sequence:
|
||||||
|
|
||||||
|
primer -> discovery query -> RCP response -> candidate next-stage command
|
||||||
|
|
||||||
|
By default this uses:
|
||||||
|
|
||||||
|
primer: 00 00 00 00 80 DA
|
||||||
|
query: 00 00 B5 00 80 6F
|
||||||
|
|
||||||
|
Use --prompt-power-cycle for clean testing because the RCP appears to latch after
|
||||||
|
one selected query response per powered session.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import datetime as dt
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
|
||||||
|
try:
|
||||||
|
import serial
|
||||||
|
except ImportError:
|
||||||
|
print(
|
||||||
|
"Missing dependency: pyserial\n"
|
||||||
|
"Install it with: python -m pip install pyserial",
|
||||||
|
file=sys.stderr,
|
||||||
|
)
|
||||||
|
raise SystemExit(2)
|
||||||
|
|
||||||
|
|
||||||
|
HEARTBEAT = bytes.fromhex("00 00 00 00 80 DA")
|
||||||
|
|
||||||
|
|
||||||
|
def parse_byte(text: str) -> int:
|
||||||
|
value = int(text, 0)
|
||||||
|
if not 0 <= value <= 0xFF:
|
||||||
|
raise argparse.ArgumentTypeError(f"must be a byte: {text}")
|
||||||
|
return value
|
||||||
|
|
||||||
|
|
||||||
|
def parse_byte_set(text: str) -> list[int]:
|
||||||
|
values: list[int] = []
|
||||||
|
for part in text.replace(",", " ").split():
|
||||||
|
if "-" in part:
|
||||||
|
start_text, end_text = part.split("-", 1)
|
||||||
|
start = parse_byte(start_text)
|
||||||
|
end = parse_byte(end_text)
|
||||||
|
if end < start:
|
||||||
|
raise argparse.ArgumentTypeError(f"bad range: {part}")
|
||||||
|
values.extend(range(start, end + 1))
|
||||||
|
else:
|
||||||
|
values.append(parse_byte(part))
|
||||||
|
if not values:
|
||||||
|
raise argparse.ArgumentTypeError("empty byte set")
|
||||||
|
return values
|
||||||
|
|
||||||
|
|
||||||
|
def build_frame(prefix1: int, prefix2: int, command: int, state: int, value: int) -> bytes:
|
||||||
|
body = bytes([prefix1, prefix2, command, state, value])
|
||||||
|
checksum = 0x5A
|
||||||
|
for byte in body:
|
||||||
|
checksum ^= byte
|
||||||
|
return body + bytes([checksum])
|
||||||
|
|
||||||
|
|
||||||
|
def hex_preview(data: bytes) -> str:
|
||||||
|
return " ".join(f"{byte:02X}" for byte in data)
|
||||||
|
|
||||||
|
|
||||||
|
def make_logger(path: str | None):
|
||||||
|
log_file = open(path, "a", encoding="utf-8") if path else None
|
||||||
|
|
||||||
|
def emit(line: str) -> None:
|
||||||
|
print(line)
|
||||||
|
if log_file:
|
||||||
|
log_file.write(line + "\n")
|
||||||
|
log_file.flush()
|
||||||
|
|
||||||
|
return emit, log_file
|
||||||
|
|
||||||
|
|
||||||
|
def heartbeat_offset(data: bytes) -> int | None:
|
||||||
|
if not data:
|
||||||
|
return 0
|
||||||
|
for offset in range(len(HEARTBEAT)):
|
||||||
|
if all(byte == HEARTBEAT[(offset + index) % len(HEARTBEAT)] for index, byte in enumerate(data)):
|
||||||
|
return offset
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def first_mismatch(data: bytes, offset: int) -> tuple[int, int, int] | None:
|
||||||
|
for index, byte in enumerate(data):
|
||||||
|
expected = HEARTBEAT[(offset + index) % len(HEARTBEAT)]
|
||||||
|
if byte != expected:
|
||||||
|
return index, byte, expected
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def classify_rx(data: bytes) -> tuple[bool, str]:
|
||||||
|
if not data:
|
||||||
|
return False, "no RX bytes"
|
||||||
|
|
||||||
|
offset = heartbeat_offset(data)
|
||||||
|
if offset is not None:
|
||||||
|
full = len(data) // len(HEARTBEAT)
|
||||||
|
extra = len(data) % len(HEARTBEAT)
|
||||||
|
return False, f"heartbeat-compatible RX: {len(data)} bytes, offset {offset}, {full} frames + {extra} bytes"
|
||||||
|
|
||||||
|
best_offset = min(
|
||||||
|
range(len(HEARTBEAT)),
|
||||||
|
key=lambda candidate: sum(
|
||||||
|
byte != HEARTBEAT[(candidate + index) % len(HEARTBEAT)]
|
||||||
|
for index, byte in enumerate(data)
|
||||||
|
),
|
||||||
|
)
|
||||||
|
mismatch = first_mismatch(data, best_offset)
|
||||||
|
if mismatch is None:
|
||||||
|
return False, "heartbeat-compatible RX"
|
||||||
|
|
||||||
|
index, byte, expected = mismatch
|
||||||
|
return (
|
||||||
|
True,
|
||||||
|
f"ANOMALY {len(data)} RX bytes; first mismatch at byte {index}: "
|
||||||
|
f"got {byte:02X}, heartbeat offset {best_offset} expected {expected:02X}",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def read_window(ser: serial.Serial, duration: float) -> bytes:
|
||||||
|
stop_at = time.monotonic() + duration
|
||||||
|
data = bytearray()
|
||||||
|
while time.monotonic() < stop_at:
|
||||||
|
chunk = ser.read(128)
|
||||||
|
if chunk:
|
||||||
|
data.extend(chunk)
|
||||||
|
return bytes(data)
|
||||||
|
|
||||||
|
|
||||||
|
def emit_rx(emit, label: str, data: bytes) -> bool:
|
||||||
|
is_anomaly, note = classify_rx(data)
|
||||||
|
emit(f"{label} {note}")
|
||||||
|
if is_anomaly:
|
||||||
|
emit(f"{label} raw {hex_preview(data)}")
|
||||||
|
return is_anomaly
|
||||||
|
|
||||||
|
|
||||||
|
def parse_args() -> argparse.Namespace:
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="Sweep next-stage commands after a known discovery query."
|
||||||
|
)
|
||||||
|
parser.add_argument("--port", required=True, help="serial port, for example COM5")
|
||||||
|
parser.add_argument("--baud", type=int, default=38400)
|
||||||
|
parser.add_argument("--prefix1", type=parse_byte, default=0x00)
|
||||||
|
parser.add_argument("--prefix2", type=parse_byte, default=0x00)
|
||||||
|
parser.add_argument("--primer-command", type=parse_byte, default=0x00)
|
||||||
|
parser.add_argument("--primer-state", type=parse_byte, default=0x00)
|
||||||
|
parser.add_argument("--primer-value", type=parse_byte, default=0x80)
|
||||||
|
parser.add_argument("--query-command", type=parse_byte, default=0xB5)
|
||||||
|
parser.add_argument("--query-state", type=parse_byte, default=0x00)
|
||||||
|
parser.add_argument("--query-value", type=parse_byte, default=0x80)
|
||||||
|
parser.add_argument("--candidates", type=parse_byte_set, required=True)
|
||||||
|
parser.add_argument("--candidate-state", type=parse_byte, default=0x00)
|
||||||
|
parser.add_argument("--candidate-value", type=parse_byte, default=0x80)
|
||||||
|
parser.add_argument("--settle", type=float, default=3.0)
|
||||||
|
parser.add_argument("--between", type=float, default=0.8)
|
||||||
|
parser.add_argument("--after-query", type=float, default=1.2)
|
||||||
|
parser.add_argument("--after-candidate", type=float, default=2.0)
|
||||||
|
parser.add_argument("--timeout", type=float, default=0.03)
|
||||||
|
parser.add_argument("--log", help="append sweep log to this file")
|
||||||
|
parser.add_argument("--dry-run", action="store_true")
|
||||||
|
parser.add_argument("--prompt-power-cycle", action="store_true")
|
||||||
|
parser.add_argument("--prompt-screen", action="store_true")
|
||||||
|
parser.add_argument("--stop-on-candidate-anomaly", action="store_true")
|
||||||
|
return parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> int:
|
||||||
|
args = parse_args()
|
||||||
|
primer = build_frame(
|
||||||
|
args.prefix1,
|
||||||
|
args.prefix2,
|
||||||
|
args.primer_command,
|
||||||
|
args.primer_state,
|
||||||
|
args.primer_value,
|
||||||
|
)
|
||||||
|
query = build_frame(
|
||||||
|
args.prefix1,
|
||||||
|
args.prefix2,
|
||||||
|
args.query_command,
|
||||||
|
args.query_state,
|
||||||
|
args.query_value,
|
||||||
|
)
|
||||||
|
candidates = [
|
||||||
|
(
|
||||||
|
command,
|
||||||
|
build_frame(
|
||||||
|
args.prefix1,
|
||||||
|
args.prefix2,
|
||||||
|
command,
|
||||||
|
args.candidate_state,
|
||||||
|
args.candidate_value,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
for command in args.candidates
|
||||||
|
]
|
||||||
|
|
||||||
|
if args.dry_run:
|
||||||
|
print(f"primer cmd 0x{args.primer_command:02X}: {hex_preview(primer)}")
|
||||||
|
print(f"query cmd 0x{args.query_command:02X}: {hex_preview(query)}")
|
||||||
|
for command, frame in candidates:
|
||||||
|
print(f"candidate 0x{command:02X}: {hex_preview(frame)}")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
emit, log_file = make_logger(args.log)
|
||||||
|
try:
|
||||||
|
with serial.Serial(
|
||||||
|
port=args.port,
|
||||||
|
baudrate=args.baud,
|
||||||
|
bytesize=serial.EIGHTBITS,
|
||||||
|
parity=serial.PARITY_NONE,
|
||||||
|
stopbits=serial.STOPBITS_ONE,
|
||||||
|
timeout=args.timeout,
|
||||||
|
write_timeout=1.0,
|
||||||
|
rtscts=False,
|
||||||
|
dsrdtr=False,
|
||||||
|
xonxoff=False,
|
||||||
|
) as ser:
|
||||||
|
emit(
|
||||||
|
f"Post-discovery sweep: primer {hex_preview(primer)}, "
|
||||||
|
f"query {hex_preview(query)}, {len(candidates)} candidates "
|
||||||
|
f"on {ser.port} at {ser.baudrate} 8N1"
|
||||||
|
)
|
||||||
|
|
||||||
|
for index, (command, candidate) in enumerate(candidates, start=1):
|
||||||
|
if args.prompt_power_cycle:
|
||||||
|
answer = input(
|
||||||
|
f"Power-cycle RCP for candidate 0x{command:02X}, wait for heartbeat, "
|
||||||
|
"then press Enter (q then Enter to stop): "
|
||||||
|
).strip()
|
||||||
|
if answer.lower() in {"q", "quit", "stop"}:
|
||||||
|
emit("Stopped before next candidate.")
|
||||||
|
break
|
||||||
|
|
||||||
|
ser.reset_input_buffer()
|
||||||
|
emit_rx(emit, f"CANDIDATE 0x{command:02X} BASELINE", read_window(ser, args.settle))
|
||||||
|
|
||||||
|
stamp = dt.datetime.now().strftime("%H:%M:%S.%f")[:-3]
|
||||||
|
emit(f"{stamp} TX primer frame {len(primer):03d} {hex_preview(primer)}")
|
||||||
|
ser.write(primer)
|
||||||
|
ser.flush()
|
||||||
|
emit_rx(emit, f"{stamp} PRIMER RX", read_window(ser, args.between))
|
||||||
|
|
||||||
|
stamp = dt.datetime.now().strftime("%H:%M:%S.%f")[:-3]
|
||||||
|
emit(f"{stamp} TX query 0x{args.query_command:02X} frame {len(query):03d} {hex_preview(query)}")
|
||||||
|
ser.write(query)
|
||||||
|
ser.flush()
|
||||||
|
emit_rx(emit, f"{stamp} QUERY RX", read_window(ser, args.after_query))
|
||||||
|
|
||||||
|
stamp = dt.datetime.now().strftime("%H:%M:%S.%f")[:-3]
|
||||||
|
emit(f"{stamp} TX candidate 0x{command:02X} frame {len(candidate):03d} {hex_preview(candidate)}")
|
||||||
|
ser.write(candidate)
|
||||||
|
ser.flush()
|
||||||
|
candidate_anomaly = emit_rx(
|
||||||
|
emit,
|
||||||
|
f"{stamp} CANDIDATE 0x{command:02X} RX",
|
||||||
|
read_window(ser, args.after_candidate),
|
||||||
|
)
|
||||||
|
|
||||||
|
if args.prompt_screen:
|
||||||
|
screen = input(
|
||||||
|
f"Screen after candidate 0x{command:02X} "
|
||||||
|
"(blank = no change, q = stop): "
|
||||||
|
).strip()
|
||||||
|
if screen:
|
||||||
|
stamp = dt.datetime.now().strftime("%H:%M:%S.%f")[:-3]
|
||||||
|
emit(f"{stamp} SCREEN candidate=0x{command:02X} {screen}")
|
||||||
|
if screen.lower() in {"q", "quit", "stop"}:
|
||||||
|
break
|
||||||
|
|
||||||
|
if candidate_anomaly and args.stop_on_candidate_anomaly:
|
||||||
|
emit("Stopping after candidate anomaly.")
|
||||||
|
break
|
||||||
|
|
||||||
|
emit(f"Completed candidate {index}/{len(candidates)}")
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
emit("Stopped.")
|
||||||
|
return 0
|
||||||
|
except serial.SerialException as exc:
|
||||||
|
print(f"Serial error: {exc}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
finally:
|
||||||
|
if log_file:
|
||||||
|
log_file.close()
|
||||||
|
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
raise SystemExit(main())
|
||||||
278
scripts/serial_primer_candidate_sweep.py
Normal file
278
scripts/serial_primer_candidate_sweep.py
Normal file
@@ -0,0 +1,278 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Sweep RCP-TX7 primer -> candidate query pairs.
|
||||||
|
|
||||||
|
The current working model is that a valid host frame primes the RCP and the next
|
||||||
|
host frame selects a status/query response. This helper sends one primer frame
|
||||||
|
followed by one candidate frame and classifies raw pin-4 RX against the known
|
||||||
|
heartbeat stream.
|
||||||
|
|
||||||
|
Use --prompt-power-cycle for clean mapping: power-cycle the RCP before each
|
||||||
|
candidate, press Enter, then the script sends exactly one primer/candidate pair.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import datetime as dt
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
|
||||||
|
try:
|
||||||
|
import serial
|
||||||
|
except ImportError:
|
||||||
|
print(
|
||||||
|
"Missing dependency: pyserial\n"
|
||||||
|
"Install it with: python -m pip install pyserial",
|
||||||
|
file=sys.stderr,
|
||||||
|
)
|
||||||
|
raise SystemExit(2)
|
||||||
|
|
||||||
|
|
||||||
|
HEARTBEAT = bytes.fromhex("00 00 00 00 80 DA")
|
||||||
|
|
||||||
|
|
||||||
|
def parse_byte(text: str) -> int:
|
||||||
|
value = int(text, 0)
|
||||||
|
if not 0 <= value <= 0xFF:
|
||||||
|
raise argparse.ArgumentTypeError(f"must be a byte: {text}")
|
||||||
|
return value
|
||||||
|
|
||||||
|
|
||||||
|
def parse_byte_set(text: str) -> list[int]:
|
||||||
|
values: list[int] = []
|
||||||
|
for part in text.replace(",", " ").split():
|
||||||
|
if "-" in part:
|
||||||
|
start_text, end_text = part.split("-", 1)
|
||||||
|
start = parse_byte(start_text)
|
||||||
|
end = parse_byte(end_text)
|
||||||
|
if end < start:
|
||||||
|
raise argparse.ArgumentTypeError(f"bad range: {part}")
|
||||||
|
values.extend(range(start, end + 1))
|
||||||
|
else:
|
||||||
|
values.append(parse_byte(part))
|
||||||
|
if not values:
|
||||||
|
raise argparse.ArgumentTypeError("empty byte set")
|
||||||
|
return list(dict.fromkeys(values))
|
||||||
|
|
||||||
|
|
||||||
|
def build_frame(prefix1: int, prefix2: int, command: int, state: int, value: int) -> bytes:
|
||||||
|
body = bytes([prefix1, prefix2, command, state, value])
|
||||||
|
checksum = 0x5A
|
||||||
|
for byte in body:
|
||||||
|
checksum ^= byte
|
||||||
|
return body + bytes([checksum])
|
||||||
|
|
||||||
|
|
||||||
|
def hex_preview(data: bytes) -> str:
|
||||||
|
return " ".join(f"{byte:02X}" for byte in data)
|
||||||
|
|
||||||
|
|
||||||
|
def make_logger(path: str | None):
|
||||||
|
log_file = open(path, "a", encoding="utf-8") if path else None
|
||||||
|
|
||||||
|
def emit(line: str) -> None:
|
||||||
|
print(line)
|
||||||
|
if log_file:
|
||||||
|
log_file.write(line + "\n")
|
||||||
|
log_file.flush()
|
||||||
|
|
||||||
|
return emit, log_file
|
||||||
|
|
||||||
|
|
||||||
|
def heartbeat_offset(data: bytes) -> int | None:
|
||||||
|
if not data:
|
||||||
|
return 0
|
||||||
|
for offset in range(len(HEARTBEAT)):
|
||||||
|
if all(byte == HEARTBEAT[(offset + index) % len(HEARTBEAT)] for index, byte in enumerate(data)):
|
||||||
|
return offset
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def first_mismatch(data: bytes, offset: int) -> tuple[int, int, int] | None:
|
||||||
|
for index, byte in enumerate(data):
|
||||||
|
expected = HEARTBEAT[(offset + index) % len(HEARTBEAT)]
|
||||||
|
if byte != expected:
|
||||||
|
return index, byte, expected
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def classify_rx(data: bytes) -> tuple[bool, str]:
|
||||||
|
if not data:
|
||||||
|
return False, "no RX bytes"
|
||||||
|
|
||||||
|
offset = heartbeat_offset(data)
|
||||||
|
if offset is not None:
|
||||||
|
full = len(data) // len(HEARTBEAT)
|
||||||
|
extra = len(data) % len(HEARTBEAT)
|
||||||
|
return False, f"heartbeat-compatible RX: {len(data)} bytes, offset {offset}, {full} frames + {extra} bytes"
|
||||||
|
|
||||||
|
best_offset = min(
|
||||||
|
range(len(HEARTBEAT)),
|
||||||
|
key=lambda candidate: sum(
|
||||||
|
byte != HEARTBEAT[(candidate + index) % len(HEARTBEAT)]
|
||||||
|
for index, byte in enumerate(data)
|
||||||
|
),
|
||||||
|
)
|
||||||
|
mismatch = first_mismatch(data, best_offset)
|
||||||
|
if mismatch is None:
|
||||||
|
return False, "heartbeat-compatible RX"
|
||||||
|
|
||||||
|
index, byte, expected = mismatch
|
||||||
|
return (
|
||||||
|
True,
|
||||||
|
f"ANOMALY {len(data)} RX bytes; first mismatch at byte {index}: "
|
||||||
|
f"got {byte:02X}, heartbeat offset {best_offset} expected {expected:02X}",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def read_window(ser: serial.Serial, duration: float) -> bytes:
|
||||||
|
stop_at = time.monotonic() + duration
|
||||||
|
data = bytearray()
|
||||||
|
while time.monotonic() < stop_at:
|
||||||
|
chunk = ser.read(128)
|
||||||
|
if chunk:
|
||||||
|
data.extend(chunk)
|
||||||
|
return bytes(data)
|
||||||
|
|
||||||
|
|
||||||
|
def parse_args() -> argparse.Namespace:
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="Sweep primer->candidate pairs and log non-heartbeat raw RX."
|
||||||
|
)
|
||||||
|
parser.add_argument("--port", required=True, help="serial port, for example COM5")
|
||||||
|
parser.add_argument("--baud", type=int, default=38400)
|
||||||
|
parser.add_argument("--prefix1", type=parse_byte, default=0x00)
|
||||||
|
parser.add_argument("--prefix2", type=parse_byte, default=0x00)
|
||||||
|
parser.add_argument("--primer-command", type=parse_byte, default=0x00)
|
||||||
|
parser.add_argument("--primer-state", type=parse_byte, default=0x00)
|
||||||
|
parser.add_argument("--primer-value", type=parse_byte, default=0x80)
|
||||||
|
parser.add_argument("--candidates", type=parse_byte_set, required=True)
|
||||||
|
parser.add_argument("--candidate-state", type=parse_byte, default=0x00)
|
||||||
|
parser.add_argument("--candidate-value", type=parse_byte, default=0x80)
|
||||||
|
parser.add_argument("--settle", type=float, default=3.0)
|
||||||
|
parser.add_argument("--between", type=float, default=0.6)
|
||||||
|
parser.add_argument("--after", type=float, default=1.5)
|
||||||
|
parser.add_argument("--timeout", type=float, default=0.03)
|
||||||
|
parser.add_argument("--log", help="append sweep log to this file")
|
||||||
|
parser.add_argument("--dry-run", action="store_true")
|
||||||
|
parser.add_argument("--prompt-power-cycle", action="store_true")
|
||||||
|
parser.add_argument("--stop-on-anomaly", action="store_true")
|
||||||
|
return parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> int:
|
||||||
|
args = parse_args()
|
||||||
|
primer = build_frame(
|
||||||
|
args.prefix1,
|
||||||
|
args.prefix2,
|
||||||
|
args.primer_command,
|
||||||
|
args.primer_state,
|
||||||
|
args.primer_value,
|
||||||
|
)
|
||||||
|
candidates = [
|
||||||
|
(
|
||||||
|
command,
|
||||||
|
build_frame(
|
||||||
|
args.prefix1,
|
||||||
|
args.prefix2,
|
||||||
|
command,
|
||||||
|
args.candidate_state,
|
||||||
|
args.candidate_value,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
for command in args.candidates
|
||||||
|
]
|
||||||
|
|
||||||
|
if args.dry_run:
|
||||||
|
print(f"primer cmd 0x{args.primer_command:02X}: {hex_preview(primer)}")
|
||||||
|
for command, frame in candidates:
|
||||||
|
print(f"candidate 0x{command:02X}: {hex_preview(frame)}")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
emit, log_file = make_logger(args.log)
|
||||||
|
anomaly_count = 0
|
||||||
|
try:
|
||||||
|
with serial.Serial(
|
||||||
|
port=args.port,
|
||||||
|
baudrate=args.baud,
|
||||||
|
bytesize=serial.EIGHTBITS,
|
||||||
|
parity=serial.PARITY_NONE,
|
||||||
|
stopbits=serial.STOPBITS_ONE,
|
||||||
|
timeout=args.timeout,
|
||||||
|
write_timeout=1.0,
|
||||||
|
rtscts=False,
|
||||||
|
dsrdtr=False,
|
||||||
|
xonxoff=False,
|
||||||
|
) as ser:
|
||||||
|
emit(
|
||||||
|
f"Primer/candidate sweep: primer {hex_preview(primer)}, "
|
||||||
|
f"{len(candidates)} candidates on {ser.port} at {ser.baudrate} 8N1"
|
||||||
|
)
|
||||||
|
|
||||||
|
for index, (command, candidate) in enumerate(candidates, start=1):
|
||||||
|
if args.prompt_power_cycle:
|
||||||
|
answer = input(
|
||||||
|
f"Power-cycle RCP for candidate 0x{command:02X}, wait for heartbeat, "
|
||||||
|
"then press Enter (q then Enter to stop): "
|
||||||
|
).strip()
|
||||||
|
if answer.lower() in {"q", "quit", "stop"}:
|
||||||
|
emit("Stopped before next candidate.")
|
||||||
|
break
|
||||||
|
|
||||||
|
ser.reset_input_buffer()
|
||||||
|
baseline = read_window(ser, args.settle)
|
||||||
|
baseline_anomaly, baseline_note = classify_rx(baseline)
|
||||||
|
emit(f"CANDIDATE 0x{command:02X} BASELINE {baseline_note}")
|
||||||
|
if baseline_anomaly:
|
||||||
|
emit(f"CANDIDATE 0x{command:02X} BASELINE raw {hex_preview(baseline)}")
|
||||||
|
|
||||||
|
stamp = dt.datetime.now().strftime("%H:%M:%S.%f")[:-3]
|
||||||
|
emit(f"{stamp} TX primer frame {len(primer):03d} {hex_preview(primer)}")
|
||||||
|
ser.write(primer)
|
||||||
|
ser.flush()
|
||||||
|
primer_rx = read_window(ser, args.between)
|
||||||
|
primer_anomaly, primer_note = classify_rx(primer_rx)
|
||||||
|
if primer_anomaly:
|
||||||
|
anomaly_count += 1
|
||||||
|
emit(f"{stamp} PRIMER {primer_note}")
|
||||||
|
emit(f"{stamp} PRIMER raw {hex_preview(primer_rx)}")
|
||||||
|
if args.stop_on_anomaly:
|
||||||
|
emit("Stopping after primer anomaly.")
|
||||||
|
break
|
||||||
|
|
||||||
|
stamp = dt.datetime.now().strftime("%H:%M:%S.%f")[:-3]
|
||||||
|
emit(
|
||||||
|
f"{stamp} TX candidate 0x{command:02X} "
|
||||||
|
f"frame {len(candidate):03d} {hex_preview(candidate)}"
|
||||||
|
)
|
||||||
|
ser.write(candidate)
|
||||||
|
ser.flush()
|
||||||
|
rx = read_window(ser, args.after)
|
||||||
|
is_anomaly, note = classify_rx(rx)
|
||||||
|
if is_anomaly:
|
||||||
|
anomaly_count += 1
|
||||||
|
emit(f"{stamp} CANDIDATE 0x{command:02X} {note}")
|
||||||
|
emit(f"{stamp} CANDIDATE 0x{command:02X} raw {hex_preview(rx)}")
|
||||||
|
if args.stop_on_anomaly:
|
||||||
|
emit("Stopping after candidate anomaly.")
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
emit(f"{stamp} CANDIDATE 0x{command:02X} {note}")
|
||||||
|
|
||||||
|
emit(f"Completed candidate {index}/{len(candidates)}")
|
||||||
|
emit(f"Anomalies: {anomaly_count}")
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
emit("Stopped.")
|
||||||
|
return 0
|
||||||
|
except serial.SerialException as exc:
|
||||||
|
print(f"Serial error: {exc}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
finally:
|
||||||
|
if log_file:
|
||||||
|
log_file.close()
|
||||||
|
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
raise SystemExit(main())
|
||||||
Reference in New Issue
Block a user