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 theProgDebuggerinstead 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 Modifier and Type Class Description classProgDebugger.ProgDebuggerConfiguratorThis class is used by tests.- 
Nested classes/interfaces inherited from interface jmri.Programmer
Programmer.Configurator, Programmer.WriteConfirmMode 
 - 
 
- 
Field Summary
Fields Modifier and Type Field Description (package private) intaddress(package private) booleanconfirmOK(package private) static intDELAY(package private) static booleanIMMEDIATERETURN(package private) booleanlongAddrprotected ProgrammingModemode(package private) java.util.Hashtable<java.lang.Integer,java.lang.Integer>mValuesintnOperations(package private) intreadLimit(package private) intwriteLimitBy 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 voidclearHasBeenWritten(int cv)Clear written status.voidconfirmCV(java.lang.String CVname, int val, ProgListener p)Confirm the value of a CV using the specified programming mode.java.lang.StringdecodeErrorCode(int i)java.lang.StringgetAddress()intgetAddressNumber()booleangetCanRead()Checks the general read capability, regardless of modebooleangetCanRead(java.lang.String addr)Checks the general read capability, regardless of mode, for a specific addressbooleangetCanWrite()Checks the general write capability, regardless of modebooleangetCanWrite(java.lang.String addr)Checks the general write capability, regardless of mode, for a specific addressProgrammer.ConfiguratorgetConfigurator()Get the configurator of this programmer.intgetCvVal(int cv)Get the CV value directly, without going through the usual indirect protocol.booleangetLongAddress()ProgrammingModegetMode()Get the current programming modejava.util.List<ProgrammingMode>getSupportedModes()Get the list ofProgrammingModesupported by this Programmer.Programmer.WriteConfirmModegetWriteConfirmMode(java.lang.String addr)Learn about whether the programmer does any kind of verification of write operationsbooleanhasBeenWritten(int cv)See if a CV has been written.intlastReadCv()intlastWrite()intlastWriteCv()voidnextRead(int r)voidreadCV(java.lang.String CVname, ProgListener p)Perform a CV read in the system-specific manner, and using the specified programming mode.voidresetCv(int cv, int val)Reset the CV to a value so one can detect if it's been written.(package private) voidsendReturn(java.lang.Runnable run)Arrange for the return to be invoked on the Swing thread.voidsetMode(ProgrammingMode m)Set the programmer to a particular mode.voidsetTestReadLimit(int lim)voidsetTestWriteLimit(int lim)voidwriteCV(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:
 decodeErrorCodein 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:
 writeCVin 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:
 confirmCVin 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:
 readCVin 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:
 setModein 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:
 getModein 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 ofProgrammingModesupported by this Programmer. If the order is significant, earlier modes are better.- Specified by:
 getSupportedModesin 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:ProgrammerChecks the general read capability, regardless of mode- Specified by:
 getCanReadin interfaceProgrammer- Returns:
 - true if the programmer is capable of reading; false otherwise
 
 
- 
getCanRead
public boolean getCanRead(java.lang.String addr)
Description copied from interface:ProgrammerChecks the general read capability, regardless of mode, for a specific address- Specified by:
 getCanReadin 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:ProgrammerChecks the general write capability, regardless of mode- Specified by:
 getCanWritein interfaceProgrammer- Returns:
 - true if the programmer is capable of writing; false otherwise
 
 
- 
getCanWrite
public boolean getCanWrite(java.lang.String addr)
Description copied from interface:ProgrammerChecks the general write capability, regardless of mode, for a specific address- Specified by:
 getCanWritein 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:
 getWriteConfirmModein 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:
 getLongAddressin interfaceAddressedProgrammer
 
- 
getAddressNumber
public int getAddressNumber()
- Specified by:
 getAddressNumberin interfaceAddressedProgrammer
 
- 
getAddress
public java.lang.String getAddress()
- Specified by:
 getAddressin interfaceAddressedProgrammer
 
- 
sendReturn
void sendReturn(java.lang.Runnable run)
Arrange for the return to be invoked on the Swing thread.- Parameters:
 run- the Runnable
 
- 
getConfigurator
public Programmer.Configurator getConfigurator()
Description copied from interface:ProgrammerGet the configurator of this programmer.- Specified by:
 getConfiguratorin interfaceProgrammer- Returns:
 - the configurator if it exists, otherwise null
 
 
 - 
 
 -