|Subject:||Re: [Discuss-gnuradio] Question on PMT boolean messages|
|Date:||Tue, 7 May 2019 16:00:44 -0400|
I figured this out today. I used a handle_msg and simply connected a message strobe to the 'junk' msg input. My custom block works as expected now._______________________________________________On Tue, Apr 30, 2019 at 12:56 PM Ali Dormiani <address@hidden> wrote: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,AliOn Mon, Apr 29, 2019 at 2:49 PM Marcus Müller <address@hidden> 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
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
> Thank you all for your time,
> 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"""
> name='Time Enable', # will show up in GRC
> 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_F)
> def work(self, input_items, output_items):
> Discuss-gnuradio mailing list
Discuss-gnuradio mailing list
|[Prev in Thread]||Current Thread||[Next in Thread]|