81 lines
2.3 KiB
Python
81 lines
2.3 KiB
Python
|
# -*- 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()
|
||
|
burn_time = 0
|
||
|
dry_run = 0
|
||
|
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)
|