Dynamic flow graph control

Hello,

I have an application where I need to collect the data for 5 seconds
from
the USRP source and do offline processing for 5 seconds in a repeated
manner. I am planning to use the lock & unlock features of the gnuradio
to
obtain my goals. The major part of my code is given below:

class SingleSource(grc_wxgui.top_block_gui):

self.source =

Source block

self.throttle =

throttle

self.file_sink = gr.file_sink(gr.sizeof_gr_complex*1,
“Data.dat”) # File Sink
self.null_sink =

Null sink

self.connect((self.source, 0), (self.throttle,
0))
self.connect((self.throttle, 0), (self.sink, 0))

def reconf1(self):
self.disconnect((self.gr_throttle_0,
0),(self.gr_file_sink_0, 0)) # Disconnecting the throttle &
the
file sink
self.connect((self.gr_throttle_0, 0),
(self.gr_null_sink_0,
0)) # re-connecting the throttle & the null sink

def reconf2(self):
self.disconnect((self.gr_throttle_0,
0),(self.gr_null_sink_0, 0)) # disconnecting the throttle &
the
null sink
self.connect((self.gr_throttle_0,
0),(self.gr_file_sink_0,
0)) # re-connecting the throttle & the file sink

if name == ‘main’:

tb = SingleSource()
    var = 1

tb.start()

Flow graph starts

    for loop in range(0,2):

sleep(5)

Collects the data in the file sink

tb.lock()

tb.reconf1() #
Flowgraph gets locked & reconfigured and unlocked

tb.unlock() #
Now,
data is going to the null sink. I don’t need this data
sleep(5)

… #
Offline
processing
open(“SineData.dat”,‘w’).close() #
I
WANT TO ERASE THE DATA IN THE FILE SINK AFTER PROCESSING

SO THAT THE FILE SIZE DOES NOT BIGGER

            tb.lock()
            tb.reconf2()                                       # 

File
sink is getting reconnected so that I can collect the data in the next
run

            tb.unlock()

Now, the problem is: the file size of “SineData.dat” should not grow
with
each loop since I am using open(“SineData.dat”,‘w’).close() . In each
new
loop, I expect the file to only contain the latest information and not
the
previous ones. However, I am finding that the file size keeps growing
with
each loop, i.e., the open(“SineData.dat”,‘w’).close() command is not
working.

Any suggestion will be very appreciated.

Thanks,

Nazmul


Muhammad Nazmul I.

Graduate Student
Electrical & Computer Engineering
Wireless Information & Networking Laboratory
Rutgers, USA.

Hi,

I am trying to simplify my previous email for clarification. I am
looking
to resolve the following issue:

I have two flowgraphs:

  1. USRP Source → File Sink # self.file_sink =
    gr.file_sink(gr.sizeof_gr_complex*1, “Data.dat”)
  2. USRP Source → Null Sink

I have defined both of them inside a class. I use unlock → disconnect

connect → lock to switch from one flow graph to the other. When I
connect
USRP–>Null, I work on the stored data of “Data.dat” file. Thereafter, I
want to clear the data of the “Data.dat” file. I use the following line
of
code to obtain my goal:

open(“Data.dat”,‘w’).close()

However, this command does not seem to erase the data of “Data.dat”
file,
i.e., when I run flow graph 1 again, the previous file does not get
erased.
The file size of “Data.dat” keeps growing with each run of flow graph.

How can I erase the contents of the file sink before I switch to flow
graph
#1?

Any suggestion will be very appreciated. Sorry for sending two emails on
the same matter.

Thanks,

Nazmul

On Sun, Aug 5, 2012 at 6:46 PM, Nazmul I.
[email protected]wrote:

Null sink

(self.gr_null_sink_0, 0)) # re-connecting the throttle & the

sleep(5)

            tb.unlock()

Thanks,
Rutgers, USA.


Muhammad Nazmul I.

Graduate Student
Electrical & Computer Engineering
Wireless Information & Networking Laboratory
Rutgers, USA.

This might be happening because “gr.file_sink” is not closing the passed
file handle until its destructed. I checked “gr_file_sink_base”'s source
and various functions like open, close and unbuffered writes are
supported. Try playing around with these(I haven’t used these things
yet).

http://www.reynwar.net/gnuradio/sphinx/gr/sink_blk.html (Check
gr.file_sink section)


Regards
Sreeraj Rajendran
http://home.iitb.ac.in/~rsreeraj


From: Nazmul I. [email protected]
To: GNURadio D.ion List [email protected]
Sent: Monday, 6 August 2012 8:52 PM
Subject: Re: [Discuss-gnuradio] Dynamic flow graph control

Hi,

I am trying to simplify my previous email for clarification. I am
looking to resolve the following issue:

I have two flowgraphs:

  1. USRP Source → File Sink # self.file_sink =
    gr.file_sink(gr.sizeof_gr_complex*1, “Data.dat”)
  2. USRP Source → Null Sink

I have defined both of them inside a class. I use unlock → disconnect
→ connect → lock to switch from one flow graph to the other. When I
connect USRP–>Null, I work on the stored data of “Data.dat” file.
Thereafter, I want to clear the data of the “Data.dat” file. I use the
following line of code to obtain my goal:

open(“Data.dat”,‘w’).close()

However, this command does not seem to erase the data of “Data.dat”
file, i.e., when I run flow graph 1 again, the previous file does not
get erased. The file size of “Data.dat” keeps growing with each run of
flow graph.

How can I erase the contents of the file sink before I switch to flow
graph #1?

Any suggestion will be very appreciated. Sorry for sending two emails on
the same matter.

Thanks,

Nazmul

On Sun, Aug 5, 2012 at 6:46 PM, Nazmul I.
[email protected] wrote:

Hello,

self.null_sink = … # Null sink
self.connect((self.gr_throttle_0, 0),(self.gr_file_sink_0, 0)) # re-connecting
the throttle & the file sink
sleep(5) # Collects the data in the file sink

Muhammad Nazmul I.

Graduate Student
Electrical & Computer Engineering
Wireless Information & Networking Laboratory
Rutgers, USA.


Muhammad Nazmul I.

Graduate Student
Electrical & Computer Engineering
Wireless Information & Networking Laboratory
Rutgers, USA.

Thanks a lot, Sreeraj!! You are right. I made it work using
file_sink.close() and file_sink.open() command.

Best,

Nazmul

On Mon, Aug 6, 2012 at 12:39 PM, sreeraj r [email protected]
wrote:

Sreeraj Rajendran
I am trying to simplify my previous email for clarification. I am looking
connect USRP–>Null, I work on the stored data of “Data.dat” file.
graph #1?

“Data.dat”) # File Sink
0),(self.gr_file_sink_0, 0)) # Disconnecting the throttle & the
0)) # re-connecting the throttle & the file sink

Flow graph starts

tb.unlock() # Now,
tb.reconf2() # File

Graduate Student
Graduate Student


Muhammad Nazmul I.

Graduate Student
Electrical & Computer Engineering
Wireless Information & Networking Laboratory
Rutgers, USA.