def dispatch_init(ser): """ Initialize a dispatcher and register rx_data_handler. Args: ser(serial.Serial): a serial interface object. Returns: xbee.helpers.dispatch.Dispatch: an XBee dispatcher object. """ # -------------------------------------------------------------------- # When a Dispatch is created with a serial port, it will automatically # create an XBee object on your behalf for accessing the device. # If you wish, you may explicitly provide your own XBee: # # xbee = XBee(ser) # dispatch = Dispatch(xbee=xbee) # # Functionally, these are the same. --Paul Malmsten # -------------------------------------------------------------------- # Register the packet handlers with the dispatch: # The string name allows one to distinguish between mutiple registrations # for a single callback function. # The second argument is the callback function name. # The third argument is a function which determines whether to call its # associated callback when a packet arrives. It should return a boolean. # -------------------------------------------------------------------- # Spawn a dispatch instance and associate it with packet id 'rx' dispatcher = Dispatch(ser) dispatcher.register("rx_data", rx_data_handler, lambda packet: packet['id'] == 'rx') return dispatcher
def __init__(self, serial_port, baud_rate, dispatcher, serializer): self.ser = serial.Serial(serial_port, baud_rate) self.zb = xbee.ZigBee(self.ser, escaped=True) self.dispatch = Dispatch(xbee=self.zb) self.dispatch.register('rx', self.rx_handler, lambda p: p['id'] == 'rx') self.dispatch.register('rx_explicit', self.default_handler, lambda p: p['id'] == 'rx_explicit') self.dispatch.register('rx_io_data_long_addr', self.default_handler, lambda p: p['id'] == 'rx_io_data_long_addr') self.dispatch.register('tx_status', self.default_handler, lambda p: p['id'] == 'tx_status') self.dispatch.register('status', self.default_handler, lambda p: p['id'] == 'status') self.dispatch.register('at_response', self.at_response_handler, lambda p: p['id'] == 'at_response') self.dispatch.register('remote_at_response', self.default_handler, lambda p: p['id'] == 'remote_at_response') self.dispatch.register('node_id_indicator', self.default_handler, lambda p: p['id'] == 'node_id_indicator') self.dispatcher = dispatcher self.serializer = serializer
def at_response_handler(name, packet): print(packet) def rx_handler(name, packet): print("RX - %s" % packet) time.sleep(1) data = "PONG" if IS_HUB else "PING" xbee.tx(dest_addr_long=packet['source_addr_long'], dest_addr=packet['source_addr'], data=data) ser = serial.Serial('/dev/ttyS0', 9600) dispatch = Dispatch() dispatch.register('rx', rx_handler, lambda p: p['id'] == 'rx') dispatch.register('rx_explicit', default_handler, lambda p: p['id'] == 'rx_explicit') dispatch.register('rx_io_data_long_addr', default_handler, lambda p: p['id'] == 'rx_io_data_long_addr') dispatch.register('rx_io_data', default_handler, lambda p: p['id'] == 'rx_io_data') dispatch.register('tx_status', default_handler, lambda p: p['id'] == 'tx_status') dispatch.register('status', default_handler, lambda p: p['id'] == 'status') dispatch.register('at_response', at_response_handler, lambda p: p['id'] == 'at_response') dispatch.register('remote_at_response', default_handler, lambda p: p['id'] == 'remote_at_response') dispatch.register('node_id_indicator', default_handler,
def setUp(self): self.headless = Dispatch()
def setUp(self): self.xbee = FakeXBee(None) self.dispatch = Dispatch(xbee=self.xbee) self.callback_check = CallbackCheck()
print "Status Update - Status is now: ", packet['status'] def io_sample_handler(name, packet): print "Samples Received: ", packet['samples'] # When a Dispatch is created with a serial port, it will automatically # create an XBee object on your behalf for accessing the device. # If you wish, you may explicitly provide your own XBee: # # xbee = XBee(ser) # dispatch = Dispatch(xbee=xbee) # # Functionally, these are the same. dispatch = Dispatch(ser) # Register the packet handlers with the dispatch: # The string name allows one to distinguish between mutiple registrations # for a single callback function # The second argument is the function to call # The third argument is a function which determines whether to call its # associated callback when a packet arrives. It should return a boolean. dispatch.register("status", status_handler, lambda packet: packet['id'] == 'status') dispatch.register("io_data", io_sample_handler, lambda packet: packet['id'] == 'rx_io_data') # Create API object, which spawns a new thread # Point the asyncronous callback at Dispatch.dispatch()
addr1.extend(packet['parameter'][2:10]) global addrAll addrAll += [addr1] def remote_at_response_handler(name, packet): print packet def node_id_indicator_handler(name, packet): print packet # When a Dispatch is created with a serial port, it will automatically # create an XBee object on your behalf for accessing the device. # If you wish, you may explicitly provide your own XBee: # xbee = ZigBee(ser) dispatch = Dispatch( xbee=xbee) #We need a Zigbee object, so only this works # # Functionally, these are the same. #dispatch = Dispatch(ser) #Will not work for senior project. def tx_packet(source, data, packet=0, status=False): #Get the address of our sender send_addr_long = source['source_addr_long'] send_addr = source['source_addr'] xbee.tx( dest_addr=send_addr, #reply to sender dest_addr_long=send_addr_long, data=data,
p = ''.join('%02x' % ord(x) for x in packet['parameter']) print "AT - %s = %s" % (packet['command'], p) def rx_handler(name, packet): print "RX - %s" % packet time.sleep(1) data = "PONG" if IS_HUB else "PING" zb.tx(dest_addr_long=packet['source_addr_long'], dest_addr=packet['source_addr'], data=data) ser = serial.Serial(PORT, BAUD_RATE) zigbee = ZigBee(ser) dispatch = Dispatch(xbee=zigbee) dispatch.register('rx', rx_handler, lambda p: p['id'] == 'rx') dispatch.register('rx_explicit', default_handler, lambda p: p['id'] == 'rx_explicit') dispatch.register('rx_io_data_long_addr', default_handler, lambda p: p['id'] == 'rx_io_data_long_addr') dispatch.register('tx_status', default_handler, lambda p: p['id'] == 'tx_status') dispatch.register('status', default_handler, lambda p: p['id'] == 'status') dispatch.register('at_response', at_response_handler, lambda p: p['id'] == 'at_response') dispatch.register('remote_at_response', default_handler, lambda p: p['id'] == 'remote_at_response') dispatch.register('node_id_indicator', default_handler, lambda p: p['id'] == 'node_id_indicator')