Hi, here is a simple photo representing my block. The block is hierarchical and consists of a few deframers. When deframers decode correct message, they are supposed to send message to db_logger who write information from the message into a database. Deframers are written in c++ while db_logger is written in python. All deframers have output port whose name is hardcoded to "out_port", while db_logger has input port whose name was hardcoded as "in_port"
In previous case, self is db_logger. I have shown there how the message port inside that block was defined. Inside hier block where everything is packed I have lines like this self.msg_connect(self.SFL_90518279_pkt_def, out_port, self.db_logger, in_port) here self references hier block. Cheers, Nemanja On Wed, Nov 4, 2015 at 10:49 PM, Marcus Müller <[email protected]> wrote: > I've lost oversight.. is self a hier block, in this case? > > > On 11/04/2015 06:49 PM, Nemanja Savic wrote: > > So, a block called db_logger is written in python and port is defined in > following way: > self.message_port_register_in(pmt.pmt_intern(in_port)) > > Well, I am not sure, this works fine in older version. > > On Wed, Nov 4, 2015 at 6:41 PM, Marcus Müller <[email protected]> > wrote: > >> What does your message_port_register_in call look like? >> Or is it a message_port_register_hier_in call? (should it be?) >> >> Cheers, >> Marcus >> >> >> On 11/04/2015 06:37 PM, Nemanja Savic wrote: >> >> Hi, >> >> ok thanks. Does it matter how I everything is declared, but it is clear >> that something changed since 3.6.5.1. >> So i have hier block written in python where i define >> in_port = 'in_port' >> out_port='out_port' >> >> These arguments are passed in the following way: >> in_port is receiving port of a block that receives messages from blocks >> which have registered out_block as their transmitting port. >> out_port is passed to constructors of all transmitting blocks. They are >> passed as type const char*. Blocks have member d_msg_out_port defined as >> string. So something like this: >> d_msg_out_port(msg_out_port) >> ... >> body of constructor: >> message_port_register_out(pmt::mp(d_msg_out_port)); >> >> So, later on, at the end of hier block I call: >> self.msg_connect(self.SFL_90518279_pkt_def, out_port, self.db_logger, >> in_port) >> >> Could it be that problem is something with strings (I am not sure is null >> character is passed, no idea)? >> >> Nemanja >> >> On Wed, Nov 4, 2015 at 6:26 PM, Marcus Müller <[email protected]> >> wrote: >> >>> Hi, >>> >>> not really, what it says is really "I can't find <element> in <list of >>> elements>", with that list being the names of the registered ports. >>> So, the interesting thing is that seemingly,comparin >>> pmt::symbol("in_port") with pmt::symbol("in_port") doesn't quite work well. >>> >>> I'd have to look into what pmt::comparator looks like; it's my first >>> suspect for why that might fail. >>> >>> Best regards, >>> Marcus >>> >>> >>> >>> On 11/04/2015 06:20 PM, Nemanja Savic wrote: >>> >>> Hi, >>> >>> hm, could just tell me if I am thinking wrong, but this looks like some >>> of my blocks is also called in_port? >>> >>> Nemanja >>> >>> On Wed, Nov 4, 2015 at 6:14 PM, Marcus Müller <[email protected]> >>> wrote: >>> >>>> Hi Nemanja, >>>> >>>> a blind suspicion: as "system" is a port that should be registered by >>>> the runtime for each block, there might be some confusion happening. >>>> Does it work better when you rename your block to something else? >>>> >>>> Best regards, >>>> Marcus >>>> >>>> On 11/04/2015 06:05 PM, Nemanja Savic wrote: >>>> >>>> Hi all guys, >>>> >>>> I recently installed 3.7.8, and before that I had 3.6.5.1. >>>> I was using message passing in some of my blocks, but now I get error >>>> which is following: >>>> >>>> Could not find port: in_port in: >>>> in_port >>>> system >>>> >>>> Traceback (most recent call last): >>>> File "./top_block.py", line 178, in <module> >>>> tb = top_block() >>>> File "./top_block.py", line 124, in __init__ >>>> self.TPMS_univ_TPMS_rec2_0 = TPMS.univ_TPMS_rec2("WBX_proba", >>>> samp_rate, 0.5, 45, "localhost", 2, "TEST_TRACK_TPMS", "nemanja", >>>> "nemanja", "det_id_proba", "detectors") >>>> File >>>> "/scr1/nemanja/install/lib64/python2.6/site-packages/TPMS/univ_TPMS_rec2.py", >>>> line 145, in __init__ >>>> self.msg_connect(self.SEL_90518407_pkt_def.SCHRADER_def, out_port, >>>> self.db_logger, in_port) >>>> File >>>> "/scr1/nemanja/install/lib64/python2.6/site-packages/gnuradio/gr/hier_block2.py", >>>> line 59, in wrapped >>>> func(self, src.to_basic_block(), srcport, dst.to_basic_block(), >>>> dstport) >>>> File >>>> "/scr1/nemanja/install/lib64/python2.6/site-packages/gnuradio/gr/hier_block2.py", >>>> line 131, in msg_connect >>>> self.primitive_msg_connect(*args) >>>> File >>>> "/scr1/nemanja/install/lib64/python2.6/site-packages/gnuradio/gr/runtime_swig.py", >>>> line 3043, in primitive_msg_connect >>>> return _runtime_swig.hier_block2_sptr_primitive_msg_connect(self, >>>> *args) >>>> RuntimeError: invalid msg port in connect() or disconnect() >>>> >>>> I see that there is a function for checking whether the ports are >>>> valid, but don't get what's wrong with my ports. Namely, I have hier block >>>> and a few blocks are sending messages to a single blocks where the messages >>>> are decoded and written to darabase. I tried to hardcode names of the >>>> blocks and that also didn't help. >>>> >>>> Thanx, >>>> >>>> -- >>>> Nemanja Savić >>>> >>>> >>>> _______________________________________________ >>>> Discuss-gnuradio mailing >>>> [email protected]https://lists.gnu.org/mailman/listinfo/discuss-gnuradio >>>> >>>> >>>> >>>> _______________________________________________ >>>> Discuss-gnuradio mailing list >>>> [email protected] >>>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio >>>> >>>> >>> >>> >>> -- >>> Nemanja Savić >>> >>> >>> >> >> >> -- >> Nemanja Savić >> >> >> > > > -- > Nemanja Savić > > > -- Nemanja Savić
_______________________________________________ Discuss-gnuradio mailing list [email protected] https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
