Fiabilite Canon : veille/reveil relais, sequence boot, stats diagnostic, fin evenement, compteur consommables
- Preview thread : poll uniquement quand ecran capture actif, keepalive 30s sinon - Sequence boot Canon : power cycle relais si absent USB au demarrage - Veille auto 30min : Canon coupe par relais apres inactivite, reveil au preview_start - Stats diagnostic /api/canon/stats : keepalive, preview, captures, connexions - Escalade reconnexion adoucie : pas d'USB reset les 2 premieres tentatives - Hard reset relais 10s (resistance decharge 990ohm sur dummy battery 8V) - Gestion fin evenement : date_fin + bouton terminer + guard 403 impression - Compteur base sur min(papier, ruban) avec cap evenement optionnel - Pre-eclairage countdown : projecteurs ON 3s avant capture pour mesure expo - Canon _configurer_init() : ISO 800, drivemode Single, viewfinder, EXIF preserve - Admin : detail evenement, compteur consommables, galerie impression Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WyN9xFp84P9VaWT3Qe2DXu
This commit is contained in:
@@ -26,7 +26,8 @@ PID = 0x2007
|
||||
CANAUX = {
|
||||
"projecteur_gauche": {"relay": 1, "mode": "NO"},
|
||||
"projecteur_droit": {"relay": 2, "mode": "NO"},
|
||||
"canon": {"relay": 3, "mode": "NF"},
|
||||
"canon": {"relay": 3, "mode": "NF"}, # dummy battery
|
||||
"canon_usb": {"relay": 4, "mode": "NF"}, # VBUS USB
|
||||
}
|
||||
|
||||
_lib = None
|
||||
@@ -115,12 +116,13 @@ def status():
|
||||
rbuf = (ctypes.c_ubyte * 64)()
|
||||
with _lock:
|
||||
n = _lib.hid_read_timeout(_dev, rbuf, 64, 500)
|
||||
if n < 4:
|
||||
if n < 5:
|
||||
return None
|
||||
return {
|
||||
"relay_1": rbuf[1] == 1,
|
||||
"relay_2": rbuf[2] == 1,
|
||||
"relay_3": rbuf[3] == 1,
|
||||
"relay_4": rbuf[4] == 1,
|
||||
}
|
||||
|
||||
|
||||
@@ -144,12 +146,30 @@ def projecteurs(on: bool):
|
||||
log.info(f"Projecteurs {'allumés' if on else 'éteints'}")
|
||||
|
||||
|
||||
def power_cycle_canon(duree: float = 3.0):
|
||||
log.info(f"Power-cycle Canon ({duree}s)")
|
||||
_relay_set(3, True) # NF : ON = coupé
|
||||
time.sleep(duree)
|
||||
_relay_set(3, False) # NF : OFF = alimenté
|
||||
log.info("Canon ré-alimenté")
|
||||
def power_cycle_canon(duree: float = 5.0):
|
||||
"""Cycle complet R3+R4 : coupe dummy battery + VBUS, reboot Canon.
|
||||
Résistance de décharge 470Ω sur le 8V → condensateurs vidés en ~3s."""
|
||||
log.info(f"Power-cycle Canon R3+R4 ({duree}s)")
|
||||
_relay_set(3, True) # R3 ON = coupe dummy battery (NF)
|
||||
_relay_set(4, True) # R4 ON = coupe VBUS USB (NF)
|
||||
time.sleep(duree) # résistance vide les caps en ~3s
|
||||
_relay_set(3, False) # R3 OFF = dummy battery → Canon boot
|
||||
time.sleep(15) # attente boot Canon
|
||||
_relay_set(4, False) # R4 OFF = VBUS → USB enumeration
|
||||
log.info("Canon ré-alimenté — attente USB enumeration")
|
||||
|
||||
|
||||
def hard_reset_canon(duree: float = 10.0):
|
||||
"""Reset prolongé pour freeze PTP sévère.
|
||||
Résistance de décharge 470Ω → 5s suffisent, mais on garde une marge."""
|
||||
log.warning(f"Hard reset Canon — coupure R3+R4 ({duree}s)")
|
||||
_relay_set(3, True) # R3 ON = coupe dummy battery
|
||||
_relay_set(4, True) # R4 ON = coupe VBUS
|
||||
time.sleep(duree) # vidange complète avec résistance
|
||||
_relay_set(3, False) # R3 OFF = dummy battery → Canon boot
|
||||
time.sleep(15) # attente boot Canon
|
||||
_relay_set(4, False) # R4 OFF = VBUS → USB enumeration
|
||||
log.info("Hard reset Canon terminé — attente démarrage")
|
||||
|
||||
|
||||
def etat_complet():
|
||||
|
||||
Reference in New Issue
Block a user