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/ ..