From: Bob J. <jac...@us...> - 2007-06-24 04:42:32
|
Update of /cvsroot/jmri/jmri/progdebugger In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv25794/src/jmri/progdebugger Modified Files: ProgDebugger.java Log Message: provide routines for access read, write values in tests. Provide alternate method for returning reponse after some time Index: ProgDebugger.java =================================================================== RCS file: /cvsroot/jmri/jmri/progdebugger/ProgDebugger.java,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** ProgDebugger.java 5 Nov 2006 07:31:27 -0000 1.19 --- ProgDebugger.java 24 Jun 2007 04:42:28 -0000 1.20 *************** *** 12,16 **** /** ! * Debugging implementation of Programmer interface * @author Bob Jacobsen Copyright (C) 2001 * @version $Revision$ --- 12,20 ---- /** ! * Debugging implementation of Programmer interface. ! *<P> ! * Remembers writes, and returns the last written value ! * when a read to the same CV is made. ! * * @author Bob Jacobsen Copyright (C) 2001 * @version $Revision$ *************** *** 24,27 **** --- 28,55 ---- public int lastWriteCv() { return _lastWriteCv; } + /** + * Reset the CV to a value so one + * can detect if it's been written. + * <p> + * Does not change the "lastWrite" and "lastWriteCv" results. + */ + public void resetCv(int cv, int val) { + mValues.put(new Integer(cv), new Integer(val)); + } + + /** + * Get the CV value directly, without going through + * the usual indirect protocol. Used for e.g. testing. + * <p> + * Does not change the "lastRead" and "lastReadCv" results. + */ + public int getCvVal(int cv) { + // try to get something from hash table + Integer saw = ((Integer)mValues.get(new Integer(cv))); + if (saw!=null) return saw.intValue(); + log.warn("CV "+cv+" has no defined value"); + return -1; + } + // write CV values are remembered for later reads Hashtable mValues = new Hashtable(); *************** *** 49,53 **** if (l!=null) l.programmingOpReply(-1, 0); } // 0 is OK status }; ! javax.swing.SwingUtilities.invokeLater(r); } --- 77,81 ---- if (l!=null) l.programmingOpReply(-1, 0); } // 0 is OK status }; ! sendReturn(r); } *************** *** 75,79 **** } }; ! javax.swing.SwingUtilities.invokeLater(r); } --- 103,107 ---- } }; ! sendReturn(r); } *************** *** 98,102 **** l.programmingOpReply(_nextRead, 0); } // 0 is OK status }; ! javax.swing.SwingUtilities.invokeLater(r); } --- 126,130 ---- l.programmingOpReply(_nextRead, 0); } // 0 is OK status }; ! sendReturn(r); } *************** *** 151,154 **** --- 179,210 ---- } + static final boolean IMMEDIATERETURN = true; + + /** + * Arrange for the return to be invoked on the Swing thread. + */ + void sendReturn(Runnable run) { + if (IMMEDIATERETURN) { + javax.swing.SwingUtilities.invokeLater(run); + } else { + javax.swing.Timer timer = new javax.swing.Timer(2, null); + java.awt.event.ActionListener l = new java.awt.event.ActionListener(){ + javax.swing.Timer timer; + Runnable run; + java.awt.event.ActionListener init(javax.swing.Timer t, Runnable r) { + this.timer = t; + this.run = r; + return this; + } + public void actionPerformed(java.awt.event.ActionEvent e) { + this.timer.stop(); + javax.swing.SwingUtilities.invokeLater(run); + } + }.init(timer, run); + timer.addActionListener(l); + timer.start(); + } + } + static org.apache.log4j.Category log = org.apache.log4j.Category.getInstance(ProgDebugger.class.getName()); } |