From eab4e116a5ca37646352f4b1019ab197a40ebd0d Mon Sep 17 00:00:00 2001
From: su530201 <olivier.kaufmann@umons.ac.be>
Date: Sun, 9 Apr 2023 19:39:51 +0200
Subject: [PATCH] Adds dummy_mux and dummy_controller; fixes bugs

---
 config.py                     | 19 ++++++++++++--
 hardware/__init__.py          |  2 +-
 hardware/abstract_hardware.py | 19 +++++++++-----
 hardware/dummy_controller.py  | 11 ++++++++
 hardware/dummy_mux.py         | 10 ++++++++
 hardware/dummy_tx.py          |  2 +-
 hardware/raspberry_pi_3.py    |  2 +-
 logging_setup.py              |  2 +-
 measure.py                    | 48 ++++++++++++++++++++---------------
 test_dummy.py                 | 14 ++++++++++
 10 files changed, 96 insertions(+), 33 deletions(-)
 create mode 100644 hardware/dummy_controller.py
 create mode 100644 hardware/dummy_mux.py
 create mode 100644 test_dummy.py

diff --git a/config.py b/config.py
index ff738cad..8fdbb029 100644
--- a/config.py
+++ b/config.py
@@ -26,7 +26,7 @@ OHMPI_CONFIG = {
     # 'mcp_board_address': 0x20
 }  # TODO: add a dictionary with INA models and associated gain values
 
-HARDWARE_CONFIG = {
+"""HARDWARE_CONFIG = {
     'controller': {'model' : 'raspberry_pi_3'
                    },
     'tx' : {'model' : 'mb_2024_rev_0_0',
@@ -44,8 +44,23 @@ HARDWARE_CONFIG = {
              'coef_p2': 2.50,  # slope for current conversion for ADS.P2, measurement in V/V
              'nb_samples': 20  # Max value 10 # was named integer before...
             }
-}
+}"""
 
+HARDWARE_CONFIG = {
+    'controller': {'model' : 'dummy_controller'
+                   },
+    'tx' : {'model' : 'dummy_tx',
+             'Imax': 4800 / 50 / 2,  # Maximum current
+             'R_shunt': 2  # Shunt resistance in Ohms
+            },
+    'rx' : {'model': 'dummy_rx',
+            },
+    'mux': {'model' : 'dummy_mux',
+             'max_elec': 64,
+             'voltage_max' : 100,
+             'current_max' : 3
+            }
+}
 # SET THE LOGGING LEVELS, MQTT BROKERS AND MQTT OPTIONS ACCORDING TO YOUR NEEDS
 # Execution logging configuration
 EXEC_LOGGING_CONFIG = {
diff --git a/hardware/__init__.py b/hardware/__init__.py
index a9b07120..471af3cc 100644
--- a/hardware/__init__.py
+++ b/hardware/__init__.py
@@ -1 +1 @@
-from OhmPi.hardware.abstract_hardware import TxAbstract, RxAbstract, MuxAbstract, ControllerAbstract
\ No newline at end of file
+from .abstract_hardware import TxAbstract, RxAbstract, MuxAbstract, ControllerAbstract
\ No newline at end of file
diff --git a/hardware/abstract_hardware.py b/hardware/abstract_hardware.py
index 9316f7d7..02d504e7 100644
--- a/hardware/abstract_hardware.py
+++ b/hardware/abstract_hardware.py
@@ -1,20 +1,25 @@
 from abc import ABC, abstractmethod
-from OhmPi.logging_setup import create_default_logger
+from OhmPi.logging_setup import create_stdout_logger
 
 class ControllerAbstract(ABC):
     def __init__(self, **kwargs):
         self.bus = None
 
 class MuxAbstract(ABC):
-    pass
+    def __init__(self, **kwargs):
+        pass
 
 class TxAbstract(ABC):
     def __init__(self, **kwargs):
         self.board_name = kwargs.pop('board_name', 'unknown TX hardware')
         polarity = kwargs.pop('polarity', 1)
         inj_time = kwargs.pop('inj_time', 1.)
-        self.exec_logger = kwargs.pop('exec_logger', create_default_logger('exec_tx'))
-        self.soh_logger = kwargs.pop('soh_logger', create_default_logger('soh_tx'))
+        self.exec_logger = kwargs.pop('exec_logger', None)
+        if self.exec_logger is None:
+            self.exec_logger = create_stdout_logger('exec_tx')
+        self.soh_logger = kwargs.pop('soh_logger', None)
+        if self.soh_logger is None:
+            self.soh_logger = create_stdout_logger('soh_tx')
         self._polarity = None
         self._inj_time = None
         self._dps_state = 'off'
@@ -118,8 +123,10 @@ class TxAbstract(ABC):
 
 class RxAbstract(ABC):
     def __init__(self, **kwargs):
-        self.exec_logger = kwargs.pop('exec_logger', create_default_logger('exec'))
-        self.soh_logger = kwargs.pop('soh_logger', create_default_logger('soh'))
+        self.exec_logger = kwargs.pop('exec_logger', None)
+        if self.exec_logger is None:
+            self.exec_logger = create_stdout_logger('exec_tx')
+        self.soh_logger = kwargs.pop('soh_logger', None)
         self.board_name = kwargs.pop('board_name', 'unknown RX hardware')
         self.exec_logger.debug(f'{self.board_name} RX initialization')
         self._adc_gain = 1.
diff --git a/hardware/dummy_controller.py b/hardware/dummy_controller.py
new file mode 100644
index 00000000..7de5aefd
--- /dev/null
+++ b/hardware/dummy_controller.py
@@ -0,0 +1,11 @@
+from OhmPi.config import HARDWARE_CONFIG
+import os
+from OhmPi.hardware import ControllerAbstract
+CONTROLLER_CONFIG = HARDWARE_CONFIG['controller']
+
+
+class Controller(ControllerAbstract):
+    def __init__(self, **kwargs):
+        kwargs.update({'board_name': os.path.basename(__file__).rstrip('.py')})
+        super().__init__(**kwargs)
+        self.bus = None
\ No newline at end of file
diff --git a/hardware/dummy_mux.py b/hardware/dummy_mux.py
new file mode 100644
index 00000000..34e3f04f
--- /dev/null
+++ b/hardware/dummy_mux.py
@@ -0,0 +1,10 @@
+from OhmPi.config import HARDWARE_CONFIG
+import os
+from OhmPi.hardware import MuxAbstract
+MUX_CONFIG = HARDWARE_CONFIG['mux']
+
+class Mux(MuxAbstract):
+    def __init__(self, **kwargs):
+        kwargs.update({'board_name': os.path.basename(__file__).rstrip('.py')})
+        super().__init__(**kwargs)
+        self.max_elec = MUX_CONFIG['max_elec']
\ No newline at end of file
diff --git a/hardware/dummy_tx.py b/hardware/dummy_tx.py
index c2f14d06..91a2d141 100644
--- a/hardware/dummy_tx.py
+++ b/hardware/dummy_tx.py
@@ -77,7 +77,7 @@ class Tx(TxAbstract):
             self.exec_logger.warning(f'Voltage should be given as a positive number. '
                                      f'Set polarity to -1 to reverse voltage...')
             value = np.abs(value)
-
+        self._voltage=value
 
     @property
     def tx_bat(self):
diff --git a/hardware/raspberry_pi_3.py b/hardware/raspberry_pi_3.py
index 0f1d7370..ac8fe568 100644
--- a/hardware/raspberry_pi_3.py
+++ b/hardware/raspberry_pi_3.py
@@ -1,4 +1,4 @@
-from hardware import ControllerAbstract
+from OhmPi.hardware import ControllerAbstract
 import board  # noqa
 import busio  # noqa
 
diff --git a/logging_setup.py b/logging_setup.py
index dc93066f..49da1174 100644
--- a/logging_setup.py
+++ b/logging_setup.py
@@ -8,7 +8,7 @@ from OhmPi.compressed_sized_timed_rotating_handler import CompressedSizedTimedRo
 import sys
 from termcolor import colored
 
-def create_default_logger(name):
+def create_stdout_logger(name):
     logger = logging.getLogger(f'{name}_logger')
     log_format = f'%(asctime)-15s | {name} | %(levelname)s: %(message)s'
     formatter = logging.Formatter(log_format)
diff --git a/measure.py b/measure.py
index 50c218f8..7e3c766a 100644
--- a/measure.py
+++ b/measure.py
@@ -1,11 +1,11 @@
 import importlib
 import numpy as np
-from OhmPi.logging_setup import create_default_logger
-from OhmPi.config import OHMPI_CONFIG
-controller_module = importlib.import_module(f'OhmPi.{OHMPI_CONFIG["hardware"]["controller"]["model"]}')
-tx_module = importlib.import_module(f'OhmPi.{OHMPI_CONFIG["hardware"]["tx"]["model"]}')
-rx_module = importlib.import_module(f'OhmPi.{OHMPI_CONFIG["hardware"]["rx"]["model"]}')
-mux_module = importlib.import_module(f'OhmPi.{OHMPI_CONFIG["hardware"]["mux"]["model"]}')
+from OhmPi.logging_setup import create_stdout_logger
+from OhmPi.config import HARDWARE_CONFIG
+controller_module = importlib.import_module(f'OhmPi.hardware.{HARDWARE_CONFIG["controller"]["model"]}')
+tx_module = importlib.import_module(f'OhmPi.hardware.{HARDWARE_CONFIG["tx"]["model"]}')
+rx_module = importlib.import_module(f'OhmPi.hardware.{HARDWARE_CONFIG["rx"]["model"]}')
+mux_module = importlib.import_module(f'OhmPi.hardware.{HARDWARE_CONFIG["mux"]["model"]}')
 TX_CONFIG = tx_module.TX_CONFIG
 RX_CONFIG = rx_module.RX_CONFIG
 MUX_CONFIG = mux_module.MUX_CONFIG
@@ -16,22 +16,28 @@ voltage_min = RX_CONFIG['voltage_min']
 
 class OhmPiHardware:
     def __init__(self, **kwargs):
-        self.exec_logger = kwargs.pop('exec_logger', create_default_logger('exec'))
-        self.data_logger = kwargs.pop('exec_logger', create_default_logger('data'))
-        self.soh_logger = kwargs.pop('soh_logger', create_default_logger('soh'))
+        self.exec_logger = kwargs.pop('exec_logger', None)
+        if self.exec_logger is None:
+            self.exec_logger = create_stdout_logger('exec')
+        self.data_logger = kwargs.pop('exec_logger', None)
+        if self.data_logger is None:
+            self.data_logger = create_stdout_logger('data')
+        self.soh_logger = kwargs.pop('soh_logger', None)
+        if self.soh_logger is None:
+            self.soh_logger = create_stdout_logger('soh')
         self.controller = kwargs.pop('controller',
-                                     controller_module.Controller({'exec_logger' : self.exec_logger,
-                                                                   'data_logger': self.data_logger,
-                                                                   'soh_logger': self.soh_logger}))
-        self.rx = kwargs.pop('tx', tx_module.Rx({'exec_logger' : self.exec_logger,
-                                                 'data_logger': self.data_logger,
-                                                 'soh_logger': self.soh_logger}))
-        self.tx = kwargs.pop('rx', tx_module.Tx({'exec_logger' : self.exec_logger,
-                                                 'data_logger': self.data_logger,
-                                                 'soh_logger': self.soh_logger}))
-        self.mux = kwargs.pop('mux', mux_module.Mux({'exec_logger' : self.exec_logger,
-                                                     'data_logger': self.data_logger,
-                                                     'soh_logger': self.soh_logger}))
+                                     controller_module.Controller(exec_logger=self.exec_logger,
+                                                                   data_logger=self.data_logger,
+                                                                   soh_logger= self.soh_logger))
+        self.rx = kwargs.pop('rx', rx_module.Rx(exec_logger=self.exec_logger,
+                                                 data_logger=self.data_logger,
+                                                 soh_logger=self.soh_logger))
+        self.tx = kwargs.pop('tx', tx_module.Tx(exec_logger=self.exec_logger,
+                                                 data_logger=self.data_logger,
+                                                 soh_logger=self.soh_logger))
+        self.mux = kwargs.pop('mux', mux_module.Mux(exec_logger=self.exec_logger,
+                                                    data_logger=self.data_logger,
+                                                    soh_logger=self.soh_logger))
     def _vab_pulse(self, vab, length, polarity=None):
         """ Gets VMN and IAB from a single voltage pulse
         """
diff --git a/test_dummy.py b/test_dummy.py
new file mode 100644
index 00000000..98b8e8d8
--- /dev/null
+++ b/test_dummy.py
@@ -0,0 +1,14 @@
+import sys
+sys.path.extend(['/home/su530201/PycharmProjects/ohmpi_reversaal/OhmPi'])
+from OhmPi.hardware.dummy_tx import Tx
+from OhmPi.hardware.dummy_rx import Rx
+from OhmPi.logging_setup import create_stdout_logger
+
+exec_logger = create_stdout_logger(name='exec')
+soh_logger = create_stdout_logger(name='soh')
+
+print('\nCreating TX...')
+tx = Tx(exec_logger= exec_logger, soh_logger= soh_logger)
+print('\nCreating RX...')
+rx = Rx(exec_logger= exec_logger, soh_logger= soh_logger)
+
-- 
GitLab