diff --git a/tm/OBSW_PusPacket.py b/tm/OBSW_PusPacket.py index dea7bf94fbecbc9d9150c5dbf6cd158dae13bc18..8caa234499dfe76210636bdd862f3066917853d6 100644 --- a/tm/OBSW_PusPacket.py +++ b/tm/OBSW_PusPacket.py @@ -1,14 +1,61 @@ # -*- coding: utf-8 -*- """ Created on Wed Apr 4 11:44:48 2018 - -@author: gaisser +Generic PUS packet class to deserialize raw PUS telemetry. +@author: S. Gaisser """ import crcmod import datetime +class OBSWPusPacket: + def __init__(self, byteArray): + self.packetRaw = byteArray + self.PUSHeader = PUSPacketHeader(byteArray) + byteArray = byteArray[6:] + self.dataFieldHeader = OBSWPUSPacketDataFieldHeader(byteArray) + byteArray = byteArray[12:] + self.data = byteArray[:len(byteArray)-2] + self.crc = byteArray[len(byteArray)-2] << 8 | byteArray[len(byteArray)-1] + + def getRawPacket(self) -> bytearray: + return self.packetRaw + + def printPusPacketHeader(self, array): + self.dataFieldHeader.printDataFieldHeader(array) + self.PUSHeader.printPusPacketHeader(array) + + def printPusPacketHeaderColumnHeaders(self, array): + self.dataFieldHeader.printDataFieldHeaderColumnHeader(array) + self.PUSHeader.printPusPacketHeaderColumnHeaders(array) + + def getPacketSize(self): + # PusHeader Size + data size + size = PUSPacketHeader.headerSize + self.PUSHeader.length + 1 + return size + + def getService(self): + return self.dataFieldHeader.type + + def getSubservice(self): + return self.dataFieldHeader.subtype + + def getSSC(self): + return self.PUSHeader.sourceSequenceCount + + def printData(self): + print(self.returnDataString()) + + def returnDataString(self): + strToPrint = "[" + for byte in self.data: + strToPrint += str(hex(byte)) + " , " + strToPrint = strToPrint.rstrip(' , ') + strToPrint += ']' + return strToPrint + + class PUSPacketHeader: headerSize = 6 @@ -102,52 +149,6 @@ class OBSWPUSPacketDataFieldHeader: self.time.printTimeHeaders(array) -class OBSWPusPacket: - def __init__(self, byteArray): - self.packetRaw = byteArray - self.PUSHeader = PUSPacketHeader(byteArray) - byteArray = byteArray[6:] - self.dataFieldHeader = OBSWPUSPacketDataFieldHeader(byteArray) - byteArray = byteArray[12:] - self.data = byteArray[:len(byteArray)-2] - self.crc = byteArray[len(byteArray)-2] << 8 | byteArray[len(byteArray)-1] - - def getRawPacket(self) -> bytearray: - return self.packetRaw - - def printPusPacketHeader(self, array): - self.dataFieldHeader.printDataFieldHeader(array) - self.PUSHeader.printPusPacketHeader(array) - - def printPusPacketHeaderColumnHeaders(self, array): - self.dataFieldHeader.printDataFieldHeaderColumnHeader(array) - self.PUSHeader.printPusPacketHeaderColumnHeaders(array) - - def getPacketSize(self): - # PusHeader Size + data size - size = PUSPacketHeader.headerSize + self.PUSHeader.length + 1 - return size - - def getService(self): - return self.dataFieldHeader.type - - def getSubservice(self): - return self.dataFieldHeader.subtype - - def getSSC(self): - return self.PUSHeader.sourceSequenceCount - - def printData(self): - print(self.returnDataString()) - - def returnDataString(self): - strToPrint = "[" - for byte in self.data: - strToPrint += str(hex(byte)) + " , " - strToPrint = strToPrint.rstrip(' , ') - strToPrint += ']' - return strToPrint - # Structure of a PUS Packet : # A PUS packet consists of consecutive bits, the allocation and structure is standardised. # Extended information can be found in ECSS-E-70-41A on p.42