Package jmri.jmrix.loconet.hexfile
Class LnHexFilePort
- java.lang.Object
-
- jmri.jmrix.AbstractPortController
-
- jmri.jmrix.AbstractSerialPortController
-
- jmri.jmrix.loconet.LnPortController
-
- jmri.jmrix.loconet.hexfile.LnHexFilePort
-
- All Implemented Interfaces:
java.lang.Runnable,PortAdapter,SerialPortAdapter
public class LnHexFilePort extends LnPortController implements java.lang.Runnable
LnHexFilePort implements a LnPortController via an ASCII-hex input file. See below for the file format. There are user-level controls for send next message how long to wait between messages An object of this class should run in a thread of its own so that it can fill the output pipe as needed. The input file is expected to have one message per line. Each line can contain as many bytes as needed, each represented by two Hex characters and separated by a space. Variable whitespace is not (yet) supported.
-
-
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 Modifier and Type Field Description (package private) java.io.BufferedReadersFilebooleanthreadSuspended-
Fields inherited from class jmri.jmrix.loconet.LnPortController
commandStationNames, commandStationType, commandStationTypes, mInterrogateAtStart, mLoconetProtocolAutoDetect, mTranspondingAvailable, mTurnoutExtraSpace, mTurnoutNoRetry
-
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 LnHexFilePort()LnHexFilePort(LocoNetSystemConnectionMemo memo)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidconfigure()Configure all of the other jmrix widgets needed to work with this adapter.voidconfigureOption3(java.lang.String value)Set the third port option.voidconnect()Open the connection.static LocoNetMessagegenerateReply(LocoNetMessage m)Choose from a subset of hardware replies to send in HexFile simulator mode in response to specific messages.java.io.DataInputStreamgetInputStream()Get the InputStream from the port.java.io.DataOutputStreamgetOutputStream()Get the outputStream to the port.java.util.Vector<java.lang.String>getPortNames()Provide a vector of valid port names, each a String.voidload(java.io.File file)Fill the contents from a file.booleanokToSend()Can the port accept additional characters?java.lang.StringopenPort(java.lang.String portName, java.lang.String appName)Open a specified port.java.lang.Stringoption3Name()Get a String that says what Option 3 represents.voidrun()booleanrunning()voidsetDelay(int newDelay)Provide a new message delay value, but don't allow it to go below 2 msec.booleansimReply()voidsimReply(boolean state)Turn on/off replying to LocoNet messages to simulate devices.booleanstatus()Check that this object is ready to operate.voidsuspendReading(boolean suspended)int[]validBaudNumbers()Get an array of valid baud rate numbers; used to store/load adapter speed option.java.lang.String[]validBaudRates()Get an array of valid baud rate strings; used to display valid options in Connections Preferences.java.lang.String[]validOption3()Get an array of valid values for "option 3"; used to display valid options.-
Methods inherited from class jmri.jmrix.loconet.LnPortController
getSystemConnectionMemo, setCommandStationType, setCommandStationType, setInterrogateOnStart, setLoconetProtocolAutoDetect, setTranspondingAvailable, setTurnoutHandling
-
Methods inherited from class jmri.jmrix.AbstractSerialPortController
activatePort, activatePort, activatePort, closeConnection, closeSerialPort, configureBaudRate, configureBaudRateFromIndex, configureBaudRateFromNumber, configureLeads, configureLeadsAndFlowControl, configureLeadsAndFlowControl, 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, 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
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, configureOption4, getManufacturer, setManufacturer
-
-
-
-
Field Detail
-
sFile
volatile java.io.BufferedReader sFile
-
threadSuspended
public boolean threadSuspended
-
-
Constructor Detail
-
LnHexFilePort
public LnHexFilePort()
-
LnHexFilePort
public LnHexFilePort(LocoNetSystemConnectionMemo memo)
-
-
Method Detail
-
load
public void load(java.io.File file)
Fill the contents from a file.- Parameters:
file- the file to be read
-
connect
public void connect()
Description copied from class:AbstractSerialPortControllerOpen the connection.- Specified by:
connectin interfacePortAdapter- Overrides:
connectin classAbstractSerialPortController
-
suspendReading
public void suspendReading(boolean suspended)
-
run
public void run()
- Specified by:
runin interfacejava.lang.Runnable
-
setDelay
public void setDelay(int newDelay)
Provide a new message delay value, but don't allow it to go below 2 msec.- Parameters:
newDelay- delay, in milliseconds
-
getInputStream
public java.io.DataInputStream getInputStream()
Get the InputStream from the port.- Specified by:
getInputStreamin interfacePortAdapter- Overrides:
getInputStreamin classAbstractSerialPortController- Returns:
- the InputStream from the port
-
getOutputStream
public java.io.DataOutputStream getOutputStream()
Get the outputStream to the port.- Specified by:
getOutputStreamin interfacePortAdapter- Overrides:
getOutputStreamin classAbstractSerialPortController- Returns:
- the outputStream to the port
-
status
public boolean status()
Check that this object is ready to operate. This is a question of configuration, not transient hardware status.- Specified by:
statusin interfacePortAdapter- Specified by:
statusin interfaceSerialPortAdapter- Specified by:
statusin classLnPortController- Returns:
- true if OK, at least as far as known
-
running
public boolean running()
-
okToSend
public boolean okToSend()
Description copied from class:LnPortControllerCan the port accept additional characters? This might go false for short intervals, but it might also stick off if something goes wrong.Provide a default implementation for the MS100, etc.
- Overrides:
okToSendin classLnPortController- Returns:
- _always_ true, as we rely on the queueing in the port itself
-
getPortNames
public java.util.Vector<java.lang.String> getPortNames()
Description copied from interface:SerialPortAdapterProvide a vector of valid port names, each a String. This may be implemented differently in subclasses that e.g. do loopkac or use a custom port-access library.- Specified by:
getPortNamesin interfaceSerialPortAdapter- Returns:
- Valid port names in the form used to select them later.
-
openPort
public java.lang.String openPort(java.lang.String portName, java.lang.String appName)
Open a specified port.- Specified by:
openPortin 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.
-
configure
public void configure()
Description copied from interface:SerialPortAdapterConfigure all of the other jmrix widgets needed to work with this adapter.- Specified by:
configurein interfacePortAdapter- Specified by:
configurein interfaceSerialPortAdapter
-
validBaudRates
public java.lang.String[] validBaudRates()
Get an array of valid baud rate strings; used to display valid options in Connections Preferences.- Specified by:
validBaudRatesin interfaceSerialPortAdapter- Overrides:
validBaudRatesin classAbstractSerialPortController- Returns:
- array of I18N display strings of port speed settings valid for this serial adapter,
must match order and values from
SerialPortAdapter.validBaudNumbers()
-
validBaudNumbers
public int[] validBaudNumbers()
Get an array of valid baud rate numbers; used to store/load adapter speed option.- Specified by:
validBaudNumbersin interfaceSerialPortAdapter- Overrides:
validBaudNumbersin classAbstractSerialPortController- Returns:
- integer array of speeds, must match order and values from
SerialPortAdapter.validBaudRates()
-
validOption3
public java.lang.String[] validOption3()
Get an array of valid values for "option 3"; used to display valid options. May not be null, but may have zero entries.- Returns:
- the options
-
option3Name
public java.lang.String option3Name()
Get a String that says what Option 3 represents. May be an empty string, but will not be null- Returns:
- string containing the text for "Option 3"
-
configureOption3
public void configureOption3(java.lang.String value)
Set the third port option. Only to be used after construction, but before the openPort call.- Specified by:
configureOption3in interfacePortAdapter- Specified by:
configureOption3in interfaceSerialPortAdapter- Overrides:
configureOption3in classAbstractPortController- Parameters:
value- to set the option to
-
simReply
public void simReply(boolean state)
Turn on/off replying to LocoNet messages to simulate devices.- Parameters:
state- new state for simReplies
-
simReply
public boolean simReply()
-
generateReply
public static LocoNetMessage generateReply(LocoNetMessage m)
Choose from a subset of hardware replies to send in HexFile simulator mode in response to specific messages. Supported message types:- LN SV v1
Lnsv1MessageContents - LN SV v2
Lnsv2MessageContents - LNCV
LncvMessageContentsReadReply
- Parameters:
m- the message to respond to- Returns:
- an appropriate reply by type and values
- LN SV v1
-
-