#!/usr/bin/env python3 """ @brief TMTC Commander entry point for command line mode. @details This client was developed by KSat for the SOURCE project to test the on-board software but has evolved into a more generic tool for satellite developers to perform TMTC (Telemetry and Telecommand) handling and testing via different communication interfaces. Currently, only the PUS standard is implemented as a packet standard. Run this file with the -h flag to display options. @license Copyright 2020 KSat e.V. Stuttgart Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. @author R. Mueller """ import sys import traceback try: import tmtccmd.runner as tmtccmd from tmtccmd.config import default_json_path, SetupArgs, CoreGlobalIds from tmtccmd.config.definitions import CoreModeList from tmtccmd.config.args import ( create_default_args_parser, add_default_tmtccmd_args, parse_default_input_arguments, ) from tmtccmd.ccsds.handler import CcsdsTmHandler, ApidHandler from tmtccmd.logging import get_console_logger from tmtccmd.logging.pus import create_tmtc_logger except ImportError as error: run_tmtc_commander = None initialize_tmtc_commander = None tb = traceback.format_exc() print(tb) print("Python tmtccmd submodule could not be imported") sys.exit(1) try: import spacepackets except ImportError as error: print(error) print("Python spacepackets module could not be imported") print( 'Install with "cd spacepackets && python3 -m pip intall -e ." for interative installation' ) sys.exit(1) from config.hook_implementations import EiveHookObject from config.version import __version__ from config.definitions import PUS_APID from pus_tc.tc_packer_hook import pre_tc_send_cb from pus_tm.factory_hook import ccsds_tm_handler from tmtccmd.core.globals_manager import ( get_global ) def main(): print(f"-- eive tmtc version {__version__} --") print(f"-- spacepackets version {spacepackets.__version__} --") tmtccmd.init_printout(False) tmtc_file_logger = create_tmtc_logger() hook_obj = EiveHookObject(json_cfg_path=default_json_path()) arg_parser = create_default_args_parser() add_default_tmtccmd_args(arg_parser) args = parse_default_input_arguments(arg_parser, hook_obj) setup_args = SetupArgs( hook_obj=hook_obj, use_gui=False, apid=PUS_APID, cli_args=args ) apid_handler = ApidHandler(cb=ccsds_tm_handler, queue_len=50, user_args=None) ccsds_handler = CcsdsTmHandler() ccsds_handler.add_tm_handler(apid=PUS_APID, handler=apid_handler) tmtccmd.setup(setup_args=setup_args) tmtccmd.add_ccsds_handler(ccsds_handler) tmtc_backend = tmtccmd.create_default_tmtc_backend( setup_args=setup_args, tm_handler=ccsds_handler, ) tmtc_backend.usr_send_wrapper = (pre_tc_send_cb, tmtc_file_logger) tmtc_backend.set_mode(CoreModeList.CONTINUOUS_MODE) get_console_logger().info("Disabling console logger for continuous operation") get_console_logger().disabled = True; tmtccmd.init_and_start_daemons(tmtc_backend=tmtc_backend) tmtccmd.performOperation(tmtc_backend=tmtc_backend) #remove cmdline args so that we can reuse code sys.argv = sys.argv[:1] while True: args = parse_default_input_arguments(arg_parser, hook_obj) setup_args = SetupArgs( hook_obj=hook_obj, use_gui=False, apid=PUS_APID, cli_args=args ) tmtccmd.setup(setup_args=setup_args) tmtc_backend.set_mode(CoreModeList.CONTINUOUS_MODE) tmtccmd.performOperation(tmtc_backend=tmtc_backend) if __name__ == "__main__": main()