-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfiguracion.py
More file actions
75 lines (67 loc) · 2.93 KB
/
configuracion.py
File metadata and controls
75 lines (67 loc) · 2.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
from __future__ import annotations
from dataclasses import dataclass
from pathlib import Path
import argparse
@dataclass
class Config:
puerto_epd: str
baud: int
pantalla_ancho: int
pantalla_alto: int
rotacion: int
espejo: bool
bpm: float
sleep_epd: bool # << ahora opt-in: solo duerme si es True
modo_prueba: bool
salida: Path
ruta_imagen: Path | None
capturar: bool
gpiochip: str | int # "auto" | 0..7
pin_enable: int | None
espera_epd: float
def build_argparser() -> argparse.ArgumentParser:
ap = argparse.ArgumentParser(description="Foto → EPD → Canción → Limpiar/Sleep")
ap.add_argument("--puerto", default="/dev/ttyACM0", help="Puerto serial EPD (p.ej. /dev/ttyACM0)")
ap.add_argument("--baud", type=int, default=115200)
ap.add_argument("--imagen", help="Ruta a imagen existente en vez de capturar")
ap.add_argument("--capturar", action="store_true", help="Capturar con rpicam/libcamera")
ap.add_argument("--difuminado", choices=["floyd", "bayer", "ninguno"], default="floyd")
ap.add_argument("--rotacion", type=int, default=0, choices=[0, 90, 180, 270])
ap.add_argument("--espejo", action="store_true")
ap.add_argument("--ancho-pantalla", type=int, default=104)
ap.add_argument("--alto-pantalla", type=int, default=212)
ap.add_argument("--bpm", type=float, default=70.0, help="Tempo de la canción (default 70)")
ap.add_argument("--sleep", dest="sleep_epd", action="store_true", help="Dormir la EPD al final (opt-in)")
ap.add_argument("--salida", default="out", help="Carpeta de salida para capturas y preview")
ap.add_argument("--modo-prueba", action="store_true", help="Modo prueba: salta serial/GPIO para validar flujo")
ap.add_argument("--gpiochip", default="auto", help='"auto" o índice 0..7')
ap.add_argument("--pin-enable", type=int, default=None, help="GPIO opcional para ENABLE de DRV8825")
ap.add_argument("--espera-epd", type=float, default=3.0, help="Segundos de espera tras enviar imagen")
return ap
def parse_config() -> tuple[Config, str]:
ap = build_argparser()
args = ap.parse_args()
ruta_imagen = None
if args.imagen:
p = Path(args.imagen).resolve()
if not p.exists():
raise FileNotFoundError(f"Imagen no encontrada: {p}")
ruta_imagen = p
cfg = Config(
puerto_epd=args.puerto,
baud=args.baud,
pantalla_ancho=args.ancho_pantalla,
pantalla_alto=args.alto_pantalla,
rotacion=args.rotacion,
espejo=args.espejo,
bpm=args.bpm,
sleep_epd=bool(args.sleep_epd), # default False → no duerme por defecto
modo_prueba=args.modo_prueba,
salida=Path(args.salida),
ruta_imagen=ruta_imagen,
capturar=bool(args.capturar and not ruta_imagen),
gpiochip=args.gpiochip,
pin_enable=args.pin_enable,
espera_epd=args.espera_epd,
)
return cfg, args.difuminado