80 lines
2.7 KiB
Python
80 lines
2.7 KiB
Python
# -*- 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: bytearray, 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
|