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.BufferedReader
sFile
boolean
threadSuspended
-
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 void
configure()
Configure all of the other jmrix widgets needed to work with this adapter.void
configureOption3(java.lang.String value)
Set the third port option.void
connect()
Open the connection.static LocoNetMessage
generateReply(LocoNetMessage m)
Choose from a subset of hardware replies to send in HexFile simulator mode in response to specific messages.java.io.DataInputStream
getInputStream()
Get the InputStream from the port.java.io.DataOutputStream
getOutputStream()
Get the outputStream to the port.java.util.Vector<java.lang.String>
getPortNames()
Provide a vector of valid port names, each a String.void
load(java.io.File file)
Fill the contents from a file.boolean
okToSend()
Can the port accept additional characters?java.lang.String
openPort(java.lang.String portName, java.lang.String appName)
Open a specified port.java.lang.String
option3Name()
Get a String that says what Option 3 represents.void
run()
boolean
running()
void
setDelay(int newDelay)
Provide a new message delay value, but don't allow it to go below 2 msec.boolean
simReply()
void
simReply(boolean state)
Turn on/off replying to LocoNet messages to simulate devices.boolean
status()
Check that this object is ready to operate.void
suspendReading(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:AbstractSerialPortController
Open the connection.- Specified by:
connect
in interfacePortAdapter
- Overrides:
connect
in classAbstractSerialPortController
-
suspendReading
public void suspendReading(boolean suspended)
-
run
public void run()
- Specified by:
run
in 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:
getInputStream
in interfacePortAdapter
- Overrides:
getInputStream
in classAbstractSerialPortController
- Returns:
- the InputStream from the port
-
getOutputStream
public java.io.DataOutputStream getOutputStream()
Get the outputStream to the port.- Specified by:
getOutputStream
in interfacePortAdapter
- Overrides:
getOutputStream
in 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:
status
in interfacePortAdapter
- Specified by:
status
in interfaceSerialPortAdapter
- Specified by:
status
in classLnPortController
- Returns:
- true if OK, at least as far as known
-
running
public boolean running()
-
okToSend
public boolean okToSend()
Description copied from class:LnPortController
Can 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:
okToSend
in 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:SerialPortAdapter
Provide 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:
getPortNames
in 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:
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.
-
configure
public void configure()
Description copied from interface:SerialPortAdapter
Configure all of the other jmrix widgets needed to work with this adapter.- Specified by:
configure
in interfacePortAdapter
- Specified by:
configure
in 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:
validBaudRates
in interfaceSerialPortAdapter
- Overrides:
validBaudRates
in 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:
validBaudNumbers
in interfaceSerialPortAdapter
- Overrides:
validBaudNumbers
in 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:
configureOption3
in interfacePortAdapter
- Specified by:
configureOption3
in interfaceSerialPortAdapter
- Overrides:
configureOption3
in 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 rev2
LnSv2MessageContents
- LNCV
LncvMessageContents
ReadReply
- Parameters:
m
- the message to respond to- Returns:
- an appropriate reply by type and values
- LN SV rev2
-
-