From c52ce5a304a8b059dfc1adc870b5d626961befe3 Mon Sep 17 00:00:00 2001 From: "Robin.Mueller" <robin.mueller.m@gmail.com> Date: Mon, 12 Oct 2020 00:53:42 +0200 Subject: [PATCH] improved srv23 tc file --- tc/obsw_tc_service23_sdcard.py | 264 +++++++++++++++++---------------- tm/obsw_tm_service_23.py | 7 +- 2 files changed, 138 insertions(+), 133 deletions(-) diff --git a/tc/obsw_tc_service23_sdcard.py b/tc/obsw_tc_service23_sdcard.py index 1bd3a8b..7fdfc97 100644 --- a/tc/obsw_tc_service23_sdcard.py +++ b/tc/obsw_tc_service23_sdcard.py @@ -318,14 +318,8 @@ def generate_create_file_srv23_1_packet( max_size_of_app_data, filename, repository_path): LOGGER.error("generate_create_file_srv23_1_packet: Initial data too large!") return None - data_to_pack = bytearray(object_id) - data_to_pack += repository_path.encode('utf-8') - # Add string terminator to repository_path - data_to_pack.append(0) - data_to_pack += filename.encode('utf-8') - # Add string terminator to filename - data_to_pack.append(0) - + data_to_pack = pack_generic_file_command_header(object_id=object_id, first_path=repository_path, + second_path=filename) data_to_pack += initial_data return PusTelecommand(service=23, subservice=1, ssc=ssc, app_data=data_to_pack) @@ -339,18 +333,28 @@ def generate_rm_file_srv23_2_packet(filename: str, repository_path: str, @param repository_path: The path where the directory shall be created @param ssc: source sequence count @param object_id: The object ID of the memory handler which manages the file system - :return The TC[23,2] PUS packet + @return The telecommand. """ - data_to_pack = bytearray(object_id) - data_to_pack += repository_path.encode('utf-8') - # Add string terminator to repository_path - data_to_pack.append(0) - data_to_pack += filename.encode('utf-8') - # Add string terminator to filename - data_to_pack.append(0) + data_to_pack = pack_generic_file_command_header(object_id=object_id, first_path=repository_path, + second_path=filename) return PusTelecommand(service=23, subservice=2, ssc=ssc, app_data=data_to_pack) +def generate_report_file_attr_srv23_4_packet( + filename: str, repository_path: str, ssc: int, + object_id=g.SD_CARD_HANDLER_ID) -> PusTelecommand: + """ + @param filename: The name of the file to delete + @param repository_path: The path where the directory shall be created + @param ssc: source sequence count + @param object_id: The object ID of the memory handler which manages the file system + @return The telecommand. + """ + data_to_pack = pack_generic_file_command_header(object_id=object_id, first_path=repository_path, + second_path=filename) + return PusTelecommand(service=23, subservice=4, ssc=ssc, app_data=data_to_pack) + + def generate_mkdir_srv23_9_packet(directory_name: str, ssc: int, repository_path: str = "/", object_id: bytearray = g.SD_CARD_HANDLER_ID) -> PusTelecommand: """ @@ -359,15 +363,10 @@ def generate_mkdir_srv23_9_packet(directory_name: str, ssc: int, repository_path @param repository_path: The name of the directory to create @param ssc: source sequence count @param object_id: The object ID of the memory handler which manages the file system - :return + @return The telecommand. """ - data_to_pack = bytearray(object_id) - data_to_pack += repository_path.encode('utf-8') - # Add string terminator to repository path - data_to_pack.append(0) - data_to_pack += directory_name.encode('utf-8') - # Add string terminator to directory name - data_to_pack.append(0) + data_to_pack = pack_generic_file_command_header(object_id=object_id, first_path=repository_path, + second_path=directory_name) return PusTelecommand(service=23, subservice=9, ssc=ssc, app_data=data_to_pack) @@ -379,15 +378,10 @@ def generate_rmdir_srv23_10_packet(directory_name: str, repository_path: str, ss @param repository_path: Path to directory dirname @param ssc: source sequence count @param object_id: object ID of the memory handler (e.g. SD Card Handler) - @return The application data field of the (23,10) PUS packet + @return The telecommand. """ - data_to_pack = bytearray(object_id) - data_to_pack += repository_path.encode('utf-8') - # Add string terminator of repository path - data_to_pack.append(0) - data_to_pack += directory_name.encode('utf-8') - # Add string terminator of directory name - data_to_pack.append(0) + data_to_pack = pack_generic_file_command_header(object_id=object_id, first_path=repository_path, + second_path=directory_name) return PusTelecommand(service=23, subservice=10, ssc=ssc, app_data=data_to_pack) @@ -395,13 +389,8 @@ def generate_append_to_file_srv23_130_packet( filename: str, repository_path: str, packet_sequence_number: int, ssc: int, file_data: bytearray = bytearray([]), object_id: bytearray = g.SD_CARD_HANDLER_ID) -> PusTelecommand: - data_to_pack = bytearray(object_id) - data_to_pack += repository_path.encode('utf-8') - # Add string terminator of repository path - data_to_pack.append(0) - data_to_pack += filename.encode('utf-8') - # Add string terminator of filename - data_to_pack.append(0) + data_to_pack = pack_generic_file_command_header(object_id=object_id, first_path=repository_path, + second_path=filename) data_to_pack += file_data data_to_pack.append(packet_sequence_number >> 8) data_to_pack.append(packet_sequence_number & 0xff) @@ -411,13 +400,8 @@ def generate_append_to_file_srv23_130_packet( def generate_finish_append_to_file_srv23_131_packet( filename: str, repository_path: str, ssc: int, lock_file: bool = False, object_id: bytearray = g.SD_CARD_HANDLER_ID): - data_to_pack = bytearray(object_id) - data_to_pack += repository_path.encode('utf-8') - # Add string terminator of repository path - data_to_pack.append(0) - data_to_pack += filename.encode('utf-8') - # Add string terminator of filename - data_to_pack.append(0) + data_to_pack = pack_generic_file_command_header(object_id=object_id, first_path=repository_path, + second_path=filename) data_to_pack.append(lock_file) return PusTelecommand(service=23, subservice=131, ssc=ssc, app_data=data_to_pack) @@ -434,115 +418,56 @@ def generate_read_file_srv23_140_packet( @param object_id: object ID of the memory handler (e.g. SD Card Handler) @return: The application data field of the (23,129) PUS packet """ - data_to_pack = bytearray(object_id) - data_to_pack += repository_path.encode('utf-8') - # Add string terminator of repository paht - data_to_pack.append(0) - data_to_pack += filename.encode('utf-8') - # Add string terminator of filename - data_to_pack.append(0) + data_to_pack = pack_generic_file_command_header(object_id=object_id, first_path=repository_path, + second_path=filename) return PusTelecommand(service=23, subservice=140, ssc=ssc, app_data=data_to_pack) -def generate_lock_file_packet(ssc: int, lock: bool, repository_path: str, filename: str, +def generate_lock_file_srv23_5_6_packet(ssc: int, lock: bool, repository_path: str, filename: str, object_id: bytearray = g.SD_CARD_HANDLER_ID): - data_to_pack = bytearray(object_id) - data_to_pack += repository_path.encode('utf-8') - # Add string terminator of repository paht - data_to_pack.append(0) - data_to_pack += filename.encode('utf-8') - # Add string terminator of filename - data_to_pack.append(0) + data_to_pack = pack_generic_file_command_header(object_id=object_id, first_path=repository_path, + second_path=filename) if lock: return PusTelecommand(service=23, subservice=5, ssc=ssc, app_data=data_to_pack) else: return PusTelecommand(service=23, subservice=6, ssc=ssc, app_data=data_to_pack) -def pack_service23_commands_into(tc_queue: Deque, op_code: int) -> Deque: +def pack_service23_commands_into(tc_queue: TcQueueT, op_code: int) -> Deque: # sd_handler_id = g.SD_CARD_HANDLER_ID if op_code == 0: - tc_queue.appendleft(("print", "Testing Service 23")) - - tc_queue.append(("print", "Create directory 'test'")) - command = generate_mkdir_srv23_9_packet(directory_name="test", repository_path="/", ssc=2300) - tc_queue.appendleft(command.pack_command_tuple()) - tc_queue.append(("print", "Create subdirectory 'subdir' in 'test'")) - command = generate_mkdir_srv23_9_packet(repository_path="test", ssc=2301, - directory_name="subdir") - tc_queue.appendleft(command.pack_command_tuple()) - - tc_queue.appendleft(("print", "Create test.bin")) - command = generate_create_file_srv23_1_packet( - filename="test.bin", repository_path="test/subdir", ssc=2302, - initial_data=bytearray([0x01, 0x00, 0x01, 0x00]), - max_size_of_app_data=1024) - tc_queue.appendleft(command.pack_command_tuple()) - - tc_queue.appendleft(("print", "Printing file structure.")) - command = generate_print_sd_card_packet(ssc=2300) - tc_queue.appendleft(command.pack_command_tuple()) - - tc_queue.appendleft(("print", "Clearing SD card")) - command = generate_clear_sd_card_packet(ssc=2301) - tc_queue.appendleft(command.pack_command_tuple()) - - tc_queue.appendleft(("print", "Printing file structure")) - command = generate_print_sd_card_packet(ssc=2302) - tc_queue.appendleft(command.pack_command_tuple()) - - # tc_queue.appendleft(("print", "Read data of test.bin")) - # command = generate_read_file_srv23_129_packet("test/subdir", "test.bin", ssc=2303) - # tc_queue.appendleft(command.pack_command_tuple()) - tc_queue.appendleft(("print", "Delete 'test.bin'")) - command = generate_rm_file_srv23_2_packet( - filename="test.bin", repository_path="test/subdir", ssc=2304) - tc_queue.appendleft(command.pack_command_tuple()) - tc_queue.appendleft(("print", "Delete 'subdir' directory")) - command = generate_rmdir_srv23_10_packet(directory_name="subdir", repository_path="test", - ssc=2305) - tc_queue.appendleft(command.pack_command_tuple()) - tc_queue.appendleft(("print", "Delete 'test' directory")) - command = generate_rmdir_srv23_10_packet(directory_name="test", repository_path="/", - ssc=2306) - tc_queue.appendleft(command.pack_command_tuple()) - 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 == "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 == "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": - tc_queue.append(("print", "Generating generic folder structure on AT91")) - generate_generic_folder_structure(tc_queue, init_ssc=0, iobc=False) - elif op_code == "C0I": - tc_queue.append(("print", "Generating generic folder structure on iOBC")) - generate_generic_folder_structure(tc_queue, init_ssc=0, iobc=True) + generate_generic_service_23_test(tc_queue) + elif op_code == "4" or op_code == 4: + LOGGER.info("Press h in the following input requests") + LOGGER.info("to send a command to display the folder structure instead") + (repo_path, filename) = prompt_for_repo_filename() + if repo_path == "" and filename == "h": + tc_queue.append(("print", "Requesting file attributes")) + tc_queue.appendleft(generate_print_sd_card_packet(ssc=0).pack_command_tuple()) + elif repo_path == "" and filename == "c": + return tc_queue + else: + tc_queue.append(("print", "Locking file")) + command = generate_lock_file_srv23_5_6_packet(0, repository_path=repo_path, + filename=filename, lock=True) + tc_queue.appendleft(command.pack_command_tuple()) elif op_code == "5" or op_code == 5: - LOGGER.info("Press h in the following input requests") - LOGGER.info("to send a command to display the folder sturcture instead") + LOGGER.info("to send a command to display the folder structure instead") (repo_path, filename) = prompt_for_repo_filename() if repo_path == "" and filename == "h": tc_queue.append(("print", "Printing active file system")) - tc_queue.appendleft(generate_print_sd_card_packet(ssc=0)) + tc_queue.appendleft(generate_print_sd_card_packet(ssc=0).pack_command_tuple()) elif repo_path == "" and filename == "c": return tc_queue else: tc_queue.append(("print", "Locking file")) - command = generate_lock_file_packet(0, repository_path=repo_path, filename=filename, - lock=True) + command = generate_lock_file_srv23_5_6_packet(0, repository_path=repo_path, + filename=filename, lock=True) tc_queue.appendleft(command.pack_command_tuple()) elif op_code == "6" or op_code == 6: - LOGGER.info("Press h in the following input requests to send a command to display the" - "folder sturcture instead") + "folder structure instead") (repo_path, filename) = prompt_for_repo_filename() if repo_path == "" and filename == "h": tc_queue.append(("print", "Printing active file system")) @@ -554,9 +479,75 @@ def pack_service23_commands_into(tc_queue: Deque, op_code: int) -> Deque: command = generate_lock_file_packet(0, repository_path=repo_path, filename=filename, lock=False) tc_queue.appendleft(command.pack_command_tuple()) + 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 == "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 == "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": + tc_queue.append(("print", "Generating generic folder structure on AT91")) + generate_generic_folder_structure(tc_queue, init_ssc=0, iobc=False) + elif op_code == "C0I": + tc_queue.append(("print", "Generating generic folder structure on iOBC")) + generate_generic_folder_structure(tc_queue, init_ssc=0, iobc=True) + return tc_queue +def generate_generic_service_23_test(tc_queue: TcQueueT): + tc_queue.appendleft(("print", "Testing Service 23")) + + tc_queue.append(("print", "Create directory 'test'")) + command = generate_mkdir_srv23_9_packet(directory_name="test", repository_path="/", ssc=2300) + tc_queue.appendleft(command.pack_command_tuple()) + tc_queue.append(("print", "Create subdirectory 'subdir' in 'test'")) + command = generate_mkdir_srv23_9_packet(repository_path="test", ssc=2301, + directory_name="subdir") + tc_queue.appendleft(command.pack_command_tuple()) + + tc_queue.appendleft(("print", "Create test.bin")) + command = generate_create_file_srv23_1_packet( + filename="test.bin", repository_path="test/subdir", ssc=2302, + initial_data=bytearray([0x01, 0x00, 0x01, 0x00]), + max_size_of_app_data=1024) + tc_queue.appendleft(command.pack_command_tuple()) + + tc_queue.appendleft(("print", "Printing file structure.")) + command = generate_print_sd_card_packet(ssc=2300) + tc_queue.appendleft(command.pack_command_tuple()) + + tc_queue.appendleft(("print", "Clearing SD card")) + command = generate_clear_sd_card_packet(ssc=2301) + tc_queue.appendleft(command.pack_command_tuple()) + + tc_queue.appendleft(("print", "Printing file structure")) + command = generate_print_sd_card_packet(ssc=2302) + tc_queue.appendleft(command.pack_command_tuple()) + + # tc_queue.appendleft(("print", "Read data of test.bin")) + # command = generate_read_file_srv23_129_packet("test/subdir", "test.bin", ssc=2303) + # tc_queue.appendleft(command.pack_command_tuple()) + tc_queue.appendleft(("print", "Delete 'test.bin'")) + command = generate_rm_file_srv23_2_packet( + filename="test.bin", repository_path="test/subdir", ssc=2304) + tc_queue.appendleft(command.pack_command_tuple()) + tc_queue.appendleft(("print", "Delete 'subdir' directory")) + command = generate_rmdir_srv23_10_packet(directory_name="subdir", repository_path="test", + ssc=2305) + tc_queue.appendleft(command.pack_command_tuple()) + tc_queue.appendleft(("print", "Delete 'test' directory")) + command = generate_rmdir_srv23_10_packet(directory_name="test", repository_path="/", + ssc=2306) + tc_queue.appendleft(command.pack_command_tuple()) + + def calculate_allowed_file_data_size(max_app_data_size: int, filename: str, repository: str): # Subtract two because of '\0' terminators return max_app_data_size - len(filename) - len(repository) - 2 @@ -581,3 +572,14 @@ def prompt_for_repo_filename(): if input_confirmation in ['y', "yes", 1]: input_confirmation = True return repo_path, filename + + +def pack_generic_file_command_header(object_id: bytearray, first_path: str, second_path: str): + data_to_pack = bytearray(object_id) + data_to_pack += first_path.encode('utf-8') + # Add string terminator of repository paht + data_to_pack.append(0) + data_to_pack += second_path.encode('utf-8') + # Add string terminator of filename + data_to_pack.append(0) + return data_to_pack diff --git a/tm/obsw_tm_service_23.py b/tm/obsw_tm_service_23.py index 65cf912..fcc00a6 100644 --- a/tm/obsw_tm_service_23.py +++ b/tm/obsw_tm_service_23.py @@ -10,8 +10,10 @@ class Service23TM(PusTelemetry): self.repo_path = "" self.filename = "" self.data_start_idx = 0 - if self.get_subservice() == 132: - # self.unpack_repo_and_filename() + if self.get_subservice() == 4: + self.unpack_repo_and_filename() + elif self.get_subservice() == 132: + self.unpack_repo_and_filename() pass def unpack_repo_and_filename(self): @@ -30,5 +32,6 @@ class Service23TM(PusTelemetry): self.filename = filename_bytes.decode('utf-8') print(self.filename) self.data_start_idx = idx + 1 + break -- GitLab