From ce866d4a5cdc0464949ab9adfc68dbd4c2074a33 Mon Sep 17 00:00:00 2001
From: "Robin.Mueller" <robin.mueller.m@gmail.com>
Date: Tue, 17 Mar 2020 01:48:01 +0100
Subject: [PATCH] several bugfixes for ethernet comm

---
 .../OBSW_UdpClient_Service_17_Test.xml        |  4 ++--
 OBSW_TmTcClient.py                            |  3 +--
 comIF/OBSW_Ethernet_ComIF.py                  | 21 +++++++++++--------
 comIF/OBSW_Serial_ComIF.py                    |  2 +-
 config/OBSW_Config.py                         | 18 +++++++++++++---
 sendreceive/OBSW_CommandSenderReceiver.py     |  2 +-
 sendreceive/OBSW_SequentialSenderReceiver.py  |  5 +++--
 sendreceive/OBSW_TmListener.py                |  1 +
 8 files changed, 36 insertions(+), 20 deletions(-)

diff --git a/.idea/runConfigurations/OBSW_UdpClient_Service_17_Test.xml b/.idea/runConfigurations/OBSW_UdpClient_Service_17_Test.xml
index dcfcd0d..f986218 100644
--- a/.idea/runConfigurations/OBSW_UdpClient_Service_17_Test.xml
+++ b/.idea/runConfigurations/OBSW_UdpClient_Service_17_Test.xml
@@ -12,8 +12,8 @@
     <option name="ADD_CONTENT_ROOTS" value="true" />
     <option name="ADD_SOURCE_ROOTS" value="true" />
     <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
-    <option name="SCRIPT_NAME" value="C:\Users\Robin\NoSyncDokumente\sourceobsw\tmtc\OBSW_TmTcClient.py" />
-    <option name="PARAMETERS" value="-m 3 -s 17 -p" />
+    <option name="SCRIPT_NAME" value="$PROJECT_DIR$/OBSW_TmTcClient.py" />
+    <option name="PARAMETERS" value="-m 3 -s 17 -p -t 5" />
     <option name="SHOW_COMMAND_LINE" value="false" />
     <option name="EMULATE_TERMINAL" value="true" />
     <option name="MODULE_MODE" value="false" />
diff --git a/OBSW_TmTcClient.py b/OBSW_TmTcClient.py
index f15a84c..8ed30bd 100644
--- a/OBSW_TmTcClient.py
+++ b/OBSW_TmTcClient.py
@@ -91,7 +91,6 @@ def main():
         exit()
     else:
         communicationInterface = setCommunicationInterface(tmtcPrinter)
-        print(communicationInterface)
         atexit.register(keyboardInterruptHandler, comInterface=communicationInterface)
         tmListener = TmListener(
             comInterface=communicationInterface, tmTimeout=g.tmTimeout, tcTimeoutFactor=g.tcSendTimeoutFactor)
@@ -126,10 +125,10 @@ def main():
         """
         Set up test suite and run it with runner. Verbosity specifies detail level
         """
-        # noinspection PyTypeChecker
         g.tmListener = tmListener
         g.comInterface = communicationInterface
         g.tmtcPrinter = tmtcPrinter
+        # noinspection PyTypeChecker
         suite = unittest.TestLoader().loadTestsFromModule(OBSW_PusServiceTest)
         unittest.TextTestRunner(verbosity=2).run(suite)
 
diff --git a/comIF/OBSW_Ethernet_ComIF.py b/comIF/OBSW_Ethernet_ComIF.py
index 5e3aded..762de68 100644
--- a/comIF/OBSW_Ethernet_ComIF.py
+++ b/comIF/OBSW_Ethernet_ComIF.py
@@ -44,18 +44,21 @@ class EthernetComIF(CommunicationInterface):
 
     def pollInterface(self, pollTimeout: float = 0) -> Tuple[bool, pusTmListT]:
         ready = self.dataAvailable(pollTimeout)
-        if ready is False:
-            return False, []
-        elif ready:
-            packetList = self.receiveTelemetry()
+        if ready:
+            data = self.sockReceive.recvfrom(1024)[0]
+            packet = PUSTelemetryFactory(data)
+            self.tmtcPrinter.printTelemetry(packet)
+            packetList = [packet]
             return True, packetList
+        else:
+            return False, []
 
     def receiveTelemetry(self, parameters: any = 0) -> list:
-        data = self.sockReceive.recvfrom(1024)[0]
-        packet = PUSTelemetryFactory(data)
-        self.tmtcPrinter.printTelemetry(packet)
-        packetList = [packet]
-        return packetList
+        (packetReceived, packetList) = self.pollInterface()
+        if packetReceived:
+            return packetList
+        else:
+            return []
 
     def receiveTelemetryAndStoreInfo(self, tmInfoQueue: pusTmInfoQueueT) -> Union[None, pusTmInfoQueueT]:
         packets = self.receiveTelemetry()
diff --git a/comIF/OBSW_Serial_ComIF.py b/comIF/OBSW_Serial_ComIF.py
index ce14c6c..d7a5ed7 100644
--- a/comIF/OBSW_Serial_ComIF.py
+++ b/comIF/OBSW_Serial_ComIF.py
@@ -42,7 +42,7 @@ class SerialComIF(CommunicationInterface):
         self.tmtcPrinter.printTelecommand(tcPacket, tcPacketInfo)
         self.serial.write(tcPacket)
 
-    def receiveTelemetry(self, parameters=0) -> list:
+    def receiveTelemetry(self, parameters: any = 0) -> list:
         (packetReceived, packetList) = self.pollInterface()
         if packetReceived:
             return packetList
diff --git a/config/OBSW_Config.py b/config/OBSW_Config.py
index 4bb665d..6fcab66 100644
--- a/config/OBSW_Config.py
+++ b/config/OBSW_Config.py
@@ -26,6 +26,11 @@ class ModeList(enum.Enum):
     UnitTest = 5
 
 
+class ComIF(enum.Enum):
+    Ethernet = 0
+    Serial = 1
+
+
 """
 Mission/Device specific information.
 """
@@ -97,7 +102,7 @@ def setGlobals(args):
     sendAddressToSet = (args.boardIP, portSend)
     if 0 <= args.mode <= 5:
         if args.mode == 0:
-           modeId = ModeList.GUIMode
+            modeId = ModeList.GUIMode
         elif args.mode == 1:
             modeId = ModeList.ListenerMode
         elif args.mode == 2:
@@ -111,6 +116,15 @@ def setGlobals(args):
     else:
         print("Invalid mode argument, setting default mode (1)")
         modeId = ModeList[1]
+
+    if args.comIF == ComIF.Ethernet:
+        comIF = ComIF.Ethernet
+    elif args.comIF == ComIF.Serial:
+        comIF = ComIF.Serial
+    else:
+        print("Invalid Communication Interface, setting serial (1)")
+        comIF = ComIF.Serial
+
     service = str(args.service)
     if service.isdigit():
         service = int(args.service)
@@ -119,8 +133,6 @@ def setGlobals(args):
     recAddress = recAddressToSet
     sendAddress = sendAddressToSet
     comIF = args.comIF
-    # sockReceive = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
-    # sockSend = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     modeId = modeId
     comPort = args.COM
     printHkData = args.hk
diff --git a/sendreceive/OBSW_CommandSenderReceiver.py b/sendreceive/OBSW_CommandSenderReceiver.py
index 8695b8b..c56d115 100644
--- a/sendreceive/OBSW_CommandSenderReceiver.py
+++ b/sendreceive/OBSW_CommandSenderReceiver.py
@@ -117,7 +117,7 @@ class CommandSenderReceiver:
             self._comInterface.sendTelecommand(self.lastTc, self.lastTcInfo)
             self.timeoutCounter = self.timeoutCounter + 1
             self.start_time = time.time()
-        time.sleep(1)
+        time.sleep(0.5)
 
 
 
diff --git a/sendreceive/OBSW_SequentialSenderReceiver.py b/sendreceive/OBSW_SequentialSenderReceiver.py
index 9d09c1e..a784288 100644
--- a/sendreceive/OBSW_SequentialSenderReceiver.py
+++ b/sendreceive/OBSW_SequentialSenderReceiver.py
@@ -41,6 +41,7 @@ class SequentialCommandSenderReceiver(CommandSenderReceiver):
         self.start_time = 0
         self.elapsed_time = 0
         self.abortFlag = False
+        self.modeOpFinished = False
 
     def sendQueueTcAndReceiveTmSequentially(self):
         self._tmListener.modeId = g.ModeList.ServiceTestMode
@@ -61,12 +62,12 @@ class SequentialCommandSenderReceiver(CommandSenderReceiver):
                 if self.tcQueue.__len__() == 0:
                     self.start_time = time.time()
             self.checkForTimeout()
+            if not self.modeOpFinished:
+                self._tmListener.modeOpFinished.set()
         print("Sequential SenderReceiver: All replies received!")
-        self._tmListener.modeOpFinished.set()
         if self.doPrintToFile:
             print("Sequential SenderReceiver: Exporting output to log file.")
             self._tmtcPrinter.printToFile()
-        print("Listening for packages ...")
 
     def performNextTcSend(self):
         if self._tmListener.replyEvent.is_set():
diff --git a/sendreceive/OBSW_TmListener.py b/sendreceive/OBSW_TmListener.py
index 6d8321c..bd8c4f8 100644
--- a/sendreceive/OBSW_TmListener.py
+++ b/sendreceive/OBSW_TmListener.py
@@ -68,6 +68,7 @@ class TmListener:
             while not self.modeOpFinished.is_set():
                 self.performModeOperation()
             self.modeOpFinished.clear()
+            print("Transitioning to listener mode")
             self.modeId = g.ModeList.ListenerMode
 
     def performModeOperation(self):
-- 
GitLab