From 2ba33309a758390e9bfd449079280d28aa6d284e Mon Sep 17 00:00:00 2001 From: Ulrich Mohr Date: Wed, 18 May 2022 21:43:46 +0200 Subject: [PATCH 1/6] hk handling back to using a dict as I learned it is now ordered --- pus_tm/hk_handling.py | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/pus_tm/hk_handling.py b/pus_tm/hk_handling.py index 2197f8d..53b7aab 100644 --- a/pus_tm/hk_handling.py +++ b/pus_tm/hk_handling.py @@ -305,24 +305,23 @@ def handle_thermal_controller_hk_data(object_id: ObjectId, printer: FsfwTmTcPrin tm_data = struct.unpack("!ffffffffffffffff", hk_data[:16 * 4]) parsed_data = {} - # put them into an list with their names - parsed_data = [] - parsed_data.append({"SENSOR_PLOC_HEATSPREADER": tm_data[0]}) - parsed_data.append({"SENSOR_PLOC_MISSIONBOARD": tm_data[1]}) - parsed_data.append({"SENSOR_4K_CAMERA": tm_data[2]}) - parsed_data.append({"SENSOR_DAC_HEATSPREADER": tm_data[3]}) - parsed_data.append({"SENSOR_STARTRACKER": tm_data[4]}) - parsed_data.append({"SENSOR_RW1": tm_data[5]}) - parsed_data.append({"SENSOR_DRO": tm_data[6]}) - parsed_data.append({"SENSOR_SCEX": tm_data[7]}) - parsed_data.append({"SENSOR_X8": tm_data[8]}) - parsed_data.append({"SENSOR_HPA": tm_data[9]}) - parsed_data.append({"SENSOR_TX_MODUL": tm_data[10]}) - parsed_data.append({"SENSOR_MPA": tm_data[11]}) - parsed_data.append({"SENSOR_ACU": tm_data[12]}) - parsed_data.append({"SENSOR_PLPCDU_HEATSPREADER": tm_data[13]}) - parsed_data.append({"SENSOR_TCS_BOARD": tm_data[14]}) - parsed_data.append({"SENSOR_MAGNETTORQUER": tm_data[15]}) + # put them into an nice dictionary + parsed_data["SENSOR_PLOC_HEATSPREADER"] = tm_data[0] + parsed_data["SENSOR_PLOC_MISSIONBOARD"] = tm_data[1] + parsed_data["SENSOR_4K_CAMERA"] = tm_data[2] + parsed_data["SENSOR_DAC_HEATSPREADER"] = tm_data[3] + parsed_data["SENSOR_STARTRACKER"] = tm_data[4] + parsed_data["SENSOR_RW1"] = tm_data[5] + parsed_data["SENSOR_DRO"] = tm_data[6] + parsed_data["SENSOR_SCEX"] = tm_data[7] + parsed_data["SENSOR_X8"] = tm_data[8] + parsed_data["SENSOR_HPA"] = tm_data[9] + parsed_data["SENSOR_TX_MODUL"] = tm_data[10] + parsed_data["SENSOR_MPA"] = tm_data[11] + parsed_data["SENSOR_ACU"] = tm_data[12] + parsed_data["SENSOR_PLPCDU_HEATSPREADER"] = tm_data[13] + parsed_data["SENSOR_TCS_BOARD"] = tm_data[14] + parsed_data["SENSOR_MAGNETTORQUER"] = tm_data[15] TM_TCP_SERVER.report_parsed_hk_data(object_id, set_id, parsed_data) From 8ca85d4474ab230c55000c800ebef03a26ae643a Mon Sep 17 00:00:00 2001 From: Ulrich Mohr Date: Thu, 19 May 2022 00:46:21 +0200 Subject: [PATCH 2/6] updated tmtccmd --- tmtccmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtccmd b/tmtccmd index 862fdf2..b0b1dfe 160000 --- a/tmtccmd +++ b/tmtccmd @@ -1 +1 @@ -Subproject commit 862fdf23bc4a90ced47ee1c811de4237e3508536 +Subproject commit b0b1dfef055fb1c6eb757cae59336f151fbb632c From 2cb801dc97c7def694883b214f365592c6b7c8ab Mon Sep 17 00:00:00 2001 From: Ulrich Mohr Date: Sun, 22 May 2022 21:28:34 +0200 Subject: [PATCH 3/6] added prompt that either uses cli or, if available qt --- pus_tc/prompt_parameters.py | 112 ++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 pus_tc/prompt_parameters.py diff --git a/pus_tc/prompt_parameters.py b/pus_tc/prompt_parameters.py new file mode 100644 index 0000000..7959c34 --- /dev/null +++ b/pus_tc/prompt_parameters.py @@ -0,0 +1,112 @@ +from PyQt5.QtWidgets import ( + QDialog, QDialogButtonBox, QVBoxLayout, QLabel, QGroupBox, QGridLayout, QLineEdit +) + +from PyQt5 import QtCore + + +from tmtccmd.core.globals_manager import get_global +from tmtccmd.config.definitions import CoreGlobalIds + + +class Parameter: + def __init__(self, name: str, defaultValue: str, widget: QLineEdit): + self.name = name + self.defaultValue = defaultValue + self.widget = widget + self.value = self.defaultValue + self.widget.setPlaceholderText(self.defaultValue) + + def reset(self): + self.value = self.defaultValue + self.widget.setPlaceholderText(self.defaultValue) + self.widget.setText("") + +class ParameterDialog(QDialog): + def __init__(self): + super().__init__() + + self.setWindowTitle("Enter Parameters") + + Buttons = QDialogButtonBox.Ok | QDialogButtonBox.Cancel | QDialogButtonBox.Reset + + self.buttonBox = QDialogButtonBox(Buttons) + self.buttonBox.accepted.connect(self.accept) + self.buttonBox.rejected.connect(self.reject) + self.buttonBox.button(QDialogButtonBox.Reset).clicked.connect(self._reset) + + self.data = 1 + + self.rootLayout = QVBoxLayout() + self.group = QGroupBox("Parameters") + self.rootLayout.addWidget(self.group) + self.rootLayout.addWidget(self.buttonBox) + self.setLayout(self.rootLayout) + + self.groupLayout = QGridLayout() + self.group.setLayout(self.groupLayout) + + self.parameters = {} + + def addParameter(self, name: str, defaultValue: str): + row = self.groupLayout.rowCount() + 1 + description = QLabel(name) + self.groupLayout.addWidget(description, row, 0) + valueWidget = QLineEdit() + self.groupLayout.addWidget(valueWidget, row, 1) + + parameter = Parameter(name, defaultValue, valueWidget) + + self.parameters[name] = parameter + + + def _reset(self): + for value in self.parameters.values(): + value.reset() + + def getParameters(self): + output = {} + for key, parameter in self.parameters.items(): + if parameter.widget != None: + if parameter.widget.text() != "": + parameter.value = parameter.widget.text() + output[key] = parameter.value + return output + + @QtCore.pyqtSlot() + def reject(self): + print("reject") + self._reset() + super().reject() + + + + + +"""Prompt the user to specify additional Parameters + + :param parameterList: array of dictionaries with name and defaultValue attributes + :return: dict with all names as key and user supplied input as value string + """ +def prompt_parameters(parameterList): + gui = get_global(CoreGlobalIds.GUI) + if gui: + return _gui_prompt(parameterList) + else: + return _cli_prompt(parameterList) + +def _gui_prompt(parameterList): + dialog = ParameterDialog() + for parameter in parameterList: + dialog.addParameter(parameter["name"], parameter["defaultValue"]) + dialog.exec_() + return dialog.getParameters() + +def _cli_prompt(parameterList): + result = {} + for parameter in parameterList: + userInput = input("Specify {} [{}]: ".format(parameter["name"], parameter["defaultValue"])) + if userInput == "": + userInput = parameter["defaultValue"] + result[parameter["name"]] = userInput + return result \ No newline at end of file From 77f77489c219ef7a1710daf6d3130f0842c2e1ea Mon Sep 17 00:00:00 2001 From: Ulrich Mohr Date: Sun, 22 May 2022 21:29:09 +0200 Subject: [PATCH 4/6] using new prompt in controllers --- pus_tc/system/controllers.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pus_tc/system/controllers.py b/pus_tc/system/controllers.py index 30a5b4d..16f3252 100644 --- a/pus_tc/system/controllers.py +++ b/pus_tc/system/controllers.py @@ -1,11 +1,11 @@ -from ast import Pass from tmtccmd.tc.definitions import TcQueueT - from .common import command_mode import config.object_ids as obj_ids +from pus_tc.prompt_parameters import prompt_parameters + class OpCodes: THERMAL_CONTROLLER = [obj_ids.THERMAL_CONTROLLER_ID.hex(), "thermal_controller"] @@ -18,12 +18,11 @@ class Info: def pack_controller_commands(tc_queue: TcQueueT, op_code: str): - mode = int(input("Specify mode: (OFF = 0; ON = 1; NORMAL = 2) [2] ") or "2") - print(mode) - if mode < 0 or mode > 2: - print("Invalid Mode, defaulting to OFF") - mode = 0 - submode = int(input("Specify submode [0]: ") or "0") + + parameters = prompt_parameters([{"name": "Mode", "defaultValue": "2"}, { + "name": "Submode", "defaultValue": "0"}]) + mode = int(parameters["Mode"]) + submode = int(parameters["Submode"]) command_mode( object_id=get_object_from_op_code(op_code), mode=mode, @@ -32,6 +31,7 @@ def pack_controller_commands(tc_queue: TcQueueT, op_code: str): info=op_code + " to " + str(mode) + "," + str(submode), ) + def get_object_from_op_code(op_code: str): try: return bytes.fromhex(op_code) From 4237ed0d293841557cbef5e4baaa4f125cb9104c Mon Sep 17 00:00:00 2001 From: Ulrich Mohr Date: Sun, 22 May 2022 21:35:51 +0200 Subject: [PATCH 5/6] working on gui --- tmtccmd | 2 +- tmtcgui.py | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/tmtccmd b/tmtccmd index b0b1dfe..de8656e 160000 --- a/tmtccmd +++ b/tmtccmd @@ -1 +1 @@ -Subproject commit b0b1dfef055fb1c6eb757cae59336f151fbb632c +Subproject commit de8656e3a657782e457630ea10de0fce08856f35 diff --git a/tmtcgui.py b/tmtcgui.py index 6c8a1fd..6366d6f 100755 --- a/tmtcgui.py +++ b/tmtcgui.py @@ -1,11 +1,18 @@ #!/usr/bin/env python3 """TMTC commander for EIVE""" from tmtcc import tmtcc_post_args, tmtcc_pre_args - +from tmtccmd.config.args import ( + create_default_args_parser, + add_gui_tmtccmd_args, + parse_gui_input_arguments, + ) def main(): hook_obj = tmtcc_pre_args() - tmtcc_post_args(hook_obj=hook_obj, use_gui=True, args=None) + arg_parser = create_default_args_parser() + add_gui_tmtccmd_args(arg_parser) + args = parse_gui_input_arguments(arg_parser) + tmtcc_post_args(hook_obj=hook_obj, use_gui=True, args=args) if __name__ == "__main__": From 85a3c936a4b38f490a18ec7446f08e505b08cc2d Mon Sep 17 00:00:00 2001 From: Ulrich Mohr Date: Mon, 23 May 2022 00:20:06 +0200 Subject: [PATCH 6/6] tmtcgui -m7 is kinda working like I would expect it to --- pus_tc/prompt_parameters.py | 7 +++++-- pus_tc/system/controllers.py | 12 +++++++++++- tmtccmd | 2 +- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/pus_tc/prompt_parameters.py b/pus_tc/prompt_parameters.py index 7959c34..aa7dacb 100644 --- a/pus_tc/prompt_parameters.py +++ b/pus_tc/prompt_parameters.py @@ -6,7 +6,7 @@ from PyQt5 import QtCore from tmtccmd.core.globals_manager import get_global -from tmtccmd.config.definitions import CoreGlobalIds +from tmtccmd.config.definitions import CoreGlobalIds, CoreModeList class Parameter: @@ -90,7 +90,10 @@ class ParameterDialog(QDialog): """ def prompt_parameters(parameterList): gui = get_global(CoreGlobalIds.GUI) - if gui: + mode = get_global(CoreGlobalIds.MODE) + + # gui only works in cont mode right now + if gui and mode == CoreModeList.CONTINUOUS_MODE: return _gui_prompt(parameterList) else: return _cli_prompt(parameterList) diff --git a/pus_tc/system/controllers.py b/pus_tc/system/controllers.py index 50db0de..1f44f32 100644 --- a/pus_tc/system/controllers.py +++ b/pus_tc/system/controllers.py @@ -1,5 +1,5 @@ from tmtccmd.tc.definitions import TcQueueT - +from tmtccmd.config import QueueCommands from .common import command_mode import config.object_ids as obj_ids @@ -33,6 +33,16 @@ def pack_controller_commands(tc_queue: TcQueueT, op_code: str): info=op_code + " to " + str(mode) + "," + str(submode), ) + tc_queue.appendleft((QueueCommands.WAIT, 20)) + + command_mode( + object_id=get_object_from_op_code(op_code), + mode=0, + submode=0, + tc_queue=tc_queue, + info=op_code + " to 0,0", + ) + def get_object_from_op_code(op_code: str): try: diff --git a/tmtccmd b/tmtccmd index 208f577..b031eef 160000 --- a/tmtccmd +++ b/tmtccmd @@ -1 +1 @@ -Subproject commit 208f5779327db817841f073d0bbdd96da491b5d9 +Subproject commit b031eefe4aea7829e5aa2051e7493472529e6d2d