Package jmri.jmrix.sprog
Class SprogTrafficController
- java.lang.Object
-
- jmri.jmrix.sprog.SprogTrafficController
-
- All Implemented Interfaces:
java.lang.Runnable,SprogInterface
public class SprogTrafficController extends java.lang.Object implements SprogInterface, java.lang.Runnable
Converts Stream-based I/O to/from Sprog messages. The "SprogInterface" side sends/receives message objects. The connection to a SprogPortController is via a pair of *Streams, which then carry sequences of characters for transmission. Note that this processing is handled in an independent thread.Rewritten during 4.11.x series. Create a high priority thread for the tc to move everything off the swing thread. Use a blocking queue to handle asynchronous messages from multiple sources.
-
-
Field Summary
Fields Modifier and Type Field Description protected java.util.Vector<SprogListener>cmdListeners(package private) java.io.DataInputStreamistream(package private) SprogListenerlastSender(package private) java.io.OutputStreamostreamprotected static SprogTrafficControllerself(package private) java.util.concurrent.BlockingQueue<jmri.jmrix.sprog.SprogTrafficController.MessageTuple>sendQueueinttimeout
-
Constructor Summary
Constructors Constructor Description SprogTrafficController(SprogSystemConnectionMemo adaptermemo)Create a new SprogTrafficController instance.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddSprogListener(SprogListener l)voidconnectPort(AbstractPortController p)Make connection to existing PortController object.voiddisconnectPort(AbstractPortController p)Break connection to existing SprogPortController object.voiddispose()(package private) booleanendReply(SprogReply msg)SprogSystemConnectionMemogetAdapterMemo()protected SerialDriverAdaptergetController()Get the port controller, as a SerialDriverAdapter.SprogConstants.SprogStategetSprogState()voidhandleOneIncomingReply()Handle an incoming reply.booleanisNormalMode()booleanisSIIBootMode()booleanisTcThreadAlive()Check if the Sprog TC Thread ( started on construction of SprogTrafficController ) is alive.booleanisV4BootMode()protected voidnotifyMessage(SprogMessage m, SprogListener originator)protected voidnotifyReply(SprogReply r)protected voidnotifyReply(SprogReply r, SprogListener lastSender)voidremoveSprogListener(SprogListener l)voidresetTimeout()Reset timeout to default depending on current modevoidrun()Block until a message is available from the queue, send it to the interface and then block until reply is received or a timeout occurs.voidsendSprogMessage(SprogMessage m)Enqueue a preformatted message to be sent to the actual interfacevoidsendSprogMessage(SprogMessage m, SprogListener replyTo)Enqueue a preformatted message to be sent to the actual interfacevoidsendToInterface(SprogMessage m)Forward a preformatted message to the interface.voidsetAdapterMemo(SprogSystemConnectionMemo adaptermemo)voidsetSprogState(SprogConstants.SprogState s)voidsetTimeout(int t)booleanstatus()Test operational status of interface.
-
-
-
Field Detail
-
lastSender
SprogListener lastSender
-
timeout
public int timeout
-
cmdListeners
protected java.util.Vector<SprogListener> cmdListeners
-
sendQueue
java.util.concurrent.BlockingQueue<jmri.jmrix.sprog.SprogTrafficController.MessageTuple> sendQueue
-
self
protected static volatile SprogTrafficController self
-
istream
java.io.DataInputStream istream
-
ostream
java.io.OutputStream ostream
-
-
Constructor Detail
-
SprogTrafficController
public SprogTrafficController(SprogSystemConnectionMemo adaptermemo)
Create a new SprogTrafficController instance.- Parameters:
adaptermemo- the associated SystemConnectionMemo
-
-
Method Detail
-
status
public boolean status()
Description copied from interface:SprogInterfaceTest operational status of interface.- Specified by:
statusin interfaceSprogInterface- Returns:
- true if interface implementation is operational.
-
isTcThreadAlive
public boolean isTcThreadAlive()
Check if the Sprog TC Thread ( started on construction of SprogTrafficController ) is alive. For testing purposes.- Returns:
- true if alive, else false.
-
addSprogListener
public void addSprogListener(SprogListener l)
- Specified by:
addSprogListenerin interfaceSprogInterface
-
removeSprogListener
public void removeSprogListener(SprogListener l)
- Specified by:
removeSprogListenerin interfaceSprogInterface
-
resetTimeout
public void resetTimeout()
Reset timeout to default depending on current mode
-
setTimeout
public void setTimeout(int t)
-
getSprogState
public SprogConstants.SprogState getSprogState()
-
setSprogState
public void setSprogState(SprogConstants.SprogState s)
-
isNormalMode
public boolean isNormalMode()
-
isSIIBootMode
public boolean isSIIBootMode()
-
isV4BootMode
public boolean isV4BootMode()
-
notifyMessage
protected void notifyMessage(SprogMessage m, SprogListener originator)
-
notifyReply
protected void notifyReply(SprogReply r)
-
notifyReply
protected void notifyReply(SprogReply r, SprogListener lastSender)
-
sendSprogMessage
public void sendSprogMessage(SprogMessage m)
Enqueue a preformatted message to be sent to the actual interface- Parameters:
m- The message to be forwarded
-
sendSprogMessage
public void sendSprogMessage(SprogMessage m, SprogListener replyTo)
Enqueue a preformatted message to be sent to the actual interface- Specified by:
sendSprogMessagein interfaceSprogInterface- Parameters:
m- Message to sendreplyTo- Who is sending the message
-
run
public void run()
Block until a message is available from the queue, send it to the interface and then block until reply is received or a timeout occurs. This will be a very long timeout to allow for page mode programming operations in SPROG programmer mode.- Specified by:
runin interfacejava.lang.Runnable
-
sendToInterface
public void sendToInterface(SprogMessage m)
Forward a preformatted message to the interface.- Parameters:
m- The message to be forwarded
-
connectPort
public void connectPort(AbstractPortController p)
Make connection to existing PortController object.- Parameters:
p- The port controller
-
getController
protected SerialDriverAdapter getController()
Get the port controller, as a SerialDriverAdapter.- Returns:
- the port controller
-
disconnectPort
public void disconnectPort(AbstractPortController p)
Break connection to existing SprogPortController object.Once broken, attempts to send via "message" member will fail.
- Parameters:
p- the connection to break
-
setAdapterMemo
public void setAdapterMemo(SprogSystemConnectionMemo adaptermemo)
-
getAdapterMemo
public SprogSystemConnectionMemo getAdapterMemo()
-
endReply
boolean endReply(SprogReply msg)
-
handleOneIncomingReply
public void handleOneIncomingReply()
Handle an incoming reply.
-
dispose
public void dispose()
-
-