settings: ignore hidden features

This commit is contained in:
Peter F. Patel-Schneider 2025-10-26 16:19:35 -04:00
parent 44a647499c
commit 2cb5fa4b97
3 changed files with 67 additions and 49 deletions

View File

@ -1,59 +1,62 @@
Solaar version 1.1.3
Solaar version 1.1.14
1: PRO X Wireless
2: PRO X Wireless
Device path : None
WPID : 4093
Codename : PRO X
Kind : mouse
Protocol : HID++ 4.2
Polling rate : 8 ms (125Hz)
Serial number: 42F42E12
Report Rate : 1ms
Serial number: 8B24D1D1
Model ID: 4093C0940000
Unit ID: 42F42E12
Bootloader: BL1 25.00.B0013
Other:
Firmware: MPM 25.01.B0018
Unit ID: 8B24D1D1
1: BL1 25.01.B0018
3:
0: MPM 25.01.B0018
Supports 28 HID++ 2.0 features:
0: ROOT {0000}
1: FEATURE SET {0001}
2: DEVICE FW VERSION {0003}
Firmware: Bootloader BL1 25.00.B0013 AB00BE657A82
Firmware: Other
Firmware: Firmware MPM 25.01.B0018 4093FE92436C
Unit ID: 42F42E12 Model ID: 4093C0940000 Transport IDs: {'wpid': '4093', 'usbid': 'C094'}
3: DEVICE NAME {0005}
0: ROOT {0000} V0
1: FEATURE SET {0001} V0
2: DEVICE FW VERSION {0003} V3
Firmware: 1 BL1 25.01.B0018 AB00FE92436C
Firmware: 3
Firmware: 0 MPM 25.01.B0018 4093FE92436C
Unit ID: 8B24D1D1 Model ID: 4093C0940000 Transport IDs: {'wpid': '4093', 'usbid': 'C094'}
3: DEVICE NAME {0005} V0
Name: PRO X Wireless
Kind: mouse
4: WIRELESS DEVICE STATUS {1D4B}
5: RESET {0020}
6: UNIFIED BATTERY {1004}
7: COLOR LED EFFECTS {8070} internal, hidden
8: ONBOARD PROFILES {8100}
Device Mode: Host
Onboard Profiles (saved): Disable
Onboard Profiles : Disable
9: MOUSE BUTTON SPY {8110}
10: REPORT RATE {8060}
Polling Rate (ms): 1
Polling Rate (ms) (saved): 1
Polling Rate (ms) : 1
11: ADJUSTABLE DPI {2201}
Sensitivity (DPI) (saved): 1000
Sensitivity (DPI) : 1000
12: unknown:1500 {1500}
13: DEVICE RESET {1802} internal, hidden
14: unknown:1803 {1803} internal, hidden
15: CONFIG DEVICE PROPS {1806} internal, hidden
16: unknown:1811 {1811} internal, hidden
17: OOBSTATE {1805} internal, hidden
18: unknown:1830 {1830} internal, hidden
19: unknown:1890 {1890} internal, hidden
20: unknown:1891 {1891} internal, hidden
21: unknown:18A1 {18A1} internal, hidden
22: unknown:1801 {1801} internal, hidden
23: unknown:18B1 {18B1} internal, hidden
24: unknown:1E00 {1E00} hidden
25: unknown:1EB0 {1EB0} internal, hidden
26: unknown:1863 {1863} internal, hidden
27: unknown:1E22 {1E22} internal, hidden
Battery: 76%, discharging.
4: WIRELESS DEVICE STATUS {1D4B} V0
5: CONFIG CHANGE {0020} V0
Configuration: 11000000000000000000000000000000
6: UNIFIED BATTERY {1004} V1
Battery: 71%, 0.
7: COLOR LED EFFECTS {8070} V4 internal, hidden
LED Control : HID++ error {'number': 2, 'request': 1908, 'error': 5, 'params': b''}
8: ONBOARD PROFILES {8100} V0
Device Mode: On-Board
Onboard Profiles (saved): Profile 1
Onboard Profiles : Profile 1
9: MOUSE BUTTON SPY {8110} V0
10: REPORT RATE {8060} V0
Report Rate: 1ms
Report Rate (saved): 1ms
Report Rate : 1ms
11: ADJUSTABLE DPI {2201} V2
Sensitivity (DPI) (saved): 800
Sensitivity (DPI) : 800
12: FORCE PAIRING {1500} V0
13: DEVICE RESET {1802} V0 internal, hidden
14: unknown:1803 {1803} V0 internal, hidden
15: CONFIG DEVICE PROPS {1806} V4 internal, hidden
16: unknown:1811 {1811} V0 internal, hidden
17: OOBSTATE {1805} V0 internal, hidden
18: unknown:1830 {1830} V0 internal, hidden
19: unknown:1890 {1890} V5 internal, hidden
20: unknown:1891 {1891} V5 internal, hidden
21: unknown:18A1 {18A1} V0 internal, hidden
22: unknown:1801 {1801} V0 internal, hidden
23: unknown:18B1 {18B1} V0 internal, hidden
24: unknown:1E00 {1E00} V0 hidden
25: unknown:1EB0 {1EB0} V0 internal, hidden
26: unknown:1863 {1863} V0 internal, hidden
27: unknown:1E22 {1E22} V0 internal, hidden
Battery: 71%, 0.

View File

@ -47,6 +47,7 @@ from .hidpp20_constants import DEVICE_KIND
from .hidpp20_constants import ChargeLevel
from .hidpp20_constants import ChargeType
from .hidpp20_constants import ErrorCode
from .hidpp20_constants import FeatureFlag
from .hidpp20_constants import GestureId
from .hidpp20_constants import ParamId
from .hidpp20_constants import SupportedFeature
@ -137,6 +138,7 @@ class FeaturesArray(dict):
self.device = device
self.inverse = {}
self.version = {}
self.flags = {}
self.count = 0
def _check(self) -> bool:
@ -183,6 +185,7 @@ class FeaturesArray(dict):
feature = f"unknown:{data:04X}"
self[feature] = index
self.version[feature] = response[3]
self.flags[feature] = response[2]
return feature
def enumerate(self): # return all features and their index, ordered by index
@ -195,6 +198,15 @@ class FeaturesArray(dict):
if self[feature]:
return self.version.get(feature, 0)
def get_flags(self, feature: NamedInt) -> Optional[int]:
if self[feature]:
return self.flags.get(feature, 0)
def get_hidden(self, feature: NamedInt) -> Optional[bool]:
if self[feature]:
return self.flags.get(feature, 0) & FeatureFlag.INTERNAL
return True
def __contains__(self, feature: NamedInt) -> bool:
try:
index = self.__getitem__(feature)
@ -215,6 +227,7 @@ class FeaturesArray(dict):
index = response[0]
self[feature] = index if index else False
self.version[feature] = response[2]
self.flags[feature] = response[1]
return index if index else False
def __setitem__(self, feature, index):

View File

@ -1898,6 +1898,8 @@ def check_feature(device, settings_class: SettingsProtocol) -> None | bool | Set
return
if settings_class.min_version > device.features.get_feature_version(settings_class.feature):
return
if device.features.get_hidden(settings_class.feature):
return
try:
detected = settings_class.build(device)
if logger.isEnabledFor(logging.DEBUG):