95 lines
1.9 KiB
Python
95 lines
1.9 KiB
Python
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()
|