Marcus,

Looking around I don't see where the pointer to the block is made globally
visible. I am inclined to add some code to the make method to register the
shared pointer in a global variable when the method is called. Since my
application has only a single USRP block (source and sink), there's no
danger of overwriting something.

My problem is this:

I have python code that creates the blocks and strings them together etc.
but I want to actually access the created block from c++ code (in the mac
block implementation).

Let me know if I am seriously astray.


Thanks again for your help.






On Thu, Nov 14, 2013 at 9:52 AM, Marcus Müller <mar...@hostalia.de> wrote:

>  In GR 3.7, the shared pointer is usually blockname::sptr;
>
> I can't really point you to a very good example, but when you call
> top_block.connect(src, sink) in C++, you're giving it spointers :)
>
> As I said, whenever you make a block, you actually get a shared pointer to
> that instance, and not the object itself.
>
>
> On 14.11.2013 15:39, M. Ranganathan wrote:
>
>    Marcus,
>
>  Thanks for your reply. What will the shared pointer be called. I see
> stuff like this in the code:
>
> GR_SWIG_BLOCK_MAGIC2(uhd, usrp_source)
> GR_SWIG_BLOCK_MAGIC2(uhd, usrp_sink)
> GR_SWIG_BLOCK_MAGIC2(uhd, amsg_source)
>
>
>  Presumably, that generates a structure that is registered as a global
> pointer. So in my mac, I want something like
>
>  extern ....
>
>  At the risk of asking for too much help, can you give me some guidance or
> point me to a fragment of code somewhere that does this sort of thing.
>
>  Thanks,
>
>  Ranga
>
>
>
> On Thu, Nov 14, 2013 at 4:06 AM, Marcus Müller <mar...@hostalia.de> wrote:
>
>>  Hi Ranga,
>>
>> that's what pointers are for, after all. Just do it! Thanks to the
>> make()-magic you basically always have a smart shared pointer instead of an
>> block object (unless you really try to break the system ;) ).
>>
>> Just a quick note though: MAC is usually timing-relevant. Timed commands
>> might not work as you expect, so please be aware that calling
>> set_command_time on your source might break functionality since there is no
>> out-of-order execution.
>>
>> Greetings,
>> Marcus
>>
>>
>> On 14.11.2013 01:26, M. Ranganathan wrote:
>>
>>   Hello all!
>>
>>  I want to write a block that can directly access the uhd_usrp_source.
>> This block is a mac block hence it is up on the food chain and far away
>> from uhd_usrp_source in terms of its processing function. What is a good
>> way of passing it a handle to the usrp_source ?
>>
>>  I can think of some hacks (such as a static global pointer where the
>> uhd_usrp_source C++ object registers itself) but it seems ugly to me to
>> take that route. Is there a better way to access global objects from within
>> a block implementation.
>>
>>  Thanks in advance for any help.
>>
>>  Regards,
>>
>> Ranga
>>
>> --
>> M. Ranganathan
>>
>>
>>  _______________________________________________
>> Discuss-gnuradio mailing 
>> listDiscuss-gnuradio@gnu.orghttps://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>>
>>
>>
>> _______________________________________________
>> Discuss-gnuradio mailing list
>> Discuss-gnuradio@gnu.org
>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>>
>>
>
>
> --
> M. Ranganathan
>
>
>


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

Reply via email to