Hi every one,
I am trying to control the open and close state of the flow graph which
implements transmission and receiving tasks. I would not like to use
start() and stop() pair to do that because the construction time is too
long. What I expect is sending a signal from another process to control
the flow graph of local process.
The architecture is very simple. In RX channel, Using uhd.usrp_source()
to get flow and transferring it to a signal process block for example
ieee802_15_4_demod_pkts(). TX part transferring flow from
ieee802_15_4_mod_pkts to uhd.usrp_sink(). The RX and TX are put in two
separate top_block and control them respectively. The simplest method I
used to control is lock() and unlock(). My scenario is that when signal
A arrived , call lock(), then when signal B arrived call unlock() to
revive the flow. The result is sometimes in the period of signal A the
flow does not stop and there is still data transferred from usrp_source
to demod_pks block. Then, I try to use method that combines lock() +
disconnect()+unlock() to stop the flow. For reviving the flow,
lock()+connect()+unlock() is used. The result is identical with the
former experiment.
At last I realised maybe the usrp_source is two slow so it block the
signal handler’s action. To verify it, I added the period of signal B to
give adequate time for the data transferring from usrp_source to the
demod_pkts(). I found the signal handler’s action became almost regular.
If I came back to the old time configuration but set a lower sample rate
of the uhd.usrp_source(), the signal handler’s action also became
regular.
So now my question is if I have to keep a small period of signal B and
simultaneously a relatively high sample rate, how can I control the
flow? Are there some approaches to mute the usrp_source thoroughly at
the period of signal B?
Any suggestion is highly appreciated.
Sincerely,
Zhonghua