Class GcTrafficController
java.lang.Object
jmri.jmrix.AbstractMRTrafficController
jmri.jmrix.can.AbstractCanTrafficController
jmri.jmrix.can.TrafficController
jmri.jmrix.can.adapters.gridconnect.GcTrafficController
- All Implemented Interfaces:
CanInterface
- Direct Known Subclasses:
MergTrafficController
Traffic controller for the GridConnect protocol.
GridConnect uses messages transmitted as an ASCII string of up to 24 characters of the form: :ShhhhNd0d1d2d3d4d5d6d7;
The S indicates a standard CAN frame hhhh is the two byte header (11 useful bits) N or R indicates a normal or remote frame d0 - d7 are the (up to) 8 data bytes
-
Nested Class Summary
Nested classes/interfaces inherited from class jmri.jmrix.AbstractMRTrafficController
AbstractMRTrafficController.RcvNotifier, AbstractMRTrafficController.XmtNotifier -
Field Summary
FieldsFields inherited from class jmri.jmrix.can.TrafficController
_canidFields 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
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected voidaddTrailerToOutput(byte[] msg, int offset, AbstractMRMessage m) Does nothing.Make a CanReply from a GridConnect reply.Encode a CanMessage for the hardware.(package private) booleanDetect if the reply buffer ends with ";".protected booleanprotected voidforwardMessage(AbstractMRListener client, AbstractMRMessage m) Forward a CanMessage to all registered CanInterface listeners.protected voidforwardReply(AbstractMRListener client, AbstractMRReply r) Forward a CanReply to all registered CanInterface listeners.intGet the GridConnect State.booleanGet if GcTC is in Boot Mode.protected intDetermine how much many bytes the entire message will take, including space for header and trailer.protected voidloadChars(AbstractMRReply msg, DataInputStream istream) Get characters from the input source, and file a message.protected AbstractMRMessageGet new message for hardware protocol.protected AbstractMRReplynewReply()New reply from hardware.voidsendCanMessage(CanMessage m, CanListener reply) Forward a preformatted message to the actual interface.voidsendCanReply(CanReply r, CanListener reply) Forward a preformatted reply to the actual interface.voidsetgcState(int state) Set the GridConnect State.Methods inherited from class jmri.jmrix.can.TrafficController
getCanid, setCanId, setCanIdMethods inherited from class jmri.jmrix.can.AbstractCanTrafficController
addCanConsoleListener, addCanListener, distributeOneReply, enterNormalMode, enterProgMode, forwardToPort, handleOneIncomingReply, pollMessage, pollReplyHandler, removeCanListenerMethods inherited from class jmri.jmrix.AbstractMRTrafficController
addConsoleListener, addHeaderToOutput, addListener, canReceive, connectionWarn, connectPort, disconnectPort, distributeReply, enterProgModeDelayTime, getLastSender, getPortName, getSynchronizeRx, handleTimeout, hasTimeouts, newRcvNotifier, notifyMessage, notifyReply, portReadyToSend, portWarn, portWarnTCP, programmerIdle, readByteProtected, receiveLoop, recovery, removeListener, reportReceiveLoopException, resetTimeout, sendMessage, setAllowUnexpectedReply, setSynchronizeRx, status, terminate, terminateThreads, transmitLoop, transmitWait, unexpectedReplyStateError, waitForStartOfReply, warnOnTimeoutMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface jmri.jmrix.can.CanInterface
status
-
Field Details
-
NORMAL
- See Also:
-
BOOTMODE
- See Also:
-
-
Constructor Details
-
GcTrafficController
public GcTrafficController()Create new GridConnect Traffic Controller.
-
-
Method Details
-
forwardMessage
Forward a CanMessage to all registered CanInterface listeners. Implement this to forward a specific message type to a protocol-specific listener interface. This puts the casting into the concrete class.- Specified by:
forwardMessagein classAbstractMRTrafficController- Parameters:
client- abstract listener.m- message to forward.
-
forwardReply
Forward a CanReply to all registered CanInterface listeners.- Specified by:
forwardReplyin classAbstractMRTrafficController
-
getgcState
Get the GridConnect State.- Returns:
- NORMAL or BOOTMODE
-
setgcState
Set the GridConnect State.- Parameters:
state- NORMAL or BOOTMODE
-
isBootMode
Get if GcTC is in Boot Mode.- Returns:
- true if in Boot Mode, else False.
-
sendCanMessage
Forward a preformatted message to the actual interface. Send a message through the interface.- Parameters:
m- Message to be sent.reply- Listener to be notified of reply.
-
sendCanReply
Forward a preformatted reply to the actual interface. Send a reply through the interface.- Parameters:
r- Reply to be sent.reply- Listener to be notified of reply.
-
addTrailerToOutput
Does nothing. 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
-
newMessage
Get new message for hardware protocol.- Specified by:
newMessagein classAbstractCanTrafficController- Returns:
- New GridConnect Message.
-
decodeFromHardware
Make a CanReply from a GridConnect reply.- Specified by:
decodeFromHardwarein classAbstractCanTrafficController
-
encodeForHardware
Encode a CanMessage for the hardware.- Specified by:
encodeForHardwarein classAbstractCanTrafficController
-
newReply
New reply from hardware.- Specified by:
newReplyin classAbstractMRTrafficController
-
endOfMessage
- Specified by:
endOfMessagein classAbstractMRTrafficController
-
endNormalReply
Detect if the reply buffer ends with ";".- Parameters:
r- Reply- Returns:
- true if contains end, else false.
-
loadChars
Get characters from the input source, and file a message.Returns only when the message is complete.
This is over-ridden from AbstractMRTrafficController so we can add suppression of the characters before ':'. We can't use waitForStartOfReply() because that strips the 1st character also.
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.
-