Files
JIMRI/jython/LnFindTransponderField.py
2026-06-17 14:00:51 +02:00

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()