From 2774a1c2bc2b669a91d54da6eb1f838b4a9dd447 Mon Sep 17 00:00:00 2001
From: "Robin.Mueller" <robin.mueller.m@gmail.com>
Date: Mon, 30 Dec 2019 01:12:54 +0100
Subject: [PATCH] hk service print init, hk service test plan added

---
 OBSW_Config.py              |  2 ++
 OBSW_UdpClient.py           |  2 ++
 tc/OBSW_TcPacker.py         | 22 ++++++++++++++++++++++
 tm/OBSW_TmPacket.py         | 35 +++++++++++++++++++++++++++++++++--
 utility/OBSW_TmTcPrinter.py | 14 ++++++++++++++
 5 files changed, 73 insertions(+), 2 deletions(-)

diff --git a/OBSW_Config.py b/OBSW_Config.py
index c9712dc..fa09986 100644
--- a/OBSW_Config.py
+++ b/OBSW_Config.py
@@ -17,6 +17,7 @@ modeId = 0
 service = 17
 displayMode = "long"
 
+
 comIF = 0
 # Time related
 tmTimeout = 10
@@ -30,6 +31,7 @@ sockReceive = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
 
 # Print Settings
 printToFile = False
+printHkData = False
 printRawTmData = False
 
 
diff --git a/OBSW_UdpClient.py b/OBSW_UdpClient.py
index 3f89685..e0e8592 100644
--- a/OBSW_UdpClient.py
+++ b/OBSW_UdpClient.py
@@ -162,6 +162,7 @@ def parseInputArguments():
     argParser.add_argument('-o', '--tcTimeoutFactor', type=float, help='TC Timeout Factor. Default: 2.0', default=2.0)
     argParser.add_argument('-r', '--rawDataPrint', help='Supply -r to print all raw data directly', action='store_true')
     argParser.add_argument('-d', '--shortDisplayMode', help='Supply -d to print short output', action='store_true')
+    argParser.add_argument('-k', '--hk', help='Supply -k or --hk to print HK data', action='store_true')
     if len(sys.argv) == 1:
         print("No Input Arguments specified, setting default values.")
         argParser.print_help()
@@ -199,6 +200,7 @@ def setGlobals(args):
     g.sockReceive = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     g.sockSend = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     g.modeId = modeId
+    g.printHkData = args.hk
     g.tmTimeout = args.tmTimeout
     g.printRawTmData = args.rawDataPrint
     g.displayMode = displayMode
diff --git a/tc/OBSW_TcPacker.py b/tc/OBSW_TcPacker.py
index a6625d1..dc99d8d 100644
--- a/tc/OBSW_TcPacker.py
+++ b/tc/OBSW_TcPacker.py
@@ -56,6 +56,28 @@ def serviceTestSelect(service, serviceQueue):
 
 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):
diff --git a/tm/OBSW_TmPacket.py b/tm/OBSW_TmPacket.py
index b7dbb39..1c82cb0 100644
--- a/tm/OBSW_TmPacket.py
+++ b/tm/OBSW_TmPacket.py
@@ -134,10 +134,41 @@ 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
-        if self.sid == 0x1f00:
-            pass
+        # 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)
diff --git a/utility/OBSW_TmTcPrinter.py b/utility/OBSW_TmTcPrinter.py
index 0b97240..45ec59f 100644
--- a/utility/OBSW_TmTcPrinter.py
+++ b/utility/OBSW_TmTcPrinter.py
@@ -28,6 +28,8 @@ class TmtcPrinter:
             self.handleLongPrint(packet)
         self.handleWiretappingPacket(packet)
         self.handleDataReplyPacket(packet)
+        if packet.getService == 3 and packet.getSubservice == 25 or 26:
+            self.handleHkPrint(packet)
         if g.printRawTmData:
             self.printBuffer = "TM Data:" + "\n" + self.returnDataString(packet.data)
             print(self.printBuffer)
@@ -60,6 +62,18 @@ class TmtcPrinter:
         print(self.printBuffer)
         self.addPrintBufferToFileBuffer()
 
+    def handleHkPrint(self, packet):
+        if g.printHkData:
+            self.printBuffer = "HK Data:"
+            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