diff --git a/lib/hidapi/__init__.py b/lib/hidapi/__init__.py index 06fd2d64..e69de29b 100644 --- a/lib/hidapi/__init__.py +++ b/lib/hidapi/__init__.py @@ -1,47 +0,0 @@ -## Copyright (C) 2012-2013 Daniel Pavel -## -## This program is free software; you can redistribute it and/or modify -## it under the terms of the GNU General Public License as published by -## the Free Software Foundation; either version 2 of the License, or -## (at your option) any later version. -## -## This program is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -## GNU General Public License for more details. -## -## You should have received a copy of the GNU General Public License along -## with this program; if not, write to the Free Software Foundation, Inc., -## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -"""Generic Human Interface Device API.""" - -import platform - -if platform.system() in ("Darwin", "Windows"): - from hidapi.hidapi_impl import close # noqa: F401 - from hidapi.hidapi_impl import enumerate # noqa: F401 - from hidapi.hidapi_impl import find_paired_node # noqa: F401 - from hidapi.hidapi_impl import find_paired_node_wpid # noqa: F401 - from hidapi.hidapi_impl import get_manufacturer # noqa: F401 - from hidapi.hidapi_impl import get_product # noqa: F401 - from hidapi.hidapi_impl import get_serial # noqa: F401 - from hidapi.hidapi_impl import monitor_glib # noqa: F401 - from hidapi.hidapi_impl import open # noqa: F401 - from hidapi.hidapi_impl import open_path # noqa: F401 - from hidapi.hidapi_impl import read # noqa: F401 - from hidapi.hidapi_impl import write # noqa: F401 -else: - from hidapi.udev_impl import close # noqa: F401 - from hidapi.udev_impl import enumerate # noqa: F401 - from hidapi.udev_impl import find_paired_node # noqa: F401 - from hidapi.udev_impl import find_paired_node_wpid # noqa: F401 - from hidapi.udev_impl import get_manufacturer # noqa: F401 - from hidapi.udev_impl import get_product # noqa: F401 - from hidapi.udev_impl import get_serial # noqa: F401 - from hidapi.udev_impl import monitor_glib # noqa: F401 - from hidapi.udev_impl import open # noqa: F401 - from hidapi.udev_impl import open_path # noqa: F401 - from hidapi.udev_impl import read # noqa: F401 - from hidapi.udev_impl import write # noqa: F401 - -__version__ = "0.9" diff --git a/lib/hidapi/hidconsole.py b/lib/hidapi/hidconsole.py index e418e945..11b9ff9c 100644 --- a/lib/hidapi/hidconsole.py +++ b/lib/hidapi/hidconsole.py @@ -17,6 +17,7 @@ import argparse import os import os.path +import platform import readline import sys import time @@ -27,7 +28,10 @@ from select import select from threading import Lock from threading import Thread -import hidapi +if platform.system() == "Linux": + import hidapi.udev_impl as hidapi +else: + import hidapi.hidapi_impl as hidapi LOGITECH_VENDOR_ID = 0x046D diff --git a/lib/logitech_receiver/base.py b/lib/logitech_receiver/base.py index 0a8253c7..31f258c4 100644 --- a/lib/logitech_receiver/base.py +++ b/lib/logitech_receiver/base.py @@ -21,6 +21,7 @@ from __future__ import annotations import dataclasses import logging +import platform import struct import threading import typing @@ -31,7 +32,6 @@ from time import time from typing import Any import gi -import hidapi from . import base_usb from . import common @@ -47,6 +47,11 @@ if typing.TYPE_CHECKING: gi.require_version("Gdk", "3.0") from gi.repository import GLib # NOQA: E402 +if platform.system() == "Linux": + import hidapi.udev_impl as hidapi +else: + import hidapi.hidapi_impl as hidapi + logger = logging.getLogger(__name__) _hidpp20 = hidpp20.Hidpp20() diff --git a/lib/solaar/cli/__init__.py b/lib/solaar/cli/__init__.py index 927b871c..1eca8544 100644 --- a/lib/solaar/cli/__init__.py +++ b/lib/solaar/cli/__init__.py @@ -16,6 +16,7 @@ import argparse import logging +import platform import sys from importlib import import_module @@ -28,6 +29,11 @@ from logitech_receiver import receiver from solaar import NAME +if platform.system() == "Linux": + import hidapi.udev_impl as hidapi +else: + import hidapi.hidapi_impl as hidapi + logger = logging.getLogger(__name__) @@ -106,7 +112,7 @@ def _receivers(dev_path=None): if dev_path is not None and dev_path != dev_info.path: continue try: - r = receiver.ReceiverFactory.create_receiver(dev_info) + r = receiver.ReceiverFactory.create_receiver(hidapi.find_paired_node_wpid, dev_info) if logger.isEnabledFor(logging.DEBUG): logger.debug("[%s] => %s", dev_info.path, r) if r: @@ -122,9 +128,9 @@ def _receivers_and_devices(dev_path=None): continue try: if dev_info.isDevice: - d = device.DeviceFactory.create_device(base, dev_info) + d = device.DeviceFactory.create_device(hidapi.find_paired_node, base, dev_info) else: - d = receiver.ReceiverFactory.create_receiver(dev_info) + d = receiver.ReceiverFactory.create_receiver(hidapi.find_paired_node_wpid, dev_info) if logger.isEnabledFor(logging.DEBUG): logger.debug("[%s] => %s", dev_info.path, d) diff --git a/lib/solaar/listener.py b/lib/solaar/listener.py index 66df8ea6..3b6d45e4 100644 --- a/lib/solaar/listener.py +++ b/lib/solaar/listener.py @@ -17,6 +17,7 @@ import errno import logging +import platform import subprocess import time @@ -24,7 +25,6 @@ from collections import namedtuple from functools import partial import gi -import hidapi import logitech_receiver from logitech_receiver import base @@ -40,6 +40,11 @@ from . import i18n gi.require_version("Gtk", "3.0") # NOQA: E402 from gi.repository import GLib # NOQA: E402 # isort:skip +if platform.system() == "Linux": + import hidapi.udev_impl as hidapi +else: + import hidapi.hidapi_impl as hidapi + logger = logging.getLogger(__name__) _GHOST_DEVICE = namedtuple("_GHOST_DEVICE", ("receiver", "number", "name", "kind", "online")) diff --git a/tests/hidapi/test_hidapi.py b/tests/hidapi/test_hidapi.py index 2695e425..aef76891 100644 --- a/tests/hidapi/test_hidapi.py +++ b/tests/hidapi/test_hidapi.py @@ -1,6 +1,11 @@ +import platform + from unittest import mock -import hidapi +if platform.system() == "Linux": + import hidapi.udev_impl as hidapi +else: + import hidapi.hidapi_impl as hidapi def test_find_paired_node(): diff --git a/tests/logitech_receiver/test_receiver.py b/tests/logitech_receiver/test_receiver.py index 484a04c4..01f02989 100644 --- a/tests/logitech_receiver/test_receiver.py +++ b/tests/logitech_receiver/test_receiver.py @@ -13,6 +13,11 @@ from logitech_receiver import receiver from . import fake_hidpp +if platform.system() == "Linux": + import hidapi.udev_impl as hidapi +else: + import hidapi.hidapi_impl as hidapi + @pytest.mark.parametrize( "index, expected_kind", @@ -113,7 +118,7 @@ c534_info = {"kind": common.NamedInt(0, "unknown"), "polling": "", "power_switch (DeviceInfo("14"), responses_lacking, 0x14, None, 1), ], ) -def test_ReceiverFactory_create_receiver(device_info, responses, handle, serial, max_devices, mock_base): +def test_receiver_factory_create_receiver(device_info, responses, handle, serial, max_devices, mock_base): mock_base[0].side_effect = fake_hidpp.open_path mock_base[1].side_effect = partial(fake_hidpp.request, responses) find_paired_node_wpid_func = hidapi.find_paired_node_wpid @@ -140,7 +145,9 @@ def test_ReceiverFactory_create_receiver(device_info, responses, handle, serial, (DeviceInfo("13", product_id=0xCCCC), responses_unusual, None, None, -1, c534_info, 3), ], ) -def test_ReceiverFactory_props(device_info, responses, firmware, codename, remaining_pairings, pairing_info, count, mock_base): +def test_receiver_factory_props( + device_info, responses, firmware, codename, remaining_pairings, pairing_info, count, mock_base +): mock_base[0].side_effect = fake_hidpp.open_path mock_base[1].side_effect = partial(fake_hidpp.request, responses) @@ -162,7 +169,7 @@ def test_ReceiverFactory_props(device_info, responses, firmware, codename, remai (DeviceInfo("13", product_id=0xCCCC), responses_unusual, "No paired devices.", ""), ], ) -def test_ReceiverFactory_string(device_info, responses, status_str, strng, mock_base): +def test_receiver_factory_string(device_info, responses, status_str, strng, mock_base): mock_base[0].side_effect = fake_hidpp.open_path mock_base[1].side_effect = partial(fake_hidpp.request, responses) @@ -180,7 +187,7 @@ def test_ReceiverFactory_string(device_info, responses, status_str, strng, mock_ (DeviceInfo("14", product_id="C534"), responses_lacking), ], ) -def test_ReceiverFactory_nodevice(device_info, responses, mock_base): +def test_receiver_factory_nodevice(device_info, responses, mock_base): mock_base[0].side_effect = fake_hidpp.open_path mock_base[1].side_effect = partial(fake_hidpp.request, responses)