On 07/27/2012 02:01 PM, Jonathan Fox wrote:
> I am trying to create a custom block that does energy detection. I used the
> gr-modtool.py to generate the appropriate directory and files and added my
> algorithm and necessary code to the header and cc. I also added the XML
> file for the GRC It compiled without error but when I tried testing it out,
> I got this error:
>
> linux; GNU C++ version 4.6.3; Boost_104601; UHD_003.004.002-181-g25649781
>
> Traceback (most recent call last):
> File "/home/jonfox/spectrum_sensing_test.py", line 21, in <module>
> import specsense
> File "/usr/local/lib/python2.7/dist-packages/specsense/__init__.py", line
> 45, in <module>
> from specsense_swig import *
> File
> "/usr/local/lib/python2.7/dist-packages/specsense/specsense_swig.py", line
> 26, in <module>
> _specsense_swig = swig_import_helper()
> File
> "/usr/local/lib/python2.7/dist-packages/specsense/specsense_swig.py", line
> 22, in swig_import_helper
> _mod = imp.load_module('_specsense_swig', fp, pathname, description)
> ImportError: libgnuradio-specsense.so: cannot open shared object file: No
> such file or directory
>
First off, does the file really exist, if not is it installed, but under
the wrong name or wrong directory?
If its there, sometimes running sudo ldconfig fixes issues like this.
> specsense is the module I created with the modtool but I did not modify the
> swig file. Any ideas on what I did wrong here?
>
> Also, it seems that my code for having a vector input does not hold up and
> I have to manually change the input type in the appropriate python script
> despite setting it in GRC already. Is there any documentation on adding
> vector inputs and outputs?
>
any code snippets with the problem that you can post?
-josh
_______________________________________________
Discuss-gnuradio mailing list
address@hidden
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
Sudo ldconfig worked. Now I get this:
Traceback (most recent call last):
File "/home/jonfox/gnuradio/spectrum_sensing_test.py", line 214, in <module>
tb.Run(True)
File "/usr/local/lib/python2.7/dist-packages/grc_gnuradio/wxgui/top_block_gui.py", line 76, in Run
self.start()
File "/usr/local/lib/python2.7/dist-packages/gnuradio/gr/top_block.py", line 97, in start
self._tb.start(max_noutput_items)
File "/usr/local/lib/python2.7/dist-packages/gnuradio/gr/gnuradio_core_runtime.py", line 1768, in start
return _gnuradio_core_runtime.gr_top_block_sptr_start(self, max_noutput_items)
RuntimeError: gr_buffer_add_reader: nzero_preload must be >= 0
I have looked up the last line in Google and found an email requesting the flow graph be attached (although it was a differenet user) so see attached.
For the code snippets, let me start with this error.
File "/home/jonfox/gnuradio/spectrum_sensing_test.py", line 213, in <module>
tb = spectrum_sensing_test(freq=options.freq, address=options.address, samp_rate=options.samp_rate, gain=options.gain, fft_vector=options.fft_vector)
File "/home/jonfox/gnuradio/spectrum_sensing_test.py", line 142, in __init__
self.connect((self.blks2_logpwrfft_x_0, 0), (self.specsense_edetect_cl_ff_0, 0))
File "/usr/local/lib/python2.7/dist-packages/gnuradio/gr/top_block.py", line 124, in connect
self._connect(points[i-1], points[i])
File "/usr/local/lib/python2.7/dist-packages/gnuradio/gr/top_block.py", line 130, in _connect
dst_block.to_basic_block(), dst_port)
File "/usr/local/lib/python2.7/dist-packages/gnuradio/gr/gnuradio_core_runtime.py", line 1836, in primitive_connect
return _gnuradio_core_runtime.gr_top_block_sptr_primitive_connect(self, *args)
ValueError: itemsize mismatch: logpwrfft_c(17):0 using 2048, edetect_cl_ff(13):0 using 4
This is the vector mismatch error despite the fact I have looked up other blocks and followed their code for vector implementation.
The .cc
specsense_edetect_cl_ff_sptr
specsense_make_edetect_cl_ff (size_t vlen)
{
return specsense_edetect_cl_ff_sptr (new specsense_edetect_cl_ff (vlen));
}
static const int MIN_IN = 1; // mininum number of input streams
static const int MAX_IN = 1; // maximum number of input streams
static const int MIN_OUT = 1; // minimum number of output streams
static const int MAX_OUT = 1; // maximum number of output streams
specsense_edetect_cl_ff::specsense_edetect_cl_ff (size_t vlen)
: gr_block ("edetect_cl_ff",
gr_make_io_signature (MIN_IN, MAX_IN, sizeof (float) * vlen),
gr_make_io_signature (MIN_IN, MAX_OUT, sizeof (float) * vlen)),
d_vlen (vlen)
{
}
the .h
class specsense_edetect_cl_ff;
typedef boost::shared_ptr<specsense_edetect_cl_ff> specsense_edetect_cl_ff_sptr;
SPECSENSE_API specsense_edetect_cl_ff_sptr specsense_make_edetect_cl_ff (size_t vlen = 1);
/*!
* \brief <+description+>
*
*/
class SPECSENSE_API specsense_edetect_cl_ff : public gr_block
{
friend SPECSENSE_API specsense_edetect_cl_ff_sptr specsense_make_edetect_cl_ff (size_t vlen);
specsense_edetect_cl_ff (size_t vlen);
size_t d_vlen;
the .xml
<?xml version="1.0"?>
<block>
<name>edetect_cl_ff</name>
<key>specsense_edetect_cl_ff</key>
<category>specsense</category>
<import>import specsense</import>
<make>specsense.edetect_cl_ff()</make>
<!-- Make one 'param' node for every Parameter you want settable from the GUI.
Sub-nodes:
* name
* key (makes the value accessible as $keyname, e.g. in the make node)
* type -->
<param>
<name>Vec Length</name>
<key>vlen</key>
<value>1</value>
<type>int</type>
</param>
<check>$vlen > 0</check>
<sink>
<name>in</name>
<type>float</type>
<vlen>$vlen</vlen>
</sink>
<source>
<name>out</name>
<type>float</type>
<vlen>$vlen</vlen>
</source>
</block>
Anything else I should post?