Package jmri.jmrix.lenz.xnetsimulator
Class XNetSimulatorAdapter
- java.lang.Object
-
- jmri.jmrix.AbstractPortController
-
- jmri.jmrix.AbstractSerialPortController
-
- jmri.jmrix.lenz.XNetSimulatorPortController
-
- jmri.jmrix.lenz.xnetsimulator.XNetSimulatorAdapter
-
- All Implemented Interfaces:
java.lang.Runnable
,XNetPortController
,PortAdapter
,SerialPortAdapter
public class XNetSimulatorAdapter extends XNetSimulatorPortController implements java.lang.Runnable
Provide access to a simulated XpressNet system.Currently, the XNetSimulator reacts to commands sent from the user interface with messages an appropriate reply message.
NOTE: Most XpressNet commands are still unsupported in this implementation.
Normally controlled by the lenz.XNetSimulator.XNetSimulatorFrame class.
NOTE: Some material in this file was modified from other portions of the support infrastructure.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class jmri.jmrix.AbstractSerialPortController
AbstractSerialPortController.Blocking, AbstractSerialPortController.FlowControl
-
Nested classes/interfaces inherited from class jmri.jmrix.AbstractPortController
AbstractPortController.Option
-
-
Field Summary
-
Fields inherited from class jmri.jmrix.AbstractSerialPortController
currentSerialPort, mBaudRate, mPort
-
Fields inherited from class jmri.jmrix.AbstractPortController
allowConnectionRecovery, manufacturerName, opened, option1Name, option2Name, option3Name, option4Name, options, reconnectinterval, reconnectMaxAttempts, reconnectMaxInterval
-
-
Constructor Summary
Constructors Constructor Description XNetSimulatorAdapter()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected XNetReply
accInfoReply(int dccTurnoutAddress)
Creates a reply for the specific turnout dcc address.protected XNetReply
accInfoReply(int baseAddress, boolean nibble)
Creates a reply packet for a turnout/accessory.protected XNetReply
accInfoReply(XNetMessage m)
protected XNetReply
accReqReply(XNetMessage m)
void
configure()
Set up all of the other objects to operate with an XNetSimulator connected to this port.protected void
configure(XNetTrafficController packets)
protected XNetReply
feedbackInfoReply(XNetMessage m)
protected XNetReply
generateAccRequestReply(int address, int output, boolean state, boolean previousAccessoryState)
Generate reply to accessory request command.protected int
getAccessoryStateBits(int a)
Returns accessory state, in the Operation Info Reply bit format.java.io.DataInputStream
getInputStream()
Get the InputStream from the port.java.io.DataOutputStream
getOutputStream()
Get the outputStream to the port.protected int
getTurnoutFeedbackType()
Return the turnout feedback type.protected XNetMessage
loadChars()
Get characters from the input source, and file a message.boolean
okToSend()
Can the port accept additional characters?java.lang.String
openPort(java.lang.String portName, java.lang.String appName)
Open a specified port.protected byte
readByteProtected(java.io.DataInputStream istream)
Read a single byte, protecting against various timeouts, etc.void
run()
void
setOutputBufferEmpty(boolean s)
Tell if the output buffer is empty or full.boolean
status()
Check that this object is ready to operate.-
Methods inherited from class jmri.jmrix.lenz.XNetSimulatorPortController
getSystemConnectionMemo, hasTimeSlot, setTimeSlot, validBaudNumbers, validBaudRates
-
Methods inherited from class jmri.jmrix.AbstractSerialPortController
activatePort, activatePort, activatePort, closeConnection, closeSerialPort, configureBaudRate, configureBaudRateFromIndex, configureBaudRateFromNumber, configureLeads, configureLeadsAndFlowControl, configureLeadsAndFlowControl, connect, currentBaudNumber, defaultBaudIndex, getActualPortNames, getCurrentBaudIndex, getCurrentBaudNumber, getCurrentBaudRate, getCurrentPortName, getFlowControl, getPortSettingsString, handlePortBusy, handlePortNotFound, handlePortNotFound, isPortOpen, replacePortWithFakePort, reportPortStatus, resetupConnection, setBaudRate, setComPortTimeouts, setDataListener, setFlowControl, setPort
-
Methods inherited from class jmri.jmrix.AbstractPortController
configureOption1, configureOption2, configureOption3, configureOption4, dispose, getDisabled, getManufacturer, getOption1Name, getOption2Name, getOption3Name, getOption4Name, getOptionChoices, getOptionDisplayName, getOptions, getOptionState, getReconnectMaxAttempts, getReconnectMaxInterval, getSystemPrefix, getUserName, isDirty, isOptionAdvanced, isOptionTypePassword, isOptionTypeText, isRestartRequired, purgeStream, reconnect, reconnectFromLoop, recover, safeSleep, setClosed, setDisabled, setManufacturer, setOpened, setOptionState, setReconnectMaxAttempts, setReconnectMaxInterval, setSystemConnectionMemo, setSystemPrefix, setUserName
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface jmri.jmrix.PortAdapter
connect, dispose, getDisabled, getOption1Name, getOption2Name, getOption3Name, getOption4Name, getOptionChoices, getOptionDisplayName, getOptions, getOptionState, getReconnectMaxAttempts, getReconnectMaxInterval, getSystemPrefix, getUserName, isDirty, isOptionAdvanced, isOptionTypePassword, isOptionTypeText, isRestartRequired, recover, setDisabled, setOptionState, setReconnectMaxAttempts, setReconnectMaxInterval, setSystemConnectionMemo, setSystemPrefix, setUserName
-
Methods inherited from interface jmri.jmrix.SerialPortAdapter
configureOption1, configureOption2, configureOption3, configureOption4, getManufacturer, getPortNames, setManufacturer
-
-
-
-
Constructor Detail
-
XNetSimulatorAdapter
public XNetSimulatorAdapter()
-
-
Method Detail
-
openPort
public java.lang.String openPort(java.lang.String portName, java.lang.String appName)
Description copied from interface:SerialPortAdapter
Open a specified port.- Specified by:
openPort
in interfaceSerialPortAdapter
- Parameters:
portName
- name tu use for this portappName
- provided to the underlying OS during startup so that it can show on status displays, etc.- Returns:
- null indicates OK return, else error message.
-
setOutputBufferEmpty
public void setOutputBufferEmpty(boolean s)
Tell if the output buffer is empty or full. This should only be set to false by external processes.- Specified by:
setOutputBufferEmpty
in interfaceXNetPortController
- Specified by:
setOutputBufferEmpty
in classXNetSimulatorPortController
- Parameters:
s
- true if the buffer is empty; false otherwise
-
okToSend
public boolean okToSend()
Can the port accept additional characters? The state of CTS determines this, as there seems to be no way to check the number of queued bytes and buffer length. This might go false for short intervals, but it might also stick off if something goes wrong.- Specified by:
okToSend
in interfaceXNetPortController
- Overrides:
okToSend
in classXNetSimulatorPortController
- Returns:
- true if OK to send, else false.
-
configure
public void configure()
Set up all of the other objects to operate with an XNetSimulator connected to this port.- Specified by:
configure
in interfacePortAdapter
- Specified by:
configure
in interfaceSerialPortAdapter
-
configure
protected void configure(XNetTrafficController packets)
-
getInputStream
public java.io.DataInputStream getInputStream()
Description copied from class:AbstractPortController
Get the InputStream from the port.- Specified by:
getInputStream
in interfacePortAdapter
- Specified by:
getInputStream
in classXNetSimulatorPortController
- Returns:
- the InputStream from the port
-
getOutputStream
public java.io.DataOutputStream getOutputStream()
Description copied from class:AbstractPortController
Get the outputStream to the port.- Specified by:
getOutputStream
in interfacePortAdapter
- Specified by:
getOutputStream
in classXNetSimulatorPortController
- Returns:
- the outputStream to the port
-
status
public boolean status()
Description copied from class:XNetSimulatorPortController
Check that this object is ready to operate. This is a question of configuration, not transient hardware status.- Specified by:
status
in interfacePortAdapter
- Specified by:
status
in interfaceSerialPortAdapter
- Specified by:
status
in interfaceXNetPortController
- Specified by:
status
in classXNetSimulatorPortController
- Returns:
- true if OK, at least as far as known
-
run
public void run()
- Specified by:
run
in interfacejava.lang.Runnable
-
getTurnoutFeedbackType
protected int getTurnoutFeedbackType()
Return the turnout feedback type.- 0x00 - turnout without feedback, ie DR5000
- 0x01 - turnout with feedback, ie NanoX
- 0x10 - feedback module
- Returns:
- the turnout type reported by this station.
-
getAccessoryStateBits
protected int getAccessoryStateBits(int a)
Returns accessory state, in the Operation Info Reply bit format. If the accessory has not been operated yet, returns 00 (not operated).- Parameters:
a
- accessory number- Returns:
- two bits representing the accessory state.
-
accInfoReply
protected XNetReply accInfoReply(XNetMessage m)
-
feedbackInfoReply
protected XNetReply feedbackInfoReply(XNetMessage m)
-
accInfoReply
protected XNetReply accInfoReply(int baseAddress, boolean nibble)
Creates a reply packet for a turnout/accessory.- Parameters:
baseAddress
- base address for the feedback, the 4-turnout block; numbered from 0nibble
- lower or upper nibble (2 turnout block) delivered in the reply- Returns:
- constructed reply.
-
generateAccRequestReply
protected XNetReply generateAccRequestReply(int address, int output, boolean state, boolean previousAccessoryState)
Generate reply to accessory request command. The returned XNetReply is the first to be returned by this simulated command station.- Parameters:
address
- the accessory addressoutput
- the output to be manipulatedstate
- true if output should be on, false for offpreviousAccessoryState
- the previous accessory state- Returns:
- the reply instance.
-
accInfoReply
protected XNetReply accInfoReply(int dccTurnoutAddress)
Creates a reply for the specific turnout dcc address.- Parameters:
dccTurnoutAddress
- the turnout address- Returns:
- a reply packet
-
accReqReply
protected XNetReply accReqReply(XNetMessage m)
-
loadChars
protected XNetMessage loadChars() throws java.io.IOException
Get characters from the input source, and file a message.Returns only when the message is complete.
Only used in the Receive thread.
- Returns:
- filled message
- Throws:
java.io.IOException
- when presented by the input source.
-
readByteProtected
protected byte readByteProtected(java.io.DataInputStream istream) throws java.io.IOException
Read a single byte, protecting against various timeouts, etc.When a port is set to have a receive timeout (via the enableReceiveTimeout() method), some will return zero bytes or an EOFException at the end of the timeout. In that case, the read should be repeated to get the next real character.
- Parameters:
istream
- the input data source- Returns:
- the next byte, waiting for it to become available
- Throws:
java.io.IOException
- from the underlying operations
-
-