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:
@@ -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}")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user