Hi Josh, I've figure out the problem. I didn't check this:
https://github.com/guruofquality/grextras/commit/075bf6ec7e9f8169d9dee59fb9e74d13146b6ddb where you changed this: - pmt::pmt_dict_add(value_dict, TIME_KEY, timestamp); + value_dict = pmt::pmt_dict_add(value_dict, TIME_KEY, timestamp); Thanks, Jose. On Mon, Oct 15, 2012 at 11:54 AM, Jose Torres Diaz < [email protected]> wrote: > 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 <[email protected]> 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 < >> > [email protected]> 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 <[email protected]> >> 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 <[email protected]> >> 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 >> >>>>>> [email protected] >> >>>>>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio >> >>>>>> >> >>>>> >> >>>>> _______________________________________________ >> >>>>> Discuss-gnuradio mailing list >> >>>>> [email protected] >> >>>>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio >> >>>>> >> >>>> >> >>> >> >> >> >> >> >> >> >> >> > >> > > > > >
_______________________________________________ Discuss-gnuradio mailing list [email protected] https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
