43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
# Sample script to show how to send and receive CAN Frames
|
|
#
|
|
#
|
|
# Author: Bob Jacobsen, copyright 2008
|
|
# Author: Gert Muller, copyright 2012
|
|
#
|
|
# Part of the JMRI distribution
|
|
|
|
import jmri
|
|
import java
|
|
|
|
# First, example of receiving. Put a listener in place.
|
|
class MyCanListener (jmri.jmrix.can.CanListener) :
|
|
def message(self, msg) :
|
|
# this handles messages being sent by ignoring them
|
|
return
|
|
def reply(self, msg) :
|
|
print "received incoming Frame"
|
|
print "Header ID: 0x"+java.lang.Integer.toHexString(msg.getHeader())
|
|
print "content: ", msg.toString()
|
|
print "extended: ", msg.isExtended()
|
|
return
|
|
|
|
# Get the traffic controller
|
|
tc = None
|
|
try:
|
|
tc = jmri.InstanceManager.getDefault(jmri.jmrix.can.CanSystemConnectionMemo).getTrafficController()
|
|
tc.addCanListener(MyCanListener())
|
|
except:
|
|
print "No Traffic Controller"
|
|
|
|
# Send an outgoing CanMessage frame
|
|
frame = jmri.jmrix.can.CanMessage(0x123) # header ID value 0x123
|
|
frame.setNumDataElements(2) # will load 2 bytes
|
|
frame.setElement(0, 0x45)
|
|
frame.setElement(1, 0x67)
|
|
if tc != None:
|
|
tc.sendCanMessage(frame, None)
|
|
print "CAN frame sent!"
|
|
else:
|
|
print "Sorry, no Traffic Controller!"
|
|
|