Re: [Discuss-gnuradio] Question on PMT boolean messages
Excellent! So glad you got it working, Ali, and thanks for sharing the solution to your issue! Cheers, Ben On Wed, May 1, 2019 at 3:45 PM Ali Dormiani wrote: > 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 > 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, >> >> Ali >> >> On Mon, Apr 29, 2019 at 2:49 PM Marcus Müller >> 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 > ___ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
Re: [Discuss-gnuradio] Question on PMT boolean messages
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 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, > > Ali > > On Mon, Apr 29, 2019 at 2:49 PM Marcus Müller > 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
Re: [Discuss-gnuradio] Question on PMT boolean messages
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 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
Re: [Discuss-gnuradio] Question on PMT boolean messages
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
[Discuss-gnuradio] Question on PMT boolean messages
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