discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Discuss-gnuradio] Precise interrupts in GNURADIO?


From: Chen Chen
Subject: [Discuss-gnuradio] Precise interrupts in GNURADIO?
Date: Mon, 9 Feb 2015 17:11:50 -0500

Dear all, 
       In my application, I want to implement the following feature:
      1. If I decode 50 packages, then stop the flowgraph immediately
      2. otherwise, if after 30 seconds, I cannot receive more than 50 packages, then stop the flowgraph. So I could prevent the flowgraph from locking forever.
     
      For the first part, I add a state machine inside the decoder. When there are 50 packages decoded correctly, I would output a high level '1' on the output. Otherwise I output low level 0. I connect this output port, with a probe. In python, I wrote
     -------------------------------------------------------------
        def _probe_peak_package_number():
            while True:
                val = round(self.probe_package_number.level())
                if (val == 1):
                    print "package number reach threshold %d!" %self.threshold
                    self.stop()
                    break
        _probe_package_number_thread = threading.Thread(target=_probe_peak_package_number)
        _probe_package_number_thread.daemon = True
        _probe_package_number_thread.start()
     -------------------------------------------------------------
which starts a thread, listening to the probe. Whenever it observes a high level '1', it would STOP the flowgraph immediately. 

For the second part, I am using the Timer in the package threading.
     -------------------------------------------------------------
#def _shut_down_flow_graph():
            #print "Passing %d seconds, going to kill the process!" %self.timing
            #self.stop()

        #_timer_thread=Timer(self.timing,_shut_down_flow_graph)
        #_timer_thread.start()
     -------------------------------------------------------------

But, what I observe is that:
1. If I set the threshold to 10 packages, I have to wait until about 100 packages being decoded correctly. Sometimes I have to wait for about 500 packages. The threading is not very stable, even there is an high-level output at the probe, it does not 'see' it immediately.

2. The alarm would prevent my flowgraph from exiting. Namely, when there are more than 50 packages, the flowgraph would not be stopped, until 30 seconds passed. But I have a self.stop() in the snippet. 

                if (val == 1):
                    print "package number reach threshold %d!" %self.threshold
                    self.stop()
                    break

Why it does not terminate the python program immediately?

Or, is there any suggestions on implementing precise interrupt in GNURADIO?

Thanks.
--
CHEN CHEN


reply via email to

[Prev in Thread] Current Thread [Next in Thread]