import gpiod class GpioLed: def __init__(self, gpio_pin: int): self.gpio_pin = gpio_pin self.led = None def enter(self, chip: gpiod.Chip): self.led = chip.get_line(self.gpio_pin) self.led.request(consumer=str(self), type=gpiod.LINE_REQ_DIR_OUT) self.off() def exit(self): self.off() self.led.release() self.led = None def on(self): self.led.set_value(1) def off(self): self.led.set_value(0) def __str__(self): return f'LED{self.gpio_pin:02}' class GpioLeds: def __init__(self, chip: str, gpio_pins: list[int]): self.chip = gpiod.Chip(chip) self.leds = [] for pin in gpio_pins: self.leds.append(GpioLed(pin)) def __enter__(self): for led in self.leds: led.enter(self.chip) def __exit__(self, *args): for led in self.leds: led.exit() def off(self): for led in self.leds: led.off() def on(self): for led in self.leds: led.on() class DummyLed: def __init__(self, gpio_pin: int): self.gpio_pin = gpio_pin self.is_on = False def enter(self): pass def exit(self): pass def on(self): self.is_on = True def off(self): self.is_on = False def __str__(self): return f'LED{self.gpio_pin:02}' class DummyLeds: def __init__(self, gpio_pins: list[int]): self.leds = [] for pin in gpio_pins: self.leds.append(DummyLed(pin)) def __enter__(self): for led in self.leds: led.enter() def __exit__(self, *args): for led in self.leds: led.exit() def off(self): for led in self.leds: led.off() def on(self): for led in self.leds: led.on()