Using gr_modtool, I am trying to make a simple Gain block (called
var_gain)
which multiplies the input with a constant. I have a private variable
called
d_gain in the var_gain_impl class and a public function set_gain(float
gain)
which sets the value of d_gain to the argument. I modified the xml file
by
adding the line
set_gain($gain)
after the line.
During execution, gain value does not change even after changing it
through
a WX Slider. If I run it from terminal, I am getting the following error
Traceback (most recent call last):
File
“/usr/local/lib/python2.7/dist-packages/gnuradio/wxgui/forms/forms.py”,
line
180, in _handle
def _handle(self, event): self[INT_KEY] = self._slider.GetValue()
File “/usr/local/lib/python2.7/dist-packages/gnuradio/gr/pubsub.py”,
line
52, in setitem
sub(val)
File
“/usr/local/lib/python2.7/dist-packages/gnuradio/wxgui/forms/forms.py”,
line
138, in _translate_internal_to_external
if self._callback: self._callback(self[EXT_KEY])
File “top_block.py”, line 102, in set_gg
self.fsk_var_gain_0.set_gain(self.gg)
AttributeError: ‘var_gain_sptr’ object has no attribute ‘set_gain’
I tried looking at some in-built blocks to see how callback is
implemented.
Then I saw that the in-built blocks have pure virtual functions in the
include/module_name/var_gain.h header file. I tried implementing that
but
the result is still the same. What am I missing here?
I’m not entirely sure if it still holds true, but that might be an
error related to SWIG. For some reason virtual header files don’t get
swig’ed again unless explicitly triggered. Just do a ‘make clean’ and
‘make’ again. That should rebuild your module from scratch and also
swig your headers.
happy hacking
Johannes
On 20.07.2014 07:58, jsam45 wrote:
“/usr/local/lib/python2.7/dist-packages/gnuradio/wxgui/forms/forms.py”,
I tried looking at some in-built blocks to see how callback is
Sent from the GnuRadio mailing list archive at Nabble.com.
The idea is that the user of your block only sees var_gain and its
public attributes, while you and your module work in var_gain_impl to
make it easier for swig and readers to understand your “interface” for
using that class and giving you the freedom to have whatever methods
you’d need in the _impl without asking yourself if potential users might
be confused by these methods.
And another side note for future readers: I assume you implement this as
an exercise, which is a very good idea!
If someone just needs functionality of this kind, there’s
multiply_const_??.