diff --git a/pulses/pulses.py b/pulses/pulses.py index 23b3d17..12dde69 100644 --- a/pulses/pulses.py +++ b/pulses/pulses.py @@ -2,7 +2,6 @@ import logging import sys import time import threading -from dataclasses import dataclass from queue import Queue @@ -148,36 +147,12 @@ class ledPulse: self.worker.start() def stop(self): - self.worker.stop() + self.queue.put(([], [], [])) self.worker.join() if self.supported: self.pwm.stop() self.worker = None - def loop(self): - - while True: - item = self.queue.get() - - # Initial loop - self.log.debug('running initial steps') - for value, delay in item[0]: - self.setValue(value) - time.sleep(delay) - - self.log.debug('running main loop') - while True: - for value, delay in item[1]: - self.setValue(value) - time.sleep(delay) - if not self.queue.empty() - break - - self.log.debug('running final steps') - for value, delay in item[2]: - self.setValue(value) - time.sleep(delay) - ### # PLUGINS METHODS diff --git a/pulses/worker.py b/pulses/worker.py index cf8dd40..59b4641 100644 --- a/pulses/worker.py +++ b/pulses/worker.py @@ -1,5 +1,6 @@ import logging import threading +import time class ledWorker(threading.Thread): @@ -18,49 +19,28 @@ class ledWorker(threading.Thread): self.stop_event = threading.Event() def run(self): + while True: item = self.parent.queue.get() + # Empty item, we exit + if item == ([], [], []): + break - # Initial - if self.initialMode: - self.log.debug('running initial step') - vals = self.initialValues() - for value, delay in vals: - self.setValue(value) - time.sleep(delay) - print('end initial step') - self.log.debug('end initial step') + # Initial loop + self.log.debug('running initial steps') + for value, delay in item[0]: + self.parent.setValue(value) + time.sleep(delay) - vals = self.cycleValues() + self.log.debug('running main loop') while True: - if self.worker.stop_event.is_set(): - # self.worker._started.clear() - self.worker.stop_event.clear() - self.log.debug("bailing out from infinite loop") - return - - if self.worker.changed.is_set(): - self.changed.clear() - self.log.debug("parameters changed, recalculate values...") + for value, delay in item[1]: + self.parent.setValue(value) + time.sleep(delay) + if not self.parent.queue.empty(): break - for step in range(len(vals)): - value, delay = vals[step] - self.setValue(value) - time.sleep(delay) - # Final - if self.finalMode: - print('running final step') - self.log.debug('running final step') - vals = self.finalValues() - for value, delay in vals: - self.setValue(value) - time.sleep(delay) - print('end final step') - self.log.debug('end final step') - self.log.debug(f"running {self.name} main loop...") - self.parent.loop() - - def stop(self): - self.stop_event.set() - self.log.debug(f"stopping {self.name}...") + self.log.debug('running final steps') + for value, delay in item[2]: + self.setValue(value) + time.sleep(delay) diff --git a/test.py b/test.py index cd1b21e..b334eb2 100644 --- a/test.py +++ b/test.py @@ -7,4 +7,5 @@ log = logging.getLogger() log.setLevel('DEBUG') led = pulses.ledPulse(12) -led.set(delay=1/100, valueMode="sin", max=20) +led.start() +# led.set(delay=1/100, valueMode="sin", max=20)