From db2c26db2aeb5e109c3c5e114a6fd578bfa9fb3e Mon Sep 17 00:00:00 2001
From: "Robin.Mueller" <robin.mueller.m@gmail.com>
Date: Thu, 2 Jan 2020 00:05:37 +0100
Subject: [PATCH] tmtc adapted for serial send and receive

---
 OBSW_UdpClient.py                             |  6 ++--
 comIF/OBSW_ComInterface.py                    |  2 +-
 comIF/OBSW_Ethernet_ComIF.py                  |  3 +-
 comIF/OBSW_Serial_ComIF.py                    | 28 +++++++------------
 sendreceive/OBSW_CommandSenderReceiver.py     |  4 +--
 sendreceive/OBSW_SequentialSenderReceiver.py  |  5 ++--
 .../OBSW_SingleCommandSenderReceiver.py       |  1 +
 7 files changed, 20 insertions(+), 29 deletions(-)

diff --git a/OBSW_UdpClient.py b/OBSW_UdpClient.py
index e0e8592..67fe5a6 100644
--- a/OBSW_UdpClient.py
+++ b/OBSW_UdpClient.py
@@ -96,9 +96,9 @@ def main():
         communicationInterface = EthernetComIF(tmtcPrinter, g.tmTimeout, g.tcSendTimeoutFactor,
                                                g.sockSend, g.sockReceive, g.sendAddress)
     else:
-        comPort = 'COM8'
-        baudRate = 9600
-        communicationInterface = SerialComIF(tmtcPrinter, comPort, baudRate, 0.2)
+        comPort = 'COM9'
+        baudRate = 115200
+        communicationInterface = SerialComIF(tmtcPrinter, comPort, baudRate, 0.007)
     connectToBoard()
 
     if g.modeId == "ListenerMode":
diff --git a/comIF/OBSW_ComInterface.py b/comIF/OBSW_ComInterface.py
index a113c44..161e579 100644
--- a/comIF/OBSW_ComInterface.py
+++ b/comIF/OBSW_ComInterface.py
@@ -21,7 +21,7 @@ class CommunicationInterface:
 
     # Receive telemetry and process it
     @abstractmethod
-    def receiveTelemetry(self, parameters):
+    def receiveTelemetry(self, parameters=0):
         pass
 
     # Poll the interface  for data
diff --git a/comIF/OBSW_Ethernet_ComIF.py b/comIF/OBSW_Ethernet_ComIF.py
index 1534702..a65c241 100644
--- a/comIF/OBSW_Ethernet_ComIF.py
+++ b/comIF/OBSW_Ethernet_ComIF.py
@@ -43,9 +43,10 @@ class EthernetComIF(CommunicationInterface):
     def pollInterface(self, pollTimeout):
         ready = self.dataAvailable(pollTimeout)
         if ready is False:
-            pass
+            return False
         elif ready:
             self.receiveTelemetry()
+            return True
 
     def receiveTelemetry(self, parameters=0):
         data = self.recvSocket.recvfrom(1024)[0]
diff --git a/comIF/OBSW_Serial_ComIF.py b/comIF/OBSW_Serial_ComIF.py
index 949976e..67e5e61 100644
--- a/comIF/OBSW_Serial_ComIF.py
+++ b/comIF/OBSW_Serial_ComIF.py
@@ -12,8 +12,6 @@ class SerialComIF(CommunicationInterface):
         self.comPort = comPort
         self.baudRate = baudRate
         self.tmtcPrinter = tmtcPrinter
-        # timeout in seconds
-        serialTimeout = 0.2
         self.serial = serial.Serial(port=comPort, baudrate=self.baudRate, timeout=serialTimeout)
         # self.serial.open()
 
@@ -21,7 +19,7 @@ class SerialComIF(CommunicationInterface):
         self.tmtcPrinter.printTelecommand(tcPacket, tcPacketInfo)
         self.serial.write(tcPacket)
 
-    def receiveTelemetry(self, data):
+    def receiveTelemetry(self, parameters=0):
         packet = self.pollInterface()
         return packet
 
@@ -29,34 +27,28 @@ class SerialComIF(CommunicationInterface):
         if self.dataAvailable():
             data = self.pollPusPacket()
             packet = PUSTelemetryFactory(data)
+            self.tmtcPrinter.printTelemetry(packet)
             return packet
 
     def dataAvailable(self, timeout=0):
-        if timeout > 0:
+        if self.serial.in_waiting > 0:
+            return True
+        elif timeout > 0:
             start_time = time.time()
             elapsed_time = 0
             while elapsed_time < timeout:
                 if self.serial.in_waiting > 0:
-                    print("data available!")
-                    print(self.serial.in_waiting)
                     return True
                 elapsed_time = time.time() - start_time
             return False
-        elif self.serial.in_waiting > 0:
-            print("data available!")
-            print(self.serial.in_waiting)
-            return True
 
     def pollPusPacket(self):
-        data = bytearray()
-        pusHeader = self.serial.read(6)
-        dataFieldSize = data[5] << 8 | data[6] - 1
-        pusData = self.serial.read(dataFieldSize)
-        data = data + pusHeader
-        data = data + pusData
-        if len(data) < 6 + dataFieldSize:
+        pusData = self.serial.read(1024)
+        dataFieldSize = (pusData[4] << 8 | pusData[5]) + 1
+        readSize = len(pusData)
+        if readSize < 6 + dataFieldSize:
             print("Serial Com IF: Size missmatch when polling PUS packet")
-        return data
+        return pusData
 
     def performListenerMode(self):
         while True:
diff --git a/sendreceive/OBSW_CommandSenderReceiver.py b/sendreceive/OBSW_CommandSenderReceiver.py
index 41afdaa..8352a3b 100644
--- a/sendreceive/OBSW_CommandSenderReceiver.py
+++ b/sendreceive/OBSW_CommandSenderReceiver.py
@@ -88,9 +88,7 @@ class CommandSenderReceiver:
             while tmReady:
                 self.comInterface.receiveTelemetry()
                 tmReady = self.comInterface.dataAvailable(self.tmTimeout / 1.5)
-                if tmReady is None:
-                    return False
-                else:
+                if not tmReady:
                     return True
 
 
diff --git a/sendreceive/OBSW_SequentialSenderReceiver.py b/sendreceive/OBSW_SequentialSenderReceiver.py
index 65025e5..d160c41 100644
--- a/sendreceive/OBSW_SequentialSenderReceiver.py
+++ b/sendreceive/OBSW_SequentialSenderReceiver.py
@@ -94,9 +94,8 @@ class SequentialCommandSenderReceiver(CommandSenderReceiver):
     def handleReplyListening(self):
         if self.firstReplyReceived:
             tmReady = self.comInterface.dataAvailable(2.0)
-            if tmReady is not None:
-                if tmReady[0]:
-                    self.handleTelemetrySequence()
+            if tmReady:
+                self.handleTelemetrySequence()
         else:
             self.handleFirstReplyListening()
 
diff --git a/sendreceive/OBSW_SingleCommandSenderReceiver.py b/sendreceive/OBSW_SingleCommandSenderReceiver.py
index 3dc54d7..4b025b7 100644
--- a/sendreceive/OBSW_SingleCommandSenderReceiver.py
+++ b/sendreceive/OBSW_SingleCommandSenderReceiver.py
@@ -28,6 +28,7 @@ class SingleCommandSenderReceiver(CommandSenderReceiver):
             # wait until reply is received
             time.sleep(3)
         if self.replyReceived:
+            print("Listening for packages ...")
             self.comInterface.performListenerMode()
 
     # runs in separate thread. sends TC again if no TM is received after timeout
-- 
GitLab