From 0d07ce9d5b26552a08c99cfeb35bf78e3fcd9653 Mon Sep 17 00:00:00 2001 From: cinnaboot Date: Mon, 30 Mar 2020 14:54:04 -0400 Subject: [PATCH] restart powermate after exceptions from sleep --- .gitignore | 1 + powermate_pactl.py | 36 +++++++++++++++++++++++++++++++----- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index c18dd8d..f60d659 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ __pycache__/ +tags diff --git a/powermate_pactl.py b/powermate_pactl.py index 2d56356..a7017a4 100755 --- a/powermate_pactl.py +++ b/powermate_pactl.py @@ -2,11 +2,13 @@ import glob +import time from lib.powermate import powermate from lib.python_pulse_control.pulsectl import pulsectl +RETRY_ATTEMPTS = 10 INCREASE_AMOUNT = 0.01 @@ -17,8 +19,6 @@ class PowerMate(powermate.PowerMateBase): super().__init__(path) def rotate(self, rotation): - #print(rotation); - if (rotation > 0): self.change_vol(INCREASE_AMOUNT) else: @@ -26,10 +26,36 @@ class PowerMate(powermate.PowerMateBase): def change_vol(self, vol): for sink in self.pulse.sink_list(): - #print(sink) self.pulse.volume_change_all_chans(sink, vol) +def start(): + for i in range(1, RETRY_ATTEMPTS + 1): + path = '' + powermates = glob.glob('/dev/input/by-id/*PowerMate*') + + if len(powermates) > 0 : + path = powermates[0] + print(f'found powermate at {path}') + + if path: + pm = PowerMate(path) + + try: + pm.run() + except (KeyboardInterrupt, SystemExit): + return + except Exception as e: + print(f'caught exception from AsyncFileEventDispatcher.run(): {e}') + print('attempting restart') + time.sleep(5) # NOTE: give time to enumerate USB after suspend + start() + return + elif i == 1: + print(f'waiting up to {RETRY_ATTEMPTS}s for powermate') + elif i == RETRY_ATTEMPTS: + print(f'giving up looking for powermate after {RETRY_ATTEMPTS}s') + + time.sleep(1) if __name__ == '__main__': - pm = PowerMate(glob.glob('/dev/input/by-id/*PowerMate*')[0]) - pm.run() + start()