feat(cli): Add await-reset to wait for piControl reset signal

Introduced a new `await-reset` command to the CLI, allowing users to
wait for a `NotifyDriverReset` signal with an optional timeout
parameter. Updated the argument parser and implemented the signal
detection logic using `await_signal`. Ensures improved control and
monitoring of piControl driver resets via CLI.
This commit is contained in:
2025-04-18 17:33:25 +02:00
parent 527a921bfd
commit e8c2482bea

View File

@@ -4,7 +4,7 @@
from argparse import ArgumentParser
from logging import getLogger
from .dbus_helper import simple_call
from .dbus_helper import await_signal, simple_call
from .. import proginit as pi
from ..dbus_middleware1 import extend_interface
@@ -21,6 +21,17 @@ def add_subparsers(parent_parser: ArgumentParser):
"reset",
help="Reset the piControl driver",
)
methods_await_reset = methods.add_parser(
"await-reset",
help="Wait for the piControl driver to be reset",
)
methods_await_reset.add_argument(
"-t",
"--timeout",
type=int,
default=0,
help="Timeout in seconds. Default: 0 (no timeout).",
)
def method_reset():
@@ -29,6 +40,14 @@ def method_reset():
log.info("ResetDriver called via D-Bus")
def method_await_reset(timout: int = 0):
detected_signal = await_signal("NotifyDriverReset", timout, extend_interface("picontrol"))
if detected_signal:
log.info("ResetDriver signal received")
else:
raise Exception("Interrupted or timeout reached before signal was received")
def main() -> int:
method = pi.pargs.methods
try:
@@ -36,6 +55,11 @@ def main() -> int:
if method == "reset":
method_reset()
elif method == "await-reset":
method_await_reset(
pi.pargs.timeout,
)
else:
raise Exception(f"Unknown method: {method}")