Something went wrong on our end
Forked from an inaccessible project.
-
Robin.Mueller authoredRobin.Mueller authored
obsw_tc_service20.py 4.84 KiB
# -*- coding: utf-8 -*-
"""
@file obsw_tc_service20.py
@brief PUS Service 20: Parameter management.
@author J. Gerhards
@date 30.06.2020
"""
import struct
from typing import Deque
import config.tmtcc_config as g
from tmtc_core.tc.obsw_pus_tc_base import PusTelecommand, TcQueueT
from tmtc_core.utility.obsw_logger import get_logger
from tc.obsw_tc_service200 import pack_mode_data
LOGGER = get_logger()
def pack_boolean_parameter_setting(object_id: bytearray, domain_id: int,
unique_id: int, parameter: bool, ssc: int):
"""
Generic function to pack a telecommand to tweak a boolean parameter
@param object_id:
@param domain_id:
@param unique_id:
@param parameter:
@param ssc:
@return:
"""
parameter_id = bytearray(4)
parameter_id[0] = domain_id
if unique_id > 255:
LOGGER.warning("Invalid unique ID, should be smaller than 255!")
return
parameter_id[1] = unique_id
parameter_id[2] = 0
parameter_id[3] = 0
data_to_pack = bytearray(object_id)
data_to_pack.extend(parameter_id)
# PTC and PFC for uint8_t according to CCSDS
ptc = 3
pfc = 4
rows = 1
columns = 1
data_to_pack.append(ptc)
data_to_pack.append(pfc)
data_to_pack.append(rows)
data_to_pack.append(columns)
data_to_pack.append(parameter)
return PusTelecommand(service=20, subservice=128, ssc=ssc, app_data=data_to_pack)
def pack_service20_test_into(tc_queue: Deque, called_externally: bool = False) -> Deque:
# parameter IDs
parameterID0 = 0
parameterID1 = 256
parameterID2 = 512
if called_externally is False:
tc_queue.appendleft(("print", "Testing Service 20"))
object_id = g.DUMMY_DEVICE_ID
# set mode normal
tc_queue.appendleft(("print", "Testing Service 20: Set Normal Mode"))
mode_data = pack_mode_data(object_id, 2, 0)
command = PusTelecommand(service=200, subservice=1, ssc=2000, app_data=mode_data)
tc_queue.appendleft(command.pack_command_tuple())
# test checking Load for uint32_t
tc_queue.appendleft(("print", "Testing Service 20: Load uint32_t"))
parameter_id = struct.pack(">I", parameterID0)
type_and_matrix_data = pack_type_and_matrix_data(3, 14, 1, 1)
parameter_data = struct.pack(">I", 42)
payload = object_id + parameter_id + type_and_matrix_data + parameter_data
command = PusTelecommand(service=20, subservice=128, ssc=2010, app_data=payload)
tc_queue.appendleft(command.pack_command_tuple())
# test checking Dump for uint32_t
tc_queue.appendleft(("print", "Testing Service 20: Dump uint32_t"))
parameter_id = struct.pack(">I", parameterID0)
payload = object_id + parameter_id
command = PusTelecommand(service=20, subservice=129, ssc=2020, app_data=payload)
tc_queue.appendleft(command.pack_command_tuple())
# test checking Load for int32_t
tc_queue.appendleft(("print", "Testing Service 20: Load int32_t"))
parameter_id = struct.pack(">I", parameterID1)
type_and_matrix_data = pack_type_and_matrix_data(4, 14, 1, 1)
parameter_data = struct.pack(">i", -42)
payload = object_id + parameter_id + type_and_matrix_data + parameter_data
command = PusTelecommand(service=20, subservice=128, ssc=2030, app_data=payload)
tc_queue.appendleft(command.pack_command_tuple())
# test checking Dump for int32_t
tc_queue.appendleft(("print", "Testing Service 20: Dump int32_t"))
parameter_id = struct.pack(">I", parameterID1)
payload = object_id + parameter_id
command = PusTelecommand(service=20, subservice=129, ssc=2040, app_data=payload)
tc_queue.appendleft(command.pack_command_tuple())
# test checking Load for float
tc_queue.appendleft(("print", "Testing Service 20: Load float"))
parameter_id = struct.pack(">I", parameterID2)
type_and_matrix_data = pack_type_and_matrix_data(5, 1, 1, 1)
parameter_data = struct.pack(">f", 4.2)
payload = object_id + parameter_id + type_and_matrix_data + parameter_data
command = PusTelecommand(service=20, subservice=128, ssc=2050, app_data=payload)
tc_queue.appendleft(command.pack_command_tuple())
# test checking Dump for float
tc_queue.appendleft(("print", "Testing Service 20: Dump float"))
parameter_id = struct.pack(">I", parameterID2)
payload = object_id + parameter_id
command = PusTelecommand(service=20, subservice=129, ssc=2060, app_data=payload)
tc_queue.appendleft(command.pack_command_tuple())
if called_externally is False:
tc_queue.appendleft(("export", "log/tmtc_log_service20.txt"))
return tc_queue
def pack_type_and_matrix_data(ptc, pfc, column, row):
data = bytearray(4)
data[0] = ptc
data[1] = pfc
data[2] = column
data[3] = row
return data
def pack_service23_commands_into(tc_queue: TcQueueT, op_code: int):
if op_code == 0:
pack_service20_test_into(tc_queue=tc_queue)