def run(self):
        logger.info("[port_listener] starting")
        self.queuer.start()
        last_update_time = datetime.datetime.now()
        t_tic = 0
        last_time_packet_recieved = datetime.datetime.now()
        if self.DEBUG:
            max_neuronid = 200
        while not self.done:
            try:
                t_tic, last_update_time = self.handle_timer_forces(
                    last_update_time, last_time_packet_recieved, t_tic)
                # if done every 200 ms

                if not self.DEBUG:
                    #print "trying to recive"
                    data = self.queuer.get_packet()
                    if data is None:
                        break

                    # print "received"
                    (ip_time_out_byte, pad_byte, flags_byte, tag_byte,
                     dest_port_byte, source_port_byte, dest_addr_short,
                     source_addr_short, command_short, sequence_short,
                     arg1_int, arg2_int, arg3_int) =\
                        struct.unpack_from("<BBBBBBHHHHiii", data, 0)
                    header_length = 26
                    spikedatalen = len(data) - header_length
                    t_tic = arg1_int
                    last_time_packet_recieved = datetime.datetime.now()

                    for spike in range(0, spikedatalen, 4):
                        spikeWord = struct.unpack_from("<I", data, spike +
                                                       header_length)[0]
                        x = packet_conversions.get_x_from_key(spikeWord)
                        y = packet_conversions.get_y_from_key(spikeWord)
                        p = packet_conversions.get_p_from_key(spikeWord)
                        nid = packet_conversions.get_nid_from_key(spikeWord)
                        # logger.debug("received packet from {},{},{}".format(x,y,p))
                        self.visualiser.spike_recieved({
                            'coords': [x, y, p],
                            'neuron_id': nid,
                            'tag': tag_byte,
                            'time_in_ticks': t_tic,
                            'spike_word': spikeWord
                        })
                else:  #create fake spikes
                    t_tic = self.generate_fake_spikes(packet_count, t_tic)

            except socket.timeout:
                pass
            except Exception as e:
                if not self.done:
                    traceback.print_exc()
                    logger.debug(
                        "[visualiser_listener] Error receiving data: %s" % e)
    def run(self):
        logger.info("[port_listener] starting")
        self.queuer.start()
        last_update_time = datetime.datetime.now()
        t_tic = 0
        last_time_packet_recieved = datetime.datetime.now()
        if self.DEBUG:
            max_neuronid = 200
        while not self.done:
            try:
                t_tic, last_update_time = self.handle_timer_forces(
                        last_update_time, last_time_packet_recieved, t_tic)
                # if done every 200 ms


                if not self.DEBUG:
                    #print "trying to recive"
                    data = self.queuer.get_packet()
                    if data is None:
                        break
                    
                    # print "received"
                    (ip_time_out_byte, pad_byte, flags_byte, tag_byte,
                     dest_port_byte, source_port_byte, dest_addr_short,
                     source_addr_short, command_short, sequence_short,
                     arg1_int, arg2_int, arg3_int) =\
                        struct.unpack_from("<BBBBBBHHHHiii", data, 0)
                    header_length = 26
                    spikedatalen = len(data) - header_length
                    t_tic = arg1_int
                    last_time_packet_recieved = datetime.datetime.now()

                    for spike in range(0, spikedatalen, 4):
                        spikeWord = struct.unpack_from("<I", data, spike + header_length)[0]
                        x = packet_conversions.get_x_from_key(spikeWord)
                        y = packet_conversions.get_y_from_key(spikeWord)
                        p = packet_conversions.get_p_from_key(spikeWord)
                        nid = packet_conversions.get_nid_from_key(spikeWord)
                        # logger.debug("received packet from {},{},{}".format(x,y,p))
                        self.visualiser.spike_recieved({'coords':[x,y,p],
                                                       'neuron_id':nid,
                                                       'tag': tag_byte,
                                                       'time_in_ticks': t_tic,
                                                       'spike_word': spikeWord})
                else:#create fake spikes
                    t_tic = self.generate_fake_spikes(packet_count, t_tic)

            except socket.timeout:
                pass
            except Exception as e:
                if not self.done:
                    traceback.print_exc()
                    logger.debug("[visualiser_listener] Error receiving data: %s" % e)
 def convert_normal_pop_spike_to_x_y(self, spike_word):
     '''
     takes the spike_word (key) and converts it into a neuron id, for the vertex
     it then converts the neuron id into a x and y coord and adds one to the colour
     '''
     neuron_id = packet_conversions.get_nid_from_key(spike_word)
     x = packet_conversions.get_x_from_key(spike_word)
     y = packet_conversions.get_y_from_key(spike_word)
     p = packet_conversions.get_p_from_key(spike_word)
     subvert = self.locate_subvert(x, y, p)
     real_neuron_id = subvert.lo_atom + neuron_id
     x_coord = math.floor(real_neuron_id/self.y_dim)
     y_coord = real_neuron_id - (x_coord * self.y_dim)
     return x_coord, y_coord, 1
 def convert_normal_pop_spike_to_x_y(self, spike_word):
     '''
     takes the spike_word (key) and converts it into a neuron id, for the vertex
     it then converts the neuron id into a x and y coord and adds one to the colour
     '''
     neuron_id = packet_conversions.get_nid_from_key(spike_word)
     x = packet_conversions.get_x_from_key(spike_word)
     y = packet_conversions.get_y_from_key(spike_word)
     p = packet_conversions.get_p_from_key(spike_word)
     subvert = self.locate_subvert(x, y, p)
     real_neuron_id = subvert.lo_atom + neuron_id
     x_coord = math.floor(real_neuron_id / self.y_dim)
     y_coord = real_neuron_id - (x_coord * self.y_dim)
     return x_coord, y_coord, 1