This commit is contained in:
Aiden
2026-05-13 16:54:41 +10:00
parent 8cc9bb4cd8
commit 4c97f0aae9
4 changed files with 144 additions and 1 deletions

View File

@@ -8,6 +8,7 @@ This helper can:
3. Optionally transmit response frames when CAM POWER or CALL is observed.
4. Optionally mirror CALL high/low events with matching host responses.
5. Optionally transmit follow-up frames when a watched response frame appears.
6. Optionally transmit startup frames without waiting for a button event.
Known RCP-origin button frames:
@@ -175,6 +176,19 @@ def parse_args() -> argparse.Namespace:
help="hex frame to send after a watched frame appears; can be repeated",
)
parser.add_argument("--followup-delay", type=float, default=0.05)
parser.add_argument(
"--startup-frame",
type=parse_hex_bytes,
action="append",
help="hex frame to send after listening starts, without waiting for a button event",
)
parser.add_argument("--startup-delay", type=float, default=0.5)
parser.add_argument(
"--startup-frame-interval",
type=float,
default=0.05,
help="delay between multiple startup frames",
)
parser.add_argument("--response-delay", type=float, default=0.05)
parser.add_argument(
"--response-frame-interval",
@@ -238,7 +252,10 @@ def main() -> int:
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: ")
if args.startup_frame:
input("Ready to listen. Press Enter; startup frames will be sent automatically: ")
else:
input("Ready to listen. Press Enter, then press CAM POWER/CALL on the RCP: ")
ser.reset_input_buffer()
emit(
@@ -249,6 +266,13 @@ def main() -> int:
)
stop_at = time.monotonic() + args.duration
buffer = bytearray()
if args.startup_frame:
time.sleep(args.startup_delay)
for frame_index, frame in enumerate(args.startup_frame):
if frame_index:
time.sleep(args.startup_frame_interval)
send_frame(ser, emit, "startup", frame)
while time.monotonic() < stop_at:
data = ser.read(args.chunk_size)
if not data: