Merge remote-tracking branch 'origin/main' into bump-tmtccmd
All checks were successful
EIVE/-/pipeline/pr-main This commit looks good

This commit is contained in:
2023-11-29 15:12:48 +01:00
8 changed files with 387 additions and 147 deletions

View File

@ -42,11 +42,15 @@ class OpCode:
NORMAL_TX = "nml_tx"
NORMAL_MPA = "nml_mpa"
NORMAL_HPA = "nml_hpa"
NORMAL_CUSTOM = "nml_custom"
ENABLE_HK = "enable_hk"
DISABLE_HK = "disable_hk"
REQ_OS_HK = "hk_os"
DISABLE_ORDER_CHECKING = "disable_order_checking"
ENABLE_ORDER_CHECKING = "enable_order_checking"
UPDATE_I_UPPER_LIMIT = "update_i_upper_limit"
UPDATE_V_LOWER_LIMIT = "update_v_lower_limit"
UPDATE_V_UPPER_LIMIT = "update_v_upper_limit"
@ -69,6 +73,7 @@ class Info:
NORMAL_TX = f"{NORMAL}, TX on"
NORMAL_MPA = f"{NORMAL}, MPA on"
NORMAL_HPA = f"{NORMAL}, HPA on"
NORMAL_CUSTOM = f"{NORMAL}, Custom Channel Settings"
REQ_OS_HK = "Request One Shot HK"
ENABLE_HK = "Enable HK"
DISABLE_HK = "Disable HK"
@ -81,6 +86,8 @@ class Info:
INJECT_TX_TO_MPA_FAILURE = "Inject TX to MPA failure"
INJECT_MPA_TO_HPA_FAILURE = "Inject MPA to HPA failure"
INJECT_ALL_ON_FAILURE = "Inject all on failure"
DISABLE_ORDER_CHECKING = "Disable order checks"
ENABLE_ORDER_CHECKING = "Enable order checks"
class SetId(enum.IntEnum):
@ -167,6 +174,8 @@ class ParamId(enum.IntEnum):
INJECT_MPA_TO_HPA_FAILURE = 34
INJECT_ALL_ON_FAILURE = 35
DISABLE_ORDER_CHECK_CHANNELS = 40
class DevSelect(enum.IntEnum):
SSR_NEG_V = 0
@ -200,6 +209,7 @@ def add_pl_pcdu_cmds(defs: TmtcDefinitionWrapper):
oce.add(keys=OpCode.NORMAL_TX, info=Info.NORMAL_TX)
oce.add(keys=OpCode.NORMAL_MPA, info=Info.NORMAL_MPA)
oce.add(keys=OpCode.NORMAL_HPA, info=Info.NORMAL_HPA)
oce.add(keys=OpCode.NORMAL_CUSTOM, info=Info.NORMAL_CUSTOM)
oce.add(keys=OpCode.REQ_OS_HK, info=Info.REQ_OS_HK)
oce.add(keys=OpCode.ENABLE_HK, info=Info.ENABLE_HK)
oce.add(keys=OpCode.UPDATE_V_LOWER_LIMIT, info=Info.UPDATE_V_LOWER_LIMIT)
@ -226,6 +236,8 @@ def add_pl_pcdu_cmds(defs: TmtcDefinitionWrapper):
info="Inject failure in MPA to HPA transition",
)
oce.add(keys=OpCode.INJECT_ALL_ON_FAILURE, info="Inject failure in all on mode")
oce.add(keys=OpCode.DISABLE_ORDER_CHECKING, info=Info.DISABLE_ORDER_CHECKING)
oce.add(keys=OpCode.ENABLE_ORDER_CHECKING, info=Info.ENABLE_ORDER_CHECKING)
defs.add_service(CustomServiceList.PL_PCDU.value, "PL PCDU", oce)
@ -296,6 +308,14 @@ def pack_pl_pcdu_commands( # noqa C901: Complexity is okay here.
mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.HPA_ON),
)
if cmd_str == OpCode.NORMAL_CUSTOM:
pack_pl_pcdu_mode_cmd(
q=q,
info=Info.NORMAL_CUSTOM,
mode=Mode.NORMAL,
submode=prompt_custom_normal_submode(),
)
if cmd_str == OpCode.REQ_OS_HK:
q.add_log_cmd(f"PL PCDU: {Info.REQ_OS_HK}")
q.add_pus_tc(
@ -303,6 +323,26 @@ def pack_pl_pcdu_commands( # noqa C901: Complexity is okay here.
sid=make_sid(object_id=PL_PCDU_ID, set_id=SetId.ADC)
)
)
if cmd_str == OpCode.DISABLE_ORDER_CHECKING:
q.add_log_cmd(Info.DISABLE_ORDER_CHECKING)
q.add_pus_tc(
create_load_param_cmd(
create_scalar_boolean_parameter(
PL_PCDU_ID, 0, ParamId.DISABLE_ORDER_CHECK_CHANNELS, True
)
)
)
if cmd_str == OpCode.ENABLE_ORDER_CHECKING:
q.add_log_cmd(Info.ENABLE_ORDER_CHECKING)
q.add_pus_tc(
create_load_param_cmd(
create_scalar_boolean_parameter(
PL_PCDU_ID, 0, ParamId.DISABLE_ORDER_CHECK_CHANNELS, False
)
)
)
if cmd_str == OpCode.UPDATE_I_UPPER_LIMIT:
q.add_log_cmd(Info.UPDATE_I_UPPER_LIMIT)
print("Select device to update lower current limit for: ")
@ -339,8 +379,6 @@ def pack_pl_pcdu_commands( # noqa C901: Complexity is okay here.
create_scalar_double_parameter(PL_PCDU_ID, 0, param_id, new_param_value)
)
)
if cmd_str == OpCode.SWITCH_HPA_ON_PROC:
hpa_on_procedure(q)
if cmd_str == OpCode.INJECT_ALL_ON_FAILURE:
pack_failure_injection_cmd(
q=q,
@ -649,3 +687,31 @@ def dev_select_to_upper_u_update_param_id(dev_select: DevSelect) -> ParamId:
if param_id is None:
raise ValueError("invalid parameter ID")
return param_id
def prompt_custom_normal_submode() -> int:
print("Prompting custom submode.")
submode = 0
def prompt_channel(submode: int, channel_str: str, mask: NormalSubmodesMask) -> int:
while True:
channel_on = input(f" {channel_str} ON? [y/n]: ")
if channel_on in ["y", "1", "yes"]:
submode |= 1 << mask
elif channel_on in ["n", "0", "no"]:
pass
else:
_LOGGER.warning("invalid input, try again")
continue
break
return submode
submode = prompt_channel(
submode, "SSR", NormalSubmodesMask.SOLID_STATE_RELAYS_ADC_ON
)
submode = prompt_channel(submode, "DRO", NormalSubmodesMask.DRO_ON)
submode = prompt_channel(submode, "X8", NormalSubmodesMask.X8_ON)
submode = prompt_channel(submode, "TX", NormalSubmodesMask.TX_ON)
submode = prompt_channel(submode, "MPA", NormalSubmodesMask.MPA_ON)
submode = prompt_channel(submode, "HPA", NormalSubmodesMask.HPA_ON)
return submode