From 755644e6fa8ec9e23d79f645dbf5edea863259b5 Mon Sep 17 00:00:00 2001
From: "Robin.Mueller" <robin.mueller.m@gmail.com>
Date: Tue, 6 Oct 2020 16:01:58 +0200
Subject: [PATCH] some SD commands added

---
 .../tmtcclient_Clear_SD_Card_.xml             |  2 +-
 .../tmtcclient_Format_SD_Card_.xml            |  2 +-
 .../tmtcclient_Print_SD_Card.xml              |  2 +-
 config/obsw_config.py                         |  9 +++-
 tc/obsw_pus_tc_packer.py                      |  2 +-
 tc/obsw_tc_service23.py                       | 52 +++++++++++--------
 tc/obsw_tc_service8.py                        |  5 ++
 utility/obsw_args_parser.py                   |  2 +-
 8 files changed, 48 insertions(+), 28 deletions(-)

diff --git a/.idea/runConfigurations/tmtcclient_Clear_SD_Card_.xml b/.idea/runConfigurations/tmtcclient_Clear_SD_Card_.xml
index ef06fbd..c9f7b28 100644
--- a/.idea/runConfigurations/tmtcclient_Clear_SD_Card_.xml
+++ b/.idea/runConfigurations/tmtcclient_Clear_SD_Card_.xml
@@ -13,7 +13,7 @@
     <option name="ADD_SOURCE_ROOTS" value="true" />
     <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
     <option name="SCRIPT_NAME" value="$PROJECT_DIR$/obsw_tmtc_client.py" />
-    <option name="PARAMETERS" value="-m 3 -s 23 -o 181 -c 1 -t 2.5" />
+    <option name="PARAMETERS" value="-m 3 -s SD -o A20 -c 1 -t 2.5" />
     <option name="SHOW_COMMAND_LINE" value="false" />
     <option name="EMULATE_TERMINAL" value="true" />
     <option name="MODULE_MODE" value="false" />
diff --git a/.idea/runConfigurations/tmtcclient_Format_SD_Card_.xml b/.idea/runConfigurations/tmtcclient_Format_SD_Card_.xml
index e0e21bc..229b06b 100644
--- a/.idea/runConfigurations/tmtcclient_Format_SD_Card_.xml
+++ b/.idea/runConfigurations/tmtcclient_Format_SD_Card_.xml
@@ -13,7 +13,7 @@
     <option name="ADD_SOURCE_ROOTS" value="true" />
     <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
     <option name="SCRIPT_NAME" value="$PROJECT_DIR$/obsw_tmtc_client.py" />
-    <option name="PARAMETERS" value="-m 3 -s 23 -o 182 -c 1 -t 2.5" />
+    <option name="PARAMETERS" value="-m 3 -s SD -o A21 -c 1 -t 2.5" />
     <option name="SHOW_COMMAND_LINE" value="false" />
     <option name="EMULATE_TERMINAL" value="true" />
     <option name="MODULE_MODE" value="false" />
diff --git a/.idea/runConfigurations/tmtcclient_Print_SD_Card.xml b/.idea/runConfigurations/tmtcclient_Print_SD_Card.xml
index 4a9950b..79c0da7 100644
--- a/.idea/runConfigurations/tmtcclient_Print_SD_Card.xml
+++ b/.idea/runConfigurations/tmtcclient_Print_SD_Card.xml
@@ -13,7 +13,7 @@
     <option name="ADD_SOURCE_ROOTS" value="true" />
     <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
     <option name="SCRIPT_NAME" value="$PROJECT_DIR$/obsw_tmtc_client.py" />
-    <option name="PARAMETERS" value="-m 3 -s 23 -o 133 -c 1 -t 2.5" />
+    <option name="PARAMETERS" value="-m 3 -s SD -o A2 -c 1 -t 2.5" />
     <option name="SHOW_COMMAND_LINE" value="false" />
     <option name="EMULATE_TERMINAL" value="true" />
     <option name="MODULE_MODE" value="false" />
diff --git a/config/obsw_config.py b/config/obsw_config.py
index 24dd993..929e190 100644
--- a/config/obsw_config.py
+++ b/config/obsw_config.py
@@ -154,6 +154,13 @@ def set_globals(args):
         G_SERVICE = int(args.service)
     else:
         G_SERVICE = args.service
+
+    G_OP_CODE = args.op_code
+    if G_OP_CODE.isdigit():
+        G_OP_CODE = int(G_OP_CODE)
+    else:
+        G_OP_CODE = str(G_OP_CODE)
+
     G_MODE_ID = G_MODE_ID
     G_PRINT_HK_DATA = args.print_hk
     G_PRINT_TM = args.print_tm
@@ -162,7 +169,7 @@ def set_globals(args):
     G_COM_PORT = args.com_port
     G_TM_TIMEOUT = args.tm_timeout
     G_RESEND_TC = args.resend_tc
-    G_OP_CODE = args.op_code
+
     from obsw_user_code import global_setup_hook
     global_setup_hook()
 
diff --git a/tc/obsw_pus_tc_packer.py b/tc/obsw_pus_tc_packer.py
index 9e009a2..5af7472 100644
--- a/tc/obsw_pus_tc_packer.py
+++ b/tc/obsw_pus_tc_packer.py
@@ -47,7 +47,7 @@ class ServiceQueuePacker:
             return pack_service17_test_into(service_queue)
         if service == 20:
             return pack_service20_test_into(service_queue)
-        if service == 23:
+        if service == 23 or service == "SD":
             return pack_service23_commands_into(service_queue, op_code)
         if service == 200:
             return pack_service200_test_into(service_queue)
diff --git a/tc/obsw_tc_service23.py b/tc/obsw_tc_service23.py
index 01d0315..5db47d7 100644
--- a/tc/obsw_tc_service23.py
+++ b/tc/obsw_tc_service23.py
@@ -11,6 +11,7 @@ import config.obsw_config as g
 from typing import Deque, Union
 
 from tc.obsw_pus_tc_packer import PusTelecommand, TcQueueT
+from tc.obsw_tc_service8 import make_action_id
 from tmtc_core.utility.obsw_logger import get_logger
 
 LOGGER = get_logger()
@@ -190,90 +191,93 @@ class FileTransferHelper:
 def generate_print_sd_card_packet(
         ssc: int, object_id: bytearray = g.SD_CARD_HANDLER_ID) -> PusTelecommand:
     app_data = bytearray(object_id)
-    return PusTelecommand(service=23, subservice=133, ssc=ssc, app_data=app_data)
+    app_data += make_action_id(2)
+    return PusTelecommand(service=8, subservice=128, ssc=ssc, app_data=app_data)
 
 
 def generate_clear_sd_card_packet(
         ssc: int, object_id: bytearray = g.SD_CARD_HANDLER_ID) -> PusTelecommand:
     app_data = bytearray(object_id)
-    return PusTelecommand(service=23, subservice=181, ssc=ssc, app_data=app_data)
+    app_data += make_action_id(20)
+    return PusTelecommand(service=8, subservice=128, ssc=ssc, app_data=app_data)
 
 
 def generate_format_sd_card_packet(
         ssc: int, object_id: bytearray = g.SD_CARD_HANDLER_ID) -> PusTelecommand:
     app_data = bytearray(object_id)
-    return PusTelecommand(service=23, subservice=182, ssc=ssc, app_data=app_data)
+    app_data += make_action_id(21)
+    return PusTelecommand(service=8, subservice=128, ssc=ssc, app_data=app_data)
 
 
 def generate_generic_folder_structure(
         tc_queue: Deque, init_ssc: int, object_id: bytearray = g.SD_CARD_HANDLER_ID,
         iobc: bool = False):
     tc_queue.appendleft(("print", "Creating TC folder"))
-    command = generate_mkdir_srv23_9_packet("TC", ssc=init_ssc)
+    command = generate_mkdir_srv23_9_packet("TC", ssc=init_ssc, object_id=object_id)
     tc_queue.appendleft(command.pack_command_tuple())
     init_ssc += 1
     command = generate_mkdir_srv23_9_packet(
-        repository_path="TC", directory_name="LARGE", ssc=init_ssc)
+        repository_path="TC", directory_name="LARGE", ssc=init_ssc, object_id=object_id)
     tc_queue.appendleft(command.pack_command_tuple())
     init_ssc += 1
     command = generate_mkdir_srv23_9_packet(
-        repository_path="TC", directory_name="SMALL", ssc=init_ssc)
+        repository_path="TC", directory_name="SMALL", ssc=init_ssc, object_id=object_id)
     tc_queue.appendleft(command.pack_command_tuple())
     init_ssc += 1
 
     tc_queue.appendleft(("print", "Creating TM folder"))
-    command = generate_mkdir_srv23_9_packet("TM", ssc=init_ssc)
+    command = generate_mkdir_srv23_9_packet("TM", ssc=init_ssc, object_id=object_id)
     tc_queue.appendleft(command.pack_command_tuple())
     init_ssc += 1
     command = generate_mkdir_srv23_9_packet(
-        repository_path="TM", directory_name="HK", ssc=init_ssc)
+        repository_path="TM", directory_name="HK", ssc=init_ssc, object_id=object_id)
     tc_queue.appendleft(command.pack_command_tuple())
     init_ssc += 1
     command = generate_mkdir_srv23_9_packet(
-        repository_path="TM", directory_name="SC", ssc=init_ssc)
+        repository_path="TM", directory_name="SC", ssc=init_ssc, object_id=object_id)
     tc_queue.appendleft(command.pack_command_tuple())
     command = generate_mkdir_srv23_9_packet(
-        repository_path="TM/SC", directory_name="LARGE", ssc=init_ssc)
+        repository_path="TM/SC", directory_name="LARGE", ssc=init_ssc, object_id=object_id)
     tc_queue.appendleft(command.pack_command_tuple())
     init_ssc += 1
     command = generate_mkdir_srv23_9_packet(
-        repository_path="TM/SC", directory_name="SMALL", ssc=init_ssc)
+        repository_path="TM/SC", directory_name="SMALL", ssc=init_ssc, object_id=object_id)
     tc_queue.appendleft(command.pack_command_tuple())
     init_ssc += 1
 
     tc_queue.appendleft(("print", "Creating BIN folder"))
-    command = generate_mkdir_srv23_9_packet("BIN", ssc=init_ssc)
+    command = generate_mkdir_srv23_9_packet("BIN", ssc=init_ssc, object_id=object_id)
     tc_queue.appendleft(command.pack_command_tuple())
     init_ssc += 1
     if iobc:
         command = generate_mkdir_srv23_9_packet(
-            repository_path="BIN", directory_name="IOBC", ssc=init_ssc)
+            repository_path="BIN", directory_name="IOBC", ssc=init_ssc, object_id=object_id)
         tc_queue.appendleft(command.pack_command_tuple())
         init_ssc += 1
         command = generate_mkdir_srv23_9_packet(
-            repository_path="BIN/IOBC", directory_name="BL", ssc=init_ssc)
+            repository_path="BIN/IOBC", directory_name="BL", ssc=init_ssc, object_id=object_id)
         tc_queue.appendleft(command.pack_command_tuple())
         init_ssc += 1
         command = generate_mkdir_srv23_9_packet(
-            repository_path="BIN/IOBC", directory_name="OBSW", ssc=init_ssc)
+            repository_path="BIN/IOBC", directory_name="OBSW", ssc=init_ssc, object_id=object_id)
         tc_queue.appendleft(command.pack_command_tuple())
         init_ssc += 1
     else:
         command = generate_mkdir_srv23_9_packet(
-            repository_path="BIN", directory_name="AT91", ssc=init_ssc)
+            repository_path="BIN", directory_name="AT91", ssc=init_ssc, object_id=object_id)
         tc_queue.appendleft(command.pack_command_tuple())
         init_ssc += 1
         command = generate_mkdir_srv23_9_packet(
-            repository_path="BIN/AT91", directory_name="BL", ssc=init_ssc)
+            repository_path="BIN/AT91", directory_name="BL", ssc=init_ssc, object_id=object_id)
         tc_queue.appendleft(command.pack_command_tuple())
         init_ssc += 1
         command = generate_mkdir_srv23_9_packet(
-            repository_path="BIN/AT91", directory_name="OBSW", ssc=init_ssc)
+            repository_path="BIN/AT91", directory_name="OBSW", ssc=init_ssc, object_id=object_id)
         tc_queue.appendleft(command.pack_command_tuple())
         init_ssc += 1
 
     tc_queue.appendleft(("print", "Creating MISC folder"))
-    command = generate_mkdir_srv23_9_packet("MISC", ssc=init_ssc)
+    command = generate_mkdir_srv23_9_packet("MISC", ssc=init_ssc, object_id=object_id)
     tc_queue.appendleft(command.pack_command_tuple())
 
 
@@ -444,18 +448,22 @@ def pack_service23_commands_into(tc_queue: Deque, op_code: int) -> Deque:
         command = generate_rmdir_srv23_10_packet(directory_name="test", repository_path="/",
                                                  ssc=2306)
         tc_queue.appendleft(command.pack_command_tuple())
-    elif op_code == 133:
+    elif op_code == "A2":
         tc_queue.append(("print", "Printing active file system"))
         command = generate_print_sd_card_packet(ssc=2300)
         tc_queue.appendleft(command.pack_command_tuple())
-    elif op_code == 181:
+    elif op_code == "A20":
         tc_queue.append(("print", "Clearing active file system"))
         command = generate_clear_sd_card_packet(ssc=2300)
         tc_queue.appendleft(command.pack_command_tuple())
-    elif op_code == 182:
+    elif op_code == "A21":
         tc_queue.append(("print", "Formatting active file system"))
         command = generate_format_sd_card_packet(ssc=2300)
         tc_queue.appendleft(command.pack_command_tuple())
+    elif op_code == "C0A":
+        generate_generic_folder_structure(tc_queue, init_ssc=0, iobc=False)
+    elif op_code == "C0I":
+        generate_generic_folder_structure(tc_queue, init_ssc=0, iobc=True)
     return tc_queue
 
 
diff --git a/tc/obsw_tc_service8.py b/tc/obsw_tc_service8.py
index 130bc49..9166214 100644
--- a/tc/obsw_tc_service8.py
+++ b/tc/obsw_tc_service8.py
@@ -5,6 +5,7 @@
 @author R. Mueller
 @date   01.11.2019
 """
+import struct
 from typing import Deque
 
 import config.obsw_config as g
@@ -62,3 +63,7 @@ def pack_service8_test_into(tc_queue: Deque, called_externally: bool = False) ->
     if called_externally is False:
         tc_queue.appendleft(("export", "log/tmtc_log_service8.txt"))
     return tc_queue
+
+
+def make_action_id(action_id: int) -> bytearray:
+    return bytearray(struct.pack('!I', action_id))
diff --git a/utility/obsw_args_parser.py b/utility/obsw_args_parser.py
index 3769416..d226d02 100644
--- a/utility/obsw_args_parser.py
+++ b/utility/obsw_args_parser.py
@@ -25,7 +25,7 @@ def parse_input_arguments():
         '-c', '--com_if', type=int, help='Communication Interface. 0: Dummy Interface, 1: Serial, '
         '2: QEMU, 3: UDP', default=2)
     arg_parser.add_argument(
-        '-o', '--op_code', type=int, help='Operation code, which is passed to the TC '
+        '-o', '--op_code', help='Operation code, which is passed to the TC '
         'packer functions', default=0)
     arg_parser.add_argument('--clientIP', help='Client(Computer) IP. Default:\'\'', default='')
     arg_parser.add_argument(
-- 
GitLab