tmtcc.py executable
This commit is contained in:
122
tmtcc.py
122
tmtcc.py
@ -1,19 +1,22 @@
|
||||
import argparse
|
||||
#!/usr/bin/env python3
|
||||
import logging
|
||||
import sys
|
||||
import time
|
||||
import traceback
|
||||
from typing import Optional
|
||||
from tmtccmd.config.definitions import CoreModeList
|
||||
|
||||
from spacepackets.ecss import PusVerificator
|
||||
from tmtccmd import get_console_logger, TcHandlerBase
|
||||
from tmtccmd import get_console_logger, TcHandlerBase, BackendBase
|
||||
from tmtccmd.com_if import ComInterface
|
||||
from tmtccmd.config.globals import update_global, CoreGlobalIds
|
||||
|
||||
from deps.tmtccmd.tmtccmd.logging.pus import RawTmtcTimedLogWrapper
|
||||
from deps.tmtccmd.tmtccmd.logging.pus import (
|
||||
RawTmtcTimedLogWrapper,
|
||||
RegularTmtcLogWrapper,
|
||||
TimedLogWhen,
|
||||
)
|
||||
from deps.tmtccmd.tmtccmd.pus import VerificationWrapper
|
||||
from deps.tmtccmd.tmtccmd.tm import SpecificApidHandlerBase, GenericApidHandlerBase
|
||||
from deps.tmtccmd.tmtccmd.utility.tmtc_printer import FsfwTmTcPrinter
|
||||
from tmtccmd.core import BackendRequest
|
||||
from tmtccmd.logging import get_current_time_string
|
||||
from tmtccmd.pus import FileSeqCountProvider
|
||||
from tmtccmd.tc import (
|
||||
@ -38,11 +41,13 @@ try:
|
||||
import tmtccmd.runner as tmtccmd
|
||||
from tmtccmd.logging.pus import create_tmtc_logger
|
||||
from tmtccmd.ccsds.handler import ApidHandler, CcsdsTmHandler
|
||||
from tmtccmd.config import SetupArgs, default_json_path
|
||||
from tmtccmd.config import SetupArgs, default_json_path, SetupWrapper
|
||||
from tmtccmd.config.args import (
|
||||
create_default_args_parser,
|
||||
add_default_tmtccmd_args,
|
||||
parse_default_input_arguments,
|
||||
SetupParams,
|
||||
ArgParserWrapper,
|
||||
)
|
||||
except ImportError as error:
|
||||
run_tmtc_commander = None
|
||||
@ -56,7 +61,7 @@ from config import __version__
|
||||
from config.definitions import PUS_APID
|
||||
from config.hook_implementations import EiveHookObject
|
||||
from pus_tm.factory_hook import pus_factory_hook
|
||||
from pus_tc.procedure_packer import pre_tc_send_cb, handle_default_procedure
|
||||
from pus_tc.procedure_packer import handle_default_procedure
|
||||
|
||||
LOGGER = get_console_logger()
|
||||
|
||||
@ -123,31 +128,92 @@ class TcHandler(TcHandlerBase):
|
||||
LOGGER.info(log_entry.log_str)
|
||||
self.file_logger.info(log_entry.log_str)
|
||||
|
||||
def queue_finished_cb(self, info: ProcedureHelper):
|
||||
if info is not None and info.proc_type == TcQueueEntryType.PUS_TC:
|
||||
def_proc = info.to_def_procedure()
|
||||
LOGGER.info(
|
||||
f"Finished queue for service {def_proc.service} and op code {def_proc.op_code}"
|
||||
)
|
||||
|
||||
def tmtcc_pre_args() -> EiveHookObject:
|
||||
|
||||
def setup_params() -> SetupWrapper:
|
||||
print(f"-- eive tmtc v{__version__} --")
|
||||
print(f"-- spacepackets v{spacepackets.__version__} --")
|
||||
tmtccmd.init_printout(False)
|
||||
return EiveHookObject(json_cfg_path=default_json_path())
|
||||
hook_obj = EiveHookObject(default_json_path())
|
||||
params = SetupParams()
|
||||
parser_wrapper = ArgParserWrapper(hook_obj)
|
||||
parser_wrapper.parse()
|
||||
tmtccmd.init_printout(parser_wrapper.use_gui)
|
||||
parser_wrapper.set_params(params)
|
||||
params.apid = PUS_APID
|
||||
setup_wrapper = SetupWrapper(hook_obj=hook_obj, setup_params=params)
|
||||
return setup_wrapper
|
||||
|
||||
|
||||
def tmtcc_post_args(
|
||||
hook_obj: EiveHookObject, use_gui: bool, args: Optional[argparse.Namespace]
|
||||
):
|
||||
setup_args = SetupArgs(
|
||||
hook_obj=hook_obj, use_gui=use_gui, apid=PUS_APID, cli_args=args
|
||||
def setup_tmtc(
|
||||
verificator: PusVerificator,
|
||||
printer: FsfwTmTcPrinter,
|
||||
raw_logger: RawTmtcTimedLogWrapper,
|
||||
) -> (CcsdsTmHandler, TcHandler):
|
||||
verification_wrapper = VerificationWrapper(verificator, LOGGER, printer.file_logger)
|
||||
pus_handler = PusHandler(verification_wrapper, printer, raw_logger)
|
||||
ccsds_handler = CcsdsTmHandler(generic_handler=UnknownApidHandler(None))
|
||||
ccsds_handler.add_apid_handler(pus_handler)
|
||||
seq_count_provider = FileSeqCountProvider()
|
||||
tc_handler = TcHandler(
|
||||
seq_count_provider=seq_count_provider,
|
||||
pus_verificator=verificator,
|
||||
file_logger=printer.file_logger,
|
||||
raw_logger=raw_logger,
|
||||
)
|
||||
tmtc_file_logger = create_tmtc_logger()
|
||||
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)
|
||||
if use_gui:
|
||||
update_global(CoreGlobalIds.MODE, CoreModeList.LISTENER_MODE)
|
||||
return ccsds_handler, tc_handler
|
||||
|
||||
|
||||
def setup_backend(
|
||||
setup_wrapper: SetupWrapper,
|
||||
tc_handler: TcHandler,
|
||||
ccsds_handler: CcsdsTmHandler,
|
||||
) -> BackendBase:
|
||||
tmtc_backend = tmtccmd.create_default_tmtc_backend(
|
||||
setup_args=setup_args,
|
||||
tm_handler=ccsds_handler,
|
||||
setup_wrapper=setup_wrapper, tm_handler=ccsds_handler, tc_handler=tc_handler
|
||||
)
|
||||
tmtc_backend.usr_send_wrapper = (pre_tc_send_cb, tmtc_file_logger)
|
||||
tmtccmd.run(tmtc_backend=tmtc_backend)
|
||||
tmtccmd.start(tmtc_backend=tmtc_backend, hook_obj=setup_wrapper.hook_obj)
|
||||
return tmtc_backend
|
||||
|
||||
|
||||
def main():
|
||||
try:
|
||||
setup_wrapper = setup_params()
|
||||
except KeyboardInterrupt as e:
|
||||
LOGGER.info(f"{e}. Exiting")
|
||||
sys.exit(0)
|
||||
tmtc_logger = RegularTmtcLogWrapper()
|
||||
printer = FsfwTmTcPrinter(tmtc_logger.logger)
|
||||
raw_logger = RawTmtcTimedLogWrapper(when=TimedLogWhen.PER_HOUR, interval=2)
|
||||
pus_verificator = PusVerificator()
|
||||
ccsds_handler, tc_handler = setup_tmtc(pus_verificator, printer, raw_logger)
|
||||
|
||||
tmtccmd.setup(setup_wrapper)
|
||||
tmtc_backend = setup_backend(
|
||||
setup_wrapper=setup_wrapper, ccsds_handler=ccsds_handler, tc_handler=tc_handler
|
||||
)
|
||||
try:
|
||||
while True:
|
||||
state = tmtc_backend.periodic_op(None)
|
||||
if state.request == BackendRequest.TERMINATION_NO_ERROR:
|
||||
sys.exit(0)
|
||||
elif state.request == BackendRequest.DELAY_IDLE:
|
||||
LOGGER.info("TMTC Client in IDLE mode")
|
||||
time.sleep(3.0)
|
||||
elif state.request == BackendRequest.DELAY_LISTENER:
|
||||
time.sleep(0.8)
|
||||
elif state.request == BackendRequest.DELAY_CUSTOM:
|
||||
time.sleep(state.next_delay.total_seconds())
|
||||
elif state.request == BackendRequest.CALL_NEXT:
|
||||
pass
|
||||
except KeyboardInterrupt:
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
Reference in New Issue
Block a user