In addition to what Johannes said: Make sure that you have
virtual void set_gain(float gain) = 0; in your var_gain.h and virtual void set_gain(float gain); in your var_gain_impl.h, as well as void var_gain_impl::set_gain(float gain) { ... } in your var_gain_impl.cc. 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_??. Greetings, Marcus On 20.07.2014 12:24, Johannes Demel wrote: > hey, > > 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: > > 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 > > <callback>set_gain($gain)</callback> after the <make> 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? > > > > > -- View this message in context: > > > http://gnuradio.4.n7.nabble.com/Implementing-callbacks-in-custom-blocks-tp49462.html > > > Sent from the GnuRadio mailing list archive at Nabble.com. > > > _______________________________________________ Discuss-gnuradio > > mailing list Discuss-gnuradio@gnu.org > > https://lists.gnu.org/mailman/listinfo/discuss-gnuradio > > > _______________________________________________ > Discuss-gnuradio mailing list > Discuss-gnuradio@gnu.org > https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
_______________________________________________ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org https://lists.gnu.org/mailman/listinfo/discuss-gnuradio