невозможно отменить регистрацию сигнала dbus для уведомлений - PullRequest
0 голосов
/ 25 февраля 2019

Я использую библиотеку Python dbus, чтобы зарегистрироваться для получения пакетов ble с устройства.Однако после отключения и повторного подключения я получаю несколько обратных вызовов.Я попытался отменить регистрацию сингла, но это, похоже, не дает никакого эффекта - вот что я сейчас делаю -

class Gatt(object):
dbus_if = 'org.bluez.GattCharacteristic1'

    def __init__(self, bus, char_path):
        self.char_path = char_path
        self.bus = bus
        prop_man = dbus.Interface(bus.get_object(BLUEZ_SERV_NAME, self.char_path),
                                  'org.freedesktop.DBus.Properties')
        props = prop_man.GetAll(self.dbus_if)
        self.uuid = props[dbus.String('UUID')]
        self.notifying = props[dbus.String('Notifying')]
        nom = dbus.Interface(bus.get_object(BLUEZ_SERV_NAME, char_path), 'org.freedesktop.DBus.Properties')
        self.signal_on_property_changed = nom.connect_to_signal('PropertiesChanged', self.on_char_property_changed)
        print('New Gatt Device {}'.format(str(self.uuid)))
        self.dbus_if_handle = dbus.Interface(self.bus.get_object(BLUEZ_SERV_NAME, self.char_path),
                       self.dbus_if)

def clear_signal(self):
    self.bus.remove_signal_receiver(self.on_char_property_changed, self.signal_on_property_changed)

На данный момент я подозреваю, что remove_signal_receiver () имеет неверные аргументы и, таким образом, молча завершается ошибкой, не даваямне правильные результаты.

Любое предложение с благодарностью.ТИА.

1 Ответ

0 голосов
/ 15 мая 2019

Чтобы удалить совпадение сигналов, созданное с помощью self.signal_on_property_changed = nom.connect_to_signal(...), необходимо сохранить сигнал, созданный этой функцией, а затем вызвать метод remove() для этого сигнала.

Пример:

# Create signal
self.signal_on_property_changed = nom.connect_to_signal(...)
....
# Remove signal
self.signal_on_property_changed.remove()
...