Hi Cristian,

>How can I take just the real number of that pair?

pmt::car and pmt::cdr give you the first and second element of a pmt::cons.

> do you have a reference page of the command?

https://gnuradio.org/doc/doxygen/namespacepmt.html#a7ab95721db5cbda1852f13a92eee5362

I must admit that I find PMT not the best-documented piece of software
myself.

> I understood that I need to send the pair. Is it possible to send just
> the real number?
As said, you can send /any/ PMT – it's just customary to follow a few
common patterns. But sure, you can just as well just send
pmt::from_double(your_double).

Best regards,
Marcus


On 27.06.2017 14:16, Cristian Rodríguez wrote:
> Hi Marcus.
>
> Thanks for your message.
>
> How can I take just the real number of that pair? do you have a
> reference page of the command?
> I was reading a lot yesterday and my search wasn't well.
>
> I understood that I need to send the pair. Is it possible to send just
> the real number?
>
> Again, thanks a lot for your time.
>
> Best regards,
>
> Cristian
>
> On Jun 27, 2017 3:48 AM, "Marcus Müller" <marcus.muel...@ettus.com
> <mailto:marcus.muel...@ettus.com>> wrote:
>
>     You're explicitly sending a pair (pmt::cons), not a real or
>     integer number!
>
>
>     On 27.06.2017 04:57, Cristian Rodríguez wrote:
>>     Hi.
>>
>>     Thanks a lot for your time to read.
>>
>>     I read the two links that you shared to me, Marcus. Thanks a lot
>>     for your help. But i still have a problem.
>>
>>     I've implemented as follows:
>>
>>       * I create, the output, input and the handler:
>>
>>         message_port_register_out(pmt::mp("out_threshold"));
>>
>>         message_port_register_in(pmt::mp("in_threshold"));
>>         set_msg_handler(pmt::mp("in_threshold"),
>>     boost::bind(&sync_short_impl::set_msg, this, _1));
>>
>>       * I create, the next function to handle the inputs
>>
>>     void set_msg(pmt::pmt_t msg) { d_msg= msg;
>>             dout << "Nueva lectura : " << d_msg << " ninput: " <<
>>     std::endl;
>>     if (pmt::is_integer(d_msg)) {
>>         d_threshold = (double) pmt::to_long(d_msg);
>>     } else if (pmt::is_real(d_msg)) {
>>         d_threshold = pmt::to_double(d_msg);
>>     } else {
>>      // We really expected an integer or a double here, so we don't
>>     know what to do
>>         throw std::runtime_error("expected an integer!");
>>     }
>>
>>      }
>>
>>       * In the block i linked the input and the output, just to check
>>         that the function set_msg(), works.
>>
>>
>>     Imágenes integradas 3
>>
>>       * I compile the c++ codes, etc... all that is necessary.
>>       * I write the output as follows (that's working, i checked that
>>         with a message debug):
>>
>>     message_port_pub(pmt::mp("out_threshold"),
>>     pmt::cons(pmt::PMT_NIL, pmt::from_double(d_threshold)));
>>
>>       * When i start the flowgraph, the block put in the output a PMT
>>         message, after that, as it is linked with the input, the
>>         message go to the input port. When it is recevied, the
>>         function set_msg is launched, but the type of the number in
>>         the PMT is not recognized as double. *Here is my problem, I
>>         don't understand why it is happening, because the PMT that I
>>         put in the output is build from a double, then it is
>>         supposed, the one that i received is too a double. What do
>>         you think?*
>>
>>     Imágenes integradas 2
>>
>>
>>     Thanks in advance.
>>
>>
>>     Best regards,
>>
>>
>>     Cristian
>>
>>     2017-06-26 12:45 GMT-05:00 Marcus Müller
>>     <marcus.muel...@ettus.com <mailto:marcus.muel...@ettus.com>>:
>>
>>         Hi Cristian,
>>
>>         you need to subscribe a /handler/ to the message port. See:
>>
>>         
>> https://wiki.gnuradio.org/index.php/Guided_Tutorial_Programming_Topics#5.3.2_Adding_Message_Passing_to_the_Code
>>         
>> <https://wiki.gnuradio.org/index.php/Guided_Tutorial_Programming_Topics#5.3.2_Adding_Message_Passing_to_the_Code>
>>
>>         It's absolutely up to you what kind of PMT you're publishing
>>         over a message port, but it's canonical to have a PMT dict
>>         that maps
>>
>>         pmt::mp("propertyname") -> pmt::whateversuitsyourproperty.
>>
>>         As an example, see what the gr-uhd blocks accept [1]
>>
>>         Best regards,
>>
>>         Marcus
>>
>>         [1]
>>         https://gnuradio.org/doc/doxygen/page_uhd.html#uhd_command_syntax
>>         <https://gnuradio.org/doc/doxygen/page_uhd.html#uhd_command_syntax>
>>
>>         On 06/26/2017 07:35 PM, Cristian Rodríguez wrote:
>>>         Hi all,
>>>
>>>         I'm not sure about how to read and write PMT ports from and
>>>         to local variables. I'm going to expose what i'm doing, and
>>>         if someone can help me i would be very greatful.
>>>
>>>         I've created an input and an output of PMT type.
>>>
>>>         message_port_register_in(pmt::pmt_t in_threshold)
>>>         message_port_register_out(pmt::pmt_t out_threshold)
>>>
>>>         Now i want to read the port, and save the data in a local
>>>         variable, do operations with that variable, and later write
>>>         it in the output,
>>>
>>>         I create the variables,
>>>
>>>         double d_threshold;
>>>         pmt::pmt_t target;
>>>
>>>         *I read it, I don't know how to do it. But I suppose:
>>>
>>>         *
>>>         message_port_sub(pmt::pmt_t
>>>         
>>> <https://gnuradio.org/doc/doxygen/namespacepmt.html#ab4b70d9293452eb74dd07c670e6811fa>
>>>         in_threshold,pmt::pmt_t
>>>         
>>> <https://gnuradio.org/doc/doxygen/namespacepmt.html#ab4b70d9293452eb74dd07c670e6811fa>
>>>         target);
>>>         d_threshold= pmt::to_double
>>>         
>>> <https://gnuradio.org/doc/doxygen/namespacepmt.html#a0f58166fe9f449249f5de7dc7b3ab754>(target);
>>>
>>>         And, I think i can write it as follows:
>>>
>>>         msg=pmt::from_double
>>>         
>>> <https://gnuradio.org/doc/doxygen/namespacepmt.html#ad20c287c509e8470d03d1c8e97fea12d>(d_threshold);
>>>         message_port_pub(pmt::pmt_t
>>>         
>>> <https://gnuradio.org/doc/doxygen/namespacepmt.html#ab4b70d9293452eb74dd07c670e6811fa>
>>>         out_threshold,pmt::pmt_t
>>>         
>>> <https://gnuradio.org/doc/doxygen/namespacepmt.html#ab4b70d9293452eb74dd07c670e6811fa>
>>>         msg);
>>>
>>>         What do you think, i've seen several examples, and they do
>>>         this, message_port_pub(pmt::mp("symbols"),
>>>         pmt::cons(pmt::make_dict(), pmt::init_c32vector(48, symbols)));
>>>               
>>>         But I don't understand why it is necessary to use
>>>         pmt::make_dict().
>>>
>>>         Thanks in advance.
>>>
>>>         Best regards,
>>>
>>>         Cristian
>>>
>>>
>>>
>>>         _______________________________________________
>>>         Discuss-gnuradio mailing list
>>>         Discuss-gnuradio@gnu.org <mailto:Discuss-gnuradio@gnu.org>
>>>         https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>>>         <https://lists.gnu.org/mailman/listinfo/discuss-gnuradio>
>>
>>
>>         _______________________________________________
>>         Discuss-gnuradio mailing list
>>         Discuss-gnuradio@gnu.org <mailto:Discuss-gnuradio@gnu.org>
>>         https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>>         <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