OK, it does work, as long as there is a message port defined and connected
in a flowgraph. I was trying too simple an example. You would do your
thread management in the start() and stop() functions.

"""
Embedded Python Blocks:

Each time this file is saved, GRC will instantiate the first class it finds
to get ports and parameters of your block. The arguments to __init__  will
be the parameters. All of them are required to have default values!
"""

import numpy as np
from gnuradio import gr
import pmt

class blk(gr.sync_block):  # other base classes are basic_block,
decim_block, interp_block
    """Embedded Python Block example - a simple multiply const"""

    def __init__(self):  # only default arguments here
        """arguments to this function show up as parameters in GRC"""
        gr.sync_block.__init__(
            self,
            name='Embedded Python Block',   # will show up in GRC
            in_sig=[],
            out_sig=[]
        )
        self.message_port_register_out(pmt.intern("msgout"))
        print('init')

    def start(self):
        print('start')
        return True

    def stop(self):
        print('stop')
        return True

On Mon, Nov 29, 2021 at 2:13 PM Jeff Long <[email protected]> wrote:

> Issue submitted: https://github.com/gnuradio/gnuradio/issues/5358
>
> On Mon, Nov 29, 2021 at 1:58 PM Jeff Long <[email protected]> wrote:
>
>> It does not seem that python blocks can override start() and stop(),
>> which they should be able to do. So, don't go too far down that path. I do
>> not see anywhere in the code where this is used or would have been caught.
>>
>> The embedded blocks are easier, be beware that GRC calls the init
>> function to learn about the block. Therefore, you don't want any action
>> taken as a result of a call to init, for instance spawning a thread and
>> starting to send messages. Embedded python block are sort of a toy that
>> turned out to be useful. In general, an OOT is a better idea, but an
>> embedded block can work if it's simple enough.
>>
>> Maybe someone else has figured this out. With just a quick look, I don't
>> see how a Message Strobe kind of block can be implemented in python without
>> start() and stop().
>>
>> Here's kind of a hack: make a python block with a message handler that
>> gets a periodic strobe from the existing Message Strobe block. In the
>> handler, send out the message that you would have sent in the thread.
>>
>

Reply via email to