Hi Josh,

You mentioned that:

"the code to add a key/value actually returns a new dictionary and doesnt
change the old ones.

I know this pmt stuff is crazy. Why didnt we just use std::map? :-)"

I'm confused with this, because I created the dictionary and added the
values. However, when I've checked the type, it shows that it is a
dictionary (as I expected), but also it is always empty.

      pmt::pmt_t value_dict = pmt::pmt_make_dict();
      std::cout << std::endl << "Making a dictionary" << std::endl;
      pmt::pmt_dict_add(value_dict, TIME_KEY,  pmt::pmt_from_uint64(3200));
            this->post_msg(0, AMSG_KEY, value_dict, _id);
      std::cout << std::endl << "Posting downstream" << std::endl;

  std::cout << std::endl << "checking if null:"
<<pmt::pmt_is_null(value_dict)<< std::endl; //Return true
  std::cout << std::endl << "checking if dict:"
<<pmt::pmt_is_dict(value_dict)<< std::endl; //Return true

So, does it mean that I cannot access the values that are added into the
dictionary "value_dict"?. If it is possible, how should I access them?.

*Sort of related question:*

Since this is dictionary, in order to debug my code I printed out the
items, keys and values. I expected to see at least the items inside the
dictionary, but again everything is empty.

std::cout << std::endl << "Checking items ;" <<
pmt::pmt_dict_items(value_dict)<<std::endl;
std::cout << std::endl << "Checking keys ;" <<
pmt::pmt_dict_keys(value_dict)<<std::endl;
std::cout << std::endl << "Checking values;" <<
pmt::pmt_dict_values(value_dict)<<std::endl;

Thanks a lot for your help,

Kind Regards,

Jose

On Thu, Oct 11, 2012 at 2:43 PM, Josh Blum <j...@joshknows.com> wrote:

>
>
> On 10/10/2012 07:16 PM, Jose Torres Diaz wrote:
> > Hi Josh,
> >
> > I am very keen on this block (UHD_AMSG_SOURCE), because I saw that you
> post
> > a dictionary downstream in this example. Thus, I would like to analyze
> how
> > it works. I've tried to replicate your code in a different block, but I
> > have some issues with the dictionary.
> >
> > Here is my summary:
> >
> > *Issue (1):* According to the wiki:
> > http://gnuradio.org/redmine/projects/gnuradio/wiki/TypePMT#Dictionaries.
> If
> > I want to set values in the dictionary, I should use
> >
> > pmt_dict_set(%parameters here)
>
> Doesnt exist. I think it should be added. This version could add the
> key/value to the existing dictionary. vs the pmt_dict_add which creates
> a new one
>
> >
> > However, this command it doesn't work for me (as it is not part of pmt).
> >
> > The command that works without problem is:
> >
> > pmt_dict_add(%parameters here)
> >
> >
> > *Issue (2):* I've set a dictionary with one value on it. (See the code
> > below). However, it is always empty when I tried to check the items, keys
> > or values:
> >
> > pmt::pmt_t value_dict=pmt::pmt_make_dict();
> >     std::cout << std::endl << "Making a dictionary : " << value_dict
> > <<std::endl;
> >     pmt::pmt_dict_add (value_dict,blob_key,pmt::pmt_from_uint64(10));
> >     std::cout << std::endl << "Adding the value, items : " <<
> > pmt::pmt_dict_items(value_dict) <<std::endl;
> >     std::cout << std::endl << "Adding the value, keys : " <<
> > pmt::pmt_dict_keys(value_dict) <<std::endl;
> >     std::cout << std::endl << "Adding the value, values : " <<
> > pmt::pmt_dict_values(value_dict) <<std::endl;
> >
> > Results (always empty!):
>
> the code to add a key/value actually returns a new dictionary and doesnt
> change the old ones.
>
> I know this pmt stuff is crazy. Why didnt we just use std::map? :-)
>
> >
> > Adding the value, items : ()
> > Adding the value, keys : ()
> > Adding the value, values : ()
> >
> >
> > *Issue (3):* I post the dictionary downstream similar to the code in
> > "UHD_AMSG_SOURCE":
> >
> > this->post_msg(0,value_dict,_msg.value,_id);
>
> The key has to the a pmt that holds a string, the value does not have
> the restriction.
>
> >
> > However, similarly to my previous post, the flow graph complains that
> this
> > is a wrong type:
> >
> > thread[thread-per-block[8]: <gr_block msg_sourcer (9)>]:
> > gr_block_detail::add_item_tag key: wrong_type : ()
> >
> > For these reasons, I would like to see how your code is working with
> these
> > dictionaries.
> >
> > Thanks again,
> >
> > Jose
> >
> > On Thu, Oct 11, 2012 at 12:05 PM, Jose Torres Diaz <
> > torresdiaz.j...@gmail.com> wrote:
> >
> >> Hi Josh,
> >>
> >> I've changed the .xml file. Also, I've checked the new top_block.py file
> >> and it is generated as follows:
> >>
> >> self.extras_uhd_amsg_source_0 =
> >> gr_extras.uhd_amsg_source(uhd.device_addr="172.17.3.140"
> >>
> >> However, it is still complaining when I run the flow graph:
> >>
> >>   File "/home/asrpuser/Desktop/Jose Torres Material /top_block.py",
> line 33
> >>     self.extras_uhd_amsg_source_0 =
> >> gr_extras.uhd_amsg_source(uhd.device_addr="add=172.17.3.140")
> >> SyntaxError: keyword can't be an expression
> >>
> >> Thanks,
> >>
> >> Jose.
> >>
> >>
> >>
> >> On Thu, Oct 11, 2012 at 11:44 AM, Josh Blum <j...@joshknows.com> wrote:
> >>
> >>>
> >>>
> >>> On 10/10/2012 06:09 PM, Jose Torres Diaz wrote:
> >>>> Hi Josh,
> >>>>
> >>>> Do you mean to change in the top_block.py?. I did this, but when I run
> >>>> again the top_block.py, it changes back to:
> >>>>
> >>>> gr_extras.uhd_amsg_source(device_addr="add=172.17.3.140")
> >>>>
> >>>> even if I try:
> >>>>
> >>>> gr_extras.uhd_amsg_source(uhd.device_addr="add=172.17.3.140")
> >>>>
> >>>> Thanks again Josh,
> >>>>
> >>>
> >>> I see. Its the xml definition. Too bad python/swig does get the
> >>> constructor overloads that c++ sees.
> >>>
> >>> I pushed this change to the repo:
> >>>> diff --git a/grc/extras_uhd_amsg_source.xml
> >>> b/grc/extras_uhd_amsg_source.xml
> >>>> index 5f8c261..5bb59f0 100644
> >>>> --- a/grc/extras_uhd_amsg_source.xml
> >>>> +++ b/grc/extras_uhd_amsg_source.xml
> >>>> @@ -4,7 +4,7 @@
> >>>>      <key>extras_uhd_amsg_source</key>
> >>>>      <import>from gnuradio import uhd</import>
> >>>>      <import>import gnuradio.extras as gr_extras</import>
> >>>> -    <make>gr_extras.uhd_amsg_source(device_addr=$dev_addr)</make>
> >>>> +
>  <make>gr_extras.uhd_amsg_source(uhd.device_addr($dev_addr))</make>
> >>>>      <param>
> >>>>          <name>Device Addr</name>
> >>>>          <key>dev_addr</key>
> >>>
> >>> -josh
> >>>
> >>>> Regards,
> >>>>
> >>>> Jose
> >>>>
> >>>> On Thu, Oct 11, 2012 at 11:24 AM, Josh Blum <j...@joshknows.com>
> wrote:
> >>>>
> >>>>>
> >>>>>
> >>>>> On 10/10/2012 05:51 PM, Jose Torres Diaz wrote:
> >>>>>> Hi All,
> >>>>>>
> >>>>>> I'm checking the functionality of the block "UHD AMsg Source" using
> >>> the
> >>>>>> USRP N210. The device is correctly detected as you can see:
> >>>>>>
> >>>>>> uhd_find_devices
> >>>>>> linux; GNU C++ version 4.6.1; Boost_104601;
> >>> UHD_003.004.003-221-g9d6f9492
> >>>>>>
> >>>>>> --------------------------------------------------
> >>>>>> -- UHD Device 0
> >>>>>> --------------------------------------------------
> >>>>>> Device Address:
> >>>>>>     type: usrp2
> >>>>>>     addr: 172.17.3.140
> >>>>>>     name:
> >>>>>>     serial: E0R17TCUP
> >>>>>>
> >>>>>> I've attached a screen-shot of the GRC file. When I run the flow
> >>> graph, I
> >>>>>> get the following error:
> >>>>>>
> >>>>>> Traceback (most recent call last):
> >>>>>>   File "/home/asrpuser/Desktop/Jose Torres Material /top_block.py",
> >>> line
> >>>>>> 54, in <module>
> >>>>>>     tb = top_block()
> >>>>>>   File "/home/asrpuser/Desktop/Jose Torres Material /top_block.py",
> >>> line
> >>>>>> 33, in __init__
> >>>>>>     self.extras_uhd_amsg_source_0 =
> >>>>>> gr_extras.uhd_amsg_source(device_addr="add=172.17.3.140")
> >>>>>
> >>>>> try gr_extras.uhd_amsg_source(uhd.device_addr("addr=172.17.3.140"))
> >>>>>
> >>>>>>   File
> >>>>>>
> >>>
> "/usr/local/lib/python2.7/dist-packages/gnuradio/extras/extras_swig.py",
> >>>>>> line 5384, in make
> >>>>>>     return _extras_swig.uhd_amsg_source_make(*args, **kwargs)
> >>>>>> TypeError: in method 'uhd_amsg_source_make', argument 1 of type
> >>>>>> 'uhd::device_addr_t const &'
> >>>>>>
> >>>>>> Anyone has seen an error like this before?, How can  I
> >>> solve/workaround
> >>>>>> this error?
> >>>>>>
> >>>>>> Thanks a lot for your help,
> >>>>>>
> >>>>>> Jose.
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> _______________________________________________
> >>>>>> Discuss-gnuradio mailing list
> >>>>>> Discuss-gnuradio@gnu.org
> >>>>>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
> >>>>>>
> >>>>>
> >>>>> _______________________________________________
> >>>>> Discuss-gnuradio mailing list
> >>>>> Discuss-gnuradio@gnu.org
> >>>>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
> >>>>>
> >>>>
> >>>
> >>
> >>
> >>
> >>
> >
>
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to