57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
# Trigger the LocoNet Find Transponder interaction
|
|
#
|
|
# The DCC address being found is hard-coded into this sample script
|
|
#
|
|
# After sending the LocoNet Find message, the script also
|
|
# commands a few DCC packets to be sent. This is in case
|
|
# the command station is not currently addressing the
|
|
# decoder, e.g. if it's not currently on a throttle. Transponding
|
|
# decoders only reply when they receive a DCC packet addressed
|
|
# to them.
|
|
#
|
|
# Created by Bob Jacobsen 2014
|
|
#
|
|
# A find request to (long)433 should send E5 09 40 03 31 00 00 00 61
|
|
# and the hardware should return E5 09 00 03 31 00 20 00 01
|
|
#
|
|
# For (short)10: E5 09 40 7D 0A 00 00 00 24
|
|
# and reply: E5 09 40 7D 0A 00 20 00 44
|
|
|
|
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
|
|
|
|
class LnFindTransponder(jmri.jmrit.automat.AbstractAutomaton) :
|
|
# handle() will only execute once here, to run a single test
|
|
def handle(self):
|
|
|
|
self.long = True
|
|
self.address = 433
|
|
|
|
m = jmri.jmrix.loconet.LocoNetMessage(9)
|
|
m.setOpCode( 0xE5)
|
|
m.setElement(1,0x09)
|
|
m.setElement(2,0x40)
|
|
if (self.long) :
|
|
m.setElement(3,self.address/128)
|
|
m.setElement(4,self.address&0x7F)
|
|
else :
|
|
m.setElement(3,0x7D)
|
|
m.setElement(4,self.address)
|
|
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 address
|
|
c = jmri.InstanceManager.getDefault(jmri.CommandStation)
|
|
c.sendPacket(jmri.NmraPacket.oneBytePacket(self.address, self.long, 0x08),4) # reserved instruction
|
|
|
|
return 0
|
|
|
|
LnFindTransponder().start()
|