# Handle command-line options parser = OptionParser(option_class=eng_option, conflict_handler="resolve") expert_grp = parser.add_option_group("Expert") cs_mac.add_options(parser, expert_grp) usrp_rx.add_options(parser, expert_grp) usrp_tx.add_options(parser, expert_grp) pkt_listener.add_options(parser, expert_grp) (options, args) = parser.parse_args() # Create MAC and connect to USRP tb = gr.top_block() mac = cs_mac(options) tb.connect(usrp_rx(options), mac, usrp_tx(options)) # Spawn thread to listen for packets pkt_thread = pkt_listener(options, mac) pkt_thread.start() # Let everything run tb.start() try: raw_input() except KeyboardInterrupt: pass # Cleanup tb.stop() mac.stop() pkt_thread.stop() # Wait for completion
mac = cs_mac(mac_options, True) # Construct block for adding all incoming signals. Block # is directly connected to node receiver input_add = gr.add_cc() tb.connect(input_add, mac) # Construct noise generator and add to input signals noise_voltage = mac_options.noise_amplitude if config.has_option(s, "noise-amplitude"): noise_voltage = config.getint(s, "noise-amplitude") noise_src = gr.noise_source_c(gr.GR_GAUSSIAN, noise_voltage, mac_options.noise_seed) tb.connect(noise_src, (input_add, 0)) # Add packet receiver thread mac_receiver = pkt_listener(mac_options, mac) mac_receiver.start() # Add node information to dictionary nodes[name] = (mac, input_add, mac_receiver) inputidx[name] = 1 # Construct channels between the nodes (we assume fully-connected) # NOTE: We allow self-loops (which capture node self-interference) for n_src in nodes.keys(): (src_mac, src_input, dummy) = nodes[n_src] for n_dst in nodes.keys(): (dst_mac, dst_input, dummy) = nodes[n_dst] # Use global options as a base link_options = copy.copy(options)