diff --git a/tc/obsw_tc_service23.py b/tc/obsw_tc_service23.py index 9f384fe3d9ac06437a79048b1c5d446550fed99a..172b1dc4043df90cba659ca70905ed6aae42efdf 100644 --- a/tc/obsw_tc_service23.py +++ b/tc/obsw_tc_service23.py @@ -51,6 +51,7 @@ class FileTransferHelper: """ self.transfer_mode = self.TransferMode.NORMAL self.max_size_of_app_data = max_size_of_app_data + self.max_file_data_size = 0 self.allowed_file_data_size = calculate_allowed_file_data_size( max_size_of_app_data, target_filename, target_repository) self.target_filename = target_filename @@ -79,6 +80,15 @@ class FileTransferHelper: self.transfer_mode = self.TransferMode.RENAME_OLD self.renamed_name = renamed_name + def set_max_file_data_size(self, max_file_data_size: int): + """ + If this value is specified and the source file is large (larger than the maximum allowed + app data!), the file data size will be set to this value. + @param max_file_data_size: + @return: + """ + self.max_file_data_size = max_file_data_size + def generate_packets(self, ssc: int): if self.transfer_mode == self.TransferMode.DELETE_OLD: command = generate_rm_file_srv23_2_packet(self.target_filename, self.target_repository, @@ -90,7 +100,10 @@ class FileTransferHelper: pass if len(self.file_data) > self.allowed_file_data_size: # Large file, create file with init_data - init_data = self.file_data[0:self.allowed_file_data_size] + if self.max_file_data_size > 0: + init_data = self.file_data[0:self.max_file_data_size] + else: + init_data = self.file_data[0:self.allowed_file_data_size] else: # Small file, one packet for file creation sufficient command = generate_create_file_srv23_1_packet( @@ -109,9 +122,15 @@ class FileTransferHelper: rest_of_data = self.file_data[self.allowed_file_data_size:] # Generate the rest of the packets to write to large file - self.__generate_append_to_file_packets_automatically(rest_of_data, ssc) + if self.max_file_data_size > 0: + self.__generate_append_to_file_packets_automatically( + rest_of_data, self.max_file_data_size, ssc) + else: + self.__generate_append_to_file_packets_automatically( + rest_of_data, self.max_size_of_app_data, ssc) - def __generate_append_to_file_packets_automatically(self, data: bytearray, init_ssc: int): + def __generate_append_to_file_packets_automatically( + self, data: bytearray, size_of_data_blocks: int, init_ssc: int): """ This function generates PUS packets which is used to write data in a file. A new file will be created if not already existing. If the file already exists, this might @@ -130,7 +149,7 @@ class FileTransferHelper: header += bytearray(self.target_filename, 'utf-8') # Add string terminator of filename header.append(0) - self.__split_large_file(header, self.max_size_of_app_data, data, init_ssc) + self.__split_large_file(header, size_of_data_blocks, data, init_ssc) def __split_large_file(self, header: bytearray, size_of_data_blocks: int, data: bytearray, init_ssc: int): diff --git a/utility/obsw_binary_uploader.py b/utility/obsw_binary_uploader.py index a731e443144d213a7eaea077f5e83b313e8f16f6..fa58a0ea2e0b62a4089a5d2eb3a6a42311b8049a 100644 --- a/utility/obsw_binary_uploader.py +++ b/utility/obsw_binary_uploader.py @@ -12,8 +12,7 @@ from tkinter import filedialog from collections import deque from tmtc_core.comIF.obsw_com_interface import CommunicationInterface -from tc.obsw_tc_service23 import generate_append_to_file_packets_automatically, \ - generate_rmdir_srv23_10_packet +from tc.obsw_tc_service23 import FileTransferHelper import config.obsw_config as g @@ -49,13 +48,16 @@ def perform_binary_upload(comIF: CommunicationInterface): # Delete existing binary file first, otherwise data might be appeneded to otherwise # valid file which already exists. - generate_rmdir_srv23_10_packet() + 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, "BIN/AT91/BL", "bl.bin", 1024, data_to_read) + # generate_append_to_file_packets_automatically(tc_queue, ,, 1024, data_to_read) while tc_queue: (tc_packet, tc_info) = tc_queue.pop() comIF.send_telecommand(tc_packet, tc_info) print("Sending..") - time.sleep(2.0) - print("Test2") + time.sleep(30.0)