From dca6c7266d313dee9d729d9cd0e6e618793c1c47 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?D=C3=B3nal=20Murray?= <donal.murray@cern.ch>
Date: Mon, 4 May 2020 10:48:52 +0100
Subject: [PATCH] Get hevtestdata working with hevserver changes

---
 raspberry-dataserver/hevserver.py   |  6 +---
 raspberry-dataserver/hevtestdata.py | 52 +++++++++++------------------
 2 files changed, 21 insertions(+), 37 deletions(-)

diff --git a/raspberry-dataserver/hevserver.py b/raspberry-dataserver/hevserver.py
index 2b114550..7c075b3f 100755
--- a/raspberry-dataserver/hevserver.py
+++ b/raspberry-dataserver/hevserver.py
@@ -152,7 +152,6 @@ class HEVServer(object):
                     values: List[float] = self._values
                     alarms = self._alarms if len(self._alarms) > 0 else None
 
-                print(values.getType())
                 data_type = values.getType().name
                 broadcast_packet = {"type": data_type}
 
@@ -218,6 +217,7 @@ class HEVServer(object):
 
 if __name__ == "__main__":
     tasks = [] # asyncio tasks
+    loop = asyncio.get_event_loop()
     try:
         #parser to allow us to pass arguments to hevserver
         parser = argparse.ArgumentParser(description='Arguments to run hevserver')
@@ -254,7 +254,6 @@ if __name__ == "__main__":
             # initialise low level interface
             try:
                 # setup serial device and init server
-                loop = asyncio.get_event_loop()
                 lli = CommsLLI(loop)
                 comms = lli.main(port_device, 115200)
                 tasks.append(comms)
@@ -277,6 +276,3 @@ if __name__ == "__main__":
         logging.info("Server stopped")
     except StructError:
         logging.error("Failed to parse packet")
-    finally:
-        loop.close()
-
diff --git a/raspberry-dataserver/hevtestdata.py b/raspberry-dataserver/hevtestdata.py
index 770bbe93..504a855e 100644
--- a/raspberry-dataserver/hevtestdata.py
+++ b/raspberry-dataserver/hevtestdata.py
@@ -57,7 +57,7 @@ class HEVTestData:
         self.current_timestamp = 2**32 - 5_000
         self._send_message(self.current_timestamp)
         interval = 50
-        for i in range(0, 10_000, interval):
+        for _ in range(0, 10_000, interval):
             self.current_timestamp += interval
             self._send_message(self.current_timestamp)
             time.sleep(interval / 1_000)
@@ -97,24 +97,24 @@ class HEVTestData:
     def _send_message(self, timestamp):
         # directly setting private member variables in this edge case
         payload = CommsCommon.DataFormat()
-        payload._version = payload._RPI_VERSION
-        payload._timestamp = timestamp % 2**32
-        payload._fsm_state = "IDLE"
-        payload._pressure_air_supply = abs(math.sin((timestamp/1000) * (math.pi)))* 0
-        payload._pressure_air_regulated = abs(math.sin((timestamp/1000) * (math.pi))) * 0
-        payload._pressure_o2_supply = abs(math.sin((0.5 + timestamp/1000) * (math.pi))) * 657
-        payload._pressure_o2_regulated = abs(math.sin((1.0 + timestamp/1000) * (math.pi))) * 653
-        payload._pressure_buffer = abs(math.sin((1.5 + timestamp/1000) * (math.pi))) * 496
-        payload._pressure_inhale = abs(math.sin((2.0 + timestamp/1000) * (math.pi))) * 481
-        payload._pressure_patient = abs(math.sin((2.5 + timestamp/1000) * (math.pi))) * 772
-        payload._temperature_buffer = math.sin((3.0 + timestamp/1000) * (math.pi)) * 1000
-        payload._pressure_diff_patient = abs(math.sin((3.5 + timestamp/1000) * (math.pi))) * 61
-        payload._readback_valve_air_in = abs(math.sin((timestamp/1000) * (math.pi))) * 0
-        payload._readback_valve_o2_in = abs(math.sin((timestamp/1000) * (math.pi))) * 0
-        payload._readback_valve_inhale = abs(math.sin((timestamp/1000) * (math.pi))) * 0
-        payload._readback_valve_exhale = abs(math.sin((timestamp/1000) * (math.pi))) * 0
-        payload._readback_valve_purge = abs(math.sin((timestamp/1000) * (math.pi))) * 0
-        payload._readback_mode = abs(math.sin((timestamp/1000) * (math.pi))) * 0
+        payload.version = payload._RPI_VERSION
+        payload.timestamp = timestamp % 2**32
+        payload.fsm_state = CommsCommon.BL_STATES.IDLE
+        payload.pressure_air_supply = abs(math.sin((timestamp/1000) * (math.pi)))* 0
+        payload.pressure_air_regulated = abs(math.sin((timestamp/1000) * (math.pi))) * 0
+        payload.pressure_o2_supply = abs(math.sin((0.5 + timestamp/1000) * (math.pi))) * 657
+        payload.pressure_o2_regulated = abs(math.sin((1.0 + timestamp/1000) * (math.pi))) * 653
+        payload.pressure_buffer = abs(math.sin((1.5 + timestamp/1000) * (math.pi))) * 496
+        payload.pressure_inhale = abs(math.sin((2.0 + timestamp/1000) * (math.pi))) * 481
+        payload.pressure_patient = abs(math.sin((2.5 + timestamp/1000) * (math.pi))) * 772
+        payload.temperature_buffer = math.sin((3.0 + timestamp/1000) * (math.pi)) * 1000
+        payload.pressure_diff_patient = abs(math.sin((3.5 + timestamp/1000) * (math.pi))) * 61
+        payload.readback_valve_air_in = abs(math.sin((timestamp/1000) * (math.pi))) * 0
+        payload.readback_valve_o2_in = abs(math.sin((timestamp/1000) * (math.pi))) * 0
+        payload.readback_valve_inhale = abs(math.sin((timestamp/1000) * (math.pi))) * 0
+        payload.readback_valve_exhale = abs(math.sin((timestamp/1000) * (math.pi))) * 0
+        payload.readback_valve_purge = abs(math.sin((timestamp/1000) * (math.pi))) * 0
+        payload.readback_mode = abs(math.sin((timestamp/1000) * (math.pi))) * 0
         self.payloadrecv = payload
 
     # callback to dependants to read the received payload
@@ -124,23 +124,11 @@ class HEVTestData:
 
     @payloadrecv.setter
     def payloadrecv(self, payload):
-        self._payloadrecv.append(payload)
-        logging.debug(f"Pushed {payload} to FIFO")
         for callback in self._observers:
-            # peek at the leftmost item, don't pop until receipt confirmed
-            callback(self._payloadrecv[0])
+            callback(payload)
 
     def writePayload(self, payload):
         logging.info(f"CMD received: {payload}")
 
     def bind_to(self, callback):
         self._observers.append(callback)
-
-    def pop_payloadrecv(self):
-        # from callback. confirmed receipt, pop value
-        poppedval = self._payloadrecv.popleft()
-        logging.debug(f"Popped {poppedval} from FIFO")
-        if len(self._payloadrecv) > 0:
-            # purge full queue if Dependant goes down when it comes back up
-            for callback in self._observers:
-                callback(self._payloadrecv[0])
-- 
GitLab