mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2026-01-29 09:01:54 +08:00
debounce for gpiod AioReader
This commit is contained in:
@@ -34,6 +34,7 @@ from ... import aiogp
|
||||
from ...yamlconf import Option
|
||||
|
||||
from ...validators.basic import valid_bool
|
||||
from ...validators.basic import valid_float_f0
|
||||
from ...validators.basic import valid_float_f01
|
||||
|
||||
from ...validators.hw import valid_gpio_pin
|
||||
@@ -47,9 +48,12 @@ class Plugin(BaseAtx): # pylint: disable=too-many-instance-attributes
|
||||
def __init__( # pylint: disable=too-many-arguments,super-init-not-called
|
||||
self,
|
||||
power_led_pin: int,
|
||||
hdd_led_pin: int,
|
||||
power_led_inverted: bool,
|
||||
power_led_debounce: float,
|
||||
|
||||
hdd_led_pin: int,
|
||||
hdd_led_inverted: bool,
|
||||
hdd_led_debounce: float,
|
||||
|
||||
power_switch_pin: int,
|
||||
reset_switch_pin: int,
|
||||
@@ -72,12 +76,12 @@ class Plugin(BaseAtx): # pylint: disable=too-many-instance-attributes
|
||||
self.__power_switch_line: Optional[gpiod.Line] = None
|
||||
self.__reset_switch_line: Optional[gpiod.Line] = None
|
||||
|
||||
self.__reader = aiogp.AioPinsReader(
|
||||
self.__reader = aiogp.AioReader(
|
||||
path=aiogp.DEVICE_PATH,
|
||||
consumer="kvmd/atx-gpio/leds",
|
||||
pins={
|
||||
power_led_pin: power_led_inverted,
|
||||
hdd_led_pin: hdd_led_inverted,
|
||||
power_led_pin: aiogp.AioReaderPinParams(power_led_inverted, power_led_debounce),
|
||||
hdd_led_pin: aiogp.AioReaderPinParams(hdd_led_inverted, hdd_led_debounce),
|
||||
},
|
||||
notifier=self.__notifier,
|
||||
)
|
||||
@@ -86,9 +90,12 @@ class Plugin(BaseAtx): # pylint: disable=too-many-instance-attributes
|
||||
def get_plugin_options(cls) -> Dict:
|
||||
return {
|
||||
"power_led_pin": Option(-1, type=valid_gpio_pin),
|
||||
"hdd_led_pin": Option(-1, type=valid_gpio_pin),
|
||||
"power_led_inverted": Option(False, type=valid_bool),
|
||||
"hdd_led_inverted": Option(False, type=valid_bool),
|
||||
"power_led_debounce": Option(0.1, type=valid_float_f0),
|
||||
|
||||
"hdd_led_pin": Option(-1, type=valid_gpio_pin),
|
||||
"hdd_led_inverted": Option(False, type=valid_bool),
|
||||
"hdd_led_debounce": Option(0.1, type=valid_float_f0),
|
||||
|
||||
"power_switch_pin": Option(-1, type=valid_gpio_pin),
|
||||
"reset_switch_pin": Option(-1, type=valid_gpio_pin),
|
||||
|
||||
@@ -74,7 +74,7 @@ class BaseUserGpioDriver(BasePlugin):
|
||||
def get_modes(cls) -> Set[str]:
|
||||
return set(UserGpioModes.ALL)
|
||||
|
||||
def register_input(self, pin: int) -> None:
|
||||
def register_input(self, pin: int, debounce: float) -> None:
|
||||
raise NotImplementedError
|
||||
|
||||
def register_output(self, pin: int, initial: Optional[bool]) -> None:
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
|
||||
|
||||
from typing import Dict
|
||||
from typing import Set
|
||||
from typing import Optional
|
||||
|
||||
import gpiod
|
||||
@@ -42,26 +41,26 @@ class Plugin(BaseUserGpioDriver):
|
||||
|
||||
super().__init__(instance_name, notifier)
|
||||
|
||||
self.__input_pins: Set[int] = set()
|
||||
self.__input_pins: Dict[int, aiogp.AioReaderPinParams] = {}
|
||||
self.__output_pins: Dict[int, Optional[bool]] = {}
|
||||
|
||||
self.__reader: Optional[aiogp.AioPinsReader] = None
|
||||
self.__reader: Optional[aiogp.AioReader] = None
|
||||
|
||||
self.__chip: Optional[gpiod.Chip] = None
|
||||
self.__output_lines: Dict[int, gpiod.Line] = {}
|
||||
|
||||
def register_input(self, pin: int) -> None:
|
||||
self.__input_pins.add(pin)
|
||||
def register_input(self, pin: int, debounce: float) -> None:
|
||||
self.__input_pins[pin] = aiogp.AioReaderPinParams(False, debounce)
|
||||
|
||||
def register_output(self, pin: int, initial: Optional[bool]) -> None:
|
||||
self.__output_pins[pin] = initial
|
||||
|
||||
def prepare(self) -> None:
|
||||
assert self.__reader is None
|
||||
self.__reader = aiogp.AioPinsReader(
|
||||
self.__reader = aiogp.AioReader(
|
||||
path=aiogp.DEVICE_PATH,
|
||||
consumer="kvmd/ugpio-gpio/inputs",
|
||||
pins=dict.fromkeys(self.__input_pins, False),
|
||||
pins=self.__input_pins,
|
||||
notifier=self._notifier,
|
||||
)
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ class Plugin(BaseUserGpioDriver):
|
||||
def get_modes(cls) -> Set[str]:
|
||||
return set([UserGpioModes.OUTPUT])
|
||||
|
||||
def register_input(self, pin: int) -> None:
|
||||
def register_input(self, pin: int, debounce: float) -> None:
|
||||
raise RuntimeError(f"Unsupported mode 'input' for pin={pin} on {self}")
|
||||
|
||||
def register_output(self, pin: int, initial: Optional[bool]) -> None:
|
||||
|
||||
Reference in New Issue
Block a user