jmri.jmrix.acela
Class AcelaTrafficController

java.lang.Object
  extended by jmri.jmrix.AbstractMRTrafficController
      extended by jmri.jmrix.AbstractMRNodeTrafficController
          extended by jmri.jmrix.acela.AcelaTrafficController
All Implemented Interfaces:
AcelaInterface

public class AcelaTrafficController
extends AbstractMRNodeTrafficController
implements AcelaInterface

Converts Stream-based I/O to/from Acela messages.

The "SerialInterface" side sends/receives message objects.

The connection to an AcelaPortController is via a pair of *Streams, which then carry sequences of characters for transmission. Note that this processing is handled in an independent thread.

This handles the state transistions, based on the necessary state in each message.

Handles initialization, polling, output, and input for multiple Serial Nodes.

Author:
Bob Jacobsen Copyright (C) 2003, Bob Jacobsen, Dave Duchamp, multiNode extensions, 2004, Bob Coleman Copyright (C) 2007. 2008 Based on CMRI serial example, modified to establish Acela support.

Nested Class Summary
 
Nested classes/interfaces inherited from class jmri.jmrix.AbstractMRTrafficController
AbstractMRTrafficController.RcvNotifier, AbstractMRTrafficController.XmtNotifier
 
Field Summary
protected static AcelaTrafficController self
           
 
Fields inherited from class jmri.jmrix.AbstractMRNodeTrafficController
maxNode, minNode
 
Fields inherited from class jmri.jmrix.AbstractMRTrafficController
allowUnexpectedReply, cmdListeners, controller, IDLESTATE, istream, mCurrentMode, mCurrentState, mLastSender, mWaitBeforePoll, NORMALMODE, NOTIFIEDSTATE, OKSENDMSGSTATE, ostream, PROGRAMINGMODE, replyInDispatch, WAITMSGREPLYSTATE, WAITREPLYINNORMMODESTATE, WAITREPLYINPROGMODESTATE, xmtRunnable
 
Constructor Summary
AcelaTrafficController()
           
 
Method Summary
 void addAcelaListener(AcelaListener l)
           
protected  boolean endOfMessage(AbstractMRReply msg)
           
protected  AbstractMRMessage enterNormalMode()
           
protected  AbstractMRMessage enterProgMode()
           
protected  void forwardMessage(AbstractMRListener client, AbstractMRMessage m)
          Forward a AcelaMessage to all registered AcelaInterface listeners.
protected  void forwardReply(AbstractMRListener client, AbstractMRReply m)
          Forward a AcelaReply to all registered AcelaInterface listeners.
 boolean getAcelaSensorsState()
           
 boolean getAcelaTrafficControllerState()
           
 int getMaximumNumberOfNodes()
          Public method to get maximum number of Acela nodes
 int getMinimumNodeAddress()
          Public method to get minimum address of an Acela node
 boolean getNeedToPollNodes()
           
protected  void handleTimeout(AbstractMRMessage m)
           
 void initializeAcelaNode(AcelaNode node)
          Public method to set up for initialization of a Acela node
static AcelaTrafficController instance()
          static function returning the AcelaTrafficController instance to use.
protected  void loadChars(AbstractMRReply msg, DataInputStream istream)
          Get characters from the input source, and file a message.
 int lookupAcelaNodeAddress(int bitAddress, boolean isSensor)
          Public method to identify a AcelaNode from its bit address Note: nodeAddress is numbered from 0.
protected  AbstractMRReply newReply()
           
protected  AbstractMRMessage pollMessage()
          Handles initialization, output and polling for Acela Nodes from within the running thread
protected  AbstractMRListener pollReplyHandler()
           
 void registerAcelaNode(AcelaNode node)
          Public method to register a Acela node
 void removeAcelaListener(AcelaListener l)
           
protected  void resetTimeout(AbstractMRMessage m)
           
 void sendAcelaMessage(AcelaMessage m, AcelaListener reply)
          Forward a preformatted message to the actual interface.
 void setAcelaSensorsState(boolean newstate)
           
 void setAcelaTrafficControllerState(boolean newstate)
           
protected  void setInstance()
           
 void setNeedToPollNodes(boolean newstate)
           
 void setSensorManager(AcelaSensorManager m)
           
 void updateSensorsFromPoll(AcelaReply r)
          For each sensor node call markChanges.
protected  void waitForStartOfReply(DataInputStream istream)
          Dummy routine, to be filled by protocols that have to skip some start-of-message characters.
 
Methods inherited from class jmri.jmrix.AbstractMRNodeTrafficController
deleteNode, getMustInit, getNode, getNodeFromAddress, getNumNodes, init, registerNode, setMustInit, setMustInit
 
Methods inherited from class jmri.jmrix.AbstractMRTrafficController
addHeaderToOutput, addListener, addTrailerToOutput, canReceive, connectionWarn, connectPort, disconnectPort, enterProgModeDelayTime, finalize, forwardToPort, getPortName, handleOneIncomingReply, hasTimeouts, lengthOfByteStream, newRcvNotifier, notifyMessage, notifyReply, portReadyToSend, portWarn, programmerIdle, readByteProtected, receiveLoop, removeListener, reportReceiveLoopException, sendMessage, setAllowUnexpectedReply, status
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface jmri.jmrix.acela.AcelaInterface
status
 

Field Detail

self

protected static AcelaTrafficController self
Constructor Detail

AcelaTrafficController

public AcelaTrafficController()
Method Detail

addAcelaListener

public void addAcelaListener(AcelaListener l)
Specified by:
addAcelaListener in interface AcelaInterface

removeAcelaListener

public void removeAcelaListener(AcelaListener l)
Specified by:
removeAcelaListener in interface AcelaInterface

getMinimumNodeAddress

public int getMinimumNodeAddress()
Public method to get minimum address of an Acela node


getMaximumNumberOfNodes

public int getMaximumNumberOfNodes()
Public method to get maximum number of Acela nodes


getAcelaTrafficControllerState

public boolean getAcelaTrafficControllerState()

setAcelaTrafficControllerState

public void setAcelaTrafficControllerState(boolean newstate)

getAcelaSensorsState

public boolean getAcelaSensorsState()

setAcelaSensorsState

public void setAcelaSensorsState(boolean newstate)

getNeedToPollNodes

public boolean getNeedToPollNodes()

setNeedToPollNodes

public void setNeedToPollNodes(boolean newstate)

registerAcelaNode

public void registerAcelaNode(AcelaNode node)
Public method to register a Acela node


initializeAcelaNode

public void initializeAcelaNode(AcelaNode node)
Public method to set up for initialization of a Acela node


lookupAcelaNodeAddress

public int lookupAcelaNodeAddress(int bitAddress,
                                  boolean isSensor)
Public method to identify a AcelaNode from its bit address Note: nodeAddress is numbered from 0. Returns '-1' if a AcelaNode with the specified address was not found


enterProgMode

protected AbstractMRMessage enterProgMode()
Specified by:
enterProgMode in class AbstractMRTrafficController

enterNormalMode

protected AbstractMRMessage enterNormalMode()
Specified by:
enterNormalMode in class AbstractMRTrafficController

forwardMessage

protected void forwardMessage(AbstractMRListener client,
                              AbstractMRMessage m)
Forward a AcelaMessage to all registered AcelaInterface listeners.

Specified by:
forwardMessage in class AbstractMRTrafficController

forwardReply

protected void forwardReply(AbstractMRListener client,
                            AbstractMRReply m)
Forward a AcelaReply to all registered AcelaInterface listeners.

Specified by:
forwardReply in class AbstractMRTrafficController

setSensorManager

public void setSensorManager(AcelaSensorManager m)

pollMessage

protected AbstractMRMessage pollMessage()
Handles initialization, output and polling for Acela Nodes from within the running thread

Specified by:
pollMessage in class AbstractMRTrafficController

handleTimeout

protected void handleTimeout(AbstractMRMessage m)
Overrides:
handleTimeout in class AbstractMRTrafficController

resetTimeout

protected void resetTimeout(AbstractMRMessage m)
Overrides:
resetTimeout in class AbstractMRTrafficController

pollReplyHandler

protected AbstractMRListener pollReplyHandler()
Specified by:
pollReplyHandler in class AbstractMRTrafficController

sendAcelaMessage

public void sendAcelaMessage(AcelaMessage m,
                             AcelaListener reply)
Forward a preformatted message to the actual interface.

Specified by:
sendAcelaMessage in interface AcelaInterface

instance

public static AcelaTrafficController instance()
static function returning the AcelaTrafficController instance to use.

Returns:
The registered AcelaTrafficController instance for general use, if need be creating one.

setInstance

protected void setInstance()
Specified by:
setInstance in class AbstractMRTrafficController

newReply

protected AbstractMRReply newReply()
Specified by:
newReply in class AbstractMRTrafficController

endOfMessage

protected boolean endOfMessage(AbstractMRReply msg)
Specified by:
endOfMessage in class AbstractMRTrafficController

loadChars

protected void loadChars(AbstractMRReply msg,
                         DataInputStream istream)
                  throws IOException
Description copied from class: AbstractMRTrafficController
Get characters from the input source, and file a message.

Returns only when the message is complete.

Only used in the Receive thread.

Handles timeouts on read by ignoring zero-length reads.

Overrides:
loadChars in class AbstractMRTrafficController
Parameters:
msg - message to fill
istream - character source.
Throws:
IOException - when presented by the input source.

waitForStartOfReply

protected void waitForStartOfReply(DataInputStream istream)
                            throws IOException
Description copied from class: AbstractMRTrafficController
Dummy routine, to be filled by protocols that have to skip some start-of-message characters.

Overrides:
waitForStartOfReply in class AbstractMRTrafficController
Throws:
IOException

updateSensorsFromPoll

public void updateSensorsFromPoll(AcelaReply r)
For each sensor node call markChanges.



Copyright © 1997 - 2008 JMRI Community.
JMRI, DecoderPro, PanelPro, SoundPro, DispatcherPro and associated logos are our trademarks.

Additional information on copyright, trademarks and licenses is linked here.
Site hosted by: SourceForge_Logo