Пример #1
0
 def find_all_devices(self):
     # configuration the usrp sensors and transmitters
     # Automatically USRP devices discovery
     self.devices = uhd.find_devices_raw()
     self.n_devices = len(self.devices)
     self.addrs = []
     
     if (self.n_devices == 0):
         sys.exit("no connected devices")
     elif (self.n_devices >= 1):
         for i in range(self.n_devices):
             addr_t = self.devices[i].to_string()  #ex. 'type=usrp2,addr=192.168.10.109,name=,serial=E6R14U3UP'
             self.addrs.append(addr_t[11:30]) # suppose the addr is 192.168.10.xxx
             self.addrs[i]
             
     #if (self.n_devices == 1 and self._node_type == CLUSTER_NODE):
         #sys.exit("only one devices for the node, we need both communicator and sensor for cluster node")
     if (self.n_devices > 1 and self._node_type == CLUSTER_HEAD):
         sys.exit("only one devices is need for cluster head")
Пример #2
0
    def __init__(self, node_type, node_index, demodulator, modulator, rx_callback, options):
        gr.top_block.__init__(self)
		
        # is this node the sub node or head?
        self._node_type = node_type
        self._node_id   = node_index	

        # install the socket control channel
        self._socket_ctrl_chan = socket_ctrl_channel(self._node_type, self)
        # start the socket server to capture the control messages
        self._socket_ctrl_chan._sock_server.start()

        if(options.sx_freq is not None):
            # Work-around to get the modulation's bits_per_symbol
            args = demodulator.extract_kwargs_from_options(options)
            symbol_rate = options.bitrate / demodulator(**args).bits_per_symbol()
            if (options.sx_samprate is None):
                ask_sample_rate = symbol_rate*options.samples_per_symbol
            else:
                ask_sample_rate = options.sx_samprate
			
            self._rx_freq = options.sx_freq
            self._tx_freq = options.sx_freq # use the same frequence 
            self._sample_rate = ask_sample_rate

            # configuration the usrp sensors and transmitters
            # Automatically USRP devices discovery
            devices = uhd.find_devices_raw()
            n_devices = len(devices)
            addrs = []
        
            if (n_devices == 0):
                sys.exit("no connected devices")
            elif (n_devices >= 1):
                for i in range(n_devices):
                        addr_t = devices[i].to_string()  #ex. 'type=usrp2,addr=192.168.10.109,name=,serial=E6R14U3UP'
                        addrs.append(addr_t[11:30]) # suppose the addr is 192.168.10.xxx
                        addrs[i]
                
            if (n_devices == 1 and self._node_type == CLUSTER_NODE):
                sys.exit("only one devices for the node, we need both communicator and sensor for cluster node")
            elif (n_devices > 1 and self._node_type == CLUSTER_HEAD):
                sys.exit("only one devices is need for cluster head")

            # Configure Sensors, with all GPS sync
            self.sensors = []
            for i in range(n_devices):
                self.sensors.append(uhd_sensor(addrs[i], ask_sample_rate,
                                                options.sx_freq, options.sx_gain,
                                                options.sx_spec, options.sx_antenna, 
                                                options.verbose))
                self.sensors[i].u.set_start_on_demand()  # the sensor will start sensing on demand												
                if self.sensors[i].u.get_time_source(0) == "none":
                    self.sensors[i].u.set_time_source("mimo", 0)  # Set the time source without GPS to MIMO cable
                    self.sensors[i].u.set_clock_source("mimo",0) 
					
	        	# file sinks
                filename = "%s_sensed.dat" %(NODES_PC*self._node_id + i)
                self.connect(self.sensors[i].u, gr.file_sink(gr.sizeof_gr_complex, filename))

            # Configure Transmitters	
            self.transmitters = []
            self.txpaths = []
            self.tx_srcs = []
            for i in range(n_devices):	
                self.transmitters.append(uhd_transmitter(addrs[i], symbol_rate,
                                                options.samples_per_symbol,
                                                options.tx_samprate,
                                                options.tx_freq, options.tx_gain,
                                                options.tx_spec, options.tx_antenna,
                                                options.verbose, True))	#TDMA transmitter
                self.txpaths.append(transmit_path(modulator, options))
                self.tx_srcs.append(tx_data_src(self.txpaths[i]))
                #filename = "file%.dat" %(i)
                #self.file_src = gr.file_source(gr.sizeof_gr_complex*1, filename, True)      
                #self.source.u.set_center_freq(uhd.tune_request(options.rx_freq, ask_sample_rate*2), 0)
                #print 'In locking '
                #while (self.source.u.get_sensor("lo_locked").to_bool() == False):
                #    print '.'
        
                 #print 'Locked'

        self.timer =  threading.Timer(1, self.start_streaming)
Пример #3
0
    def __init__(self, node_type, node_index, mod_class, demod_class,
                 rx_callback, options):

        gr.top_block.__init__(self)

        # is this node the sub node or head?
        self._node_type = node_type
        self._node_id   = node_index

        # Get the modulation's bits_per_symbol
        args = mod_class.extract_kwargs_from_options(options)
        symbol_rate = options.bitrate / mod_class(**args).bits_per_symbol()

        # Automatically USRP devices discovery
        devices = uhd.find_devices_raw()
        n_devices = len(devices)
        addrs = []
        
        if (n_devices == 0):
            sys.exit("no connected devices")
        elif (n_devices >= 1):
            for i in range(n_devices):
                addr_t = devices[i].to_string()  #ex. 'type=usrp2,addr=192.168.10.109,name=,serial=E6R14U3UP'
                addrs.append(addr_t[11:30]) # suppose the addr is 192.168.10.xxx
                addrs[i]
                
        if (n_devices == 1 and self._node_type == CLUSTER_NODE):
            sys.exit("only one devices for the node, we need both communicator and sensor for cluster node")
        elif (n_devices > 1 and self._node_type == CLUSTER_HEAD):
            sys.exit("only one devices is need for cluster head")
                
        # Configure the devices to 
        # 1 Communicator
        # N Sensors (N >= 1)
        # How to determin the Communicator?
        #       we need to assure all the sensors to be sync with GPS, except the communicator
        #       thus, the device with non-sync time will be assigned as communicator
        # Firstly, instantiate all the USRP receivers (including the sensors and the communicator)
        self.sensors = []
        t = []
        dt = []
        time_src = []
        role = []
        
        for i in range(n_devices):
            self.sensors.append(uhd_sensor(addrs[i], options.sx_samprate,
                                                options.sx_freq, options.sx_gain,
                                                options.sx_spec, options.sx_antenna, 
                                                options.verbose))       
            if self.sensors[i].u.get_time_source(0) == "none":
                self.sensors[i].u.set_time_source("mimo", 0)  # Set the time source without GPS to MIMO cable
                self.sensors[i].u.set_clock_source("mimo",0)                
            time_src.append(self.sensors[i].u.get_time_source(0))

        time.sleep(4)   # time to sync between mimo connected devices
            
        for i in range(n_devices):
            t.append(self.sensors[i].u.get_time_now().get_real_secs())

            role.append("sensor")
            
            dt.append(1)
            if i > 0:
                for j in range(i):
                    if (abs(t[j] - t[i]) < 0.1): # Find a pair of GPS synched devices
                        dt[i] += 1
                        dt[j] += 1 
                        
        # Find the communicator
        found_com = 0
        print t
        print addrs
        print time_src
        print dt
        
        cind = 0
        
        for i in range(n_devices):
            if found_com == 1:
                break
                
            if n_devices == 2:
                if self.sensors[i].u.get_time_source(0) == "mimo" and found_com == 0:
                    cind = i
                    found_com = 1
                elif i == 1 and slef.sensors[i].u.get_time_source(0) == "gpsdo" and found_com == 0:
                    cind = i
                    found_com = 1
                elif i == 1:
                    sys.exit("configure error, no communicaotr found for 2 devices")                    
      
            elif (dt[i] != n_devices - 1 and dt[i] != 1) or (sum(dt) == n_devices):
                sys.exit("configure error or Not sync")
            elif dt[i] == 1 and found_com == 0: # We select this as communicator
                cind = i
                found_com = 1
            
            if found_com == 1:
                del self.sensors[cind] # delete this devices from sensor list
                role[cind] = "com"
                self.source =  uhd_receiver(addrs[cind], symbol_rate,
                                            options.samples_per_symbol,
                                            options.rx_freq, options.rx_gain,
                                            options.rx_spec, options.rx_antenna,
                                            options.verbose)
                self.sink = uhd_transmitter(addrs[cind], symbol_rate,
                                            options.samples_per_symbol,
                                            options.tx_freq, options.tx_gain,
                                            options.rx_spec, options.rx_antenna,
                                            options.verbose)
                del addrs[cind] # Ignore the addrs of communicator                                            

        print role
        
        if found_com == 0: # no communicator found
            sys.exit("Configuration Error")

        # Setup the rest of USRPs as sensors
        if (self._node_type == CLUSTER_NODE and STREAM_OR_FINITE == 0):
            for i in range(n_devices - 1):
                filename = "%s_sensed.dat" %(addrs[i])
                self.connect(self.sensors[i].u, gr.file_sink(gr.sizeof_gr_complex, filename))
        
        options.samples_per_symbol = self.source._sps     
        
        self.txpath = transmit_path(mod_class, options)
        self.rxpath = receive_path(demod_class, rx_callback, options)
        
        self.connect(self.txpath, self.sink)
        self.connect(self.source, self.rxpath)
Пример #4
0
    def find_all_devices(self):
        # configuration the usrp sensors and transmitters
        # Automatically USRP devices discovery
        self.devices = uhd.find_devices_raw()
        self.n_devices = len(self.devices)
        self.addrs = []

        # Organize the devices in the addrs[] based on the USRP configuration
        # Get host address
        hostname = socket.gethostname()
        if hostname.find('cri-node-') == 0:
            host_id = int(hostname[9:])
            host_addr = HOSTADDR_BASE + host_id - 1
            host_addr_s = HOSTADDR_PREFIX + str(host_addr)
        else:
            sys.exit("host name of computer is not correct")
        # Read the USRPs configuration entry for this host
        cfgfile = open('./usrp_config', 'r')
        line = cfgfile.readline()
        hostaddrs = ''
        while line:
            pos1 = line.find(host_addr_s)  #host addr start point
            if pos1 == -1:
                line = cfgfile.readline()
                continue
            print line[0:]
            pos2 = line.find(NODE_SLOT)
            if pos2 != -1:
                self.node_slot_start = int(line[pos2 + 16:])

            curr = pos1 + len(host_addr_s)
            prev = curr
            while True:
                shift = line[curr:].find(USRPADDR_PREFIX)
                if shift != -1:
                    prev = curr + shift
                    shift = line[prev:].find(' ')
                    if shift == -1:
                        shift = line[prev:].find('\n')
                    curr = prev + shift
                    hostaddrs = hostaddrs + 'addr=' + line[prev:curr]
                else:
                    break

            break

        cfgfile.close()

        if (self.n_devices == 0):
            sys.exit("no connected devices")
        elif (self.n_devices >= 1):
            for i in range(self.n_devices):
                self.addrs.append('')  #initiliaze the addr table

            for i in range(self.n_devices):
                addr_t = self.devices[i].to_string(
                )  #ex. 'type=usrp2,addr=192.168.10.109,name=,serial=E6R14U3UP'
                usrpaddr = addr_t[11:30]
                pos = hostaddrs.find(usrpaddr)
                if pos != -1:
                    self.addrs[
                        pos /
                        19] = usrpaddr  # suppose the addr is 192.168.10.xxx, put the addr to the currect index of self.addrs
                else:
                    sys.exit('incorrect USPR configuration')
        print self.addrs
        print hostaddrs

        #if (self.n_devices == 1 and self._node_type == CLUSTER_NODE):
        #sys.exit("only one devices for the node, we need both communicator and sensor for cluster node")
        if (self.n_devices > 1 and self._node_type == CLUSTER_HEAD):
            sys.exit("only one devices is need for cluster head")
Пример #5
0
    def find_all_devices(self):
        # configuration the usrp sensors and transmitters
        # Automatically USRP devices discovery
        self.devices = uhd.find_devices_raw()
        self.n_devices = len(self.devices)
        self.addrs = []

	# Organize the devices in the addrs[] based on the USRP configuration
        # Get host address
        hostname = socket.gethostname() 
        if hostname.find('cri-node-') == 0:
            host_id     = int(hostname[9:])
            host_addr   = HOSTADDR_BASE + host_id - 1 
            host_addr_s = HOSTADDR_PREFIX  + str(host_addr)
        else:
            sys.exit("host name of computer is not correct")
        # Read the USRPs configuration entry for this host
        cfgfile = open('./usrp_config', 'r')
        line = cfgfile.readline()
        hostaddrs = ''
        while line:
            pos1 = line.find(host_addr_s) #host addr start point
            if pos1 == -1: 
                line = cfgfile.readline()
                continue
            print line[0:]
            pos2 = line.find(NODE_SLOT)
            if pos2 != -1:
                self.node_slot_start = int(line[pos2+16:])

            curr = pos1 + len(host_addr_s)
            prev = curr
            while True:
                shift = line[curr:].find(USRPADDR_PREFIX)
                if shift != -1:
                    prev = curr + shift
                    shift = line[prev:].find(' ')
                    if shift == -1:
                        shift = line[prev:].find('\n')
                    curr = prev + shift
                    hostaddrs = hostaddrs +'addr='+line[prev:curr]
                else:
                   break
            
            break
           
        cfgfile.close() 

        
        if (self.n_devices == 0):
            sys.exit("no connected devices")
        elif (self.n_devices >= 1):
            for i in range(self.n_devices):
                self.addrs.append('') #initiliaze the addr table

            for i in range(self.n_devices):
                addr_t = self.devices[i].to_string()  #ex. 'type=usrp2,addr=192.168.10.109,name=,serial=E6R14U3UP'
                usrpaddr = addr_t[11:30]
                pos = hostaddrs.find(usrpaddr)
                if pos != -1:
                    self.addrs[pos/19] = usrpaddr # suppose the addr is 192.168.10.xxx, put the addr to the currect index of self.addrs
                else:
                    sys.exit('incorrect USPR configuration')
        print self.addrs
        print hostaddrs
                
        #if (self.n_devices == 1 and self._node_type == CLUSTER_NODE):
            #sys.exit("only one devices for the node, we need both communicator and sensor for cluster node")
        if (self.n_devices > 1 and self._node_type == CLUSTER_HEAD):
            sys.exit("only one devices is need for cluster head")