Class Cop1TcPacketHandler

  • All Implemented Interfaces:
    com.google.common.util.concurrent.Service, SystemParametersProducer, VcUplinkHandler, Link, TcDataLink

    public class Cop1TcPacketHandler
    extends AbstractTcDataLink
    implements VcUplinkHandler
    Assembles TC packets into TC frames as per CCSDS 232.0-B-3 and sends them out via FOP1

    Implements the FOP (transmitter) part of the Communications Operations Procedure-1 CCSDS 232.1-B-2 September 2010

    The FOP1 implementation is a little different than the standard: the "Initiate AD service with CLCW check" will wait for the first CLCW and immediately set the vS to the nR in the CLCW. The standard specifies that the vS has somehow to be set manually to an CLCW observed value before calling the "Initiate AD with CLCW check" directive.

    • Method Detail

      • addMonitor

        public void addMonitor​(Cop1Monitor monitor)
      • removeMonitor

        public void removeMonitor​(Cop1Monitor monitor)
      • getFrame

        public TcTransferFrame getFrame()
        Description copied from interface: VcUplinkHandler
        Retrieves the next frame in the Virtual Channel, or returns null if there is no frame available at the moment.
        Specified by:
        getFrame in interface VcUplinkHandler
        Returns:
      • initiateAD

        public CompletableFuture<Void> initiateAD​(boolean clcwCheck,
                                                  long waitMillisec)
        Initiate AD with or without CLCW check The returned future will be completed when the operation has been initiated.
        Parameters:
        clcwCheck - - if true, a CLCW will be expected from the remote system and used to initialise the vS. - If false, the current value of vS will be used.
      • initiateADWithVR

        public CompletableFuture<Void> initiateADWithVR​(int vR)
        Initiate AD with set V(R). This will cause a BC frame to be sent to the remote system.

        The returned future is completed as soon as a BC frame has been sent downstream (could be unsuccessful!).

        Parameters:
        vR -
      • initiateADWithUnlock

        public CompletableFuture<Void> initiateADWithUnlock()
        Initiate AD with Unlock. This causes a BC Unlock frame to be sent to the remote system.
      • setWindowWidth

        public CompletableFuture<Void> setWindowWidth​(int K)
        Set the FOP sliding window with - that is the maximum number of commands that can be unacknoledged at one time.
        Parameters:
        K -
        Returns:
      • purgeSentQueue

        public void purgeSentQueue()
      • purgeWaitQueue

        public void purgeWaitQueue()
      • onCLCW

        public void onCLCW​(int clcw)
        Called when a new CLCW is received from the remote system
        Parameters:
        clcw -
      • doStart

        protected void doStart()
        Specified by:
        doStart in class com.google.common.util.concurrent.AbstractService
      • doStop

        protected void doStop()
        Specified by:
        doStop in class com.google.common.util.concurrent.AbstractService
      • getDataAvailableSemaphore

        public Semaphore getDataAvailableSemaphore()
      • disableCop1

        public void disableCop1​(boolean bypassAll)
      • setDataAvailableSemaphore

        public void setDataAvailableSemaphore​(Semaphore dataAvailableSemaphore)
        The semaphore will be used by the data link to signal when there is some data to be transmitted.

        A permit will be released in these circumstances

        • a new AD telecommand has been placed into the incoming queue;
        • a BC frame has been released
        • a BD command has been released
        Note that if two commands are placed, two permits will be released but the commands might be put in the same frame. This means that the number of permits released is not exactly the same with the number of frames ready to be sent. However the semaphore is used by the master channel to avoid pooling each VC in turn even though no data is available.
        Specified by:
        setDataAvailableSemaphore in interface VcUplinkHandler
        Parameters:
        dataAvailableSemaphore -
      • getCop1Config

        public CompletableFuture<org.yamcs.protobuf.Cop1Config> getCop1Config()
      • getCop1Status

        public CompletableFuture<org.yamcs.protobuf.Cop1Status> getCop1Status()
      • collectSystemParameters

        protected void collectSystemParameters​(long time,
                                               List<ParameterValue> list)
        Description copied from class: AbstractLink
        adds system parameters link status and data in/out to the list.

        The inheriting classes should call super.collectSystemParameters and then add their own parameters to the list

        Overrides:
        collectSystemParameters in class AbstractLink
      • connectionStatus

        protected Link.Status connectionStatus()
        Description copied from class: AbstractLink
        In case the link should be connected (i.e. is running and enabled) this method is called to return the actual connection status
        Specified by:
        connectionStatus in class AbstractLink