diff --git a/holman/holman.py b/holman/holman.py index afb1643..9c5ff84 100644 --- a/holman/holman.py +++ b/holman/holman.py @@ -224,6 +224,8 @@ def stop(self): def characteristic_write_value_succeeded(self, characteristic): self._refresh_state() + if self.listener and characteristic == self._manual_characteristic: + self.listener.timer_written() def characteristic_write_value_failed(self, characteristic, error): self._refresh_state() diff --git a/holmanctl.py b/holmanctl.py index 55b17a1..25a9b12 100755 --- a/holmanctl.py +++ b/holmanctl.py @@ -29,14 +29,18 @@ def started_disconnecting(self): def disconnect_succeeded(self): self.print("disconnected") + def timer_written(self): + self.print("timer written") + def print(self, string): print("Holman tap timer " + self.tap_timer.mac_address + " " + string) - class TapTimerTestListener(TapTimerPrintListener): - def __init__(self, tap_timer, auto_reconnect=False): + def __init__(self, tap_timer, auto_reconnect=False, auto_start=None, auto_exit=False): super().__init__(tap_timer) self.auto_reconnect = auto_reconnect + self.auto_start = auto_start + self.auto_exit = auto_exit def connect_failed(self, error): super().connect_failed(error) @@ -54,6 +58,21 @@ def disconnect_succeeded(self): tap_timer_manager.stop() sys.exit(0) + def connect_succeeded(self): + super().connect_succeeded() + if self.auto_start is not None: + if self.auto_start == 0: + self.tap_timer.stop() + else: + self.tap_timer.start(self.auto_start) + self.auto_start = None + + def timer_written(self): + super().timer_written() + if self.auto_exit: + self.print('exiting') + tap_timer_manager.stop() + class TapTimerManagerPrintListener(holman.TapTimerManagerListener): def tap_timer_discovered(self, tap_timer): @@ -90,11 +109,36 @@ def main(): metavar='address', type=str, help="Disconnect a Holman tap timer with a given MAC address") + + arg_run_group = arg_parser.add_mutually_exclusive_group(required=False) + arg_run_group.add_argument( + '--run', + default=None, + metavar='MINUTES', + type=int, + help="Run the timer for the specified number of minutes") + arg_run_group.add_argument( + '--stop', + action='store_const', + const=True, + default=False, + help="Stop the timer") args = arg_parser.parse_args() global tap_timer_manager tap_timer_manager = holman.TapTimerManager(adapter_name=args.adapter) + if args.run is not None and not (args.connect or args.auto): + arg_parser.error('--run can only be used with --auto or --connect.') + return + + if args.stop and not (args.connect or args.auto): + arg_parser.error('--stop can only be used with --auto or --connect.') + return + + run_time = 0 if args.stop else args.run + auto_exit = run_time is not None + if args.discover: tap_timer_manager.listener = TapTimerManagerPrintListener() tap_timer_manager.start_discovery() @@ -104,18 +148,19 @@ def main(): return elif args.connect: tap_timer = holman.TapTimer(mac_address=args.connect, manager=tap_timer_manager) - tap_timer.listener = TapTimerTestListener(tap_timer=tap_timer) + tap_timer.listener = TapTimerTestListener(tap_timer=tap_timer, auto_start=run_time, auto_exit=auto_exit) tap_timer.connect() elif args.auto: tap_timer = holman.TapTimer(mac_address=args.auto, manager=tap_timer_manager) - tap_timer.listener = TapTimerTestListener(tap_timer=tap_timer, auto_reconnect=True) + tap_timer.listener = TapTimerTestListener(tap_timer=tap_timer, auto_reconnect=True, auto_start=run_time, auto_exit=auto_exit) tap_timer.connect() elif args.disconnect: tap_timer = holman.TapTimer(mac_address=args.disconnect, manager=tap_timer_manager) tap_timer.disconnect() return - print("Terminate with Ctrl+C") + if not auto_exit: + print("Terminate with Ctrl+C") try: tap_timer_manager.run() except KeyboardInterrupt: