solaar: make hid-parser an optional dependency
This commit is contained in:
parent
9ce0fd7060
commit
8d0795af53
|
@ -1,3 +0,0 @@
|
||||||
[submodule "python-hid-parser"]
|
|
||||||
path = python-hid-parser
|
|
||||||
url = https://github.com/usb-tools/python-hid-parser
|
|
|
@ -7,8 +7,7 @@ layout: page
|
||||||
|
|
||||||
## Downloading
|
## Downloading
|
||||||
|
|
||||||
Clone Solaar from GitHub by `git clone --recurse-submodules https://github.com/pwr-Solaar/Solaar.git`.
|
Clone Solaar from GitHub by `git clone https://github.com/pwr-Solaar/Solaar.git`.
|
||||||
Make sure that the submodule python-hid-parser was cloned, i.e., the directory `python-hid-parser` has content.
|
|
||||||
|
|
||||||
## Requirements for Solaar
|
## Requirements for Solaar
|
||||||
|
|
||||||
|
@ -33,6 +32,11 @@ in Fedora you need `gtk3` and `python3-gobject`.
|
||||||
You may have to install `gcc` and the Python development package (`python3-dev` or `python3-devel`,
|
You may have to install `gcc` and the Python development package (`python3-dev` or `python3-devel`,
|
||||||
depending on your distribution).
|
depending on your distribution).
|
||||||
|
|
||||||
|
If the `hid_parser` Python package is available, Solaar parses HID report descriptors
|
||||||
|
and can control more HID++ devices that do not use a receiver.
|
||||||
|
This package may not be available in some distributions but can be installed using pip
|
||||||
|
via `pip install --user hid-parser`.
|
||||||
|
|
||||||
If you are running a version of Python different from the system version,
|
If you are running a version of Python different from the system version,
|
||||||
you may need to use pip to install projects that provide the above Python packages.
|
you may need to use pip to install projects that provide the above Python packages.
|
||||||
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
../python-hid-parser/hid_parser
|
|
|
@ -36,8 +36,6 @@ from select import select as _select
|
||||||
from time import sleep
|
from time import sleep
|
||||||
from time import time as _timestamp
|
from time import time as _timestamp
|
||||||
|
|
||||||
from hid_parser import ReportDescriptor as _ReportDescriptor
|
|
||||||
from hid_parser import Usage as _Usage
|
|
||||||
from pyudev import Context as _Context
|
from pyudev import Context as _Context
|
||||||
from pyudev import Device as _Device
|
from pyudev import Device as _Device
|
||||||
from pyudev import DeviceNotFoundError
|
from pyudev import DeviceNotFoundError
|
||||||
|
@ -103,8 +101,13 @@ def _match(action, device, filterfn):
|
||||||
if not hid_id:
|
if not hid_id:
|
||||||
return # there are reports that sometimes the id isn't set up right so be defensive
|
return # there are reports that sometimes the id isn't set up right so be defensive
|
||||||
bid, vid, pid = hid_id.split(':')
|
bid, vid, pid = hid_id.split(':')
|
||||||
|
hid_hid_device = hid_device.find_parent('hid')
|
||||||
|
if hid_hid_device:
|
||||||
|
return # these are devices connected through a receiver so don't pick them up here
|
||||||
|
|
||||||
try: # if report descriptor does not indicate HID++ capabilities then this device is not of interest to Solaar
|
try: # if report descriptor does not indicate HID++ capabilities then this device is not of interest to Solaar
|
||||||
|
from hid_parser import ReportDescriptor as _ReportDescriptor
|
||||||
|
from hid_parser import Usage as _Usage
|
||||||
hidpp_short = hidpp_long = False
|
hidpp_short = hidpp_long = False
|
||||||
devfile = '/sys' + hid_device.get('DEVPATH') + '/report_descriptor'
|
devfile = '/sys' + hid_device.get('DEVPATH') + '/report_descriptor'
|
||||||
with fileopen(devfile, 'rb') as fd:
|
with fileopen(devfile, 'rb') as fd:
|
||||||
|
@ -122,9 +125,6 @@ def _match(action, device, filterfn):
|
||||||
except Exception as e: # if can't process report descriptor fall back to old scheme
|
except Exception as e: # if can't process report descriptor fall back to old scheme
|
||||||
hidpp_short = hidpp_long = None
|
hidpp_short = hidpp_long = None
|
||||||
_log.warn('Report Descriptor not processed for BID %s VID %s PID %s: %s', bid, vid, pid, e)
|
_log.warn('Report Descriptor not processed for BID %s VID %s PID %s: %s', bid, vid, pid, e)
|
||||||
hid_hid_device = hid_device.find_parent('hid')
|
|
||||||
if hid_hid_device:
|
|
||||||
return # these are devices connected through a receiver so don't pick them up here
|
|
||||||
|
|
||||||
filter = filterfn(int(bid, 16), int(vid, 16), int(pid, 16), hidpp_short, hidpp_long)
|
filter = filterfn(int(bid, 16), int(vid, 16), int(pid, 16), hidpp_short, hidpp_long)
|
||||||
if not filter:
|
if not filter:
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit 4b7944f4999e152c678cd7fa76278b7e2535c3ff
|
|
6
setup.py
6
setup.py
|
@ -67,8 +67,12 @@ For instructions on installing Solaar see https://pwr-solaar.github.io/Solaar/in
|
||||||
'python-xlib (>= 0.27)',
|
'python-xlib (>= 0.27)',
|
||||||
'psutil (>= 5.4.3)',
|
'psutil (>= 5.4.3)',
|
||||||
],
|
],
|
||||||
|
extras_require={
|
||||||
|
'report-descriptor': ['hid-parser'],
|
||||||
|
'desktop-notifications': ['Notify (>= 0.7)'],
|
||||||
|
},
|
||||||
package_dir={'': 'lib'},
|
package_dir={'': 'lib'},
|
||||||
packages=['keysyms', 'hidapi', 'hid_parser', 'logitech_receiver', 'solaar', 'solaar.ui', 'solaar.cli'],
|
packages=['keysyms', 'hidapi', 'logitech_receiver', 'solaar', 'solaar.ui', 'solaar.cli'],
|
||||||
data_files=list(_data_files()),
|
data_files=list(_data_files()),
|
||||||
scripts=_glob('bin/*'),
|
scripts=_glob('bin/*'),
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue