diff --git a/captures/rcp-buttons-call-exact-echo.txt b/captures/rcp-buttons-call-exact-echo.txt new file mode 100644 index 0000000..7bb12a3 --- /dev/null +++ b/captures/rcp-buttons-call-exact-echo.txt @@ -0,0 +1,70 @@ +Button test on COM5 at 38400 8N1 +Listening for 30.0s; respond_to_cam_power=False, respond_to_call=True +16:12:27.373 RX 030 bytes 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA +16:12:27.373 DETECT heartbeat x5 +16:12:27.469 RX 001 bytes 00 +16:12:27.500 RX 005 bytes 00 00 00 80 DA +16:12:28.171 RX 006 bytes 00 00 00 00 80 DA +16:12:28.171 DETECT heartbeat x1 +16:12:28.264 RX 006 bytes 00 00 15 80 00 CF +16:12:28.264 DETECT call-on x1 +16:12:28.314 TX cam-power response frame 006 00 00 15 80 00 CF +16:12:28.314 TX cam-power response frame 006 00 00 15 00 00 4F +16:12:28.348 RX 006 bytes 07 80 45 20 D0 68 +16:12:28.958 RX 001 bytes 00 +16:12:28.989 RX 005 bytes 00 00 00 80 DA +16:12:29.232 RX 006 bytes 00 00 00 00 80 DA +16:12:29.232 DETECT heartbeat x1 +16:12:29.475 RX 006 bytes 00 00 00 00 80 DA +16:12:29.475 DETECT heartbeat x1 +16:12:29.718 RX 001 bytes 00 +16:12:29.748 RX 005 bytes 00 00 00 80 DA +16:12:29.962 RX 001 bytes 00 +16:12:29.992 RX 005 bytes 00 00 00 80 DA +16:12:30.235 RX 006 bytes 00 00 00 00 80 DA +16:12:30.235 DETECT heartbeat x1 +16:12:30.387 RX 001 bytes 00 +16:12:30.417 RX 005 bytes 00 15 00 00 4F +16:12:30.754 RX 006 bytes 00 00 15 80 00 CF +16:12:30.754 DETECT call-on x1 +16:12:31.363 RX 001 bytes 00 +16:12:31.394 RX 005 bytes 00 00 00 80 DA +16:12:32.064 RX 001 bytes 00 +16:12:32.095 RX 005 bytes 00 00 00 80 DA +16:12:32.400 RX 001 bytes 00 +16:12:32.431 RX 005 bytes 00 15 00 00 4F +16:12:32.978 RX 006 bytes 00 00 15 80 00 CF +16:12:32.978 DETECT call-on x1 +16:12:33.100 RX 001 bytes 00 +16:12:33.131 RX 005 bytes 00 15 00 00 4F +16:12:33.414 RX 006 bytes 00 00 15 80 00 CF +16:12:33.414 DETECT call-on x1 +16:12:33.536 RX 001 bytes 00 +16:12:33.567 RX 005 bytes 00 15 00 00 4F +16:12:33.719 RX 006 bytes 00 00 15 80 00 CF +16:12:33.719 DETECT call-on x1 +16:12:33.842 RX 001 bytes 00 +16:12:33.872 RX 005 bytes 00 15 00 00 4F +16:12:33.995 RX 006 bytes 00 00 15 80 00 CF +16:12:33.995 DETECT call-on x1 +16:12:34.147 RX 001 bytes 00 +16:12:34.178 RX 005 bytes 00 15 00 00 4F +16:12:34.300 RX 006 bytes 00 00 15 80 00 CF +16:12:34.300 DETECT call-on x1 +16:12:34.454 RX 001 bytes 00 +16:12:34.485 RX 005 bytes 00 15 00 00 4F +16:12:34.607 RX 006 bytes 00 00 15 80 00 CF +16:12:34.607 DETECT call-on x1 +16:12:34.728 RX 001 bytes 00 +16:12:34.758 RX 005 bytes 00 15 00 00 4F +16:12:34.850 RX 006 bytes 00 00 15 80 00 CF +16:12:34.850 DETECT call-on x1 +16:12:34.942 RX 001 bytes 00 +16:12:34.972 RX 005 bytes 00 15 00 00 4F +16:12:35.095 RX 006 bytes 00 00 15 80 00 CF +16:12:35.095 DETECT call-on x1 +16:12:35.217 RX 006 bytes 00 00 15 00 00 4F +16:12:35.217 DETECT call-off x1 +16:12:35.885 RX 006 bytes 00 00 00 00 80 DA +16:12:35.885 DETECT heartbeat x1 +Stopped. diff --git a/captures/rcp-buttons-call-host-shaped.txt b/captures/rcp-buttons-call-host-shaped.txt new file mode 100644 index 0000000..95ac345 --- /dev/null +++ b/captures/rcp-buttons-call-host-shaped.txt @@ -0,0 +1,34 @@ +Button test on COM5 at 38400 8N1 +Listening for 30.0s; respond_to_cam_power=False, respond_to_call=True +16:12:54.078 RX 031 bytes 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 +16:12:54.078 DETECT heartbeat x5 +16:12:54.443 RX 006 bytes 00 00 00 00 80 DA +16:12:54.443 DETECT heartbeat x1 +16:12:55.112 RX 006 bytes 00 00 15 80 00 CF +16:12:55.112 DETECT call-on x1 +16:12:55.163 TX cam-power response frame 006 00 00 15 00 80 CF +16:12:55.742 RX 006 bytes 00 00 00 00 80 DA +16:12:55.742 DETECT heartbeat x1 +16:12:55.992 RX 006 bytes 00 00 00 00 80 DA +16:12:55.992 DETECT heartbeat x1 +16:12:56.236 RX 001 bytes 00 +16:12:56.267 RX 005 bytes 00 00 00 80 DA +16:12:56.480 RX 001 bytes 00 +16:12:56.511 RX 005 bytes 00 00 00 80 DA +16:12:56.755 RX 006 bytes 00 00 00 00 80 DA +16:12:56.755 DETECT heartbeat x1 +16:12:56.999 RX 006 bytes 00 00 00 00 80 DA +16:12:56.999 DETECT heartbeat x1 +16:12:57.489 RX 006 bytes 00 00 15 80 00 CF +16:12:57.489 DETECT call-on x1 +16:12:58.130 RX 001 bytes 00 +16:12:58.161 RX 005 bytes 00 00 00 80 DA +16:12:58.192 RX 001 bytes 00 +16:12:58.222 RX 005 bytes 00 15 00 00 4F +16:12:58.832 RX 001 bytes 00 +16:12:58.862 RX 005 bytes 00 00 00 80 DA +16:12:59.533 RX 001 bytes 00 +16:12:59.564 RX 005 bytes 00 00 00 80 DA +16:13:00.234 RX 001 bytes 00 +16:13:00.265 RX 005 bytes 00 00 00 80 DA +Stopped. diff --git a/captures/rcp-buttons-cam-power-exact-echo.txt b/captures/rcp-buttons-cam-power-exact-echo.txt new file mode 100644 index 0000000..189876d --- /dev/null +++ b/captures/rcp-buttons-cam-power-exact-echo.txt @@ -0,0 +1,36 @@ +Button test on COM5 at 38400 8N1 +Listening for 30.0s; respond_to_cam_power=True +16:08:03.444 RX 018 bytes 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA +16:08:03.444 DETECT heartbeat x3 +16:08:03.781 RX 001 bytes 00 +16:08:03.812 RX 005 bytes 00 00 00 80 DA +16:08:04.483 RX 001 bytes 00 +16:08:04.514 RX 005 bytes 00 00 00 80 DA +16:08:05.184 RX 001 bytes 00 +16:08:05.214 RX 005 bytes 00 00 00 80 DA +16:08:05.429 RX 006 bytes 00 00 07 80 00 DD +16:08:05.429 DETECT cam-power x1 +16:08:05.479 TX cam-power response frame 006 00 00 07 80 00 DD +16:08:06.089 RX 006 bytes 00 00 00 00 80 DA +16:08:06.089 DETECT heartbeat x1 +16:08:06.331 RX 001 bytes 00 +16:08:06.362 RX 005 bytes 00 00 00 80 DA +16:08:06.576 RX 001 bytes 00 +16:08:06.607 RX 005 bytes 00 00 00 80 DA +16:08:06.852 RX 006 bytes 00 00 00 00 80 DA +16:08:06.852 DETECT heartbeat x1 +16:08:07.094 RX 006 bytes 00 00 00 00 80 DA +16:08:07.094 DETECT heartbeat x1 +16:08:07.337 RX 001 bytes 00 +16:08:07.367 RX 005 bytes 00 00 00 80 DA +16:08:07.672 RX 006 bytes 00 00 07 80 00 DD +16:08:07.672 DETECT cam-power x1 +16:08:08.285 RX 001 bytes 00 +16:08:08.315 RX 005 bytes 00 00 00 80 DA +16:08:08.987 RX 001 bytes 00 +16:08:09.017 RX 005 bytes 00 00 00 80 DA +16:08:09.686 RX 001 bytes 00 +16:08:09.717 RX 005 bytes 00 00 00 80 DA +16:08:10.386 RX 001 bytes 00 +16:08:10.417 RX 005 bytes 00 00 00 80 DA +Stopped. diff --git a/captures/rcp-buttons-cam-power-host-shaped.txt b/captures/rcp-buttons-cam-power-host-shaped.txt new file mode 100644 index 0000000..42296e3 --- /dev/null +++ b/captures/rcp-buttons-cam-power-host-shaped.txt @@ -0,0 +1,32 @@ +Button test on COM5 at 38400 8N1 +Listening for 30.0s; respond_to_cam_power=True +16:08:44.938 RX 024 bytes 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA +16:08:44.938 DETECT heartbeat x4 +16:08:45.640 RX 006 bytes 00 00 00 00 80 DA +16:08:45.640 DETECT heartbeat x1 +16:08:46.126 RX 006 bytes 00 00 07 80 00 DD +16:08:46.126 DETECT cam-power x1 +16:08:46.177 TX cam-power response frame 006 00 00 07 00 80 DD +16:08:46.725 RX 001 bytes 00 +16:08:46.756 RX 005 bytes 00 00 00 80 DA +16:08:47.001 RX 006 bytes 00 00 00 00 80 DA +16:08:47.001 DETECT heartbeat x1 +16:08:47.245 RX 006 bytes 00 00 00 00 80 DA +16:08:47.245 DETECT heartbeat x1 +16:08:47.488 RX 001 bytes 00 +16:08:47.519 RX 005 bytes 00 00 00 80 DA +16:08:47.731 RX 001 bytes 00 +16:08:47.762 RX 005 bytes 00 00 00 80 DA +16:08:48.005 RX 006 bytes 00 00 00 00 80 DA +16:08:48.005 DETECT heartbeat x1 +16:08:48.645 RX 006 bytes 00 00 00 00 80 DA +16:08:48.645 DETECT heartbeat x1 +16:08:49.345 RX 006 bytes 00 00 00 00 80 DA +16:08:49.345 DETECT heartbeat x1 +16:08:50.045 RX 006 bytes 00 00 00 00 80 DA +16:08:50.045 DETECT heartbeat x1 +16:08:50.749 RX 006 bytes 00 00 00 00 80 DA +16:08:50.749 DETECT heartbeat x1 +16:08:51.447 RX 006 bytes 00 00 00 00 80 DA +16:08:51.447 DETECT heartbeat x1 +Stopped. diff --git a/captures/rcp-buttons-latched-after-b5.txt b/captures/rcp-buttons-latched-after-b5.txt new file mode 100644 index 0000000..69627a3 --- /dev/null +++ b/captures/rcp-buttons-latched-after-b5.txt @@ -0,0 +1,57 @@ +Button test on COM5 at 38400 8N1 +16:06:55.861 TX latch primer frame 006 00 00 00 00 80 DA +LATCH PRIMER RX 18 bytes; heartbeat=3 +16:06:56.871 TX latch query frame 006 00 00 B5 00 80 6F +LATCH QUERY RX 30 bytes; no known complete frames +Listening for 30.0s; respond_to_cam_power=False +16:07:02.667 RX 054 bytes 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA +16:07:02.667 DETECT heartbeat x5 +16:07:02.941 RX 001 bytes 00 +16:07:02.971 RX 005 bytes 00 00 00 80 DA +16:07:03.399 RX 006 bytes 00 00 15 80 00 CF +16:07:03.399 DETECT call-on x1 +16:07:04.040 RX 001 bytes 00 +16:07:04.070 RX 005 bytes 00 00 00 80 DA +16:07:04.101 RX 001 bytes 00 +16:07:04.131 RX 005 bytes 00 15 00 00 4F +16:07:04.527 RX 006 bytes 00 00 15 80 00 CF +16:07:04.527 DETECT call-on x1 +16:07:05.139 RX 001 bytes 00 +16:07:05.169 RX 005 bytes 00 00 00 80 DA +16:07:05.291 RX 006 bytes 00 00 15 00 00 4F +16:07:05.291 DETECT call-off x1 +16:07:05.932 RX 001 bytes 00 +16:07:05.963 RX 005 bytes 00 00 00 80 DA +16:07:06.147 RX 006 bytes 00 00 15 80 00 CF +16:07:06.147 DETECT call-on x1 +16:07:06.541 RX 001 bytes 00 +16:07:06.571 RX 005 bytes 00 15 00 00 4F +16:07:06.784 RX 006 bytes 00 00 15 80 00 CF +16:07:06.784 DETECT call-on x1 +16:07:06.907 RX 006 bytes 00 00 15 00 00 4F +16:07:06.907 DETECT call-off x1 +16:07:07.030 RX 006 bytes 00 00 15 80 00 CF +16:07:07.030 DETECT call-on x1 +16:07:07.213 RX 006 bytes 00 00 15 00 00 4F +16:07:07.213 DETECT call-off x1 +16:07:07.854 RX 006 bytes 00 00 00 00 80 DA +16:07:07.854 DETECT heartbeat x1 +16:07:08.556 RX 006 bytes 00 00 00 00 80 DA +16:07:08.556 DETECT heartbeat x1 +16:07:09.256 RX 006 bytes 00 00 00 00 80 DA +16:07:09.256 DETECT heartbeat x1 +16:07:09.287 RX 006 bytes 00 00 07 80 00 DD +16:07:09.287 DETECT cam-power x1 +16:07:09.957 RX 006 bytes 00 00 00 00 80 DA +16:07:09.957 DETECT heartbeat x1 +16:07:09.987 RX 006 bytes 00 00 07 80 00 DD +16:07:09.987 DETECT cam-power x1 +16:07:10.414 RX 006 bytes 00 00 07 80 00 DD +16:07:10.414 DETECT cam-power x1 +16:07:11.053 RX 006 bytes 00 00 00 00 80 DA +16:07:11.053 DETECT heartbeat x1 +16:07:11.754 RX 006 bytes 00 00 00 00 80 DA +16:07:11.754 DETECT heartbeat x1 +16:07:12.454 RX 006 bytes 00 00 00 00 80 DA +16:07:12.454 DETECT heartbeat x1 +Stopped. diff --git a/captures/rcp-buttons-latched-call-host-shaped.txt b/captures/rcp-buttons-latched-call-host-shaped.txt new file mode 100644 index 0000000..ce937b5 --- /dev/null +++ b/captures/rcp-buttons-latched-call-host-shaped.txt @@ -0,0 +1,36 @@ +Button test on COM5 at 38400 8N1 +16:13:12.931 TX latch primer frame 006 00 00 00 00 80 DA +LATCH PRIMER RX 18 bytes; heartbeat=2 +16:13:13.939 TX latch query frame 006 00 00 B5 00 80 6F +LATCH QUERY RX 24 bytes; heartbeat=4 +Listening for 30.0s; respond_to_cam_power=False, respond_to_call=True +16:13:17.863 RX 042 bytes 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA +16:13:17.863 DETECT heartbeat x7 +16:13:18.106 RX 006 bytes 00 00 15 80 00 CF +16:13:18.106 DETECT call-on x1 +16:13:18.158 TX cam-power response frame 006 00 00 15 00 80 CF +16:13:18.769 RX 006 bytes 00 00 15 00 00 4F +16:13:18.769 DETECT call-off x1 +16:13:19.014 RX 006 bytes 00 00 15 00 00 4F +16:13:19.014 DETECT call-off x1 +16:13:19.258 RX 001 bytes 00 +16:13:19.289 RX 005 bytes 00 15 00 00 4F +16:13:19.503 RX 001 bytes 00 +16:13:19.533 RX 005 bytes 00 15 00 00 4F +16:13:19.776 RX 006 bytes 00 00 15 00 00 4F +16:13:19.776 DETECT call-off x1 +16:13:20.021 RX 006 bytes 00 00 15 00 00 4F +16:13:20.021 DETECT call-off x1 +16:13:20.539 RX 006 bytes 00 00 15 80 00 CF +16:13:20.539 DETECT call-on x1 +16:13:20.723 RX 006 bytes 00 00 15 00 00 4F +16:13:20.723 DETECT call-off x1 +16:13:20.846 RX 006 bytes 00 00 15 80 00 CF +16:13:20.846 DETECT call-on x1 +16:13:20.967 RX 001 bytes 00 +16:13:20.997 RX 005 bytes 00 15 00 00 4F +16:13:21.670 RX 001 bytes 00 +16:13:21.700 RX 005 bytes 00 00 00 80 DA +16:13:22.374 RX 001 bytes 00 +16:13:22.404 RX 005 bytes 00 00 00 80 DA +Stopped. diff --git a/captures/rcp-buttons-offline-control.txt b/captures/rcp-buttons-offline-control.txt new file mode 100644 index 0000000..cc3a81f --- /dev/null +++ b/captures/rcp-buttons-offline-control.txt @@ -0,0 +1,59 @@ +Button test on COM5 at 38400 8N1 +Listening for 30.0s; respond_to_cam_power=False +16:06:14.829 RX 060 bytes 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA 00 00 00 00 80 DA +16:06:14.829 DETECT heartbeat x10 +16:06:15.349 RX 006 bytes 00 00 00 00 80 DA +16:06:15.349 DETECT heartbeat x1 +16:06:15.502 RX 006 bytes 00 00 15 80 00 CF +16:06:15.502 DETECT call-on x1 +16:06:15.776 RX 001 bytes 00 +16:06:15.806 RX 005 bytes 00 15 00 00 4F +16:06:16.141 RX 006 bytes 00 00 15 80 00 CF +16:06:16.141 DETECT call-on x1 +16:06:16.603 RX 001 bytes 00 +16:06:16.633 RX 005 bytes 00 15 00 00 4F +16:06:17.183 RX 006 bytes 00 00 15 80 00 CF +16:06:17.183 DETECT call-on x1 +16:06:17.703 RX 006 bytes 00 00 15 00 00 4F +16:06:17.703 DETECT call-off x1 +16:06:18.130 RX 006 bytes 00 00 15 80 00 CF +16:06:18.130 DETECT call-on x1 +16:06:18.832 RX 001 bytes 00 +16:06:18.863 RX 005 bytes 00 00 00 80 DA +16:06:19.534 RX 001 bytes 00 +16:06:19.565 RX 005 bytes 00 00 00 80 DA +16:06:20.236 RX 001 bytes 00 +16:06:20.267 RX 005 bytes 00 00 00 80 DA +16:06:20.726 RX 006 bytes 00 00 15 00 00 4F +16:06:20.726 DETECT call-off x1 +16:06:21.337 RX 001 bytes 00 +16:06:21.368 RX 005 bytes 00 00 00 80 DA +16:06:22.040 RX 006 bytes 00 00 00 00 80 DA +16:06:22.040 DETECT heartbeat x1 +16:06:22.742 RX 006 bytes 00 00 00 00 80 DA +16:06:22.742 DETECT heartbeat x1 +16:06:22.896 RX 006 bytes 00 00 07 80 00 DD +16:06:22.896 DETECT cam-power x1 +16:06:23.538 RX 006 bytes 00 00 00 00 80 DA +16:06:23.538 DETECT heartbeat x1 +16:06:24.240 RX 006 bytes 00 00 00 00 80 DA +16:06:24.240 DETECT heartbeat x1 +16:06:24.944 RX 006 bytes 00 00 00 00 80 DA +16:06:24.944 DETECT heartbeat x1 +16:06:25.433 RX 006 bytes 00 00 07 80 00 DD +16:06:25.433 DETECT cam-power x1 +16:06:26.045 RX 006 bytes 00 00 00 00 80 DA +16:06:26.045 DETECT heartbeat x1 +16:06:26.747 RX 006 bytes 00 00 00 00 80 DA +16:06:26.747 DETECT heartbeat x1 +16:06:26.870 RX 006 bytes 00 00 07 80 00 DD +16:06:26.870 DETECT cam-power x1 +16:06:27.539 RX 006 bytes 00 00 00 00 80 DA +16:06:27.539 DETECT heartbeat x1 +16:06:28.240 RX 006 bytes 00 00 00 00 80 DA +16:06:28.240 DETECT heartbeat x1 +16:06:28.942 RX 006 bytes 00 00 00 00 80 DA +16:06:28.942 DETECT heartbeat x1 +16:06:29.641 RX 006 bytes 00 00 00 00 80 DA +16:06:29.641 DETECT heartbeat x1 +Stopped. diff --git a/captures/rcp-unlatch-wide-after-a0.txt b/captures/rcp-unlatch-wide-after-a0.txt new file mode 100644 index 0000000..7994adc --- /dev/null +++ b/captures/rcp-unlatch-wide-after-a0.txt @@ -0,0 +1,280 @@ +Unlatch sweep: latch 00 00 00 00 80 DA -> 00 00 A0 00 80 7A, verify 00 00 00 00 80 DA -> 00 00 A0 00 80 7A, 23 candidates on COM5 at 38400 8N1 +CANDIDATE 0x00 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:40:16.557 TX latch primer frame 006 00 00 00 00 80 DA +15:40:16.557 LATCH PRIMER RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes +15:40:17.380 TX latch query frame 006 00 00 A0 00 80 7A +15:40:17.380 LATCH QUERY RX ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00 +15:40:17.380 LATCH QUERY RX raw 07 80 68 40 30 C5 07 80 68 40 30 C5 07 80 68 40 30 C5 07 80 68 40 30 C5 +15:40:18.207 TX candidate 0x00 frame 006 00 00 00 00 80 DA +15:40:18.207 CANDIDATE 0X00 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:40:26.394 SCREEN candidate=0x00 CONNECT NOT ACT +15:40:26.394 TX verify primer frame 006 00 00 00 00 80 DA +15:40:26.394 VERIFY PRIMER RX heartbeat-compatible RX: 84 bytes, offset 0, 14 frames + 0 bytes +15:40:27.214 TX verify query frame 006 00 00 A0 00 80 7A +15:40:27.214 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 1/23 +CANDIDATE 0x01 BASELINE heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:40:31.751 TX latch primer frame 006 00 00 00 00 80 DA +15:40:31.751 LATCH PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:40:32.576 TX latch query frame 006 00 00 A0 00 80 7A +15:40:32.576 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:40:33.399 TX candidate 0x01 frame 006 00 00 01 00 80 DB +15:40:33.399 CANDIDATE 0X01 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:40:42.143 TX verify primer frame 006 00 00 00 00 80 DA +15:40:42.143 VERIFY PRIMER RX heartbeat-compatible RX: 84 bytes, offset 0, 14 frames + 0 bytes +15:40:42.967 TX verify query frame 006 00 00 A0 00 80 7A +15:40:42.967 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 2/23 +CANDIDATE 0x0F BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:40:47.504 TX latch primer frame 006 00 00 00 00 80 DA +15:40:47.504 LATCH PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:40:48.328 TX latch query frame 006 00 00 A0 00 80 7A +15:40:48.328 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:40:49.150 TX candidate 0x0F frame 006 00 00 0F 00 80 D5 +15:40:49.150 CANDIDATE 0X0F RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:40:53.165 TX verify primer frame 006 00 00 00 00 80 DA +15:40:53.165 VERIFY PRIMER RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:40:53.989 TX verify query frame 006 00 00 A0 00 80 7A +15:40:53.989 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 3/23 +CANDIDATE 0x10 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:40:58.496 TX latch primer frame 006 00 00 00 00 80 DA +15:40:58.496 LATCH PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:40:59.319 TX latch query frame 006 00 00 A0 00 80 7A +15:40:59.319 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:41:00.144 TX candidate 0x10 frame 006 00 00 10 00 80 CA +15:41:00.144 CANDIDATE 0X10 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:41:09.497 TX verify primer frame 006 00 00 00 00 80 DA +15:41:09.497 VERIFY PRIMER RX heartbeat-compatible RX: 96 bytes, offset 0, 16 frames + 0 bytes +15:41:10.319 TX verify query frame 006 00 00 A0 00 80 7A +15:41:10.319 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 4/23 +CANDIDATE 0x1A BASELINE heartbeat-compatible RX: 35 bytes, offset 1, 5 frames + 5 bytes +15:41:14.840 TX latch primer frame 006 00 00 00 00 80 DA +15:41:14.840 LATCH PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:41:15.663 TX latch query frame 006 00 00 A0 00 80 7A +15:41:15.663 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:41:16.487 TX candidate 0x1A frame 006 00 00 1A 00 80 C0 +15:41:16.487 CANDIDATE 0X1A RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:41:19.803 TX verify primer frame 006 00 00 00 00 80 DA +15:41:19.803 VERIFY PRIMER RX heartbeat-compatible RX: 42 bytes, offset 0, 7 frames + 0 bytes +15:41:20.627 TX verify query frame 006 00 00 A0 00 80 7A +15:41:20.627 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 5/23 +CANDIDATE 0x1B BASELINE heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:41:25.146 TX latch primer frame 006 00 00 00 00 80 DA +15:41:25.146 LATCH PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:41:25.971 TX latch query frame 006 00 00 A0 00 80 7A +15:41:25.971 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:41:26.794 TX candidate 0x1B frame 006 00 00 1B 00 80 C1 +15:41:26.794 CANDIDATE 0X1B RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:41:28.825 TX verify primer frame 006 00 00 00 00 80 DA +15:41:28.825 VERIFY PRIMER RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:41:29.648 TX verify query frame 006 00 00 A0 00 80 7A +15:41:29.648 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 6/23 +CANDIDATE 0x40 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:41:34.187 TX latch primer frame 006 00 00 00 00 80 DA +15:41:34.187 LATCH PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:41:35.013 TX latch query frame 006 00 00 A0 00 80 7A +15:41:35.013 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:41:35.838 TX candidate 0x40 frame 006 00 00 40 00 80 9A +15:41:35.838 CANDIDATE 0X40 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:41:40.188 TX verify primer frame 006 00 00 00 00 80 DA +15:41:40.188 VERIFY PRIMER RX heartbeat-compatible RX: 54 bytes, offset 0, 9 frames + 0 bytes +15:41:41.012 TX verify query frame 006 00 00 A0 00 80 7A +15:41:41.012 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 7/23 +CANDIDATE 0x4F BASELINE heartbeat-compatible RX: 31 bytes, offset 0, 5 frames + 1 bytes +15:41:45.534 TX latch primer frame 006 00 00 00 00 80 DA +15:41:45.534 LATCH PRIMER RX heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +15:41:46.359 TX latch query frame 006 00 00 A0 00 80 7A +15:41:46.359 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:41:47.184 TX candidate 0x4F frame 006 00 00 4F 00 80 95 +15:41:47.184 CANDIDATE 0X4F RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:41:56.052 TX verify primer frame 006 00 00 00 00 80 DA +15:41:56.052 VERIFY PRIMER RX heartbeat-compatible RX: 85 bytes, offset 0, 14 frames + 1 bytes +15:41:56.875 TX verify query frame 006 00 00 A0 00 80 7A +15:41:56.875 VERIFY QUERY RX heartbeat-compatible RX: 41 bytes, offset 1, 6 frames + 5 bytes +Completed candidate 8/23 +CANDIDATE 0x68 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:42:01.384 TX latch primer frame 006 00 00 00 00 80 DA +15:42:01.384 LATCH PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:42:02.203 TX latch query frame 006 00 00 A0 00 80 7A +15:42:02.203 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:42:03.025 TX candidate 0x68 frame 006 00 00 68 00 80 B2 +15:42:03.025 CANDIDATE 0X68 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:42:08.000 TX verify primer frame 006 00 00 00 00 80 DA +15:42:08.000 VERIFY PRIMER RX heartbeat-compatible RX: 60 bytes, offset 0, 10 frames + 0 bytes +15:42:08.828 TX verify query frame 006 00 00 A0 00 80 7A +15:42:08.828 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 9/23 +CANDIDATE 0x6C BASELINE heartbeat-compatible RX: 31 bytes, offset 0, 5 frames + 1 bytes +15:42:13.334 TX latch primer frame 006 00 00 00 00 80 DA +15:42:13.334 LATCH PRIMER RX heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +15:42:14.157 TX latch query frame 006 00 00 A0 00 80 7A +15:42:14.157 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:42:14.981 TX candidate 0x6C frame 006 00 00 6C 00 80 B6 +15:42:14.981 CANDIDATE 0X6C RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:42:22.738 TX verify primer frame 006 00 00 00 00 80 DA +15:42:22.738 VERIFY PRIMER RX heartbeat-compatible RX: 84 bytes, offset 0, 14 frames + 0 bytes +15:42:23.562 TX verify query frame 006 00 00 A0 00 80 7A +15:42:23.562 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 10/23 +CANDIDATE 0x80 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:42:28.074 TX latch primer frame 006 00 00 00 00 80 DA +15:42:28.074 LATCH PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:42:28.898 TX latch query frame 006 00 00 A0 00 80 7A +15:42:28.898 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:42:29.719 TX candidate 0x80 frame 006 00 00 80 00 80 5A +15:42:29.719 CANDIDATE 0X80 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:42:40.789 TX verify primer frame 006 00 00 00 00 80 DA +15:42:40.789 VERIFY PRIMER RX heartbeat-compatible RX: 108 bytes, offset 0, 18 frames + 0 bytes +15:42:41.615 TX verify query frame 006 00 00 A0 00 80 7A +15:42:41.615 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 11/23 +CANDIDATE 0x8F BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:42:46.121 TX latch primer frame 006 00 00 00 00 80 DA +15:42:46.121 LATCH PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:42:46.943 TX latch query frame 006 00 00 A0 00 80 7A +15:42:46.943 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:42:47.764 TX candidate 0x8F frame 006 00 00 8F 00 80 55 +15:42:47.764 CANDIDATE 0X8F RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:42:50.933 TX verify primer frame 006 00 00 00 00 80 DA +15:42:50.933 VERIFY PRIMER RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:42:51.755 TX verify query frame 006 00 00 A0 00 80 7A +15:42:51.755 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 12/23 +CANDIDATE 0x90 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:42:56.261 TX latch primer frame 006 00 00 00 00 80 DA +15:42:56.261 LATCH PRIMER RX heartbeat-compatible RX: 19 bytes, offset 0, 3 frames + 1 bytes +15:42:57.084 TX latch query frame 006 00 00 A0 00 80 7A +15:42:57.084 LATCH QUERY RX heartbeat-compatible RX: 29 bytes, offset 1, 4 frames + 5 bytes +15:42:57.908 TX candidate 0x90 frame 006 00 00 90 00 80 4A +15:42:57.908 CANDIDATE 0X90 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:43:09.837 TX verify primer frame 006 00 00 00 00 80 DA +15:43:09.837 VERIFY PRIMER RX heartbeat-compatible RX: 120 bytes, offset 0, 20 frames + 0 bytes +15:43:10.662 TX verify query frame 006 00 00 A0 00 80 7A +15:43:10.662 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 13/23 +CANDIDATE 0x9F BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:43:15.171 TX latch primer frame 006 00 00 00 00 80 DA +15:43:15.171 LATCH PRIMER RX heartbeat-compatible RX: 19 bytes, offset 0, 3 frames + 1 bytes +15:43:15.991 TX latch query frame 006 00 00 A0 00 80 7A +15:43:15.991 LATCH QUERY RX heartbeat-compatible RX: 29 bytes, offset 1, 4 frames + 5 bytes +15:43:16.813 TX candidate 0x9F frame 006 00 00 9F 00 80 45 +15:43:16.813 CANDIDATE 0X9F RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:43:21.532 TX verify primer frame 006 00 00 00 00 80 DA +15:43:21.532 VERIFY PRIMER RX heartbeat-compatible RX: 42 bytes, offset 0, 7 frames + 0 bytes +15:43:22.356 TX verify query frame 006 00 00 A0 00 80 7A +15:43:22.356 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 14/23 +CANDIDATE 0xA0 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:43:26.867 TX latch primer frame 006 00 00 00 00 80 DA +15:43:26.867 LATCH PRIMER RX heartbeat-compatible RX: 19 bytes, offset 0, 3 frames + 1 bytes +15:43:27.690 TX latch query frame 006 00 00 A0 00 80 7A +15:43:27.690 LATCH QUERY RX heartbeat-compatible RX: 29 bytes, offset 1, 4 frames + 5 bytes +15:43:28.514 TX candidate 0xA0 frame 006 00 00 A0 00 80 7A +15:43:28.514 CANDIDATE 0XA0 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:43:36.116 TX verify primer frame 006 00 00 00 00 80 DA +15:43:36.116 VERIFY PRIMER RX heartbeat-compatible RX: 78 bytes, offset 0, 13 frames + 0 bytes +15:43:36.940 TX verify query frame 006 00 00 A0 00 80 7A +15:43:36.940 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 15/23 +CANDIDATE 0xB0 BASELINE heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:43:41.451 TX latch primer frame 006 00 00 00 00 80 DA +15:43:41.451 LATCH PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:43:42.275 TX latch query frame 006 00 00 A0 00 80 7A +15:43:42.275 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:43:43.097 TX candidate 0xB0 frame 006 00 00 B0 00 80 6A +15:43:43.097 CANDIDATE 0XB0 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:43:48.375 TX verify primer frame 006 00 00 00 00 80 DA +15:43:48.375 VERIFY PRIMER RX heartbeat-compatible RX: 54 bytes, offset 0, 9 frames + 0 bytes +15:43:49.199 TX verify query frame 006 00 00 A0 00 80 7A +15:43:49.199 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 16/23 +CANDIDATE 0xB8 BASELINE heartbeat-compatible RX: 31 bytes, offset 0, 5 frames + 1 bytes +15:43:53.740 TX latch primer frame 006 00 00 00 00 80 DA +15:43:53.740 LATCH PRIMER RX heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +15:43:54.565 TX latch query frame 006 00 00 A0 00 80 7A +15:43:54.565 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:43:55.387 TX candidate 0xB8 frame 006 00 00 B8 00 80 62 +15:43:55.387 CANDIDATE 0XB8 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:44:08.829 TX verify primer frame 006 00 00 00 00 80 DA +15:44:08.829 VERIFY PRIMER RX heartbeat-compatible RX: 132 bytes, offset 0, 22 frames + 0 bytes +15:44:09.652 TX verify query frame 006 00 00 A0 00 80 7A +15:44:09.652 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 17/23 +CANDIDATE 0xBC BASELINE heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:44:14.195 TX latch primer frame 006 00 00 00 00 80 DA +15:44:14.195 LATCH PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:44:15.016 TX latch query frame 006 00 00 A0 00 80 7A +15:44:15.016 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:44:15.839 TX candidate 0xBC frame 006 00 00 BC 00 80 66 +15:44:15.839 CANDIDATE 0XBC RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:44:24.624 TX verify primer frame 006 00 00 00 00 80 DA +15:44:24.624 VERIFY PRIMER RX heartbeat-compatible RX: 84 bytes, offset 0, 14 frames + 0 bytes +15:44:25.448 TX verify query frame 006 00 00 A0 00 80 7A +15:44:25.448 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 18/23 +CANDIDATE 0xC0 BASELINE heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:44:29.984 TX latch primer frame 006 00 00 00 00 80 DA +15:44:29.984 LATCH PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:44:30.807 TX latch query frame 006 00 00 A0 00 80 7A +15:44:30.807 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:44:31.629 TX candidate 0xC0 frame 006 00 00 C0 00 80 1A +15:44:31.629 CANDIDATE 0XC0 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:44:34.817 TX verify primer frame 006 00 00 00 00 80 DA +15:44:34.817 VERIFY PRIMER RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:44:35.637 TX verify query frame 006 00 00 A0 00 80 7A +15:44:35.637 VERIFY QUERY RX heartbeat-compatible RX: 37 bytes, offset 0, 6 frames + 1 bytes +Completed candidate 19/23 +CANDIDATE 0xCF BASELINE heartbeat-compatible RX: 30 bytes, offset 1, 5 frames + 0 bytes +15:44:40.151 TX latch primer frame 006 00 00 00 00 80 DA +15:44:40.151 LATCH PRIMER RX heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +15:44:40.971 TX latch query frame 006 00 00 A0 00 80 7A +15:44:40.971 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:44:41.797 TX candidate 0xCF frame 006 00 00 CF 00 80 15 +15:44:41.797 CANDIDATE 0XCF RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:44:44.310 TX verify primer frame 006 00 00 00 00 80 DA +15:44:44.310 VERIFY PRIMER RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:44:45.135 TX verify query frame 006 00 00 A0 00 80 7A +15:44:45.135 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 20/23 +CANDIDATE 0xE0 BASELINE heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:44:49.674 TX latch primer frame 006 00 00 00 00 80 DA +15:44:49.674 LATCH PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:44:50.499 TX latch query frame 006 00 00 A0 00 80 7A +15:44:50.499 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:44:51.324 TX candidate 0xE0 frame 006 00 00 E0 00 80 3A +15:44:51.324 CANDIDATE 0XE0 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:44:54.866 TX verify primer frame 006 00 00 00 00 80 DA +15:44:54.866 VERIFY PRIMER RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes +15:44:55.692 TX verify query frame 006 00 00 A0 00 80 7A +15:44:55.692 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 21/23 +CANDIDATE 0xEF BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:45:00.200 TX latch primer frame 006 00 00 00 00 80 DA +15:45:00.200 LATCH PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:45:01.024 TX latch query frame 006 00 00 A0 00 80 7A +15:45:01.024 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:45:01.845 TX candidate 0xEF frame 006 00 00 EF 00 80 35 +15:45:01.845 CANDIDATE 0XEF RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:45:06.227 TX verify primer frame 006 00 00 00 00 80 DA +15:45:06.227 VERIFY PRIMER RX heartbeat-compatible RX: 54 bytes, offset 0, 9 frames + 0 bytes +15:45:07.051 TX verify query frame 006 00 00 A0 00 80 7A +15:45:07.051 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 22/23 +CANDIDATE 0xFF BASELINE heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:45:11.564 TX latch primer frame 006 00 00 00 00 80 DA +15:45:11.564 LATCH PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:45:12.387 TX latch query frame 006 00 00 A0 00 80 7A +15:45:12.387 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:45:13.212 TX candidate 0xFF frame 006 00 00 FF 00 80 25 +15:45:13.212 CANDIDATE 0XFF RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:45:16.013 TX verify primer frame 006 00 00 00 00 80 DA +15:45:16.013 VERIFY PRIMER RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:45:16.836 TX verify query frame 006 00 00 A0 00 80 7A +15:45:16.836 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 23/23 +Verify responses: 0 diff --git a/captures/rcp-unlatch-wide-after-b5.txt b/captures/rcp-unlatch-wide-after-b5.txt new file mode 100644 index 0000000..6997e1c --- /dev/null +++ b/captures/rcp-unlatch-wide-after-b5.txt @@ -0,0 +1,594 @@ +Unlatch sweep: latch 00 00 00 00 80 DA -> 00 00 B5 00 80 6F, verify 00 00 00 00 80 DA -> 00 00 B5 00 80 6F, 49 candidates on COM5 at 38400 8N1 +CANDIDATE 0x00 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:29:27.553 TX latch primer frame 006 00 00 00 00 80 DA +15:29:27.553 LATCH PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:29:28.375 TX latch query frame 006 00 00 B5 00 80 6F +15:29:28.375 LATCH QUERY RX ANOMALY 30 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00 +15:29:28.375 LATCH QUERY RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 +15:29:29.200 TX candidate 0x00 frame 006 00 00 00 00 80 DA +15:29:29.200 CANDIDATE 0X00 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:29:37.453 SCREEN candidate=0x00 CONNECT NOT ACT +15:29:37.453 TX verify primer frame 006 00 00 00 00 80 DA +15:29:37.453 VERIFY PRIMER RX heartbeat-compatible RX: 84 bytes, offset 0, 14 frames + 0 bytes +15:29:38.275 TX verify query frame 006 00 00 B5 00 80 6F +15:29:38.275 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 1/49 +CANDIDATE 0x01 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:29:42.791 TX latch primer frame 006 00 00 00 00 80 DA +15:29:42.791 LATCH PRIMER RX heartbeat-compatible RX: 19 bytes, offset 0, 3 frames + 1 bytes +15:29:43.615 TX latch query frame 006 00 00 B5 00 80 6F +15:29:43.615 LATCH QUERY RX heartbeat-compatible RX: 29 bytes, offset 1, 4 frames + 5 bytes +15:29:44.438 TX candidate 0x01 frame 006 00 00 01 00 80 DB +15:29:44.438 CANDIDATE 0X01 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:29:54.059 TX verify primer frame 006 00 00 00 00 80 DA +15:29:54.059 VERIFY PRIMER RX heartbeat-compatible RX: 96 bytes, offset 0, 16 frames + 0 bytes +15:29:54.885 TX verify query frame 006 00 00 B5 00 80 6F +15:29:54.885 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 2/49 +CANDIDATE 0x03 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:29:59.398 TX latch primer frame 006 00 00 00 00 80 DA +15:29:59.398 LATCH PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:30:00.222 TX latch query frame 006 00 00 B5 00 80 6F +15:30:00.222 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:30:01.044 TX candidate 0x03 frame 006 00 00 03 00 80 D9 +15:30:01.044 CANDIDATE 0X03 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:30:04.582 TX verify primer frame 006 00 00 00 00 80 DA +15:30:04.582 VERIFY PRIMER RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes +15:30:05.404 TX verify query frame 006 00 00 B5 00 80 6F +15:30:05.404 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 3/49 +CANDIDATE 0x07 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:30:09.918 TX latch primer frame 006 00 00 00 00 80 DA +15:30:09.918 LATCH PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:30:10.740 TX latch query frame 006 00 00 B5 00 80 6F +15:30:10.740 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:30:11.561 TX candidate 0x07 frame 006 00 00 07 00 80 DD +15:30:11.561 CANDIDATE 0X07 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:30:15.068 TX verify primer frame 006 00 00 00 00 80 DA +15:30:15.068 VERIFY PRIMER RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes +15:30:15.891 TX verify query frame 006 00 00 B5 00 80 6F +15:30:15.891 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 4/49 +CANDIDATE 0x0A BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:30:20.401 TX latch primer frame 006 00 00 00 00 80 DA +15:30:20.401 LATCH PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:30:21.226 TX latch query frame 006 00 00 B5 00 80 6F +15:30:21.226 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:30:22.054 TX candidate 0x0A frame 006 00 00 0A 00 80 D0 +15:30:22.054 CANDIDATE 0X0A RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:30:44.371 TX verify primer frame 006 00 00 00 00 80 DA +15:30:44.371 VERIFY PRIMER RX heartbeat-compatible RX: 204 bytes, offset 0, 34 frames + 0 bytes +15:30:45.194 TX verify query frame 006 00 00 B5 00 80 6F +15:30:45.194 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 5/49 +CANDIDATE 0x0C BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:30:49.708 TX latch primer frame 006 00 00 00 00 80 DA +15:30:49.708 LATCH PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:30:50.530 TX latch query frame 006 00 00 B5 00 80 6F +15:30:50.530 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:30:51.351 TX candidate 0x0C frame 006 00 00 0C 00 80 D6 +15:30:51.351 CANDIDATE 0X0C RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:30:58.630 TX verify primer frame 006 00 00 00 00 80 DA +15:30:58.630 VERIFY PRIMER RX heartbeat-compatible RX: 84 bytes, offset 0, 14 frames + 0 bytes +15:30:59.451 TX verify query frame 006 00 00 B5 00 80 6F +15:30:59.451 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 6/49 +CANDIDATE 0x0D BASELINE heartbeat-compatible RX: 31 bytes, offset 0, 5 frames + 1 bytes +15:31:03.963 TX latch primer frame 006 00 00 00 00 80 DA +15:31:03.963 LATCH PRIMER RX heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +15:31:04.784 TX latch query frame 006 00 00 B5 00 80 6F +15:31:04.784 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:31:05.606 TX candidate 0x0D frame 006 00 00 0D 00 80 D7 +15:31:05.606 CANDIDATE 0X0D RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:31:09.654 TX verify primer frame 006 00 00 00 00 80 DA +15:31:09.654 VERIFY PRIMER RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes +15:31:10.477 TX verify query frame 006 00 00 B5 00 80 6F +15:31:10.477 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 7/49 +CANDIDATE 0x0E BASELINE heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:31:14.988 TX latch primer frame 006 00 00 00 00 80 DA +15:31:14.988 LATCH PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:31:15.813 TX latch query frame 006 00 00 B5 00 80 6F +15:31:15.813 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:31:16.633 TX candidate 0x0E frame 006 00 00 0E 00 80 D4 +15:31:16.633 CANDIDATE 0X0E RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:31:20.254 TX verify primer frame 006 00 00 00 00 80 DA +15:31:20.254 VERIFY PRIMER RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:31:21.077 TX verify query frame 006 00 00 B5 00 80 6F +15:31:21.077 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 8/49 +CANDIDATE 0x0F BASELINE heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:31:25.586 TX latch primer frame 006 00 00 00 00 80 DA +15:31:25.586 LATCH PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:31:26.409 TX latch query frame 006 00 00 B5 00 80 6F +15:31:26.409 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:31:27.233 TX candidate 0x0F frame 006 00 00 0F 00 80 D5 +15:31:27.233 CANDIDATE 0X0F RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:31:33.055 TX verify primer frame 006 00 00 00 00 80 DA +15:31:33.055 VERIFY PRIMER RX heartbeat-compatible RX: 60 bytes, offset 0, 10 frames + 0 bytes +15:31:33.876 TX verify query frame 006 00 00 B5 00 80 6F +15:31:33.876 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 9/49 +CANDIDATE 0x10 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:31:38.361 TX latch primer frame 006 00 00 00 00 80 DA +15:31:38.361 LATCH PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:31:39.185 TX latch query frame 006 00 00 B5 00 80 6F +15:31:39.185 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:31:40.008 TX candidate 0x10 frame 006 00 00 10 00 80 CA +15:31:40.008 CANDIDATE 0X10 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:31:43.567 TX verify primer frame 006 00 00 00 00 80 DA +15:31:43.567 VERIFY PRIMER RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes +15:31:44.390 TX verify query frame 006 00 00 B5 00 80 6F +15:31:44.390 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 10/49 +CANDIDATE 0x1A BASELINE heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:31:48.901 TX latch primer frame 006 00 00 00 00 80 DA +15:31:48.901 LATCH PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:31:49.723 TX latch query frame 006 00 00 B5 00 80 6F +15:31:49.723 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:31:50.544 TX candidate 0x1A frame 006 00 00 1A 00 80 C0 +15:31:50.544 CANDIDATE 0X1A RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:31:58.754 TX verify primer frame 006 00 00 00 00 80 DA +15:31:58.754 VERIFY PRIMER RX heartbeat-compatible RX: 84 bytes, offset 0, 14 frames + 0 bytes +15:31:59.577 TX verify query frame 006 00 00 B5 00 80 6F +15:31:59.577 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 11/49 +CANDIDATE 0x1B BASELINE heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:32:04.088 TX latch primer frame 006 00 00 00 00 80 DA +15:32:04.088 LATCH PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:32:04.910 TX latch query frame 006 00 00 B5 00 80 6F +15:32:04.910 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:32:05.734 TX candidate 0x1B frame 006 00 00 1B 00 80 C1 +15:32:05.734 CANDIDATE 0X1B RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:32:08.697 TX verify primer frame 006 00 00 00 00 80 DA +15:32:08.697 VERIFY PRIMER RX heartbeat-compatible RX: 42 bytes, offset 0, 7 frames + 0 bytes +15:32:09.521 TX verify query frame 006 00 00 B5 00 80 6F +15:32:09.521 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 12/49 +CANDIDATE 0x1C BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:32:14.031 TX latch primer frame 006 00 00 00 00 80 DA +15:32:14.031 LATCH PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:32:14.854 TX latch query frame 006 00 00 B5 00 80 6F +15:32:14.854 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:32:15.676 TX candidate 0x1C frame 006 00 00 1C 00 80 C6 +15:32:15.676 CANDIDATE 0X1C RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:32:19.274 TX verify primer frame 006 00 00 00 00 80 DA +15:32:19.274 VERIFY PRIMER RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes +15:32:20.098 TX verify query frame 006 00 00 B5 00 80 6F +15:32:20.098 VERIFY QUERY RX heartbeat-compatible RX: 37 bytes, offset 0, 6 frames + 1 bytes +Completed candidate 13/49 +CANDIDATE 0x20 BASELINE heartbeat-compatible RX: 29 bytes, offset 1, 4 frames + 5 bytes +15:32:24.638 TX latch primer frame 006 00 00 00 00 80 DA +15:32:24.638 LATCH PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:32:25.460 TX latch query frame 006 00 00 B5 00 80 6F +15:32:25.460 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:32:26.281 TX candidate 0x20 frame 006 00 00 20 00 80 FA +15:32:26.281 CANDIDATE 0X20 RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:32:29.960 TX verify primer frame 006 00 00 00 00 80 DA +15:32:29.960 VERIFY PRIMER RX heartbeat-compatible RX: 42 bytes, offset 0, 7 frames + 0 bytes +15:32:30.782 TX verify query frame 006 00 00 B5 00 80 6F +15:32:30.782 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 14/49 +CANDIDATE 0x30 BASELINE heartbeat-compatible RX: 31 bytes, offset 0, 5 frames + 1 bytes +15:32:35.285 TX latch primer frame 006 00 00 00 00 80 DA +15:32:35.285 LATCH PRIMER RX heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +15:32:36.108 TX latch query frame 006 00 00 B5 00 80 6F +15:32:36.108 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:32:36.931 TX candidate 0x30 frame 006 00 00 30 00 80 EA +15:32:36.931 CANDIDATE 0X30 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:32:41.863 TX verify primer frame 006 00 00 00 00 80 DA +15:32:41.863 VERIFY PRIMER RX heartbeat-compatible RX: 55 bytes, offset 0, 9 frames + 1 bytes +15:32:42.686 TX verify query frame 006 00 00 B5 00 80 6F +15:32:42.686 VERIFY QUERY RX heartbeat-compatible RX: 41 bytes, offset 1, 6 frames + 5 bytes +Completed candidate 15/49 +CANDIDATE 0x36 BASELINE heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:32:47.193 TX latch primer frame 006 00 00 00 00 80 DA +15:32:47.193 LATCH PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:32:48.014 TX latch query frame 006 00 00 B5 00 80 6F +15:32:48.014 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:32:48.835 TX candidate 0x36 frame 006 00 00 36 00 80 EC +15:32:48.835 CANDIDATE 0X36 RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:32:56.086 TX verify primer frame 006 00 00 00 00 80 DA +15:32:56.086 VERIFY PRIMER RX heartbeat-compatible RX: 60 bytes, offset 0, 10 frames + 0 bytes +15:32:56.908 TX verify query frame 006 00 00 B5 00 80 6F +15:32:56.908 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 16/49 +CANDIDATE 0x38 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:33:01.393 TX latch primer frame 006 00 00 00 00 80 DA +15:33:01.393 LATCH PRIMER RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes +15:33:02.217 TX latch query frame 006 00 00 B5 00 80 6F +15:33:02.217 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:33:03.038 TX candidate 0x38 frame 006 00 00 38 00 80 E2 +15:33:03.038 CANDIDATE 0X38 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:33:08.322 TX verify primer frame 006 00 00 00 00 80 DA +15:33:08.322 VERIFY PRIMER RX heartbeat-compatible RX: 54 bytes, offset 0, 9 frames + 0 bytes +15:33:09.146 TX verify query frame 006 00 00 B5 00 80 6F +15:33:09.146 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 17/49 +CANDIDATE 0x39 BASELINE heartbeat-compatible RX: 31 bytes, offset 0, 5 frames + 1 bytes +15:33:13.681 TX latch primer frame 006 00 00 00 00 80 DA +15:33:13.681 LATCH PRIMER RX heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +15:33:14.503 TX latch query frame 006 00 00 B5 00 80 6F +15:33:14.503 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:33:15.325 TX candidate 0x39 frame 006 00 00 39 00 80 E3 +15:33:15.325 CANDIDATE 0X39 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:33:18.767 TX verify primer frame 006 00 00 00 00 80 DA +15:33:18.767 VERIFY PRIMER RX heartbeat-compatible RX: 42 bytes, offset 0, 7 frames + 0 bytes +15:33:19.590 TX verify query frame 006 00 00 B5 00 80 6F +15:33:19.590 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 18/49 +CANDIDATE 0x40 BASELINE heartbeat-compatible RX: 31 bytes, offset 0, 5 frames + 1 bytes +15:33:24.097 TX latch primer frame 006 00 00 00 00 80 DA +15:33:24.097 LATCH PRIMER RX heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +15:33:24.923 TX latch query frame 006 00 00 B5 00 80 6F +15:33:24.923 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:33:25.749 TX candidate 0x40 frame 006 00 00 40 00 80 9A +15:33:25.749 CANDIDATE 0X40 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:33:28.190 TX verify primer frame 006 00 00 00 00 80 DA +15:33:28.190 VERIFY PRIMER RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:33:29.013 TX verify query frame 006 00 00 B5 00 80 6F +15:33:29.013 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 19/49 +CANDIDATE 0x4F BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:33:33.519 TX latch primer frame 006 00 00 00 00 80 DA +15:33:33.519 LATCH PRIMER RX heartbeat-compatible RX: 19 bytes, offset 0, 3 frames + 1 bytes +15:33:34.346 TX latch query frame 006 00 00 B5 00 80 6F +15:33:34.346 LATCH QUERY RX heartbeat-compatible RX: 29 bytes, offset 1, 4 frames + 5 bytes +15:33:35.167 TX candidate 0x4F frame 006 00 00 4F 00 80 95 +15:33:35.167 CANDIDATE 0X4F RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:33:38.496 TX verify primer frame 006 00 00 00 00 80 DA +15:33:38.496 VERIFY PRIMER RX heartbeat-compatible RX: 42 bytes, offset 0, 7 frames + 0 bytes +15:33:39.320 TX verify query frame 006 00 00 B5 00 80 6F +15:33:39.320 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 20/49 +CANDIDATE 0x50 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:33:43.832 TX latch primer frame 006 00 00 00 00 80 DA +15:33:43.832 LATCH PRIMER RX heartbeat-compatible RX: 19 bytes, offset 0, 3 frames + 1 bytes +15:33:44.654 TX latch query frame 006 00 00 B5 00 80 6F +15:33:44.654 LATCH QUERY RX heartbeat-compatible RX: 29 bytes, offset 1, 4 frames + 5 bytes +15:33:45.477 TX candidate 0x50 frame 006 00 00 50 00 80 8A +15:33:45.477 CANDIDATE 0X50 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:33:49.053 TX verify primer frame 006 00 00 00 00 80 DA +15:33:49.053 VERIFY PRIMER RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes +15:33:49.876 TX verify query frame 006 00 00 B5 00 80 6F +15:33:49.876 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 21/49 +CANDIDATE 0x5B BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:33:54.385 TX latch primer frame 006 00 00 00 00 80 DA +15:33:54.385 LATCH PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +15:33:55.204 TX latch query frame 006 00 00 B5 00 80 6F +15:33:55.204 LATCH QUERY RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:33:56.027 TX candidate 0x5B frame 006 00 00 5B 00 80 81 +15:33:56.027 CANDIDATE 0X5B RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:34:04.152 TX verify primer frame 006 00 00 00 00 80 DA +15:34:04.152 VERIFY PRIMER RX heartbeat-compatible RX: 78 bytes, offset 0, 13 frames + 0 bytes +15:34:04.974 TX verify query frame 006 00 00 B5 00 80 6F +15:34:04.974 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 22/49 +CANDIDATE 0x68 BASELINE heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:34:09.511 TX latch primer frame 006 00 00 00 00 80 DA +15:34:09.511 LATCH PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:34:10.336 TX latch query frame 006 00 00 B5 00 80 6F +15:34:10.336 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:34:11.159 TX candidate 0x68 frame 006 00 00 68 00 80 B2 +15:34:11.159 CANDIDATE 0X68 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:34:18.641 TX verify primer frame 006 00 00 00 00 80 DA +15:34:18.641 VERIFY PRIMER RX heartbeat-compatible RX: 78 bytes, offset 0, 13 frames + 0 bytes +15:34:19.467 TX verify query frame 006 00 00 B5 00 80 6F +15:34:19.467 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 23/49 +CANDIDATE 0x6C BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:34:23.977 TX latch primer frame 006 00 00 00 00 80 DA +15:34:23.977 LATCH PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:34:24.797 TX latch query frame 006 00 00 B5 00 80 6F +15:34:24.797 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:34:25.620 TX candidate 0x6C frame 006 00 00 6C 00 80 B6 +15:34:25.620 CANDIDATE 0X6C RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:34:35.137 TX verify primer frame 006 00 00 00 00 80 DA +15:34:35.137 VERIFY PRIMER RX heartbeat-compatible RX: 90 bytes, offset 0, 15 frames + 0 bytes +15:34:35.963 TX verify query frame 006 00 00 B5 00 80 6F +15:34:35.963 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 24/49 +CANDIDATE 0x6D BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:34:40.476 TX latch primer frame 006 00 00 00 00 80 DA +15:34:40.476 LATCH PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:34:41.301 TX latch query frame 006 00 00 B5 00 80 6F +15:34:41.301 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:34:42.128 TX candidate 0x6D frame 006 00 00 6D 00 80 B7 +15:34:42.128 CANDIDATE 0X6D RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:34:46.447 TX verify primer frame 006 00 00 00 00 80 DA +15:34:46.447 VERIFY PRIMER RX heartbeat-compatible RX: 54 bytes, offset 0, 9 frames + 0 bytes +15:34:47.272 TX verify query frame 006 00 00 B5 00 80 6F +15:34:47.272 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 25/49 +CANDIDATE 0x6E BASELINE heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:34:51.810 TX latch primer frame 006 00 00 00 00 80 DA +15:34:51.810 LATCH PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:34:52.633 TX latch query frame 006 00 00 B5 00 80 6F +15:34:52.633 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:34:53.456 TX candidate 0x6E frame 006 00 00 6E 00 80 B4 +15:34:53.456 CANDIDATE 0X6E RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:34:57.788 TX verify primer frame 006 00 00 00 00 80 DA +15:34:57.788 VERIFY PRIMER RX heartbeat-compatible RX: 54 bytes, offset 0, 9 frames + 0 bytes +15:34:58.614 TX verify query frame 006 00 00 B5 00 80 6F +15:34:58.614 VERIFY QUERY RX heartbeat-compatible RX: 37 bytes, offset 0, 6 frames + 1 bytes +Completed candidate 26/49 +CANDIDATE 0x6F BASELINE heartbeat-compatible RX: 35 bytes, offset 1, 5 frames + 5 bytes +15:35:03.155 TX latch primer frame 006 00 00 00 00 80 DA +15:35:03.155 LATCH PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:35:03.979 TX latch query frame 006 00 00 B5 00 80 6F +15:35:03.979 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:35:04.804 TX candidate 0x6F frame 006 00 00 6F 00 80 B5 +15:35:04.804 CANDIDATE 0X6F RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:35:07.396 TX verify primer frame 006 00 00 00 00 80 DA +15:35:07.396 VERIFY PRIMER RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:35:08.219 TX verify query frame 006 00 00 B5 00 80 6F +15:35:08.219 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 27/49 +CANDIDATE 0x70 BASELINE heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:35:12.731 TX latch primer frame 006 00 00 00 00 80 DA +15:35:12.731 LATCH PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:35:13.556 TX latch query frame 006 00 00 B5 00 80 6F +15:35:13.556 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:35:14.379 TX candidate 0x70 frame 006 00 00 70 00 80 AA +15:35:14.379 CANDIDATE 0X70 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:35:17.635 TX verify primer frame 006 00 00 00 00 80 DA +15:35:17.635 VERIFY PRIMER RX heartbeat-compatible RX: 37 bytes, offset 0, 6 frames + 1 bytes +15:35:18.460 TX verify query frame 006 00 00 B5 00 80 6F +15:35:18.460 VERIFY QUERY RX heartbeat-compatible RX: 41 bytes, offset 1, 6 frames + 5 bytes +Completed candidate 28/49 +CANDIDATE 0x7F BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:35:22.998 TX latch primer frame 006 00 00 00 00 80 DA +15:35:22.998 LATCH PRIMER RX heartbeat-compatible RX: 12 bytes, offset 0, 2 frames + 0 bytes +15:35:23.821 TX latch query frame 006 00 00 B5 00 80 6F +15:35:23.821 LATCH QUERY RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:35:24.643 TX candidate 0x7F frame 006 00 00 7F 00 80 A5 +15:35:24.643 CANDIDATE 0X7F RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:35:30.169 TX verify primer frame 006 00 00 00 00 80 DA +15:35:30.169 VERIFY PRIMER RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes +15:35:30.992 TX verify query frame 006 00 00 B5 00 80 6F +15:35:30.992 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 29/49 +CANDIDATE 0x80 BASELINE heartbeat-compatible RX: 31 bytes, offset 0, 5 frames + 1 bytes +15:35:35.505 TX latch primer frame 006 00 00 00 00 80 DA +15:35:35.505 LATCH PRIMER RX heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +15:35:36.331 TX latch query frame 006 00 00 B5 00 80 6F +15:35:36.331 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:35:37.153 TX candidate 0x80 frame 006 00 00 80 00 80 5A +15:35:37.153 CANDIDATE 0X80 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:35:41.711 TX verify primer frame 006 00 00 00 00 80 DA +15:35:41.711 VERIFY PRIMER RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes +15:35:42.536 TX verify query frame 006 00 00 B5 00 80 6F +15:35:42.536 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 30/49 +CANDIDATE 0x8F BASELINE heartbeat-compatible RX: 29 bytes, offset 1, 4 frames + 5 bytes +15:35:47.074 TX latch primer frame 006 00 00 00 00 80 DA +15:35:47.074 LATCH PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:35:47.898 TX latch query frame 006 00 00 B5 00 80 6F +15:35:47.898 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:35:48.724 TX candidate 0x8F frame 006 00 00 8F 00 80 55 +15:35:48.724 CANDIDATE 0X8F RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:35:52.398 TX verify primer frame 006 00 00 00 00 80 DA +15:35:52.398 VERIFY PRIMER RX heartbeat-compatible RX: 48 bytes, offset 0, 8 frames + 0 bytes +15:35:53.222 TX verify query frame 006 00 00 B5 00 80 6F +15:35:53.222 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 31/49 +CANDIDATE 0x90 BASELINE heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:35:57.732 TX latch primer frame 006 00 00 00 00 80 DA +15:35:57.732 LATCH PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:35:58.553 TX latch query frame 006 00 00 B5 00 80 6F +15:35:58.553 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:35:59.380 TX candidate 0x90 frame 006 00 00 90 00 80 4A +15:35:59.380 CANDIDATE 0X90 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:36:04.188 TX verify primer frame 006 00 00 00 00 80 DA +15:36:04.188 VERIFY PRIMER RX heartbeat-compatible RX: 54 bytes, offset 0, 9 frames + 0 bytes +15:36:05.014 TX verify query frame 006 00 00 B5 00 80 6F +15:36:05.014 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 32/49 +CANDIDATE 0x9F BASELINE heartbeat-compatible RX: 31 bytes, offset 0, 5 frames + 1 bytes +15:36:09.512 TX latch primer frame 006 00 00 00 00 80 DA +15:36:09.512 LATCH PRIMER RX heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +15:36:10.339 TX latch query frame 006 00 00 B5 00 80 6F +15:36:10.339 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:36:11.167 TX candidate 0x9F frame 006 00 00 9F 00 80 45 +15:36:11.167 CANDIDATE 0X9F RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:36:14.200 TX verify primer frame 006 00 00 00 00 80 DA +15:36:14.200 VERIFY PRIMER RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:36:15.029 TX verify query frame 006 00 00 B5 00 80 6F +15:36:15.029 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 33/49 +CANDIDATE 0xA0 BASELINE heartbeat-compatible RX: 31 bytes, offset 0, 5 frames + 1 bytes +15:36:19.523 TX latch primer frame 006 00 00 00 00 80 DA +15:36:19.523 LATCH PRIMER RX heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +15:36:20.348 TX latch query frame 006 00 00 B5 00 80 6F +15:36:20.348 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:36:21.174 TX candidate 0xA0 frame 006 00 00 A0 00 80 7A +15:36:21.174 CANDIDATE 0XA0 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:36:23.718 TX verify primer frame 006 00 00 00 00 80 DA +15:36:23.718 VERIFY PRIMER RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:36:24.541 TX verify query frame 006 00 00 B5 00 80 6F +15:36:24.541 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 34/49 +CANDIDATE 0xAF BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:36:29.078 TX latch primer frame 006 00 00 00 00 80 DA +15:36:29.078 LATCH PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:36:29.900 TX latch query frame 006 00 00 B5 00 80 6F +15:36:29.900 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:36:30.724 TX candidate 0xAF frame 006 00 00 AF 00 80 75 +15:36:30.724 CANDIDATE 0XAF RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:36:35.037 TX verify primer frame 006 00 00 00 00 80 DA +15:36:35.037 VERIFY PRIMER RX heartbeat-compatible RX: 54 bytes, offset 0, 9 frames + 0 bytes +15:36:35.860 TX verify query frame 006 00 00 B5 00 80 6F +15:36:35.860 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 35/49 +CANDIDATE 0xB0 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:36:40.371 TX latch primer frame 006 00 00 00 00 80 DA +15:36:40.371 LATCH PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:36:41.193 TX latch query frame 006 00 00 B5 00 80 6F +15:36:41.193 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:36:42.018 TX candidate 0xB0 frame 006 00 00 B0 00 80 6A +15:36:42.018 CANDIDATE 0XB0 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:36:46.267 TX verify primer frame 006 00 00 00 00 80 DA +15:36:46.267 VERIFY PRIMER RX heartbeat-compatible RX: 54 bytes, offset 0, 9 frames + 0 bytes +15:36:47.090 TX verify query frame 006 00 00 B5 00 80 6F +15:36:47.090 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 36/49 +CANDIDATE 0xB5 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:36:51.596 TX latch primer frame 006 00 00 00 00 80 DA +15:36:51.596 LATCH PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:36:52.422 TX latch query frame 006 00 00 B5 00 80 6F +15:36:52.422 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:36:53.249 TX candidate 0xB5 frame 006 00 00 B5 00 80 6F +15:36:53.249 CANDIDATE 0XB5 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:36:58.280 TX verify primer frame 006 00 00 00 00 80 DA +15:36:58.280 VERIFY PRIMER RX heartbeat-compatible RX: 60 bytes, offset 0, 10 frames + 0 bytes +15:36:59.104 TX verify query frame 006 00 00 B5 00 80 6F +15:36:59.104 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 37/49 +CANDIDATE 0xB8 BASELINE heartbeat-compatible RX: 31 bytes, offset 0, 5 frames + 1 bytes +15:37:03.622 TX latch primer frame 006 00 00 00 00 80 DA +15:37:03.622 LATCH PRIMER RX heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +15:37:04.443 TX latch query frame 006 00 00 B5 00 80 6F +15:37:04.443 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:37:05.267 TX candidate 0xB8 frame 006 00 00 B8 00 80 62 +15:37:05.267 CANDIDATE 0XB8 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:37:09.215 TX verify primer frame 006 00 00 00 00 80 DA +15:37:09.215 VERIFY PRIMER RX heartbeat-compatible RX: 42 bytes, offset 0, 7 frames + 0 bytes +15:37:10.038 TX verify query frame 006 00 00 B5 00 80 6F +15:37:10.038 VERIFY QUERY RX heartbeat-compatible RX: 37 bytes, offset 0, 6 frames + 1 bytes +Completed candidate 38/49 +CANDIDATE 0xBC BASELINE heartbeat-compatible RX: 35 bytes, offset 1, 5 frames + 5 bytes +15:37:14.552 TX latch primer frame 006 00 00 00 00 80 DA +15:37:14.552 LATCH PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:37:15.375 TX latch query frame 006 00 00 B5 00 80 6F +15:37:15.375 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:37:16.197 TX candidate 0xBC frame 006 00 00 BC 00 80 66 +15:37:16.197 CANDIDATE 0XBC RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:37:19.523 TX verify primer frame 006 00 00 00 00 80 DA +15:37:19.523 VERIFY PRIMER RX heartbeat-compatible RX: 42 bytes, offset 0, 7 frames + 0 bytes +15:37:20.346 TX verify query frame 006 00 00 B5 00 80 6F +15:37:20.346 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 39/49 +CANDIDATE 0xBE BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:37:24.859 TX latch primer frame 006 00 00 00 00 80 DA +15:37:24.859 LATCH PRIMER RX heartbeat-compatible RX: 19 bytes, offset 0, 3 frames + 1 bytes +15:37:25.679 TX latch query frame 006 00 00 B5 00 80 6F +15:37:25.679 LATCH QUERY RX heartbeat-compatible RX: 29 bytes, offset 1, 4 frames + 5 bytes +15:37:26.500 TX candidate 0xBE frame 006 00 00 BE 00 80 64 +15:37:26.500 CANDIDATE 0XBE RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:37:29.625 TX verify primer frame 006 00 00 00 00 80 DA +15:37:29.625 VERIFY PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:37:30.446 TX verify query frame 006 00 00 B5 00 80 6F +15:37:30.446 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 40/49 +CANDIDATE 0xBF BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:37:34.962 TX latch primer frame 006 00 00 00 00 80 DA +15:37:34.962 LATCH PRIMER RX heartbeat-compatible RX: 19 bytes, offset 0, 3 frames + 1 bytes +15:37:35.785 TX latch query frame 006 00 00 B5 00 80 6F +15:37:35.785 LATCH QUERY RX heartbeat-compatible RX: 29 bytes, offset 1, 4 frames + 5 bytes +15:37:36.604 TX candidate 0xBF frame 006 00 00 BF 00 80 65 +15:37:36.604 CANDIDATE 0XBF RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:37:39.548 TX verify primer frame 006 00 00 00 00 80 DA +15:37:39.548 VERIFY PRIMER RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:37:40.371 TX verify query frame 006 00 00 B5 00 80 6F +15:37:40.371 VERIFY QUERY RX ANOMALY 8 RX bytes; first mismatch at byte 0: got 00, heartbeat offset 4 expected 80 +15:37:40.371 VERIFY QUERY RX raw 00 00 00 00 00 00 80 DA +VERIFY RESPONSE after candidate 0xBF +Completed candidate 41/49 +CANDIDATE 0xC0 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:37:44.887 TX latch primer frame 006 00 00 00 00 80 DA +15:37:44.887 LATCH PRIMER RX heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes +15:37:45.709 TX latch query frame 006 00 00 B5 00 80 6F +15:37:45.709 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:37:46.528 TX candidate 0xC0 frame 006 00 00 C0 00 80 1A +15:37:46.528 CANDIDATE 0XC0 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:37:51.855 TX verify primer frame 006 00 00 00 00 80 DA +15:37:51.855 VERIFY PRIMER RX heartbeat-compatible RX: 55 bytes, offset 0, 9 frames + 1 bytes +15:37:52.678 TX verify query frame 006 00 00 B5 00 80 6F +15:37:52.678 VERIFY QUERY RX heartbeat-compatible RX: 41 bytes, offset 1, 6 frames + 5 bytes +Completed candidate 42/49 +CANDIDATE 0xCF BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:37:57.195 TX latch primer frame 006 00 00 00 00 80 DA +15:37:57.195 LATCH PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:37:58.017 TX latch query frame 006 00 00 B5 00 80 6F +15:37:58.017 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:37:58.840 TX candidate 0xCF frame 006 00 00 CF 00 80 15 +15:37:58.840 CANDIDATE 0XCF RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:38:06.795 TX verify primer frame 006 00 00 00 00 80 DA +15:38:06.795 VERIFY PRIMER RX heartbeat-compatible RX: 90 bytes, offset 0, 15 frames + 0 bytes +15:38:07.618 TX verify query frame 006 00 00 B5 00 80 6F +15:38:07.618 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 43/49 +CANDIDATE 0xD0 BASELINE heartbeat-compatible RX: 31 bytes, offset 0, 5 frames + 1 bytes +15:38:12.130 TX latch primer frame 006 00 00 00 00 80 DA +15:38:12.130 LATCH PRIMER RX heartbeat-compatible RX: 11 bytes, offset 1, 1 frames + 5 bytes +15:38:12.953 TX latch query frame 006 00 00 B5 00 80 6F +15:38:12.953 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:38:13.776 TX candidate 0xD0 frame 006 00 00 D0 00 80 0A +15:38:13.776 CANDIDATE 0XD0 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:38:16.694 TX verify primer frame 006 00 00 00 00 80 DA +15:38:16.694 VERIFY PRIMER RX heartbeat-compatible RX: 42 bytes, offset 0, 7 frames + 0 bytes +15:38:17.514 TX verify query frame 006 00 00 B5 00 80 6F +15:38:17.514 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 44/49 +CANDIDATE 0xDF BASELINE heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:38:22.045 TX latch primer frame 006 00 00 00 00 80 DA +15:38:22.045 LATCH PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:38:22.868 TX latch query frame 006 00 00 B5 00 80 6F +15:38:22.868 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:38:23.691 TX candidate 0xDF frame 006 00 00 DF 00 80 05 +15:38:23.691 CANDIDATE 0XDF RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:38:26.707 TX verify primer frame 006 00 00 00 00 80 DA +15:38:26.707 VERIFY PRIMER RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:38:27.532 TX verify query frame 006 00 00 B5 00 80 6F +15:38:27.532 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 45/49 +CANDIDATE 0xE0 BASELINE heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +15:38:32.044 TX latch primer frame 006 00 00 00 00 80 DA +15:38:32.044 LATCH PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:38:32.867 TX latch query frame 006 00 00 B5 00 80 6F +15:38:32.867 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:38:33.692 TX candidate 0xE0 frame 006 00 00 E0 00 80 3A +15:38:33.692 CANDIDATE 0XE0 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:38:38.728 TX verify primer frame 006 00 00 00 00 80 DA +15:38:38.728 VERIFY PRIMER RX heartbeat-compatible RX: 60 bytes, offset 0, 10 frames + 0 bytes +15:38:39.553 TX verify query frame 006 00 00 B5 00 80 6F +15:38:39.553 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 46/49 +CANDIDATE 0xEF BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:38:44.095 TX latch primer frame 006 00 00 00 00 80 DA +15:38:44.095 LATCH PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:38:44.919 TX latch query frame 006 00 00 B5 00 80 6F +15:38:44.919 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:38:45.747 TX candidate 0xEF frame 006 00 00 EF 00 80 35 +15:38:45.747 CANDIDATE 0XEF RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:38:58.256 TX verify primer frame 006 00 00 00 00 80 DA +15:38:58.256 VERIFY PRIMER RX heartbeat-compatible RX: 120 bytes, offset 0, 20 frames + 0 bytes +15:38:59.078 TX verify query frame 006 00 00 B5 00 80 6F +15:38:59.078 VERIFY QUERY RX heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes +Completed candidate 47/49 +CANDIDATE 0xF0 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:39:03.590 TX latch primer frame 006 00 00 00 00 80 DA +15:39:03.590 LATCH PRIMER RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:39:04.415 TX latch query frame 006 00 00 B5 00 80 6F +15:39:04.415 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:39:05.234 TX candidate 0xF0 frame 006 00 00 F0 00 80 2A +15:39:05.234 CANDIDATE 0XF0 RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:39:09.120 TX verify primer frame 006 00 00 00 00 80 DA +15:39:09.120 VERIFY PRIMER RX heartbeat-compatible RX: 42 bytes, offset 0, 7 frames + 0 bytes +15:39:09.944 TX verify query frame 006 00 00 B5 00 80 6F +15:39:09.944 VERIFY QUERY RX heartbeat-compatible RX: 37 bytes, offset 0, 6 frames + 1 bytes +Completed candidate 48/49 +CANDIDATE 0xFF BASELINE heartbeat-compatible RX: 35 bytes, offset 1, 5 frames + 5 bytes +15:39:14.459 TX latch primer frame 006 00 00 00 00 80 DA +15:39:14.459 LATCH PRIMER RX heartbeat-compatible RX: 6 bytes, offset 0, 1 frames + 0 bytes +15:39:15.283 TX latch query frame 006 00 00 B5 00 80 6F +15:39:15.283 LATCH QUERY RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:39:16.103 TX candidate 0xFF frame 006 00 00 FF 00 80 25 +15:39:16.103 CANDIDATE 0XFF RX heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:39:19.340 TX verify primer frame 006 00 00 00 00 80 DA +15:39:19.340 VERIFY PRIMER RX heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:39:20.165 TX verify query frame 006 00 00 B5 00 80 6F +15:39:20.165 VERIFY QUERY RX heartbeat-compatible RX: 37 bytes, offset 0, 6 frames + 1 bytes +Completed candidate 49/49 +Verify responses: 1 diff --git a/docs/discovery-notes.md b/docs/discovery-notes.md index 2fc6aa1..73029a5 100644 --- a/docs/discovery-notes.md +++ b/docs/discovery-notes.md @@ -2391,3 +2391,343 @@ Next useful tests: `B8 -> B9`, `BC -> BD`, and `BD -> BE`. 3. Sweep the `D0-DF` region with the same primer-pair method to see whether the structured discovery table continues after `CF`. + +## Unlatch / State-Advance Sweep + +Goal: intentionally put the RCP into the known one-response latched state, send +a wide set of possible reset/ack/state-advance commands, then verify whether a +known query can respond again without a power cycle. + +Use `scripts/serial_unlatch_sweep.py`. For each candidate it performs: + +```text +latch primer -> latch query -> candidate unlatch command -> verify primer -> verify query +``` + +Default latch and verify sequence: + +```text +00 -> B5 produces known response: 07 80 6D 20 D8 48 +candidate possible unlatch / state advance command +00 -> B5 verify whether the known response can happen again +``` + +Interpretation: + +- If the verify query returns heartbeat only, the candidate did not unlatch the + one-response state. +- If the verify query returns `07 80 6D 20 D8 48` again, the candidate likely + cleared or advanced the latch. +- If the candidate itself changes the LCD or produces a new serial response, + log it as a possible state-advance command even if the verify query does not + respond. + +First wide assortment, focused on known response command families, boundaries, +and current no-response gaps: + +```powershell +python scripts/serial_unlatch_sweep.py --port COM5 --candidates "0x00 0x01 0x03 0x07 0x0A 0x0C 0x0D 0x0E 0x0F 0x10 0x1A 0x1B 0x1C 0x20 0x30 0x36 0x38 0x39 0x40 0x4F 0x50 0x5B 0x68 0x6C 0x6D 0x6E 0x6F 0x70 0x7F 0x80 0x8F 0x90 0x9F 0xA0 0xAF 0xB0 0xB5 0xB8 0xBC 0xBE 0xBF 0xC0 0xCF 0xD0 0xDF 0xE0 0xEF 0xF0 0xFF" --expected-verify-response "07 80 6D 20 D8 48" --prompt-power-cycle --prompt-screen --log captures/rcp-unlatch-wide-after-b5.txt +``` + +Power-cycle before each prompt. For the screen prompt: + +- Press Enter if the screen stayed the same. +- Type the exact screen text if it changes. +- Type `q` to stop. + +If this finds no verify responses, try the same idea after a different latch +query page: + +```powershell +python scripts/serial_unlatch_sweep.py --port COM5 --latch-query-command 0xA0 --verify-query-command 0xA0 --candidates "0x00 0x01 0x0F 0x10 0x1A 0x1B 0x40 0x4F 0x68 0x6C 0x80 0x8F 0x90 0x9F 0xA0 0xB0 0xB8 0xBC 0xC0 0xCF 0xE0 0xEF 0xFF" --expected-verify-response "07 80 68 40 30 C5" --prompt-power-cycle --prompt-screen --log captures/rcp-unlatch-wide-after-a0.txt +``` + +For a fast dry run without touching the serial port: + +```powershell +python scripts/serial_unlatch_sweep.py --port COM5 --candidates "0x00 0x01 0x90" --dry-run +``` + +### 2026-05-13 Unlatch Sweep Result + +Captures: + +- `captures/rcp-unlatch-wide-after-b5.txt` +- `captures/rcp-unlatch-wide-after-a0.txt` + +User observation: + +- No visible RCP state change was seen during the tests. +- The only screen note recorded in the logs was `CONNECT NOT ACT` after + candidate `0x00`, which matches the already-known non-active connected state. + +Serial result: + +| Latch/verify query | Candidates tested | Expected verify response | Result | +| --- | ---: | --- | --- | +| `B5` | 49 | `07 80 6D 20 D8 48` | no confirmed unlatch | +| `A0` | 23 | `07 80 68 40 30 C5` | no confirmed unlatch | + +Notes: + +- Candidate `0xBF` in the `B5` unlatch sweep produced a verify-query anomaly, + but the raw bytes were `00 00 00 00 00 00 80 DA`, not the expected + `07 80 6D 20 D8 48`. Treat this as a heartbeat/chunking/classifier artifact, + not a successful unlatch. +- No candidate-stage serial response clearly indicated a state advance. +- The broad command-byte assortment did not find a reset/ack/unlatch command in + the tested six-byte frame shape. + +Tooling update: + +- `scripts/serial_unlatch_sweep.py` now accepts `--expected-verify-response`. +- Future unlatch sweeps should use this option so only the desired repeated + query response counts as a hit. + +## PT2/PT7 Compatibility Clue + +Manual-derived note from a newer Sony RCP: + +- A newer Sony RCP has a mode switch with `PT2` and `PT7` positions. +- `PT2` is documented for controlling the same camera line that the RCP-TX7 is + associated with. + +Working implication: + +- The TX7 may be a fixed/PT2-era protocol personality rather than a generic + Sony RCP protocol endpoint. +- If the CCU/RCP protocol family later split into PT2 and PT7 modes, then our + current frame shape may be electrically correct but still missing a + personality/mode/session assumption. +- The command bytes that look like "page selectors" may be table reads within + the PT2 personality rather than an activation handshake. + +Next direction from this clue: + +1. Treat PT2 compatibility as the default target for TX7 restoration tests. +2. Search newer-RCP manuals for whether PT2/PT7 is only a physical switch or + whether either mode has visible initialization, connect, or model-detect + behavior. +3. Prefer tests that emulate a CCU already speaking the TX7/PT2 personality, + rather than trying PT7-style/high-range activation guesses. + +## Button Behavior While Latched + +Open questions: + +1. Does the one-response latched state suppress the RCP-origin button frames + that are known to appear while disconnected? +2. If the RCP sends `CAM POWER`, does an immediate host-side response using the + same or a similar command shape change the RCP state? + +Known RCP-origin button frames: + +| Button/action | RCP frame | +| --- | --- | +| Idle heartbeat | `00 00 00 00 80 DA` | +| `CAM POWER` | `00 00 07 80 00 DD` | +| `CALL` on/state high | `00 00 15 80 00 CF` | +| `CALL` off/state low | `00 00 15 00 00 4F` | + +Use `scripts/serial_button_response_test.py` for these tests. It keeps RX and +TX in the same serial session, so it works around Windows COM-port exclusivity. + +### Test BTN1: Offline Button Control + +Purpose: establish a fresh control capture where the RCP is not intentionally +latched. During the listen window, press `CAM POWER` a few times and press/release +`CALL`. + +```powershell +python scripts/serial_button_response_test.py --port COM5 --duration 30 --prompt --log captures/rcp-buttons-offline-control.txt +``` + +Expected: + +- `CAM POWER` should produce `00 00 07 80 00 DD`. +- `CALL` should produce one or both `00 00 15 80 00 CF` and + `00 00 15 00 00 4F`. + +### Test BTN2: Latched Button Emission + +Purpose: put the RCP into the known `00 -> B5` latched state, then see whether +`CAM POWER` and `CALL` still produce RCP-origin frames. During the listen +window, press the same buttons as BTN1. + +```powershell +python scripts/serial_button_response_test.py --port COM5 --latch --latch-query-command 0xB5 --duration 30 --prompt --log captures/rcp-buttons-latched-after-b5.txt +``` + +Interpretation: + +- If `CAM POWER`/`CALL` frames still appear, the latch suppresses selected query + responses but does not suppress basic panel-origin button events. +- If button frames disappear, the latch may be closer to a protocol/session + hold state that blocks some panel event transmission. + +### Test BTN3: Respond to `CAM POWER` With Exact Echo + +Purpose: when the RCP sends the `CAM POWER` frame, immediately send the same +six-byte frame back on the host-to-RCP line. Watch the screen for any visible +change. + +```powershell +python scripts/serial_button_response_test.py --port COM5 --duration 30 --prompt --respond-to-cam-power --respond-once --response-frame "00 00 07 80 00 DD" --log captures/rcp-buttons-cam-power-exact-echo.txt +``` + +At the prompt, press `CAM POWER` once. If the screen changes, note the exact +display text after the run. + +### Test BTN4: Respond to `CAM POWER` With Host-Shaped Variant + +Purpose: test a related command-shaped host frame where command `0x07` is kept +but the `0x80` bit is in the value field, matching the host-query shape used in +many discovery tests. + +```powershell +python scripts/serial_button_response_test.py --port COM5 --duration 30 --prompt --respond-to-cam-power --respond-once --response-frame "00 00 07 00 80 DD" --log captures/rcp-buttons-cam-power-host-shaped.txt +``` + +Interpretation: + +- If exact echo changes nothing but the host-shaped variant changes the screen + or serial stream, the RCP may expect host responses in the same command class + but with host-side state/value layout. +- If neither changes anything, `CAM POWER` may be an outbound event requiring a + larger CCU state/session response rather than a direct ACK. + +Optional latched version of BTN3: + +```powershell +python scripts/serial_button_response_test.py --port COM5 --latch --latch-query-command 0xB5 --duration 30 --prompt --respond-to-cam-power --respond-once --response-frame "00 00 07 80 00 DD" --log captures/rcp-buttons-latched-cam-power-exact-echo.txt +``` + +### 2026-05-13 Button Test Result + +Captures: + +- `captures/rcp-buttons-offline-control.txt` +- `captures/rcp-buttons-latched-after-b5.txt` +- `captures/rcp-buttons-cam-power-exact-echo.txt` +- `captures/rcp-buttons-cam-power-host-shaped.txt` + +Offline control: + +- `CALL` produced `00 00 15 80 00 CF` and `00 00 15 00 00 4F`. +- `CAM POWER` produced `00 00 07 80 00 DD`. +- This matches the original offline button observations. + +Latched after `00 -> B5`: + +- The latch setup produced the known `B5` response + `07 80 6D 20 D8 48`. +- While in this state, `CALL` still produced both known call frames. +- While in this state, `CAM POWER` still produced `00 00 07 80 00 DD`. + +Interpretation: + +- The one-response latch suppresses additional selected-query responses, but it + does not suppress basic RCP-origin button/event frames. +- The panel is still actively reporting front-panel events after the discovery + response/latch state. + +`CAM POWER` response tests: + +| Test | Host response sent after `CAM POWER` | Screen result | Serial result | +| --- | --- | --- | --- | +| BTN3 exact echo | `00 00 07 80 00 DD` | `CONNECT NOT ACT` | heartbeat/button-event only | +| BTN4 host-shaped | `00 00 07 00 80 DD` | `CONNECT NOT ACT` | heartbeat only after response | + +Interpretation: + +- Both `CAM POWER` response shapes are recognized enough to produce the familiar + `CONNECT NOT ACT` display state. +- Neither response advanced the RCP into an active state or caused a new serial + status stream. +- `CAM POWER` is likely an outbound event that requires broader CCU/session + context, not a simple one-frame ACK. + +Next useful button-side tests: + +1. Repeat BTN3/BTN4 while already latched after `00 -> B5`; this checks whether + the same `CAM POWER` response has different meaning after the RCP has already + returned a discovery block. +2. Try responding to `CALL` with exact echo and host-shaped command `0x15` + variants, since earlier `0x15` matrix tests changed the screen but did not + activate the panel. +3. If a future session/keepalive candidate is found, rerun BTN1/BTN2 to see + whether more front-panel controls begin emitting serial events in an active + context. + +### CALL Echo / Response Tests + +Goal: test whether the RCP treats `CALL` differently from `CAM POWER` when the +host immediately echoes or acknowledges the outbound button event. + +Known RCP-origin `CALL` frames: + +```text +CALL high/on: 00 00 15 80 00 CF +CALL low/off: 00 00 15 00 00 4F +``` + +Test BTN5: exact echo of both known `CALL` shapes. + +```powershell +python scripts/serial_button_response_test.py --port COM5 --duration 30 --prompt --respond-to-call --respond-once --response-frame "00 00 15 80 00 CF" --response-frame "00 00 15 00 00 4F" --log captures/rcp-buttons-call-exact-echo.txt +``` + +Test BTN6: host-shaped `CALL` response, with command `0x15` and value `0x80`. + +```powershell +python scripts/serial_button_response_test.py --port COM5 --duration 30 --prompt --respond-to-call --respond-once --response-frame "00 00 15 00 80 CF" --log captures/rcp-buttons-call-host-shaped.txt +``` + +Test BTN7: host-shaped `CALL` response after the known `00 -> B5` latch. + +```powershell +python scripts/serial_button_response_test.py --port COM5 --latch --latch-query-command 0xB5 --duration 30 --prompt --respond-to-call --respond-once --response-frame "00 00 15 00 80 CF" --log captures/rcp-buttons-latched-call-host-shaped.txt +``` + +During each test, press and release `CALL` once or twice. Record any screen +change after the run. + +### 2026-05-13 CALL Echo Result + +Captures: + +- `captures/rcp-buttons-call-exact-echo.txt` +- `captures/rcp-buttons-call-host-shaped.txt` +- `captures/rcp-buttons-latched-call-host-shaped.txt` + +User observation: + +- All three CALL response tests ended with the RCP screen at `CONNECT NOT ACT`. + +Serial result: + +| Test | Host response after `CALL` | Serial result | +| --- | --- | --- | +| BTN5 exact echo | `00 00 15 80 00 CF` then `00 00 15 00 00 4F` | RCP sent `07 80 45 20 D0 68` once, then returned to heartbeat/CALL events | +| BTN6 host-shaped | `00 00 15 00 80 CF` | heartbeat/CALL events only | +| BTN7 latched host-shaped | `00 00 15 00 80 CF` after latch setup | heartbeat/CALL events only | + +Interpretation: + +- Exact CALL echo is more interesting than CAM POWER echo: it produced a new + checksum-valid RCP response frame, `07 80 45 20 D0 68`. +- The new frame did not visibly activate the RCP; the panel still ended at + `CONNECT NOT ACT`. +- The host-shaped `CALL` response did not reproduce the new frame, either + offline or after the `B5` latch setup. +- This suggests the RCP has at least one event-response path for CALL exact + echo, but that response is still not the missing active-session handshake. + +Next CALL-focused checks: + +1. Retest exact CALL echo three times with clean power cycles to see whether + `07 80 45 20 D0 68` is repeatable. +2. Test echoing only `CALL high/on` and only `CALL low/off` separately to see + which of the two echoed frames causes `07 80 45 20 D0 68`. +3. Try using `07 80 45 20 D0 68` as a follow-up host frame after CALL exact + echo, only after confirming repeatability. diff --git a/scripts/serial_button_response_test.py b/scripts/serial_button_response_test.py new file mode 100644 index 0000000..e883021 --- /dev/null +++ b/scripts/serial_button_response_test.py @@ -0,0 +1,260 @@ +#!/usr/bin/env python3 +"""Button-focused RCP-TX7 serial tests. + +This helper can: + +1. Optionally put the RCP into a latched state with a known primer/query. +2. Listen for the button frames that are known to appear while disconnected. +3. Optionally transmit response frames when CAM POWER or CALL is observed. + +Known RCP-origin button frames: + + CAM POWER: 00 00 07 80 00 DD + CALL on: 00 00 15 80 00 CF + CALL off: 00 00 15 00 00 4F +""" + +from __future__ import annotations + +import argparse +import datetime as dt +import sys +import time + +try: + import serial +except ImportError: + print( + "Missing dependency: pyserial\n" + "Install it with: python -m pip install pyserial", + file=sys.stderr, + ) + raise SystemExit(2) + + +HEARTBEAT = bytes.fromhex("00 00 00 00 80 DA") +CAM_POWER = bytes.fromhex("00 00 07 80 00 DD") +CALL_ON = bytes.fromhex("00 00 15 80 00 CF") +CALL_OFF = bytes.fromhex("00 00 15 00 00 4F") +KNOWN_PATTERNS = { + "heartbeat": HEARTBEAT, + "cam-power": CAM_POWER, + "call-on": CALL_ON, + "call-off": CALL_OFF, +} + + +def parse_byte(text: str) -> int: + value = int(text, 0) + if not 0 <= value <= 0xFF: + raise argparse.ArgumentTypeError(f"must be a byte: {text}") + return value + + +def parse_hex_bytes(text: str) -> bytes: + normalized = text.replace(",", " ").replace("0x", "").replace("0X", "") + parts = normalized.split() + if not parts: + raise argparse.ArgumentTypeError("hex frame cannot be empty") + try: + values = [int(part, 16) for part in parts] + except ValueError as exc: + raise argparse.ArgumentTypeError(f"invalid hex byte list: {text}") from exc + if any(value < 0 or value > 0xFF for value in values): + raise argparse.ArgumentTypeError("hex values must be bytes") + return bytes(values) + + +def build_frame(prefix1: int, prefix2: int, command: int, state: int, value: int) -> bytes: + body = bytes([prefix1, prefix2, command, state, value]) + checksum = 0x5A + for byte in body: + checksum ^= byte + return body + bytes([checksum]) + + +def hex_preview(data: bytes) -> str: + return " ".join(f"{byte:02X}" for byte in data) + + +def ascii_preview(data: bytes) -> str: + return "".join(chr(byte) if 32 <= byte <= 126 else "." 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 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 send_frame(ser: serial.Serial, emit, label: str, frame: bytes) -> None: + stamp = dt.datetime.now().strftime("%H:%M:%S.%f")[:-3] + emit(f"{stamp} TX {label} frame {len(frame):03d} {hex_preview(frame)}") + ser.write(frame) + ser.flush() + + +def emit_known_counts(emit, label: str, data: bytes) -> None: + if not data: + emit(f"{label} no RX bytes") + return + counts = { + name: data.count(pattern) + for name, pattern in KNOWN_PATTERNS.items() + if data.count(pattern) + } + count_text = ", ".join(f"{name}={count}" for name, count in counts.items()) or "no known complete frames" + emit(f"{label} RX {len(data)} bytes; {count_text}") + if counts.get("cam-power") or counts.get("call-on") or counts.get("call-off"): + emit(f"{label} raw {hex_preview(data)}") + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser( + description="Listen for CAM POWER/CALL frames and optionally respond to CAM POWER." + ) + parser.add_argument("--port", required=True, help="serial port, for example COM5") + parser.add_argument("--baud", type=int, default=38400) + parser.add_argument("--timeout", type=float, default=0.03) + parser.add_argument("--duration", type=float, default=30.0) + parser.add_argument("--chunk-size", type=int, default=128) + parser.add_argument("--log", help="append capture/transmit log to this file") + parser.add_argument("--ascii", action="store_true") + parser.add_argument("--latch", action="store_true", help="send latch primer/query before listening") + parser.add_argument("--latch-primer-command", type=parse_byte, default=0x00) + parser.add_argument("--latch-query-command", type=parse_byte, default=0xB5) + parser.add_argument("--state", type=parse_byte, default=0x00) + parser.add_argument("--value", type=parse_byte, default=0x80) + parser.add_argument("--after-latch", type=float, default=1.0) + parser.add_argument("--respond-to-cam-power", action="store_true") + parser.add_argument("--respond-to-call", action="store_true") + parser.add_argument( + "--response-frame", + type=parse_hex_bytes, + action="append", + help="hex frame to send when CAM POWER is seen; can be repeated", + ) + parser.add_argument("--response-delay", type=float, default=0.05) + parser.add_argument("--response-repeat", type=int, default=1) + parser.add_argument("--response-interval", type=float, default=0.2) + parser.add_argument( + "--respond-once", + action="store_true", + help="only transmit the response on the first matched button frame", + ) + parser.add_argument("--prompt", action="store_true", help="pause before listen so you can prepare button presses") + return parser.parse_args() + + +def main() -> int: + args = parse_args() + emit, log_file = make_logger(args.log) + response_frames = args.response_frame or [CAM_POWER] + primer = build_frame(0x00, 0x00, args.latch_primer_command, args.state, args.value) + query = build_frame(0x00, 0x00, args.latch_query_command, args.state, args.value) + responded = False + totals = {name: 0 for name in KNOWN_PATTERNS} + + try: + with serial.Serial( + port=args.port, + baudrate=args.baud, + bytesize=serial.EIGHTBITS, + parity=serial.PARITY_NONE, + stopbits=serial.STOPBITS_ONE, + timeout=args.timeout, + write_timeout=1.0, + rtscts=False, + dsrdtr=False, + xonxoff=False, + ) as ser: + ser.reset_input_buffer() + emit(f"Button test on {ser.port} at {ser.baudrate} 8N1") + + if args.latch: + send_frame(ser, emit, "latch primer", primer) + emit_known_counts(emit, "LATCH PRIMER", read_window(ser, args.after_latch)) + send_frame(ser, emit, "latch query", query) + emit_known_counts(emit, "LATCH QUERY", read_window(ser, args.after_latch)) + + if args.prompt: + input("Ready to listen. Press Enter, then press CAM POWER/CALL on the RCP: ") + + emit( + f"Listening for {args.duration:.1f}s; " + f"respond_to_cam_power={args.respond_to_cam_power}, " + f"respond_to_call={args.respond_to_call}" + ) + stop_at = time.monotonic() + args.duration + buffer = bytearray() + while time.monotonic() < stop_at: + data = ser.read(args.chunk_size) + if not data: + continue + + stamp = dt.datetime.now().strftime("%H:%M:%S.%f")[:-3] + emit(f"{stamp} RX {len(data):03d} bytes {hex_preview(data)}") + if args.ascii: + emit(f"{'':14} ASCII {ascii_preview(data)}") + + buffer.extend(data) + for name, pattern in KNOWN_PATTERNS.items(): + count = data.count(pattern) + if count: + totals[name] += count + emit(f"{stamp} DETECT {name} x{count}") + + should_respond = ( + ( + (args.respond_to_cam_power and CAM_POWER in buffer) + or (args.respond_to_call and (CALL_ON in buffer or CALL_OFF in buffer)) + ) + and not (args.respond_once and responded) + ) + if should_respond: + responded = True + time.sleep(args.response_delay) + for _ in range(args.response_repeat): + for response in response_frames: + send_frame(ser, emit, "button response", response) + if args.response_repeat > 1: + time.sleep(args.response_interval) + buffer.clear() + elif len(buffer) > 256: + del buffer[:-64] + + emit( + "Totals: " + + ", ".join(f"{name}={count}" for name, count in totals.items()) + ) + 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()) diff --git a/scripts/serial_unlatch_sweep.py b/scripts/serial_unlatch_sweep.py new file mode 100644 index 0000000..e0ceba9 --- /dev/null +++ b/scripts/serial_unlatch_sweep.py @@ -0,0 +1,304 @@ +#!/usr/bin/env python3 +"""Sweep candidate commands that may unlatch the RCP-TX7 response state. + +Each candidate test performs: + + latch primer -> latch query -> candidate -> verify primer -> verify query + +The verify query checks whether the RCP will answer again without a power cycle. +Use --prompt-power-cycle for clean bench testing. +""" + +from __future__ import annotations + +import argparse +import datetime as dt +import sys +import time + +try: + import serial +except ImportError: + print( + "Missing dependency: pyserial\n" + "Install it with: python -m pip install pyserial", + file=sys.stderr, + ) + raise SystemExit(2) + + +HEARTBEAT = bytes.fromhex("00 00 00 00 80 DA") + + +def parse_byte(text: str) -> int: + value = int(text, 0) + if not 0 <= value <= 0xFF: + raise argparse.ArgumentTypeError(f"must be a byte: {text}") + return value + + +def parse_byte_set(text: str) -> list[int]: + values: list[int] = [] + for part in text.replace(",", " ").split(): + if "-" in part: + start_text, end_text = part.split("-", 1) + start = parse_byte(start_text) + end = parse_byte(end_text) + if end < start: + raise argparse.ArgumentTypeError(f"bad range: {part}") + values.extend(range(start, end + 1)) + else: + values.append(parse_byte(part)) + if not values: + raise argparse.ArgumentTypeError("empty byte set") + return values + + +def parse_frame(text: str) -> bytes: + values = parse_byte_set(text) + if len(values) < 1: + raise argparse.ArgumentTypeError("empty frame") + return bytes(values) + + +def build_frame(prefix1: int, prefix2: int, command: int, state: int, value: int) -> bytes: + body = bytes([prefix1, prefix2, command, state, value]) + checksum = 0x5A + for byte in body: + checksum ^= byte + return body + bytes([checksum]) + + +def hex_preview(data: bytes) -> str: + return " ".join(f"{byte:02X}" for byte in data) + + +def make_logger(path: str | None): + log_file = open(path, "a", encoding="utf-8") if path else None + + def emit(line: str) -> None: + print(line) + if log_file: + log_file.write(line + "\n") + log_file.flush() + + return emit, log_file + + +def heartbeat_offset(data: bytes) -> int | None: + if not data: + return 0 + for offset in range(len(HEARTBEAT)): + if all(byte == HEARTBEAT[(offset + index) % len(HEARTBEAT)] for index, byte in enumerate(data)): + return offset + return None + + +def first_mismatch(data: bytes, offset: int) -> tuple[int, int, int] | None: + for index, byte in enumerate(data): + expected = HEARTBEAT[(offset + index) % len(HEARTBEAT)] + if byte != expected: + return index, byte, expected + return None + + +def classify_rx(data: bytes) -> tuple[bool, str]: + if not data: + return False, "no RX bytes" + + offset = heartbeat_offset(data) + if offset is not None: + full = len(data) // len(HEARTBEAT) + extra = len(data) % len(HEARTBEAT) + return False, f"heartbeat-compatible RX: {len(data)} bytes, offset {offset}, {full} frames + {extra} bytes" + + best_offset = min( + range(len(HEARTBEAT)), + key=lambda candidate: sum( + byte != HEARTBEAT[(candidate + index) % len(HEARTBEAT)] + for index, byte in enumerate(data) + ), + ) + mismatch = first_mismatch(data, best_offset) + if mismatch is None: + return False, "heartbeat-compatible RX" + + index, byte, expected = mismatch + return ( + True, + f"ANOMALY {len(data)} RX bytes; first mismatch at byte {index}: " + f"got {byte:02X}, heartbeat offset {best_offset} expected {expected:02X}", + ) + + +def read_window(ser: serial.Serial, duration: float) -> bytes: + stop_at = time.monotonic() + duration + data = bytearray() + while time.monotonic() < stop_at: + chunk = ser.read(128) + if chunk: + data.extend(chunk) + return bytes(data) + + +def emit_rx(emit, label: str, data: bytes) -> bool: + is_anomaly, note = classify_rx(data) + emit(f"{label} {note}") + if is_anomaly: + emit(f"{label} raw {hex_preview(data)}") + return is_anomaly + + +def contains_frame(data: bytes, expected: bytes) -> bool: + return bool(expected) and expected in data + + +def send_and_read(ser: serial.Serial, emit, label: str, frame: bytes, duration: float) -> tuple[bool, bytes]: + stamp = dt.datetime.now().strftime("%H:%M:%S.%f")[:-3] + emit(f"{stamp} TX {label} frame {len(frame):03d} {hex_preview(frame)}") + ser.write(frame) + ser.flush() + data = read_window(ser, duration) + is_anomaly = emit_rx(emit, f"{stamp} {label.upper()} RX", data) + return is_anomaly, data + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser( + description="Sweep candidate unlatch commands and verify whether a second query responds." + ) + parser.add_argument("--port", required=True, help="serial port, for example COM5") + parser.add_argument("--baud", type=int, default=38400) + parser.add_argument("--prefix1", type=parse_byte, default=0x00) + parser.add_argument("--prefix2", type=parse_byte, default=0x00) + parser.add_argument("--latch-primer-command", type=parse_byte, default=0x00) + parser.add_argument("--latch-query-command", type=parse_byte, default=0xB5) + parser.add_argument("--verify-primer-command", type=parse_byte, default=0x00) + parser.add_argument("--verify-query-command", type=parse_byte, default=0xB5) + parser.add_argument("--state", type=parse_byte, default=0x00) + parser.add_argument("--value", type=parse_byte, default=0x80) + parser.add_argument("--candidates", type=parse_byte_set, required=True) + parser.add_argument("--settle", type=float, default=3.0) + parser.add_argument("--between", type=float, default=0.8) + parser.add_argument("--after-candidate", type=float, default=1.2) + parser.add_argument("--after-verify", type=float, default=1.5) + parser.add_argument("--timeout", type=float, default=0.03) + parser.add_argument("--log", help="append sweep log to this file") + parser.add_argument("--dry-run", action="store_true") + parser.add_argument("--prompt-power-cycle", action="store_true") + parser.add_argument("--prompt-screen", action="store_true") + parser.add_argument( + "--expected-verify-response", + type=parse_frame, + help="only count a verify hit when these bytes appear in verify-query RX", + ) + parser.add_argument("--stop-on-verify-response", action="store_true") + return parser.parse_args() + + +def main() -> int: + args = parse_args() + latch_primer = build_frame(args.prefix1, args.prefix2, args.latch_primer_command, args.state, args.value) + latch_query = build_frame(args.prefix1, args.prefix2, args.latch_query_command, args.state, args.value) + verify_primer = build_frame(args.prefix1, args.prefix2, args.verify_primer_command, args.state, args.value) + verify_query = build_frame(args.prefix1, args.prefix2, args.verify_query_command, args.state, args.value) + candidates = [ + (command, build_frame(args.prefix1, args.prefix2, command, args.state, args.value)) + for command in args.candidates + ] + + if args.dry_run: + print(f"latch primer 0x{args.latch_primer_command:02X}: {hex_preview(latch_primer)}") + print(f"latch query 0x{args.latch_query_command:02X}: {hex_preview(latch_query)}") + print(f"verify primer 0x{args.verify_primer_command:02X}: {hex_preview(verify_primer)}") + print(f"verify query 0x{args.verify_query_command:02X}: {hex_preview(verify_query)}") + for command, frame in candidates: + print(f"candidate 0x{command:02X}: {hex_preview(frame)}") + return 0 + + emit, log_file = make_logger(args.log) + verify_hits = 0 + try: + with serial.Serial( + port=args.port, + baudrate=args.baud, + bytesize=serial.EIGHTBITS, + parity=serial.PARITY_NONE, + stopbits=serial.STOPBITS_ONE, + timeout=args.timeout, + write_timeout=1.0, + rtscts=False, + dsrdtr=False, + xonxoff=False, + ) as ser: + emit( + f"Unlatch sweep: latch {hex_preview(latch_primer)} -> {hex_preview(latch_query)}, " + f"verify {hex_preview(verify_primer)} -> {hex_preview(verify_query)}, " + f"{len(candidates)} candidates on {ser.port} at {ser.baudrate} 8N1" + ) + if args.expected_verify_response: + emit(f"Expected verify response: {hex_preview(args.expected_verify_response)}") + + for index, (command, candidate) in enumerate(candidates, start=1): + if args.prompt_power_cycle: + answer = input( + f"Power-cycle RCP for unlatch candidate 0x{command:02X}, " + "wait for heartbeat, then press Enter (q then Enter to stop): " + ).strip() + if answer.lower() in {"q", "quit", "stop"}: + emit("Stopped before next candidate.") + break + + ser.reset_input_buffer() + emit_rx(emit, f"CANDIDATE 0x{command:02X} BASELINE", read_window(ser, args.settle)) + send_and_read(ser, emit, "latch primer", latch_primer, args.between) + send_and_read(ser, emit, "latch query", latch_query, args.between) + send_and_read(ser, emit, f"candidate 0x{command:02X}", candidate, args.after_candidate) + + if args.prompt_screen: + screen = input( + f"Screen after candidate 0x{command:02X} " + "(blank = no change, q = stop): " + ).strip() + if screen: + stamp = dt.datetime.now().strftime("%H:%M:%S.%f")[:-3] + emit(f"{stamp} SCREEN candidate=0x{command:02X} {screen}") + if screen.lower() in {"q", "quit", "stop"}: + break + + send_and_read(ser, emit, "verify primer", verify_primer, args.between) + verify_anomaly, verify_data = send_and_read(ser, emit, "verify query", verify_query, args.after_verify) + if args.expected_verify_response: + verify_hit = contains_frame(verify_data, args.expected_verify_response) + if verify_anomaly and not verify_hit: + emit( + f"VERIFY anomaly did not contain expected response " + f"{hex_preview(args.expected_verify_response)}" + ) + else: + verify_hit = verify_anomaly + if verify_hit: + verify_hits += 1 + emit(f"VERIFY RESPONSE after candidate 0x{command:02X}") + if args.stop_on_verify_response: + emit("Stopping after verify response.") + break + + emit(f"Completed candidate {index}/{len(candidates)}") + + emit(f"Verify responses: {verify_hits}") + 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())