From 27cc85e1c12a4742f0a2af5fafd7ba3e7d572767 Mon Sep 17 00:00:00 2001 From: Aiden <68633820+awils27@users.noreply.github.com> Date: Wed, 13 May 2026 16:41:19 +1000 Subject: [PATCH] run 9 --- ...cp-buttons-call-exact-echo-delay-100ms.txt | 19 +++++++ ...rcp-buttons-call-exact-echo-delay-60ms.txt | 16 ++++++ ...rcp-buttons-call-exact-echo-delay-70ms.txt | 19 +++++++ ...-buttons-call-exact-echo-delay-80ms-v2.txt | 17 ++++++ ...rcp-buttons-call-exact-echo-delay-90ms.txt | 19 +++++++ docs/discovery-notes.md | 52 ++++++++++++++++++ ...erial_button_response_test.cpython-312.pyc | Bin 18228 -> 18638 bytes scripts/serial_button_response_test.py | 10 +++- 8 files changed, 151 insertions(+), 1 deletion(-) create mode 100644 captures/rcp-buttons-call-exact-echo-delay-100ms.txt create mode 100644 captures/rcp-buttons-call-exact-echo-delay-60ms.txt create mode 100644 captures/rcp-buttons-call-exact-echo-delay-70ms.txt create mode 100644 captures/rcp-buttons-call-exact-echo-delay-80ms-v2.txt create mode 100644 captures/rcp-buttons-call-exact-echo-delay-90ms.txt diff --git a/captures/rcp-buttons-call-exact-echo-delay-100ms.txt b/captures/rcp-buttons-call-exact-echo-delay-100ms.txt new file mode 100644 index 0000000..9854865 --- /dev/null +++ b/captures/rcp-buttons-call-exact-echo-delay-100ms.txt @@ -0,0 +1,19 @@ +Button test on COM5 at 38400 8N1 +Listening for 15.0s; respond_to_cam_power=False, respond_to_call=True, mirror_call=False +16:38:07.222 RX 001 bytes 00 +16:38:07.253 RX 005 bytes 00 00 00 80 DA +16:38:07.923 RX 001 bytes 00 +16:38:07.954 RX 005 bytes 00 00 00 80 DA +16:38:08.076 RX 006 bytes 00 00 15 80 00 CF +16:38:08.076 DETECT call-on x1 +16:38:08.177 TX button response frame 006 00 00 15 80 00 CF +16:38:08.177 TX button response frame 006 00 00 15 00 00 4F +16:38:10.134 RX 001 bytes 00 +16:38:10.164 RX 005 bytes 00 00 00 80 DA +16:38:10.288 RX 001 bytes 00 +16:38:10.318 RX 005 bytes 00 15 00 00 4F +16:38:10.933 RX 006 bytes 00 00 00 00 80 DA +16:38:10.933 DETECT heartbeat x1 +16:38:11.633 RX 006 bytes 00 00 00 00 80 DA +16:38:11.633 DETECT heartbeat x1 +Stopped. diff --git a/captures/rcp-buttons-call-exact-echo-delay-60ms.txt b/captures/rcp-buttons-call-exact-echo-delay-60ms.txt new file mode 100644 index 0000000..494e88a --- /dev/null +++ b/captures/rcp-buttons-call-exact-echo-delay-60ms.txt @@ -0,0 +1,16 @@ +Button test on COM5 at 38400 8N1 +Listening for 15.0s; respond_to_cam_power=False, respond_to_call=True, mirror_call=False +16:36:57.448 RX 001 bytes 00 +16:36:57.479 RX 005 bytes 00 00 00 80 DA +16:36:57.935 RX 006 bytes 00 00 15 80 00 CF +16:36:57.935 DETECT call-on x1 +16:36:57.996 TX button response frame 006 00 00 15 80 00 CF +16:36:57.996 TX button response frame 006 00 00 15 00 00 4F +16:36:59.948 RX 001 bytes 00 +16:36:59.978 RX 006 bytes 00 00 00 80 DA 00 +16:37:00.008 RX 005 bytes 00 15 00 00 4F +16:37:00.651 RX 001 bytes 00 +16:37:00.684 RX 005 bytes 00 00 00 80 DA +16:37:01.355 RX 006 bytes 00 00 00 00 80 DA +16:37:01.355 DETECT heartbeat x1 +Stopped. diff --git a/captures/rcp-buttons-call-exact-echo-delay-70ms.txt b/captures/rcp-buttons-call-exact-echo-delay-70ms.txt new file mode 100644 index 0000000..2c6932e --- /dev/null +++ b/captures/rcp-buttons-call-exact-echo-delay-70ms.txt @@ -0,0 +1,19 @@ +Button test on COM5 at 38400 8N1 +Listening for 15.0s; respond_to_cam_power=False, respond_to_call=True, mirror_call=False +16:37:16.300 RX 001 bytes 00 +16:37:16.330 RX 005 bytes 00 00 00 80 DA +16:37:17.000 RX 001 bytes 00 +16:37:17.030 RX 005 bytes 00 00 00 80 DA +16:37:17.060 RX 006 bytes 00 00 15 80 00 CF +16:37:17.060 DETECT call-on x1 +16:37:17.131 TX button response frame 006 00 00 15 80 00 CF +16:37:17.131 TX button response frame 006 00 00 15 00 00 4F +16:37:19.114 RX 006 bytes 00 00 00 00 80 DA +16:37:19.114 DETECT heartbeat x1 +16:37:19.145 RX 001 bytes 00 +16:37:19.175 RX 005 bytes 00 15 00 00 4F +16:37:19.817 RX 006 bytes 00 00 00 00 80 DA +16:37:19.817 DETECT heartbeat x1 +16:37:20.489 RX 001 bytes 00 +16:37:20.520 RX 005 bytes 00 00 00 80 DA +Stopped. diff --git a/captures/rcp-buttons-call-exact-echo-delay-80ms-v2.txt b/captures/rcp-buttons-call-exact-echo-delay-80ms-v2.txt new file mode 100644 index 0000000..9194053 --- /dev/null +++ b/captures/rcp-buttons-call-exact-echo-delay-80ms-v2.txt @@ -0,0 +1,17 @@ +Button test on COM5 at 38400 8N1 +Listening for 15.0s; respond_to_cam_power=False, respond_to_call=True, mirror_call=False +16:37:34.047 RX 001 bytes 00 +16:37:34.077 RX 005 bytes 00 00 00 80 DA +16:37:34.597 RX 006 bytes 00 00 15 80 00 CF +16:37:34.597 DETECT call-on x1 +16:37:34.678 TX button response frame 006 00 00 15 80 00 CF +16:37:34.678 TX button response frame 006 00 00 15 00 00 4F +16:37:36.666 RX 006 bytes 00 00 00 00 80 DA +16:37:36.666 DETECT heartbeat x1 +16:37:36.818 RX 001 bytes 00 +16:37:36.849 RX 005 bytes 00 15 00 00 4F +16:37:37.461 RX 006 bytes 00 00 00 00 80 DA +16:37:37.461 DETECT heartbeat x1 +16:37:38.162 RX 006 bytes 00 00 00 00 80 DA +16:37:38.162 DETECT heartbeat x1 +Stopped. diff --git a/captures/rcp-buttons-call-exact-echo-delay-90ms.txt b/captures/rcp-buttons-call-exact-echo-delay-90ms.txt new file mode 100644 index 0000000..139e36b --- /dev/null +++ b/captures/rcp-buttons-call-exact-echo-delay-90ms.txt @@ -0,0 +1,19 @@ +Button test on COM5 at 38400 8N1 +Listening for 15.0s; respond_to_cam_power=False, respond_to_call=True, mirror_call=False +16:37:51.520 RX 001 bytes 00 +16:37:51.551 RX 005 bytes 00 00 00 80 DA +16:37:51.673 RX 006 bytes 00 00 15 80 00 CF +16:37:51.673 DETECT call-on x1 +16:37:51.764 TX button response frame 006 00 00 15 80 00 CF +16:37:51.764 TX button response frame 006 00 00 15 00 00 4F +16:37:53.742 RX 006 bytes 00 00 00 00 80 DA +16:37:53.742 DETECT heartbeat x1 +16:37:53.984 RX 001 bytes 00 +16:37:54.015 RX 005 bytes 00 15 00 00 4F +16:37:54.626 RX 001 bytes 00 +16:37:54.656 RX 005 bytes 00 00 00 80 DA +16:37:55.326 RX 001 bytes 00 +16:37:55.357 RX 005 bytes 00 00 00 80 DA +16:37:56.026 RX 001 bytes 00 +16:37:56.058 RX 005 bytes 00 00 00 80 DA +Stopped. diff --git a/docs/discovery-notes.md b/docs/discovery-notes.md index 7dec298..fd000e4 100644 --- a/docs/discovery-notes.md +++ b/docs/discovery-notes.md @@ -3034,3 +3034,55 @@ python scripts/serial_button_response_test.py --port COM5 --duration 15 --prompt This test is deliberately secondary. Run it only after the `0x45` family repeats, so any change can be attributed to the follow-up rather than to the initial CALL echo timing. + +### 2026-05-13 CALL 60-100 ms Repeat Result + +Captures: + +- `captures/rcp-buttons-call-exact-echo-delay-60ms.txt` +- `captures/rcp-buttons-call-exact-echo-delay-70ms.txt` +- `captures/rcp-buttons-call-exact-echo-delay-80ms-v2.txt` +- `captures/rcp-buttons-call-exact-echo-delay-90ms.txt` +- `captures/rcp-buttons-call-exact-echo-delay-100ms.txt` + +Observed result: + +| Delay | Result | +| --- | --- | +| 60 ms | no `0x45` response | +| 70 ms | no `0x45` response | +| 80 ms repeat | no `0x45` response | +| 90 ms | no `0x45` response | +| 100 ms | no `0x45` response | + +Interpretation: + +- The `07 80 45 30 D0 78` response from the earlier 80 ms run did not repeat in + the 80 ms repeat or nearby 60-100 ms bracket. +- The trigger is not controlled by the simple delay between CALL high detection + and the two-frame echo pair alone. +- A more likely variable is the spacing between the host's CALL-high echo and + CALL-low echo, or the RCP's internal heartbeat/call-scan phase when the echo + pair arrives. + +Next test direction: + +- Keep the initial response delay fixed near the values that have produced hits + before, but vary the spacing between the two echoed CALL frames. + +Tooling note: + +- `scripts/serial_button_response_test.py` now supports + `--response-frame-interval`, which inserts a delay between multiple + `--response-frame` values sent for the same observed button event. + +Inter-frame timing ladder: + +```powershell +python scripts/serial_button_response_test.py --port COM5 --duration 15 --prompt --respond-to-call --respond-once --response-delay 0.05 --response-frame-interval 0.02 --response-frame "00 00 15 80 00 CF" --response-frame "00 00 15 00 00 4F" --watch-frame "07 80 45 20 D0 68" --watch-frame "07 80 45 30 D0 78" --log captures/rcp-buttons-call-frame-gap-20ms.txt +python scripts/serial_button_response_test.py --port COM5 --duration 15 --prompt --respond-to-call --respond-once --response-delay 0.05 --response-frame-interval 0.05 --response-frame "00 00 15 80 00 CF" --response-frame "00 00 15 00 00 4F" --watch-frame "07 80 45 20 D0 68" --watch-frame "07 80 45 30 D0 78" --log captures/rcp-buttons-call-frame-gap-50ms.txt +python scripts/serial_button_response_test.py --port COM5 --duration 15 --prompt --respond-to-call --respond-once --response-delay 0.05 --response-frame-interval 0.08 --response-frame "00 00 15 80 00 CF" --response-frame "00 00 15 00 00 4F" --watch-frame "07 80 45 20 D0 68" --watch-frame "07 80 45 30 D0 78" --log captures/rcp-buttons-call-frame-gap-80ms.txt +python scripts/serial_button_response_test.py --port COM5 --duration 15 --prompt --respond-to-call --respond-once --response-delay 0.08 --response-frame-interval 0.05 --response-frame "00 00 15 80 00 CF" --response-frame "00 00 15 00 00 4F" --watch-frame "07 80 45 20 D0 68" --watch-frame "07 80 45 30 D0 78" --log captures/rcp-buttons-call-delay-80ms-frame-gap-50ms.txt +``` + +For each run, power-cycle first and use the same roughly 2 second CALL hold. diff --git a/scripts/__pycache__/serial_button_response_test.cpython-312.pyc b/scripts/__pycache__/serial_button_response_test.cpython-312.pyc index dccf21ccca920e3e40685ff40ca91f2c117f3c60..80bc6138b553bab01c9dcc103e535f59348abc5b 100644 GIT binary patch delta 1147 zcmYjPZ){Ul6uVSF8wxpf)h&|$Fup-oH#s^<5)$= zZVHQRk>f@7WIE1) zdRJ*nrO{fU57cx()$|ysRO*@ms2b1(-?y+*-ruTMsrE^x?0&RpvXy!N6$*Zb{_f28 zPXKV%A&x6EOQdq#78g@f)`OOWcRqlOUfXbcFFZ2_?QsiQ<&@& zYU%PexX!sGLNH52cC*(=m&T5%5-fo+G6hP|3;vfbf7&%izqUKiE0F^R8vv?BONLi|a3=Q_-Wr!z2%Nmh~J747Q5Fb|rZ! zxnyA08VpZ2#z|ldJgr(|f2rk~8j$hX<74R0=*5YYmbyt;Q#5t6sn3^kgKv5g_LPPE z!M+RQZBq#2j}#%JX3&Sty^cNxn`OF>#irudV$F(0m2zrU>>Am3n}^KgN(UUWfhuLe ze)R?Skb$g*D9qe9s4#QiOv=7(%TOD7)_({7j22?=vSB##y{R55(K1chtTq%3zpE6!JdBriK9xe delta 810 zcmYL@-Aj{k6vuz(c^=)|i|$Q)*|YhwbQ8sLn=@aRY|as7phR=oMKLXgrA|qaN5dc~ zkbF6XK?Hi0;zh;dACMR&`3hOh;e{7bSCyI&;zj+QWOOdR=X*Zq{C?-Gjl=vyNM2T} z6@dW^uoNK&E*LFpXOH~2rleFN39gVKREFc!ou;l_a=2tR zU{O{`TQvvA(?A4hA_djrbk;Xk{9{otuq-O_Z45Tq7NAW`El?zYM$9gL&cPTi*>5_0 zgbZW~te0HTP-pBZiLVt>1PJ8_#yKwj^@xrm0txrwv`mlR9dfYYiaiJV@rRw4kN9a* z8}6EL@fdJ6D>V!~C6pJ+4-fpCUw1aZu`4MJz|e%tj5DPtVGyIGR;es3yBpv9Kc66x z$^pLTUYvvq1^y{{#`FxwN%%fqb6J%9ATKZxt-yqbaLi>%qjfLzl0LSX^n!)Nd-OQ* zt80dVN*pa;fiu`raSrOl*$OLz2UQorglDUN>gAEv?#_-|-K~)Vx~AJi1+Ug*U}p`7 z{WU5@jDojPrxC|$-otIY>^=|e;;j1xYvWSgPatY5+b5850iO7``TVKw8SjSO^E&X6 zZ`freykpG5S&um}iB9h-aMhEe_b^1CHd#Dg{6UvHb!k&qwC6+cwm6#Dc1Y6g-C&8z z5LFpQ8y+-ls`wqH>Tti8CCT=~nBMz4QJUE$k{%rdam+h>Cy>G|GWvjlTTHLD2J*-o zw?8eA!LFv2QC&-MQeEd5No94#G;O+Sd73^MYO`tj?3B|t(Ts#Zt}JSnNj^^-OlPAm z2pY+jQb+xk$sE+PTa_FoF?|9hv2<4Q#?;^`d|bBy+t}uN1n=<3mkmqE*LOe+N9wKc c1?THus%rr>zx<4k0rhSpcKJPx# diff --git a/scripts/serial_button_response_test.py b/scripts/serial_button_response_test.py index fcc28cc..2484fa2 100644 --- a/scripts/serial_button_response_test.py +++ b/scripts/serial_button_response_test.py @@ -176,6 +176,12 @@ def parse_args() -> argparse.Namespace: ) parser.add_argument("--followup-delay", type=float, default=0.05) parser.add_argument("--response-delay", type=float, default=0.05) + parser.add_argument( + "--response-frame-interval", + type=float, + default=0.0, + help="delay between multiple response frames sent for one button event", + ) parser.add_argument("--response-repeat", type=int, default=1) parser.add_argument("--response-interval", type=float, default=0.2) parser.add_argument( @@ -302,7 +308,9 @@ def main() -> int: responded = True time.sleep(args.response_delay) for _ in range(args.response_repeat): - for response in response_frames: + for response_index, response in enumerate(response_frames): + if response_index and args.response_frame_interval: + time.sleep(args.response_frame_interval) send_frame(ser, emit, "button response", response) if args.response_repeat > 1: time.sleep(args.response_interval)