Forum: GNU Radio Importing newly created C++ block

Posted by Brooke Hayden (Guest)
on 2013-02-27 16:43
(Received via mailing list)
Hi all,

We created a new module called radar(gr-radar folder created) and a 
block
called lfm_source_c. Eventually, this new block will create a chirp 
style
signal. We are trying to use in a Python file. The Python code was 
working
perfectly fine when we used the gr signal source to generate a square 
wave.
The wave transmitted to a scope sink and to our USRP N210.

We successfully installed the new module with "make install".

We added an "import radar" statement at the beginning of the file which 
in
and of itself didn't cause any errors. We got a whole list of errors 
when
we tried to use the source in python.
src = radar.lfm_source_c (wave_freq,
                               pulse_width,
                               pulse_rep_int,
                               sample_rate,
                               2.0,
                               0)


gr-radar is in our home path, but not the GNU Radio path (which I think 
is
correct). Can anyone give us any insight into this problem? This is the
first block we've created so don't have any experience with this. I will
also include our error list below.

Thanks for any help you can give! Below is the terminal output:

Traceback (most recent call last):
  File "chirp_test_gui.py", line 82, in <module>
    main ()
  File "chirp_test_gui.py", line 78, in main
    app = stdgui2.stdapp(tx_sink, "Transmitted Signal", nstatus=1)
  File 
"/usr/local/lib/python2.7/dist-packages/gnuradio/wxgui/stdgui2.py",
line 38, in __init__
    wx.App.__init__ (self, redirect=False)
  File 
"/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode/wx/_core.py",
line 7981, in __init__
    self._BootstrapApp()
  File 
"/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode/wx/_core.py",
line 7555, in _BootstrapApp
    return _core_.PyApp__BootstrapApp(*args, **kwargs)
  File 
"/usr/local/lib/python2.7/dist-packages/gnuradio/wxgui/stdgui2.py",
line 42, in OnInit
    self._max_noutput_items)
  File 
"/usr/local/lib/python2.7/dist-packages/gnuradio/wxgui/stdgui2.py",
line 64, in __init__
    self.panel = stdpanel (self, self, top_block_maker, max_nouts)
  File 
"/usr/local/lib/python2.7/dist-packages/gnuradio/wxgui/stdgui2.py",
line 86, in __init__
    self.top_block = top_block_maker (frame, self, vbox, sys.argv)
  File "chirp_test_gui.py", line 69, in __init__
    sig0 =
tx_test(options.freq,options.pulse_width,options.pulse_rep_int,options.samp_rate)
  File "chirp_test_gui.py", line 26, in __init__
    0)              # DC Offset
  File "/usr/local/lib/python2.7/dist-packages/radar/radar_swig.py", 
line
319, in __init__
    def __init__(self, *args, **kwargs): raise AttributeError("No
constructor defined")
AttributeError: No constructor defined
Posted by Tom Rondeau (Guest)
on 2013-02-27 17:16
(Received via mailing list)
On Wed, Feb 27, 2013 at 10:42 AM, Brooke Hayden <sdratonu@gmail.com> 
wrote:
> We added an "import radar" statement at the beginning of the file which in
> gr-radar is in our home path, but not the GNU Radio path (which I think is
>     app = stdgui2.stdapp(tx_sink, "Transmitted Signal", nstatus=1)
> line 42, in OnInit
>   File "chirp_test_gui.py", line 26, in __init__
>     0)              # DC Offset
>   File "/usr/local/lib/python2.7/dist-packages/radar/radar_swig.py", line
> 319, in __init__
>     def __init__(self, *args, **kwargs): raise AttributeError("No
> constructor defined")
> AttributeError: No constructor defined


Brooke,

How did you create the block? Was it using gr_modtool or did you roll
it yourself from scratch? It looks like something in the SWIG
interface is probably wrong. Do you have a separate interface (.i)
file for this block or are you just including the header file in a
"radar_swig.i" file? (The latter is the preferred way.)

So make sure you have a make function and that the block is properly
included in a SWIG interface file.

Tom
Posted by Serhat B. (serhat_b)
on 2013-02-28 00:50
i tried to do like Tom said but i had faild, could you help me!!


bynkln@ubuntu:~$ gr_modtool.py create qpsk
Module directory is "./gr-qpsk".
Creating directory...
Copying howto example...
Unpacking...
Replacing occurences of 'howto' to 'qpsk'... Done.
Use 'gr_modtool add' to add a new block to this currently empty module.
bynkln@ubuntu:~$ cd gr-qpsk/
bynkln@ubuntu:~/gr-qpsk$ gr_modtool add
GNU Radio module name identified: qpsk
Enter code type: hier
Language: C++
Enter name of block/code (without module name prefix): qpsk
Block/code identifier: qpsk
Enter valid argument list, including default arguments: int val1, double 
val2=0
Add Python QA code? [Y/n] y
Add C++ QA code? [y/N] y
Adding file 'qpsk_impl.h'...
Adding file 'qpsk_impl.cc'...
Adding file 'qpsk.h'...
Adding file 'qa_qpsk.cc'...
Adding file 'qa_qpsk.h'...
Editing swig/qpsk_swig.i...
Adding file 'qa_qpsk.py'...
Editing python/CMakeLists.txt...
Adding file 'qpsk_qpsk.xml'...
Editing grc/CMakeLists.txt...

at this level i had added qpsk.py to into /gr-qpsk/__init__.py at # 
import any pure python here
#

#

than i had changed <+ YOUR COMPANY NAME +> to <+BYNKLN+> for all 
component that includes after that:

bynkln@ubuntu:~/gr-qpsk$ mkdir build
bynkln@ubuntu:~/gr-qpsk$ cd build
bynkln@ubuntu:~/gr-qpsk/build$ cmake ../
-- The CXX compiler identification is GNU 4.7.2
-- The C compiler identification is GNU 4.7.2
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Build type not specified: defaulting to release.
-- Boost version: 1.49.0
-- Found the following Boost libraries:
--   filesystem
--   system
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.26")
-- checking for module 'gruel'
--   found gruel, version 3.6.4
-- Found GRUEL: /usr/local/lib/libgruel.so
-- checking for module 'gnuradio-core'
--   found gnuradio-core, version 3.6.4
-- Found GNURADIO_CORE: /usr/local/lib/libgnuradio-core.so
-- checking for module 'cppunit'
--   found cppunit, version 1.12.1
-- Found CPPUNIT: /usr/lib/libcppunit.so;dl
-- Found SWIG: /usr/bin/swig2.0 (found version "2.0.7")
-- Found PythonLibs: /usr/lib/python3.2/config/libpython3.2.so (found 
version "2.7.3")
-- Found PythonInterp: /usr/bin/python (found version "2.7.3")
-- Found Doxygen: /usr/bin/doxygen (found version "1.8.1.2")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/bynkln/gr-qpsk/build
bynkln@ubuntu:~/gr-qpsk/build$ make
Scanning dependencies of target gnuradio-qpsk
[  5%] Building CXX object 
lib/CMakeFiles/gnuradio-qpsk.dir/qpsk_impl.cc.o
/home/bynkln/gr-qpsk/lib/qpsk_impl.cc: In constructor 
‘gr::qpsk::qpsk_impl::qpsk_impl(int, double)’:
/home/bynkln/gr-qpsk/lib/qpsk_impl.cc:42:30: error: expected 
primary-expression before ‘<’ token
/home/bynkln/gr-qpsk/lib/qpsk_impl.cc:42:32: error: ‘MIN_IN’ was not 
declared in this scope
/home/bynkln/gr-qpsk/lib/qpsk_impl.cc:42:39: error: expected 
primary-expression before ‘>’ token
/home/bynkln/gr-qpsk/lib/qpsk_impl.cc:42:40: error: expected 
primary-expression before ‘,’ token
/home/bynkln/gr-qpsk/lib/qpsk_impl.cc:42:42: error: expected 
primary-expression before ‘<’ token
/home/bynkln/gr-qpsk/lib/qpsk_impl.cc:42:44: error: ‘MAX_IN’ was not 
declared in this scope
/home/bynkln/gr-qpsk/lib/qpsk_impl.cc:42:51: error: expected 
primary-expression before ‘>’ token
/home/bynkln/gr-qpsk/lib/qpsk_impl.cc:42:52: error: expected 
primary-expression before ‘,’ token
/home/bynkln/gr-qpsk/lib/qpsk_impl.cc:42:62: error: expected 
primary-expression before ‘<’ token
/home/bynkln/gr-qpsk/lib/qpsk_impl.cc:42:64: error: expected 
primary-expression before ‘float’
/home/bynkln/gr-qpsk/lib/qpsk_impl.cc:42:64: error: expected ‘)’ before 
‘float’
/home/bynkln/gr-qpsk/lib/qpsk_impl.cc:58:3: error: expected ‘{’ before 
‘}’ token
make[2]: *** [lib/CMakeFiles/gnuradio-qpsk.dir/qpsk_impl.cc.o] Error 1
make[1]: *** [lib/CMakeFiles/gnuradio-qpsk.dir/all] Error 2
make: *** [all] Error 2
bynkln@ubuntu:~/gr-qpsk/build$


it faild again, could any body to help ..
Posted by Serhat B. (serhat_b)
on 2013-02-28 17:39
(Received via mailing list)
i am stucking to add code in places, i think i am forgetting someone 
could
you write its steps, thank you.

2013/2/28 Tom Rondeau <tom@trondeau.com>
Posted by Serhat B. (serhat_b)
on 2013-03-08 15:57
(Received via mailing list)
I did as you said i think, but i stuck same problem goes... Please, i 
know it is too much to request that, could you explain to create a new 
block(i did it) and adding python code(may be i have problem here) than 
what i shoul change at the created block after that how to make it 
avaible to grc as a block. I need them to make it happen step by step if 
you do it for us..

28 Şub 2013 tarihinde 01:16 saatinde, Tom Rondeau <tom@trondeau.com> 
şunları yazdı:
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.