discuss-gnuradio
[Top][All Lists]
Advanced

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

Re: Creating my own Random Source


From: Mario Moran
Subject: Re: Creating my own Random Source
Date: Mon, 8 Nov 2021 18:08:30 -0700

Hello, I was not originally using 'using name std' in the code, but I will keep that in mind for future reference. I used using std::byte and that did not work, but following the cmake link you gave me I was able to enable c++17 and I now have less errors. Here is what is left if you would like to take a look at it:

/home/mariom/gr-Random/lib/my_Random_Byte_Source_impl.cc:59:5: error: expected initializer before ‘my_Random_Byte_Source_impl’
   59 |     my_Random_Byte_Source_impl::get_bytes(const byte &sample)
        |     ^~~~~~~~~~~~~~~~~~~~~~~~~~
/home/mariom/gr-Random/lib/my_Random_Byte_Source_impl.cc: In member function ‘virtual int gr::Random::my_Random_Byte_Source_impl::work(int, gr_vector_const_void_star&, gr_vector_void_star&)’:
/home/mariom/gr-Random/lib/my_Random_Byte_Source_impl.cc:73:24: error: ‘get_bytes’ was not declared in this scope
   73 |               out[i] = get_bytes(i)
        |                           ^~~~~~~~~
make[2]: *** [lib/CMakeFiles/gnuradio-Random.dir/build.make:63: lib/CMakeFiles/gnuradio-Random.dir/my_Random_Byte_Source_impl.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:301: lib/CMakeFiles/gnuradio-Random.dir/all] Error 2
make: *** [Makefile:141: all] Error 2

What do you think? Would you like to see the whole code? or just how I thought I declared them? Thank you for your time. 

On Mon, Nov 8, 2021 at 3:28 PM Jim Melton <jim.melton@sncorp.com> wrote:

Probably you’ve fallen prey to the common academic practice of including “using namespace std” in your code. In industry, it’s not as common (I don’t allow it in my projects).

 

std::byte is a new type in C++17. If you aren’t using that new of a compiler (or didn’t set the required standard in your CMakeLists.txt file), it won’t be supported.

 

Try replacing byte with std::byte and never ever write “using namespace std” ever again. If that doesn’t work, make sure you enabled C++17 (see https://crascit.com/2015/03/28/enabling-cxx11-in-cmake/).

 

---

Jim Melton



 

From: Discuss-gnuradio <discuss-gnuradio-bounces+jim.melton=sncorp.com@gnu.org> On Behalf Of Mario Moran
Sent: Monday, November 8, 2021 15:06
To: discuss-gnuradio@gnu.org
Subject: [EXTERNAL] Creating my own Random Source

 

Good afternoon,

 

I know there is already a Random Source, but my advisor would like me to create my own out of tree modules and use them in a flowgraph. So, I am creating my own block, here are my steps so everyone can see what I have done. 

 

gr_modtool newmod Random

gr_modtool add my_Random_Byte_Source

Block Type: Source

Language: Cpp

No arguments(Side note I might redo this and make arguments but for now it will be specific for one need)

Add python QA code: n

Add C++ QA code: y

I then opened the my_Random_Byte_Source_impl.cc file and added:

#include <gnuradio/random.h>

/*
     * The private constructor
     */
    my_Random_Byte_Source_impl::my_Random_Byte_Source_impl()
      : gr::sync_block("my_Random_Byte_Source",
              gr::io_signature::make(0, 0, 0),
              gr::io_signature::make(1, 1, sizeof(byte)))
    {}

 

unsigned byte
    my_Random_Byte_Source_impl::get_bytes(const byte &sample)
    {
    return gr::random::random(0,0,4)
    }

 

  int
    my_Random_Byte_Source_impl::work(int noutput_items,
        gr_vector_const_void_star &input_items,
        gr_vector_void_star &output_items)
    {
      byte *out = (byte *) output_items[0];

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

      // Tell runtime system how many output items we produced.
      return noutput_items;
    }

 

Then in the yml file I changed it up to be:

 

id: Random_my_Random_Byte_Source
label: my_Random_Byte_Source
category: '[Random]'

templates:
  imports: import Random
  make: Random.my_Random_Byte_Source()

outputs:
- label: out
  dtype: byte


#  'file_format' specifies the version of the GRC yml format used in the file
#  and should usually not be changed.
file_format: 1

 

Now, I created the build directory and used cmake -DCMAKE_INSTALL_PREFIX=/home/mariom/prefix-3.8/ .. and it was able to complete this but it failed the make install. Here is the error:

 

/home/mariom/gr-Random/lib/my_Random_Byte_Source_impl.cc: In constructor ‘gr::Random::my_Random_Byte_Source_impl::my_Random_Byte_Source_impl()’:
/home/mariom/gr-Random/lib/my_Random_Byte_Source_impl.cc:46:51: error: ‘byte’ was not declared in this scope
   46 |               gr::io_signature::make(1, 1, sizeof(byte)))
      |                                                   ^~~~
/home/mariom/gr-Random/lib/my_Random_Byte_Source_impl.cc: At global scope:
/home/mariom/gr-Random/lib/my_Random_Byte_Source_impl.cc:57:5: error: expected initializer before ‘my_Random_Byte_Source_impl’
   57 |     my_Random_Byte_Source_impl::get_bytes(const byte &sample)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~
/home/mariom/gr-Random/lib/my_Random_Byte_Source_impl.cc: In member function ‘virtual int gr::Random::my_Random_Byte_Source_impl::work(int, gr_vector_const_void_star&, gr_vector_void_star&)’:
/home/mariom/gr-Random/lib/my_Random_Byte_Source_impl.cc:67:7: error: ‘byte’ was not declared in this scope
   67 |       byte *out = (byte *) output_items[0];
      |       ^~~~
/home/mariom/gr-Random/lib/my_Random_Byte_Source_impl.cc:67:13: error: ‘out’ was not declared in this scope
   67 |       byte *out = (byte *) output_items[0];
      |             ^~~
/home/mariom/gr-Random/lib/my_Random_Byte_Source_impl.cc:67:26: error: expected primary-_expression_ before ‘)’ token
   67 |       byte *out = (byte *) output_items[0];
      |                          ^
/home/mariom/gr-Random/lib/my_Random_Byte_Source_impl.cc:71:24: error: ‘get_bytes’ was not declared in this scope
   71 |               out[i] = get_bytes(i)
      |                        ^~~~~~~~~
make[2]: *** [lib/CMakeFiles/gnuradio-Random.dir/build.make:63: lib/CMakeFiles/gnuradio-Random.dir/my_Random_Byte_Source_impl.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:301: lib/CMakeFiles/gnuradio-Random.dir/all] Error 2
make: *** [Makefile:141: all] Error 2

 

So, I know it doesn't like byte but I'm not sure why. I know when I did the tutorial I did gr_complex and I thought gr_byte would work but it did not so I tried the byte by itself but it still did not work. So, I imagine that the problem is there but is there anything I did wrong? How can I fix this? Please and thank you for your help everyone. 

 

P.S. I am using ubuntu 20.04, gnuradio 3.8.4.0, and I installed it using pybombs which is why I used cmake -DCMAKE_INTSALL_PREFIX=/home/mariom/prefix-3.8/ ..

CONFIDENTIALITY NOTICE - SNC EMAIL: This email and any attachments are confidential, may contain proprietary, protected, or export controlled information, and are intended for the use of the intended recipients only. Any review, reliance, distribution, disclosure, or forwarding of this email and/or attachments outside of Sierra Nevada Corporation (SNC) without express written approval of the sender, except to the extent required to further properly approved SNC business purposes, is strictly prohibited. If you are not the intended recipient of this email, please notify the sender immediately, and delete all copies without reading, printing, or saving in any manner. --- Thank You.

reply via email to

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