Commit Graph

119 Commits

Author SHA1 Message Date
Ken Sanislo fc874710cd Add CenturionCoreFeature enum for colliding feature IDs
Centurion transport reuses HID++ 2.0 feature IDs 0x0000, 0x0001,
0x0003, 0x0005, 0x0007 with different meanings. Since SupportedFeature
(IntEnum) requires unique values, create a separate CenturionCoreFeature
enum and resolve_feature() helper for transport-aware lookup.

Also replace the +0x100 offset hack in FeaturesArray.inverse with a
dedicated sub_inverse dict for sub-device feature indexing.
2026-04-12 14:51:54 -07:00
Ken Sanislo 9e36ede037 Add vertical graphic EQ slider widget for headset equalizer
Replace horizontal slider rows with a traditional graphic EQ layout
using vertical sliders side-by-side, with dB value display and
frequency labels per band.
2026-04-12 14:51:54 -07:00
Ken Sanislo 8bdb49feec Remove static PRO X 2 descriptor; fully probe Centurion devices at runtime
Replace the hardcoded descriptor entry with dynamic discovery of all device
properties via the Centurion protocol. The headset name, kind, serial,
firmware, and battery are now probed at runtime — matching how the device
actually presents itself rather than relying on static data.

Key changes:
- Discover sub-device features via CentPPBridge and route requests through
  the bridge automatically
- Infer device kind from feature IDs (0x06xx = headset) for both wireless
  and direct USB connections
- Read device name from USB product string with protocol probe fallback
- Parse bridge error responses (sub_feat_idx=0xFF) instead of timing out
- Handle unknown HID++ error codes gracefully in base.py
- Fix firmware deduplication for Centurion parent devices
- Prefer sub-device serial/firmware over parent (non-printable) values
- Add Centurion-aware display in solaar show with parent/sub-device sections
- Support both wireless (0AF7 dongle) and direct USB (0AF8) connections
2026-04-12 14:51:54 -07:00
Ken Sanislo 693741f216 Add Centurion transport and PRO X 2 LIGHTSPEED headset support
Adds support for the Logitech PRO X 2 LIGHTSPEED Gaming Headset (PID 0x0AF7)
which uses the Centurion transport protocol (report ID 0x51 on USB usage page
0xFFA0) instead of standard HID++ report IDs.

Changes:
- HID enumeration: detect Centurion devices via report descriptor parsing
  (usage page 0xFFA0, report ID 0x51, 63-byte frames)
- Centurion transport: wrap/unwrap HID++ 2.0 frames in Centurion framing
  for write, read, and ping operations
- Feature discovery: enumerate features individually on Centurion devices
  (different response format: [remaining_count, feat_hi, feat_lo])
- Device descriptor for PRO X 2 LIGHTSPEED Gaming Headset
- New feature enum entries for Centurion-era headset features (0x06xx)
- CenturionRawRW class for write-only headset settings controlled via
  raw Centurion commands reverse-engineered from HeadsetControl
- HeadsetSidetone setting (0-100 range, persisted locally)

Known limitations:
- Only sidetone control is implemented; other features need RE work
- Settings are write-only (no read-back from device)
- Headset features (0x06xx) not discoverable via IRoot; registered manually
2026-04-12 14:51:54 -07:00
danicc097 817c90e561
replace color picker (#3028)
* replace color picker
2025-11-15 11:05:59 -05:00
Peter F. Patel-Schneider 0fd262424e settings: add setting for HAPTIC feature 2025-11-12 14:50:46 -05:00
Peter F. Patel-Schneider f739331dc2 settings: add new settings type for structure-backed setting 2025-11-12 14:33:34 -05:00
Peter F. Patel-Schneider 198067519d settings: better support RGB Effects - not readable 2025-03-03 14:11:09 -05:00
MattHag 5a9725ee17 Add type hints
Related #2273
2025-01-01 10:46:04 -05:00
MattHag 3636ed78bb Refactor: Convert Kind to IntEnum
Related #2273
2025-01-01 10:46:04 -05:00
MattHag 03de6fb276 Split up huge settings module
- Move validators into their own module.
- Convert Kind to IntEnum

Related #2273
2025-01-01 10:46:04 -05:00
MattHag 0cd9c0c9b5 Refactor: Introduce Feature enum
Convert Feature NamedInts to SupportedFeature integer enum.

Related #2273
2024-10-14 07:28:09 -04:00
MattHag 46366b2430 Fix warnings from automatic code inspections
Warnings found by automatic code inspection and partially tackled
- Drop distuitls inf favour of setuptools
- Replace deprecated pyudev.Device.from_device_number
- Remove unnecessary brackets
- Avoid access to private variables etc.
- Shadows built-in name
- Line length >120 characters
- Not a module level variable
- Simplify clause
and more
2024-10-11 07:42:38 -04:00
MattHag 89233957dc settings: Add tests 2024-10-11 07:42:38 -04:00
MattHag be83dac209
hid: Convert definition of HID registers to enum
* Refactor HID Register definitions

Use enums for distinct type hints, easy discovery of registers.
Make constants uppercase and benefit from enum auto-completion.

Related #2273

* Improve type hints: Registers
2024-06-02 10:34:00 -04:00
MattHag 815dce07be Unify imports in logitech package
Related #2273
2024-05-23 16:42:18 -04:00
MistificaT0r 4225fce8d7
po: update Russion translation and have all strings translated
* update Russian translation

* Fixed translation display in GUI

* fix checks / Fixed translation display in GUI
2024-04-21 11:36:39 -04:00
Peter F. Patel-Schneider d12575b47d tests: test GESTURES settings 2024-04-13 18:38:44 -04:00
Peter F. Patel-Schneider afe04b9804 settings: remove unused code and fix but in EQUALIZER setting 2024-03-27 11:15:15 -04:00
Peter F. Patel-Schneider 1a874c39d7 settings: permit continuing when a read during pushing fails 2024-03-24 15:44:15 -04:00
Peter F. Patel-Schneider 17bbc9c4ea settings: simple change to improve testability 2024-03-23 10:11:30 -04:00
Matthias Hagmann e92f1a8a0b Automatically upgrade strings to f-string
Used flynt to convert strings to f-strings, where safely possible.

Usage:
flynt .

Related #2372
2024-03-13 11:02:50 -04:00
Matthias Hagmann 7ef3059b69 clean up: Remove editor specific marks
Related #2273
2024-02-29 10:10:46 -05:00
Peter F. Patel-Schneider 67be689866 device: reorder code in settings 2024-02-25 07:23:03 -05:00
Matthias Hagmann eb937fcc3a Manually fix linter issues
Related #2295
2024-02-20 15:41:10 -05:00
Matthias Hagmann 7774569971 Apply ruff format
Run ruff auto formatting using:
ruff format .

Related #2295
2024-02-20 15:41:10 -05:00
Peter F. Patel-Schneider ed248c62b9 device: add callback to call when changing a setting 2024-02-20 06:19:23 -05:00
Matthias Hagmann 5f487dd3b2 logitech_receiver: Move hidpp20 constants into new module
Related #1097
2024-02-20 05:58:33 -05:00
MattHag 87658fb189
logging: Simplify logger instantiation
* logging: Simplify logger instantiation

Relates #2254

* logging: Remove aliases

Relates #2254

* logging: Replace deprecated warn with warning

Related #2254

* logging: Fix mistake

Related #2257
2024-02-10 13:55:27 -05:00
Peter F. Patel-Schneider 23517048d4 device: clean up data for LED effects 2024-02-09 08:36:36 -05:00
Peter F. Patel-Schneider 7c441cc652 ui: better startup behavior for LED effect settings 2024-02-09 08:36:36 -05:00
Peter F. Patel-Schneider 73d091c86f ui: add UI for LED Zone control 2024-02-09 08:36:36 -05:00
Peter F. Patel-Schneider 3328a6085f device: add settings for LED Zone control 2024-02-09 08:36:36 -05:00
Peter F. Patel-Schneider 72c5860a1e device: support backlight levels and duration 2024-02-06 12:49:08 -05:00
Peter F. Patel-Schneider 79de531858 settings: read and check before write for range settings 2023-01-09 13:22:45 -05:00
Peter F. Patel-Schneider 99f9c8762e settings: only record changes of scroll wheel ratchet 2022-12-09 06:59:37 -05:00
ejsc1 5656f90cdb
misc: update yapf version
* misc: update yapf version v2

* Update .pre-commit-config.yaml

Co-authored-by: Peter F. Patel-Schneider <pfpschneider@gmail.com>
2022-11-26 22:37:32 -05:00
Peter F. Patel-Schneider 67c1d7e778 settings: don't add non-existant key in raw xy processing 2022-10-13 16:00:15 -04:00
Peter F. Patel-Schneider 55cc8ed5dc settings: add optional save argument to write_key_value methods 2022-10-06 22:00:38 -04:00
Peter F. Patel-Schneider 5ed4c05db8 device: add conditional delay to apply all to get around race with Linux driver 2022-09-15 09:51:24 -04:00
Peter F. Patel-Schneider cacf94b6f7 settings: allow multiple keys for mouse gestures and dpi sliding 2022-07-23 06:44:57 -04:00
Peter F. Patel-Schneider c741b372e1 settings: remove unused class variables 2022-06-29 09:56:14 -04:00
Peter F. Patel-Schneider 5dc9be0a04 settings: differentiate debug messages for different setting types 2022-06-21 18:39:37 -04:00
Peter F. Patel-Schneider 777a7138c1 settings: add packed ranges setting 2022-06-21 18:39:37 -04:00
Peter F. Patel-Schneider f1e2a0c449 receiver: use built-ins for conversions between int and byte string 2022-06-21 18:39:37 -04:00
Peter F. Patel-Schneider 85bcfe7310 device: fix bug in feature lookup 2022-04-29 07:24:26 -04:00
Peter F. Patel-Schneider fb74e3b657 settings: store None in persister for non-persisting settings 2022-04-26 09:03:20 -04:00
Peter F. Patel-Schneider 3ca97cccd1 settings: fix determination of whether to read before writing boolean setting 2022-04-15 09:21:08 -04:00
Kian-Meng Ang 15b92a0f40
misc: Fix typos 2022-04-12 17:18:11 -04:00
Peter F. Patel-Schneider bb20631a27 misc: remove support for Python 2 unicode 2022-04-11 13:20:42 -04:00