input helper to get user input

This commit is contained in:
Jakob Meier 2022-02-14 16:52:32 +01:00
parent f154299069
commit 0a8a2fb9c6
4 changed files with 104 additions and 50 deletions

View File

@ -385,6 +385,7 @@ def get_eive_service_op_code_dict(service_op_code_dict: ServiceOpCodeDictT):
"65": ("Star Tracker: Set log level parameters", {OpCodeDictKeys.TIMEOUT: 2.0}), "65": ("Star Tracker: Set log level parameters", {OpCodeDictKeys.TIMEOUT: 2.0}),
"66": ("Star Tracker: Set log subscription parameters", {OpCodeDictKeys.TIMEOUT: 2.0}), "66": ("Star Tracker: Set log subscription parameters", {OpCodeDictKeys.TIMEOUT: 2.0}),
"67": ("Star Tracker: Set debug camera parameters", {OpCodeDictKeys.TIMEOUT: 2.0}), "67": ("Star Tracker: Set debug camera parameters", {OpCodeDictKeys.TIMEOUT: 2.0}),
"68": ("Star Tracker: Firmware update", {OpCodeDictKeys.TIMEOUT: 2.0}),
} }
service_star_tracker_tuple = ("Star tracker", op_code_dict_srv_star_tracker) service_star_tracker_tuple = ("Star tracker", op_code_dict_srv_star_tracker)

View File

@ -13,6 +13,7 @@ from tmtccmd.tc.packer import TcQueueT
from spacepackets.ecss.tc import PusTelecommand from spacepackets.ecss.tc import PusTelecommand
from pus_tc.service_200_mode import pack_mode_data from pus_tc.service_200_mode import pack_mode_data
from tmtccmd.utility.logger import get_console_logger from tmtccmd.utility.logger import get_console_logger
from utility.input_helper import InputHelper
LOGGER = get_console_logger() LOGGER = get_console_logger()
@ -80,9 +81,10 @@ class StarTrackerActionIds:
LOGLEVEL = 81 LOGLEVEL = 81
LOG_SUBSCRIPTION = 82 LOG_SUBSCRIPTION = 82
DEBUG_CAMERA = 83 DEBUG_CAMERA = 83
FIRMWARE_UPDATE = 84
class ImagePathDefs: class FileDefs:
uploadFile = "/mnt/sd0/startracker/gemma.bin" uploadFile = "/mnt/sd0/startracker/gemma.bin"
downloadFile = "test_image.bin" downloadFile = "test_image.bin"
downloadPath = "/mnt/sd0/startracker" downloadPath = "/mnt/sd0/startracker"
@ -97,13 +99,20 @@ class ImagePathDefs:
egseFlightConfig = "/home/pi/arcsec/flight-config.json" egseFlightConfig = "/home/pi/arcsec/flight-config.json"
q7sGroundConfig = "/mnt/sd0/startracker/ground-config.json" q7sGroundConfig = "/mnt/sd0/startracker/ground-config.json"
q7sFlightConfig = "/mnt/sd0/startracker/flight-config.json" q7sFlightConfig = "/mnt/sd0/startracker/flight-config.json"
firmware2_1 = "/home/pi/arcsec/firmware/sagitta2-1.bin"
firmware22_1 = "/home/pi/arcsec/firmware/sagitta-22.1.bin"
json_selection = { json_dict = {
"1": ["Q7S flight config", ImagePathDefs.q7sFlightConfig], "1": ["Q7S flight config", FileDefs.q7sFlightConfig],
"2": ["Q7S ground config", ImagePathDefs.q7sGroundConfig], "2": ["Q7S ground config", FileDefs.q7sGroundConfig],
"3": ["EGSE flight config", ImagePathDefs.egseFlightConfig], "3": ["EGSE flight config", FileDefs.egseFlightConfig],
"4": ["EGSE ground config", ImagePathDefs.egseGroundConfig] "4": ["EGSE ground config", FileDefs.egseGroundConfig]
}
firmware_dict = {
"1": ["Firmware Major = 2, Minor = 1", FileDefs.firmware2_1],
"2": ["Firmware Major = 22, Minor = 1", FileDefs.firmware22_1],
} }
@ -218,7 +227,7 @@ def pack_star_tracker_commands(
command = ( command = (
object_id object_id
+ struct.pack("!I", StarTrackerActionIds.UPLOAD_IMAGE) + struct.pack("!I", StarTrackerActionIds.UPLOAD_IMAGE)
+ bytearray(ImagePathDefs.uploadFile, "utf-8") + bytearray(FileDefs.uploadFile, "utf-8")
) )
command = PusTelecommand(service=8, subservice=128, ssc=40, app_data=command) command = PusTelecommand(service=8, subservice=128, ssc=40, app_data=command)
tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(command.pack_command_tuple())
@ -226,7 +235,7 @@ def pack_star_tracker_commands(
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Download image")) tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Download image"))
path = input("Specify storage location (default - /mnt/sd0/startracker): ") path = input("Specify storage location (default - /mnt/sd0/startracker): ")
if not path: if not path:
path = ImagePathDefs.downloadPath path = FileDefs.downloadPath
command = ( command = (
object_id object_id
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_IMAGE) + struct.pack("!I", StarTrackerActionIds.DOWNLOAD_IMAGE)
@ -239,7 +248,7 @@ def pack_star_tracker_commands(
command = ( command = (
object_id object_id
+ struct.pack("!I", StarTrackerActionIds.LIMITS) + struct.pack("!I", StarTrackerActionIds.LIMITS)
+ bytearray(ImagePathDefs.jsonFile, "utf-8") + bytearray(FileDefs.jsonFile, "utf-8")
) )
command = PusTelecommand(service=8, subservice=128, ssc=42, app_data=command) command = PusTelecommand(service=8, subservice=128, ssc=42, app_data=command)
tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(command.pack_command_tuple())
@ -250,7 +259,7 @@ def pack_star_tracker_commands(
command = ( command = (
object_id object_id
+ struct.pack("!I", StarTrackerActionIds.TRACKING) + struct.pack("!I", StarTrackerActionIds.TRACKING)
+ bytearray(ImagePathDefs.jsonFile, "utf-8") + bytearray(FileDefs.jsonFile, "utf-8")
) )
command = PusTelecommand(service=8, subservice=128, ssc=43, app_data=command) command = PusTelecommand(service=8, subservice=128, ssc=43, app_data=command)
tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(command.pack_command_tuple())
@ -259,7 +268,7 @@ def pack_star_tracker_commands(
command = ( command = (
object_id object_id
+ struct.pack("!I", StarTrackerActionIds.MOUNTING) + struct.pack("!I", StarTrackerActionIds.MOUNTING)
+ bytearray(ImagePathDefs.jsonFile, "utf-8") + bytearray(FileDefs.jsonFile, "utf-8")
) )
command = PusTelecommand(service=8, subservice=128, ssc=44, app_data=command) command = PusTelecommand(service=8, subservice=128, ssc=44, app_data=command)
tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(command.pack_command_tuple())
@ -268,7 +277,7 @@ def pack_star_tracker_commands(
command = ( command = (
object_id object_id
+ struct.pack("!I", StarTrackerActionIds.CAMERA) + struct.pack("!I", StarTrackerActionIds.CAMERA)
+ bytearray(ImagePathDefs.jsonFile, "utf-8") + bytearray(FileDefs.jsonFile, "utf-8")
) )
command = PusTelecommand(service=8, subservice=128, ssc=45, app_data=command) command = PusTelecommand(service=8, subservice=128, ssc=45, app_data=command)
tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(command.pack_command_tuple())
@ -277,7 +286,7 @@ def pack_star_tracker_commands(
command = ( command = (
object_id object_id
+ struct.pack("!I", StarTrackerActionIds.BLOB) + struct.pack("!I", StarTrackerActionIds.BLOB)
+ bytearray(ImagePathDefs.jsonFile, "utf-8") + bytearray(FileDefs.jsonFile, "utf-8")
) )
command = PusTelecommand(service=8, subservice=128, ssc=46, app_data=command) command = PusTelecommand(service=8, subservice=128, ssc=46, app_data=command)
tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(command.pack_command_tuple())
@ -286,7 +295,7 @@ def pack_star_tracker_commands(
command = ( command = (
object_id object_id
+ struct.pack("!I", StarTrackerActionIds.CENTROIDING) + struct.pack("!I", StarTrackerActionIds.CENTROIDING)
+ bytearray(ImagePathDefs.jsonFile, "utf-8") + bytearray(FileDefs.jsonFile, "utf-8")
) )
command = PusTelecommand(service=8, subservice=128, ssc=47, app_data=command) command = PusTelecommand(service=8, subservice=128, ssc=47, app_data=command)
tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(command.pack_command_tuple())
@ -295,7 +304,7 @@ def pack_star_tracker_commands(
command = ( command = (
object_id object_id
+ struct.pack("!I", StarTrackerActionIds.LISA) + struct.pack("!I", StarTrackerActionIds.LISA)
+ bytearray(ImagePathDefs.jsonFile, "utf-8") + bytearray(FileDefs.jsonFile, "utf-8")
) )
command = PusTelecommand(service=8, subservice=128, ssc=48, app_data=command) command = PusTelecommand(service=8, subservice=128, ssc=48, app_data=command)
tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(command.pack_command_tuple())
@ -304,7 +313,7 @@ def pack_star_tracker_commands(
command = ( command = (
object_id object_id
+ struct.pack("!I", StarTrackerActionIds.MATCHING) + struct.pack("!I", StarTrackerActionIds.MATCHING)
+ bytearray(ImagePathDefs.jsonFile, "utf-8") + bytearray(FileDefs.jsonFile, "utf-8")
) )
command = PusTelecommand(service=8, subservice=128, ssc=49, app_data=command) command = PusTelecommand(service=8, subservice=128, ssc=49, app_data=command)
tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(command.pack_command_tuple())
@ -313,7 +322,7 @@ def pack_star_tracker_commands(
command = ( command = (
object_id object_id
+ struct.pack("!I", StarTrackerActionIds.VALIDATION) + struct.pack("!I", StarTrackerActionIds.VALIDATION)
+ bytearray(ImagePathDefs.jsonFile, "utf-8") + bytearray(FileDefs.jsonFile, "utf-8")
) )
command = PusTelecommand(service=8, subservice=128, ssc=50, app_data=command) command = PusTelecommand(service=8, subservice=128, ssc=50, app_data=command)
tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(command.pack_command_tuple())
@ -374,7 +383,7 @@ def pack_star_tracker_commands(
command = ( command = (
object_id object_id
+ struct.pack("!I", StarTrackerActionIds.SET_JSON_FILE_NAME) + struct.pack("!I", StarTrackerActionIds.SET_JSON_FILE_NAME)
+ bytearray(ImagePathDefs.jsonFile, "utf-8") + bytearray(FileDefs.jsonFile, "utf-8")
) )
command = PusTelecommand(service=8, subservice=128, ssc=57, app_data=command) command = PusTelecommand(service=8, subservice=128, ssc=57, app_data=command)
tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(command.pack_command_tuple())
@ -428,7 +437,7 @@ def pack_star_tracker_commands(
command = ( command = (
object_id object_id
+ struct.pack("!I", StarTrackerActionIds.UPLOAD_CENTROID) + struct.pack("!I", StarTrackerActionIds.UPLOAD_CENTROID)
+ bytearray(ImagePathDefs.uploadCentroidJson, "utf-8") + bytearray(FileDefs.uploadCentroidJson, "utf-8")
) )
command = PusTelecommand(service=8, subservice=128, ssc=63, app_data=command) command = PusTelecommand(service=8, subservice=128, ssc=63, app_data=command)
tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(command.pack_command_tuple())
@ -475,7 +484,7 @@ def pack_star_tracker_commands(
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_FPGA_IMAGE) + struct.pack("!I", StarTrackerActionIds.DOWNLOAD_FPGA_IMAGE)
+ struct.pack("!I", position) + struct.pack("!I", position)
+ struct.pack("!I", length) + struct.pack("!I", length)
+ bytearray(ImagePathDefs.downloadFpgaImagePath, "utf-8") + bytearray(FileDefs.downloadFpgaImagePath, "utf-8")
) )
command = PusTelecommand(service=8, subservice=128, ssc=66, app_data=command) command = PusTelecommand(service=8, subservice=128, ssc=66, app_data=command)
tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(command.pack_command_tuple())
@ -486,7 +495,7 @@ def pack_star_tracker_commands(
command = ( command = (
object_id object_id
+ struct.pack("!I", StarTrackerActionIds.CHANGE_FPGA_DOWNLOAD_FILE) + struct.pack("!I", StarTrackerActionIds.CHANGE_FPGA_DOWNLOAD_FILE)
+ bytearray(ImagePathDefs.downloadFpgaImageName, "utf-8") + bytearray(FileDefs.downloadFpgaImageName, "utf-8")
) )
command = PusTelecommand(service=8, subservice=128, ssc=67, app_data=command) command = PusTelecommand(service=8, subservice=128, ssc=67, app_data=command)
tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(command.pack_command_tuple())
@ -495,7 +504,7 @@ def pack_star_tracker_commands(
command = ( command = (
object_id object_id
+ struct.pack("!I", StarTrackerActionIds.UPLOAD_FPGA_IMAGE) + struct.pack("!I", StarTrackerActionIds.UPLOAD_FPGA_IMAGE)
+ bytearray(ImagePathDefs.uploadFpgaImageName, "utf-8") + bytearray(FileDefs.uploadFpgaImageName, "utf-8")
) )
command = PusTelecommand(service=8, subservice=128, ssc=68, app_data=command) command = PusTelecommand(service=8, subservice=128, ssc=68, app_data=command)
tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(command.pack_command_tuple())
@ -529,19 +538,19 @@ def pack_star_tracker_commands(
if op_code == "50": if op_code == "50":
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Set image processor parameters")) tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Set image processor parameters"))
command = object_id + struct.pack('!I', StarTrackerActionIds.IMAGE_PROCESSOR) + \ command = object_id + struct.pack('!I', StarTrackerActionIds.IMAGE_PROCESSOR) + \
bytearray(ImagePathDefs.jsonFile, 'utf-8') bytearray(FileDefs.jsonFile, 'utf-8')
command = PusTelecommand(service=8, subservice=128, ssc=70, app_data=command) command = PusTelecommand(service=8, subservice=128, ssc=70, app_data=command)
tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(command.pack_command_tuple())
if op_code == "51": if op_code == "51":
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: EGSE load ground config camera parameters")) tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: EGSE load ground config camera parameters"))
command = object_id + struct.pack('!I', StarTrackerActionIds.CAMERA) + \ command = object_id + struct.pack('!I', StarTrackerActionIds.CAMERA) + \
bytearray(ImagePathDefs.egseGroundConfig, 'utf-8') bytearray(FileDefs.egseGroundConfig, 'utf-8')
command = PusTelecommand(service=8, subservice=128, ssc=71, app_data=command) command = PusTelecommand(service=8, subservice=128, ssc=71, app_data=command)
tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(command.pack_command_tuple())
if op_code == "52": if op_code == "52":
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: EGSE load flight config camera parameters")) tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: EGSE load flight config camera parameters"))
command = object_id + struct.pack('!I', StarTrackerActionIds.CAMERA) + \ command = object_id + struct.pack('!I', StarTrackerActionIds.CAMERA) + \
bytearray(ImagePathDefs.egseFlightConfig, 'utf-8') bytearray(FileDefs.egseFlightConfig, 'utf-8')
command = PusTelecommand(service=8, subservice=128, ssc=72, app_data=command) command = PusTelecommand(service=8, subservice=128, ssc=72, app_data=command)
tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(command.pack_command_tuple())
if op_code == "53": if op_code == "53":
@ -620,7 +629,13 @@ def pack_star_tracker_commands(
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Set debug camera parameters")) tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Set debug camera parameters"))
jsonfile = get_config_file() jsonfile = get_config_file()
command = object_id + struct.pack('!I', StarTrackerActionIds.DEBUG_CAMERA) + bytearray(jsonfile, "utf-8") command = object_id + struct.pack('!I', StarTrackerActionIds.DEBUG_CAMERA) + bytearray(jsonfile, "utf-8")
command = PusTelecommand(service=8, subservice=128, ssc=85, app_data=command) command = PusTelecommand(service=8, subservice=128, ssc=86, app_data=command)
tc_queue.appendleft(command.pack_command_tuple())
if op_code == "68":
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Firmware update"))
firmware = get_firmware()
command = object_id + struct.pack('!I', StarTrackerActionIds.FIRMWARE_UPDATE) + bytearray(firmware, "utf-8")
command = PusTelecommand(service=8, subservice=128, ssc=87, app_data=command)
tc_queue.appendleft(command.pack_command_tuple()) tc_queue.appendleft(command.pack_command_tuple())
@ -632,7 +647,7 @@ def pack_write_command(object_id: bytearray) -> bytearray:
+ struct.pack("!I", StarTrackerActionIds.WRITE) + struct.pack("!I", StarTrackerActionIds.WRITE)
+ struct.pack("!B", region) + struct.pack("!B", region)
+ struct.pack("!I", address) + struct.pack("!I", address)
+ bytearray(ImagePathDefs.flashFile, "utf-8") + bytearray(FileDefs.flashFile, "utf-8")
) )
return command return command
@ -647,7 +662,7 @@ def pack_read_command(object_id: bytearray) -> bytearray:
+ struct.pack("!B", region) + struct.pack("!B", region)
+ struct.pack("!I", address) + struct.pack("!I", address)
+ struct.pack("!I", size) + struct.pack("!I", size)
+ bytearray(ImagePathDefs.flashReadPath, "utf-8") + bytearray(FileDefs.flashReadPath, "utf-8")
) )
return command return command
@ -667,27 +682,16 @@ def pack_checksum_command(object_id: bytearray) -> bytearray:
def get_config_file() -> str: def get_config_file() -> str:
LOGGER.info("Specify json file to use") LOGGER.info("Specify json file")
key = get_json_file_key() input_helper = InputHelper(json_dict)
while key not in json_selection: key = input_helper.get_key()
LOGGER.info("Invalid key specified, try again.") jsonfile = json_dict[key][1]
key = get_json_file_key()
jsonfile = json_selection[key][1]
return jsonfile return jsonfile
def get_json_file_key(): def get_firmware() -> str:
key_column_width = 10 LOGGER.info("Specify firmware file")
description_column_width = 50 input_helper = InputHelper(firmware_dict)
separator_width = key_column_width + description_column_width + 3 key = input_helper.get_key()
separator_string = separator_width * "-" firmware = firmware_dict[key][1]
key_string = "Key".ljust(key_column_width) return firmware
description_string = "Description".ljust(description_column_width)
LOGGER.info(f"{key_string} | {description_string}")
LOGGER.info(separator_string)
for key in json_selection:
key_string = key.ljust(key_column_width)
description_string = json_selection[key][0].ljust(description_column_width)
LOGGER.info(f"{key_string} | {description_string}")
key = input("Specify key: ")
return key

@ -1 +1 @@
Subproject commit 0fa5c5a870cc5cd8ceb2199f775064ee07b332be Subproject commit 49cf288831216c0680aedab88e31d684ba5b8da8

49
utility/input_helper.py Normal file
View File

@ -0,0 +1,49 @@
# -*- coding: utf-8 -*-
"""
@file input_helper.py
@brief This class can be used to get user input. A dictionary must be provided which describes the input options.
@author J. Meier
@date 13.02.2021
"""
from tmtccmd.utility.logger import get_console_logger
LOGGER = get_console_logger()
class InputHelper:
def __init__(self, menu: dict):
"""
@brief Constructor
@param menu The describing the input options
"""
self.menu = menu
def get_key(self) -> str:
"""
@brief Ask the user for input and returns the chosen key
"""
key = self.menu_handler()
while key not in self.menu:
LOGGER.info("Invalid key specified, try again.")
key = self.menu_handler()
return key
def menu_handler(self) -> str:
key_column_width = 10
description_column_width = 50
separator_width = key_column_width + description_column_width + 3
separator_string = separator_width * "-"
key_string = "Key".ljust(key_column_width)
description_string = "Description".ljust(description_column_width)
LOGGER.info(f"{key_string} | {description_string}")
LOGGER.info(separator_string)
for key in self.menu:
key_string = key.ljust(key_column_width)
description_string = self.menu[key][0].ljust(description_column_width)
LOGGER.info(f"{key_string} | {description_string}")
key = input("Specify key: ")
return key