Quantcast

How to update the value of a variable by reading message in grc?

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

How to update the value of a variable by reading message in grc?

Zhe Feng
Hi all,

I'm working on a system with packet headers. I want to use the message decoded by the Packet Header Parser to update a variable.

I knew the message can be stored in a message debug block, and be retrieved by using the "get_message" function. So I can define a get function to read the message in the flowgraph class, and call this get function in "main" and set this value to the variable I want to update. For example, I wrote a get function like this:

    def get_type(self):
        self.num_msg = self.msg_debug.num_messages()
        self.msg = pmt.to_python(self.msg_debug.get_message(self.num_msg-1))
        self.type = self.msg.get('type_tag')
        return self.type

and call this get function in "main"
    type = tb.get_type()
    tb.set_variable(type)

But as far as I know, the get function can only be called once in "main", so the variable can only be updated once. Since we want to update the variable every time we decoded a message, I'm wondering is there a way in the grc to change a variable
by the message?

I actually have a idea in mind. Like the Header/Payload Demux block used in rx_ofdm, I can write a block that taking message as input, reading the PMT dictionary to get the value we want, and output the value. Then the desired variable can be updated by connecting the output of my designed block to a function probe.

But this function probe only probes the port in a certain frequency, i.e. it can not catch all the updates. So I'm wondering if there is a way to update a predefined variable through a block every time.

Any suggestions will be valued.

Thanks!
Best,
Zhe
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: How to update the value of a variable by reading message in grc?

Tom Rondeau-2
On Sat, May 3, 2014 at 2:31 AM, Zhe Feng <[hidden email]> wrote:
Hi all,

I'm working on a system with packet headers. I want to use the message
decoded by the Packet Header Parser to update a variable.

I knew the message can be stored in a message debug block, and be retrieved
by using the "get_message" function. So I can define a get function to read
the message in the flowgraph class, and call this get function in "main" and
set this value to the variable I want to update. For example, I wrote a get
function like this:

    def get_type(self):
        self.num_msg = self.msg_debug.num_messages()
        self.msg = pmt.to_python(self.msg_debug.get_message(self.num_msg-1))
        self.type = self.msg.get('type_tag')
        return self.type

and call this get function in "main"
    type = tb.get_type()
    tb.set_variable(type)

But as far as I know, the get function can only be called once in "main", so
the variable can only be updated once. Since we want to update the variable
every time we decoded a message, I'm wondering is there a way in the grc to
change a variable
by the message?

I actually have a idea in mind. Like the Header/Payload Demux block used in
rx_ofdm, I can write a block that taking message as input, reading the PMT
dictionary to get the value we want, and output the value. Then the desired
variable can be updated by connecting the output of my designed block to a
function probe.

But this function probe only probes the port in a certain frequency, i.e. it
can not catch all the updates. So I'm wondering if there is a way to update
a predefined variable through a block every time.

Any suggestions will be valued.

Thanks!
Best,
Zhe


I think your best option is to create your own block for handling the messages and not use the Message Debug block. As that block says, it's designed to help us debug message passing applications; it's not meant to be actually used as part of a real application.

Tom
 

_______________________________________________
Discuss-gnuradio mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
Loading...