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