Skip to content
Snippets Groups Projects
Commit ce866d4a authored by Robin Mueller's avatar Robin Mueller
Browse files

several bugfixes for ethernet comm

parent 4bc902a2
No related branches found
No related tags found
No related merge requests found
......@@ -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" />
......
......@@ -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)
......
......@@ -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()
......
......@@ -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
......
......@@ -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
......
......@@ -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)
......
......@@ -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():
......
......@@ -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):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment