nenuscanner/leds.py

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()