Something went wrong on our end
Forked from an inaccessible project.
-
Robin Mueller authoredRobin Mueller authored
OBSW_TmPacket.py 3.97 KiB
# -*- coding: utf-8 -*-
"""
Program: OBSW_TmPacket.py
Date: 01.11.2019
Description: Deserialize TM byte array into PUS TM Class
Author: R.Mueller, S. Gaisser
"""
from tm.OBSW_PusTm import PUSTelemetry
from tm.OBSW_TmService1 import Service1TM
from tm.OBSW_TmService3 import Service3TM
from tm.OBSW_TmService5 import Service5TM
import struct
def PUSTelemetryFactory(rawPacket):
servicetype = rawPacket[7]
# extract service type from data
if servicetype == 1:
return Service1TM(rawPacket)
elif servicetype == 2:
return Service2TM(rawPacket)
elif servicetype == 3:
return Service3TM(rawPacket)
elif servicetype == 5:
return Service5TM(rawPacket)
elif servicetype == 8:
return Service8TM(rawPacket)
elif servicetype == 17:
return Service17TM(rawPacket)
elif servicetype == 200:
return Service200TM(rawPacket)
else:
print("The service " + str(servicetype) + " is not implemented in Telemetry Factory")
return PUSTelemetry(rawPacket)
class Service2TM(PUSTelemetry):
def __init__(self, byteArray):
super().__init__(byteArray)
def printTelemetryHeader(self, array):
super().printTelemetryHeader(array)
return
def printTelemetryColumnHeaders(self, array):
super().printTelemetryColumnHeaders(array)
return
class Service8TM(PUSTelemetry):
def __init__(self, byteArray):
super().__init__(byteArray)
def printTelemetryHeader(self, array):
super().printTelemetryHeader(array)
return
def printTelemetryColumnHeaders(self, array):
super().printTelemetryColumnHeaders(array)
return
class Service9TM(PUSTelemetry):
def __init__(self, byteArray):
super().__init__(byteArray)
def printTelemetryHeader(self, array):
super().printTelemetryHeader(array)
return
def printTelemetryColumnHeaders(self, array):
super().printTelemetryColumnHeaders(array)
return
class Service17TM(PUSTelemetry):
def __init__(self, byteArray):
super().__init__(byteArray)
self.printPacketInfo("Test Reply")
def printTelemetryHeader(self, array):
super().printTelemetryHeader(array)
return
def printTelemetryColumnHeaders(self, array):
super().printTelemetryColumnHeaders(array)
return
class Service200TM(PUSTelemetry):
def __init__(self, byteArray):
super().__init__(byteArray)
self.isCantReachModeReply = False
self.isModeReply = False
self.printPacketInfo("Mode Reply")
self.objectId = struct.unpack('>I', self.byteArrayData[0:4])[0]
if self.dataFieldHeader.subtype == 7:
self.appendPacketInfo(": Can't reach mode")
self.isCantReachModeReply = True
self.returnValue = self.byteArrayData[4] << 8 | self.byteArrayData[5]
elif self.dataFieldHeader.subtype == 6 or self.dataFieldHeader.subtype == 8:
self.isModeReply = True
if self.dataFieldHeader.subtype == 8:
self.appendPacketInfo(": Wrong Mode")
elif self.dataFieldHeader.subtype == 6:
self.appendPacketInfo(": Mode reached")
self.mode = struct.unpack('>I', self.byteArrayData[4:8])[0]
self.submode = self.byteArrayData[8]
def printTelemetryHeader(self, array):
super().printTelemetryHeader(array)
array.append(hex(self.objectId))
if self.isCantReachModeReply:
array.append(hex(self.returnValue))
elif self.isModeReply:
array.append(str(self.mode))
array.append(str(self.submode))
return
def printTelemetryColumnHeaders(self, array):
super().printTelemetryColumnHeaders(array)
array.append("Object ID")
if self.isCantReachModeReply:
array.append("Return Value")
elif self.isModeReply:
array.append("Mode")
array.append("Submode")
return