53 lines
1.1 KiB
Python
53 lines
1.1 KiB
Python
import gpiod
|
|
|
|
from . import config
|
|
|
|
class GpioLed:
|
|
chip = gpiod.Chip(config.GPIO_CHIP)
|
|
|
|
def __init__(self, gpio_pin: int):
|
|
self.gpio_pin = gpio_pin
|
|
self.led = None
|
|
|
|
def __enter__(self):
|
|
self.led = GpioLed.chip.get_line(self.gpio_pin)
|
|
self.led.request(consumer=str(self), type=gpiod.LINE_REQ_DIR_OUT)
|
|
self.off()
|
|
|
|
def __exit__(self, *args):
|
|
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, gpio_pins: list[int]):
|
|
self.leds = []
|
|
for pin in gpio_pins:
|
|
self.leds.append(GpioLed(pin))
|
|
|
|
def __enter__(self):
|
|
for led in self.leds:
|
|
led.__enter__()
|
|
|
|
def __exit__(self, *args):
|
|
for led in self.leds:
|
|
led.__exit__(*args)
|
|
|
|
def off(self):
|
|
for led in self.leds:
|
|
led.off()
|
|
|
|
def on(self):
|
|
for led in self.leds:
|
|
led.on()
|