Hi Chen Chen,

After the first block's work returns WORK_DONE, the rest of the buffers is processed, and the flow graph is stopped. In principle, you can restart that flow graph, but generally, that's not a good idea -- stopping the flow graph usually brings blocks into a state where continuing to work is impossible. For example, the file sink closes the file.

So the general answer is: No, that's not possible. I thought your application dictated that you're completely finished after 50 packets (or 30s)?

Best regards,
Marcus

On 11.07.2015 23:53, Chen Chen wrote:
Hello all,
I am wondering, after the WORK_DONE is invoked, is it possible to restart the flowgraph? Thanks!

2015-02-09 17:11 GMT-05:00 Chen Chen <linkin8...@gmail.com <mailto:linkin8...@gmail.com>>:

    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




--
CHEN CHEN
Electrical and Computer Engineering
University of Maryland, College Park
E-mail:linkin8...@gmail.com <mailto:e-mail%3alinkin8...@gmail.com> or cc8...@umd.edu <mailto:cc8...@umd.edu>
Address: KEB 2238, Kim Bldg


_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to