Class ProgDebugger
- java.lang.Object
-
- jmri.beans.PropertyChangeSupport
-
- jmri.progdebugger.ProgDebugger
-
- All Implemented Interfaces:
AddressedProgrammer
,PropertyChangeFirer
,PropertyChangeProvider
,Disposable
,Programmer
public class ProgDebugger extends PropertyChangeSupport implements AddressedProgrammer
Debugging implementation of Programmer interface.Note that running a simulated LocoNet connection,
HexFileFrame.configure()
will substitute theProgDebugger
instead of theLnOpsModeProgrammer
, overridingreadCV(String, ProgListener)
andwriteCV(String, int, ProgListener)
.Remembers writes, and returns the last written value when a read to the same CV is made.
Only supports the DCC single-number address space, should be updated to handle any string address. As a temporary fix we simply discard the first part of any CV name containing "." and use the rest. TODO Fully support numberformat "113.12" in ProgDebugger (used in LOCONETLNCVMODE and LOCONETBDOPSWMODE)
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface jmri.Programmer
Programmer.WriteConfirmMode
-
-
Field Summary
Fields Modifier and Type Field Description (package private) int
address
(package private) boolean
confirmOK
(package private) static int
DELAY
(package private) static boolean
IMMEDIATERETURN
(package private) boolean
longAddr
protected ProgrammingMode
mode
(package private) java.util.Hashtable<java.lang.Integer,java.lang.Integer>
mValues
int
nOperations
(package private) int
readLimit
(package private) int
writeLimit
By default, the highest test CV is 256 so that we can test composite operations-
Fields inherited from class jmri.beans.PropertyChangeSupport
propertyChangeSupport
-
-
Constructor Summary
Constructors Constructor Description ProgDebugger()
ProgDebugger(boolean pLongAddress, int pAddress)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
clearHasBeenWritten(int cv)
Clear written status.void
confirmCV(java.lang.String CVname, int val, ProgListener p)
Confirm the value of a CV using the specified programming mode.java.lang.String
decodeErrorCode(int i)
java.lang.String
getAddress()
int
getAddressNumber()
boolean
getCanRead()
Checks the general read capability, regardless of modeboolean
getCanRead(java.lang.String addr)
Checks the general read capability, regardless of mode, for a specific addressboolean
getCanWrite()
Checks the general write capability, regardless of modeboolean
getCanWrite(java.lang.String addr)
Checks the general write capability, regardless of mode, for a specific addressint
getCvVal(int cv)
Get the CV value directly, without going through the usual indirect protocol.boolean
getLongAddress()
ProgrammingMode
getMode()
Get the current programming modejava.util.List<ProgrammingMode>
getSupportedModes()
Get the list ofProgrammingMode
supported by this Programmer.Programmer.WriteConfirmMode
getWriteConfirmMode(java.lang.String addr)
Learn about whether the programmer does any kind of verification of write operationsboolean
hasBeenWritten(int cv)
See if a CV has been written.int
lastReadCv()
int
lastWrite()
int
lastWriteCv()
void
nextRead(int r)
void
readCV(java.lang.String CVname, ProgListener p)
Perform a CV read in the system-specific manner, and using the specified programming mode.void
resetCv(int cv, int val)
Reset the CV to a value so one can detect if it's been written.(package private) void
sendReturn(java.lang.Runnable run)
Arrange for the return to be invoked on the Swing thread.void
setMode(ProgrammingMode m)
Set the programmer to a particular mode.void
setTestReadLimit(int lim)
void
setTestWriteLimit(int lim)
void
writeCV(java.lang.String CVname, int val, ProgListener p)
Perform a CV write in the system-specific manner, and using the specified programming mode.-
Methods inherited from class jmri.beans.PropertyChangeSupport
addPropertyChangeListener, addPropertyChangeListener, fireIndexedPropertyChange, fireIndexedPropertyChange, fireIndexedPropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getPropertyChangeListeners, getPropertyChangeListeners, removePropertyChangeListener, removePropertyChangeListener
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface jmri.Programmer
addPropertyChangeListener, dispose, notifyProgListenerEnd, readCV, removePropertyChangeListener
-
-
-
-
Field Detail
-
nOperations
public int nOperations
-
mValues
java.util.Hashtable<java.lang.Integer,java.lang.Integer> mValues
-
confirmOK
boolean confirmOK
-
mode
protected ProgrammingMode mode
-
writeLimit
int writeLimit
By default, the highest test CV is 256 so that we can test composite operations
-
readLimit
int readLimit
-
longAddr
boolean longAddr
-
address
int address
-
IMMEDIATERETURN
static final boolean IMMEDIATERETURN
- See Also:
- Constant Field Values
-
DELAY
static final int DELAY
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
ProgDebugger
public ProgDebugger()
-
ProgDebugger
public ProgDebugger(boolean pLongAddress, int pAddress)
-
-
Method Detail
-
lastWrite
public int lastWrite()
-
lastWriteCv
public int lastWriteCv()
-
resetCv
public void resetCv(int cv, int val)
Reset the CV to a value so one can detect if it's been written.Does not change the "lastWrite" and "lastWriteCv" results.
- Parameters:
cv
- the CV to resetval
- the value
-
getCvVal
public int getCvVal(int cv)
Get the CV value directly, without going through the usual indirect protocol. Used, for example, while testing.Does not change the "lastRead" and "lastReadCv" results.
- Parameters:
cv
- the CV to get- Returns:
- the value or -1
-
hasBeenWritten
public boolean hasBeenWritten(int cv)
See if a CV has been written.- Parameters:
cv
- the CV to check- Returns:
- true if written, false otherwise
-
clearHasBeenWritten
public void clearHasBeenWritten(int cv)
Clear written status.- Parameters:
cv
- the CV to clear
-
decodeErrorCode
@Nonnull public java.lang.String decodeErrorCode(int i)
- Specified by:
decodeErrorCode
in interfaceProgrammer
-
writeCV
public void writeCV(java.lang.String CVname, int val, ProgListener p) throws ProgrammerException
Perform a CV write in the system-specific manner, and using the specified programming mode.Handles a general address space through a String address. Each programmer defines the acceptable formats.
Note that this returns before the write is complete; you have to provide a ProgListener to hear about completion. For simplicity, expect the return to be on the GUI thread.
Exceptions will only be thrown at the start, not during the actual programming sequence. A typical exception would be due to an invalid mode (though that should be prevented earlier)
- Specified by:
writeCV
in interfaceProgrammer
- Parameters:
CVname
- the CV to writeval
- the value to writep
- the listener that will be notified of the write- Throws:
ProgrammerException
- if unable to communicate
-
nextRead
public void nextRead(int r)
-
lastReadCv
public int lastReadCv()
-
confirmCV
public void confirmCV(java.lang.String CVname, int val, ProgListener p) throws ProgrammerException
Confirm the value of a CV using the specified programming mode. On some systems, this is faster than a read.Handles a general address space through a String address. Each programmer defines the acceptable formats.
Note that this returns before the write is complete; you have to provide a ProgListener to hear about completion. For simplicity, expect the return to be on the GUI thread.
Exceptions will only be thrown at the start, not during the actual programming sequence. A typical exception would be due to an invalid mode (though that should be prevented earlier)
- Specified by:
confirmCV
in interfaceProgrammer
- Parameters:
CVname
- the CV to confirmval
- the value to confirmp
- the listener that will be notified of the confirmation- Throws:
ProgrammerException
- if unable to communicate
-
readCV
public void readCV(java.lang.String CVname, ProgListener p) throws ProgrammerException
Perform a CV read in the system-specific manner, and using the specified programming mode.Handles a general address space through a String address. Each programmer defines the acceptable formats.
Note that this returns before the write is complete; you have to provide a ProgListener to hear about completion. For simplicity, expect the return to be on the GUI thread.
Exceptions will only be thrown at the start, not during the actual programming sequence. A typical exception would be due to an invalid mode (though that should be prevented earlier)
- Specified by:
readCV
in interfaceProgrammer
- Parameters:
CVname
- the CV to readp
- the listener that will be notified of the read- Throws:
ProgrammerException
- if unable to communicate
-
setMode
public final void setMode(ProgrammingMode m)
Set the programmer to a particular mode.Mode is a bound parameter; mode changes fire listeners.
Only modes returned by
Programmer.getSupportedModes()
are supported. If an invalid mode is requested, the active mode is unchanged.- Specified by:
setMode
in interfaceProgrammer
- Parameters:
m
- a valid node returned byProgrammer.getSupportedModes()
or null; null is ignored ifProgrammer.getSupportedModes()
is not empty
-
getMode
public final ProgrammingMode getMode()
Get the current programming mode- Specified by:
getMode
in interfaceProgrammer
- Returns:
- the current mode or null if none is defined and no default mode is defined
-
getSupportedModes
@Nonnull public java.util.List<ProgrammingMode> getSupportedModes()
Get the list ofProgrammingMode
supported by this Programmer. If the order is significant, earlier modes are better.- Specified by:
getSupportedModes
in interfaceProgrammer
- Returns:
- the list of supported modes or an empty list
-
setTestReadLimit
public void setTestReadLimit(int lim)
-
setTestWriteLimit
public void setTestWriteLimit(int lim)
-
getCanRead
public boolean getCanRead()
Description copied from interface:Programmer
Checks the general read capability, regardless of mode- Specified by:
getCanRead
in interfaceProgrammer
- Returns:
- true if the programmer is capable of reading; false otherwise
-
getCanRead
public boolean getCanRead(java.lang.String addr)
Description copied from interface:Programmer
Checks the general read capability, regardless of mode, for a specific address- Specified by:
getCanRead
in interfaceProgrammer
- Parameters:
addr
- the address to read- Returns:
- true if the address can be read; false otherwise
-
getCanWrite
public boolean getCanWrite()
Description copied from interface:Programmer
Checks the general write capability, regardless of mode- Specified by:
getCanWrite
in interfaceProgrammer
- Returns:
- true if the programmer is capable of writing; false otherwise
-
getCanWrite
public boolean getCanWrite(java.lang.String addr)
Description copied from interface:Programmer
Checks the general write capability, regardless of mode, for a specific address- Specified by:
getCanWrite
in interfaceProgrammer
- Parameters:
addr
- the address to write to- Returns:
- true if the address can be written to; false otherwise
-
getWriteConfirmMode
@Nonnull public Programmer.WriteConfirmMode getWriteConfirmMode(java.lang.String addr)
Learn about whether the programmer does any kind of verification of write operationsBy default, say that no verification is done.
- Specified by:
getWriteConfirmMode
in interfaceProgrammer
- Parameters:
addr
- A CV address to check (in case this varies with CV range) or null for any- Returns:
- Always WriteConfirmMode.NotVerified
-
getLongAddress
public boolean getLongAddress()
- Specified by:
getLongAddress
in interfaceAddressedProgrammer
-
getAddressNumber
public int getAddressNumber()
- Specified by:
getAddressNumber
in interfaceAddressedProgrammer
-
getAddress
public java.lang.String getAddress()
- Specified by:
getAddress
in interfaceAddressedProgrammer
-
sendReturn
void sendReturn(java.lang.Runnable run)
Arrange for the return to be invoked on the Swing thread.- Parameters:
run
- the Runnable
-
-