diff --git a/lib/logitech_receiver/base.py b/lib/logitech_receiver/base.py index 0aad72e0..23e64240 100644 --- a/lib/logitech_receiver/base.py +++ b/lib/logitech_receiver/base.py @@ -27,6 +27,7 @@ import threading from contextlib import contextmanager from random import getrandbits from time import time +from typing import Any import hidapi @@ -56,34 +57,41 @@ class HIDPPNotification: return f"Notification({self.report_id:02x},{self.devnumber},{self.sub_id:02X},{self.address:02X},{text_as_hex})" -def _wired_device(product_id, interface): - return {"vendor_id": 1133, "product_id": product_id, "bus_id": 3, "usb_interface": interface, "isDevice": True} +def _usb_device(product_id: int, usb_interface: int) -> dict[str, Any]: + return { + "vendor_id": 1133, + "product_id": product_id, + "bus_id": 3, + "usb_interface": usb_interface, + "isDevice": True, + } -def _bt_device(product_id): +def _bluetooth_device(product_id: int) -> dict[str, Any]: return {"vendor_id": 1133, "product_id": product_id, "bus_id": 5, "isDevice": True} -DEVICE_IDS = [] +KNOWN_DEVICE_IDS = [] for _ignore, d in descriptors.DEVICES.items(): if d.usbid: - DEVICE_IDS.append(_wired_device(d.usbid, d.interface if d.interface else 2)) + usb_interface = d.interface if d.interface else 2 + KNOWN_DEVICE_IDS.append(_usb_device(d.usbid, usb_interface)) if d.btid: - DEVICE_IDS.append(_bt_device(d.btid)) + KNOWN_DEVICE_IDS.append(_bluetooth_device(d.btid)) -def other_device_check(bus_id, vendor_id, product_id): +def other_device_check(bus_id: int, vendor_id: int, product_id: int): """Check whether product is a Logitech USB-connected or Bluetooth device based on bus, vendor, and product IDs This allows Solaar to support receiverless HID++ 2.0 devices that it knows nothing about""" if vendor_id != 0x46D: # Logitech return if bus_id == 0x3: # USB if product_id >= 0xC07D and product_id <= 0xC094 or product_id >= 0xC32B and product_id <= 0xC344: - return _wired_device(product_id, 2) + return _usb_device(product_id, 2) elif bus_id == 0x5: # Bluetooth if product_id >= 0xB012 and product_id <= 0xB0FF or product_id >= 0xB317 and product_id <= 0xB3FF: - return _bt_device(product_id) + return _bluetooth_device(product_id) def product_information(usb_id: int | str) -> dict: @@ -149,7 +157,7 @@ def filter(bus_id, vendor_id, product_id, hidpp_short=False, hidpp_long=False): record = filter_receivers(bus_id, vendor_id, product_id, hidpp_short, hidpp_long) if record: # known or unknown receiver return record - for record in DEVICE_IDS: # known devices + for record in KNOWN_DEVICE_IDS: if match(record, bus_id, vendor_id, product_id): return record if hidpp_short or hidpp_long: # unknown devices that use HID++ @@ -340,7 +348,7 @@ def _skip_incoming(handle, ihandle, notifications_hook): def make_notification(report_id, devnumber, data) -> HIDPPNotification | None: """Guess if this is a notification (and not just a request reply), and - return a Notification tuple if it is.""" + return a Notification if it is.""" sub_id = ord(data[:1]) if sub_id & 0x80 == 0x80: