Class Cop1TcPacketHandler
- All Implemented Interfaces:
com.google.common.util.concurrent.Service
,SystemParametersProducer
,VcUplinkHandler
,Link
,LinkActionProvider
,TcDataLink
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.
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.yamcs.tctm.Link
Link.Status
Nested classes/interfaces inherited from interface com.google.common.util.concurrent.Service
com.google.common.util.concurrent.Service.Listener, com.google.common.util.concurrent.Service.State
-
Field Summary
Modifier and TypeFieldDescriptionstatic final CommandOption
protected Parameter
protected ArrayDeque<PreparedCommand>
Fields inherited from class org.yamcs.tctm.AbstractTcDataLink
cmdPostProcessor, commandHistoryPublisher, dataCount, housekeepingInterval
Fields inherited from class org.yamcs.tctm.AbstractLink
config, disabled, eventProducer, linkName, log, timeService, yamcsInstance
-
Constructor Summary
ConstructorDescriptionCop1TcPacketHandler
(String yamcsInstance, String linkName, TcManagedParameters.TcVcManagedParameters vmp, ScheduledThreadPoolExecutor executor) -
Method Summary
Modifier and TypeMethodDescriptionvoid
addMonitor
(Cop1Monitor monitor) protected void
collectSystemParameters
(long time, List<ParameterValue> list) adds system parameters link status and data in/out to the list.protected Link.Status
In case the link should be connected (i.e. is running and enabled) this method is called to return the actual connection statusvoid
disableCop1
(boolean bypassAll) protected void
doStart()
protected void
doStop()
long
Returns the timestamp of the first frame ready to be dispatched orTimeEncoding.INVALID_INSTANT
if there is no frame.getFrame()
Retrieves the next frame in the Virtual Channel, or returns null if there is no frame available at the moment.return the virtual channel parametersinitiateAD
(boolean clcwCheck) initiateAD
(boolean clcwCheck, long waitMillisec) Initiate AD with or without CLCW check The returned future will be completed when the operation has been initiated.Initiate AD with Unlock.initiateADWithVR
(int vR) Initiate AD with set V(R).void
onCLCW
(int clcw) Called when a new CLCW is received from the remote systemvoid
void
void
removeMonitor
(Cop1Monitor monitor) resume()
Resume the AD service (if it is suspended)boolean
Attempt to send the command and return true if the command has been sent or its processing has finished.setConfig
(Cop1Config config) void
setDataAvailableSemaphore
(Semaphore dataAvailableSemaphore) The semaphore will be used by the data link to signal when there is some data to be transmitted.void
setupSystemParameters
(SystemParametersService sysParamsService) Called by the LinkManager before startup if theSystemParametersService
service is enabled, to setup necessary things for later parameter collection.setVs
(int vs) setWindowWidth
(int K) Set the FOP sliding window with - that is the maximum number of commands that can be unacknoledged at one time.Terminate the AD serviceMethods inherited from class org.yamcs.tctm.AbstractTcDataLink
ackCommand, failedCommand, getDataInCount, getDataOutCount, getDefaultSpec, init, initPostprocessor, postprocess, resetCounters, setCommandHistoryPublisher
Methods inherited from class org.yamcs.tctm.AbstractLink
addAction, disable, doDisable, doEnable, enable, getAction, getActions, getConfig, getCurrentTime, getDetailedStatus, getEventLoop, getLinkStatus, getName, getParent, getSystemParameters, getYamcsInstance, isDisabled, isRunningAndEnabled, setParent
Methods inherited from class com.google.common.util.concurrent.AbstractService
addListener, awaitRunning, awaitRunning, awaitRunning, awaitTerminated, awaitTerminated, awaitTerminated, doCancelStart, failureCause, isRunning, notifyFailed, notifyStarted, notifyStopped, startAsync, state, stopAsync, toString
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.yamcs.tctm.Link
disable, enable, getConfig, getDetailedStatus, getExtraInfo, getLinkStatus, getName, getParent, getSpec, isDisabled, isEffectivelyDisabled, setParent
Methods inherited from interface org.yamcs.parameter.SystemParametersProducer
getFrequency
Methods inherited from interface org.yamcs.tctm.TcDataLink
isCommandingAvailable, isTcDataLinkImplemented
-
Field Details
-
OPTION_BYPASS
-
waitQueue
-
spCop1Status
-
-
Constructor Details
-
Cop1TcPacketHandler
public Cop1TcPacketHandler(String yamcsInstance, String linkName, TcManagedParameters.TcVcManagedParameters vmp, ScheduledThreadPoolExecutor executor)
-
-
Method Details
-
addMonitor
-
removeMonitor
-
sendCommand
Description copied from interface:TcDataLink
Attempt to send the command and return true if the command has been sent or its processing has finished.If false is returned, the
LinkManager
will attempt to send the command via the next TC link (if any).The link is expected to update the
CommandHistoryPublisher.AcknowledgeSent_KEY
ack in the command history if the method returned true. If it returned false, the ack should not be updated (it will be updated by the next link or by the Link Manager if there is other no link).The link can update the
CommandHistoryPublisher.AcknowledgeSent_KEY
ack with a negative ack and return true (i.e. the command has not been really sent but it has finished processing).The return true/false has been introduced in Yamcs 5.6.0. Before that version, the old method sendTc was implicitly returning true. As of Yamcs 5.6.0 most links return true even when they cannot send the command (setting the negative Sent ack).
Throwing an exception is equivalent with returning false, except a error log will be printed (this is considered a bug)
- Specified by:
sendCommand
in interfaceTcDataLink
- Returns:
-
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 interfaceVcUplinkHandler
- Returns:
-
getFirstFrameTimestamp
public long getFirstFrameTimestamp()Description copied from interface:VcUplinkHandler
Returns the timestamp of the first frame ready to be dispatched orTimeEncoding.INVALID_INSTANT
if there is no frame.The timestamp is used by the
MasterChannelFrameMultiplexer
to select the Virtual Channel from which the next frame is sent in case of FIFO priority scheme.- Specified by:
getFirstFrameTimestamp
in interfaceVcUplinkHandler
- Returns:
-
setVs
-
initiateAD
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.
-
initiateAD
-
initiateADWithVR
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
Initiate AD with Unlock. This causes a BC Unlock frame to be sent to the remote system. -
terminateAD
Terminate the AD service- Returns:
-
setWindowWidth
Set the FOP sliding window with - that is the maximum number of commands that can be unacknoledged at one time.- Parameters:
K
-- Returns:
-
resume
Resume the AD service (if it is suspended)- 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 classcom.google.common.util.concurrent.AbstractService
-
doStop
protected void doStop()- Specified by:
doStop
in classcom.google.common.util.concurrent.AbstractService
-
getDataAvailableSemaphore
-
disableCop1
public void disableCop1(boolean bypassAll) -
setDataAvailableSemaphore
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
- Specified by:
setDataAvailableSemaphore
in interfaceVcUplinkHandler
- Parameters:
dataAvailableSemaphore
-
-
getParameters
Description copied from interface:VcUplinkHandler
return the virtual channel parameters- Specified by:
getParameters
in interfaceVcUplinkHandler
- Returns:
-
setConfig
-
getCop1Config
-
getCop1Status
-
setupSystemParameters
Description copied from interface:Link
Called by the LinkManager before startup if theSystemParametersService
service is enabled, to setup necessary things for later parameter collection.The method is called only on the links that implement the
SystemParametersProducer
interface; they are also registered with theSystemParametersService
to be called regularly after the start.- Specified by:
setupSystemParameters
in interfaceLink
- Overrides:
setupSystemParameters
in classAbstractLink
-
collectSystemParameters
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 classAbstractLink
-
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 classAbstractLink
-