From a0bc2793c0ff93ea85cb348bac4251d9790b7cc8 Mon Sep 17 00:00:00 2001
From: "Jan.Gerhards" <jan@gerhards.net>
Date: Sun, 2 Aug 2020 14:14:39 +0200
Subject: [PATCH] finish test for pus service 20

---
 tc/obsw_tc_service20.py   | 92 ++++++++++++---------------------------
 tm/obsw_pus_tm_factory.py | 12 ++++-
 2 files changed, 37 insertions(+), 67 deletions(-)

diff --git a/tc/obsw_tc_service20.py b/tc/obsw_tc_service20.py
index 1f607ca..f0973ce 100644
--- a/tc/obsw_tc_service20.py
+++ b/tc/obsw_tc_service20.py
@@ -16,8 +16,8 @@ from tc.obsw_tc_service200 import pack_mode_data
 def pack_service20_test_into(tc_queue: Deque, called_externally: bool = False) -> Deque:
     #parameter IDs
     parameterID0 = 0
-    parameterID1 = 1
-    parameterID2 = 2
+    parameterID1 = 256
+    parameterID2 = 512
 
     if called_externally is False:
         tc_queue.appendleft(("print", "Testing Service 20"))
@@ -58,97 +58,59 @@ def pack_service20_test_into(tc_queue: Deque, called_externally: bool = False) -
     #test checking Load for uint32_t
     tc_queue.appendleft(("print", "Testing Service 20: Load uint32_t"))
     parameter_id = struct.pack(">I", parameterID0)
+    type_and_matrix_data = pack_type_and_matrix_data(3, 14, 1, 1)
     parameter_data = struct.pack(">I", 42)
-    payload = object_id + parameter_id + parameter_data
-    command = PusTelecommand(service=20, subservice=128, ssc=2001, app_data=payload)
+    payload = object_id + parameter_id+ type_and_matrix_data + parameter_data
+    command = PusTelecommand(service=20, subservice=128, ssc=2010, app_data=payload)
     tc_queue.appendleft(command.pack_command_tuple())
 
     #test checking Dump for uint32_t
     tc_queue.appendleft(("print", "Testing Service 20: Dump uint32_t"))
     parameter_id = struct.pack(">I", parameterID0)
     payload = object_id + parameter_id
-    command = PusTelecommand(service=20, subservice=129, ssc=2001, app_data=payload)
+    command = PusTelecommand(service=20, subservice=129, ssc=2020, app_data=payload)
     tc_queue.appendleft(command.pack_command_tuple())
 
-    if called_externally is False:
-        tc_queue.appendleft(("export", "log/tmtc_log_service20.txt"))
-    return tc_queue
-
-
-"""
     #test checking Load for int32_t
+    tc_queue.appendleft(("print", "Testing Service 20: Load int32_t"))
     parameter_id = struct.pack(">I", parameterID1)
-    parameter_data = struct.pack(">I", -42)
-    payload = object_id + parameter_id + parameter_data
-    command = PusTelecommand(service=20, subservice=128, ssc=2001, app_data=payload)
+    type_and_matrix_data = pack_type_and_matrix_data(4, 14, 1, 1)
+    parameter_data = struct.pack(">i", -42)
+    payload = object_id + parameter_id+ type_and_matrix_data + parameter_data
+    command = PusTelecommand(service=20, subservice=128, ssc=2030, app_data=payload)
     tc_queue.appendleft(command.pack_command_tuple())
 
     #test checking Dump for int32_t
     tc_queue.appendleft(("print", "Testing Service 20: Dump int32_t"))
     parameter_id = struct.pack(">I", parameterID1)
     payload = object_id + parameter_id
-    command = PusTelecommand(service=20, subservice=129, ssc=2001, app_data=payload)
+    command = PusTelecommand(service=20, subservice=129, ssc=2040, app_data=payload)
     tc_queue.appendleft(command.pack_command_tuple())
 
     #test checking Load for float
     tc_queue.appendleft(("print", "Testing Service 20: Load float"))
     parameter_id = struct.pack(">I", parameterID2)
-    parameter_data = struct.pack(">I", 4.2)
-    payload = object_id + parameter_id + parameter_data
-    command = PusTelecommand(service=20, subservice=128, ssc=2001, app_data=payload)
+    type_and_matrix_data = pack_type_and_matrix_data(5, 1, 1, 1)
+    parameter_data = struct.pack(">f", 4.2)
+    payload = object_id + parameter_id+ type_and_matrix_data + parameter_data
+    command = PusTelecommand(service=20, subservice=128, ssc=2050, app_data=payload)
     tc_queue.appendleft(command.pack_command_tuple())
 
     #test checking Dump for float
     tc_queue.appendleft(("print", "Testing Service 20: Dump float"))
     parameter_id = struct.pack(">I", parameterID2)
     payload = object_id + parameter_id
-    command = PusTelecommand(service=20, subservice=129, ssc=2001, app_data=payload)
-    tc_queue.appendleft(command.pack_command_tuple())
-"""
-
-
-
-
-"""
-    # set mode on
-    tc_queue.appendleft(("print", "Testing Service 8: Set On Mode"))
-    mode_data = pack_mode_data(object_id, 1, 0)
-    command = PusTelecommand(service=200, subservice=1, ssc=800, app_data=mode_data)
+    command = PusTelecommand(service=20, subservice=129, ssc=2060, app_data=payload)
     tc_queue.appendleft(command.pack_command_tuple())
 
-    # set mode normal
-    tc_queue.appendleft(("print", "Testing Service 8: Set Normal Mode"))
-    mode_data = pack_mode_data(object_id, 2, 0)
-    command = PusTelecommand(service=200, subservice=1, ssc=810, app_data=mode_data)
-    tc_queue.appendleft(command.pack_command_tuple())
-
-    # Direct command which triggers completion reply
-    tc_queue.appendleft(("print", "Testing Service 8: Trigger Completion Reply"))
-    action_id = g.DUMMY_COMMAND_1
-    direct_command = object_id + action_id
-    command = PusTelecommand(service=8, subservice=128, ssc=820, app_data=direct_command)
-    tc_queue.appendleft(command.pack_command_tuple())
-
-    # Direct command which triggers _tm_data reply
-    tc_queue.appendleft(("print", "Testing Service 8: Trigger Data Reply"))
-    action_id = g.DUMMY_COMMAND_2
-    command_param1 = g.DUMMY_COMMAND_2_PARAM_1
-    command_param2 = g.DUMMY_COMMAND_2_PARAM_2
-    direct_command = object_id + action_id + command_param1 + command_param2
-    command = PusTelecommand(service=8, subservice=128, ssc=830, app_data=direct_command)
-    tc_queue.appendleft(command.pack_command_tuple())
-
-    # Direct command which triggers an additional step reply and one completion reply
-    tc_queue.appendleft(("print", "Testing Service 8: Trigger Step and Completion Reply"))
-    action_id = g.DUMMY_COMMAND_3
-    direct_command = object_id + action_id
-    command = PusTelecommand(service=8, subservice=128, ssc=840, app_data=direct_command)
-    tc_queue.appendleft(command.pack_command_tuple())
+    if called_externally is False:
+        tc_queue.appendleft(("export", "log/tmtc_log_service20.txt"))
+    return tc_queue
 
-    # set mode off
-    tc_queue.appendleft(("print", "Testing Service 8: Set Off Mode"))
-    mode_data = pack_mode_data(object_id, 0, 0)
-    command = PusTelecommand(service=200, subservice=1, ssc=800, app_data=mode_data)
-    tc_queue.appendleft(command.pack_command_tuple())
-    tc_queue.appendleft(("wait", 2))
-"""
+def pack_type_and_matrix_data(ptc, pfc, column, row):
+    data = bytearray(4)
+    data[0] = ptc
+    data[1] = pfc
+    data[2] = column
+    data[3] = row
+    return data
diff --git a/tm/obsw_pus_tm_factory.py b/tm/obsw_pus_tm_factory.py
index 7bad970..42c6355 100644
--- a/tm/obsw_pus_tm_factory.py
+++ b/tm/obsw_pus_tm_factory.py
@@ -114,7 +114,12 @@ class Service20TM(PusTelemetry):
             self.type_pfc = self._tm_data[9]
             self.column = self._tm_data[10]
             self.row = self._tm_data[11]
-            self.param = struct.unpack('>I', self._tm_data[12:datasize])[0]
+            if self.type_ptc == 3 and self.type_pfc == 14:
+                self.param = struct.unpack('>I', self._tm_data[12:datasize])[0]
+            if self.type_ptc == 4 and self.type_pfc == 14:
+                self.param = struct.unpack('>i', self._tm_data[12:datasize])[0]
+            if self.type_ptc == 5 and self.type_pfc == 1:
+                self.param = struct.unpack('>f', self._tm_data[12:datasize])[0]
         self.specify_packet_info("Functional Commanding Reply")
 
     def append_telemetry_content(self, array):
@@ -125,7 +130,10 @@ class Service20TM(PusTelemetry):
             array.append("PTC: " + str(self.type_ptc) + " | PFC: " + str(self.type_pfc))
             array.append(str(self.column))
             array.append(str(self.row))
-            array.append(str(hex(self.param)))
+            if self.type_ptc == 5 and self.type_pfc == 1:
+                array.append(str(float(self.param)))
+            else:
+                array.append(str(hex(self.param)))
         return
 
     def append_telemetry_column_headers(self, array):
-- 
GitLab