ble: drop the 'event' argument from device-added
An 'event' boolean is less than obvious ('is-event' may be better). This signalled the difference between a device-added during Manager startup and the device-added at runtime (i.e. device goes online). We don't need that differentiation. The manager adds all existing devices immediately after connnect_to_bluez(). All we have to do is run through the device list, add them locally and then subscribe to the signal. This keeps the is-event confusion within one file only instead of spreading it across two and an internal API. And we can re-name it to hotplugged.
This commit is contained in:
parent
e9b07a5efc
commit
c64a68a480
20
tuhi/base.py
20
tuhi/base.py
|
@ -231,8 +231,6 @@ class Tuhi(GObject.Object):
|
||||||
self.server.connect('search-start-requested', self._on_start_search_requested)
|
self.server.connect('search-start-requested', self._on_start_search_requested)
|
||||||
self.server.connect('search-stop-requested', self._on_stop_search_requested)
|
self.server.connect('search-stop-requested', self._on_stop_search_requested)
|
||||||
self.bluez = BlueZDeviceManager()
|
self.bluez = BlueZDeviceManager()
|
||||||
self.bluez.connect('device-added', self._on_bluez_device_updated)
|
|
||||||
self.bluez.connect('device-updated', self._on_bluez_device_updated)
|
|
||||||
self.bluez.connect('discovery-started', self._on_bluez_discovery_started)
|
self.bluez.connect('discovery-started', self._on_bluez_discovery_started)
|
||||||
self.bluez.connect('discovery-stopped', self._on_bluez_discovery_stopped)
|
self.bluez.connect('discovery-stopped', self._on_bluez_discovery_stopped)
|
||||||
|
|
||||||
|
@ -245,6 +243,11 @@ class Tuhi(GObject.Object):
|
||||||
|
|
||||||
def _on_tuhi_bus_name_acquired(self, dbus_server):
|
def _on_tuhi_bus_name_acquired(self, dbus_server):
|
||||||
self.bluez.connect_to_bluez()
|
self.bluez.connect_to_bluez()
|
||||||
|
for dev in self.bluez.devices:
|
||||||
|
self._add_device(self.bluez, dev)
|
||||||
|
|
||||||
|
self.bluez.connect('device-added', self._on_bluez_device_updated)
|
||||||
|
self.bluez.connect('device-updated', self._on_bluez_device_updated)
|
||||||
|
|
||||||
def _on_tuhi_bus_name_lost(self, dbus_server):
|
def _on_tuhi_bus_name_lost(self, dbus_server):
|
||||||
self.mainloop.quit()
|
self.mainloop.quit()
|
||||||
|
@ -282,7 +285,7 @@ class Tuhi(GObject.Object):
|
||||||
# restart discovery if some users are already in the listening mode
|
# restart discovery if some users are already in the listening mode
|
||||||
self._on_listening_updated(None, None)
|
self._on_listening_updated(None, None)
|
||||||
|
|
||||||
def _on_bluez_device_updated(self, manager, bluez_device, event=True):
|
def _add_device(self, manager, bluez_device, hotplugged=False):
|
||||||
uuid = None
|
uuid = None
|
||||||
|
|
||||||
# check if the device is already known by us
|
# check if the device is already known by us
|
||||||
|
@ -295,11 +298,11 @@ class Tuhi(GObject.Object):
|
||||||
if uuid is None and bluez_device.vendor_id not in WACOM_COMPANY_IDS:
|
if uuid is None and bluez_device.vendor_id not in WACOM_COMPANY_IDS:
|
||||||
return
|
return
|
||||||
|
|
||||||
# if event is set, the device has been 'hotplugged' in the bluez stack
|
# if the device has been 'hotplugged' in the bluez stack,
|
||||||
# so ManufacturerData is reliable. Else, consider the device not in
|
# ManufacturerData is reliable. Else, consider the device not in
|
||||||
# the register mode
|
# register mode
|
||||||
register_mode = False
|
register_mode = False
|
||||||
if event:
|
if hotplugged:
|
||||||
register_mode = Tuhi._device_in_register_mode(bluez_device)
|
register_mode = Tuhi._device_in_register_mode(bluez_device)
|
||||||
|
|
||||||
if not register_mode:
|
if not register_mode:
|
||||||
|
@ -323,6 +326,9 @@ class Tuhi(GObject.Object):
|
||||||
elif d.listening:
|
elif d.listening:
|
||||||
d.listen()
|
d.listen()
|
||||||
|
|
||||||
|
def _on_bluez_device_updated(self, manager, bluez_device):
|
||||||
|
self._add_device(manager, bluez_device, True)
|
||||||
|
|
||||||
def _on_listening_updated(self, tuhi_dbus_device, pspec):
|
def _on_listening_updated(self, tuhi_dbus_device, pspec):
|
||||||
listen = self._search_stop_handler is not None
|
listen = self._search_stop_handler is not None
|
||||||
for dev in self.devices.values():
|
for dev in self.devices.values():
|
||||||
|
|
10
tuhi/ble.py
10
tuhi/ble.py
|
@ -291,7 +291,7 @@ class BlueZDeviceManager(GObject.Object):
|
||||||
'''
|
'''
|
||||||
__gsignals__ = {
|
__gsignals__ = {
|
||||||
'device-added':
|
'device-added':
|
||||||
(GObject.SignalFlags.RUN_FIRST, None, (GObject.TYPE_PYOBJECT, GObject.TYPE_BOOLEAN)),
|
(GObject.SignalFlags.RUN_FIRST, None, (GObject.TYPE_PYOBJECT,)),
|
||||||
'device-updated':
|
'device-updated':
|
||||||
(GObject.SignalFlags.RUN_FIRST, None, (GObject.TYPE_PYOBJECT,)),
|
(GObject.SignalFlags.RUN_FIRST, None, (GObject.TYPE_PYOBJECT,)),
|
||||||
'discovery-started':
|
'discovery-started':
|
||||||
|
@ -326,7 +326,7 @@ class BlueZDeviceManager(GObject.Object):
|
||||||
# object path length and process them in order, this way we're
|
# object path length and process them in order, this way we're
|
||||||
# guaranteed that the objects we need already exist.
|
# guaranteed that the objects we need already exist.
|
||||||
for obj in self._om.get_objects():
|
for obj in self._om.get_objects():
|
||||||
self._process_object(obj, event=False)
|
self._process_object(obj)
|
||||||
|
|
||||||
def _discovery_timeout_expired(self):
|
def _discovery_timeout_expired(self):
|
||||||
self.stop_discovery()
|
self.stop_discovery()
|
||||||
|
@ -428,7 +428,7 @@ class BlueZDeviceManager(GObject.Object):
|
||||||
if obj.get_interface(ORG_BLUEZ_ADAPTER1) is not None:
|
if obj.get_interface(ORG_BLUEZ_ADAPTER1) is not None:
|
||||||
self._process_adapter(obj)
|
self._process_adapter(obj)
|
||||||
elif obj.get_interface(ORG_BLUEZ_DEVICE1) is not None:
|
elif obj.get_interface(ORG_BLUEZ_DEVICE1) is not None:
|
||||||
self._process_device(obj, event)
|
self._process_device(obj)
|
||||||
elif obj.get_interface(ORG_BLUEZ_GATTCHARACTERISTIC1) is not None:
|
elif obj.get_interface(ORG_BLUEZ_GATTCHARACTERISTIC1) is not None:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -438,11 +438,11 @@ class BlueZDeviceManager(GObject.Object):
|
||||||
objpath = obj.get_object_path()
|
objpath = obj.get_object_path()
|
||||||
logger.debug(f'Adapter: {objpath}')
|
logger.debug(f'Adapter: {objpath}')
|
||||||
|
|
||||||
def _process_device(self, obj, event=True):
|
def _process_device(self, obj):
|
||||||
dev = BlueZDevice(self._om, obj)
|
dev = BlueZDevice(self._om, obj)
|
||||||
self.devices.append(dev)
|
self.devices.append(dev)
|
||||||
dev.connect('updated', self._on_device_updated)
|
dev.connect('updated', self._on_device_updated)
|
||||||
self.emit('device-added', dev, event)
|
self.emit('device-added', dev)
|
||||||
|
|
||||||
def _process_characteristic(self, obj):
|
def _process_characteristic(self, obj):
|
||||||
objpath = obj.get_object_path()
|
objpath = obj.get_object_path()
|
||||||
|
|
Loading…
Reference in New Issue