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:
-
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. -
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.