diff --git a/config/tmtcc_com_config.py b/config/tmtcc_com_config.py index 375b40b3d81d76f9d886e31d393320ca4c4b6a03..e240e2e554762f19621a6d90a689d62cd651d8ba 100644 --- a/config/tmtcc_com_config.py +++ b/config/tmtcc_com_config.py @@ -33,25 +33,13 @@ def set_communication_interface(tmtc_printer: TmTcPrinter) -> Union[Communicatio if g.G_COM_IF == g.ComInterfaces.Ethernet: communication_interface = EthernetComIF( tmtc_printer=tmtc_printer, tm_timeout=g.G_TM_TIMEOUT, - tc_timeout_factor=g.G_TC_SEND_TIMEOUT_FACTOR, send_address=g.G_ETHERNET_SEND_ADDRESS, + tc_timeout_factor=g.G_TC_SEND_TIMEOUT_FACTOR, + send_address=g.G_ETHERNET_SEND_ADDRESS, receive_address=g.G_ETHERNET_RECV_ADDRESS) elif g.G_COM_IF == g.ComInterfaces.Serial: serial_baudrate = g.G_SERIAL_BAUDRATE serial_timeout = g.G_SERIAL_TIMEOUT - com_port = "" - if g.G_COM_PORT is None: - if os.path.isfile("config/tmtcc_config.json"): - with open("config/tmtcc_config.json", "r") as write: - load_data = json.load(write) - com_port = load_data["COM_PORT"] - - else: - com_port = prompt_com_port() - save_to_json = input("Do you want to store serial port to configuration? (y/n)") - if save_to_json.lower() == 'y': - with open("config/tmtcc_config.json", "w") as write: - json.dump(dict(COM_PORT=com_port), write, indent=4) - + com_port = determine_com_port() communication_interface = SerialComIF( tmtc_printer=tmtc_printer, com_port=com_port, baud_rate=serial_baudrate, serial_timeout=serial_timeout, @@ -79,13 +67,65 @@ def set_communication_interface(tmtc_printer: TmTcPrinter) -> Union[Communicatio sys.exit() -def prompt_com_port() -> str: - com_port = input( - "Serial Commuinication specified without COM port. Please enter COM Port" - "(enter h to display list of COM ports): ") - if com_port == 'h': - ports = serial.tools.list_ports.comports() - for port, desc, hwid in sorted(ports): - print("{}: {} [{}]".format(port, desc, hwid)) +def determine_com_port() -> str: + reconfigure_com_port = False + com_port = "" + if g.G_COM_PORT is None: + if os.path.isfile("config/tmtcc_config.json"): + with open("config/tmtcc_config.json", "r") as write: + load_data = json.load(write) + com_port = load_data["COM_PORT"] + if not check_port_validity(com_port): + reconfigure = input( + "COM port from configuration file not contained within serial" + "port list. Reconfigure serial port? [y/n]: ") + if reconfigure.lower() in ['y', "yes"]: + write.close() + os.remove("config/tmtcc_config.json") + reconfigure_com_port = True + else: + reconfigure_com_port = True + else: + com_port = g.G_COM_PORT + + if reconfigure_com_port: com_port = prompt_com_port() + save_to_json = input("Do you want to store serial port to " + "configuration? (y/n): ") + if save_to_json.lower() in ['y', "yes"]: + with open("config/tmtcc_config.json", "w") as write: + json.dump(dict(COM_PORT=com_port), write, indent=4) return com_port + + +def prompt_com_port() -> str: + while True: + com_port = input( + "Configuring serial port. Please enter COM Port" + "(enter h to display list of COM ports): ") + if com_port == 'h': + ports = serial.tools.list_ports.comports() + for port, desc, hwid in sorted(ports): + print("{}: {} [{}]".format(port, desc, hwid)) + else: + if not check_port_validity(com_port): + print("Serial port not in list of available serial ports. Try again? [y/n]") + try_again = input() + if try_again.lower() in ['y', "yes"]: + continue + else: + break + else: + break + return com_port + + +def check_port_validity(com_port_to_check: str) -> bool: + port_list = [] + ports = serial.tools.list_ports.comports() + for port, desc, hwid in sorted(ports): + port_list.append(port) + if com_port_to_check not in port_list: + return False + return True + diff --git a/config/tmtcc_config.py b/config/tmtcc_config.py index d04534b9f1a680c1e19b943bb9c0428a8eb50ffb..c1bbc569fe949462e3173deb2d110d4fe1e41b68 100644 --- a/config/tmtcc_config.py +++ b/config/tmtcc_config.py @@ -77,7 +77,6 @@ G_MAX_APP_DATA_LENGTH = G_MAX_BINARY_FRAME_LENGTH - 100 G_COM_IF: ComInterfaces = ComInterfaces.QEMU # COM Port for serial communication -G_COM_PORT = "" G_SERIAL_TIMEOUT = 0.01 G_SERIAL_BAUDRATE = 230400 G_SERIAL_FRAME_SIZE = 256 @@ -118,7 +117,7 @@ G_TMTC_PRINTER = None # noinspection PyUnusedLocal def set_globals(args): global G_ETHERNET_RECV_ADDRESS, G_ETHERNET_SEND_ADDRESS, G_SCRIPT_MODE, G_MODE_ID, G_SERVICE, \ - G_DISPLAY_MODE, G_COM_IF, G_COM_PORT, G_SERIAL_TIMEOUT, G_TM_TIMEOUT, \ + G_DISPLAY_MODE, G_COM_IF, G_SERIAL_TIMEOUT, G_TM_TIMEOUT, \ G_TC_SEND_TIMEOUT_FACTOR, G_PRINT_TO_FILE, G_PRINT_HK_DATA, G_PRINT_RAW_TM, G_PRINT_TM, \ G_OP_CODE, G_RESEND_TC, G_LISTENER_AFTER_OP @@ -170,7 +169,6 @@ def set_globals(args): G_PRINT_TM = args.print_tm G_PRINT_TO_FILE = args.print_log G_PRINT_RAW_TM = args.rawDataPrint - G_COM_PORT = args.com_port G_TM_TIMEOUT = args.tm_timeout G_RESEND_TC = args.resend_tc G_LISTENER_AFTER_OP = args.listener diff --git a/utility/tmtcc_args_parser.py b/utility/tmtcc_args_parser.py index 736797bf93180a64d7efba8ce1576785a97662e9..a840c381e99e3abf75cc960561e4f241702a1556 100644 --- a/utility/tmtcc_args_parser.py +++ b/utility/tmtcc_args_parser.py @@ -54,7 +54,6 @@ def parse_input_arguments(): '-d', '--shortDisplayMode', help='Supply -d to print short output', action='store_true') arg_parser.add_argument( '--hk', dest='print_hk', help='Supply -k or --hk to print HK data', action='store_true') - arg_parser.add_argument('--COM', dest="com_port", help='COM Port for serial communication') arg_parser.add_argument( '--rs', dest="resend_tc", help='Specify whether TCs are sent again after timeout', action='store_true') @@ -63,8 +62,7 @@ def parse_input_arguments(): print("No Input Arguments specified.") arg_parser.print_help() args, unknown = arg_parser.parse_known_args() - - #for argument in vars(args): + # for argument in vars(args): # LOGGER.debug(argument + ": " + str(getattr(args, argument))) handle_args(args, unknown)