""" @brief This file transfers definitions of global variables to the user. @details Template configuration file. Copy this folder to the TMTC commander root and adapt it to your needs. """ import enum import argparse # All globals can be added here and will be part of a globals dictionary. from config.tmtcc_definitions import ServiceList, ModeList from tmtc_core.com_if.tmtcc_serial_com_if import SerialCommunicationType from tmtc_core.com_if.tmtcc_serial_utilities import determine_com_port from tmtc_core.core.tmtc_core_definitions import ComInterfaces from tmtc_core.utility.tmtcc_logger import get_logger class GlobalIds(enum.Enum): from enum import auto # Generic parameters APID = auto() MODE = auto() SERVICE = auto() SERVICELIST = auto() COM_IF = auto() OP_CODE = auto() TM_TIMEOUT = auto() # Miscellaneous DISPLAY_MODE = auto() USE_LISTENER_AFTER_OP = auto() PRINT_HK = auto() PRINT_TM = auto() PRINT_RAW_TM = auto() PRINT_TO_FILE = auto() RESEND_TC = auto() TC_SEND_TIMEOUT_FACTOR = auto() # Config dictionaries USE_SERIAL = auto() SERIAL_CONFIG = auto() USE_ETHERNET = auto() ETHERNET_CONFIG = auto() # Object handles PRETTY_PRINTER = auto() TM_LISTENER_HANDLE = auto() COM_INTERFACE_HANDLE = auto() TMTC_PRINTER_HANDLE = auto() def add_globals_pre_args_parsing(gui: bool = False): from tmtc_core.core.tmtcc_globals_manager import update_global import pprint update_global(GlobalIds.APID, 0xef) update_global(GlobalIds.COM_IF, ComInterfaces.EthernetUDP) update_global(GlobalIds.TC_SEND_TIMEOUT_FACTOR, 2) update_global(GlobalIds.TM_TIMEOUT, 4) update_global(GlobalIds.DISPLAY_MODE, "long") update_global(GlobalIds.PRINT_TO_FILE, True) update_global(GlobalIds.SERIAL_CONFIG, dict()) update_global(GlobalIds.ETHERNET_CONFIG, dict()) pp = pprint.PrettyPrinter() update_global(GlobalIds.PRETTY_PRINTER, pp) update_global(GlobalIds.TM_LISTENER_HANDLE, None) update_global(GlobalIds.COM_INTERFACE_HANDLE, None) update_global(GlobalIds.TMTC_PRINTER_HANDLE, None) update_global(GlobalIds.PRINT_RAW_TM, False) update_global(GlobalIds.RESEND_TC, False) update_global(GlobalIds.OP_CODE, "0") update_global(GlobalIds.MODE, ModeList.ListenerMode) if gui: set_up_ethernet_cfg() servicelist = dict() servicelist[ServiceList.SERVICE_2] = ["Service 2 Raw Commanding"] servicelist[ServiceList.SERVICE_3] = ["Service 3 Housekeeping"] servicelist[ServiceList.SERVICE_5] = ["Service 5 Event"] servicelist[ServiceList.SERVICE_8] = ["Service 8 Functional Commanding"] servicelist[ServiceList.SERVICE_9] = ["Service 9 Time"] servicelist[ServiceList.SERVICE_17] = ["Service 17 Test"] servicelist[ServiceList.SERVICE_20] = ["Service 20 Parameters"] servicelist[ServiceList.SERVICE_23] = ["Service 23 File Management"] servicelist[ServiceList.SERVICE_200] = ["Service 200 Mode Management"] update_global(GlobalIds.SERVICE, ServiceList.SERVICE_17) update_global(GlobalIds.SERVICELIST, servicelist) def add_globals_post_args_parsing(args: argparse.Namespace): from tmtc_core.core.tmtcc_globals_manager import update_global from config.tmtcc_definitions import ModeList logger = get_logger() mode_param = ModeList.ListenerMode if 0 <= args.mode <= 6: if args.mode == 0: mode_param = ModeList.GUIMode elif args.mode == 1: mode_param = ModeList.ListenerMode elif args.mode == 2: mode_param = ModeList.SingleCommandMode elif args.mode == 3: mode_param = ModeList.ServiceTestMode elif args.mode == 4: mode_param = ModeList.SoftwareTestMode update_global(GlobalIds.MODE, mode_param) if args.com_if == ComInterfaces.EthernetUDP.value: com_if = ComInterfaces.EthernetUDP elif args.com_if == ComInterfaces.Serial.value: com_if = ComInterfaces.Serial elif args.com_if == ComInterfaces.Dummy.value: com_if = ComInterfaces.Dummy elif args.com_if == ComInterfaces.QEMU.value: com_if = ComInterfaces.QEMU else: com_if = ComInterfaces.Serial update_global(GlobalIds.COM_IF, com_if) if args.short_display_mode: display_mode_param = "short" else: display_mode_param = "long" update_global(GlobalIds.DISPLAY_MODE, display_mode_param) service = str(args.service).lower() if service == "2": service = ServiceList.SERVICE_2 elif service == "3": service = ServiceList.SERVICE_3 elif service == "5": service = ServiceList.SERVICE_5 elif service == "8": service = ServiceList.SERVICE_8 elif service == "9": service = ServiceList.SERVICE_9 elif service == "17": service = ServiceList.SERVICE_17 elif service == "20": service = ServiceList.SERVICE_20 elif service == "23": service = ServiceList.SERVICE_23 else: logger.warning("Service not known! Setting standard service 17") service = ServiceList.SERVICE_17 update_global(GlobalIds.SERVICE, service) if args.op_code is None: op_code = 0 else: op_code = str(args.op_code).lower() update_global(GlobalIds.OP_CODE, op_code) update_global(GlobalIds.USE_LISTENER_AFTER_OP, args.listener) update_global(GlobalIds.TM_TIMEOUT, args.tm_timeout) update_global(GlobalIds.PRINT_HK, args.print_hk) update_global(GlobalIds.PRINT_TM, args.print_tm) update_global(GlobalIds.PRINT_RAW_TM, args.raw_data_print) update_global(GlobalIds.PRINT_TO_FILE, args.print_log) update_global(GlobalIds.RESEND_TC, args.resend_tc) update_global(GlobalIds.TC_SEND_TIMEOUT_FACTOR, 3) use_serial_cfg = False if com_if == ComInterfaces.Serial or com_if == ComInterfaces.QEMU: use_serial_cfg = True if use_serial_cfg: set_up_serial_cfg(com_if) use_ethernet_cfg = False if com_if == ComInterfaces.EthernetUDP: use_ethernet_cfg = True if use_ethernet_cfg: # TODO: Port and IP address can also be passed as CLI parameters. Use them here if applicable set_up_ethernet_cfg() def set_up_serial_cfg(com_if: ComInterfaces): from tmtc_core.core.tmtcc_globals_manager import update_global update_global(GlobalIds.USE_SERIAL, True) from tmtc_core.core.tmtcc_globals_manager import get_global from config.tmtcc_definitions import SerialConfig serial_cfg_dict = get_global(GlobalIds.SERIAL_CONFIG) if com_if == ComInterfaces.Serial: com_port = determine_com_port() else: com_port = "" serial_cfg_dict.update({SerialConfig.SERIAL_PORT: com_port}) serial_cfg_dict.update({SerialConfig.SERIAL_BAUD_RATE: 115200}) serial_cfg_dict.update({SerialConfig.SERIAL_TIMEOUT: 0.01}) serial_cfg_dict.update({SerialConfig.SERIAL_COMM_TYPE: SerialCommunicationType.DLE_ENCODING}) serial_cfg_dict.update({SerialConfig.SERIAL_FRAME_SIZE: 256}) serial_cfg_dict.update({SerialConfig.SERIAL_DLE_QUEUE_LEN: 25}) serial_cfg_dict.update({SerialConfig.SERIAL_DLE_MAX_FRAME_SIZE: 1024}) update_global(GlobalIds.SERIAL_CONFIG, serial_cfg_dict) def set_up_ethernet_cfg(): from tmtc_core.core.tmtcc_globals_manager import update_global update_global(GlobalIds.USE_ETHERNET, True) from tmtc_core.core.tmtcc_globals_manager import get_global from config.tmtcc_definitions import EthernetConfig ethernet_cfg_dict = get_global(GlobalIds.ETHERNET_CONFIG) # Local host and unused port as default config default_send_ip = "127.0.0.1" default_send_port = 7301 send_address = (default_send_ip, default_send_port) ethernet_cfg_dict.update({EthernetConfig.SEND_ADDRESS: send_address}) # Bind to all interfaces (might be insecure!) default_rcv_ip = '' default_rcv_port = 7302 recv_address = (default_rcv_ip, default_rcv_port) ethernet_cfg_dict.update({EthernetConfig.RECV_ADDRESS: recv_address}) update_global(GlobalIds.ETHERNET_CONFIG, ethernet_cfg_dict)