# -*- coding: utf-8 -*- """ @file ploc_mpsoc.py @brief Tests for commanding the MPSoC of the PLOC. The MPSoC is programmed by the ILH. @author J. Meier @date 06.03.2021 """ import struct from tmtccmd.config.definitions import QueueCommands from tmtccmd.tc.packer import TcQueueT from spacepackets.ecss.tc import PusTelecommand class PlocTestProcedure: """ @brief Use this class to define the tests to perform for the PLOC. @details Setting all to True will run all tests. Setting all to False will only run the tests set to True. """ all = False test_tc_mem_write = False test_tc_mem_read = True class PlocActionIds: tc_mem_write = bytearray([0x0, 0x0, 0x0, 0x1]) tc_mem_read = bytearray([0x0, 0x0, 0x0, 0x2]) class PlocReplyIds: tm_mem_read_report = 6 def pack_ploc_mpsoc_test_into(object_id: bytearray, tc_queue: TcQueueT) -> TcQueueT: tc_queue.appendleft( (QueueCommands.PRINT, "Testing PLOC MPSoC with object id: 0x" + object_id.hex()) ) if PlocTestProcedure.all or PlocTestProcedure.test_tc_mem_write: tc_queue.appendleft((QueueCommands.PRINT, "PLOC: TC Mem Write Test")) memory_address = int(input("PLOC Tc Mem Write: Type memory address: 0x"), 16) memory_data = int(input("PLOC Tc Mem Write: Type memory data: 0x"), 16) command = generate_write_mem_command( object_id, struct.pack("!I", memory_address), memory_data ) command = PusTelecommand(service=8, subservice=128, ssc=23, app_data=command) tc_queue.appendleft(command.pack_command_tuple()) if PlocTestProcedure.all or PlocTestProcedure.test_tc_mem_read: tc_queue.appendleft((QueueCommands.PRINT, "PLOC: TC Mem Read Test")) memory_address = int(input("PLOC Tc Mem Read: Type memory address: 0x"), 16) command = ( object_id + PlocActionIds.tc_mem_read + struct.pack("!I", memory_address) ) command = PusTelecommand(service=8, subservice=128, ssc=24, app_data=command) tc_queue.appendleft(command.pack_command_tuple()) return tc_queue def generate_write_mem_command( object_id: bytearray, memory_address: bytes, memory_data: int ) -> bytearray: """This function generates the command to write to a memory address within the PLOC @param object_id The object id of the PlocHandler @param memory_address The PLOC memory address where to write to. @param memory_data The data to write to the memory address specified by the bytearray memory_address. """ command = ( object_id + PlocActionIds.tc_mem_write + memory_address + struct.pack("!I", memory_data) ) return command