discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] Message passing(connect) in C++


From: Marcus Müller
Subject: Re: [Discuss-gnuradio] Message passing(connect) in C++
Date: Thu, 30 Apr 2015 16:37:22 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0

Hi Marco,

ok, I think it's best if I describe a bit of what happens behind the curtains:
GRC is really just a graphical generator for python code. As soon as you hit the "generate" button (or the run button, where generating is done inherently), python code is written that has no connection, knowledge or dependency to the XML that was used to generate it.

From a user-friendliness point of view, I can fully understand your approach to take the burden to explicitly connect up- and downstream blocks off your user's shoulders. You can actually hack together something like that even without the use of tags, by just implementing a start() method in your block. You'd pass a top_block::sptr to the constructor, and then, in your_block::start() get the upstream block doing  your_block::detail()->input(0)->buffer()->link(), check that block for being your other block type, and if not, continue the search through the flow graph in the same matter. After you've found your other block, ou use your stored top_block::sptr to ->msg_connect(other_block, this_block).

However: that breaks a lot of assumptions I would made when looking at a flow graph, mainly the assumption that downstream blocks don't invisibly influence behaviour of upstream blocks. Honestly, letting your user connect your two blocks with msg_connect doesn't sound like a bad idea in the long run.

Or you come up with a hier-block-based approach: -- are sample streams, ## message passing


                .----------------------------------------------.
                |               your_hier_block                |
                |----------------------------------------------|
                |                                              |
                |       .------------------------.             |
                |       |  your_upstream_block   |             |
                |       |------------------------|             |
                |   --->|                        |---------------->to user blocks
                |   |   |                        |             |
                |   |   '------------------------'             |
--------------->|---                 ^                         |
                |                    #                         |
                |                    #                         |
                |       .------------------------.             |
                |       | your_downstream_block  |             |
                |       |------------------------|             |
                |       |                        |<----------------from user blocks
                |       |                        |             |
                |       '------------------------'             |
                |                    |                         |
                '--------------------|-------------------------'
                                     ------------------------------>to further processing


Best regards,
Marcus

On 04/30/2015 02:51 PM, marco Ribero wrote:
I want to exchange data between adjacent blocks which are already connected through the GUI, without ask to the user to write  additional code.
So my approach would be: the upper block send down its name(through tags) and the lower block configure the communication, so I thought to take advantage from message passing.
If I won't be able to use this approach, I will use some memory shared mechanism.

Just a question,in order to use the gr::flowgraph:connect(),I need to get the object flowgraph from the XML file situated in GRC,isn't it?

Il giorno gio 30 apr 2015 alle ore 13:48 Mostafa Alizadeh <address@hidden> ha scritto:
excuse me,

I'm seeing the new API 3.7.7 of GNURadio which is changed. The "connect" is a member of gr::flowgraph which connects both blocks' ports and message ports:


Best,

On Thu, Apr 30, 2015 at 4:15 PM, Mostafa Alizadeh <address@hidden> wrote:
Hi Marco, 

The top_block class has a member named: connect. You can use it in the main() to connect different blocks. However, if you want to dis/connect blocks within C++ blocks, you must pass top_block pointer to the class in some fashion. Once I did and I got errors because I didn't have accessed to the "connect" from within the block. 

I prefer to change your topology to refuse the need you've mentioned. Otherwise describe your problem with more details.


Best,
Mostafa



On Thu, Apr 30, 2015 at 3:43 PM, marco Ribero <address@hidden> wrote:
Hi all,
I have another question. How can I connect the input and output port of different blocks,from inside a C++ block? In the documentation I've only seen the msg_connect() for python

Thanks,
marco

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




--
***********************************************************
Department of Electrical Engineering
Aboureyhan Building
MMWCL LAB
Amirkabir University Of Technology
Tehran
IRAN
Tel: +98 (919) 158-7730
***********************************************************



--
***********************************************************
Department of Electrical Engineering
Aboureyhan Building
MMWCL LAB
Amirkabir University Of Technology
Tehran
IRAN
Tel: +98 (919) 158-7730
***********************************************************


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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]