diff --git a/config/tmtcc_com_config.py b/config/tmtcc_com_config.py index 79ad40209c1166bcc469a4d1dc00f4584e828353..00c6a346a98c22092a354360356cd29394f9c692 100644 --- a/config/tmtcc_com_config.py +++ b/config/tmtcc_com_config.py @@ -1,9 +1,14 @@ """ Set-up function. Initiates the communication interface. """ +import json +import os import sys from typing import Union +import serial +import serial.tools.list_ports + from tmtc_core.comIF.obsw_com_interface import CommunicationInterface from tmtc_core.comIF.obsw_dummy_com_if import DummyComIF from tmtc_core.comIF.obsw_ethernet_com_if import EthernetComIF @@ -13,7 +18,7 @@ from tmtc_core.comIF.obsw_qemu_com_if import QEMUComIF from tmtc_core.utility.obsw_logger import get_logger from tmtc_core.utility.obsw_tmtc_printer import TmTcPrinter -import config.tmtcc_config as g +import config.obsw_config as g LOGGER = get_logger() @@ -33,8 +38,22 @@ def set_communication_interface(tmtc_printer: TmTcPrinter) -> Union[Communicatio 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) + communication_interface = SerialComIF( - tmtc_printer=tmtc_printer, com_port=g.G_COM_PORT, baud_rate=serial_baudrate, + tmtc_printer=tmtc_printer, com_port=com_port, baud_rate=serial_baudrate, serial_timeout=serial_timeout, ser_com_type=SerialCommunicationType.DLE_ENCODING) communication_interface.set_dle_settings( @@ -49,9 +68,24 @@ def set_communication_interface(tmtc_printer: TmTcPrinter) -> Union[Communicatio g.G_SERIAL_DLE_MAX_QUEUE_LEN, g.G_SERIAL_DLE_MAX_FRAME_SIZE, serial_timeout) else: communication_interface = DummyComIF(tmtc_printer=tmtc_printer) + if not communication_interface.valid: + LOGGER.warning("Invalid communication interface!") + sys.exit() communication_interface.initialize() return communication_interface except (IOError, OSError): LOGGER.error("Error setting up communication interface") LOGGER.exception("Error") 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)) + com_port = prompt_com_port() + return com_port diff --git a/tmtc_core b/tmtc_core index 2407697ea25ec1479df5f1308183f7c9f0d01a90..d550621a799b9836f8bbb1c0760ef3a20cac99af 160000 --- a/tmtc_core +++ b/tmtc_core @@ -1 +1 @@ -Subproject commit 2407697ea25ec1479df5f1308183f7c9f0d01a90 +Subproject commit d550621a799b9836f8bbb1c0760ef3a20cac99af