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