From 7fcfd166f0668c223c54227a77e910d4b64f61e1 Mon Sep 17 00:00:00 2001 From: su530201 <olivier.kaufmann@umons.ac.be> Date: Tue, 2 May 2023 17:39:52 +0200 Subject: [PATCH] Refactors mux barrier to only activate muxes involved --- .../abstract_hardware_components.py | 5 +---- hardware_system.py | 20 ++++++++++++------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/hardware_components/abstract_hardware_components.py b/hardware_components/abstract_hardware_components.py index 63c39ef0..da34d4d8 100644 --- a/hardware_components/abstract_hardware_components.py +++ b/hardware_components/abstract_hardware_components.py @@ -62,10 +62,6 @@ class MuxAbstract(ABC): def _get_addresses(self): pass - @abstractmethod - def reset(self): - pass - @property def barrier(self): return self._barrier @@ -78,6 +74,7 @@ class MuxAbstract(ABC): @abstractmethod def reset(self): pass + def switch(self, elec_dict=None, state='on'): # TODO: generalize for other roles """Switch a given list of electrodes with different roles. Electrodes with a value of 0 will be ignored. diff --git a/hardware_system.py b/hardware_system.py index 7852284d..fe1e0170 100644 --- a/hardware_system.py +++ b/hardware_system.py @@ -281,14 +281,20 @@ class OhmPiHardware: if len(electrodes) == len(roles): # TODO: Check that we don't set incompatible roles to the same electrode elec_dict = {i: [] for i in roles} - for i in range(len(electrodes)): - elec_dict[roles[i]].append(electrodes[i]) mux_workers = [] - for _, mux in self.mux_boards.items(): - # start a new thread to perform some work - mux_workers.append(Thread(target=mux.switch, kwargs={'elec_dict': elec_dict})) - for mux_worker in mux_workers: - mux_worker.start() + for idx, elec in enumerate(electrodes): + elec_dict[roles[idx]].append(elec) + mux = self._cabling[(elec, roles[idx])][0] + if mux not in mux_workers: + mux_workers.append(mux) + mux_workers = list(set(mux_workers)) + b = Barrier(len(mux_workers)+1) + self.mux_barrier = b + for idx, mux in enumerate(mux_workers): + # Create a new thread to perform some work + self.mux_boards[mux].barrier = b + mux_workers[idx] = Thread(target=self.mux_boards[mux].switch, kwargs={'elec_dict': elec_dict}) + mux_workers[idx].start() self.mux_barrier.wait() for mux_worker in mux_workers: mux_worker.join() -- GitLab