jmri.jmrix.loconet
Class AbstractBoardProgPanel

Show UML class diagram
java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by javax.swing.JPanel
                  extended by jmri.util.swing.JmriPanel
                      extended by jmri.jmrix.loconet.swing.LnPanel
                          extended by jmri.jmrix.loconet.AbstractBoardProgPanel
All Implemented Interfaces:
ImageObserver, MenuContainer, Serializable, EventListener, Accessible, LocoNetListener, LnPanelInterface
Direct Known Subclasses:
BDL16Panel, DS64Panel, PM4Panel, SE8Panel

public abstract class AbstractBoardProgPanel
extends LnPanel
implements LocoNetListener

Display and modify an Digitrax board configuration.

Supports boards which can be read and write using LocoNet opcode OPC_MULTI_SENSE, such as PM4x, DS64, SE8c, BDL16x.

The read and write require a sequence of operations, which we handle with a state variable.

Each read or write OpSw access requires a response from the addressed board. If a response is not received within a fixed time, then the process will repeat the read or write OpSw access up to MAX_OPSW_ACCESS_RETRIES additional times to try to get a response from the addressed board. If the board does not respond, the access sequence is aborted and a failure message is populated in the "status" variable.

Programming of the board is done via configuration messages, so the board should not be put into programming mode via the built-in pushbutton while this tool is in use.

Throughout, the terminology is "closed" == true, "thrown" == false. Variables are named for their closed state.

Some of the message formats used in this class are Copyright Digitrax, Inc. and used with permission as part of the JMRI project. That permission does not extend to uses in other software products. If you wish to use this code, algorithm or these message formats outside of JMRI, please contact Digitrax Inc for separate permission.

See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JPanel
JPanel.AccessibleJPanel
 
Nested classes/interfaces inherited from class javax.swing.JComponent
JComponent.AccessibleJComponent
 
Nested classes/interfaces inherited from class java.awt.Container
Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy
 
Field Summary
(package private)  int address
           
 JTextField addrField
           
(package private)  boolean awaitingReply
           
(package private)  JPanel contents
           
(package private)  org.slf4j.Logger log
           
 boolean onlyOneOperation
           
protected  boolean[] opsw
          True is "closed", false is "thrown".
 Timer pacingTimer
           
(package private)  ResourceBundle rb
           
 boolean read
           
 JToggleButton readAllButton
           
(package private)  boolean readOnInit
           
(package private)  int replyTryCount
           
 Timer responseTimer
           
 int state
           
(package private)  JLabel status
           
(package private)  int typeWord
           
 JToggleButton writeAllButton
           
 
Fields inherited from class jmri.jmrix.loconet.swing.LnPanel
memo
 
Fields inherited from class javax.swing.JComponent
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
protected AbstractBoardProgPanel()
          Constructor which assumes the board ID number is 1
protected AbstractBoardProgPanel(boolean readOnInit)
           
protected AbstractBoardProgPanel(int boardNum)
          Constructor which allows the caller to pass in the board ID number
protected AbstractBoardProgPanel(int boardNum, boolean readOnInit)
           
 
Method Summary
protected  void appendLine(JComponent c)
          Handle GUI layout details during construction.
protected abstract  void copyToOpsw()
          Copy from the GUI to the opsw array.
 void dispose()
           
 void doTheNextThing()
          Helps continue sequences of OpSw accesses.
 Integer getBoardIdValue()
           
 void initComponents()
          2nd stage of initialization, invoked after the constuctor is complete.
 void initComponents(LocoNetSystemConnectionMemo memo)
          2nd stage of initialization, invoked after the constuctor is complete.
 void message(LocoNetMessage m)
          Processes incoming LocoNet message m for OpSw responses to read and write operation messages, and automatically advances to the next OpSw operation as directed by nextState().
protected abstract  int nextState(int state)
          Specify which OpSws (and which sequence) need to be read/written
protected  JPanel provideAddressing(String type)
          Provide GUI elements for read and write buttons and address entry field
protected  JComponent provideStatusLine()
          creates the status line for the GUI
 void readAll()
          Provides a mechanism to read several OpSw values in a sequence.
(package private)  void setAddress(int maxValid)
          Converts the GUI text field containing the address into a valid integer address, and handles user-input errors as needed.
 void setBoardIdValue(Integer boardId)
          Set the Board ID number (also known as board address number)
protected  void setStatus(String msg)
          updates the status line
protected  void setTypeWord(int type)
          Configure the type word in the LocoNet messages.
protected abstract  void updateDisplay()
          Update the GUI based on the contents of opsw[].
 void writeAll()
          Provides a mechanism to write several OpSw values in a sequence.
 void writeOne(int opswIndex)
          writeOne() is intended to provide a mechanism to write a single OpSw value (specified by opswIndex), rather than a sequence of OpSws as done by writeAll().
 
Methods inherited from class jmri.jmrix.loconet.swing.LnPanel
getTitle, initContext
 
Methods inherited from class jmri.util.swing.JmriPanel
getHelpTarget, getMenus, getTitle, getWindowInterface, isMultipleInstances, setWindowInterface
 
Methods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

contents

JPanel contents

rb

ResourceBundle rb

readAllButton

public JToggleButton readAllButton

writeAllButton

public JToggleButton writeAllButton

addrField

public JTextField addrField

status

JLabel status

read

public boolean read

state

public int state

awaitingReply

boolean awaitingReply

replyTryCount

int replyTryCount

responseTimer

public Timer responseTimer

pacingTimer

public Timer pacingTimer

onlyOneOperation

public boolean onlyOneOperation

address

int address

typeWord

int typeWord

readOnInit

boolean readOnInit

opsw

protected boolean[] opsw
True is "closed", false is "thrown". This matches how we do the check boxes also, where we use the terminology for the "closed" option. Note that opsw[0] is not a legal OpSwitch.


log

org.slf4j.Logger log
Constructor Detail

AbstractBoardProgPanel

protected AbstractBoardProgPanel()
Constructor which assumes the board ID number is 1


AbstractBoardProgPanel

protected AbstractBoardProgPanel(boolean readOnInit)

AbstractBoardProgPanel

protected AbstractBoardProgPanel(int boardNum,
                                 boolean readOnInit)

AbstractBoardProgPanel

protected AbstractBoardProgPanel(int boardNum)
Constructor which allows the caller to pass in the board ID number

Parameters:
boardNum -
Method Detail

initComponents

public void initComponents(LocoNetSystemConnectionMemo memo)
Description copied from interface: LnPanelInterface
2nd stage of initialization, invoked after the constuctor is complete.

This needs to be connected to the initContext() method in implementing classes.

Specified by:
initComponents in interface LnPanelInterface
Overrides:
initComponents in class LnPanel

initComponents

public void initComponents()
Description copied from class: JmriPanel
2nd stage of initialization, invoked after the constuctor is complete.

Overrides:
initComponents in class JmriPanel

setBoardIdValue

public void setBoardIdValue(Integer boardId)
Set the Board ID number (also known as board address number)

Parameters:
boardId -

getBoardIdValue

public Integer getBoardIdValue()

provideAddressing

protected JPanel provideAddressing(String type)
Provide GUI elements for read and write buttons and address entry field


provideStatusLine

protected JComponent provideStatusLine()
creates the status line for the GUI


setStatus

protected void setStatus(String msg)
updates the status line

Parameters:
msg -

appendLine

protected void appendLine(JComponent c)
Handle GUI layout details during construction.

Parameters:
c - component to put on a single line

readAll

public void readAll()
Provides a mechanism to read several OpSw values in a sequence. The sequence is defined by the nextState method.


setTypeWord

protected void setTypeWord(int type)
Configure the type word in the LocoNet messages.

Known values:


setAddress

void setAddress(int maxValid)
          throws Exception
Converts the GUI text field containing the address into a valid integer address, and handles user-input errors as needed.

Throws:
Exception

copyToOpsw

protected abstract void copyToOpsw()
Copy from the GUI to the opsw array.

Used before a write operation is started.


updateDisplay

protected abstract void updateDisplay()
Update the GUI based on the contents of opsw[].

This method is executed after completion of a read operation sequence.


nextState

protected abstract int nextState(int state)
Specify which OpSws (and which sequence) need to be read/written


writeAll

public void writeAll()
Provides a mechanism to write several OpSw values in a sequence. The sequence is defined by the nextState method.


writeOne

public void writeOne(int opswIndex)
writeOne() is intended to provide a mechanism to write a single OpSw value (specified by opswIndex), rather than a sequence of OpSws as done by writeAll().

Parameters:
opswIndex -

See Also:
writeAll()

message

public void message(LocoNetMessage m)
Processes incoming LocoNet message m for OpSw responses to read and write operation messages, and automatically advances to the next OpSw operation as directed by nextState().

Specified by:
message in interface LocoNetListener
Parameters:
m -

doTheNextThing

public void doTheNextThing()
Helps continue sequences of OpSw accesses.

Handles aborting a sequence of reads or writes when the GUI Read button or the GUI Write button (as appropriate for the current operation) is de-selected.


dispose

public void dispose()
Overrides:
dispose in class JmriPanel


Copyright © 1997-2013 JMRI Community.
JMRI, DecoderPro, PanelPro, SoundPro, DispatcherPro and associated logos are our trademarks.

Additional information on copyright, trademarks and licenses is linked here.
Site hosted by: Get JMRI Model Railroad Interface at SourceForge.net. Fast, secure and Free Open Source software downloads