fsfw-example-hosted/tmtc/tmtcc.py

69 lines
2.3 KiB
Python
Raw Permalink Normal View History

2022-07-03 19:29:53 +02:00
#!/usr/bin/env python3
"""TMTC commander for FSFW Example"""
2022-07-03 21:00:28 +02:00
import sys
import time
from spacepackets.ecss import PusVerificator
2022-07-03 19:29:53 +02:00
import tmtccmd
2022-09-09 14:30:27 +02:00
from common_tmtc.common import setup_params, setup_tmtc_handlers, setup_backend
2022-07-03 19:29:53 +02:00
from config.hook import FsfwHookBase
2022-07-03 21:00:28 +02:00
from tmtccmd import get_console_logger
from tmtccmd.core import BackendRequest
from tmtccmd.logging.pus import (
RegularTmtcLogWrapper,
RawTmtcTimedLogWrapper,
TimedLogWhen,
)
from tmtccmd.pus import VerificationWrapper
2022-07-27 14:41:07 +02:00
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
2022-09-09 14:30:27 +02:00
2022-07-03 21:00:28 +02:00
LOGGER = get_console_logger()
2022-07-03 19:29:53 +02:00
def main():
2022-09-09 17:52:09 +02:00
setup_wrapper = setup_params(FsfwHookBase())
2022-07-03 21:00:28 +02:00
tmtc_logger = RegularTmtcLogWrapper()
printer = FsfwTmTcPrinter(tmtc_logger.logger)
raw_logger = RawTmtcTimedLogWrapper(when=TimedLogWhen.PER_HOUR, interval=2)
pus_verificator = PusVerificator()
verif_wrapper = VerificationWrapper(
console_logger=get_console_logger(),
file_logger=printer.file_logger,
pus_verificator=pus_verificator,
)
ccsds_handler, tc_handler = setup_tmtc_handlers(
verif_wrapper=verif_wrapper, raw_logger=raw_logger, printer=printer
)
tmtccmd.setup(setup_wrapper)
backend = setup_backend(
setup_wrapper=setup_wrapper, ccsds_handler=ccsds_handler, tc_handler=tc_handler
)
try:
while True:
state = backend.periodic_op(None)
2022-10-19 11:52:30 +02:00
tc_handler.cfdp_in_ccsds_wrapper.handler.fsm()
2022-07-03 21:00:28 +02:00
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:
if tc_handler.cfdp_done():
LOGGER.info("CFDP transaction done, closing client")
2022-09-14 19:02:11 +02:00
sys.exit(0)
2022-07-03 21:00:28 +02:00
time.sleep(0.8)
elif state.request == BackendRequest.DELAY_CUSTOM:
2022-08-17 17:16:50 +02:00
if state.next_delay.total_seconds() < 0.5:
time.sleep(state.next_delay.total_seconds())
else:
time.sleep(0.5)
2022-07-03 21:00:28 +02:00
elif state.request == BackendRequest.CALL_NEXT:
pass
except KeyboardInterrupt:
sys.exit(0)
2022-07-03 19:29:53 +02:00
if __name__ == "__main__":
main()