# -*- coding: utf-8 -*- """Command sequence to test the HeaterHandler @author J. Meier @date 30.01.2021 """ import enum from config.definitions import CustomServiceList from tmtccmd.config.definitions import QueueCommands, ServiceOpCodeDictT from tmtccmd.tc.service_8_functional_cmd import generate_action_command from tmtccmd.config.globals import add_service_op_code_entry, add_op_code_entry from tmtccmd.tc.packer import TcQueueT from spacepackets.ecss.tc import PusTelecommand class SwitchNumbers: HEATER_0 = 0 HEATER_1 = 1 HEATER_2 = 2 HEATER_3 = 3 HEATER_4 = 4 HEATER_5 = 5 HEATER_6 = 6 HEATER_7 = 7 NUMBER_OF_SWITCHES = 8 class OpCodes: HEATER_CMD = ["0", "heater-cmd"] class Info: HEATER_CMD = "Heater Switch Command" class ActionIds(enum.IntEnum): SWITCH_HEATER = 0 def add_heater_cmds(cmd_dict: ServiceOpCodeDictT): op_code_dict = dict() add_op_code_entry( op_code_dict=op_code_dict, keys=OpCodes.HEATER_CMD, info=Info.HEATER_CMD ) add_service_op_code_entry( srv_op_code_dict=cmd_dict, name=CustomServiceList.HEATER.value, info="Heater Device", op_code_entry=op_code_dict, ) def pack_heater_cmds(object_id: bytearray, tc_queue: TcQueueT): tc_queue.appendleft((QueueCommands.PRINT, "Heater Switching")) while True: heater_number = input("Type number of heater to switch [0-7]: ") if not heater_number.isdigit(): print("Heater number not a digit") continue heater_number = int(heater_number) if heater_number >= SwitchNumbers.NUMBER_OF_SWITCHES or heater_number < 0: print("Invalid heater switch number") continue break while True: action = input("Turn switch on or off? (0 - off, 1 - on): ") if not action.isdigit(): print("Switch action not valid") continue action = int(action) if action != 0 and action != 1: print("Invalid action defined. Must be 0 (off) or 1 (on") continue break if action == 1: act_str = "on" else: act_str = "off" debug_string = f"Switching heater {heater_number} {act_str}" tc_queue.appendleft((QueueCommands.PRINT, debug_string)) command = pack_switch_heater_command(object_id, heater_number, action) tc_queue.appendleft(command.pack_command_tuple()) def pack_switch_heater_command( object_id: bytes, switch_nr: int, switch_action: int ) -> PusTelecommand: """Function to generate the command switch a heater @param object_id The object id of the HeaterHandler object. @param switch_nr The switch number identifying the heater to switch @param switch_action Action to perform. 0 - Sets switch off, 1 - Sets switch on. """ command = bytearray() command.append(switch_nr) command.append(switch_action) return generate_action_command( object_id=object_id, action_id=ActionIds.SWITCH_HEATER, app_data=command )