org.ka2ddo.yaac.io
Class Transmitter

java.lang.Object
  extended by org.ka2ddo.yaac.io.PortManager
      extended by org.ka2ddo.yaac.io.Transmitter
All Implemented Interfaces:
java.lang.Runnable

public final class Transmitter
extends PortManager
implements java.lang.Runnable

This class handles scheduling transmit requests to the various ports. It handles retransmissions with backoffs, and reschedulings upon data updates, and caching transmit-related parameters..


Nested Class Summary
static class Transmitter.Close
          Class to shut down the Transmitter.
 
Field Summary
static java.lang.String ARISS_DIGIPEAT_CHOICE
          Suggested path for messaging through the International Space Station.
static java.lang.String OUTNET_CHOICE
          Suggested path to forward to the Outernet.
 
Method Summary
 void close()
          Shut down the transmitter.
 void delayedQueue(AX25FrameSource entry, long timeToSend)
          Queue the specified frame source for transmission over the specified (or all, if not specified) transmit-enabled PortConnectors.
 int getDecayRatio()
          Get the scaling factor by which the message repeat interval is enlarged (until the default slow send rate is reached).
 java.lang.String getDefaultDigipeatPath()
          Get the default sequence of digipeat aliases that should be used for locally originated messages (assuming proportional pathing isn't being used).
static java.lang.String getFarthestReachingDigipeatPathChoice()
          Return the longest range digipeat alias path configured for the local station.
 int getFastSpeed()
          Fastest speed of station motion such that position message transmission intervals are maximized to the initial transmission rate, regardless of how fast the station is actually moving.
 int getInitialSendRate()
          Get the time interval between retransmissions when a message is newly introduced into the system.
static Transmitter getInstance()
          Get a reference to the singleton Transmitter object.
 PacketExportMode getLoggerFormat()
          Get the current format for AX.25 message logging.
 int getMinTurnAngle()
          Get the minimum amount of turn angle change before YAAC will accelerate reporting beacon position updates ("corner pegging").
 int getRetransmitCount()
          Get the locally-originated message retransmit count.
 int getSlowSendRate()
          The slowest rate a message should be sent.
 int getSlowSpeed()
          Slowest speed of station motion such that position message transmissions are scheduled as if station was not moving.
static java.lang.String[] getStandardDigipeatPathChoices()
          Build a sorted list of all the currently registered known choices for digipeat alias paths.
 int getTurnSlope()
          Get the turn slope, which is the scaling factor for the increase over the minimum turn angle before beacon retransmissions will be accelerated.
 void queue(AX25FrameSource entry)
          Queue the specified frame source for transmission over the specified (or all, if not specified) transmit-enabled PortConnectors.
 void run()
          DO NOT CALL.
 void setDecayRatio(int decayRatio)
          Set the scaling factor by which the message repeat interval is enlarged (until the default slow send rate is reached).
 void setDefaultDigipeatPath(java.lang.String defaultDigipeatPath)
          Set the default sequence of digipeat aliases that should be used for locally originated messages (assuming proportional pathing isn't being used).
 void setFastSpeed(int fastSpeed)
          Set fastest speed of station motion such that position message transmission intervals are maximized to the initial transmission rate, regardless of how fast the station is actually moving.
 void setInitialSendRate(int initialSendRate)
          Set the time interval between retransmissions when a message is newly introduced into the system.
 void setLoggerFormat(PacketExportMode pem)
          Set the format for AX.25 message logging.
 void setMinTurnAngle(int minTurnAngle)
          Set the minimum amount of turn angle change before YAAC will accelerate reporting beacon position updates ("corner pegging").
 void setRetransmitCount(int retransmitCount)
          Set the locally-originated message retransmit count.
 void setSlowSendRate(int slowSendRate)
          Set the slowest rate a message should be sent.
 void setSlowSpeed(int slowSpeed)
          Set slowest speed of station motion such that position message transmissions are scheduled as if station was not moving.
 void setTurnSlope(int turnSlope)
          Set the turn slope, which is the scaling factor for the increase over the minimum turn angle before beacon retransmissions will be accelerated.
 
Methods inherited from class org.ka2ddo.yaac.io.PortManager
addPortMgmtListener, addPortStatusListener, firePortClosed, firePortCreated, firePortDeleted, firePortOpened, getCallsign, getConnector, getNextAvailablePortNumber, getPortList, getPreferredConnector, removePortMgmtListener, removePortStatusListener, setSuggestedLocalCallsign
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

ARISS_DIGIPEAT_CHOICE

public static final java.lang.String ARISS_DIGIPEAT_CHOICE
Suggested path for messaging through the International Space Station.

See Also:
Constant Field Values

OUTNET_CHOICE

public static final java.lang.String OUTNET_CHOICE
Suggested path to forward to the Outernet.

See Also:
Constant Field Values
Method Detail

getInstance

public static Transmitter getInstance()
Get a reference to the singleton Transmitter object.

Returns:
the Transmitter object

getStandardDigipeatPathChoices

public static java.lang.String[] getStandardDigipeatPathChoices()
Build a sorted list of all the currently registered known choices for digipeat alias paths.

Returns:
array of alias Strings

getFarthestReachingDigipeatPathChoice

public static java.lang.String getFarthestReachingDigipeatPathChoice()
Return the longest range digipeat alias path configured for the local station.

Returns:
digipeat path string

getDecayRatio

public int getDecayRatio()
Get the scaling factor by which the message repeat interval is enlarged (until the default slow send rate is reached).

Returns:
int decay ratio

setDecayRatio

public void setDecayRatio(int decayRatio)
Set the scaling factor by which the message repeat interval is enlarged (until the default slow send rate is reached).

Parameters:
decayRatio - int decay ratio (should be 2 or 3)

getInitialSendRate

public int getInitialSendRate()
Get the time interval between retransmissions when a message is newly introduced into the system.

Returns:
send interval in seconds

setInitialSendRate

public void setInitialSendRate(int initialSendRate)
Set the time interval between retransmissions when a message is newly introduced into the system.

Parameters:
initialSendRate - send interval in seconds

getSlowSendRate

public int getSlowSendRate()
The slowest rate a message should be sent. For messages to be terminated, they should stop being requeued when the retransmission interval is enlarged to this.

Returns:
transmission interval in seconds

setSlowSendRate

public void setSlowSendRate(int slowSendRate)
Set the slowest rate a message should be sent. For messages to be terminated, they should stop being requeued when the retransmission interval is enlarged to this.

Parameters:
slowSendRate - transmission interval in seconds

getSlowSpeed

public int getSlowSpeed()
Slowest speed of station motion such that position message transmissions are scheduled as if station was not moving.

Returns:
slowest speed in current speed units (nm, mi, or km)
See Also:
DistanceUnit

setSlowSpeed

public void setSlowSpeed(int slowSpeed)
Set slowest speed of station motion such that position message transmissions are scheduled as if station was not moving.

Parameters:
slowSpeed - slowest speed in current speed units (nm, mi, or km)
See Also:
DistanceUnit

getFastSpeed

public int getFastSpeed()
Fastest speed of station motion such that position message transmission intervals are maximized to the initial transmission rate, regardless of how fast the station is actually moving.

Returns:
fastest speed in current speed units (nm/hr, mi/hr, or km/hr)
See Also:
DistanceUnit

setFastSpeed

public void setFastSpeed(int fastSpeed)
Set fastest speed of station motion such that position message transmission intervals are maximized to the initial transmission rate, regardless of how fast the station is actually moving.

Parameters:
fastSpeed - fastest speed in current speed units (nm/hr, mi/hr, or km/hr)
See Also:
DistanceUnit

getMinTurnAngle

public int getMinTurnAngle()
Get the minimum amount of turn angle change before YAAC will accelerate reporting beacon position updates ("corner pegging"). This will be adjusted by the speed-specific turn slope.

Returns:
the current minimum turn angle
See Also:
getTurnSlope()

setMinTurnAngle

public void setMinTurnAngle(int minTurnAngle)
Set the minimum amount of turn angle change before YAAC will accelerate reporting beacon position updates ("corner pegging"). This will be adjusted by the speed-specific turn slope.

Parameters:
minTurnAngle - the current minimum turn angle

getTurnSlope

public int getTurnSlope()
Get the turn slope, which is the scaling factor for the increase over the minimum turn angle before beacon retransmissions will be accelerated. The actual amount of turn needed to cause a beacon retransmission is getMinTurnAngle() + GPSDistributor.getInstance().getCurrentFix().speed / getTurnSlope()

Returns:
the turn slope scaling factor
See Also:
getMinTurnAngle()

setTurnSlope

public void setTurnSlope(int turnSlope)
Set the turn slope, which is the scaling factor for the increase over the minimum turn angle before beacon retransmissions will be accelerated. The actual amount of turn needed to cause a beacon retransmission is getMinTurnAngle() + GPSDistributor.getInstance().getCurrentFix().speed / getTurnSlope()

Parameters:
turnSlope - the turn slope scaling factor

getRetransmitCount

public int getRetransmitCount()
Get the locally-originated message retransmit count.

Returns:
retransmit count

setRetransmitCount

public void setRetransmitCount(int retransmitCount)
Set the locally-originated message retransmit count.

Parameters:
retransmitCount - number of times to retransmit a locally transmitted message when not acknowledged

getDefaultDigipeatPath

public java.lang.String getDefaultDigipeatPath()
Get the default sequence of digipeat aliases that should be used for locally originated messages (assuming proportional pathing isn't being used).

Returns:
comma-separated ordered list of digipeat aliases

setDefaultDigipeatPath

public void setDefaultDigipeatPath(java.lang.String defaultDigipeatPath)
Set the default sequence of digipeat aliases that should be used for locally originated messages (assuming proportional pathing isn't being used).

Parameters:
defaultDigipeatPath - comma-separated ordered list of digipeat aliases

getLoggerFormat

public PacketExportMode getLoggerFormat()
Get the current format for AX.25 message logging.

Returns:
PacketExportMode in use

setLoggerFormat

public void setLoggerFormat(PacketExportMode pem)
Set the format for AX.25 message logging.

Parameters:
pem - PacketExportMode to use

queue

public void queue(AX25FrameSource entry)
Queue the specified frame source for transmission over the specified (or all, if not specified) transmit-enabled PortConnectors.

Parameters:
entry - AX25FrameSource of the frame to be transmitted

delayedQueue

public void delayedQueue(AX25FrameSource entry,
                         long timeToSend)
Queue the specified frame source for transmission over the specified (or all, if not specified) transmit-enabled PortConnectors.

Parameters:
entry - AX25FrameSource of the frame to be transmitted
timeToSend - long time in milliseconds since Unix epoch when packet is to be dequeued and transmitted

run

public void run()
DO NOT CALL. Internal transmit dispatch queue reader.

Specified by:
run in interface java.lang.Runnable

close

public void close()
Shut down the transmitter.