Response from RCP
This commit is contained in:
17
captures/rcp-confirm-cmd-b0-raw.txt
Normal file
17
captures/rcp-confirm-cmd-b0-raw.txt
Normal file
@@ -0,0 +1,17 @@
|
||||
Listening on COM5 at 38400 8N1; will send 00 00 B0 00 80 6A after 1.5s
|
||||
12:58:47.795 RX 001 bytes 00
|
||||
12:58:47.845 RX 005 bytes 00 00 00 80 DA
|
||||
12:58:48.500 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:58:48.652 TX frame 006 00 00 B0 00 80 6A
|
||||
12:58:49.208 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:58:49.461 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:58:49.714 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:58:49.967 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:58:50.220 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:58:50.472 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:58:51.127 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:58:51.782 RX 001 bytes 00
|
||||
12:58:51.834 RX 005 bytes 00 00 00 80 DA
|
||||
12:58:52.491 RX 001 bytes 00
|
||||
12:58:52.542 RX 005 bytes 00 00 00 80 DA
|
||||
12:58:53.199 RX 006 bytes 00 00 00 00 80 DA
|
||||
15
captures/rcp-confirm-cmd-b1-raw.txt
Normal file
15
captures/rcp-confirm-cmd-b1-raw.txt
Normal file
@@ -0,0 +1,15 @@
|
||||
Listening on COM5 at 38400 8N1; will send 00 00 B1 00 80 6B after 1.5s
|
||||
12:59:05.114 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:59:05.820 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:59:05.971 TX frame 006 00 00 B1 00 80 6B
|
||||
12:59:06.525 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:59:06.777 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:59:07.031 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:59:07.283 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:59:07.535 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:59:07.787 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:59:08.393 RX 001 bytes 00
|
||||
12:59:08.444 RX 005 bytes 00 00 00 80 DA
|
||||
12:59:09.101 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:59:09.808 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:59:10.515 RX 006 bytes 00 00 00 00 80 DA
|
||||
20
captures/rcp-confirm-cmd-b4-raw.txt
Normal file
20
captures/rcp-confirm-cmd-b4-raw.txt
Normal file
@@ -0,0 +1,20 @@
|
||||
Listening on COM5 at 38400 8N1; will send 00 00 B4 00 80 6E after 1.5s
|
||||
12:55:25.765 RX 001 bytes 00
|
||||
12:55:25.817 RX 005 bytes 00 00 00 80 DA
|
||||
12:55:26.474 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:26.979 TX frame 006 00 00 B4 00 80 6E
|
||||
12:55:27.180 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:27.433 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:27.685 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:27.938 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:28.190 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:28.442 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:28.694 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:28.948 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:29.558 RX 001 bytes 00
|
||||
12:55:29.608 RX 005 bytes 00 00 00 80 DA
|
||||
12:55:30.261 RX 001 bytes 00
|
||||
12:55:30.312 RX 005 bytes 00 00 00 80 DA
|
||||
12:55:30.968 RX 001 bytes 00
|
||||
12:55:31.018 RX 005 bytes 00 00 00 80 DA
|
||||
12:55:31.676 RX 006 bytes 00 00 00 00 80 DA
|
||||
19
captures/rcp-confirm-cmd-b5-raw.txt
Normal file
19
captures/rcp-confirm-cmd-b5-raw.txt
Normal file
@@ -0,0 +1,19 @@
|
||||
Listening on COM5 at 38400 8N1; will send 00 00 B5 00 80 6F after 1.5s
|
||||
12:55:41.489 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:42.195 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:42.848 TX frame 006 00 00 B5 00 80 6F
|
||||
12:55:42.899 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:43.150 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:43.404 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:43.655 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:43.909 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:44.110 RX 001 bytes 00
|
||||
12:55:44.161 RX 005 bytes 00 00 00 80 DA
|
||||
12:55:44.363 RX 001 bytes 00
|
||||
12:55:44.414 RX 005 bytes 00 00 00 80 DA
|
||||
12:55:44.618 RX 001 bytes 00
|
||||
12:55:44.669 RX 005 bytes 00 00 00 80 DA
|
||||
12:55:45.275 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:45.984 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:46.689 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:47.396 RX 006 bytes 00 00 00 00 80 DA
|
||||
18
captures/rcp-confirm-cmd-b6-raw.txt
Normal file
18
captures/rcp-confirm-cmd-b6-raw.txt
Normal file
@@ -0,0 +1,18 @@
|
||||
Listening on COM5 at 38400 8N1; will send 00 00 B6 00 80 6C after 1.5s
|
||||
12:55:57.174 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:57.879 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:58.233 TX frame 006 00 00 B6 00 80 6C
|
||||
12:55:58.587 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:58.839 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:59.092 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:59.345 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:59.597 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:55:59.849 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:56:00.101 RX 006 bytes 00 00 00 00 80 DA
|
||||
12:56:00.758 RX 001 bytes 00
|
||||
12:56:00.808 RX 005 bytes 00 00 00 80 DA
|
||||
12:56:01.464 RX 001 bytes 00
|
||||
12:56:01.515 RX 005 bytes 00 00 00 80 DA
|
||||
12:56:02.168 RX 001 bytes 00
|
||||
12:56:02.218 RX 005 bytes 00 00 00 80 DA
|
||||
12:56:02.873 RX 006 bytes 00 00 00 00 80 DA
|
||||
189
captures/rcp-direct-cmd-00-ff.txt
Normal file
189
captures/rcp-direct-cmd-00-ff.txt
Normal file
@@ -0,0 +1,189 @@
|
||||
Direct response sweep: 256 frames on COM5 at 38400 8N1
|
||||
BASELINE heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||
12:49:52.045 TX p1=0x00 p2=0x00 cmd=0x00 state=0x00 value=0x80 frame 006 00 00 00 00 80 DA
|
||||
12:49:52.656 TX p1=0x00 p2=0x00 cmd=0x01 state=0x00 value=0x80 frame 006 00 00 01 00 80 DB
|
||||
12:49:53.265 TX p1=0x00 p2=0x00 cmd=0x02 state=0x00 value=0x80 frame 006 00 00 02 00 80 D8
|
||||
12:49:53.874 TX p1=0x00 p2=0x00 cmd=0x03 state=0x00 value=0x80 frame 006 00 00 03 00 80 D9
|
||||
12:49:54.482 TX p1=0x00 p2=0x00 cmd=0x04 state=0x00 value=0x80 frame 006 00 00 04 00 80 DE
|
||||
12:49:55.093 TX p1=0x00 p2=0x00 cmd=0x05 state=0x00 value=0x80 frame 006 00 00 05 00 80 DF
|
||||
12:49:55.705 TX p1=0x00 p2=0x00 cmd=0x06 state=0x00 value=0x80 frame 006 00 00 06 00 80 DC
|
||||
12:49:56.314 TX p1=0x00 p2=0x00 cmd=0x07 state=0x00 value=0x80 frame 006 00 00 07 00 80 DD
|
||||
12:49:56.924 TX p1=0x00 p2=0x00 cmd=0x08 state=0x00 value=0x80 frame 006 00 00 08 00 80 D2
|
||||
12:49:57.535 TX p1=0x00 p2=0x00 cmd=0x09 state=0x00 value=0x80 frame 006 00 00 09 00 80 D3
|
||||
12:49:58.145 TX p1=0x00 p2=0x00 cmd=0x0A state=0x00 value=0x80 frame 006 00 00 0A 00 80 D0
|
||||
12:49:58.756 TX p1=0x00 p2=0x00 cmd=0x0B state=0x00 value=0x80 frame 006 00 00 0B 00 80 D1
|
||||
12:49:59.367 TX p1=0x00 p2=0x00 cmd=0x0C state=0x00 value=0x80 frame 006 00 00 0C 00 80 D6
|
||||
12:49:59.977 TX p1=0x00 p2=0x00 cmd=0x0D state=0x00 value=0x80 frame 006 00 00 0D 00 80 D7
|
||||
12:50:00.588 TX p1=0x00 p2=0x00 cmd=0x0E state=0x00 value=0x80 frame 006 00 00 0E 00 80 D4
|
||||
12:50:01.197 TX p1=0x00 p2=0x00 cmd=0x0F state=0x00 value=0x80 frame 006 00 00 0F 00 80 D5
|
||||
12:50:01.808 TX p1=0x00 p2=0x00 cmd=0x10 state=0x00 value=0x80 frame 006 00 00 10 00 80 CA
|
||||
12:50:02.417 TX p1=0x00 p2=0x00 cmd=0x11 state=0x00 value=0x80 frame 006 00 00 11 00 80 CB
|
||||
12:50:03.027 TX p1=0x00 p2=0x00 cmd=0x12 state=0x00 value=0x80 frame 006 00 00 12 00 80 C8
|
||||
12:50:03.638 TX p1=0x00 p2=0x00 cmd=0x13 state=0x00 value=0x80 frame 006 00 00 13 00 80 C9
|
||||
12:50:04.248 TX p1=0x00 p2=0x00 cmd=0x14 state=0x00 value=0x80 frame 006 00 00 14 00 80 CE
|
||||
12:50:04.857 TX p1=0x00 p2=0x00 cmd=0x15 state=0x00 value=0x80 frame 006 00 00 15 00 80 CF
|
||||
12:50:05.469 TX p1=0x00 p2=0x00 cmd=0x16 state=0x00 value=0x80 frame 006 00 00 16 00 80 CC
|
||||
12:50:06.077 TX p1=0x00 p2=0x00 cmd=0x17 state=0x00 value=0x80 frame 006 00 00 17 00 80 CD
|
||||
12:50:06.687 TX p1=0x00 p2=0x00 cmd=0x18 state=0x00 value=0x80 frame 006 00 00 18 00 80 C2
|
||||
12:50:07.301 TX p1=0x00 p2=0x00 cmd=0x19 state=0x00 value=0x80 frame 006 00 00 19 00 80 C3
|
||||
12:50:07.940 TX p1=0x00 p2=0x00 cmd=0x1A state=0x00 value=0x80 frame 006 00 00 1A 00 80 C0
|
||||
12:50:08.549 TX p1=0x00 p2=0x00 cmd=0x1B state=0x00 value=0x80 frame 006 00 00 1B 00 80 C1
|
||||
12:50:09.161 TX p1=0x00 p2=0x00 cmd=0x1C state=0x00 value=0x80 frame 006 00 00 1C 00 80 C6
|
||||
12:50:09.771 TX p1=0x00 p2=0x00 cmd=0x1D state=0x00 value=0x80 frame 006 00 00 1D 00 80 C7
|
||||
12:50:10.409 TX p1=0x00 p2=0x00 cmd=0x1E state=0x00 value=0x80 frame 006 00 00 1E 00 80 C4
|
||||
12:50:11.020 TX p1=0x00 p2=0x00 cmd=0x1F state=0x00 value=0x80 frame 006 00 00 1F 00 80 C5
|
||||
12:50:11.658 TX p1=0x00 p2=0x00 cmd=0x20 state=0x00 value=0x80 frame 006 00 00 20 00 80 FA
|
||||
12:50:12.275 TX p1=0x00 p2=0x00 cmd=0x21 state=0x00 value=0x80 frame 006 00 00 21 00 80 FB
|
||||
12:50:12.886 TX p1=0x00 p2=0x00 cmd=0x22 state=0x00 value=0x80 frame 006 00 00 22 00 80 F8
|
||||
12:50:13.496 TX p1=0x00 p2=0x00 cmd=0x23 state=0x00 value=0x80 frame 006 00 00 23 00 80 F9
|
||||
12:50:14.109 TX p1=0x00 p2=0x00 cmd=0x24 state=0x00 value=0x80 frame 006 00 00 24 00 80 FE
|
||||
12:50:14.718 TX p1=0x00 p2=0x00 cmd=0x25 state=0x00 value=0x80 frame 006 00 00 25 00 80 FF
|
||||
12:50:15.325 TX p1=0x00 p2=0x00 cmd=0x26 state=0x00 value=0x80 frame 006 00 00 26 00 80 FC
|
||||
12:50:15.934 TX p1=0x00 p2=0x00 cmd=0x27 state=0x00 value=0x80 frame 006 00 00 27 00 80 FD
|
||||
12:50:16.545 TX p1=0x00 p2=0x00 cmd=0x28 state=0x00 value=0x80 frame 006 00 00 28 00 80 F2
|
||||
12:50:17.155 TX p1=0x00 p2=0x00 cmd=0x29 state=0x00 value=0x80 frame 006 00 00 29 00 80 F3
|
||||
12:50:17.763 TX p1=0x00 p2=0x00 cmd=0x2A state=0x00 value=0x80 frame 006 00 00 2A 00 80 F0
|
||||
12:50:18.373 TX p1=0x00 p2=0x00 cmd=0x2B state=0x00 value=0x80 frame 006 00 00 2B 00 80 F1
|
||||
12:50:18.981 TX p1=0x00 p2=0x00 cmd=0x2C state=0x00 value=0x80 frame 006 00 00 2C 00 80 F6
|
||||
12:50:19.590 TX p1=0x00 p2=0x00 cmd=0x2D state=0x00 value=0x80 frame 006 00 00 2D 00 80 F7
|
||||
12:50:20.199 TX p1=0x00 p2=0x00 cmd=0x2E state=0x00 value=0x80 frame 006 00 00 2E 00 80 F4
|
||||
12:50:20.806 TX p1=0x00 p2=0x00 cmd=0x2F state=0x00 value=0x80 frame 006 00 00 2F 00 80 F5
|
||||
12:50:21.415 TX p1=0x00 p2=0x00 cmd=0x30 state=0x00 value=0x80 frame 006 00 00 30 00 80 EA
|
||||
12:50:22.023 TX p1=0x00 p2=0x00 cmd=0x31 state=0x00 value=0x80 frame 006 00 00 31 00 80 EB
|
||||
12:50:22.633 TX p1=0x00 p2=0x00 cmd=0x32 state=0x00 value=0x80 frame 006 00 00 32 00 80 E8
|
||||
12:50:23.244 TX p1=0x00 p2=0x00 cmd=0x33 state=0x00 value=0x80 frame 006 00 00 33 00 80 E9
|
||||
12:50:23.852 TX p1=0x00 p2=0x00 cmd=0x34 state=0x00 value=0x80 frame 006 00 00 34 00 80 EE
|
||||
12:50:24.459 TX p1=0x00 p2=0x00 cmd=0x35 state=0x00 value=0x80 frame 006 00 00 35 00 80 EF
|
||||
12:50:25.072 TX p1=0x00 p2=0x00 cmd=0x36 state=0x00 value=0x80 frame 006 00 00 36 00 80 EC
|
||||
12:50:25.681 TX p1=0x00 p2=0x00 cmd=0x37 state=0x00 value=0x80 frame 006 00 00 37 00 80 ED
|
||||
12:50:26.294 TX p1=0x00 p2=0x00 cmd=0x38 state=0x00 value=0x80 frame 006 00 00 38 00 80 E2
|
||||
12:50:26.902 TX p1=0x00 p2=0x00 cmd=0x39 state=0x00 value=0x80 frame 006 00 00 39 00 80 E3
|
||||
12:50:27.513 TX p1=0x00 p2=0x00 cmd=0x3A state=0x00 value=0x80 frame 006 00 00 3A 00 80 E0
|
||||
12:50:28.122 TX p1=0x00 p2=0x00 cmd=0x3B state=0x00 value=0x80 frame 006 00 00 3B 00 80 E1
|
||||
12:50:28.732 TX p1=0x00 p2=0x00 cmd=0x3C state=0x00 value=0x80 frame 006 00 00 3C 00 80 E6
|
||||
12:50:29.341 TX p1=0x00 p2=0x00 cmd=0x3D state=0x00 value=0x80 frame 006 00 00 3D 00 80 E7
|
||||
12:50:29.951 TX p1=0x00 p2=0x00 cmd=0x3E state=0x00 value=0x80 frame 006 00 00 3E 00 80 E4
|
||||
12:50:30.559 TX p1=0x00 p2=0x00 cmd=0x3F state=0x00 value=0x80 frame 006 00 00 3F 00 80 E5
|
||||
12:50:31.168 TX p1=0x00 p2=0x00 cmd=0x40 state=0x00 value=0x80 frame 006 00 00 40 00 80 9A
|
||||
12:50:31.777 TX p1=0x00 p2=0x00 cmd=0x41 state=0x00 value=0x80 frame 006 00 00 41 00 80 9B
|
||||
12:50:32.388 TX p1=0x00 p2=0x00 cmd=0x42 state=0x00 value=0x80 frame 006 00 00 42 00 80 98
|
||||
12:50:32.997 TX p1=0x00 p2=0x00 cmd=0x43 state=0x00 value=0x80 frame 006 00 00 43 00 80 99
|
||||
12:50:33.605 TX p1=0x00 p2=0x00 cmd=0x44 state=0x00 value=0x80 frame 006 00 00 44 00 80 9E
|
||||
12:50:34.219 TX p1=0x00 p2=0x00 cmd=0x45 state=0x00 value=0x80 frame 006 00 00 45 00 80 9F
|
||||
12:50:34.825 TX p1=0x00 p2=0x00 cmd=0x46 state=0x00 value=0x80 frame 006 00 00 46 00 80 9C
|
||||
12:50:35.436 TX p1=0x00 p2=0x00 cmd=0x47 state=0x00 value=0x80 frame 006 00 00 47 00 80 9D
|
||||
12:50:36.043 TX p1=0x00 p2=0x00 cmd=0x48 state=0x00 value=0x80 frame 006 00 00 48 00 80 92
|
||||
12:50:36.655 TX p1=0x00 p2=0x00 cmd=0x49 state=0x00 value=0x80 frame 006 00 00 49 00 80 93
|
||||
12:50:37.264 TX p1=0x00 p2=0x00 cmd=0x4A state=0x00 value=0x80 frame 006 00 00 4A 00 80 90
|
||||
12:50:37.875 TX p1=0x00 p2=0x00 cmd=0x4B state=0x00 value=0x80 frame 006 00 00 4B 00 80 91
|
||||
12:50:38.484 TX p1=0x00 p2=0x00 cmd=0x4C state=0x00 value=0x80 frame 006 00 00 4C 00 80 96
|
||||
12:50:39.093 TX p1=0x00 p2=0x00 cmd=0x4D state=0x00 value=0x80 frame 006 00 00 4D 00 80 97
|
||||
12:50:39.705 TX p1=0x00 p2=0x00 cmd=0x4E state=0x00 value=0x80 frame 006 00 00 4E 00 80 94
|
||||
12:50:40.314 TX p1=0x00 p2=0x00 cmd=0x4F state=0x00 value=0x80 frame 006 00 00 4F 00 80 95
|
||||
12:50:40.925 TX p1=0x00 p2=0x00 cmd=0x50 state=0x00 value=0x80 frame 006 00 00 50 00 80 8A
|
||||
12:50:41.534 TX p1=0x00 p2=0x00 cmd=0x51 state=0x00 value=0x80 frame 006 00 00 51 00 80 8B
|
||||
12:50:42.143 TX p1=0x00 p2=0x00 cmd=0x52 state=0x00 value=0x80 frame 006 00 00 52 00 80 88
|
||||
12:50:42.753 TX p1=0x00 p2=0x00 cmd=0x53 state=0x00 value=0x80 frame 006 00 00 53 00 80 89
|
||||
12:50:43.362 TX p1=0x00 p2=0x00 cmd=0x54 state=0x00 value=0x80 frame 006 00 00 54 00 80 8E
|
||||
12:50:43.972 TX p1=0x00 p2=0x00 cmd=0x55 state=0x00 value=0x80 frame 006 00 00 55 00 80 8F
|
||||
12:50:44.583 TX p1=0x00 p2=0x00 cmd=0x56 state=0x00 value=0x80 frame 006 00 00 56 00 80 8C
|
||||
12:50:45.193 TX p1=0x00 p2=0x00 cmd=0x57 state=0x00 value=0x80 frame 006 00 00 57 00 80 8D
|
||||
12:50:45.802 TX p1=0x00 p2=0x00 cmd=0x58 state=0x00 value=0x80 frame 006 00 00 58 00 80 82
|
||||
12:50:46.414 TX p1=0x00 p2=0x00 cmd=0x59 state=0x00 value=0x80 frame 006 00 00 59 00 80 83
|
||||
12:50:47.023 TX p1=0x00 p2=0x00 cmd=0x5A state=0x00 value=0x80 frame 006 00 00 5A 00 80 80
|
||||
12:50:47.634 TX p1=0x00 p2=0x00 cmd=0x5B state=0x00 value=0x80 frame 006 00 00 5B 00 80 81
|
||||
12:50:48.244 TX p1=0x00 p2=0x00 cmd=0x5C state=0x00 value=0x80 frame 006 00 00 5C 00 80 86
|
||||
12:50:48.853 TX p1=0x00 p2=0x00 cmd=0x5D state=0x00 value=0x80 frame 006 00 00 5D 00 80 87
|
||||
12:50:49.462 TX p1=0x00 p2=0x00 cmd=0x5E state=0x00 value=0x80 frame 006 00 00 5E 00 80 84
|
||||
12:50:50.073 TX p1=0x00 p2=0x00 cmd=0x5F state=0x00 value=0x80 frame 006 00 00 5F 00 80 85
|
||||
12:50:50.683 TX p1=0x00 p2=0x00 cmd=0x60 state=0x00 value=0x80 frame 006 00 00 60 00 80 BA
|
||||
12:50:51.293 TX p1=0x00 p2=0x00 cmd=0x61 state=0x00 value=0x80 frame 006 00 00 61 00 80 BB
|
||||
12:50:51.904 TX p1=0x00 p2=0x00 cmd=0x62 state=0x00 value=0x80 frame 006 00 00 62 00 80 B8
|
||||
12:50:52.512 TX p1=0x00 p2=0x00 cmd=0x63 state=0x00 value=0x80 frame 006 00 00 63 00 80 B9
|
||||
12:50:53.121 TX p1=0x00 p2=0x00 cmd=0x64 state=0x00 value=0x80 frame 006 00 00 64 00 80 BE
|
||||
12:50:53.730 TX p1=0x00 p2=0x00 cmd=0x65 state=0x00 value=0x80 frame 006 00 00 65 00 80 BF
|
||||
12:50:54.337 TX p1=0x00 p2=0x00 cmd=0x66 state=0x00 value=0x80 frame 006 00 00 66 00 80 BC
|
||||
12:50:54.950 TX p1=0x00 p2=0x00 cmd=0x67 state=0x00 value=0x80 frame 006 00 00 67 00 80 BD
|
||||
12:50:55.559 TX p1=0x00 p2=0x00 cmd=0x68 state=0x00 value=0x80 frame 006 00 00 68 00 80 B2
|
||||
12:50:56.170 TX p1=0x00 p2=0x00 cmd=0x69 state=0x00 value=0x80 frame 006 00 00 69 00 80 B3
|
||||
12:50:56.778 TX p1=0x00 p2=0x00 cmd=0x6A state=0x00 value=0x80 frame 006 00 00 6A 00 80 B0
|
||||
12:50:57.389 TX p1=0x00 p2=0x00 cmd=0x6B state=0x00 value=0x80 frame 006 00 00 6B 00 80 B1
|
||||
12:50:57.998 TX p1=0x00 p2=0x00 cmd=0x6C state=0x00 value=0x80 frame 006 00 00 6C 00 80 B6
|
||||
12:50:58.608 TX p1=0x00 p2=0x00 cmd=0x6D state=0x00 value=0x80 frame 006 00 00 6D 00 80 B7
|
||||
12:50:59.219 TX p1=0x00 p2=0x00 cmd=0x6E state=0x00 value=0x80 frame 006 00 00 6E 00 80 B4
|
||||
12:50:59.828 TX p1=0x00 p2=0x00 cmd=0x6F state=0x00 value=0x80 frame 006 00 00 6F 00 80 B5
|
||||
12:51:00.440 TX p1=0x00 p2=0x00 cmd=0x70 state=0x00 value=0x80 frame 006 00 00 70 00 80 AA
|
||||
12:51:01.052 TX p1=0x00 p2=0x00 cmd=0x71 state=0x00 value=0x80 frame 006 00 00 71 00 80 AB
|
||||
12:51:01.664 TX p1=0x00 p2=0x00 cmd=0x72 state=0x00 value=0x80 frame 006 00 00 72 00 80 A8
|
||||
12:51:02.273 TX p1=0x00 p2=0x00 cmd=0x73 state=0x00 value=0x80 frame 006 00 00 73 00 80 A9
|
||||
12:51:02.883 TX p1=0x00 p2=0x00 cmd=0x74 state=0x00 value=0x80 frame 006 00 00 74 00 80 AE
|
||||
12:51:03.492 TX p1=0x00 p2=0x00 cmd=0x75 state=0x00 value=0x80 frame 006 00 00 75 00 80 AF
|
||||
12:51:04.101 TX p1=0x00 p2=0x00 cmd=0x76 state=0x00 value=0x80 frame 006 00 00 76 00 80 AC
|
||||
12:51:04.711 TX p1=0x00 p2=0x00 cmd=0x77 state=0x00 value=0x80 frame 006 00 00 77 00 80 AD
|
||||
12:51:05.319 TX p1=0x00 p2=0x00 cmd=0x78 state=0x00 value=0x80 frame 006 00 00 78 00 80 A2
|
||||
12:51:05.927 TX p1=0x00 p2=0x00 cmd=0x79 state=0x00 value=0x80 frame 006 00 00 79 00 80 A3
|
||||
12:51:06.538 TX p1=0x00 p2=0x00 cmd=0x7A state=0x00 value=0x80 frame 006 00 00 7A 00 80 A0
|
||||
12:51:07.148 TX p1=0x00 p2=0x00 cmd=0x7B state=0x00 value=0x80 frame 006 00 00 7B 00 80 A1
|
||||
12:51:07.758 TX p1=0x00 p2=0x00 cmd=0x7C state=0x00 value=0x80 frame 006 00 00 7C 00 80 A6
|
||||
12:51:08.367 TX p1=0x00 p2=0x00 cmd=0x7D state=0x00 value=0x80 frame 006 00 00 7D 00 80 A7
|
||||
12:51:08.976 TX p1=0x00 p2=0x00 cmd=0x7E state=0x00 value=0x80 frame 006 00 00 7E 00 80 A4
|
||||
12:51:09.585 TX p1=0x00 p2=0x00 cmd=0x7F state=0x00 value=0x80 frame 006 00 00 7F 00 80 A5
|
||||
12:51:10.194 TX p1=0x00 p2=0x00 cmd=0x80 state=0x00 value=0x80 frame 006 00 00 80 00 80 5A
|
||||
12:51:10.802 TX p1=0x00 p2=0x00 cmd=0x81 state=0x00 value=0x80 frame 006 00 00 81 00 80 5B
|
||||
12:51:11.412 TX p1=0x00 p2=0x00 cmd=0x82 state=0x00 value=0x80 frame 006 00 00 82 00 80 58
|
||||
12:51:12.049 TX p1=0x00 p2=0x00 cmd=0x83 state=0x00 value=0x80 frame 006 00 00 83 00 80 59
|
||||
12:51:12.658 TX p1=0x00 p2=0x00 cmd=0x84 state=0x00 value=0x80 frame 006 00 00 84 00 80 5E
|
||||
12:51:13.271 TX p1=0x00 p2=0x00 cmd=0x85 state=0x00 value=0x80 frame 006 00 00 85 00 80 5F
|
||||
12:51:13.881 TX p1=0x00 p2=0x00 cmd=0x86 state=0x00 value=0x80 frame 006 00 00 86 00 80 5C
|
||||
12:51:14.490 TX p1=0x00 p2=0x00 cmd=0x87 state=0x00 value=0x80 frame 006 00 00 87 00 80 5D
|
||||
12:51:15.100 TX p1=0x00 p2=0x00 cmd=0x88 state=0x00 value=0x80 frame 006 00 00 88 00 80 52
|
||||
12:51:15.710 TX p1=0x00 p2=0x00 cmd=0x89 state=0x00 value=0x80 frame 006 00 00 89 00 80 53
|
||||
12:51:16.318 TX p1=0x00 p2=0x00 cmd=0x8A state=0x00 value=0x80 frame 006 00 00 8A 00 80 50
|
||||
12:51:16.930 TX p1=0x00 p2=0x00 cmd=0x8B state=0x00 value=0x80 frame 006 00 00 8B 00 80 51
|
||||
12:51:17.540 TX p1=0x00 p2=0x00 cmd=0x8C state=0x00 value=0x80 frame 006 00 00 8C 00 80 56
|
||||
12:51:18.149 TX p1=0x00 p2=0x00 cmd=0x8D state=0x00 value=0x80 frame 006 00 00 8D 00 80 57
|
||||
12:51:18.758 TX p1=0x00 p2=0x00 cmd=0x8E state=0x00 value=0x80 frame 006 00 00 8E 00 80 54
|
||||
12:51:19.367 TX p1=0x00 p2=0x00 cmd=0x8F state=0x00 value=0x80 frame 006 00 00 8F 00 80 55
|
||||
12:51:19.976 TX p1=0x00 p2=0x00 cmd=0x90 state=0x00 value=0x80 frame 006 00 00 90 00 80 4A
|
||||
12:51:20.583 TX p1=0x00 p2=0x00 cmd=0x91 state=0x00 value=0x80 frame 006 00 00 91 00 80 4B
|
||||
12:51:21.192 TX p1=0x00 p2=0x00 cmd=0x92 state=0x00 value=0x80 frame 006 00 00 92 00 80 48
|
||||
12:51:21.831 TX p1=0x00 p2=0x00 cmd=0x93 state=0x00 value=0x80 frame 006 00 00 93 00 80 49
|
||||
12:51:22.440 TX p1=0x00 p2=0x00 cmd=0x94 state=0x00 value=0x80 frame 006 00 00 94 00 80 4E
|
||||
12:51:23.052 TX p1=0x00 p2=0x00 cmd=0x95 state=0x00 value=0x80 frame 006 00 00 95 00 80 4F
|
||||
12:51:23.661 TX p1=0x00 p2=0x00 cmd=0x96 state=0x00 value=0x80 frame 006 00 00 96 00 80 4C
|
||||
12:51:24.299 TX p1=0x00 p2=0x00 cmd=0x97 state=0x00 value=0x80 frame 006 00 00 97 00 80 4D
|
||||
12:51:24.910 TX p1=0x00 p2=0x00 cmd=0x98 state=0x00 value=0x80 frame 006 00 00 98 00 80 42
|
||||
12:51:25.518 TX p1=0x00 p2=0x00 cmd=0x99 state=0x00 value=0x80 frame 006 00 00 99 00 80 43
|
||||
12:51:26.125 TX p1=0x00 p2=0x00 cmd=0x9A state=0x00 value=0x80 frame 006 00 00 9A 00 80 40
|
||||
12:51:26.735 TX p1=0x00 p2=0x00 cmd=0x9B state=0x00 value=0x80 frame 006 00 00 9B 00 80 41
|
||||
12:51:27.344 TX p1=0x00 p2=0x00 cmd=0x9C state=0x00 value=0x80 frame 006 00 00 9C 00 80 46
|
||||
12:51:27.955 TX p1=0x00 p2=0x00 cmd=0x9D state=0x00 value=0x80 frame 006 00 00 9D 00 80 47
|
||||
12:51:28.563 TX p1=0x00 p2=0x00 cmd=0x9E state=0x00 value=0x80 frame 006 00 00 9E 00 80 44
|
||||
12:51:29.173 TX p1=0x00 p2=0x00 cmd=0x9F state=0x00 value=0x80 frame 006 00 00 9F 00 80 45
|
||||
12:51:29.782 TX p1=0x00 p2=0x00 cmd=0xA0 state=0x00 value=0x80 frame 006 00 00 A0 00 80 7A
|
||||
12:51:30.392 TX p1=0x00 p2=0x00 cmd=0xA1 state=0x00 value=0x80 frame 006 00 00 A1 00 80 7B
|
||||
12:51:31.000 TX p1=0x00 p2=0x00 cmd=0xA2 state=0x00 value=0x80 frame 006 00 00 A2 00 80 78
|
||||
12:51:31.610 TX p1=0x00 p2=0x00 cmd=0xA3 state=0x00 value=0x80 frame 006 00 00 A3 00 80 79
|
||||
12:51:32.220 TX p1=0x00 p2=0x00 cmd=0xA4 state=0x00 value=0x80 frame 006 00 00 A4 00 80 7E
|
||||
12:51:32.829 TX p1=0x00 p2=0x00 cmd=0xA5 state=0x00 value=0x80 frame 006 00 00 A5 00 80 7F
|
||||
12:51:33.439 TX p1=0x00 p2=0x00 cmd=0xA6 state=0x00 value=0x80 frame 006 00 00 A6 00 80 7C
|
||||
12:51:34.048 TX p1=0x00 p2=0x00 cmd=0xA7 state=0x00 value=0x80 frame 006 00 00 A7 00 80 7D
|
||||
12:51:34.658 TX p1=0x00 p2=0x00 cmd=0xA8 state=0x00 value=0x80 frame 006 00 00 A8 00 80 72
|
||||
12:51:35.266 TX p1=0x00 p2=0x00 cmd=0xA9 state=0x00 value=0x80 frame 006 00 00 A9 00 80 73
|
||||
12:51:35.878 TX p1=0x00 p2=0x00 cmd=0xAA state=0x00 value=0x80 frame 006 00 00 AA 00 80 70
|
||||
12:51:36.488 TX p1=0x00 p2=0x00 cmd=0xAB state=0x00 value=0x80 frame 006 00 00 AB 00 80 71
|
||||
12:51:37.096 TX p1=0x00 p2=0x00 cmd=0xAC state=0x00 value=0x80 frame 006 00 00 AC 00 80 76
|
||||
12:51:37.710 TX p1=0x00 p2=0x00 cmd=0xAD state=0x00 value=0x80 frame 006 00 00 AD 00 80 77
|
||||
12:51:38.348 TX p1=0x00 p2=0x00 cmd=0xAE state=0x00 value=0x80 frame 006 00 00 AE 00 80 74
|
||||
12:51:38.958 TX p1=0x00 p2=0x00 cmd=0xAF state=0x00 value=0x80 frame 006 00 00 AF 00 80 75
|
||||
12:51:39.570 TX p1=0x00 p2=0x00 cmd=0xB0 state=0x00 value=0x80 frame 006 00 00 B0 00 80 6A
|
||||
12:51:40.180 TX p1=0x00 p2=0x00 cmd=0xB1 state=0x00 value=0x80 frame 006 00 00 B1 00 80 6B
|
||||
12:51:40.791 TX p1=0x00 p2=0x00 cmd=0xB2 state=0x00 value=0x80 frame 006 00 00 B2 00 80 68
|
||||
12:51:41.401 TX p1=0x00 p2=0x00 cmd=0xB3 state=0x00 value=0x80 frame 006 00 00 B3 00 80 69
|
||||
12:51:42.014 TX p1=0x00 p2=0x00 cmd=0xB4 state=0x00 value=0x80 frame 006 00 00 B4 00 80 6E
|
||||
12:51:42.623 TX p1=0x00 p2=0x00 cmd=0xB5 state=0x00 value=0x80 frame 006 00 00 B5 00 80 6F
|
||||
12:51:42.623 ANOMALY 18 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||
12:51:42.623 RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
|
||||
Stopping after anomaly.
|
||||
FINAL ANOMALY 42 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 07 80 6D 20 D8 48 00 00 00 00 80 DA
|
||||
6
captures/rcp-direct-cmd-b0-b1-replay.txt
Normal file
6
captures/rcp-direct-cmd-b0-b1-replay.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
Direct response sweep: 2 frames on COM5 at 38400 8N1
|
||||
BASELINE heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes
|
||||
12:59:25.335 TX p1=0x00 p2=0x00 cmd=0xB0 state=0x00 value=0x80 frame 006 00 00 B0 00 80 6A
|
||||
12:59:25.944 TX p1=0x00 p2=0x00 cmd=0xB1 state=0x00 value=0x80 frame 006 00 00 B1 00 80 6B
|
||||
FINAL heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes
|
||||
Anomalies: 0
|
||||
9
captures/rcp-direct-cmd-b0-b8-replay.txt
Normal file
9
captures/rcp-direct-cmd-b0-b8-replay.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
Direct response sweep: 9 frames on COM5 at 38400 8N1
|
||||
BASELINE heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes
|
||||
12:57:22.733 TX p1=0x00 p2=0x00 cmd=0xB0 state=0x00 value=0x80 frame 006 00 00 B0 00 80 6A
|
||||
12:57:23.342 TX p1=0x00 p2=0x00 cmd=0xB1 state=0x00 value=0x80 frame 006 00 00 B1 00 80 6B
|
||||
12:57:23.342 ANOMALY 6 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||
12:57:23.342 RX raw 07 80 6C 20 D8 49
|
||||
Stopping after anomaly.
|
||||
FINAL heartbeat-compatible RX: 42 bytes, offset 0, 7 frames + 0 bytes
|
||||
Anomalies: 1
|
||||
294
captures/rcp-matrix-cmd15-prefix2-00-0f.txt
Normal file
294
captures/rcp-matrix-cmd15-prefix2-00-0f.txt
Normal file
@@ -0,0 +1,294 @@
|
||||
Probing 16 field combinations on COM5 at 38400 8N1
|
||||
12:37:52.619 RX frame 006 00 00 00 00 80 DA
|
||||
12:37:53.325 RX frame 006 00 00 00 00 80 DA
|
||||
12:37:53.931 TX fields p1=0x00 p2=0x00 cmd=0x15 state=0x00 value=0x80 frame 006 00 00 15 00 80 CF
|
||||
12:37:54.032 RX frame 006 00 00 00 00 80 DA
|
||||
12:37:54.285 RX frame 006 00 00 00 00 80 DA
|
||||
12:37:54.538 RX frame 006 00 00 00 00 80 DA
|
||||
12:37:54.789 RX frame 006 00 00 00 00 80 DA
|
||||
12:37:55.041 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:02.805 SCREEN cmd=0x15 state=0x00 value=0x80 CONNECT NOT ACT
|
||||
12:38:02.806 TX fields p1=0x00 p2=0x01 cmd=0x15 state=0x00 value=0x80 frame 006 00 01 15 00 80 CE
|
||||
12:38:02.808 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:02.808 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:02.808 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:02.808 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:02.808 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:02.808 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:02.808 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:02.808 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:02.808 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:02.808 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:02.859 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:02.859 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:02.859 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:03.414 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:03.666 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:03.918 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:11.920 SCREEN cmd=0x15 state=0x00 value=0x80 CONNECT NOT ACT
|
||||
12:38:11.920 TX fields p1=0x00 p2=0x02 cmd=0x15 state=0x00 value=0x80 frame 006 00 02 15 00 80 CD
|
||||
12:38:11.920 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:11.921 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:11.921 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:11.921 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:11.921 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:11.921 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:11.921 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:11.921 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:11.922 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:11.922 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:11.972 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:11.972 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:11.972 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:12.325 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:12.577 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:12.829 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:13.082 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:20.492 SCREEN cmd=0x15 state=0x00 value=0x80 CONNECT NOT ACT
|
||||
12:38:20.492 TX fields p1=0x00 p2=0x03 cmd=0x15 state=0x00 value=0x80 frame 006 00 03 15 00 80 CC
|
||||
12:38:20.492 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:20.492 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:20.492 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:20.492 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:20.493 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:20.493 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:20.493 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:20.493 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:20.493 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:20.493 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:20.543 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:20.543 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:20.847 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:21.099 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:21.352 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:21.604 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:29.244 SCREEN cmd=0x15 state=0x00 value=0x80 CONNECT NTO ACT
|
||||
12:38:29.244 TX fields p1=0x00 p2=0x04 cmd=0x15 state=0x00 value=0x80 frame 006 00 04 15 00 80 CB
|
||||
12:38:29.245 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:29.246 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:29.246 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:29.246 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:29.246 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:29.246 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:29.246 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:29.246 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:29.246 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:29.246 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:29.297 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:29.297 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:29.347 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:29.600 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:29.853 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:30.105 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:30.356 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:38.590 SCREEN cmd=0x15 state=0x00 value=0x80 CONNECT NOT ACT
|
||||
12:38:38.590 TX fields p1=0x00 p2=0x05 cmd=0x15 state=0x00 value=0x80 frame 006 00 05 15 00 80 CA
|
||||
12:38:38.590 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:38.592 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:38.592 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:38.592 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:38.592 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:38.592 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:38.592 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:38.592 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:38.592 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:38.592 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:38.642 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:38.642 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:38.642 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:38.743 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:38.995 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:39.246 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:39.498 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:39.750 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:49.741 SCREEN cmd=0x15 state=0x00 value=0x80 CONNECT NOT ACT
|
||||
12:38:49.741 TX fields p1=0x00 p2=0x06 cmd=0x15 state=0x00 value=0x80 frame 006 00 06 15 00 80 C9
|
||||
12:38:49.742 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:49.742 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:49.742 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:49.742 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:49.743 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:49.743 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:49.743 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:49.743 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:49.743 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:49.743 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:49.793 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:49.793 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:49.793 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:49.793 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:49.793 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:49.793 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:50.246 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:50.499 RX frame 006 00 00 00 00 80 DA
|
||||
12:38:50.751 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:00.497 SCREEN cmd=0x15 state=0x00 value=0x80 CONNECT NOT ACT
|
||||
12:39:00.497 TX fields p1=0x00 p2=0x07 cmd=0x15 state=0x00 value=0x80 frame 006 00 07 15 00 80 C8
|
||||
12:39:00.497 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:00.497 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:00.497 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:00.498 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:00.498 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:00.498 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:00.498 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:00.498 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:00.498 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:00.498 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:00.549 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:00.549 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:00.549 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:00.549 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:00.549 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:00.549 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:01.255 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:08.978 TX fields p1=0x00 p2=0x08 cmd=0x15 state=0x00 value=0x80 frame 006 00 08 15 00 80 C7
|
||||
12:39:08.979 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:08.979 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:08.979 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:08.979 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:08.979 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:08.979 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:08.979 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:08.979 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:08.979 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:08.979 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:09.030 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:09.635 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:09.888 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:10.141 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:18.496 SCREEN cmd=0x15 state=0x00 value=0x80 CONNECT NOT ACT
|
||||
12:39:18.496 TX fields p1=0x00 p2=0x09 cmd=0x15 state=0x00 value=0x80 frame 006 00 09 15 00 80 C6
|
||||
12:39:18.497 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:18.497 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:18.498 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:18.498 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:18.498 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:18.498 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:18.498 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:18.498 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:18.498 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:18.498 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:18.549 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:18.549 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:18.549 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:18.549 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:18.800 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:19.052 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:19.304 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:19.557 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:28.690 SCREEN cmd=0x15 state=0x00 value=0x80 CONNECT NOT ACT
|
||||
12:39:28.690 TX fields p1=0x00 p2=0x0A cmd=0x15 state=0x00 value=0x80 frame 006 00 0A 15 00 80 C5
|
||||
12:39:28.690 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:28.690 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:28.690 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:28.690 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:28.690 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:28.691 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:28.691 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:28.691 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:28.691 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:28.691 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:28.741 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:28.741 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:28.741 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:28.741 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:28.741 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:29.349 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:29.601 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:29.853 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:37.248 SCREEN cmd=0x15 state=0x00 value=0x80 CONNECT NOT ACT
|
||||
12:39:37.248 TX fields p1=0x00 p2=0x0B cmd=0x15 state=0x00 value=0x80 frame 006 00 0B 15 00 80 C4
|
||||
12:39:37.249 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:37.249 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:37.249 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:37.249 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:37.249 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:37.249 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:37.249 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:37.250 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:37.250 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:37.250 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:37.300 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:37.300 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:37.552 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:37.804 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:38.055 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:38.307 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:46.402 SCREEN cmd=0x15 state=0x00 value=0x80 CONNECT NOT ACT
|
||||
12:39:46.403 TX fields p1=0x00 p2=0x0C cmd=0x15 state=0x00 value=0x80 frame 006 00 0C 15 00 80 C3
|
||||
12:39:46.403 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:46.404 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:46.404 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:46.404 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:46.405 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:46.405 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:46.405 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:46.405 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:46.405 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:46.405 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:46.455 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:46.455 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:46.455 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:46.757 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:47.011 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:47.264 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:47.517 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:54.570 SCREEN cmd=0x15 state=0x00 value=0x80 CONNECT NOT ACT
|
||||
12:39:54.571 TX fields p1=0x00 p2=0x0D cmd=0x15 state=0x00 value=0x80 frame 006 00 0D 15 00 80 C2
|
||||
12:39:54.571 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:54.571 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:54.571 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:54.571 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:54.571 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:54.571 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:54.571 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:54.571 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:54.571 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:54.572 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:54.623 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:54.623 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:55.280 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:55.531 RX frame 006 00 00 00 00 80 DA
|
||||
12:39:55.733 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:03.339 SCREEN cmd=0x15 state=0x00 value=0x80 CONNECT NOT ACT
|
||||
12:40:03.339 TX fields p1=0x00 p2=0x0E cmd=0x15 state=0x00 value=0x80 frame 006 00 0E 15 00 80 C1
|
||||
12:40:03.340 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:03.340 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:03.340 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:03.340 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:03.340 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:03.340 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:03.340 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:03.340 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:03.340 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:03.340 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:03.391 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:03.391 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:03.442 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:03.693 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:03.945 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:04.198 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:04.450 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:10.928 SCREEN cmd=0x15 state=0x00 value=0x80 CONNECT NOT ACT
|
||||
12:40:10.928 TX fields p1=0x00 p2=0x0F cmd=0x15 state=0x00 value=0x80 frame 006 00 0F 15 00 80 C0
|
||||
12:40:10.929 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:10.929 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:10.929 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:10.929 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:10.929 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:10.929 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:10.930 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:10.930 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:10.930 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:10.930 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:10.981 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:11.436 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:12.143 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:15.159 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:15.159 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:15.159 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:15.159 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:15.664 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:16.371 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:17.077 RX frame 006 00 00 00 00 80 DA
|
||||
12:40:17.783 RX frame 006 00 00 00 00 80 DA
|
||||
88
captures/rcp-matrix-cmd15-prefix2-confirm.txt
Normal file
88
captures/rcp-matrix-cmd15-prefix2-confirm.txt
Normal file
@@ -0,0 +1,88 @@
|
||||
Probing 5 field combinations on COM5 at 38400 8N1
|
||||
12:42:53.175 RX frame 006 00 00 00 00 80 DA
|
||||
12:42:53.882 RX frame 006 00 00 00 00 80 DA
|
||||
12:42:54.388 TX fields p1=0x00 p2=0x06 cmd=0x15 state=0x00 value=0x80 frame 006 00 06 15 00 80 C9
|
||||
12:42:54.591 RX frame 006 00 00 00 00 80 DA
|
||||
12:42:54.843 RX frame 006 00 00 00 00 80 DA
|
||||
12:42:55.095 RX frame 006 00 00 00 00 80 DA
|
||||
12:42:55.348 RX frame 006 00 00 00 00 80 DA
|
||||
12:42:55.600 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:06.568 SCREEN p1=0x00 p2=0x06 cmd=0x15 state=0x00 value=0x80 CONNECT NOT ACT
|
||||
12:43:06.569 TX fields p1=0x00 p2=0x07 cmd=0x15 state=0x00 value=0x80 frame 006 00 07 15 00 80 C8
|
||||
12:43:06.570 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:06.570 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:06.570 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:06.570 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:06.571 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:06.571 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:06.571 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:06.572 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:06.572 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:06.572 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:06.623 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:06.623 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:06.623 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:06.623 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:06.623 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:06.623 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:06.624 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:06.776 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:07.483 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:13.717 TX fields p1=0x00 p2=0x08 cmd=0x15 state=0x00 value=0x80 frame 006 00 08 15 00 80 C7
|
||||
12:43:13.768 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:13.768 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:13.768 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:13.768 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:13.768 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:13.768 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:13.768 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:13.768 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:13.768 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:14.020 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:14.272 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:14.525 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:14.777 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:22.946 SCREEN p1=0x00 p2=0x08 cmd=0x15 state=0x00 value=0x80 CONNECT NOT ACT
|
||||
12:43:22.946 TX fields p1=0x00 p2=0x0E cmd=0x15 state=0x00 value=0x80 frame 006 00 0E 15 00 80 C1
|
||||
12:43:22.947 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:22.947 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:22.947 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:22.947 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:22.947 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:22.947 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:22.948 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:22.948 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:22.948 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:22.948 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:22.998 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:22.998 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:22.998 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:23.200 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:23.453 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:23.705 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:23.957 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:31.920 SCREEN p1=0x00 p2=0x0E cmd=0x15 state=0x00 value=0x80 CONNECT NOT ACT
|
||||
12:43:31.920 TX fields p1=0x00 p2=0x0F cmd=0x15 state=0x00 value=0x80 frame 006 00 0F 15 00 80 C0
|
||||
12:43:31.921 RX frame 006 00 00 00 80 DA 00 NON_HEARTBEAT
|
||||
12:43:31.921 RX frame 006 00 00 00 80 DA 00 NON_HEARTBEAT
|
||||
12:43:31.921 RX frame 006 00 00 00 80 DA 00 NON_HEARTBEAT
|
||||
12:43:31.921 RX frame 006 00 00 00 80 DA 00 NON_HEARTBEAT
|
||||
12:43:31.921 RX frame 006 00 00 00 80 DA 00 NON_HEARTBEAT
|
||||
12:43:31.921 RX frame 006 00 00 00 80 DA 00 NON_HEARTBEAT
|
||||
12:43:31.921 RX frame 006 00 00 00 80 DA 00 NON_HEARTBEAT
|
||||
12:43:31.922 RX frame 006 00 00 00 80 DA 00 NON_HEARTBEAT
|
||||
12:43:31.922 RX frame 006 00 00 00 80 DA 00 NON_HEARTBEAT
|
||||
12:43:31.922 RX frame 006 00 00 00 80 DA 00 NON_HEARTBEAT
|
||||
12:43:31.972 RX frame 006 00 00 00 80 DA 00 NON_HEARTBEAT
|
||||
12:43:31.972 RX frame 006 00 00 00 80 DA 00 NON_HEARTBEAT
|
||||
12:43:31.972 RX frame 006 00 00 00 80 DA 00 NON_HEARTBEAT
|
||||
12:43:32.577 RX frame 006 00 00 00 80 DA 00 NON_HEARTBEAT
|
||||
12:43:35.909 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:35.909 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:35.909 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:35.909 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:36.112 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:36.769 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:37.478 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:38.186 RX frame 006 00 00 00 00 80 DA
|
||||
12:43:38.892 RX frame 006 00 00 00 00 80 DA
|
||||
102
captures/rcp-matrix-cmd15-state-value.txt
Normal file
102
captures/rcp-matrix-cmd15-state-value.txt
Normal file
@@ -0,0 +1,102 @@
|
||||
Probing 4 field combinations on COM5 at 38400 8N1
|
||||
12:35:06.502 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:07.209 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:07.361 TX fields p1=0x00 p2=0x00 cmd=0x15 state=0x00 value=0x00 frame 006 00 00 15 00 00 4F
|
||||
12:35:07.917 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:08.170 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:08.422 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:21.094 SCREEN cmd=0x15 state=0x00 value=0x00 CONNECT NOT ACT
|
||||
12:35:21.094 TX fields p1=0x00 p2=0x00 cmd=0x15 state=0x00 value=0x80 frame 006 00 00 15 00 80 CF
|
||||
12:35:21.094 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:21.096 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:21.096 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:21.096 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:21.096 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:21.096 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:21.096 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:21.096 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:21.096 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:21.096 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:21.146 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:21.146 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:21.146 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:21.146 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:21.146 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:21.146 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:21.146 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:21.146 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:21.146 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:21.146 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:21.704 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:21.955 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:22.208 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:31.923 SCREEN cmd=0x15 state=0x00 value=0x80 CONNECT NOT ACT
|
||||
12:35:31.923 TX fields p1=0x00 p2=0x00 cmd=0x15 state=0x80 value=0x00 frame 006 00 00 15 80 00 CF
|
||||
12:35:31.923 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:31.923 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:31.924 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:31.924 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:31.924 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:31.924 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:31.924 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:31.924 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:31.924 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:31.924 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:31.975 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:31.975 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:31.975 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:31.975 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:31.975 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:32.026 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:32.278 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:32.529 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:32.782 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:33.033 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:42.653 SCREEN cmd=0x15 state=0x80 value=0x00 CONNECT NOT ACT
|
||||
12:35:42.653 TX fields p1=0x00 p2=0x00 cmd=0x15 state=0x80 value=0x80 frame 006 00 00 15 80 80 4F
|
||||
12:35:42.654 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:42.654 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:42.655 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:42.655 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:42.655 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:42.656 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:42.656 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:42.656 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:42.656 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:42.656 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:42.706 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:42.706 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:42.706 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:42.706 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:42.706 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:42.807 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:43.060 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:43.313 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:43.566 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:43.817 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:56.963 SCREEN cmd=0x15 state=0x80 value=0x80 CONNECT NOT ACT
|
||||
12:35:56.964 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:56.965 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:56.965 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:56.965 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:56.966 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:56.966 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:56.966 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:56.966 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:56.966 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:56.966 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:57.016 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:57.016 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:57.016 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:57.016 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:57.016 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:57.016 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:57.016 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:57.016 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:57.017 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:57.017 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:57.119 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:57.827 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:58.533 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:59.241 RX frame 006 00 00 00 00 80 DA
|
||||
12:35:59.897 RX frame 006 00 00 00 00 80 DA
|
||||
10
captures/rcp-powercycle-a1-b0-b8.txt
Normal file
10
captures/rcp-powercycle-a1-b0-b8.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
Direct response sweep: 9 frames x 1 cycles (9 total) on COM5 at 38400 8N1
|
||||
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||
13:05:24.270 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB0 state=0x00 value=0x80 frame 006 00 00 B0 00 80 6A
|
||||
13:05:24.880 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB1 state=0x00 value=0x80 frame 006 00 00 B1 00 80 6B
|
||||
13:05:24.880 ANOMALY 18 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||
13:05:24.880 RX raw 07 80 6C 20 D8 49 07 80 6C 20 D8 49 07 80 6C 20 D8 49
|
||||
Stopping after anomaly.
|
||||
FINAL ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||
FINAL 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 00 00 00 00 80 DA
|
||||
Anomalies: 1
|
||||
10
captures/rcp-powercycle-a2-b0-b8.txt
Normal file
10
captures/rcp-powercycle-a2-b0-b8.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
Direct response sweep: 9 frames x 1 cycles (9 total) on COM5 at 38400 8N1
|
||||
BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
|
||||
13:05:53.454 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB0 state=0x00 value=0x80 frame 006 00 00 B0 00 80 6A
|
||||
13:05:54.064 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB1 state=0x00 value=0x80 frame 006 00 00 B1 00 80 6B
|
||||
13:05:54.064 ANOMALY 18 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||
13:05:54.064 RX raw 07 80 6C 20 D8 49 07 80 6C 20 D8 49 07 80 6C 20 D8 49
|
||||
Stopping after anomaly.
|
||||
FINAL ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||
FINAL 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 00 00 00 00 80 DA
|
||||
Anomalies: 1
|
||||
10
captures/rcp-powercycle-a3-b0-b8.txt
Normal file
10
captures/rcp-powercycle-a3-b0-b8.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
Direct response sweep: 9 frames x 1 cycles (9 total) on COM5 at 38400 8N1
|
||||
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||
13:06:17.115 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB0 state=0x00 value=0x80 frame 006 00 00 B0 00 80 6A
|
||||
13:06:17.725 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB1 state=0x00 value=0x80 frame 006 00 00 B1 00 80 6B
|
||||
13:06:17.725 ANOMALY 18 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||
13:06:17.725 RX raw 07 80 6C 20 D8 49 07 80 6C 20 D8 49 07 80 6C 20 D8 49
|
||||
Stopping after anomaly.
|
||||
FINAL ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||
FINAL 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 00 00 00 00 80 DA
|
||||
Anomalies: 1
|
||||
5
captures/rcp-powercycle-b0.txt
Normal file
5
captures/rcp-powercycle-b0.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
Direct response sweep: 1 frames x 1 cycles (1 total) on COM5 at 38400 8N1
|
||||
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
|
||||
13:09:03.408 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB0 state=0x00 value=0x80 frame 006 00 00 B0 00 80 6A
|
||||
FINAL heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes
|
||||
Anomalies: 0
|
||||
44
captures/rcp-powercycle-b1-alone-raw.txt
Normal file
44
captures/rcp-powercycle-b1-alone-raw.txt
Normal file
@@ -0,0 +1,44 @@
|
||||
Listening on COM5 at 38400 8N1; will send 00 00 B1 00 80 6B after 3.0s
|
||||
13:08:08.742 RX 006 bytes 00 00 00 00 80 DA
|
||||
13:08:09.450 RX 006 bytes 00 00 00 00 80 DA
|
||||
13:08:10.106 RX 001 bytes 00
|
||||
13:08:10.156 RX 005 bytes 00 00 00 80 DA
|
||||
13:08:10.813 RX 001 bytes 00
|
||||
13:08:10.863 RX 005 bytes 00 00 00 80 DA
|
||||
13:08:11.468 TX frame 006 00 00 B1 00 80 6B
|
||||
13:08:11.519 RX 006 bytes 00 00 00 00 80 DA
|
||||
13:08:11.771 RX 006 bytes 00 00 00 00 80 DA
|
||||
13:08:12.024 RX 006 bytes 00 00 00 00 80 DA
|
||||
13:08:12.277 RX 006 bytes 00 00 00 00 80 DA
|
||||
13:08:12.529 RX 006 bytes 00 00 00 00 80 DA
|
||||
13:08:12.783 RX 006 bytes 00 00 00 00 80 DA
|
||||
13:08:13.036 RX 006 bytes 00 00 00 00 80 DA
|
||||
13:08:13.287 RX 006 bytes 00 00 00 00 80 DA
|
||||
13:08:13.943 RX 006 bytes 00 00 00 00 80 DA
|
||||
13:08:14.600 RX 001 bytes 00
|
||||
13:08:14.650 RX 005 bytes 00 00 00 80 DA
|
||||
13:08:15.307 RX 001 bytes 00
|
||||
13:08:15.357 RX 005 bytes 00 00 00 80 DA
|
||||
13:08:16.013 RX 001 bytes 00
|
||||
13:08:16.063 RX 005 bytes 00 00 00 80 DA
|
||||
Listening on COM5 at 38400 8N1; will send 00 00 B1 00 80 6B after 3.0s
|
||||
13:08:29.402 RX 006 bytes 00 00 00 00 80 DA
|
||||
13:08:30.110 RX 006 bytes 00 00 00 00 80 DA
|
||||
13:08:30.765 RX 001 bytes 00
|
||||
13:08:30.815 RX 005 bytes 00 00 00 80 DA
|
||||
13:08:31.471 RX 001 bytes 00
|
||||
13:08:31.522 RX 005 bytes 00 00 00 80 DA
|
||||
13:08:32.178 RX 006 bytes 00 00 00 00 80 DA
|
||||
13:08:32.279 TX frame 006 00 00 B1 00 80 6B
|
||||
13:08:32.885 RX 006 bytes 00 00 00 00 80 DA
|
||||
13:08:33.137 RX 006 bytes 00 00 00 00 80 DA
|
||||
13:08:33.389 RX 006 bytes 00 00 00 00 80 DA
|
||||
13:08:33.642 RX 006 bytes 00 00 00 00 80 DA
|
||||
13:08:33.894 RX 006 bytes 00 00 00 00 80 DA
|
||||
13:08:34.146 RX 006 bytes 00 00 00 00 80 DA
|
||||
13:08:34.804 RX 006 bytes 00 00 00 00 80 DA
|
||||
13:08:35.510 RX 006 bytes 00 00 00 00 80 DA
|
||||
13:08:36.166 RX 001 bytes 00
|
||||
13:08:36.216 RX 005 bytes 00 00 00 80 DA
|
||||
13:08:36.873 RX 001 bytes 00
|
||||
13:08:36.924 RX 005 bytes 00 00 00 80 DA
|
||||
10
captures/rcp-powercycle-b1-b0-b1.txt
Normal file
10
captures/rcp-powercycle-b1-b0-b1.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
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:07:51.066 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB0 state=0x00 value=0x80 frame 006 00 00 B0 00 80 6A
|
||||
13:07:51.674 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB1 state=0x00 value=0x80 frame 006 00 00 B1 00 80 6B
|
||||
13:07:51.674 ANOMALY 18 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||
13:07:51.674 RX raw 07 80 6C 20 D8 49 07 80 6C 20 D8 49 07 80 6C 20 D8 49
|
||||
Stopping after anomaly.
|
||||
FINAL ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
|
||||
FINAL 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 00 00 00 00 80 DA
|
||||
Anomalies: 1
|
||||
@@ -437,3 +437,683 @@ Emerging pattern:
|
||||
- `CONNECT: NOT ACT` appears to be a parser-recognized but not session-active
|
||||
state. It may indicate the RCP recognizes the command class as CCU-like, but
|
||||
the remaining status/identity/activation fields are wrong or incomplete.
|
||||
|
||||
### Targeted Field Matrix Probe
|
||||
|
||||
After the `0x15-0x30` sweep, the best next experiment is not a broader command
|
||||
sweep. The command byte is clearly relevant, but active-session behavior may
|
||||
depend on the state/value fields or the prefix bytes. Use
|
||||
`scripts/serial_probe_matrix.py` to hold one promising command constant and vary
|
||||
only a small set of fields.
|
||||
|
||||
Start with command `0x15` because it is already associated with the RCP's own
|
||||
`CALL` output frames:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_probe_matrix.py --port COM5 --commands 0x15 --states "0x00 0x80" --values "0x00 0x80" --after-each 1.2 --prompt-screen --log captures/rcp-matrix-cmd15-state-value.txt
|
||||
```
|
||||
|
||||
Dry-run frames:
|
||||
|
||||
```text
|
||||
00 00 15 00 00 4F
|
||||
00 00 15 00 80 CF
|
||||
00 00 15 80 00 CF
|
||||
00 00 15 80 80 4F
|
||||
```
|
||||
|
||||
Why this is useful:
|
||||
|
||||
- `00 00 15 00 00 4F` and `00 00 15 80 00 CF` match the RCP's observed
|
||||
`CALL` frames.
|
||||
- `00 00 15 00 80 CF` matches the command-sweep shape that triggered
|
||||
`CONNECT: NOT ACT`.
|
||||
- `00 00 15 80 80 4F` checks whether both high/state bits together change the
|
||||
parser state.
|
||||
|
||||
If all four still produce only `CONNECT: NOT ACT` or no change, the next matrix
|
||||
should keep `cmd=0x15`, `state=0x00`, `value=0x80`, and vary only prefix bytes:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_probe_matrix.py --port COM5 --prefix2s "0x00-0x0F" --commands 0x15 --states 0x00 --values 0x80 --after-each 1.2 --prompt-screen --log captures/rcp-matrix-cmd15-prefix2-00-0f.txt
|
||||
```
|
||||
|
||||
Treat any result other than heartbeat-only pin 4 output as high-priority. In
|
||||
particular, look for a new RCP frame, a different LCD message, or any transition
|
||||
from `CONNECT: NOT ACT` to an active/connected state.
|
||||
|
||||
### 2026-05-13 Command `0x15` State/Value Matrix Result
|
||||
|
||||
Capture:
|
||||
|
||||
- `captures/rcp-matrix-cmd15-state-value.txt`
|
||||
|
||||
Frames tested:
|
||||
|
||||
| Command | State | Value | TX frame | Screen result |
|
||||
| ---: | ---: | ---: | --- | --- |
|
||||
| `0x15` | `0x00` | `0x00` | `00 00 15 00 00 4F` | `CONNECT NOT ACT` |
|
||||
| `0x15` | `0x00` | `0x80` | `00 00 15 00 80 CF` | `CONNECT NOT ACT` |
|
||||
| `0x15` | `0x80` | `0x00` | `00 00 15 80 00 CF` | `CONNECT NOT ACT` |
|
||||
| `0x15` | `0x80` | `0x80` | `00 00 15 80 80 4F` | `CONNECT NOT ACT` |
|
||||
|
||||
Analyzer result:
|
||||
|
||||
- Pin 4 RX stayed at heartbeat only: `00 00 00 00 80 DA`.
|
||||
- No non-heartbeat RCP-to-host frames were observed.
|
||||
- The RCP was sensitive to all four command `0x15` variants, including both
|
||||
frames that match the panel's own `CALL` output, but none advanced the panel
|
||||
beyond `CONNECT NOT ACT`.
|
||||
|
||||
Interpretation:
|
||||
|
||||
- For command `0x15`, the tested state/value high bits are not enough to produce
|
||||
an active session.
|
||||
- The missing host response is likely in another field, a required repeated
|
||||
cadence, a multi-frame exchange, or a CCU/camera identity/status frame.
|
||||
- Since command `0x15` is parser-visible across all tested state/value variants,
|
||||
it is a good anchor for prefix-byte testing.
|
||||
|
||||
Recommended next matrix:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_probe_matrix.py --port COM5 --prefix2s "0x00-0x0F" --commands 0x15 --states 0x00 --values 0x80 --after-each 1.2 --prompt-screen --log captures/rcp-matrix-cmd15-prefix2-00-0f.txt
|
||||
```
|
||||
|
||||
If all `prefix2` values behave the same, repeat with `prefix1s "0x00-0x0F"` and
|
||||
`prefix2s 0x00`. Prefix bytes may encode device address, CCU identity, panel
|
||||
number, or bus direction.
|
||||
|
||||
### 2026-05-13 Command `0x15` Prefix2 Matrix Result
|
||||
|
||||
Capture:
|
||||
|
||||
- `captures/rcp-matrix-cmd15-prefix2-00-0f.txt`
|
||||
|
||||
Test shape:
|
||||
|
||||
- `p1=0x00`
|
||||
- `p2=0x00-0x0F`
|
||||
- `cmd=0x15`
|
||||
- `state=0x00`
|
||||
- `value=0x80`
|
||||
|
||||
Analyzer result:
|
||||
|
||||
- Pin 4 RX stayed at heartbeat only: `00 00 00 00 80 DA`.
|
||||
- No non-heartbeat RCP-to-host frames were observed.
|
||||
- The log contains 263 heartbeat RX frames and 16 transmitted prefix2 variants.
|
||||
|
||||
Screen observations:
|
||||
|
||||
- `CONNECT NOT ACT` was recorded after prefix2 values `0x00`, `0x01`, `0x02`,
|
||||
`0x03`, `0x04`, `0x05`, `0x06`, `0x08`, `0x09`, `0x0A`, `0x0B`, `0x0C`,
|
||||
`0x0D`, and `0x0E`.
|
||||
- No screen marker was recorded after prefix2 `0x07` or `0x0F`.
|
||||
- One marker was typed as `CONNECT NTO ACT`; treat this as the same
|
||||
observation unless later testing proves otherwise.
|
||||
|
||||
Interpretation:
|
||||
|
||||
- Prefix2 did not produce an active session in the tested low-nibble range.
|
||||
- The missing response is still not visible on pin 4.
|
||||
- The missing markers at `0x07` and `0x0F` may be real parser behavior, because
|
||||
both have low three bits set, but this needs a focused confirmation run before
|
||||
treating it as a rule.
|
||||
|
||||
Recommended confirmation:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_probe_matrix.py --port COM5 --prefix2s "0x06 0x07 0x08 0x0E 0x0F" --commands 0x15 --states 0x00 --values 0x80 --after-each 1.2 --prompt-screen --log captures/rcp-matrix-cmd15-prefix2-confirm.txt
|
||||
```
|
||||
|
||||
Reset the RCP after any screen-triggering result. This keeps the comparison
|
||||
between trigger and non-trigger prefix2 values clean.
|
||||
|
||||
### 2026-05-13 Prefix2 Confirmation Result
|
||||
|
||||
Capture:
|
||||
|
||||
- `captures/rcp-matrix-cmd15-prefix2-confirm.txt`
|
||||
|
||||
Test shape:
|
||||
|
||||
- `p1=0x00`
|
||||
- `p2=0x06`, `0x07`, `0x08`, `0x0E`, `0x0F`
|
||||
- `cmd=0x15`
|
||||
- `state=0x00`
|
||||
- `value=0x80`
|
||||
|
||||
Screen observations:
|
||||
|
||||
| Prefix2 | TX frame | Screen marker |
|
||||
| ---: | --- | --- |
|
||||
| `0x06` | `00 06 15 00 80 C9` | `CONNECT NOT ACT` |
|
||||
| `0x07` | `00 07 15 00 80 C8` | none recorded |
|
||||
| `0x08` | `00 08 15 00 80 C7` | `CONNECT NOT ACT` |
|
||||
| `0x0E` | `00 0E 15 00 80 C1` | `CONNECT NOT ACT` |
|
||||
| `0x0F` | `00 0F 15 00 80 C0` | none recorded |
|
||||
|
||||
Analyzer result:
|
||||
|
||||
- 65 heartbeat RX frames: `00 00 00 00 80 DA`.
|
||||
- 14 apparent non-heartbeat RX frames after `p2=0x0F`:
|
||||
`00 00 00 80 DA 00`.
|
||||
- No other RCP-to-host frame shape was observed.
|
||||
|
||||
Interpretation:
|
||||
|
||||
- `p2=0x07` and `p2=0x0F` again failed to produce a recorded screen marker,
|
||||
while neighboring values did.
|
||||
- The apparent `00 00 00 80 DA 00` response after `p2=0x0F` is probably a
|
||||
one-byte framing slip of the normal heartbeat stream, because it is exactly
|
||||
the heartbeat sequence viewed from byte offset 1:
|
||||
`00 00 00 00 80 DA 00 00 ...`.
|
||||
- Because the shifted heartbeat also satisfies the current XOR checksum
|
||||
hypothesis, checksum validity alone is not enough to prove frame alignment.
|
||||
|
||||
Recommended raw confirmation for `p2=0x0F`:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_probe_response.py --port COM5 --tx-frame "00 0F 15 00 80 C0" --repeat 1 --delay 1.5 --after 5 --frame-size 0 --log captures/rcp-prefix2-0f-raw.txt
|
||||
```
|
||||
|
||||
Then repeat for `p2=0x07`:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_probe_response.py --port COM5 --tx-frame "00 07 15 00 80 C8" --repeat 1 --delay 1.5 --after 5 --frame-size 0 --log captures/rcp-prefix2-07-raw.txt
|
||||
```
|
||||
|
||||
Raw capture avoids imposing 6-byte alignment on the received stream, so it
|
||||
should show whether the apparent non-heartbeat is a real frame or just a shifted
|
||||
view of the heartbeat.
|
||||
|
||||
### Series Resistor Note
|
||||
|
||||
Current host-to-RCP tests use a series resistor between adapter `TXD` and RCP
|
||||
pin 7 as a protection measure. A 4.7 kOhm series resistor should normally still
|
||||
work with a high-impedance RS-232 receiver input, so it is unlikely to explain a
|
||||
selective pattern where nearby checksum-valid frames behave differently.
|
||||
|
||||
Possible resistor-related failure modes:
|
||||
|
||||
- If the RCP input is much lower impedance than expected, 4.7 kOhm could reduce
|
||||
the voltage swing at pin 7.
|
||||
- If the input is clamped internally, the resistor may limit current enough to
|
||||
make the received waveform marginal.
|
||||
- Marginal signaling would more likely produce random missed/garbled frames
|
||||
than a repeatable distinction between specific prefix values.
|
||||
|
||||
Low-risk check:
|
||||
|
||||
- Measure pin 7 relative to pin 9 on the RCP side of the resistor while the
|
||||
adapter is idle; it should show a strong RS-232 idle level, not near 0 V.
|
||||
- If testing without the resistor, first try a smaller protection resistor such
|
||||
as 1 kOhm rather than going straight to a direct connection.
|
||||
- Compare one known-trigger frame, such as `00 06 15 00 80 C9`, and one
|
||||
suspected non-trigger frame, such as `00 07 15 00 80 C8`, using the same reset
|
||||
procedure.
|
||||
|
||||
### Direct Response Sweep Without Screen Logging
|
||||
|
||||
For response hunting, use `scripts/serial_direct_response_sweep.py` rather than
|
||||
the older fixed-frame sweep. It sends checksum-valid 6-byte host frames, but
|
||||
reads pin 4 as raw bytes and checks whether the received data can be explained
|
||||
as the repeated heartbeat:
|
||||
|
||||
```text
|
||||
00 00 00 00 80 DA
|
||||
```
|
||||
|
||||
This avoids treating shifted heartbeat bytes such as `00 00 00 80 DA 00` as a
|
||||
new response frame.
|
||||
|
||||
Recommended first direct sweep:
|
||||
|
||||
```powershell
|
||||
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
|
||||
```
|
||||
|
||||
What to watch for:
|
||||
|
||||
- If the script reports `Anomalies: 0`, the panel never sent raw bytes that
|
||||
differed from the heartbeat stream during this sweep.
|
||||
- If it stops on an anomaly, preserve the log and rerun only the reported frame
|
||||
with raw capture before assuming it is a real response.
|
||||
- Keep the same resistor/wiring setup for this run so the result remains
|
||||
comparable to the earlier observations.
|
||||
|
||||
If the command-only direct sweep finds nothing, the next direct grid should be
|
||||
split into two chunks to stay within the default safety limit:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --prefix2s "0x00-0x0F" --commands "0x00-0x1F" --states 0x00 --values 0x80 --after-each 0.4 --stop-on-anomaly --log captures/rcp-direct-p2-00-0f-cmd-00-1f.txt
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --prefix2s "0x00-0x0F" --commands "0x20-0x3F" --states 0x00 --values 0x80 --after-each 0.4 --stop-on-anomaly --log captures/rcp-direct-p2-00-0f-cmd-20-3f.txt
|
||||
```
|
||||
|
||||
### 2026-05-13 Direct Command Sweep Response Hit
|
||||
|
||||
Capture:
|
||||
|
||||
- `captures/rcp-direct-cmd-00-ff.txt`
|
||||
|
||||
Sweep shape:
|
||||
|
||||
- `p1=0x00`
|
||||
- `p2=0x00`
|
||||
- `cmd=0x00-0xFF`
|
||||
- `state=0x00`
|
||||
- `value=0x80`
|
||||
- Stop on first raw RX anomaly.
|
||||
|
||||
Important result:
|
||||
|
||||
- The sweep stopped immediately after transmitting command `0xB5`:
|
||||
`00 00 B5 00 80 6F`.
|
||||
- The previous transmitted command was `0xB4`: `00 00 B4 00 80 6E`, about
|
||||
0.6 seconds earlier.
|
||||
- The RCP produced repeated non-heartbeat frames:
|
||||
`07 80 6D 20 D8 48`.
|
||||
- Final raw capture showed the same frame repeated, then the panel returned to
|
||||
the normal heartbeat `00 00 00 00 80 DA`.
|
||||
|
||||
Observed response:
|
||||
|
||||
```text
|
||||
07 80 6D 20 D8 48
|
||||
07 80 6D 20 D8 48
|
||||
07 80 6D 20 D8 48
|
||||
...
|
||||
00 00 00 00 80 DA
|
||||
```
|
||||
|
||||
Checksum check:
|
||||
|
||||
- `5A xor 07 xor 80 xor 6D xor 20 xor D8 = 48`.
|
||||
- This means `07 80 6D 20 D8 48` is a real checksum-valid 6-byte frame under the
|
||||
current checksum hypothesis, not a shifted heartbeat artifact.
|
||||
|
||||
Interpretation:
|
||||
|
||||
- This is the first confirmed non-heartbeat RCP-to-host serial response on pin
|
||||
4 during host-frame probing.
|
||||
- `cmd=0xB5` is the most likely trigger, but `cmd=0xB4` should be retested
|
||||
because it was sent one read window earlier and delayed responses are possible.
|
||||
- The response frame shape suggests the RCP may be reporting a status or
|
||||
identity-like frame with `p1=0x07`, `p2=0x80`, `cmd=0x6D`, `state=0x20`,
|
||||
`value=0xD8`.
|
||||
|
||||
Recommended confirmation tests:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_probe_response.py --port COM5 --tx-frame "00 00 B4 00 80 6E" --repeat 1 --delay 1.5 --after 5 --frame-size 0 --log captures/rcp-confirm-cmd-b4-raw.txt
|
||||
python scripts/serial_probe_response.py --port COM5 --tx-frame "00 00 B5 00 80 6F" --repeat 1 --delay 1.5 --after 5 --frame-size 0 --log captures/rcp-confirm-cmd-b5-raw.txt
|
||||
python scripts/serial_probe_response.py --port COM5 --tx-frame "00 00 B6 00 80 6C" --repeat 1 --delay 1.5 --after 5 --frame-size 0 --log captures/rcp-confirm-cmd-b6-raw.txt
|
||||
```
|
||||
|
||||
If `cmd=0xB5` reliably triggers the `07 80 6D 20 D8 48` response, test whether
|
||||
the response depends on the state/value fields:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_probe_matrix.py --port COM5 --commands 0xB5 --states "0x00 0x80" --values "0x00 0x80" --after-each 1.2 --prompt-screen --log captures/rcp-matrix-cmd-b5-state-value.txt
|
||||
```
|
||||
|
||||
### 2026-05-13 B4/B5/B6 Single-Frame Confirmation
|
||||
|
||||
Captures:
|
||||
|
||||
- `captures/rcp-confirm-cmd-b4-raw.txt`
|
||||
- `captures/rcp-confirm-cmd-b5-raw.txt`
|
||||
- `captures/rcp-confirm-cmd-b6-raw.txt`
|
||||
|
||||
Single frames tested:
|
||||
|
||||
| Command | TX frame | Pin 4 result |
|
||||
| ---: | --- | --- |
|
||||
| `0xB4` | `00 00 B4 00 80 6E` | heartbeat only |
|
||||
| `0xB5` | `00 00 B5 00 80 6F` | heartbeat only |
|
||||
| `0xB6` | `00 00 B6 00 80 6C` | heartbeat only |
|
||||
|
||||
Interpretation:
|
||||
|
||||
- The earlier `07 80 6D 20 D8 48` response did not reproduce from isolated
|
||||
single-frame `B4`, `B5`, or `B6` tests.
|
||||
- The response may require prior sweep history, a command sequence, repeated
|
||||
cadence, or a temporary parser/session state produced by many earlier frames.
|
||||
- The `B5` frame is still the best suspect because the direct sweep reported the
|
||||
anomaly in the read window immediately after transmitting `B5`, but it is not
|
||||
sufficient by itself in a fresh single-frame test.
|
||||
|
||||
Recommended focused replay:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB0-0xB8" --states 0x00 --values 0x80 --after-each 0.6 --stop-on-anomaly --log captures/rcp-direct-cmd-b0-b8-replay.txt
|
||||
```
|
||||
|
||||
If that does not reproduce the response, try the same range with a shorter
|
||||
cadence to better mimic the long sweep:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB0-0xB8" --states 0x00 --values 0x80 --after-each 0.25 --stop-on-anomaly --log captures/rcp-direct-cmd-b0-b8-fast.txt
|
||||
```
|
||||
|
||||
If the focused range still does not reproduce it, rerun the longer sweep from
|
||||
`0xA0-0xB8` rather than the full `0x00-0xFF` range:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xA0-0xB8" --states 0x00 --values 0x80 --after-each 0.6 --stop-on-anomaly --log captures/rcp-direct-cmd-a0-b8-replay.txt
|
||||
```
|
||||
|
||||
### 2026-05-13 B0-B8 Focused Replay Hit
|
||||
|
||||
Capture:
|
||||
|
||||
- `captures/rcp-direct-cmd-b0-b8-replay.txt`
|
||||
|
||||
Replay shape:
|
||||
|
||||
- `p1=0x00`
|
||||
- `p2=0x00`
|
||||
- `cmd=0xB0-0xB8`
|
||||
- `state=0x00`
|
||||
- `value=0x80`
|
||||
- `after-each=0.6`
|
||||
- Stop on first raw RX anomaly.
|
||||
|
||||
Important result:
|
||||
|
||||
- The sweep sent `cmd=0xB0`, then `cmd=0xB1`.
|
||||
- The anomaly was captured in the read window immediately after transmitting
|
||||
`cmd=0xB1`: `00 00 B1 00 80 6B`.
|
||||
- The RCP emitted one checksum-valid non-heartbeat frame:
|
||||
`07 80 6C 20 D8 49`.
|
||||
- The final read window returned to heartbeat-only traffic.
|
||||
|
||||
Checksum check:
|
||||
|
||||
- `5A xor 07 xor 80 xor 6C xor 20 xor D8 = 49`.
|
||||
|
||||
Comparison with the earlier full sweep hit:
|
||||
|
||||
| Trigger window | RCP response |
|
||||
| --- | --- |
|
||||
| After `cmd=0xB1` in focused `B0-B8` replay | `07 80 6C 20 D8 49` |
|
||||
| After `cmd=0xB5` in full `00-FF` sweep | `07 80 6D 20 D8 48` |
|
||||
|
||||
Interpretation:
|
||||
|
||||
- The non-heartbeat response is reproducible with a short local sequence, so it
|
||||
does not require the entire `0x00-0xFF` sweep history.
|
||||
- The response may be sequence-dependent: `B1` alone is not yet proven as the
|
||||
trigger because `B0` was sent one window earlier.
|
||||
- The response command byte changed from `0x6D` to `0x6C`, which suggests the
|
||||
RCP may be returning a status/identity code related to the host command or to
|
||||
internal state.
|
||||
|
||||
Recommended tight confirmations:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_probe_response.py --port COM5 --tx-frame "00 00 B0 00 80 6A" --repeat 1 --delay 1.5 --after 5 --frame-size 0 --log captures/rcp-confirm-cmd-b0-raw.txt
|
||||
python scripts/serial_probe_response.py --port COM5 --tx-frame "00 00 B1 00 80 6B" --repeat 1 --delay 1.5 --after 5 --frame-size 0 --log captures/rcp-confirm-cmd-b1-raw.txt
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB0-0xB1" --states 0x00 --values 0x80 --after-each 0.6 --stop-on-anomaly --log captures/rcp-direct-cmd-b0-b1-replay.txt
|
||||
```
|
||||
|
||||
If `B1` alone is heartbeat-only but `B0-B1` reproduces the response, treat
|
||||
`B0 -> B1` as a required two-frame sequence.
|
||||
|
||||
### 2026-05-13 B0/B1 Tight Confirmation Result
|
||||
|
||||
Captures:
|
||||
|
||||
- `captures/rcp-confirm-cmd-b0-raw.txt`
|
||||
- `captures/rcp-confirm-cmd-b1-raw.txt`
|
||||
- `captures/rcp-direct-cmd-b0-b1-replay.txt`
|
||||
|
||||
Results:
|
||||
|
||||
| Test | Pin 4 result |
|
||||
| --- | --- |
|
||||
| Single `B0`: `00 00 B0 00 80 6A` | heartbeat only |
|
||||
| Single `B1`: `00 00 B1 00 80 6B` | heartbeat only |
|
||||
| Sequence `B0 -> B1` | heartbeat only, `Anomalies: 0` |
|
||||
|
||||
Interpretation:
|
||||
|
||||
- The `07 80 6C 20 D8 49` response from the `B0-B8` replay did not reproduce
|
||||
with the minimal `B0 -> B1` sequence.
|
||||
- The response may be intermittent, cadence-sensitive, dependent on a longer
|
||||
sequence such as `B0-B8`, or affected by panel state that was not identical
|
||||
between runs.
|
||||
- The next priority is measuring reproducibility of the same short range rather
|
||||
than expanding the search space.
|
||||
|
||||
Recommended reproducibility test:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB0-0xB8" --states 0x00 --values 0x80 --after-each 0.6 --cycles 5 --cycle-pause 2 --log captures/rcp-direct-cmd-b0-b8-cycles.txt
|
||||
```
|
||||
|
||||
Run this without `--stop-on-anomaly` so all five cycles complete and the log can
|
||||
show whether the response happens consistently, intermittently, or only once.
|
||||
|
||||
### Power-Cycle Isolation Test Plan
|
||||
|
||||
Use this plan when intentionally power-cycling the RCP between tests. The goal
|
||||
is to distinguish a cold-boot reproducible protocol response from a response
|
||||
that only appears after accumulated parser/session state.
|
||||
|
||||
Before each test:
|
||||
|
||||
1. Stop any serial script.
|
||||
2. Power off the RCP.
|
||||
3. Wait at least 5 seconds.
|
||||
4. Power on the RCP.
|
||||
5. Wait until the panel is stable and heartbeat traffic has resumed.
|
||||
6. Run exactly one test command.
|
||||
|
||||
Keep the wiring and series resistor the same between tests unless the test name
|
||||
explicitly says otherwise.
|
||||
|
||||
#### Set A: Cold-Boot Reproducibility
|
||||
|
||||
Run these first. They test whether the `B0-B8` response is repeatable from a
|
||||
fresh power cycle.
|
||||
|
||||
```powershell
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB0-0xB8" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-a1-b0-b8.txt
|
||||
```
|
||||
|
||||
Power-cycle, then:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB0-0xB8" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-a2-b0-b8.txt
|
||||
```
|
||||
|
||||
Power-cycle, then:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB0-0xB8" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-a3-b0-b8.txt
|
||||
```
|
||||
|
||||
Expected useful outcomes:
|
||||
|
||||
- If all three produce the same response, the sequence is cold-boot
|
||||
reproducible.
|
||||
- If only some produce a response, the behavior may be timing-sensitive or
|
||||
intermittent.
|
||||
- If none produce a response, the earlier hit likely depended on prior panel
|
||||
state.
|
||||
|
||||
#### Set B: Minimum Sequence Length
|
||||
|
||||
Run this set only if Set A produces at least one response. Power-cycle between
|
||||
each command. These tests find the shortest command prefix that can trigger a
|
||||
non-heartbeat response.
|
||||
|
||||
```powershell
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB0-0xB1" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-b1-b0-b1.txt
|
||||
```
|
||||
|
||||
Power-cycle, then:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB0-0xB2" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-b2-b0-b2.txt
|
||||
```
|
||||
|
||||
Power-cycle, then:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB0-0xB3" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-b3-b0-b3.txt
|
||||
```
|
||||
|
||||
Power-cycle, then:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB0-0xB4" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-b4-b0-b4.txt
|
||||
```
|
||||
|
||||
#### Set C: Cadence Sensitivity
|
||||
|
||||
Run this set if Set A is inconsistent or if Set B does not identify a clean
|
||||
minimum sequence. Power-cycle between each command.
|
||||
|
||||
Slow cadence:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB0-0xB8" --states 0x00 --values 0x80 --settle 3 --after-each 1.2 --stop-on-anomaly --log captures/rcp-powercycle-c1-b0-b8-slow.txt
|
||||
```
|
||||
|
||||
Fast cadence:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB0-0xB8" --states 0x00 --values 0x80 --settle 3 --after-each 0.25 --stop-on-anomaly --log captures/rcp-powercycle-c2-b0-b8-fast.txt
|
||||
```
|
||||
|
||||
Very fast cadence:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB0-0xB8" --states 0x00 --values 0x80 --settle 3 --after-each 0.1 --stop-on-anomaly --log captures/rcp-powercycle-c3-b0-b8-very-fast.txt
|
||||
```
|
||||
|
||||
#### Set D: Control Tests
|
||||
|
||||
Run these if the `B0-B8` range is producing responses. Power-cycle between
|
||||
each command. These confirm the response is specific to the `B0` range.
|
||||
|
||||
```powershell
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xA8-0xAF" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-d1-a8-af-control.txt
|
||||
```
|
||||
|
||||
Power-cycle, then:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB8-0xBF" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-d2-b8-bf-control.txt
|
||||
```
|
||||
|
||||
If a response appears in control ranges too, the trigger may be a broader
|
||||
command class rather than a specific `B0-B8` sequence.
|
||||
|
||||
### 2026-05-13 Power-Cycle Set A Result
|
||||
|
||||
Captures:
|
||||
|
||||
- `captures/rcp-powercycle-a1-b0-b8.txt`
|
||||
- `captures/rcp-powercycle-a2-b0-b8.txt`
|
||||
- `captures/rcp-powercycle-a3-b0-b8.txt`
|
||||
|
||||
Each run was performed after a panel power cycle. All three runs produced the
|
||||
same non-heartbeat response.
|
||||
|
||||
| Run | Trigger window | RCP response | Result |
|
||||
| --- | --- | --- | --- |
|
||||
| A1 | after `B1`: `00 00 B1 00 80 6B` | `07 80 6C 20 D8 49` repeated | anomaly |
|
||||
| A2 | after `B1`: `00 00 B1 00 80 6B` | `07 80 6C 20 D8 49` repeated | anomaly |
|
||||
| A3 | after `B1`: `00 00 B1 00 80 6B` | `07 80 6C 20 D8 49` repeated | anomaly |
|
||||
|
||||
Observed raw pattern in each run:
|
||||
|
||||
```text
|
||||
07 80 6C 20 D8 49
|
||||
07 80 6C 20 D8 49
|
||||
07 80 6C 20 D8 49
|
||||
...
|
||||
00 00 00 00 80 DA
|
||||
```
|
||||
|
||||
Interpretation:
|
||||
|
||||
- The `B0-B8` response is cold-boot reproducible.
|
||||
- The response appears immediately after the `B1` transmit window when the test
|
||||
starts from a fresh power cycle.
|
||||
- The earlier `B0 -> B1` heartbeat-only result was likely affected by panel
|
||||
state from previous experiments, timing, or not starting from an equivalent
|
||||
cold condition.
|
||||
- The next test should determine whether `B0 -> B1` is sufficient from a fresh
|
||||
power cycle, or whether the script/test context of the `B0-B8` run matters.
|
||||
|
||||
Recommended next power-cycle tests:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB0-0xB1" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-b1-b0-b1.txt
|
||||
```
|
||||
|
||||
Power-cycle, then:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_probe_response.py --port COM5 --tx-frame "00 00 B1 00 80 6B" --repeat 1 --delay 3 --after 5 --frame-size 0 --log captures/rcp-powercycle-b1-alone-raw.txt
|
||||
```
|
||||
|
||||
If `B0-B1` reproduces but `B1` alone does not, treat `B0 -> B1` as the minimum
|
||||
cold-boot sequence.
|
||||
|
||||
### 2026-05-13 Minimum Cold-Boot Sequence Result
|
||||
|
||||
Captures:
|
||||
|
||||
- `captures/rcp-powercycle-b0.txt`
|
||||
- `captures/rcp-powercycle-b1-b0-b1.txt`
|
||||
- `captures/rcp-powercycle-b1-alone-raw.txt`
|
||||
|
||||
Each test was run after a panel power cycle.
|
||||
|
||||
| Test | TX frame(s) | Pin 4 result |
|
||||
| --- | --- | --- |
|
||||
| `B0` alone | `00 00 B0 00 80 6A` | heartbeat only, `Anomalies: 0` |
|
||||
| `B1` alone | `00 00 B1 00 80 6B` | heartbeat only |
|
||||
| `B0 -> B1` | `00 00 B0 00 80 6A`, then `00 00 B1 00 80 6B` | `07 80 6C 20 D8 49` repeated |
|
||||
|
||||
Conclusion:
|
||||
|
||||
- The minimum confirmed cold-boot trigger is the two-frame sequence:
|
||||
|
||||
```text
|
||||
Host -> RCP: 00 00 B0 00 80 6A
|
||||
Host -> RCP: 00 00 B1 00 80 6B
|
||||
RCP -> Host: 07 80 6C 20 D8 49
|
||||
```
|
||||
|
||||
- Neither `B0` nor `B1` is sufficient alone from a cold panel.
|
||||
- `B0` appears to prime the panel, and `B1` completes the query/trigger.
|
||||
- The response repeats for a short period, then the panel returns to the normal
|
||||
heartbeat `00 00 00 00 80 DA`.
|
||||
|
||||
Recommended next tests:
|
||||
|
||||
1. Timing sensitivity between `B0` and `B1`.
|
||||
2. State/value sensitivity of the `B0 -> B1` pair.
|
||||
3. Whether the response changes when sending nearby pairs such as `B1 -> B2`,
|
||||
`B2 -> B3`, etc.
|
||||
|
||||
Suggested timing tests, with power cycle between each:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB0-0xB1" --states 0x00 --values 0x80 --settle 3 --after-each 0.1 --stop-on-anomaly --log captures/rcp-powercycle-timing-b0-b1-100ms.txt
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB0-0xB1" --states 0x00 --values 0x80 --settle 3 --after-each 1.2 --stop-on-anomaly --log captures/rcp-powercycle-timing-b0-b1-1200ms.txt
|
||||
```
|
||||
|
||||
Suggested nearby-pair tests, with power cycle between each:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB1-0xB2" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-pair-b1-b2.txt
|
||||
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB2-0xB3" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-pair-b2-b3.txt
|
||||
```
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Summarize fixed-size hex frames from serial_sniff.py logs."""
|
||||
"""Summarize fixed-size hex frames from serial helper logs."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
@@ -9,7 +9,11 @@ import re
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
FRAME_RE = re.compile(r"\b(?:(RX|TX)\s+)?frame\s+\d+\s+((?:[0-9A-Fa-f]{2}\s*)+)$")
|
||||
FRAME_RE = re.compile(
|
||||
r"\b(?P<direction>RX|TX)(?:\s+cmd\s+0x[0-9A-Fa-f]{2})?"
|
||||
r"(?:\s+fields\b.*?)?\s+"
|
||||
r"frame\s+\d+\s+(?P<frame>(?:[0-9A-Fa-f]{2}\s*)+)(?:\s+\S.*)?$"
|
||||
)
|
||||
|
||||
|
||||
def frames_from_log(path: Path) -> list[tuple[str, str]]:
|
||||
@@ -17,8 +21,8 @@ def frames_from_log(path: Path) -> list[tuple[str, str]]:
|
||||
for line in path.read_text(encoding="utf-8").splitlines():
|
||||
match = FRAME_RE.search(line.strip())
|
||||
if match:
|
||||
direction = match.group(1) or "RX"
|
||||
frame = " ".join(match.group(2).upper().split())
|
||||
direction = match.group("direction")
|
||||
frame = " ".join(match.group("frame").upper().split())
|
||||
frames.append((direction, frame))
|
||||
return frames
|
||||
|
||||
|
||||
293
scripts/serial_direct_response_sweep.py
Normal file
293
scripts/serial_direct_response_sweep.py
Normal file
@@ -0,0 +1,293 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Sweep RCP-TX7 host frames and flag raw RX bytes beyond heartbeat.
|
||||
|
||||
This helper is for unattended response hunting. It sends checksum-valid 6-byte
|
||||
candidate frames and reads the RCP-to-host line as raw bytes. Instead of forcing
|
||||
the incoming stream into fixed 6-byte frames, it checks whether the received
|
||||
bytes can be explained as a contiguous slice of the known repeated heartbeat:
|
||||
|
||||
00 00 00 00 80 DA
|
||||
|
||||
That avoids false positives such as:
|
||||
|
||||
00 00 00 80 DA 00
|
||||
|
||||
which is just the normal heartbeat viewed one byte late.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import datetime as dt
|
||||
import itertools
|
||||
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 candidate host frames and stop/log on 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("--prefix1s", type=parse_byte_set, default=[0x00])
|
||||
parser.add_argument("--prefix2s", type=parse_byte_set, default=[0x00])
|
||||
parser.add_argument("--commands", type=parse_byte_set, default=[0x00])
|
||||
parser.add_argument("--states", type=parse_byte_set, default=[0x00])
|
||||
parser.add_argument("--values", type=parse_byte_set, default=[0x80])
|
||||
parser.add_argument("--settle", type=float, default=1.5)
|
||||
parser.add_argument("--after-each", type=float, default=1.0)
|
||||
parser.add_argument("--after", 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("--stop-on-anomaly", action="store_true")
|
||||
parser.add_argument("--verbose-heartbeat", action="store_true")
|
||||
parser.add_argument("--cycles", type=int, default=1)
|
||||
parser.add_argument("--cycle-pause", type=float, default=0.0)
|
||||
parser.add_argument(
|
||||
"--max-frames",
|
||||
type=int,
|
||||
default=512,
|
||||
help="safety limit for generated frames",
|
||||
)
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def main() -> int:
|
||||
args = parse_args()
|
||||
if args.cycles < 1:
|
||||
raise SystemExit("--cycles must be >= 1")
|
||||
rows = list(
|
||||
itertools.product(
|
||||
args.prefix1s,
|
||||
args.prefix2s,
|
||||
args.commands,
|
||||
args.states,
|
||||
args.values,
|
||||
)
|
||||
)
|
||||
if len(rows) > args.max_frames:
|
||||
raise SystemExit(
|
||||
f"Refusing to send {len(rows)} frames; raise --max-frames if intentional"
|
||||
)
|
||||
|
||||
frames = [
|
||||
(prefix1, prefix2, command, state, value, build_frame(prefix1, prefix2, command, state, value))
|
||||
for prefix1, prefix2, command, state, value in rows
|
||||
]
|
||||
|
||||
if args.dry_run:
|
||||
for prefix1, prefix2, command, state, value, frame in frames:
|
||||
print(
|
||||
f"p1=0x{prefix1:02X} p2=0x{prefix2:02X} cmd=0x{command:02X} "
|
||||
f"state=0x{state:02X} value=0x{value: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:
|
||||
ser.reset_input_buffer()
|
||||
total_frames = len(frames) * args.cycles
|
||||
emit(
|
||||
f"Direct response sweep: {len(frames)} frames x {args.cycles} cycles "
|
||||
f"({total_frames} total) on {ser.port} at {ser.baudrate} 8N1"
|
||||
)
|
||||
baseline = read_window(ser, args.settle)
|
||||
baseline_anomaly, baseline_note = classify_rx(baseline)
|
||||
emit(f"BASELINE {baseline_note}")
|
||||
if baseline_anomaly:
|
||||
emit(f"BASELINE raw {hex_preview(baseline)}")
|
||||
|
||||
should_stop = False
|
||||
for cycle in range(1, args.cycles + 1):
|
||||
if args.cycles > 1:
|
||||
emit(f"CYCLE {cycle}/{args.cycles}")
|
||||
|
||||
for prefix1, prefix2, command, state, value, frame in frames:
|
||||
stamp = dt.datetime.now().strftime("%H:%M:%S.%f")[:-3]
|
||||
emit(
|
||||
f"{stamp} TX cycle={cycle} p1=0x{prefix1:02X} p2=0x{prefix2:02X} "
|
||||
f"cmd=0x{command:02X} state=0x{state:02X} value=0x{value:02X} "
|
||||
f"frame {len(frame):03d} {hex_preview(frame)}"
|
||||
)
|
||||
ser.write(frame)
|
||||
ser.flush()
|
||||
rx = read_window(ser, args.after_each)
|
||||
is_anomaly, note = classify_rx(rx)
|
||||
if is_anomaly:
|
||||
anomaly_count += 1
|
||||
emit(f"{stamp} {note}")
|
||||
emit(f"{stamp} RX raw {hex_preview(rx)}")
|
||||
if args.stop_on_anomaly:
|
||||
emit("Stopping after anomaly.")
|
||||
should_stop = True
|
||||
break
|
||||
elif args.verbose_heartbeat:
|
||||
emit(f"{stamp} {note}")
|
||||
|
||||
if should_stop:
|
||||
break
|
||||
|
||||
if cycle < args.cycles and args.cycle_pause > 0:
|
||||
pause_rx = read_window(ser, args.cycle_pause)
|
||||
pause_anomaly, pause_note = classify_rx(pause_rx)
|
||||
emit(f"CYCLE {cycle} PAUSE {pause_note}")
|
||||
if pause_anomaly:
|
||||
anomaly_count += 1
|
||||
emit(f"CYCLE {cycle} PAUSE raw {hex_preview(pause_rx)}")
|
||||
if args.stop_on_anomaly:
|
||||
emit("Stopping after anomaly.")
|
||||
break
|
||||
|
||||
final_rx = read_window(ser, args.after)
|
||||
final_anomaly, final_note = classify_rx(final_rx)
|
||||
emit(f"FINAL {final_note}")
|
||||
if final_anomaly:
|
||||
emit(f"FINAL raw {hex_preview(final_rx)}")
|
||||
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())
|
||||
226
scripts/serial_probe_matrix.py
Normal file
226
scripts/serial_probe_matrix.py
Normal file
@@ -0,0 +1,226 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Targeted RCP-TX7 host-frame field probe.
|
||||
|
||||
This is for the phase after a command sweep finds parser-visible commands. It
|
||||
keeps the observed 6-byte frame shape:
|
||||
|
||||
prefix1 prefix2 command state value checksum
|
||||
|
||||
and tries a small matrix of selected field values with the checksum hypothesis:
|
||||
|
||||
checksum = 0x5A xor prefix1 xor prefix2 xor command xor state xor value
|
||||
|
||||
Use narrow ranges and reset the RCP between screen-triggering attempts when you
|
||||
need independent observations.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import datetime as dt
|
||||
import itertools
|
||||
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")
|
||||
deduped = list(dict.fromkeys(values))
|
||||
return deduped
|
||||
|
||||
|
||||
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 drain_rx(ser: serial.Serial, emit, until: float, frame_size: int) -> int:
|
||||
buffer = bytearray()
|
||||
interesting = 0
|
||||
|
||||
while time.monotonic() < until:
|
||||
data = ser.read(64)
|
||||
if not data:
|
||||
continue
|
||||
|
||||
buffer.extend(data)
|
||||
while len(buffer) >= frame_size:
|
||||
frame = bytes(buffer[:frame_size])
|
||||
del buffer[:frame_size]
|
||||
stamp = dt.datetime.now().strftime("%H:%M:%S.%f")[:-3]
|
||||
marker = "" if frame == HEARTBEAT else " NON_HEARTBEAT"
|
||||
emit(f"{stamp} RX frame {frame_size:03d} {hex_preview(frame)}{marker}")
|
||||
if frame != HEARTBEAT:
|
||||
interesting += 1
|
||||
|
||||
return interesting
|
||||
|
||||
|
||||
def parse_args() -> argparse.Namespace:
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Probe selected RCP-TX7 frame fields and log screen observations."
|
||||
)
|
||||
parser.add_argument("--port", required=True, help="serial port, for example COM5")
|
||||
parser.add_argument("--baud", type=int, default=38400)
|
||||
parser.add_argument("--prefix1s", type=parse_byte_set, default=[0x00])
|
||||
parser.add_argument("--prefix2s", type=parse_byte_set, default=[0x00])
|
||||
parser.add_argument("--commands", type=parse_byte_set, default=[0x15])
|
||||
parser.add_argument("--states", type=parse_byte_set, default=[0x00, 0x80])
|
||||
parser.add_argument("--values", type=parse_byte_set, default=[0x00, 0x80])
|
||||
parser.add_argument("--settle", type=float, default=1.5)
|
||||
parser.add_argument("--after-each", type=float, default=1.0)
|
||||
parser.add_argument("--after", type=float, default=3.0)
|
||||
parser.add_argument("--frame-size", type=int, default=6)
|
||||
parser.add_argument("--log", help="append capture/transmit log to this file")
|
||||
parser.add_argument("--prompt-screen", action="store_true")
|
||||
parser.add_argument("--dry-run", action="store_true")
|
||||
parser.add_argument(
|
||||
"--max-frames",
|
||||
type=int,
|
||||
default=64,
|
||||
help="safety limit for generated frames",
|
||||
)
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def main() -> int:
|
||||
args = parse_args()
|
||||
rows = list(
|
||||
itertools.product(
|
||||
args.prefix1s,
|
||||
args.prefix2s,
|
||||
args.commands,
|
||||
args.states,
|
||||
args.values,
|
||||
)
|
||||
)
|
||||
if len(rows) > args.max_frames:
|
||||
raise SystemExit(
|
||||
f"Refusing to send {len(rows)} frames; raise --max-frames if intentional"
|
||||
)
|
||||
|
||||
frames = [
|
||||
(prefix1, prefix2, command, state, value, build_frame(prefix1, prefix2, command, state, value))
|
||||
for prefix1, prefix2, command, state, value in rows
|
||||
]
|
||||
|
||||
if args.dry_run:
|
||||
for prefix1, prefix2, command, state, value, frame in frames:
|
||||
print(
|
||||
f"p1=0x{prefix1:02X} p2=0x{prefix2:02X} cmd=0x{command:02X} "
|
||||
f"state=0x{state:02X} value=0x{value: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=0.05,
|
||||
write_timeout=1.0,
|
||||
rtscts=False,
|
||||
dsrdtr=False,
|
||||
xonxoff=False,
|
||||
) as ser:
|
||||
ser.reset_input_buffer()
|
||||
emit(f"Probing {len(frames)} field combinations on {ser.port} at {ser.baudrate} 8N1")
|
||||
drain_rx(ser, emit, time.monotonic() + args.settle, args.frame_size)
|
||||
|
||||
for prefix1, prefix2, command, state, value, frame in frames:
|
||||
stamp = dt.datetime.now().strftime("%H:%M:%S.%f")[:-3]
|
||||
emit(
|
||||
f"{stamp} TX fields p1=0x{prefix1:02X} p2=0x{prefix2:02X} "
|
||||
f"cmd=0x{command:02X} state=0x{state:02X} value=0x{value:02X} "
|
||||
f"frame {len(frame):03d} {hex_preview(frame)}"
|
||||
)
|
||||
ser.write(frame)
|
||||
ser.flush()
|
||||
drain_rx(ser, emit, time.monotonic() + args.after_each, args.frame_size)
|
||||
|
||||
if args.prompt_screen:
|
||||
screen = input(
|
||||
"Screen after "
|
||||
f"cmd 0x{command:02X} state 0x{state:02X} value 0x{value:02X} "
|
||||
"(blank = no change, q = stop): "
|
||||
).strip()
|
||||
if screen:
|
||||
stamp = dt.datetime.now().strftime("%H:%M:%S.%f")[:-3]
|
||||
emit(
|
||||
f"{stamp} SCREEN p1=0x{prefix1:02X} p2=0x{prefix2:02X} "
|
||||
f"cmd=0x{command:02X} state=0x{state:02X} "
|
||||
f"value=0x{value:02X} {screen}"
|
||||
)
|
||||
if screen.lower() in {"q", "quit", "stop"}:
|
||||
break
|
||||
|
||||
drain_rx(ser, emit, time.monotonic() + args.after, args.frame_size)
|
||||
except KeyboardInterrupt:
|
||||
print("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