Files
csaxs_bec/tests
menzelandClaude Opus 5 08cf0349bd
CI for csaxs_bec / test (push) Failing after 41s
fix(canon): query info.cgi without the session; drop mjpeg; add Stage 7 check
Three changes, all driven by what the camera actually did.

info.cgi must not carry the session id
--------------------------------------
Hardware run on 2026-08-17: get_camera_info() succeeded but every position
lookup raised "axis 'pan' (c.1.pan) not in info.cgi response". Bare info.cgi
returns the full ~32 kB device state; `info.cgi?s=<id>` returns only the
session-scoped `s.*` subset -- which contains s.hardware and s.firmware, so
identity worked while nothing under c.1.* existed. The session parameter is
now omitted for info.cgi (and open.cgi, as before); control CGIs still carry
it. This is what unblocks Stages 2 and 3.

Drop the mjpeg acquisition mode
-------------------------------
The CR-N300 implements no MJPEG operator -- nphMotionJpeg, GetLiveImage and
the rest all answer "Unknown Operator" -- so the mode could never have
produced a frame here. Removed rather than left as a config value that
silently does nothing: ACQUISITION_MODES is now (jpeg_poll, jpeg_on_demand),
and MJPEGHttpSource, the stream_url key and DEFAULT_STREAM_CGI go with it.
Re-adding a streaming mode means writing one FrameSource; the worker, ring
buffer and grab API are indifferent to how frames arrive.

The JPEG path is 1280x720 at up to 12.5 fps (w.3); 4K is H.264-only, so
nobody should expect full-resolution frames through the grab API.

acquisition_check.py -- the Stage 7 tool
-----------------------------------------
Drives the production acquisition path (SingleJpegPollSource + StreamWorker +
FrameRingBuffer) and reports establishment time, achieved rate, measured
bandwidth, grab latency and -- with --decode -- a real cv2 decode with its
resolution. Standard-library only and runnable from a copied canon/ directory,
like probe.py, so it works before BEC is installed on a beamline machine.

It is read-only, which means **Stage 7 does not depend on Stage 4**: the whole
acquisition path can be closed with the camera still on the bench, waiting to
be mounted. COMMISSIONING gains this as step 7.0b.

Tests: 86. New coverage for the sessionless info.cgi (regression for the exact
hardware failure), mjpeg now being rejected at construction, and the Stage 7
tool end-to-end against the mock camera including its non-zero exit when
nothing answers.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-17 19:56:17 +02:00
..