Hello,

Thank you for the advice. I went back to the tutorials and now I have a
better grasp of what is going on.

Regarding 'work' vs 'handle_msg', which situations fit each of these?

Is 'handle_msg' supposed to be for passing messages through multiple
internal msg ports?

Is 'work' for dealing with streams or can I do message related things in
'work'?

It appears that handle_msg is for passing from inputs to outputs (which I
do not need as I want a block with only a message out).


In short, if one wants to make a block with a single msg output and nothing
else, should s/he use a message handler (and leave work empty with a pass)
or use work? If so, what should work return, given there are no
data-streams involved?

Thank you for your time,

Ali

On Mon, Apr 29, 2019 at 2:49 PM Marcus Müller <mmuel...@gnuradio.org> wrote:

> Hi Ali,
> causality, our old foe, strikes again!
>
> You're trying to emit a message in the constructor.  Messages will be
> delivered to all message acceptors connected to that message port.
> However, you can't possibly connect the block before the block-holding
> object exists, i.e. before the constructor returns.
>
> So, necessarily, the messages are sent before anything is connected to
> the msg_out port, and thus into the void and simply get dropped by the
> scheduler.
>
> Best regards,
> Marcus
>
> PS: I'd strongly recommend having a `self.port = pmt.intern('msg_out')`
> in the constructor and using that whenever you need the port if you're
> doing that within the work() function often. Constructing PMT interns
> is relatively expensive.
>
> On Mon, 2019-04-29 at 14:39 -0700, Ali Dormiani wrote:
> > Hello everyone,
> >
> > I have been attempting to make my own block that sends out a boolean
> > message if certain time related conditions are met.
> >
> > I am unable to figure out why my block does not work. This seems to
> > be the line of interest:
> >
> > self.message_port_pub(pmt.intern('msg_out'), pmt.PMT_T)
> >
> > This line should cause the block to output a PMT true through port
> > msg_out right?
> >
> > My full block is attached bellow. Any help would be greatly
> > appreciated.
> >
> > Thank you all for your time,
> >
> > Ali
> >
> > ======================
> > import numpy as np
> > from gnuradio import gr
> > import pmt
> > import datetime
> >
> > class msg_block(gr.basic_block):  # other base classes are
> > basic_block, decim_block, interp_block
> >     """This block checks time and sends true or false if capture
> > period is desired"""
> >
> >     def __init__(self, minutes=15, seconds=10):  # only default
> > arguments here
> >         """arguments to this function show up as parameters in GRC"""
> >         gr.basic_block.__init__(
> >             self,
> >             name='Time Enable',   # will show up in GRC
> >             in_sig=None,
> >             out_sig=None
> >         )
> >         self.message_port_register_out(pmt.intern('msg_out'))
> >         now = datetime.datetime.now()
> >         #P_true = pmt.PMT_T
> >         #P_false = pmt.PMT_F
> >         if ((now.minute % minutes) == 0): #check if minute is ok
> >             if (now.second < seconds): #check if capture period is ok
> >                 self.message_port_pub(pmt.intern('msg_out'),
> > pmt.PMT_T)
> >             else:
> >                 self.message_port_pub(pmt.intern('msg_out'),
> > pmt.PMT_F)
> >         else:
> >             self.message_port_pub(pmt.intern('msg_out'), pmt.PMT_F)
> >
> >     def work(self, input_items, output_items):
> >         pass
> > =====================================
> > _______________________________________________
> > 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