# -*- coding: utf-8 -*- """ @file solar_array_deployment.py @brief The test function in this file simply returns a command which triggers the solar array deployment. @author J. Meier @date 15.02.2021 """ import struct from config.definitions import CustomServiceList from config.object_ids import SOLAR_ARRAY_DEPLOYMENT_ID from tmtccmd.config.tmtc import ( tmtc_definitions_provider, TmtcDefinitionWrapper, OpCodeEntry, ) from tmtccmd.tc import service_provider from tmtccmd.tc.pus_8_funccmd import make_fsfw_action_cmd from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd import get_console_logger LOGGER = get_console_logger() class OpCodes: MANUAL_DEPLOYMENT = "man_depl" class Info: MANUAL_DEPLOYMENT = "Manual Solar Array Deployment" class ActionIds: MANUAL_DEPLOYMENT = 5 @tmtc_definitions_provider def pack_sa_depl_cmds(defs: TmtcDefinitionWrapper): oce = OpCodeEntry() oce.add(keys=OpCodes.MANUAL_DEPLOYMENT, info=Info.MANUAL_DEPLOYMENT) defs.add_service( name=CustomServiceList.SA_DEPLYOMENT, info="Solar Array Deployment", op_code_entry=oce, ) @service_provider(CustomServiceList.SA_DEPLYOMENT) def pack_solar_array_deployment_test_into(p: ServiceProviderParams): q = p.queue_helper user_data = bytearray() while True: burn_time = int(input("Please specify burn time in seconds [0-120 secs]: ")) if burn_time < 0 or burn_time > 120: LOGGER.warning(f"Invalid burn time {burn_time}") continue user_data.extend(struct.pack("!I", burn_time)) break while True: dry_run = input("Dry run? [y/n]: ") if dry_run in ["yes", "y", "1"]: dry_run = 1 elif dry_run in ["no", "n", "0"]: dry_run = 0 else: LOGGER.warning("Invalid input for dry run parameter") continue user_data.append(dry_run) break if dry_run == 1: dry_run_str = " as dry run" else: dry_run_str = "" q.add_log_cmd(f"Testing S/A Deployment with burn time {burn_time}{dry_run_str}") command = make_fsfw_action_cmd( SOLAR_ARRAY_DEPLOYMENT_ID, ActionIds.MANUAL_DEPLOYMENT, user_data ) q.add_pus_tc(command)