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 argparse import ArgumentParser
|
||||||
from logging import getLogger
|
from logging import getLogger
|
||||||
|
|
||||||
from .dbus_helper import simple_call
|
from .dbus_helper import await_signal, simple_call
|
||||||
from .. import proginit as pi
|
from .. import proginit as pi
|
||||||
from ..dbus_middleware1 import extend_interface
|
from ..dbus_middleware1 import extend_interface
|
||||||
|
|
||||||
@@ -21,6 +21,17 @@ def add_subparsers(parent_parser: ArgumentParser):
|
|||||||
"reset",
|
"reset",
|
||||||
help="Reset the piControl driver",
|
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():
|
def method_reset():
|
||||||
@@ -29,6 +40,14 @@ def method_reset():
|
|||||||
log.info("ResetDriver called via D-Bus")
|
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:
|
def main() -> int:
|
||||||
method = pi.pargs.methods
|
method = pi.pargs.methods
|
||||||
try:
|
try:
|
||||||
@@ -36,6 +55,11 @@ def main() -> int:
|
|||||||
if method == "reset":
|
if method == "reset":
|
||||||
method_reset()
|
method_reset()
|
||||||
|
|
||||||
|
elif method == "await-reset":
|
||||||
|
method_await_reset(
|
||||||
|
pi.pargs.timeout,
|
||||||
|
)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
raise Exception(f"Unknown method: {method}")
|
raise Exception(f"Unknown method: {method}")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user