def add_signal_receiver(self, callback_fn, signal, user_arg):
        """
        Add a signal receiver callback with user argument

        See also :py:meth:`remove_signal_receiver`,
        :py:exc:`.BTSignalNameNotRecognisedException`

        :param func callback_fn: User-defined callback function to call when
            signal triggers
        :param str signal: Signal name e.g.,
            :py:attr:`.BTInterface.SIGNAL_PROPERTY_CHANGED`
        :param user_arg: User-defined callback argument to be passed with
            callback function
        :return:
        :raises BTSignalNameNotRecognisedException: if the signal name is
            not registered
        """
        if (signal in self._signal_names):
            s = Signal(signal, callback_fn, user_arg)
            self._signals[signal] = s
            self._bus.add_signal_receiver(s.signal_handler,
                                          signal,
                                          dbus_interface=self._dbus_addr,
                                          path=self._path)
        else:
            raise BTSignalNameNotRecognisedException
Add a signal receiver callback with user argument

        See also :py:meth:`remove_signal_receiver`,
        :py:exc:`.BTSignalNameNotRecognisedException`

        :param func callback_fn: User-defined callback function to call when
            signal triggers
        :param str signal: Signal name e.g.,
            :py:attr:`.BTInterface.SIGNAL_PROPERTY_CHANGED`
        :param user_arg: User-defined callback argument to be passed with
            callback function
        :return:
        :raises BTSignalNameNotRecognisedException: if the signal name is
            not registered