discuss-gnuradio
[Top][All Lists]
Advanced

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

<Solved> Re: Out Of Tree module works only partially


From: Ralf Gorholt
Subject: <Solved> Re: Out Of Tree module works only partially
Date: Thu, 2 Dec 2021 12:38:39 +0100
User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.3.2

Hi Federico and Jeff,

thank you very much for your prompt answer. As I thought, it was a "newbie" mistake :-) I have modified my block according to what Federico has written and now it works.

Regards,

Ralf

Am 02.12.2021 um 12:31 schrieb Jeff Long:
[I just saw the response from Federico as I was writing this, so it's partly a duplicate]

In work(), items are in terms of vectors, so you need to store off blk_size in the constructor. In work(), you would copy blk_size * noutput_items. For an example, take a look at the source for any of the built-in blocks that can take a vector, e.g.,

https://github.com/gnuradio/gnuradio/blob/master/gr-blocks/include/gnuradio/blocks/abs_blk.h
https://github.com/gnuradio/gnuradio/blob/master/gr-blocks/lib/abs_blk_impl.h
https://github.com/gnuradio/gnuradio/blob/master/gr-blocks/lib/abs_blk_impl.cc

On Thu, Dec 2, 2021 at 5:26 AM Ralf Gorholt <ralf.gorholt@gmx.de> wrote:
Dear all,

I am quite new to GNU Radio and in order to see how GNU Radio blocks
work I would like to create my own block that (for the moment) just
copies complex data from the input to the output. This works as long as
I copy only one number but not when I want to copy packets of numbers
that come from the preceeding block. My block takes one parameter:
blk_size. I would like to insert it in my DVB-T receiver flowgraph to
analyze data (in a later step).

I had a look at the square_ff example and other blocks to see how they
are built but I still don't see what I am doing wrong. It must be a
silly mistake. Perhaps you can help me? Here is the code:

myblock_impl::myblock_impl(int blk_size)
         : gr::block("myblock",
                 gr::io_signature::make(1, 1, blk_size *
sizeof(gr_complex)),
                 gr::io_signature::make(1, 1, blk_size *
sizeof(gr_complex)))
     {
     }

void
     myblock_impl::forecast(int noutput_items, gr_vector_int
&ninput_items_required)
     {
         ninput_items_required[0] = noutput_items;
     }

int
     myblock_impl::general_work(int noutput_items,
                                gr_vector_int &ninput_items,
                                gr_vector_const_void_star &input_items,
                                gr_vector_void_star &output_items)
     {
         const gr_complex *in = (const gr_complex *) input_items[0];
         gr_complex *out = (gr_complex *) output_items[0];

         for (int i = 0; i < noutput_items; i++) {
             out[i] = in[i];
         }

         consume_each(noutput_items);

         return noutput_items;
     }

And the YML file:

id: dl5eu_myblock
label: myblock
category: '[dl5eu]'

templates:
   imports: import dl5eu
   make: dl5eu.myblock(${blk_size})

parameters:
- id: blk_size
   label: Block size
   dtype: int
   default: '1'

inputs:
- label: in
   domain: stream
   dtype: complex
   vlen: ${blk_size}
   optional: '0'

outputs:
- label: out
   domain: stream
   dtype: complex
   vlen: ${blk_size}
   optional: '0'

file_format: 1

Thank you very much for your help!

Kind regards,

Ralf


reply via email to

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