# -*- coding: utf-8 -*- """ @file obsw_tc_service3.py @brief PUS Service 3: Housekeeping Service. @author R. Mueller @date 02.05.2020 """ import struct from typing import Deque from tmtc_core.tc.obsw_pus_tc_base import PusTelecommand import config.obsw_config as g def make_sid(object_id: bytearray, set_id: int) -> bytearray: set_id_bytearray = struct.pack(">I", set_id) return object_id + set_id_bytearray def make_interval(interval_seconds: float) -> bytearray: return bytearray(struct.pack(">f", interval_seconds)) # adding custom defintion to hk using test pool variables sid_thermalsensor = make_sid(g.THERMAL_SENSOR_DEVICE_ID, 1) number_of_parameters = struct.pack('>B', 5) sid_internal_err_rprtr = make_sid(g.INTERNAL_ERROR_REPORTER_ID, 0) def pack_service3_test_into(tc_queue: Deque) -> Deque: tc_queue.appendleft(("print", "Testing Service 3")) # Predefined packet testing pack_test_device_test(tc_queue) pack_custom_tests(tc_queue) pack_internal_error_reporter_tests(tc_queue) tc_queue.appendleft(("export", "log/tmtc_log_service3.txt")) return tc_queue def pack_test_device_test(tc_queue: Deque): pass def pack_custom_tests(tc_queue: Deque): tc_queue.appendleft(("print", "Generate one thermal sensor packet: ")) command = PusTelecommand(service=3, subservice=27, ssc=3100, app_data=sid_thermalsensor) tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(("print", "Enabling periodic thermal sensor packet generation: ")) command = PusTelecommand(service=3, subservice=5, ssc=3101, app_data=sid_thermalsensor) tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(("wait", 4)) new_interval = 1.2 interval_app_data = sid_thermalsensor + make_interval(new_interval) tc_queue.appendleft(("print", "Setting interval to 1.2 second: ")) command = PusTelecommand(service=3, subservice=31, ssc=3102, app_data=interval_app_data) tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(("wait", 3)) tc_queue.appendleft(("print", "Disabling periodic thermal sensor packet generation: ")) command = PusTelecommand(service=3, subservice=6, ssc=3103, app_data=sid_thermalsensor) tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(("print", "Generating structure report for thermal sensor packet: ")) command = PusTelecommand(service=3, subservice=9, ssc=3104, app_data=sid_thermalsensor) tc_queue.appendleft(command.pack_command_tuple()) def pack_internal_error_reporter_tests(tc_queue: Deque): tc_queue.appendleft(("print", "Testing internal error reporter (diagnostic): ")) new_interval = 3.0 interval_app_data = sid_internal_err_rprtr + make_interval(new_interval) tc_queue.appendleft(("print", "Setting internal error reporter interval to 3.0 second: ")) command = PusTelecommand(service=3, subservice=32, ssc=3105, app_data=interval_app_data) tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(("print", "Enabling internal error reporter generation: ")) command = PusTelecommand(service=3, subservice=7, ssc=3106, app_data=sid_internal_err_rprtr) tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(("wait", 3)) tc_queue.appendleft(("print", "Disabling internal error reporter generation: ")) command = PusTelecommand(service=3, subservice=8, ssc=3107, app_data=sid_internal_err_rprtr) tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(("print", "Generate one shot internal error report: ")) command = PusTelecommand(service=3, subservice=28, ssc=3108, app_data=sid_internal_err_rprtr) tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(("print", "Generate structure report: ")) command = PusTelecommand(service=3, subservice=11, ssc=3109, app_data=sid_internal_err_rprtr) tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(("print", "Enabling internal error reporter generation: ")) command = PusTelecommand(service=3, subservice=7, ssc=3106, app_data=sid_internal_err_rprtr) tc_queue.appendleft(command.pack_command_tuple()) new_interval = 8.0 interval_app_data = sid_internal_err_rprtr + make_interval(new_interval) tc_queue.appendleft(("print", "Setting internal error reporter interval to 8.0 second: ")) command = PusTelecommand(service=3, subservice=32, ssc=3107, app_data=interval_app_data) tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(("print", "Generate structure report: ")) command = PusTelecommand(service=3, subservice=11, ssc=3110, app_data=sid_internal_err_rprtr) tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(("print", "Disabling internal error reporter generation: ")) command = PusTelecommand(service=3, subservice=8, ssc=3111, app_data=sid_internal_err_rprtr) tc_queue.appendleft(command.pack_command_tuple())