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