From ce43d6cb5fc0eaddcfd560d07d0915b03110bb2a Mon Sep 17 00:00:00 2001
From: "Robin.Mueller" <robin.mueller.m@gmail.com>
Date: Mon, 5 Oct 2020 22:11:14 +0200
Subject: [PATCH] continued srv23 tests

---
 config/obsw_config.py           |  3 +-
 tc/obsw_tc_service23.py         | 79 +++++++++++++++++++++++++++++++++
 tmtc_core                       |  2 +-
 utility/obsw_binary_uploader.py | 55 ++++++++++++++---------
 4 files changed, 117 insertions(+), 22 deletions(-)

diff --git a/config/obsw_config.py b/config/obsw_config.py
index d45e1cc..55c878e 100644
--- a/config/obsw_config.py
+++ b/config/obsw_config.py
@@ -10,7 +10,7 @@
 import struct
 import pprint
 import logging
-from socket import INADDR_ANY
+# from tmtc_core.tc.obsw_pus_tc_base import PusTelecommand
 from config.obsw_definitions import ModeList, ComIF
 
 """
@@ -69,6 +69,7 @@ G_APID = 0x73
 
 # Binary Upload Settings
 G_MAX_BINARY_FRAME_LENGTH = 1500
+G_MAX_APP_DATA_LENGTH = G_MAX_BINARY_FRAME_LENGTH - 10
 
 G_COM_IF = 2
 # COM Port for serial communication
diff --git a/tc/obsw_tc_service23.py b/tc/obsw_tc_service23.py
index e560406..5366c5b 100644
--- a/tc/obsw_tc_service23.py
+++ b/tc/obsw_tc_service23.py
@@ -201,6 +201,81 @@ def generate_format_sd_card_packet(
     app_data = bytearray(object_id)
     return PusTelecommand(service=23, subservice=182, 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)
+    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)
+    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)
+    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)
+    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)
+    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)
+    tc_queue.appendleft(command.pack_command_tuple())
+    command = generate_mkdir_srv23_9_packet(
+        repository_path="TM/SC", directory_name="LARGE", ssc=init_ssc)
+    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)
+    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)
+    tc_queue.appendleft(command.pack_command_tuple())
+    init_ssc += 1
+    command = generate_mkdir_srv23_9_packet(
+        repository_path="BIN", directory_name="AT91", ssc=init_ssc)
+    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)
+        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)
+        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)
+        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)
+        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)
+        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)
+        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)
+    tc_queue.appendleft(command.pack_command_tuple())
+
 
 def generate_create_file_srv23_1_packet(
         filename: str, repository_path: str, ssc: int, max_size_of_app_data: int,
@@ -373,6 +448,10 @@ def pack_service23_commands_into(tc_queue: Deque, op_code: int) -> Deque:
         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:
+        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:
         tc_queue.append(("print", "Formatting active file system"))
         command = generate_format_sd_card_packet(ssc=2300)
diff --git a/tmtc_core b/tmtc_core
index 4d37769..5313a6e 160000
--- a/tmtc_core
+++ b/tmtc_core
@@ -1 +1 @@
-Subproject commit 4d37769e7c8254bf7e20a016cf076ae48db31e57
+Subproject commit 5313a6e1fbc3e15d3b5145c6c7a1b741b843b2f9
diff --git a/utility/obsw_binary_uploader.py b/utility/obsw_binary_uploader.py
index fa58a0e..aeae705 100644
--- a/utility/obsw_binary_uploader.py
+++ b/utility/obsw_binary_uploader.py
@@ -12,15 +12,21 @@ from tkinter import filedialog
 from collections import deque
 
 from tmtc_core.comIF.obsw_com_interface import CommunicationInterface
-from tc.obsw_tc_service23 import FileTransferHelper
+from tc.obsw_tc_service23 import FileTransferHelper, generate_generic_folder_structure
 import config.obsw_config as g
+from tmtc_core.tc.obsw_pus_tc_base import PusTelecommand
+from tmtc_core.utility.obsw_logger import get_logger
 
+LOGGER = get_logger()
 
-def perform_binary_upload(comIF: CommunicationInterface):
+
+def perform_binary_upload(com_if: CommunicationInterface):
     print("Please select file to upload")
     root = tk.Tk()
     root.withdraw()
     root.wm_attributes('-topmost', 1)
+    # TODO: implement command line version which just parses the _bin folder, displays the options
+    #       and asks for a selection.
     file_path = filedialog.askopenfilename(parent=root)
     print("File select: " + str(file_path))
     calc_hamming_code = input("Calculate and send hamming code? [y/n]: ")
@@ -31,9 +37,9 @@ def perform_binary_upload(comIF: CommunicationInterface):
         calc_hamming_code = False
         print("Hamming code will not be calculated")
 
-    # Right now, the size of PUS packets is limited to 1500 bytes. Therefore, we split up the
-    # binary.
-    frame_length = g.G_MAX_BINARY_FRAME_LENGTH
+    # Right now, the size of PUS packets is limited to 1500 bytes which also limits the app
+    # data length.
+    frame_length = g.G_MAX_APP_DATA_LENGTH
 
     if calc_hamming_code:
         # now we calculate the hamming code
@@ -43,21 +49,30 @@ def perform_binary_upload(comIF: CommunicationInterface):
     with open(file_path, 'rb') as file:
         data_to_read = bytearray(file.read())
 
-    print("Test")
+    print("Generating folder structure..")
     tc_queue = deque()
-
-    # Delete existing binary file first, otherwise data might be appeneded to otherwise
-    # valid file which already exists.
-    file_transfer_helper = FileTransferHelper(
-        tc_queue=tc_queue, max_size_of_app_data=1500, target_repository="BIN/AT91/BL",
-        target_filename="bl.bin")
-
-    file_transfer_helper.generate_packets(1)
-    file_transfer_helper.set_to_delete_old_file()
-    # We have to split the binary here first
-    # generate_append_to_file_packets_automatically(tc_queue, ,, 1024, data_to_read)
+    generate_generic_folder_structure(tc_queue, 0)
     while tc_queue:
         (tc_packet, tc_info) = tc_queue.pop()
-        comIF.send_telecommand(tc_packet, tc_info)
-        print("Sending..")
-        time.sleep(30.0)
+        if not isinstance(tc_packet, str):
+            com_if.send_telecommand(tc_packet, tc_info)
+        elif tc_packet == "print":
+            LOGGER.info(tc_info)
+
+        time.sleep(0.5)
+
+    # Delete existing binary file first, otherwise data might be appended to otherwise
+    # valid file which already exists.
+    # file_transfer_helper = FileTransferHelper(
+    #     tc_queue=tc_queue, max_size_of_app_data=1500, target_repository="BIN/AT91/BL",
+    #     target_filename="bl.bin")
+    #
+    # file_transfer_helper.generate_packets(1)
+    # file_transfer_helper.set_to_delete_old_file()
+    # # We have to split the binary here first
+    # # generate_append_to_file_packets_automatically(tc_queue, ,, 1024, data_to_read)
+    # while tc_queue:
+    #     (tc_packet, tc_info) = tc_queue.pop()
+    #     com_if.send_telecommand(tc_packet, tc_info)
+    #     print("Sending..")
+    #     time.sleep(30.0)
-- 
GitLab