Package jmri.jmrix.tmcc
Class SerialTrafficController
java.lang.Object
jmri.jmrix.AbstractMRTrafficController
jmri.jmrix.tmcc.SerialTrafficController
- All Implemented Interfaces:
SerialInterface
Convert Stream-based I/O to/from TMCC serial messages.
The "SerialInterface" side sends/receives message objects.
The connection to a SerialPortController 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 transitions, based on the necessary state in each message.
Handles initialization, polling, output, and input for multiple Serial Nodes.
-
Nested Class Summary
Nested classes/interfaces inherited from class jmri.jmrix.AbstractMRTrafficController
AbstractMRTrafficController.RcvNotifier, AbstractMRTrafficController.XmtNotifier -
Field Summary
FieldsModifier and TypeFieldDescription(package private) TmccSystemConnectionMemoReference to the system connection memo.Fields inherited from class jmri.jmrix.AbstractMRTrafficController
allowUnexpectedReply, AUTORETRYSTATE, cmdListeners, connectionError, controller, flushReceiveChars, IDLESTATE, istream, listenerQueue, maxRcvExceptionCount, mCurrentMode, mCurrentState, mLastSender, msgQueue, mWaitBeforePoll, NORMALMODE, NOTIFIEDSTATE, OKSENDMSGSTATE, ostream, POLLSTATE, PROGRAMINGMODE, rcvException, rcvThread, replyInDispatch, threadStopRequest, timeoutFlag, timeouts, WAITMSGREPLYSTATE, WAITREPLYINNORMMODESTATE, WAITREPLYINPROGMODESTATE, waitTimePoll, xmtException, xmtRunnable, xmtThread -
Constructor Summary
ConstructorsConstructorDescriptionSerialTrafficController(TmccSystemConnectionMemo adaptermemo) Create a new TMCC SerialTrafficController instance. -
Method Summary
Modifier and TypeMethodDescriptionprotected intaddHeaderToOutput(byte[] msg, AbstractMRMessage m) No header neededvoidprotected voidaddTrailerToOutput(byte[] msg, int offset, AbstractMRMessage m) Add trailer to the outgoing byte stream.protected booleanprotected AbstractMRMessageSets the system to normal mode during programming while in IDLESTATE.protected AbstractMRMessageSet the system to programming mode.protected voidforwardMessage(AbstractMRListener client, AbstractMRMessage m) Forward a SerialMessage to all registered SerialInterface listeners.protected voidforwardReply(AbstractMRListener client, AbstractMRReply m) Forward a SerialReply to all registered SerialInterface listeners.protected voidforwardToPort(AbstractMRMessage m, AbstractMRListener reply) Actually transmits the next message to the portGet access to the system connection memo associated with this traffic controller.protected intDetermine how much many bytes the entire message will take, including space for header and trailerprotected voidloadChars(AbstractMRReply msg, DataInputStream istream) Get characters from the input source, and file a message.protected AbstractMRReplynewReply()protected AbstractMRMessageHandle initialization, output and polling for TMCC from within the running thread.protected AbstractMRListenervoidvoidsendSerialMessage(SerialMessage m, SerialListener reply) Forward a preformatted message to the actual interface.voidSet the system connection memo associated with this traffic controller.protected voidwaitForStartOfReply(DataInputStream istream) Dummy routine, to be filled by protocols that have to skip some start-of-message characters.protected voidSkip warning message, as timeouts are routine in this protocolMethods inherited from class jmri.jmrix.AbstractMRTrafficController
addConsoleListener, addListener, canReceive, connectionWarn, connectPort, disconnectPort, distributeReply, enterProgModeDelayTime, getLastSender, getPortName, getSynchronizeRx, handleOneIncomingReply, handleTimeout, hasTimeouts, newRcvNotifier, notifyMessage, notifyReply, portReadyToSend, portWarn, portWarnTCP, programmerIdle, readByteProtected, receiveLoop, recovery, removeListener, reportReceiveLoopException, resetTimeout, sendMessage, setAllowUnexpectedReply, setSynchronizeRx, status, terminate, terminateThreads, transmitLoop, transmitWait, unexpectedReplyStateErrorMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface jmri.jmrix.tmcc.SerialInterface
status
-
Field Details
-
mMemo
Reference to the system connection memo.
-
-
Constructor Details
-
SerialTrafficController
Create a new TMCC SerialTrafficController instance.- Parameters:
adaptermemo- the associated SystemConnectionMemo
-
-
Method Details
-
addSerialListener
- Specified by:
addSerialListenerin interfaceSerialInterface
-
removeSerialListener
- Specified by:
removeSerialListenerin interfaceSerialInterface
-
enterProgMode
Description copied from class:AbstractMRTrafficControllerSet the system to programming mode.- Specified by:
enterProgModein classAbstractMRTrafficController- Returns:
- any message that needs to be returned to the Command Station to change modes. If no message is needed, returns null.
- See Also:
-
enterNormalMode
Description copied from class:AbstractMRTrafficControllerSets the system to normal mode during programming while in IDLESTATE. IfAbstractMRTrafficController.programmerIdle()returns true, enterNormalMode() is called after a timeout.- Specified by:
enterNormalModein classAbstractMRTrafficController- Returns:
- any message that needs to be returned to the Command Station to change modes. If no message is needed, returns null.
- See Also:
-
getSystemConnectionMemo
Get access to the system connection memo associated with this traffic controller.- Returns:
- associated systemConnectionMemo object
-
setSystemConnectionMemo
Set the system connection memo associated with this traffic controller.- Parameters:
m- associated systemConnectionMemo object
-
forwardMessage
Forward a SerialMessage to all registered SerialInterface listeners.- Specified by:
forwardMessagein classAbstractMRTrafficController- Parameters:
client- abstract listener.m- message to forward.
-
forwardReply
Forward a SerialReply to all registered SerialInterface listeners.- Specified by:
forwardReplyin classAbstractMRTrafficController
-
pollMessage
Handle initialization, output and polling for TMCC from within the running thread.- Specified by:
pollMessagein classAbstractMRTrafficController- Returns:
- Formatted poll message
-
pollReplyHandler
- Specified by:
pollReplyHandlerin classAbstractMRTrafficController
-
sendSerialMessage
Forward a preformatted message to the actual interface.- Specified by:
sendSerialMessagein interfaceSerialInterface
-
newReply
- Specified by:
newReplyin classAbstractMRTrafficController
-
endOfMessage
- Specified by:
endOfMessagein classAbstractMRTrafficController
-
loadChars
Description copied from class:AbstractMRTrafficControllerGet 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:
loadCharsin classAbstractMRTrafficController- Parameters:
msg- message to fillistream- character source.- Throws:
IOException- when presented by the input source.
-
waitForStartOfReply
Description copied from class:AbstractMRTrafficControllerDummy routine, to be filled by protocols that have to skip some start-of-message characters.- Overrides:
waitForStartOfReplyin classAbstractMRTrafficController- Parameters:
istream- input source- Throws:
IOException- from underlying operations
-
addHeaderToOutput
No header needed- Overrides:
addHeaderToOutputin classAbstractMRTrafficController- Parameters:
msg- The output byte streamm- Message results- Returns:
- next location in the stream to fill
-
addTrailerToOutput
Add trailer to the outgoing byte stream.- Overrides:
addTrailerToOutputin classAbstractMRTrafficController- Parameters:
msg- The output byte streamoffset- the first byte not yet usedm- output message to extend
-
lengthOfByteStream
Determine how much many bytes the entire message will take, including space for header and trailer- Overrides:
lengthOfByteStreamin classAbstractMRTrafficController- Parameters:
m- The message to be sent- Returns:
- Number of bytes for msg (3) plus preceeding NOP (3)
-
warnOnTimeout
Skip warning message, as timeouts are routine in this protocol- Overrides:
warnOnTimeoutin classAbstractMRTrafficController
-
forwardToPort
Actually transmits the next message to the port- Overrides:
forwardToPortin classAbstractMRTrafficController- Parameters:
m- the message to sendreply- the Listener sending the message, often provided as 'this'- See Also:
-