Skip to content
Snippets Groups Projects
Forked from an inaccessible project.
OBSW_SingleCommandSenderReceiver.py 2.42 KiB
#!/usr/bin/python3.8
"""
@file
    OBSW_Config.py
@date
    01.11.2019
@brief
    Used to send single tcs and listen for replies after that
"""
from sendreceive.OBSW_CommandSenderReceiver import CommandSenderReceiver
from comIF.OBSW_ComInterface import ComIF_T
from utility.OBSW_TmTcPrinter import TmTcPrinterT
from sendreceive.OBSW_TmListener import TmListenerT
import config.OBSW_Config as g
import logging


# Specific implementation of CommandSenderReceiver to send a single telecommand
class SingleCommandSenderReceiver(CommandSenderReceiver):
    """ This object can be used by instantiating it and calling sendSingleTcAndReceiveTm() """
    def __init__(self, comInterface: ComIF_T, tmtcPrinter: TmTcPrinterT, tmListener: TmListenerT,
                 pusPacketTuple: tuple, tmTimeout: int, tcTimeoutFactor: int, doPrintToFile: bool):
        """
        :param comInterface: CommunicationInterface object, passed on to CommandSenderReceiver
        :param tmListener: TmListener object which runs in the background and receives all TM
        :param tmtcPrinter: TmTcPrinter object, passed on to CommandSenderReceiver
        :param tmTimeout: TM Timeout. After each sent telecommand, listen for TMs for this time period
        :param tcTimeoutFactor: If TM is not received, resend TC after tmTimeout * tcSendTimeoutFactor
        :param doPrintToFile: Specify whether output is also printed to a file
        """
        super().__init__(comInterface=comInterface, tmListener=tmListener, tmtcPrinter=tmtcPrinter, tmTimeout=tmTimeout,
                         tcSendTimeoutFactor=tcTimeoutFactor, doPrintToFile=doPrintToFile)
        self.pusPacketTuple = pusPacketTuple
        try:
            (self.pusPacketInfo, self.pusPacket) = self.pusPacketTuple
        except TypeError:
            print("Invalid queue entry detected")
            logging.exception("Error: ")
            exit()

    def sendSingleTcAndReceiveTm(self):
        self.tmListener.modeId = g.modeList[2]
        self.tmListener.modeChangeEvent.set()
        self.comInterface.sendTelecommand(self.pusPacket, self.pusPacketInfo)
        while not self.replyReceived:
            # wait until reply is received
            super().checkForFirstReply()
        if self.replyReceived:
            print("Single Command SenderReceiver: Reply received")
            self.tmListener.modeOpFinished.set()
            print("Listening for packages ...")