62 lines
2.1 KiB
Python
62 lines
2.1 KiB
Python
# Open a small window. When a DCC address (E.g. 4123) is typed and return hit,
|
|
# a Transponding Find request for that address is sent
|
|
#
|
|
# Author: Bob Jacobsen, copyright 2006, 2014
|
|
# Part of the JMRI distribution
|
|
|
|
import jmri
|
|
|
|
import java
|
|
import javax.swing
|
|
|
|
# set the intended LocoNet connection by its index; when you have just 1 connection index = 0
|
|
connectionIndex = 0
|
|
|
|
# create a frame to hold the button, set up for nice layout
|
|
f = javax.swing.JFrame("Find Transponder") # argument is the frames title
|
|
f.contentPane.setLayout(javax.swing.BoxLayout(f.contentPane, javax.swing.BoxLayout.Y_AXIS))
|
|
|
|
# Create the address field
|
|
# Sized to show 5 characters, initially empty
|
|
# To make the field a different size, change the (5) to the desired size
|
|
address = javax.swing.JTextField(5)
|
|
|
|
# put the text field on a line preceded by a label
|
|
temppanel1 = javax.swing.JPanel()
|
|
temppanel1.add(javax.swing.JLabel("Address"))
|
|
temppanel1.add(address)
|
|
|
|
# have that text field send the message when entered
|
|
def whenAddressChanged(event) :
|
|
addr = (int)(event.source.getText())
|
|
t = jmri.InstanceManager.getDefault(jmri.ThrottleManager)
|
|
long = t.canBeLongAddress(addr)
|
|
m = jmri.jmrix.loconet.LocoNetMessage(9)
|
|
m.setOpCode( 0xE5)
|
|
m.setElement(1,0x09)
|
|
m.setElement(2,0x40)
|
|
if (long) :
|
|
m.setElement(3,addr/128)
|
|
m.setElement(4,addr&0x7F)
|
|
else :
|
|
m.setElement(3,0x7D)
|
|
m.setElement(4,addr)
|
|
m.setElement(5,0x00)
|
|
m.setElement(6,0x00)
|
|
m.setElement(7,0x00)
|
|
jmri.InstanceManager.getList(jmri.jmrix.loconet.LocoNetSystemConnectionMemo).get(connectionIndex).getLnTrafficController().sendLocoNetMessage(m)
|
|
|
|
# now force sending of null packets to same DCC address
|
|
c = jmri.InstanceManager.getDefault(jmri.CommandStation)
|
|
c.sendPacket(jmri.NmraPacket.oneBytePacket(addr, long, 0x08),4) # reserved instruction
|
|
return
|
|
|
|
address.actionPerformed = whenAddressChanged # if user hit return or enter
|
|
address.focusLost = whenAddressChanged # if user tabs away
|
|
|
|
# Put contents in frame and display
|
|
f.contentPane.add(temppanel1)
|
|
f.pack()
|
|
f.show()
|
|
|