update for new default pus queue helper
This commit is contained in:
61
common.py
61
common.py
@ -4,6 +4,7 @@ import sys
|
||||
from tmtccmd.com_if import ComInterface
|
||||
from tmtccmd.logging import get_current_time_string
|
||||
from tmtccmd.pus.pus_11_tc_sched import Subservices as Pus11Subservices
|
||||
from tmtccmd.tc.queue import DefaultPusQueueHelper
|
||||
from tmtccmd.util import FileSeqCountProvider, PusFileSeqCountProvider
|
||||
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
|
||||
|
||||
@ -21,7 +22,7 @@ except ImportError as error:
|
||||
print("Python tmtccmd module could not be imported. Make sure it is installed")
|
||||
sys.exit(1)
|
||||
|
||||
from spacepackets.ecss import PusVerificator, PusTelecommand
|
||||
from spacepackets.ecss import PusVerificator, PusTelecommand, PusServices
|
||||
|
||||
from common_tmtc.pus_tc.pus_11_tc_sched import pack_service_11_commands
|
||||
from common_tmtc.pus_tc.pus_17_test import pack_service_17_commands
|
||||
@ -76,6 +77,7 @@ class PusHandler(SpecificApidHandlerBase):
|
||||
class TcHandler(TcHandlerBase):
|
||||
def __init__(
|
||||
self,
|
||||
apid: int,
|
||||
seq_count_provider: FileSeqCountProvider,
|
||||
pus_verificator: PusVerificator,
|
||||
file_logger: logging.Logger,
|
||||
@ -86,37 +88,44 @@ class TcHandler(TcHandlerBase):
|
||||
self.pus_verificator = pus_verificator
|
||||
self.file_logger = file_logger
|
||||
self.raw_logger = raw_logger
|
||||
self.queue_helper = DefaultPusQueueHelper(
|
||||
queue_wrapper=None,
|
||||
apid=apid,
|
||||
seq_cnt_provider=seq_count_provider,
|
||||
pus_verificator=pus_verificator,
|
||||
)
|
||||
|
||||
def feed_cb(self, info: ProcedureHelper, wrapper: FeedWrapper):
|
||||
self.queue_helper.queue_wrapper = wrapper.queue_wrapper
|
||||
if info.proc_type == TcProcedureType.DEFAULT:
|
||||
def_proc = info.to_def_procedure()
|
||||
service = def_proc.service
|
||||
op_code = def_proc.op_code
|
||||
if service == CoreServiceList.SERVICE_2.value:
|
||||
return pack_service_2_commands_into(
|
||||
op_code=op_code, q=wrapper.queue_helper
|
||||
op_code=op_code, q=self.queue_helper
|
||||
)
|
||||
if service == CoreServiceList.SERVICE_3.value:
|
||||
return pack_service_3_commands_into(
|
||||
op_code=op_code, q=wrapper.queue_helper
|
||||
op_code=op_code, q=self.queue_helper
|
||||
)
|
||||
if service == CoreServiceList.SERVICE_5.value:
|
||||
return pack_generic_service_5_test_into(q=wrapper.queue_helper)
|
||||
return pack_generic_service_5_test_into(q=self.queue_helper)
|
||||
if service == CoreServiceList.SERVICE_8.value:
|
||||
return pack_service_8_commands_into(
|
||||
op_code=op_code, q=wrapper.queue_helper
|
||||
op_code=op_code, q=self.queue_helper
|
||||
)
|
||||
if service == CoreServiceList.SERVICE_11.value:
|
||||
return pack_service_11_commands(op_code=op_code, q=wrapper.queue_helper)
|
||||
return pack_service_11_commands(op_code=op_code, q=self.queue_helper)
|
||||
if service == CoreServiceList.SERVICE_17.value:
|
||||
return pack_service_17_commands(op_code=op_code, q=wrapper.queue_helper)
|
||||
return pack_service_17_commands(op_code=op_code, q=self.queue_helper)
|
||||
if service == CoreServiceList.SERVICE_20.value:
|
||||
return pack_service20_commands_into(
|
||||
q=wrapper.queue_helper, op_code=op_code
|
||||
q=self.queue_helper, op_code=op_code
|
||||
)
|
||||
if service == CoreServiceList.SERVICE_200.value:
|
||||
return pack_service_200_commands_into(
|
||||
q=wrapper.queue_helper, op_code=op_code
|
||||
q=self.queue_helper, op_code=op_code
|
||||
)
|
||||
LOGGER.warning("Invalid Service !")
|
||||
|
||||
@ -131,36 +140,19 @@ class TcHandler(TcHandlerBase):
|
||||
|
||||
def handle_tc_send_cb(self, params: SendCbParams):
|
||||
pus_tc_wrapper = params.entry.to_pus_tc_entry()
|
||||
# TODO: All of this stuff should be done during queue insertion time
|
||||
# This requires the queue helper to be optionally able to perform TC
|
||||
# post-processing via a callback or something similar. Then an API can be
|
||||
# added which is also able to pack time tagged TCs and stamping both TCs
|
||||
pus_tc_wrapper.pus_tc.seq_count = (
|
||||
self.seq_count_provider.get_and_increment()
|
||||
)
|
||||
pus_tc_wrapper.pus_tc.apid = EXAMPLE_APID
|
||||
if (
|
||||
pus_tc_wrapper.pus_tc.service == 11
|
||||
and pus_tc_wrapper.pus_tc.subservice == Pus11Subservices.TC_INSERT
|
||||
pus_tc_wrapper.pus_tc.service == PusServices.S11_TC_SCHED
|
||||
and pus_tc_wrapper.pus_tc.subservice == Pus11Subservices.TC_INSERT
|
||||
):
|
||||
try:
|
||||
pus_tc = PusTelecommand.unpack(
|
||||
pus_tc_wrapper.pus_tc.app_data[4:]
|
||||
)
|
||||
self.pus_verificator.add_tc(pus_tc)
|
||||
except ValueError as e:
|
||||
LOGGER.warning(
|
||||
f"Attempt of unpacking time tagged TC failed with exception {e}"
|
||||
)
|
||||
# Add TC after Sequence Count stamping
|
||||
self.pus_verificator.add_tc(pus_tc_wrapper.pus_tc)
|
||||
wrapped_tc = PusTelecommand.unpack(pus_tc_wrapper.pus_tc.app_data[4:])
|
||||
tc_info_string = f"Sending time-tagged command {wrapped_tc}"
|
||||
LOGGER.info(tc_info_string)
|
||||
self.file_logger.info(f"{get_current_time_string(True)}: {tc_info_string}")
|
||||
raw_tc = pus_tc_wrapper.pus_tc.pack()
|
||||
self.raw_logger.log_tc(pus_tc_wrapper.pus_tc)
|
||||
tc_info_string = f"Sent {pus_tc_wrapper.pus_tc}"
|
||||
tc_info_string = f"Sending {pus_tc_wrapper.pus_tc}"
|
||||
LOGGER.info(tc_info_string)
|
||||
self.file_logger.info(
|
||||
f"{get_current_time_string(True)}: {tc_info_string}"
|
||||
)
|
||||
self.file_logger.info(f"{get_current_time_string(True)}: {tc_info_string}")
|
||||
params.com_if.send(raw_tc)
|
||||
|
||||
def queue_finished_cb(self, info: ProcedureHelper):
|
||||
@ -196,6 +188,7 @@ def setup_tmtc_handlers(
|
||||
ccsds_handler = CcsdsTmHandler(None)
|
||||
ccsds_handler.add_apid_handler(pus_handler)
|
||||
tc_handler = TcHandler(
|
||||
apid=EXAMPLE_APID,
|
||||
file_logger=printer.file_logger,
|
||||
raw_logger=raw_logger,
|
||||
pus_verificator=verif_wrapper.pus_verificator,
|
||||
|
Reference in New Issue
Block a user