Dear gurus,
I am learning gnuradio Message Passing feature, but couldn’t get
desirable
result.
The Message seems published successfully, but not subscribed by the
Message
receiver.
How to correct the error …?
The message sender block:
// constructor
message_source1_impl::message_source1_impl()
: gr::sync_block("message_source1",
gr::io_signature::make(0, 0, 0),
gr::io_signature::make( 1, 1, sizeof(int)) )
{
message_port_register_out( pmt::mp("print") );
}
// send_message1
void
message_source1_impl::send_message1()
{
std::cout << "message_source1_impl::send_message():
invoked"
<< std::endl;
pmt::pmt_t str0 = pmt::string_to_symbol(
std::string(“Welcome
2014”));
message_port_pub( pmt::mp(“print”), str0 );
}
// work
int
message_source1_impl::work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
int *out = (int *) output_items[0];
for (int i=0; i < noutput_items; i++)
out[i] = (i+1) * (i+1);
send_message1();
return noutput_items;
}
The message receiver block:
// constructor
message_sink1_impl::message_sink1_impl()
: gr::sync_block("message_sink1",
gr::io_signature::make(0, 0, 0),
gr::io_signature::make( 1, 1, sizeof(int)) )
{
message_port_register_in( pmt::mp("print") );
set_msg_handler( pmt::mp("print"), boost::bind(
&message_sink1_impl::handler1, this, _1 ) );
}
// message handler
void
message_sink1_impl::handler1( pmt::pmt_t myMessage )
{
std::cout << "message_sink1_impl::handler1(): invoked" <<
std::endl;
pmt::print( myMessage );
}
// work
int
message_sink1_impl::work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
int *out = (int *) output_items[0];
for (int i=0; i < noutput_items; i++)
out[i] = i+1;
return noutput_items;
}
Flow graph execution output:
Executing: “/home/mmkk/gnuradio/gr-activecat/apps/top_block.py”
message_source1_impl::send_message(): invoked
message_source1_impl::send_message(): invoked
message_source1_impl::send_message(): invoked
message_source1_impl::send_message(): invoked
message_source1_impl::send_message(): invoked