diff --git a/comIF/OBSW_Ethernet_ComIF.py b/comIF/OBSW_Ethernet_ComIF.py index b921e960f457049d237d5cf893e3ab856f21c7da..15347022847e77ad95d5b75879aef9bff2a231c0 100644 --- a/comIF/OBSW_Ethernet_ComIF.py +++ b/comIF/OBSW_Ethernet_ComIF.py @@ -29,8 +29,8 @@ class EthernetComIF(CommunicationInterface): def performListenerMode(self): pollTimeout = 10 + print("Listening for packages ...") while True: - print("Listening for packages ...") self.pollInterface(pollTimeout) def dataAvailable(self, timeout): diff --git a/tc/OBSW_TcPacker.py b/tc/OBSW_TcPacker.py index dc99d8dcd036aeb1044c79c45f46c04674baab09..34ca200848735f224eef5bbda59b3ba14ea67a3f 100644 --- a/tc/OBSW_TcPacker.py +++ b/tc/OBSW_TcPacker.py @@ -15,6 +15,7 @@ import os from tc.OBSW_TcPacket import * from tc.OBSW_TcService2 import packService2TestInto +from tc.OBSW_TcService3 import packService3TestInto from tc.OBSW_TcService8 import packService8TestInto from tc.OBSW_TcService200 import packModeData, packService200TestInto @@ -54,32 +55,6 @@ def serviceTestSelect(service, serviceQueue): exit() -def packService3TestInto(tcQueue): - tcQueue.put(("print", "Testing Service 3")) - # adding custom defintion to hk using test pool variables - # adding custom definition to diagnostics using test pool variables - # enable custom hk definition - # enable custom diag definition - # disable custom hk definition - # disable custom diag definition - # report custom hk definition - # report custom diag definition - # generate one custom hk definition - # generate one custom diag definition - # modify custom hk definition interval - # modify custom diag definition interval - # report custom hk definition - # report custom diag definition - # append parameter to custom hk definiton - # append parameter to custom diag definition - # report custom hk definition - # report custom diag definition - # delete custom hk definition - # delete custom diag definition - # do some basic testing on predefined structs too - # e.g. add one variable, change interval, report them.... - - def packService5TestInto(tcQueue): tcQueue.put(("print", "Testing Service 5")) # disable events diff --git a/tc/OBSW_TcService3.py b/tc/OBSW_TcService3.py new file mode 100644 index 0000000000000000000000000000000000000000..d55d7f913a42f38dda524afb6c9ddb507dd7cb4e --- /dev/null +++ b/tc/OBSW_TcService3.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +""" +Program: OBSW_UnitTest.py +Date: 01.11.2019 +Description: PUS Custom Service 8: Device Access, Native low-level commanding + +@author: R. Mueller +""" + + +def packService3TestInto(tcQueue): + tcQueue.put(("print", "Testing Service 3")) + # adding custom defintion to hk using test pool variables + # adding custom definition to diagnostics using test pool variables + # enable custom hk definition + # enable custom diag definition + # disable custom hk definition + # disable custom diag definition + # report custom hk definition + # report custom diag definition + # generate one custom hk definition + # generate one custom diag definition + # modify custom hk definition interval + # modify custom diag definition interval + # report custom hk definition + # report custom diag definition + # append parameter to custom hk definiton + # append parameter to custom diag definition + # report custom hk definition + # report custom diag definition + # delete custom hk definition + # delete custom diag definition + # do some basic testing on predefined structs too + # e.g. add one variable, change interval, report them.... diff --git a/tm/OBSW_PusTm.py b/tm/OBSW_PusTm.py new file mode 100644 index 0000000000000000000000000000000000000000..703fe8ec6a2f8e41155259a1b28932167a0b8763 --- /dev/null +++ b/tm/OBSW_PusTm.py @@ -0,0 +1,34 @@ +from tm.OBSW_PusPacket import OBSWPusPacket + + +class PUSTelemetry(OBSWPusPacket): + def __init__(self, byteArray): + super().__init__(byteArray) + self.byteArrayData = self.data + self.printInfo = "" + + def unpackTelemetry(self): + pass + + def printPacketInfo(self, printInfo): + self.printInfo = printInfo + + def appendPacketInfo(self, printInfo): + self.printInfo = self.printInfo + printInfo + + def printTelemetryHeader(self, array): + super().printPusPacketHeader(array) + + def printTelemetryColumnHeaders(self, array): + super().printPusPacketHeaderColumnHeaders(array) + + def packTmInformation(self): + tmInformation = { + "service": self.getService(), + "subservice": self.getSubservice(), + "ssc": self.getSSC(), + "data": self.byteArrayData, + "crc": self.crc, + "valid": self.PUSHeader.valid + } + return tmInformation diff --git a/tm/OBSW_TmPacket.py b/tm/OBSW_TmPacket.py index 1c82cb088c689667bd4b28b91a8321714be080d5..98333c41dd631372256b80ea72567d9133ec431f 100644 --- a/tm/OBSW_TmPacket.py +++ b/tm/OBSW_TmPacket.py @@ -6,7 +6,8 @@ Description: Deserialize TM byte array into PUS TM Class Author: R.Mueller, S. Gaisser """ -from tm.OBSW_PusPacket import OBSWPusPacket +from tm.OBSW_PusTm import PUSTelemetry +from tm.OBSW_TmService3 import Service3TM import struct # TM Packets use the generic space packet structure provided by OBSWPusPacket to generate individual # telemetry packets for all services @@ -34,32 +35,6 @@ def PUSTelemetryFactory(rawPacket): print("The service " + str(servicetype) + " is not implemented in Telemetry Factory") return PUSTelemetry(rawPacket) - -class PUSTelemetry(OBSWPusPacket): - def __init__(self, byteArray): - super().__init__(byteArray) - self.byteArrayData = self.data - - def unpackTelemetry(self): - pass - - def printTelemetryHeader(self, array): - super().printPusPacketHeader(array) - - def printTelemetryColumnHeaders(self, array): - super().printPusPacketHeaderColumnHeaders(array) - - def packTmInformation(self): - tmInformation = { - "service": self.getService(), - "subservice": self.getSubservice(), - "ssc": self.getSSC(), - "data": self.byteArrayData, - "crc": self.crc, - "valid": self.PUSHeader.valid - } - return tmInformation - class Service1TM(PUSTelemetry): def __init__(self, byteArray): @@ -69,16 +44,20 @@ class Service1TM(PUSTelemetry): # Failure Reports with error code self.tcPacketId = self.byteArrayData[0] << 8 | self.byteArrayData[1] self.tcSSC = ((self.byteArrayData[2] & 0x3F) << 8) | self.byteArrayData[3] + self.printPacketInfo("Success Verification") if self.dataFieldHeader.subtype % 2 == 0: + self.printPacketInfo("Failure Verficiation") self.tcErrorCode = True if self.dataFieldHeader.subtype == 6: self.isStep = True + self.appendPacketInfo(" : Step Failure") self.stepNumber = struct.unpack('>B', self.byteArrayData[4:5])[0] self.ErrCode = struct.unpack('>H', self.byteArrayData[5:7])[0] else: self.ErrCode = struct.unpack('>H', self.byteArrayData[4:6])[0] elif self.dataFieldHeader.subtype == 5: self.isStep = True + self.appendPacketInfo(" : Step Success") self.stepNumber = struct.unpack('>B', self.byteArrayData[4:5])[0] def printTelemetryHeader(self, array): @@ -130,62 +109,18 @@ class Service2TM(PUSTelemetry): return -class Service3TM(PUSTelemetry): - def __init__(self, byteArray): - super().__init__(byteArray) - self.sid = struct.unpack('>I', self.byteArrayData[0:4])[0] - self.hkHeader = [] - self.hkContent = [] - if self.getSubservice() == 25: - self.paramLength = len(self.byteArrayData) - 4 - # TODO: This can be automated by using the MIB parser pool names and pool datatypes - if self.sid == 0x1f00 or 0x2f00: - self.hkHeader = ["Fix Mode", "SV in Fix", "GNSS Week", "Time of Week", "Latitude", "Longitude", - "Mean Sea Altitude", "Position X", "Position Y", "Position Z", - "Velocity X", "Velocity Y", "Velocity Z"] - self.fixMode = self.byteArrayData[4] - self.svInFix = self.byteArrayData[5] - self.gnssWeek = struct.unpack('>H', self.byteArrayData[5:7])[0] - self.timeOfWeek = struct.unpack('>I', self.byteArrayData[7:11])[0] - self.latitude = struct.unpack('>I', self.byteArrayData[11:15])[0] - self.longitude = struct.unpack('>I', self.byteArrayData[15:19])[0] - self.msa = struct.unpack('>I', self.byteArrayData[19:23])[0] - self.positionX = struct.unpack('>d', self.byteArrayData[23:31])[0] - self.positionY = struct.unpack('>d', self.byteArrayData[31:39])[0] - self.positionZ = struct.unpack('>d', self.byteArrayData[39:47])[0] - self.vx = struct.unpack('>d', self.byteArrayData[47:55])[0] - self.vy = struct.unpack('>d', self.byteArrayData[55:63])[0] - self.vz = struct.unpack('>d', self.byteArrayData[63:71])[0] - self.hkContent.append(self.fixMode) - self.hkContent.append(self.svInFix) - self.hkContent.append(self.gnssWeek) - self.hkContent.append(self.timeOfWeek) - self.hkContent.append(self.latitude) - self.hkContent.append(self.longitude) - self.hkContent.append(self.msa) - self.hkContent.append(self.positionX) - self.hkContent.append(self.positionY) - self.hkContent.append(self.positionZ) - self.hkContent.append(self.vx) - self.hkContent.append(self.vy) - self.hkContent.append(self.vz) - - def printTelemetryHeader(self, array): - super().printTelemetryHeader(array) - array.append(hex(self.sid)) - array.append(int(self.paramLength)) - return - - def printTelemetryColumnHeaders(self, array): - super().printTelemetryColumnHeaders(array) - array.append("SID") - array.append("Number of Parameters") - return - - class Service5TM(PUSTelemetry): def __init__(self, byteArray): super().__init__(byteArray) + self.printPacketInfo("Event") + if self.getSubservice() == 1: + self.appendPacketInfo(" Info") + elif self.getSubservice() == 2: + self.appendPacketInfo(" Error Low Severity") + elif self.getSubservice() == 3: + self.appendPacketInfo(" Error Med Severity") + elif self.getSubservice() == 4: + self.appendPacketInfo(" Error High Severity") self.eventId = struct.unpack('>H', self.byteArrayData[0:2])[0] self.objectId = struct.unpack('>I', self.byteArrayData[2:6])[0] self.param1 = struct.unpack('>I', self.byteArrayData[6:10])[0] @@ -246,6 +181,7 @@ class Service9TM(PUSTelemetry): class Service17TM(PUSTelemetry): def __init__(self, byteArray): super().__init__(byteArray) + self.printPacketInfo("Test Reply") def printTelemetryHeader(self, array): super().printTelemetryHeader(array) diff --git a/tm/OBSW_TmService3.py b/tm/OBSW_TmService3.py new file mode 100644 index 0000000000000000000000000000000000000000..a697e3c17be9723d76d648b8b5bce9ab4f87dffb --- /dev/null +++ b/tm/OBSW_TmService3.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- +""" +Program: OBSW_TmPacket.py +Date: 30.12.2019 +Description: Deserialize Housekeeping TM +Author: R.Mueller +""" + +from tm.OBSW_PusTm import PUSTelemetry +import struct + + +class Service3TM(PUSTelemetry): + def __init__(self, byteArray): + super().__init__(byteArray) + self.sid = struct.unpack('>I', self.byteArrayData[0:4])[0] + self.hkHeader = [] + self.hkContent = [] + self.printPacketInfo("Housekeeping Packet") + if self.getSubservice() == 25: + self.paramLength = len(self.byteArrayData) - 4 + # TODO: This can be automated by using the MIB parser pool names and pool datatypes + if self.sid == 0x1f00 or 0x2f00: + self.hkHeader = ["Fix Mode", "SV in Fix", "GNSS Week", "Time of Week", "Latitude", "Longitude", + "Mean Sea Altitude", "Position X", "Position Y", "Position Z", + "Velocity X", "Velocity Y", "Velocity Z"] + self.fixMode = self.byteArrayData[4] + self.svInFix = self.byteArrayData[5] + self.gnssWeek = struct.unpack('>H', self.byteArrayData[5:7])[0] + self.timeOfWeek = struct.unpack('>I', self.byteArrayData[7:11])[0] + self.latitude = struct.unpack('>I', self.byteArrayData[11:15])[0] + self.longitude = struct.unpack('>I', self.byteArrayData[15:19])[0] + self.msa = struct.unpack('>I', self.byteArrayData[19:23])[0] + self.positionX = struct.unpack('>d', self.byteArrayData[23:31])[0] + self.positionY = struct.unpack('>d', self.byteArrayData[31:39])[0] + self.positionZ = struct.unpack('>d', self.byteArrayData[39:47])[0] + self.vx = struct.unpack('>d', self.byteArrayData[47:55])[0] + self.vy = struct.unpack('>d', self.byteArrayData[55:63])[0] + self.vz = struct.unpack('>d', self.byteArrayData[63:71])[0] + self.hkContent.append(self.fixMode) + self.hkContent.append(self.svInFix) + self.hkContent.append(self.gnssWeek) + self.hkContent.append(self.timeOfWeek) + self.hkContent.append(self.latitude) + self.hkContent.append(self.longitude) + self.hkContent.append(self.msa) + self.hkContent.append(self.positionX) + self.hkContent.append(self.positionY) + self.hkContent.append(self.positionZ) + self.hkContent.append(self.vx) + self.hkContent.append(self.vy) + self.hkContent.append(self.vz) + + def printTelemetryHeader(self, array): + super().printTelemetryHeader(array) + array.append(hex(self.sid)) + array.append(int(self.paramLength)) + return + + def printTelemetryColumnHeaders(self, array): + super().printTelemetryColumnHeaders(array) + array.append("SID") + array.append("Number of Parameters") + return diff --git a/utility/OBSW_TmTcPrinter.py b/utility/OBSW_TmTcPrinter.py index 45ec59feaa28f49c0ba6cd7c84763ff284e0a605..0157ea6bb5874bb2f0d80ff275b39dd38a0f41ae 100644 --- a/utility/OBSW_TmTcPrinter.py +++ b/utility/OBSW_TmTcPrinter.py @@ -42,7 +42,7 @@ class TmtcPrinter: self.addPrintBufferToFileBuffer() def handleLongPrint(self, packet): - self.printBuffer = "Received Telemetry:" + self.printBuffer = "Received Telemetry: " + packet.printInfo print(self.printBuffer) self.addPrintBufferToFileBuffer() self.handleColumnHeaderPrint(packet)