From e8c2482bea7039cd1f98c815006764193eab939f Mon Sep 17 00:00:00 2001 From: Sven Sager Date: Fri, 18 Apr 2025 17:33:25 +0200 Subject: [PATCH] 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. --- .../cli_commands/cli_picontrol.py | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/revpi_middleware/cli_commands/cli_picontrol.py b/src/revpi_middleware/cli_commands/cli_picontrol.py index 95d5146..8fdaf67 100644 --- a/src/revpi_middleware/cli_commands/cli_picontrol.py +++ b/src/revpi_middleware/cli_commands/cli_picontrol.py @@ -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}")