discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] Python Unit Test with message ports - "Could not


From: Marcus Müller
Subject: Re: [Discuss-gnuradio] Python Unit Test with message ports - "Could not find port"
Date: Thu, 12 Jan 2017 11:39:41 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.3.0

Hi Steven,

On 12.01.2017 02:21, Steven Knudsen wrote:
You worry me with your “various ways” comment :-/
That's what I do: I comment and worry people. And I just finished my comment.
No, really, I was just surprised that a) it doesn't work and b) it claims "a is not in set {a,b}". That feels ever so slightly wrong.

All I have done is extended the random_pdu from gr-blocks by including a sequence number in the PDU. So, the constructor is where the message ports are registered and is identical to the random_pdu constructor. I’ve attached a snippet (rsp_constructor.snippet) that contains my exact code.
Thanks, OK the most relevant line here is

      message_port_register_in(pmt::mp("generate"));

which looks right; I really sense shenanigans here. So, to narrow this down:

Can you do a

        self.tb.msg_connect((self.blocks_message_strobe_0, pmt.string_to_symbol('strobe')), (self.jitc_random_sequenced_pdu_0, pmt.string_to_symbol('generate')))

to rule out any strangenesses that the whole behind-the-scenery PMT conversion does?

Best regards,
Marcus


My version works the same as the original when run from GRC. I’ve attached a screencap of the simple flowgraph used to verify this. I’ve also attached the generated python. 

I took the main code from that generated python and added to my unit test and modified only by changing ‘self’ to self.tb’. When I run that code, I get the could not find port error. 

If I modify that code to connect only the output of the Message Strobe to the print port of the Message Debug, it works.

That is, this does not work,
        self.tb.msg_connect((self.blocks_message_strobe_0, 'strobe'), (self.jitc_random_sequenced_pdu_0, 'generate'))
#        self.tb.msg_connect((self.blocks_message_strobe_0, 'strobe'), (self.blocks_message_debug_0, 'print'))
        self.tb.msg_connect((self.jitc_random_sequenced_pdu_0, 'pdus'), (self.blocks_message_debug_0, 'print'))


But this does work

#        self.tb.msg_connect((self.blocks_message_strobe_0, 'strobe'), (self.jitc_random_sequenced_pdu_0, 'generate'))
        self.tb.msg_connect((self.blocks_message_strobe_0, 'strobe'), (self.blocks_message_debug_0, 'print'))
#        self.tb.msg_connect((self.jitc_random_sequenced_pdu_0, 'pdus'), (self.blocks_message_debug_0, 'print'))

Last observation is that if I replace my random_sequenced_pdu with block’s random_pdu,it all works. So, it’s definitely something with my module. Is something not generated via/by swig maybe? I tried digging into gr-blocks to look for differences, but so far none that I can see.

Sorry this is kind of long, but it’s a weird problem, weird because my stuff works fine in GRC!?!

regards, and thanks,

steven










From: Marcus Müller
Subject: Re: [Discuss-gnuradio] Python Unit Test with message ports - "Could not find port"
Date: Wed, 11 Jan 2017 14:49:40 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0

Hi Steven, 

that's strange indeed. In various ways. 

Could you tell us:

1. where do you register the message port? Could you copy&paste that exact line?
2. could you copy&paste both message_connect lines from the GRC-generated and your unit test python?

Thanks,

Marcus

On 01/11/2017 01:35 AM, Steven Knudsen wrote:
Hi all,

I am trying to write a unit test for a message-only block, let’s call it “foo”, that has an input message port “generate". When I use the block in GRC, everything is fine. I can connect its message ports to standard GNU Radio message blocks, like message_strobe and message_debug with no problems.

However, when I try and do the same in a Python unit test, I get the message

Could not find port: generate in:
generate
system

If, for example, in the same unit test I connect the message_strobe with message_debug, all is well.

If I then connect message_strobe to foo, I get the error above.

I double checked that the message port declarations are the same as you find in a block like message_strobe. 

I double checked the syntax of msg_connect, making sure it looks exactly the same as it does in the GRC generated Python file.

Anyone seen this recently? I have found some references by searching online, but nothing that has helped.

Thanks very much!

steven



reply via email to

[Prev in Thread] Current Thread [Next in Thread]