+47
−29
+29
−12
Loading
Due dei tre problemi Atik segnalati testando su fork:
1) Setpoint/cooling: il setter temperature faceva solo
self._setpoint = t senza mai toccare l'hardware finché non si
riaccendeva il cooling. Portato lo stesso fix già presente in
stl.py: se il cooling è già attivo, riapplica subito il nuovo
setpoint via self.cooler = True. Da confermare su fork.
2) Cooling Off che non scalda: nessuna modifica, non è chiaramente un
bug. La doc SDK (AtikCameras.h) descrive ArtemisCoolerWarmUp come
"on some devices, this will perform a slow ramp down... to avoid
thermal shock" — è l'unica chiamata SDK per questo, nessun altro
punto del codice riattiva il cooling. Potrebbe solo essere più
lenta di STX/STL: serve osservare più a lungo su hardware, non un
fix di codice.
3) half_frame()/small_frame() full-frame: NON è un fix della causa,
solo la chiusura di un buco diagnostico. put()'s ctypes_errors non
controlla mai il codice di ritorno numerico dell'SDK (dichiarato
nel suo stesso docstring, "each call site's job") — e i 4 metodi
set_window/full_frame/half_frame/small_frame non lo controllavano
mai. Se ArtemisSubframe falliva, veniva ignorato in silenzio e
self._subframe (da cui XORGSUBF/YORGSUBF) restava comunque
aggiornato come se fosse riuscito. Accorpati i 4 punti duplicati in
_apply_subframe(), che ora controlla il codice di ritorno
(ARTEMIS_OK==0, verificato in AtikDefs.h) e non aggiorna la cache se
fallisce. Copre solo lo scenario "la chiamata fallisce silenziosa";
non copre lo scenario alternativo in cui la chiamata riesce ma il
sensore consegna comunque il frame intero — quello richiederebbe
confrontare ArtemisGetSubframe con ArtemisGetImageData, non fatto
qui. La prossima esposizione reale su fork dirà quale dei due è.
Co-Authored-By:
Claude Sonnet 5 <noreply@anthropic.com>