[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.gorh...@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 >