import argparse from typing import Union, Dict, Tuple from tmtccmd.config.definitions import ServiceOpCodeDictT from tmtccmd.tm.service_3_base import Service3Base from tmtccmd.tc.definitions import TcQueueT from tmtccmd.com_if.com_interface_base import CommunicationInterface from tmtccmd.core.backend import TmTcHandler from tmtccmd.config.hook import TmTcHookBase from tmtccmd.utility.tmtc_printer import TmTcPrinter from tmtccmd.config.globals import ( OpCodeDictKeys, add_op_code_entry, add_service_op_code_entry, ) from config.object_ids import RW1_ID from config.definitions import CustomServiceList class EiveHookObject(TmTcHookBase): def get_service_op_code_dictionary(self) -> ServiceOpCodeDictT: from tmtccmd.config.globals import get_default_service_op_code_dict service_op_code_dict = get_default_service_op_code_dict() get_eive_service_op_code_dict(service_op_code_dict=service_op_code_dict) return service_op_code_dict def get_json_config_file_path(self) -> str: """The user can specify a path and filename for the JSON configuration file by overriding this function. :return: """ return "config/tmtc_config.json" def add_globals_pre_args_parsing(self, gui: bool = False): from config.globals_config import set_globals_pre_args_parsing set_globals_pre_args_parsing(gui=gui) def add_globals_post_args_parsing(self, args: argparse.Namespace): from config.globals_config import add_globals_post_args_parsing add_globals_post_args_parsing( args=args, json_cfg_path=self.get_json_config_file_path() ) def assign_communication_interface( self, com_if_key: str, tmtc_printer: TmTcPrinter ) -> Union[CommunicationInterface, None]: from tmtccmd.config.com_if import create_communication_interface_default return create_communication_interface_default( com_if_key=com_if_key, tmtc_printer=tmtc_printer, json_cfg_path=self.get_json_config_file_path(), space_packet_ids=(0x0865,), ) def perform_mode_operation(self, tmtc_backend: TmTcHandler, mode: int): from config.custom_mode_op import custom_mode_operation custom_mode_operation(mode=mode, tmtc_backend=tmtc_backend) def pack_service_queue(self, service: int, op_code: str, service_queue: TcQueueT): from pus_tc.tc_packer_hook import pack_service_queue_user pack_service_queue_user( service=service, op_code=op_code, service_queue=service_queue ) def get_object_ids(self) -> Dict[bytes, list]: from config.object_ids import get_object_ids return get_object_ids() @staticmethod def handle_service_8_telemetry( object_id: bytes, action_id: int, custom_data: bytearray ) -> Tuple[list, list]: from pus_tm.service_8_hook import user_analyze_service_8_data return user_analyze_service_8_data( object_id=object_id, action_id=action_id, custom_data=custom_data ) @staticmethod def handle_service_3_housekeeping( object_id: bytes, set_id: int, hk_data: bytearray, service3_packet: Service3Base ) -> Tuple[list, list, bytearray, int]: from pus_tm.hk_handling import handle_user_hk_packet return handle_user_hk_packet( object_id=object_id, set_id=set_id, hk_data=hk_data, service3_packet=service3_packet, ) @staticmethod def handle_service_5_event( object_id: bytes, event_id: int, param_1: int, param_2: int ) -> str: if object_id == RW1_ID: if event_id == 1: return "" return "" def get_eive_service_op_code_dict(service_op_code_dict: ServiceOpCodeDictT): from pus_tc.pdu1 import Pdu1OpCodes from pus_tc.pdu2 import Pdu2OpCodes from pus_tc.p60dock import P60OpCodes from gomspace.gomspace_common import GomspaceOpCodes from pus_tc.gps import GpsOpCodes op_code_dict = { "reboot": ("Reboot with Prompt", {OpCodeDictKeys.TIMEOUT: 2.0}), "reboot_self": ("Reboot Self", {OpCodeDictKeys.TIMEOUT: 4.0}), "reboot_0_0": ("Reboot 0 0", {OpCodeDictKeys.TIMEOUT: 4.0}), "reboot_0_1": ("Reboot 0 1", {OpCodeDictKeys.TIMEOUT: 4.0}), "reboot_1_0": ("Reboot 1 0", {OpCodeDictKeys.TIMEOUT: 4.0}), "reboot_1_1": ("Reboot 1 1", {OpCodeDictKeys.TIMEOUT: 4.0}), } service_tuple = ("Core Controller", op_code_dict) service_op_code_dict[CustomServiceList.CORE.value] = service_tuple op_code_dict = { GpsOpCodes.RESET_GNSS.value: ("Reset GPS", {OpCodeDictKeys.TIMEOUT: 2.0}) } service_tuple = ("GPS 0", op_code_dict) service_op_code_dict[CustomServiceList.GPS_0.value] = service_tuple service_op_code_dict[CustomServiceList.GPS_1.value] = service_tuple op_code_dict = { "0": ("ACU: Tests", {OpCodeDictKeys.TIMEOUT: 2.0}), "51": ("ACU: Print channel statistics", {OpCodeDictKeys.TIMEOUT: 2.0}), } service_tuple = ("ACU Devices", op_code_dict) service_op_code_dict[CustomServiceList.ACU.value] = service_tuple op_code_dict = { "0": ("TMP1075 Tests", {OpCodeDictKeys.TIMEOUT: 2.2}), } service_tuple = ("TMP1075 1", op_code_dict) service_op_code_dict[CustomServiceList.TMP1075_1.value] = service_tuple service_tuple = ("TMP1075 2", op_code_dict) service_op_code_dict[CustomServiceList.TMP1075_2.value] = service_tuple op_code_dict_srv_p60 = { "0": ("P60 Tests", {OpCodeDictKeys.TIMEOUT: 2.0}), P60OpCodes.STACK_3V3_ON.value: ( "P60 Dock: Turn stack 3V3 on", {OpCodeDictKeys.TIMEOUT: 2.0}, ), P60OpCodes.STACK_3V3_OFF.value: ( "P60 Dock: Turn stack 3V3 off", {OpCodeDictKeys.TIMEOUT: 2.0}, ), GomspaceOpCodes.PRINT_SWITCH_V_I.value: ( "P60 Dock: Print Switches, Voltages, Currents", {OpCodeDictKeys.TIMEOUT: 2.0}, ), } service_p60_tuple = ("P60 Device", op_code_dict_srv_p60) op_code_dict_srv_pdu1 = { "0": ("PDU1 Tests", {OpCodeDictKeys.TIMEOUT: 2.0}), Pdu1OpCodes.TCS_BOARD_ON.value: ( "PDU1: Turn TCS board on", {OpCodeDictKeys.TIMEOUT: 2.0}, ), Pdu1OpCodes.TCS_BOARD_OFF.value: ( "PDU1: Turn TCS board off", {OpCodeDictKeys.TIMEOUT: 2.0}, ), Pdu1OpCodes.STAR_TRACKER_ON.value: ( "PDU1: Turn star tracker on", {OpCodeDictKeys.TIMEOUT: 2.0}, ), Pdu1OpCodes.STAR_TRACKER_OFF.value: ( "PDU1: Turn star tracker off", {OpCodeDictKeys.TIMEOUT: 2.0}, ), Pdu1OpCodes.SUS_NOMINAL_ON.value: ( "PDU1: Turn SUS nominal on", {OpCodeDictKeys.TIMEOUT: 2.0}, ), Pdu1OpCodes.SUS_NOMINAL_OFF.value: ( "PDU1: Turn SUS nominal off", {OpCodeDictKeys.TIMEOUT: 2.0}, ), Pdu1OpCodes.ACS_A_SIDE_ON.value: ( "PDU1: Turn ACS Side A on", {OpCodeDictKeys.TIMEOUT: 2.0}, ), Pdu1OpCodes.ACS_A_SIDE_OFF.value: ( "PDU1: Turn ACS Side A off", {OpCodeDictKeys.TIMEOUT: 2.0}, ), Pdu1OpCodes.SYRLINKS_ON.value: ( "PDU1: Turn Syrlinks on", {OpCodeDictKeys.TIMEOUT: 2.0}, ), Pdu1OpCodes.SYRLINKS_OFF.value: ( "PDU1: Turn Syrlinks off", {OpCodeDictKeys.TIMEOUT: 2.0}, ), GomspaceOpCodes.PRINT_SWITCH_V_I.value: ( "PDU1: Print Switches, Voltages, Currents", {OpCodeDictKeys.TIMEOUT: 2.0}, ), } service_pdu1_tuple = ("PDU1 Device", op_code_dict_srv_pdu1) op_code_dict = dict() add_op_code_entry( op_code_dict=op_code_dict, keys="0", info="PDU2 Tests", options={OpCodeDictKeys.TIMEOUT: 2.0}, ) add_op_code_entry( op_code_dict=op_code_dict, keys=Pdu2OpCodes.ACS_SIDE_B_ON.value, info="PDU2: Turn ACS Side B on", options={OpCodeDictKeys.TIMEOUT: 2.0}, ) add_op_code_entry( op_code_dict=op_code_dict, keys=Pdu2OpCodes.ACS_SIDE_B_OFF.value, info="PDU2: Turn ACS Side B off", options={OpCodeDictKeys.TIMEOUT: 2.0}, ) add_op_code_entry( op_code_dict=op_code_dict, keys=Pdu2OpCodes.SUS_REDUNDANT_ON.value, info="PDU2: Turn SUS redundant on", options={OpCodeDictKeys.TIMEOUT: 2.0}, ) add_op_code_entry( op_code_dict=op_code_dict, keys=Pdu2OpCodes.SUS_REDUNDANT_OFF.value, info="PDU2: Turn SUS redundant off", options={OpCodeDictKeys.TIMEOUT: 2.0}, ) add_op_code_entry( op_code_dict=op_code_dict, keys=Pdu2OpCodes.RW_ON.value, info="PDU2: Turn reaction wheels on", options={OpCodeDictKeys.TIMEOUT: 2.0}, ) add_op_code_entry( op_code_dict=op_code_dict, keys=Pdu2OpCodes.RW_OFF.value, info="PDU2: Turn reaction wheels off", options={OpCodeDictKeys.TIMEOUT: 2.0}, ) add_op_code_entry( op_code_dict=op_code_dict, keys=GomspaceOpCodes.PRINT_SWITCH_V_I.value, info="PDU2: Print Switches, Voltages, Currents", options={OpCodeDictKeys.TIMEOUT: 2.0}, ) add_service_op_code_entry( srv_op_code_dict=service_op_code_dict, name="pdu2", info="PDU2 Device", op_code_entry=op_code_dict, ) # service_pdu2_tuple = ("PDU2 Device", op_code_dict_srv_pdu2) op_code_dict_srv_heater = { "0": ("Heater Tests", {OpCodeDictKeys.TIMEOUT: 2.0}), } service_heater_tuple = ("Heater Device", op_code_dict_srv_heater) op_code_dict_srv_imtq = { "0": ("IMTQ Tests All", {OpCodeDictKeys.TIMEOUT: 2.0}), "1": ("IMTQ perform pos X self test", {OpCodeDictKeys.TIMEOUT: 2.0}), "2": ("IMTQ perform neg X self test", {OpCodeDictKeys.TIMEOUT: 2.0}), "3": ("IMTQ perform pos Y self test", {OpCodeDictKeys.TIMEOUT: 2.0}), "4": ("IMTQ perform neg Y self test", {OpCodeDictKeys.TIMEOUT: 2.0}), "5": ("IMTQ perform pos Z self test", {OpCodeDictKeys.TIMEOUT: 2.0}), "6": ("IMTQ perform neg Z self test", {OpCodeDictKeys.TIMEOUT: 2.0}), "7": ("IMTQ command dipole", {OpCodeDictKeys.TIMEOUT: 2.0}), "8": ("IMTQ get commanded dipole", {OpCodeDictKeys.TIMEOUT: 2.0}), } service_imtq_tuple = ("IMTQ Device", op_code_dict_srv_imtq) op_code_dict_srv_rw = { "0": ("Reaction Wheel: Run all commands", {OpCodeDictKeys.TIMEOUT: 2.0}), "1": ("Reaction Wheel: Set speed", {OpCodeDictKeys.TIMEOUT: 2.0}), "2": ("Reaction Wheel: Set mode on", {OpCodeDictKeys.TIMEOUT: 2.0}), "3": ("Reaction Wheel: Set mode normal", {OpCodeDictKeys.TIMEOUT: 2.0}), "4": ("Reaction Wheel: Set mode off", {OpCodeDictKeys.TIMEOUT: 2.0}), "5": ( "Reaction Wheel: Send get-telemetry-command", {OpCodeDictKeys.TIMEOUT: 2.0}, ), } service_rw_tuple = ("Reaction Wheel", op_code_dict_srv_rw) op_code_dict_srv_rad_sensor = { "0": ("Radiation Sensor: Set mode on", {OpCodeDictKeys.TIMEOUT: 2.0}), "1": ("Radiation Sensor: Set mode normal", {OpCodeDictKeys.TIMEOUT: 2.0}), "2": ("Radiation Sensor: Set mode off", {OpCodeDictKeys.TIMEOUT: 2.0}), } service_rad_sensor_tuple = ("Radiation Sensor", op_code_dict_srv_rad_sensor) op_code_dict_ploc_mem_dumper = { "0": ("PLOC Memory Dumper: MRAM dump", {OpCodeDictKeys.TIMEOUT: 2.0}), } service_ploc_memory_dumper_tuple = ( "Radiation Sensor", op_code_dict_ploc_mem_dumper, ) op_code_dict_srv_ploc_supv = { "0": ("PLOC Supervisor: Set mode on", {OpCodeDictKeys.TIMEOUT: 2.0}), "1": ("PLOC Supervisor: Set mode normal", {OpCodeDictKeys.TIMEOUT: 2.0}), "2": ("PLOC Supervisor: Set mode off", {OpCodeDictKeys.TIMEOUT: 2.0}), "3": ("PLOC Supervisor: Get HK Report", {OpCodeDictKeys.TIMEOUT: 2.0}), "4": ("PLOC Supervisor: Restart MPSoC", {OpCodeDictKeys.TIMEOUT: 2.0}), "5": ("PLOC Supervisor: Start MPSoC", {OpCodeDictKeys.TIMEOUT: 2.0}), "6": ("PLOC Supervisor: Shutdown MPSoC", {OpCodeDictKeys.TIMEOUT: 2.0}), "7": ( "PLOC Supervisor: Select MPSoC boot image", {OpCodeDictKeys.TIMEOUT: 2.0}, ), "8": ("PLOC Supervisor: Set max restart tries", {OpCodeDictKeys.TIMEOUT: 2.0}), "9": ("PLOC Supervisor: Reset MPSoC", {OpCodeDictKeys.TIMEOUT: 2.0}), "10": ("PLOC Supervisor: Set time reference", {OpCodeDictKeys.TIMEOUT: 2.0}), "11": ("PLOC Supervisor: Set boot timeout", {OpCodeDictKeys.TIMEOUT: 2.0}), "12": ("PLOC Supervisor: Disable Hk", {OpCodeDictKeys.TIMEOUT: 2.0}), "13": ( "PLOC Supervisor: Request boot status report", {OpCodeDictKeys.TIMEOUT: 2.0}, ), "14": ("PLOC Supervisor: Update available", {OpCodeDictKeys.TIMEOUT: 2.0}), "15": ("PLOC Supervisor: Watchdogs enable", {OpCodeDictKeys.TIMEOUT: 2.0}), "16": ( "PLOC Supervisor: Watchdog Configure Timeout", {OpCodeDictKeys.TIMEOUT: 2.0}, ), "17": ("PLOC Supervisor: Enable latchup alert", {OpCodeDictKeys.TIMEOUT: 2.0}), "18": ("PLOC Supervisor: Disable latchup alert", {OpCodeDictKeys.TIMEOUT: 2.0}), "19": ("PLOC Supervisor: Auto calibrate alert", {OpCodeDictKeys.TIMEOUT: 2.0}), "20": ("PLOC Supervisor: Set alert limit", {OpCodeDictKeys.TIMEOUT: 2.0}), "21": ("PLOC Supervisor: Set alert irq filter", {OpCodeDictKeys.TIMEOUT: 2.0}), "22": ("PLOC Supervisor: Set ADC sweep period", {OpCodeDictKeys.TIMEOUT: 2.0}), "23": ( "PLOC Supervisor: Set ADC enabled channels", {OpCodeDictKeys.TIMEOUT: 2.0}, ), "24": ( "PLOC Supervisor: Set ADC window and stride", {OpCodeDictKeys.TIMEOUT: 2.0}, ), "25": ("PLOC Supervisor: Set ADC threshold", {OpCodeDictKeys.TIMEOUT: 2.0}), "26": ( "PLOC Supervisor: Request latchup status report", {OpCodeDictKeys.TIMEOUT: 2.0}, ), "27": ("PLOC Supervisor: Copy ADC data to MRAM", {OpCodeDictKeys.TIMEOUT: 2.0}), "28": ( "PLOC Supervisor: Enable/Disable NVM0/1/3", {OpCodeDictKeys.TIMEOUT: 2.0}, ), "29": ("PLOC Supervisor: Select NVM", {OpCodeDictKeys.TIMEOUT: 2.0}), "30": ("PLOC Supervisor: Run auto EM tests", {OpCodeDictKeys.TIMEOUT: 2.0}), "31": ("PLOC Supervisor: MRAM Wipe", {OpCodeDictKeys.TIMEOUT: 2.0}), "33": ("PLOC Supervisor: Print CPU stats", {OpCodeDictKeys.TIMEOUT: 2.0}), "34": ("PLOC Supervisor: Set debug verbosity", {OpCodeDictKeys.TIMEOUT: 2.0}), "35": ("PLOC Supervisor: Set GPIO", {OpCodeDictKeys.TIMEOUT: 2.0}), "36": ("PLOC Supervisor: Read GPIO", {OpCodeDictKeys.TIMEOUT: 2.0}), "37": ("PLOC Supervisor: Restart supervisor", {OpCodeDictKeys.TIMEOUT: 2.0}), "38": ( "PLOC Supervisor: Factory reset clear all", {OpCodeDictKeys.TIMEOUT: 2.0}, ), "39": ( "PLOC Supervisor: Factory reset clear mirror entries", {OpCodeDictKeys.TIMEOUT: 2.0}, ), "40": ( "PLOC Supervisor: Factory reset clear circular entries", {OpCodeDictKeys.TIMEOUT: 2.0}, ), "41": ("PLOC Supervisor: CAN loopback test", {OpCodeDictKeys.TIMEOUT: 2.0}), } service_ploc_supv_tuple = ("PLOC Supervisor", op_code_dict_srv_ploc_supv) op_code_dict_srv_ploc_updater = { "0": ( "Ploc Updater: Update uboot on partition A", {OpCodeDictKeys.TIMEOUT: 2.0}, ), "1": ( "Ploc Updater: Update bitstream on partition A", {OpCodeDictKeys.TIMEOUT: 2.0}, ), "2": ( "Ploc Updater: Update linux on partition A", {OpCodeDictKeys.TIMEOUT: 2.0}, ), "3": ( "Ploc Updater: Update application on partition A", {OpCodeDictKeys.TIMEOUT: 2.0}, ), "4": ( "Ploc Updater: Update uboot on partition B", {OpCodeDictKeys.TIMEOUT: 2.0}, ), "5": ( "Ploc Updater: Update bitstream on partition B", {OpCodeDictKeys.TIMEOUT: 2.0}, ), "6": ( "Ploc Updater: Update linux on partition B", {OpCodeDictKeys.TIMEOUT: 2.0}, ), "7": ( "Ploc Updater: Update application on partition B", {OpCodeDictKeys.TIMEOUT: 2.0}, ), } service_ploc_updater_tuple = ("Ploc Updater", op_code_dict_srv_ploc_updater) op_code_dict_srv_star_tracker = { "0": ("Star Tracker: Mode On", {OpCodeDictKeys.TIMEOUT: 2.0}), "1": ("Star Tracker: Mode Normal", {OpCodeDictKeys.TIMEOUT: 2.0}), "2": ("Star Tracker: Mode Off", {OpCodeDictKeys.TIMEOUT: 2.0}), "3": ("Star Tracker: Mode Raw", {OpCodeDictKeys.TIMEOUT: 2.0}), "4": ("Star Tracker: Ping", {OpCodeDictKeys.TIMEOUT: 2.0}), "5": ( "Star Tracker: Switch to bootloader program", {OpCodeDictKeys.TIMEOUT: 2.0}, ), "6": ("Star Tracker: Request temperature", {OpCodeDictKeys.TIMEOUT: 2.0}), "7": ("Star Tracker: Request version", {OpCodeDictKeys.TIMEOUT: 2.0}), "8": ("Star Tracker: Request interface", {OpCodeDictKeys.TIMEOUT: 2.0}), "9": ("Star Tracker: Request power", {OpCodeDictKeys.TIMEOUT: 2.0}), "10": ("Star Tracker: Subscribe to telemetry", {OpCodeDictKeys.TIMEOUT: 2.0}), "11": ( "Star Tracker: Boot image (requires bootloader mode)", {OpCodeDictKeys.TIMEOUT: 2.0}, ), "12": ("Star Tracker: Request time", {OpCodeDictKeys.TIMEOUT: 2.0}), "13": ("Star Tracker: Request solution", {OpCodeDictKeys.TIMEOUT: 2.0}), "14": ("Star Tracker: Upload image", {OpCodeDictKeys.TIMEOUT: 2.0}), "15": ("Star Tracker: Download image", {OpCodeDictKeys.TIMEOUT: 2.0}), "16": ("Star Tracker: Limits", {OpCodeDictKeys.TIMEOUT: 2.0}), "17": ("Star Tracker: Tracking", {OpCodeDictKeys.TIMEOUT: 2.0}), "18": ("Star Tracker: Mounting", {OpCodeDictKeys.TIMEOUT: 2.0}), "19": ("Star Tracker: Camera", {OpCodeDictKeys.TIMEOUT: 2.0}), "20": ("Star Tracker: Blob", {OpCodeDictKeys.TIMEOUT: 2.0}), "21": ("Star Tracker: Centroiding", {OpCodeDictKeys.TIMEOUT: 2.0}), "22": ("Star Tracker: LISA", {OpCodeDictKeys.TIMEOUT: 2.0}), "23": ("Star Tracker: Matching", {OpCodeDictKeys.TIMEOUT: 2.0}), "24": ("Star Tracker: Validation", {OpCodeDictKeys.TIMEOUT: 2.0}), "25": ("Star Tracker: Algo", {OpCodeDictKeys.TIMEOUT: 2.0}), "26": ("Star Tracker: Take image", {OpCodeDictKeys.TIMEOUT: 2.0}), "27": ("Star Tracker: Stop str helper", {OpCodeDictKeys.TIMEOUT: 2.0}), "28": ("Star Tracker: Reset error signal", {OpCodeDictKeys.TIMEOUT: 2.0}), "29": ( "Star Tracker: Set name of download image", {OpCodeDictKeys.TIMEOUT: 2.0}, ), "30": ("Star Tracker: Request histogram", {OpCodeDictKeys.TIMEOUT: 2.0}), "31": ("Star Tracker: Request contrast", {OpCodeDictKeys.TIMEOUT: 2.0}), "32": ("Star Tracker: Set json filename", {OpCodeDictKeys.TIMEOUT: 2.0}), "33": ("Star Tracker: Write", {OpCodeDictKeys.TIMEOUT: 2.0}), "34": ("Star Tracker: Read", {OpCodeDictKeys.TIMEOUT: 2.0}), "35": ("Star Tracker: Set Read filename", {OpCodeDictKeys.TIMEOUT: 2.0}), "36": ("Star Tracker: Get checksum", {OpCodeDictKeys.TIMEOUT: 2.0}), "37": ("Star Tracker: Set time", {OpCodeDictKeys.TIMEOUT: 2.0}), "38": ("Star Tracker: Download centroid", {OpCodeDictKeys.TIMEOUT: 2.0}), "39": ( "Star Tracker: Upload centroid (not implemented by arcsec?)", {OpCodeDictKeys.TIMEOUT: 2.0}, ), "40": ("Star Tracker: Download matched star", {OpCodeDictKeys.TIMEOUT: 2.0}), "41": ("Star Tracker: Download DB Image", {OpCodeDictKeys.TIMEOUT: 2.0}), "42": ("Star Tracker: Download Blob Pixel", {OpCodeDictKeys.TIMEOUT: 2.0}), "43": ("Star Tracker: Download FPGA Image", {OpCodeDictKeys.TIMEOUT: 2.0}), "44": ( "Star Tracker: Change download FPGA image name", {OpCodeDictKeys.TIMEOUT: 2.0}, ), "45": ("Star Tracker: Upload FPGA image", {OpCodeDictKeys.TIMEOUT: 2.0}), "46": ("Star Tracker: FPGA action", {OpCodeDictKeys.TIMEOUT: 2.0}), } service_star_tracker_tuple = ("Star tracker", op_code_dict_srv_star_tracker) op_code_dict_srv_ccsds_handler = { "0": ("CCSDS Handler: Set low rate", {OpCodeDictKeys.TIMEOUT: 2.0}), "1": ("CCSDS Handler: Set high rate", {OpCodeDictKeys.TIMEOUT: 2.0}), "2": ("CCSDS Handler: Enable transmitter", {OpCodeDictKeys.TIMEOUT: 2.0}), "3": ("CCSDS Handler: Disable transmitter", {OpCodeDictKeys.TIMEOUT: 2.0}), } service_ccsds_handler_tuple = ("CCSDS Handler", op_code_dict_srv_ccsds_handler) op_code_dict_srv_pdec_handler = { "0": ("PDEC Handler: Print CLCW", {OpCodeDictKeys.TIMEOUT: 2.0}), "1": ("PDEC Handler: Print PDEC monitor", {OpCodeDictKeys.TIMEOUT: 2.0}), } service_pdec_handler_tuple = ("PDEC Handler", op_code_dict_srv_pdec_handler) op_code_dict_srv_syrlinks_handler = { "0": ("Syrlinks Handler: Set TX standby", {OpCodeDictKeys.TIMEOUT: 2.0}), "1": ("Syrlinks Handler: Set TX modulation", {OpCodeDictKeys.TIMEOUT: 2.0}), "2": ("Syrlinks Handler: Set TX carrier wave", {OpCodeDictKeys.TIMEOUT: 2.0}), "5": ("Syrlinks Handler: Read TX status", {OpCodeDictKeys.TIMEOUT: 2.0}), "6": ("Syrlinks Handler: Read TX waveform", {OpCodeDictKeys.TIMEOUT: 2.0}), "7": ( "Syrlinks Handler: Read TX AGC value high byte ", {OpCodeDictKeys.TIMEOUT: 2.0}, ), "8": ( "Syrlinks Handler: Read TX AGC value low byte ", {OpCodeDictKeys.TIMEOUT: 2.0}, ), } service_syrlinks_handler_tuple = ( "Syrlinks Handler", op_code_dict_srv_syrlinks_handler, ) service_op_code_dict[CustomServiceList.P60DOCK.value] = service_p60_tuple service_op_code_dict[CustomServiceList.PDU1.value] = service_pdu1_tuple # service_op_code_dict[CustomServiceList.PDU2.value] = service_pdu2_tuple service_op_code_dict[CustomServiceList.HEATER.value] = service_heater_tuple service_op_code_dict[CustomServiceList.IMTQ.value] = service_imtq_tuple service_op_code_dict[CustomServiceList.REACTION_WHEEL_1.value] = service_rw_tuple service_op_code_dict[CustomServiceList.REACTION_WHEEL_2.value] = service_rw_tuple service_op_code_dict[CustomServiceList.REACTION_WHEEL_3.value] = service_rw_tuple service_op_code_dict[CustomServiceList.REACTION_WHEEL_4.value] = service_rw_tuple service_op_code_dict[CustomServiceList.RAD_SENSOR.value] = service_rad_sensor_tuple service_op_code_dict[CustomServiceList.PLOC_SUPV.value] = service_ploc_supv_tuple service_op_code_dict[ CustomServiceList.PLOC_UPDATER.value ] = service_ploc_updater_tuple service_op_code_dict[ CustomServiceList.STAR_TRACKER.value ] = service_star_tracker_tuple service_op_code_dict[ CustomServiceList.PLOC_MEMORY_DUMPER.value ] = service_ploc_memory_dumper_tuple service_op_code_dict[ CustomServiceList.CCSDS_HANDLER.value ] = service_ccsds_handler_tuple service_op_code_dict[ CustomServiceList.PDEC_HANDLER.value ] = service_pdec_handler_tuple service_op_code_dict[ CustomServiceList.SYRLINKS.value ] = service_syrlinks_handler_tuple