@@ -14,6 +14,7 @@ layout.
1414
1515- ` src/arena_interface/ ` : importable package and CLI
1616- ` scripts/ ` : developer helper scripts, including benchmark matrix helpers
17+ - ` tools/ ` : repository-local helper tools such as the QSPY/QTools wrapper
1718- ` tests/ ` : lightweight smoke tests that do not require hardware
1819- ` patterns/ ` : small example pattern files for streaming tests
1920- ` pyproject.toml ` : packaging metadata, tool configuration, and Pixi manifest
@@ -245,7 +246,7 @@ still customize labels, durations, rates, and pattern paths.
245246Examples:
246247
247248``` sh
248- pixi run bench -- -- json-out host_only.jsonl
249+ pixi run bench --json-out host_only.jsonl
249250pixi run bench-full --json-out host_plus_stream.jsonl
250251pixi run bench-full --stream-rate 250 --stream-seconds 8 --json-out stream_250hz.jsonl
251252pixi run python -m arena_interface --ethernet 192.168.10.104 bench --cmd-iters 500 --spf-rate 250
@@ -307,6 +308,68 @@ A practical workflow is:
3073082 . Capture QS logs on representative runs or anomalous runs.
3083093 . Use the QS logs to explain why two host-visible results differ.
309310
311+ ## QSPY from the Python repository
312+
313+ This repository now includes the same pinned QSPY helper flow that exists in the
314+ firmware repository. That makes it easy to install QTools and capture QS logs
315+ without leaving the Python benchmark environment.
316+
317+ The helper installs Quantum Leaps QTools locally into:
318+
319+ ``` text
320+ .tools/quantum-leaps/
321+ ```
322+
323+ That directory is ignored by ` .gitignore ` , so the downloaded tools do not end up
324+ in your commits.
325+
326+ Install QTools and build QSPY if needed:
327+
328+ ``` sh
329+ pixi run qtools-install
330+ ```
331+
332+ Run QSPY on Linux:
333+
334+ ``` sh
335+ pixi run qspy -c /dev/ttyACM0 -b 115200
336+ ```
337+
338+ Run QSPY on macOS:
339+
340+ ``` sh
341+ pixi run qspy -c /dev/cu.usbmodem1234 -b 115200
342+ ```
343+
344+ Run QSPY on Windows:
345+
346+ ``` powershell
347+ pixi run qspy -c COM3 -b 115200
348+ ```
349+
350+ To show QSPY's own help instead of the wrapper help, use the explicit separator:
351+
352+ ``` sh
353+ pixi run qspy -- -h
354+ ```
355+
356+ A typical workflow is to run QSPY in one terminal and the Python benchmark in
357+ another. This works well when the arena is controlled over Ethernet and QS is
358+ streamed over the USB serial port:
359+
360+ ``` sh
361+ # terminal 1
362+ pixi run qspy -c /dev/ttyACM0 -b 115200
363+
364+ # terminal 2
365+ export ARENA_ETH_IP=192.168.10.104
366+ pixi run bench-full --json-out bench_results.jsonl
367+ ```
368+
369+ Do not try to use QSPY and the Python package's serial transport on the same
370+ serial port at the same time. If you want simultaneous control and QS capture,
371+ use Ethernet for control and USB serial for QSPY.
372+
310373## Cross-platform notes
311374
312375The project configuration targets Linux, macOS, and Windows through Pixi, and
@@ -360,4 +423,6 @@ pixi run test
360423pixi run check
361424pixi run build
362425pixi run archive
426+ pixi run qtools-install
427+ pixi run qspy -c /dev/ttyACM0 -b 115200
363428```
0 commit comments