#!/usr/bin/env python3 """Send one animation to Pico panel(s) over UDP.""" from __future__ import annotations import argparse import sys from leds.animations import ANIMATIONS, DEFAULT_FPS from leds.panel_udp import ( add_panel_args, format_panel_targets, panel_targets_from_args, parse_pins_arg, run_panel_animation_loop, ) def main() -> int: parser = argparse.ArgumentParser(description="UDP animation sender for Pico panel(s)") add_panel_args(parser) parser.add_argument("--animation", default="rainbow", choices=sorted(ANIMATIONS)) parser.add_argument("--fps", type=float, default=None) parser.add_argument("--brightness", type=float, default=0.25) args = parser.parse_args() targets = panel_targets_from_args(args) fps = args.fps or DEFAULT_FPS.get(args.animation, 30) print(f"Sending {args.animation} to {format_panel_targets(targets, args.port)} @ {fps:.0f} fps") try: run_panel_animation_loop( targets, args.port, args.animation, fps=args.fps, brightness=args.brightness, panel_id=args.panel_id, pin=args.pin, pins=parse_pins_arg(args), ) except KeyboardInterrupt: print("\nStopped.") except OSError as exc: print(f"Network error: {exc}", file=sys.stderr) return 1 return 0 if __name__ == "__main__": raise SystemExit(main())