On Thu, Mar 28, 2013 at 8:45 PM, sumitstop <sumit.ku...@research.iiit.ac.in> wrote: > How can I terminate benchmark_rx.py after a certain number of TIMEOUTS. > > I have observed two things > > 1. When I dump Tx data using --to-file option and then demod them using > benchmark_rx , benchmark_rx terminates after demod. No waiting ! >
I haven't used benchmark with file io yet, but it's probably just reading from the file until the end of the file then quitting; that is unless you use the repeat=True option. > 2. When I use benchmark_rx for OTA reception with USRP, and once the Tx > stops sending data, it keeps waiting for data and give TIMEOUTS but never > stops. > > My application wants to get it terminated automatically after a certain > number of timeouts. I tried digging a lot about where this TIMEOUT is coming > from but no help so far. > > Any pointers. > I've never seen benchmark give a timeout, when I use it the receive chain just hangs waiting for packets. You can change this by doing some carrier sensing. There's a function in receive_path called carrier_sensed(). It returns true or false if the received power is above some threshold. You can change the threshold, or even access the probe yourself. it's defined (in receive_path.py) as 79 # Carrier Sensing Blocks 80 alpha = 0.001 81 thresh = 30 # in dB, will have to adjust 82 self.probe = gr.probe_avg_mag_sqrd_c(thresh,alpha) I'm able to make benchmark_rx stop on its own by going into a loop after the flowgraph starts. When the carrier is sensed exit the loop and go in to another one. In the second loop exiit when the carrier is not sensed anymore. Note that for discontinuous option you'd have to do something a little bit tricker. Kind of a very simple state machine. I used this the probe.level might be useful for determining where to set the threshold (30 won't work) I usually fare well around -60 in my lab: tb.start() # start flow graph carrier_sense = tb.rxpath.carrier_sensed while not carrier_sense(): print tb.rxpath.probe.level() sleep(.1) while carrier_sense(): print carrier_sense() sleep(.5) tb.stop() # wait for it to finish You might also want to sleep less alot than .1 so you don't miss the first packet(s). Is that along the lines of what you were looking for? -Nathan _______________________________________________ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org https://lists.gnu.org/mailman/listinfo/discuss-gnuradio