Class DelayChannel

  • All Implemented Interfaces:
    java.lang.Cloneable, Actor, Executable, FiringsRecordable, Initializable, TypedActor, ChannelListener, PropertyTransformer, WirelessChannel, Changeable, Debuggable, DebugListener, Derivable, Instantiable, ModelErrorHandler, MoMLExportable, Moveable, Nameable, ValueListener
    Direct Known Subclasses:
    LimitedRangeChannel

    public class DelayChannel
    extends ErasureChannel
    Model of a wireless channel with a specified propagation speed and loss probability. The propagation speed introduces delay that depends on the distance between the transmitter and receiver at the time that the transmitter initiates the communication. This channel model assumes that the duration of the message is (effectively) zero, so that neither the transmitter nor the receiver move during the transmission. It also assumes that the receiver does not move during propagation. I.e., it assumes that the propagation of the message is much faster than the node movement.

    A speed equal to Infinity (the default) results in no propagation delay. If the loss probability is greater than zero then on each call to the transmit() method, for each receiver in range, with the specified probability, the transmission to that receiver will not occur. Whether a transmission occurs to a particular receiver is independent of whether it occurs to any other receiver.

    Since:
    Ptolemy II 4.0
    Version:
    $Id$
    Author:
    Edward A. Lee
    Pt.AcceptedRating:
    Yellow (cxh)
    Pt.ProposedRating:
    Green (cxh)
    • Field Detail

      • propagationSpeed

        public Parameter propagationSpeed
        The propagation speed. This determines the delay between transmission and reception. This is a double that defaults to Infinity, which means that there is no delay.
    • Constructor Detail

      • DelayChannel

        public DelayChannel​(CompositeEntity container,
                            java.lang.String name)
                     throws IllegalActionException,
                            NameDuplicationException
        Construct a channel with the given name contained by the specified entity. The container argument must not be null, or a NullPointerException will be thrown. This relation will use the workspace of the container for synchronization and version counts. If the name argument is null, then the name is set to the empty string. This constructor write-synchronizes on the workspace.
        Parameters:
        container - The container.
        name - The name of the relation.
        Throws:
        IllegalActionException - If the container is incompatible with this relation.
        NameDuplicationException - If the name coincides with a relation already in the container.
    • Method Detail

      • attributeChanged

        public void attributeChanged​(Attribute attribute)
                              throws IllegalActionException
        If the specified attribute is propagationSpeed, then check that a positive number is given. Otherwise, defer to the base class.
        Overrides:
        attributeChanged in class NamedObj
        Parameters:
        attribute - The attribute that changed.
        Throws:
        IllegalActionException - If the change is not acceptable to this container.
      • clone

        public java.lang.Object clone​(Workspace workspace)
                               throws java.lang.CloneNotSupportedException
        Clone the object into the specified workspace. The new object is not added to the directory of that workspace (you must do this yourself if you want it there).
        Overrides:
        clone in class ErasureChannel
        Parameters:
        workspace - The workspace for the cloned object.
        Returns:
        The new Attribute.
        Throws:
        java.lang.CloneNotSupportedException - Not thrown in this base class
        See Also:
        NamedObj.exportMoML(Writer, int, String), NamedObj.setDeferringChangeRequests(boolean)
      • fire

        public void fire()
                  throws IllegalActionException
        If the current time matches one of the times that we have previously recorded as the reception time for a transmission, then deliver the token to the receiver.
        Specified by:
        fire in interface Executable
        Overrides:
        fire in class AtomicActor<TypedIOPort>
        Throws:
        IllegalActionException - If the _transmitTo() method of the base class throws it, i.e. the token attribute of the reception cannot be converted or the token attribute is null and the receiver attribute of the receptions does not support clear.
      • _transmitTo

        protected void _transmitTo​(Token token,
                                   WirelessIOPort sender,
                                   WirelessReceiver receiver,
                                   RecordToken properties)
                            throws IllegalActionException
        Transmit the specified token to the specified receiver with the specified properties. If propagationSpeed is less than Infinity, then this results in a call to fireAt() of the director for each receiver that is in range. The token is not actually transmitted to the receiver until the corresponding invocation of fire() occurs. The time delay is equal to distance/propagationSpeed. See the class comments for the assumptions that make this correct.

        If the lossProbability is zero, (the default) then the specified receiver will receive the token if it has room. If lossProbability is greater than zero, the token will be lost with the specified probability, independently for each receiver in range. Note that in this base class, a port is in range if it refers to this channel by name and is at the right place in the hierarchy. This base class makes no use of the properties argument. But derived classes may limit the range or otherwise change transmission properties using this argument.

        Overrides:
        _transmitTo in class ErasureChannel
        Parameters:
        token - The token to transmit, or null to clear the specified receiver.
        sender - The sending port.
        receiver - The receiver to which to transmit.
        properties - The transmit properties (ignored in this base class).
        Throws:
        IllegalActionException - If the token cannot be converted or if the token argument is null and the destination receiver does not support clear.