From b711c981ac155952a242811d4018a318758ffe33 Mon Sep 17 00:00:00 2001 From: "Robin.Mueller" <robin.mueller.m@gmail.com> Date: Sat, 18 Jan 2020 18:04:55 +0100 Subject: [PATCH] Definitions report tested --- tc/OBSW_TcService3.py | 17 ++++-- tm/OBSW_TmService3.py | 102 ++++++++++++++++++++---------------- utility/OBSW_TmTcPrinter.py | 27 +++++++--- 3 files changed, 88 insertions(+), 58 deletions(-) diff --git a/tc/OBSW_TcService3.py b/tc/OBSW_TcService3.py index b6144bb..861c116 100644 --- a/tc/OBSW_TcService3.py +++ b/tc/OBSW_TcService3.py @@ -71,10 +71,19 @@ def packService3TestInto(tcQueue): command = PUSTelecommand(service=3, subservice=6, SSC=3080, data=sidGps) tcQueue.put(command.packCommandTuple()) - # report custom hk definition - # report custom diag definition - # report gps0 definition - + # report custom hk definition, 10 hk, 12 diagnostics + # report custom HK definition + tcQueue.put(("print", "\r\nTesting Service 3: Reporting pre-defined HK definition")) + command = PUSTelecommand(service=3, subservice=9, SSC=3000, data=sid1) + tcQueue.put(command.packCommandTuple()) + # report custom Diag definition + tcQueue.put(("print", "\r\nTesting Service 3: Reporting diag definition")) + command = PUSTelecommand(service=3, subservice=11, SSC=3000, data=sid2) + tcQueue.put(command.packCommandTuple()) + # report gps definition + tcQueue.put(("print", "\r\nTesting Service 3: Reporting diag definition")) + command = PUSTelecommand(service=3, subservice=9, SSC=3000, data=sidGps) + tcQueue.put(command.packCommandTuple()) # generate one custom hk definition # generate one custom diag definition # generate one gps 0 definition diff --git a/tm/OBSW_TmService3.py b/tm/OBSW_TmService3.py index 762a496..9a14653 100644 --- a/tm/OBSW_TmService3.py +++ b/tm/OBSW_TmService3.py @@ -16,55 +16,14 @@ class Service3TM(PUSTelemetry): self.sid = struct.unpack('>I', self.byteArrayData[0:4])[0] self.hkHeader = [] self.hkContent = [] + self.hkDefinitionHeader = [] + self.hkDefinition = [] self.printPacketInfo("Housekeeping Packet") self.paramLength = 0 + if self.getSubservice() == 10 or self.getSubservice() == 12: + self.handleFillingDefinitionArrays() if self.getSubservice() == 25 or self.getSubservice() == 26: - 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 self.sid == 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) - elif self.sid == 0x4300 or self.sid == 0x4400: - self.hkHeader = ["Bool", "UINT8", "UINT16", "UINT32", "FLOAT1", "FLOAT2"] - self.testBool = self.byteArrayData[4] - self.hkContent.append(self.testBool) - self.testUint8 = self.byteArrayData[5] - self.hkContent.append(self.testUint8) - self.testUint16 = (self.byteArrayData[6] << 8) | self.byteArrayData[7] - self.hkContent.append(self.testUint16) - self.testUint32 = struct.unpack('>I', self.byteArrayData[8:12])[0] - self.hkContent.append(self.testUint32) - self.floatVector1 = struct.unpack('>f', self.byteArrayData[12:16])[0] - self.hkContent.append(self.floatVector1) - self.floatVector2 = struct.unpack('>f', self.byteArrayData[16:20])[0] - self.hkContent.append(self.floatVector2) + self.handleFillingHkArrays() def printTelemetryHeader(self, array): super().printTelemetryHeader(array) @@ -77,3 +36,54 @@ class Service3TM(PUSTelemetry): array.append("SID") array.append("HK Data Size") return + + def handleFillingDefinitionArrays(self): + self.hkHeader = ["SID", "Report Status", "Collection Interval", "Number Of IDs"] + reportingEnabled = self.byteArrayData[4] + collectionInterval = struct.unpack('>f', self.byteArrayData[5:9])[0] + numberOfParams = self.byteArrayData[9] + parameters = [] + index2 = 1 + for index in range(10, (numberOfParams * 4) + 10, 4): + parameter = struct.unpack('>I', self.byteArrayData[index:index + 4])[0] + self.hkHeader.append("Pool ID " + str(index2)) + parameters.append(str(hex(parameter))) + index2 = index2 + 1 + if reportingEnabled == 1: + statusString = "On" + else: + statusString = "Off" + self.hkContent = [hex(self.sid), statusString, collectionInterval, numberOfParams] + self.hkContent.extend(parameters) + + def handleFillingHkArrays(self): + 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 self.sid == 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"] + fixMode = self.byteArrayData[4] + svInFix = self.byteArrayData[5] + gnssWeek = struct.unpack('>H', self.byteArrayData[5:7])[0] + timeOfWeek = struct.unpack('>I', self.byteArrayData[7:11])[0] + latitude = struct.unpack('>I', self.byteArrayData[11:15])[0] + longitude = struct.unpack('>I', self.byteArrayData[15:19])[0] + msa = struct.unpack('>I', self.byteArrayData[19:23])[0] + positionX = struct.unpack('>d', self.byteArrayData[23:31])[0] + positionY = struct.unpack('>d', self.byteArrayData[31:39])[0] + positionZ = struct.unpack('>d', self.byteArrayData[39:47])[0] + vx = struct.unpack('>d', self.byteArrayData[47:55])[0] + vy = struct.unpack('>d', self.byteArrayData[55:63])[0] + vz = struct.unpack('>d', self.byteArrayData[63:71])[0] + self.hkContent = [fixMode, svInFix, gnssWeek, timeOfWeek, latitude, longitude, msa, positionX, positionY, + positionZ, vx, vy, vz] + elif self.sid == 0x4300 or self.sid == 0x4400: + self.hkHeader = ["Bool", "UINT8", "UINT16", "UINT32", "FLOAT1", "FLOAT2"] + testBool = self.byteArrayData[4] + testUint8 = self.byteArrayData[5] + testUint16 = (self.byteArrayData[6] << 8) | self.byteArrayData[7] + testUint32 = struct.unpack('>I', self.byteArrayData[8:12])[0] + floatVector1 = struct.unpack('>f', self.byteArrayData[12:16])[0] + floatVector2 = struct.unpack('>f', self.byteArrayData[16:20])[0] + self.hkContent = [testBool, testUint8, testUint16, testUint32, floatVector1, floatVector2] diff --git a/utility/OBSW_TmTcPrinter.py b/utility/OBSW_TmTcPrinter.py index c795d4a..3d3f308 100644 --- a/utility/OBSW_TmTcPrinter.py +++ b/utility/OBSW_TmTcPrinter.py @@ -30,6 +30,8 @@ class TmtcPrinter: self.handleDataReplyPacket(packet) if packet.getService() == 3 and (packet.getSubservice() == 25 or packet.getSubservice() == 26): self.handleHkPrint(packet) + if packet.getService() == 3 and (packet.getSubservice() == 10 or packet.getSubservice() == 12): + self.handleHkDefinitionPrint(packet) if g.printRawTmData: self.printBuffer = "TM Data:" + "\n" + self.returnDataString(packet.data) print(self.printBuffer) @@ -66,15 +68,24 @@ class TmtcPrinter: if g.printHkData: self.printBuffer = "HK Data from SID " self.printBuffer = self.printBuffer + str(hex(packet.sid)) + " :" - print(self.printBuffer) - self.addPrintBufferToFileBuffer() - self.printBuffer = str(packet.hkHeader) - print(self.printBuffer) - self.addPrintBufferToFileBuffer() - self.printBuffer = str(packet.hkContent) - print(self.printBuffer) - self.addPrintBufferToFileBuffer() + self.printHk(packet) + def handleHkDefinitionPrint(self, packet): + if g.printHkData: + self.printBuffer = "HK Definition from SID " + self.printBuffer = self.printBuffer + str(hex(packet.sid)) + " :" + self.printHk(packet) + + def printHk(self, packet): + print(self.printBuffer) + self.addPrintBufferToFileBuffer() + self.printBuffer = str(packet.hkHeader) + print(self.printBuffer) + self.addPrintBufferToFileBuffer() + self.printBuffer = str(packet.hkContent) + print(self.printBuffer) + self.addPrintBufferToFileBuffer() + def handleWiretappingPacket(self, packet): if packet.getService() == 2 and (packet.getSubservice() == 131 or packet.getSubservice() == 130): self.printBuffer = "Wiretapping Packet or Raw Reply from TM [" + \ -- GitLab