Commit Graph
10 Commits
Author SHA1 Message Date
xXPBSXxandClaude Sonnet 5.5 10781b738d fix(tools): let an unreadable pad command file fail instead of resetting the sequence
previous_sequence caught PermissionError and IsADirectoryError and returned 0,
so an unreadable command file was silently overwritten with a restarted
sequence. main() already rejects directory targets, so only FileNotFoundError
is a valid empty start. Cover the unreadable case with a mocked PermissionError,
which needs no chmod and also runs for privileged writers.

Addresses the changes requested in the review of 19.10. and 24.10.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-26 01:43:59 +01:00
Lautaro 0be86904b3 fix(tools): normalize pad input output encoding and validate target path
Ensure pad_input writes controller commands with explicit UTF-8 encoding and UNIX LF newlines across all host platforms. Validate that the target path is not a directory and that its parent directory exists before attempting to write.
2026-10-26 01:43:59 +01:00
JJenkx ba09143027 fix(tools): list controller buttons in chord input help 2026-10-21 12:10:51 -04:00
JJenkxandClaude Opus 5.5 505943c4ef feat(tools): press several buttons together from pad_input.py
Some titles wait for a chord on their title screen: RollerCoaster Tycoon
Adventures Deluxe (PPSA17330) asks for L1 + R1. The command file already
carries a button bit field, but the helper accepted one name. Names joined
by '+' are now combined into one command; unknown names, duplicates and
release in a chord are rejected without touching the command file.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-21 07:55:36 -04:00
tkcm01andClaude Opus 5.5 5092e19c64 fix(tools): preserve pad command ordering across clock resets
pad_timeline.py now takes its sequence from pad_input.next_sequence, and
pad_input.previous_sequence reads the sequence from an APS5_PAD_TIMELINE
header, so a pulse or timeline queued after a host reboot still exceeds
the sequence the runtime loaded from the existing command file.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 13:23:42 -04:00
XairRrR a9377e34ba feat(pad): touch the left or right touchpad half from the input command file
APS5_PAD_INPUT_FILE commands can set bit 0x200000 or 0x400000 to put a
finger on the left or right half of the touchpad, as the TouchLeft and
TouchRight keys do, so scripted runs can press touchpad combinations.
tools/pad_input.py queues them as touch-left and touch-right.

AI-assisted: yes
2026-10-17 13:27:54 +02:00
JJenkx c465e00150 fix(tools): preserve controller command access 2026-10-13 02:44:47 -04:00
Simon 70481b0703 fix(pad-input): preserve command ordering across clock resets 2026-10-12 15:23:22 +02:00
fma-rc e0eef6c57f feat(pad): hold the sticks from the controller command file 2026-10-12 04:47:59 +02:00
TibixDev 3a35841aad feat(pad): accept timed controller pulses from a local command file
Add an optional input helper for test runs without desktop input injection. Preserve physical input and release injected buttons automatically.

Validation: guest_pad tests and Python helper CLI smoke checks passed. Written with AI assistance.
2026-10-11 10:54:18 +02:00