Support for Logitech MX Master Mice

The button is now recognised (button 10) when I click on it over the grey zone.
I could assign an action, and the action is triggered when pressing on that button.

Thank you!

However, I do not see the ‘custom’ entry in the “mouse button and scroll actions”.
It is not important for me since the button is now recognized on the grey area.
I am only reporting it because the Logitech support page mentions that option: Logitech Mouse Support · BetterTouchTool Documentation

ah that page is already outdated :slight_smile: I'll update it later today!

For reference, here are the Logitech logs when using 6.081

LOGI LOG: ========================================
LOGI LOG: BTT Logitech Debug Information
LOGI LOG: Timestamp: 2026-01-20 16:32:58
LOGI LOG: macOS: Version 26.3 (assemblage 25D5101c)
LOGI LOG: ========================================
LOGI LOG: 
LOGI LOG: Step 1: Stopping Logitech Manager...
LOGI LOG: BTTLogitechManager: Stopping...
LOGI LOG: BTTLogitechManager: Setting ONBOARD mode on 6 device(s) before shutdown...
LOGI LOG: BTTLogitechManager: ✅ ONBOARD mode set on 0 device(s), skipped 6 (shutdown complete)
LOGI LOG: BTTHIDPPProtocol: ❌ Unregistered protocol 0xca2cd8230 for deviceIndex 1 (remaining protocols for this device: 5)
LOGI LOG: BTTHIDPPProtocol: Skipping all IOKit cleanup (shared device for receiver slot 1)
LOGI LOG: BTTHIDPPProtocol: ❌ Unregistered protocol 0xca2cd8230 for deviceIndex 1 (remaining protocols for this device: 5)
LOGI LOG: BTTHIDPPProtocol: Skipping all IOKit cleanup (shared device for receiver slot 1)
LOGI LOG: BTTHIDPPProtocol: ❌ Unregistered protocol 0xca2cd8cb0 for deviceIndex 2 (remaining protocols for this device: 4)
LOGI LOG: BTTHIDPPProtocol: Skipping all IOKit cleanup (shared device for receiver slot 2)
LOGI LOG: BTTHIDPPProtocol: ❌ Unregistered protocol 0xca2cd8cb0 for deviceIndex 2 (remaining protocols for this device: 4)
LOGI LOG: BTTHIDPPProtocol: Skipping all IOKit cleanup (shared device for receiver slot 2)
LOGI LOG: BTTHIDPPProtocol: ❌ Unregistered protocol 0xca2cd97a0 for deviceIndex 3 (remaining protocols for this device: 3)
LOGI LOG: BTTHIDPPProtocol: Skipping all IOKit cleanup (shared device for receiver slot 3)
LOGI LOG: BTTHIDPPProtocol: ❌ Unregistered protocol 0xca2cd97a0 for deviceIndex 3 (remaining protocols for this device: 3)
LOGI LOG: BTTHIDPPProtocol: Skipping all IOKit cleanup (shared device for receiver slot 3)
LOGI LOG: BTTHIDPPProtocol: ❌ Unregistered protocol 0xca2cd9880 for deviceIndex 4 (remaining protocols for this device: 2)
LOGI LOG: BTTHIDPPProtocol: Skipping all IOKit cleanup (shared device for receiver slot 4)
LOGI LOG: BTTHIDPPProtocol: ❌ Unregistered protocol 0xca2cd9880 for deviceIndex 4 (remaining protocols for this device: 2)
LOGI LOG: BTTHIDPPProtocol: Skipping all IOKit cleanup (shared device for receiver slot 4)
LOGI LOG: BTTHIDPPProtocol: ❌ Unregistered protocol 0xca2cda990 for deviceIndex 5 (remaining protocols for this device: 1)
LOGI LOG: BTTHIDPPProtocol: Skipping all IOKit cleanup (shared device for receiver slot 5)
LOGI LOG: BTTHIDPPProtocol: ❌ Unregistered protocol 0xca2cda990 for deviceIndex 5 (remaining protocols for this device: 1)
LOGI LOG: BTTHIDPPProtocol: Skipping all IOKit cleanup (shared device for receiver slot 5)
LOGI LOG: BTTHIDPPProtocol: ❌ Unregistered protocol 0xca4e5fa30 for deviceIndex 6 (remaining protocols for this device: 0)
LOGI LOG: BTTHIDPPProtocol: Last protocol for this device - will unregister callback
LOGI LOG: BTTHIDPPProtocol: Skipping all IOKit cleanup (shared device for receiver slot 6)
LOGI LOG: BTTHIDPPProtocol: Skipping all IOKit cleanup (shared device for receiver slot 6)
LOGI LOG: BTTLogitechManager: Stopped
LOGI LOG: Step 2: Restarting Logitech Manager...
LOGI LOG: BTTLogitechManager: Starting device discovery...
LOGI LOG: BTTLogitechManager: Started successfully
LOGI LOG: Step 3: Calling initializeLogitechMice...
LOGI LOG: BTTLogitechManager: Already running
LOGI LOG: 
==============================================
LOGI LOG: BTTLogitechManager: Scanning for Logitech Devices
LOGI LOG: ==============================================

LOGI LOG: No Logitech HID++ devices found.
LOGI LOG: 
💡 Make sure your device is:
LOGI LOG:    • Connected via USB, Bluetooth, or Unifying Receiver
LOGI LOG:    • Powered on
LOGI LOG:    • Using HID++ 2.0 protocol (most recent Logitech mice/keyboards)
LOGI LOG: Step 4: Waiting 5 seconds for device initialization...
LOGI LOG: BTTLogitechManager: Found HID interface - USB Receiver - Interface: 2, Usage Page: 0xFF00, Usage: 0x0001
LOGI LOG: BTTLogitechManager: ✅ Accepted - Vendor-specific HID++ interface (Interface 2)
LOGI LOG: BTTLogitechManager: Device connected - USB Receiver (046d:c52b)
LOGI LOG: BTTLogitechManager: 🔌 Receiver detected - setting up for slot enumeration...
LOGI LOG: BTTLogitechManager: Setting up receiver input callbacks...
LOGI LOG: BTTLogitechManager: ✓ Receiver callbacks registered and device opened
LOGI LOG: BTTLogitechManager: Enabling receiver notifications (flags: 0x000900)...
LOGI LOG: BTTLogitechManager: Sent HID++ 1.0 command: 10 FF 80 00 00 09 00
LOGI LOG: BTTLogitechManager: Found HID interface - USB Receiver - Interface: 0, Usage Page: 0x0001, Usage: 0x0006
LOGI LOG: BTTLogitechManager: Skipping interface (Usage Page: 0x0001, Usage: 0x0006, Interface: 0)
LOGI LOG: BTTLogitechManager: Found HID interface - USB Receiver - Interface: 1, Usage Page: 0x0001, Usage: 0x0002
LOGI LOG: BTTLogitechManager: Skipping interface (Usage Page: 0x0001, Usage: 0x0002, Interface: 1)
LOGI LOG: BTTLogitechManager: Enumerating receiver slots (simplified approach)...
LOGI LOG: BTTLogitechManager: Starting sequential slot enumeration (slots 1-6)...
LOGI LOG: BTTLogitechManager: Checking receiver slot 1...
LOGI LOG: BTTLogitechManager: Creating device for receiver slot 1...
LOGI LOG: BTTLogitechManager: Receiver retain count for slot 1: 3
LOGI LOG: BTTHIDPPDevice: Initializing with deviceIndex=1, IOHIDDevice retain count=3
LOGI LOG: BTTHIDPPDevice: Receiver slot 1 - using receiver IDs: 046d:c52b
LOGI LOG: Unknown device: USB Receiver (Slot) (046d:c52b) - using feature discovery, deviceIndex: 1, transport: USB
LOGI LOG: BTTHIDPPProtocol: Starting protocol (deviceIndex: 1, isSharedDevice: 1)...
LOGI LOG: BTTHIDPPProtocol: ✅ Registered protocol 0xca2cd9f80 for deviceIndex 1 (total protocols for this device: 1)
LOGI LOG: BTTHIDPPProtocol: Shared device - skipping open/schedule (already done by receiver setup)
LOGI LOG: BTTHIDPPProtocol: First protocol for this receiver - registering shared input callback
LOGI LOG: BTTHIDPPProtocol: Supports short reports: YES, long reports: YES
LOGI LOG: BTTLogitechManager: Created device for slot 1, discovering features...
LOGI LOG: BTTHIDPPFeatureCache: ✅ Found cached features for 046d:c52b:slot1 (cached 2026-01-20 11:34:36 +0000)
LOGI LOG: BTTHIDPPDevice: ⚡ Using cached features for USB Receiver (Slot) (34 features)
LOGI LOG: BTTHIDPPDevice: ⚡ Restoring cached device name: MX Vertical Advanced Ergonomic Mouse
LOGI LOG: BTTHIDPPProtocol: Pre-populated feature cache with 34 features
LOGI LOG: BTTHIDPPDevice: Cached protocol: 4.5
LOGI LOG: BTTHIDPPProtocol: ✅ Registered event handler for feature 0x1B04 (protocol 0xca2cd9f80, deviceIndex 1)
LOGI LOG:    Total event handlers registered: 1
LOGI LOG: Button Manager supported
LOGI LOG: DPI Manager supported
LOGI LOG: Battery Monitor supported (Legacy 0x1000)
LOGI LOG: Checking scroll wheel features...
LOGI LOG:   SmartShift (0x2110): ❌ NO
LOGI LOG:   SmartShift Enhanced (0x2111): ❌ NO
LOGI LOG:   HiRes Wheel (0x2121): ❌ NO
LOGI LOG:   Thumbwheel (0x2150): ❌ NO
LOGI LOG:   Wheel Analytics (0x2250): ✅ YES
LOGI LOG:   Wheel Mode Status (0x2251): ❌ NO
LOGI LOG: No scroll wheel features supported
LOGI LOG: BTTHIDPPDevice: Device type confirmed as MOUSE (has mouse-specific features)
LOGI LOG: Applying default device configuration...
LOGI LOG: 🔍 Attempting to query device name via HID++ feature 0x0005...
LOGI LOG: ✅ Device supports feature 0x0005, querying name length...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x03, address=0x08
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x03, func=0x00)
LOGI LOG: Device name length: 36 bytes
LOGI LOG: Reading device name chunk at offset 0/36...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x03, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x03, func=0x01)
LOGI LOG: Read 16 bytes: "MX Vertical Adva"
LOGI LOG: Reading device name chunk at offset 16/36...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x03, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x03, func=0x01)
LOGI LOG: Read 16 bytes: "nced Ergonomic M"
LOGI LOG: Reading device name chunk at offset 32/36...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x03, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x03, func=0x01)
LOGI LOG: Read 4 bytes: "ouse"
LOGI LOG: 📝 Device name assembled: "MX Vertical Advanced Ergonomic Mouse" (36 bytes)
LOGI LOG: ✅ Device name from HID++: MX Vertical Advanced Ergonomic Mouse
LOGI LOG: BTTHIDPPFeatureCache: 📝 Updated device name for 046d:c52b:slot1 to: MX Vertical Advanced Ergonomic Mouse
LOGI LOG: BTTLogitechManager: 📝 Device name updated to: MX Vertical Advanced Ergonomic Mouse
LOGI LOG: BTTLogitechManager: ✅ Device ready - MX Vertical Advanced Ergonomic Mouse (Protocol 4.5)
LOGI LOG: BTTLogitechManager: 🔍 Checking for pending setup requests for 'MX Vertical Advanced Ergonomic Mouse'...
LOGI LOG: BTTLogitechManager: ✅ Device ready in slot 1 - MX Vertical Advanced Ergonomic Mouse (Protocol 4.5)
LOGI LOG: BTTLogitechManager: 🔍 Checking for pending setup requests for 'MX Vertical Advanced Ergonomic Mouse'...
LOGI LOG: BTTHIDPPFeatureCache: Saved 2 device profiles to disk
LOGI LOG: BTTLogitechManager: ✅ Set macOS pointer settings for 'MX Vertical Advanced Ergonomic Mouse' (IOHIDDevice: 0x046D:0xC52B): speed=0.70, accel=10.00
LOGI LOG: BTTLogitechManager: Quick setup for 'MX Vertical Advanced Ergonomic Mouse'...
LOGI LOG: BTTLogitechManager: 🔒 Started quick setup for 'MX Vertical Advanced Ergonomic Mouse' (guard active)
LOGI LOG: BTTLogitechManager: ✅ Device 'MX Vertical Advanced Ergonomic Mouse' is ready, proceeding with quick setup
LOGI LOG: BTTLogitechManager: Stored pending LED effect for atomic profile write
LOGI LOG: BTTLogitechManager: Remapping buttons to standard mouse buttons for 'MX Vertical Advanced Ergonomic Mouse' (remapScrollTilt=0)...
LOGI LOG: BTTLogitechManager: Using runtime task ID remapping (0x1b04) - NO flash writes
LOGI LOG: BTTLogitechManager: Factory profiles preserved - buttons revert on disconnect
LOGI LOG: BTTHIDPPButtonCache: ✅ Found cached buttons for 046d:c52b:slot1 (7 buttons, cached 2026-01-20 14:58:37 +0000)
LOGI LOG: BTTHIDPPButtonManager: ⚡ Loaded 7 buttons from persistent cache (FAST STARTUP)
LOGI LOG: BTTLogitechManager: ⚡ Loaded 7 buttons from persistent cache for remapping (FAST STARTUP)
LOGI LOG: BTTLogitechManager: ⚡ Using 7 cached buttons for remapping
LOGI LOG: BTTLogitechManager: Found 7 buttons, analyzing task IDs...
LOGI LOG: BTTLogitechManager: Device 'MX Vertical Advanced Ergonomic Mouse' detected, isMXMaster4=0
LOGI LOG: BTTLogitechManager:   Processing button 0x0050, flags=0x11
LOGI LOG: BTTLogitechManager:   → Fixed mapping: 0x0050 (Left) → button 0
LOGI LOG: BTTLogitechManager:   Processing button 0x0051, flags=0x11
LOGI LOG: BTTLogitechManager:   → Fixed mapping: 0x0051 (Right) → button 1
LOGI LOG: BTTLogitechManager:   Processing button 0x0052, flags=0x71
LOGI LOG: BTTLogitechManager:   → Fixed mapping: 0x0052 (Middle) → button 2
LOGI LOG: BTTLogitechManager:   Processing button 0x0053, flags=0x71
LOGI LOG: BTTLogitechManager:   → Fixed mapping: 0x0053 (Back) → button 3
LOGI LOG: BTTLogitechManager:   Processing button 0x0056, flags=0x71
LOGI LOG: BTTLogitechManager:   → Fixed mapping: 0x0056 (Forward) → button 4
LOGI LOG: BTTLogitechManager:   Processing button 0x00FD, flags=0x71
LOGI LOG: BTTLogitechManager:   Processing button 0x00D7, flags=0xA0
LOGI LOG: BTTLogitechManager:   → Skipping non-reprogrammable button 0x00D7
LOGI LOG: BTTLogitechManager:   → Dynamic mapping: controlId 0x00FD → button 10 (sorted by controlId)
LOGI LOG: BTTLogitechManager: ✅ Created dynamic button mapping for 'MX Vertical Advanced Ergonomic Mouse' with 6 buttons
LOGI LOG: BTTLogitechManager: 🔄 Undiversting all reprogrammable buttons first to reset state...
LOGI LOG: BTTLogitechManager:   Skipping standard button 0x0050 (preserving default behavior)
LOGI LOG: BTTLogitechManager:   Skipping standard button 0x0051 (preserving default behavior)
LOGI LOG: BTTLogitechManager:   Skipping standard button 0x0052 (preserving default behavior)
LOGI LOG: BTTLogitechManager:   Skipping non-reprogrammable button 0x00D7 (flags=0xA0)
LOGI LOG: BTTLogitechManager: Checking receiver slot 2...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 3 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x03)
LOGI LOG: BTTLogitechManager: Creating device for receiver slot 2...
LOGI LOG: BTTLogitechManager: Receiver retain count for slot 2: 5
LOGI LOG: BTTHIDPPDevice: Initializing with deviceIndex=2, IOHIDDevice retain count=5
LOGI LOG: BTTHIDPPDevice: Receiver slot 2 - using receiver IDs: 046d:c52b
LOGI LOG: Unknown device: USB Receiver (Slot) (046d:c52b) - using feature discovery, deviceIndex: 2, transport: USB
LOGI LOG: BTTHIDPPProtocol: Starting protocol (deviceIndex: 2, isSharedDevice: 1)...
LOGI LOG: BTTHIDPPProtocol: ✅ Registered protocol 0xca2cd9730 for deviceIndex 2 (total protocols for this device: 2)
LOGI LOG: BTTHIDPPProtocol: Shared device - skipping open/schedule (already done by receiver setup)
LOGI LOG: BTTHIDPPProtocol: Input callback already registered by another slot - reusing it
LOGI LOG: BTTHIDPPProtocol: Supports short reports: YES, long reports: YES
LOGI LOG: BTTLogitechManager: Created device for slot 2, discovering features...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x03)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x03)
LOGI LOG: BTTLogitechManager: ✅ Undivert phase complete, proceeding with remapping...
LOGI LOG: BTTLogitechManager:   Preserving standard button 0x0050 (keeping default behavior)
LOGI LOG: BTTLogitechManager:   Preserving standard button 0x0051 (keeping default behavior)
LOGI LOG: BTTLogitechManager:   Preserving standard button 0x0052 (keeping default behavior)
LOGI LOG: BTTLogitechManager:   Remapping extra button 0x0053: task 0x003C → 0x005E
LOGI LOG: BTTLogitechManager:   Remapping extra button 0x0056: task 0x003E → 0x005F
LOGI LOG: BTTLogitechManager:   Remapping extra button 0x00FD: task 0x00D2 → 0x0060
LOGI LOG: BTTLogitechManager:   Skipping non-reprogrammable button 0x00D7
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 3 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x03)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x03)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x03)
LOGI LOG: BTTLogitechManager: ✅ Remapped 3 buttons via task IDs
LOGI LOG: BTTLogitechManager: No scroll wheel manager, skipping hi-res scroll
LOGI LOG: BTTLogitechManager: No scroll wheel manager, skipping main wheel invert
LOGI LOG: BTTLogitechManager: Setting DPI for 'MX Vertical Advanced Ergonomic Mouse' to 2000...
LOGI LOG: BTTLogitechManager: First-time DPI setup - enumerating sensors...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x12, address=0x08
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x12, func=0x00)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x12, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x12, func=0x01)
LOGI LOG: BTTHIDPPFeatureCache: ❌ No cached features for 046d:c52b:slot2
LOGI LOG: BTTHIDPPDevice: 🔍 No cached features for USB Receiver (Slot), performing full discovery...
LOGI LOG: BTTHIDPPProtocol: Detecting protocol version (deviceIndex: 2)...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x02, sub_id(featureIdx)=0x8F, address=0x00
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ❌ Protocol version detection failed: HID++ error: 0x09
LOGI LOG: BTTLogitechManager: ❌ Feature discovery failed for slot 2: HID++ error: 0x09
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x12, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x12, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x12, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x12, func=0x03)
LOGI LOG: BTTLogitechManager: ✅ DPI set to 2000 for 'MX Vertical Advanced Ergonomic Mouse' (sensor 0)
LOGI LOG: BTTLogitechManager: ❌ Device 'MX Vertical Advanced Ergonomic Mouse' does not support report rate control
LOGI LOG: BTTLogitechManager: ⚠️  Report rate setup failed: Device 'MX Vertical Advanced Ergonomic Mouse' does not support report rate control
LOGI LOG: BTTLogitechManager: Setting SmartShift for 'MX Vertical Advanced Ergonomic Mouse' (ratchet: 0, autoDisengage: 20, torque: 80)...
LOGI LOG: BTTLogitechManager: ⚠️  SmartShift setup failed: Device not found or doesn't support scroll wheel features
LOGI LOG: BTTLogitechManager: 🔓 Quick setup guard cleared for 'MX Vertical Advanced Ergonomic Mouse'
LOGI LOG: BTTLogitechManager: ✅ Quick setup complete for 'MX Vertical Advanced Ergonomic Mouse'
LOGI LOG: BTTLogitechManager: Checking receiver slot 3...
LOGI LOG: BTTHIDPPProtocol: ❌ No protocol instance found for device index 255 (0xFF), reportID=0x11
LOGI LOG: BTTHIDPPProtocol: Registry has 2 protocols for this device: (
    1,
    2
)
LOGI LOG:    - Device index 1 → protocol 0xca2cd9f80
LOGI LOG:    - Device index 2 → protocol 0xca2cd9730
LOGI LOG: BTTLogitechManager: Creating device for receiver slot 3...
LOGI LOG: BTTLogitechManager: Receiver retain count for slot 3: 7
LOGI LOG: BTTHIDPPDevice: Initializing with deviceIndex=3, IOHIDDevice retain count=7
LOGI LOG: BTTHIDPPDevice: Receiver slot 3 - using receiver IDs: 046d:c52b
LOGI LOG: Unknown device: USB Receiver (Slot) (046d:c52b) - using feature discovery, deviceIndex: 3, transport: USB
LOGI LOG: BTTHIDPPProtocol: Starting protocol (deviceIndex: 3, isSharedDevice: 1)...
LOGI LOG: BTTHIDPPProtocol: ✅ Registered protocol 0xca2cd8af0 for deviceIndex 3 (total protocols for this device: 3)
LOGI LOG: BTTHIDPPProtocol: Shared device - skipping open/schedule (already done by receiver setup)
LOGI LOG: BTTHIDPPProtocol: Input callback already registered by another slot - reusing it
LOGI LOG: BTTHIDPPProtocol: Supports short reports: YES, long reports: YES
LOGI LOG: BTTLogitechManager: Created device for slot 3, discovering features...
LOGI LOG: BTTHIDPPFeatureCache: ❌ No cached features for 046d:c52b:slot3
LOGI LOG: BTTHIDPPDevice: 🔍 No cached features for USB Receiver (Slot), performing full discovery...
LOGI LOG: BTTHIDPPProtocol: Detecting protocol version (deviceIndex: 3)...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x03, sub_id(featureIdx)=0x8F, address=0x00
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ❌ Protocol version detection failed: HID++ error: 0x09
LOGI LOG: BTTLogitechManager: ❌ Feature discovery failed for slot 3: HID++ error: 0x09
LOGI LOG: BTTLogitechManager: Checking receiver slot 4...
LOGI LOG: BTTHIDPPProtocol: ❌ No protocol instance found for device index 255 (0xFF), reportID=0x11
LOGI LOG: BTTHIDPPProtocol: Registry has 3 protocols for this device: (
    3,
    1,
    2
)
LOGI LOG:    - Device index 3 → protocol 0xca2cd8af0
LOGI LOG:    - Device index 1 → protocol 0xca2cd9f80
LOGI LOG:    - Device index 2 → protocol 0xca2cd9730
LOGI LOG: BTTLogitechManager: Creating device for receiver slot 4...
LOGI LOG: BTTLogitechManager: Receiver retain count for slot 4: 9
LOGI LOG: BTTHIDPPDevice: Initializing with deviceIndex=4, IOHIDDevice retain count=9
LOGI LOG: BTTHIDPPDevice: Receiver slot 4 - using receiver IDs: 046d:c52b
LOGI LOG: Unknown device: USB Receiver (Slot) (046d:c52b) - using feature discovery, deviceIndex: 4, transport: USB
LOGI LOG: BTTHIDPPProtocol: Starting protocol (deviceIndex: 4, isSharedDevice: 1)...
LOGI LOG: BTTHIDPPProtocol: ✅ Registered protocol 0xca2cd85b0 for deviceIndex 4 (total protocols for this device: 4)
LOGI LOG: BTTHIDPPProtocol: Shared device - skipping open/schedule (already done by receiver setup)
LOGI LOG: BTTHIDPPProtocol: Input callback already registered by another slot - reusing it
LOGI LOG: BTTHIDPPProtocol: Supports short reports: YES, long reports: YES
LOGI LOG: BTTLogitechManager: Created device for slot 4, discovering features...
LOGI LOG: BTTHIDPPFeatureCache: ❌ No cached features for 046d:c52b:slot4
LOGI LOG: BTTHIDPPDevice: 🔍 No cached features for USB Receiver (Slot), performing full discovery...
LOGI LOG: BTTHIDPPProtocol: Detecting protocol version (deviceIndex: 4)...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x04, sub_id(featureIdx)=0x8F, address=0x00
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ❌ Protocol version detection failed: HID++ error: 0x09
LOGI LOG: BTTLogitechManager: ❌ Feature discovery failed for slot 4: HID++ error: 0x09
LOGI LOG: BTTLogitechManager: Checking receiver slot 5...
LOGI LOG: BTTHIDPPProtocol: ❌ No protocol instance found for device index 255 (0xFF), reportID=0x10
LOGI LOG: BTTHIDPPProtocol: Registry has 4 protocols for this device: (
    3,
    2,
    1,
    4
)
LOGI LOG:    - Device index 3 → protocol 0xca2cd8af0
LOGI LOG:    - Device index 2 → protocol 0xca2cd9730
LOGI LOG:    - Device index 1 → protocol 0xca2cd9f80
LOGI LOG:    - Device index 4 → protocol 0xca2cd85b0
LOGI LOG: BTTLogitechManager: Creating device for receiver slot 5...
LOGI LOG: BTTLogitechManager: Receiver retain count for slot 5: 11
LOGI LOG: BTTHIDPPDevice: Initializing with deviceIndex=5, IOHIDDevice retain count=11
LOGI LOG: BTTHIDPPDevice: Receiver slot 5 - using receiver IDs: 046d:c52b
LOGI LOG: Unknown device: USB Receiver (Slot) (046d:c52b) - using feature discovery, deviceIndex: 5, transport: USB
LOGI LOG: BTTHIDPPProtocol: Starting protocol (deviceIndex: 5, isSharedDevice: 1)...
LOGI LOG: BTTHIDPPProtocol: ✅ Registered protocol 0xca2cda0d0 for deviceIndex 5 (total protocols for this device: 5)
LOGI LOG: BTTHIDPPProtocol: Shared device - skipping open/schedule (already done by receiver setup)
LOGI LOG: BTTHIDPPProtocol: Input callback already registered by another slot - reusing it
LOGI LOG: BTTHIDPPProtocol: Supports short reports: YES, long reports: YES
LOGI LOG: BTTLogitechManager: Created device for slot 5, discovering features...
LOGI LOG: BTTHIDPPFeatureCache: ❌ No cached features for 046d:c52b:slot5
LOGI LOG: BTTHIDPPDevice: 🔍 No cached features for USB Receiver (Slot), performing full discovery...
LOGI LOG: BTTHIDPPProtocol: Detecting protocol version (deviceIndex: 5)...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x05, sub_id(featureIdx)=0x8F, address=0x00
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ❌ Protocol version detection failed: HID++ error: 0x09
LOGI LOG: BTTLogitechManager: ❌ Feature discovery failed for slot 5: HID++ error: 0x09
LOGI LOG: BTTLogitechManager: Checking receiver slot 6...
LOGI LOG: BTTHIDPPProtocol: ❌ No protocol instance found for device index 255 (0xFF), reportID=0x10
LOGI LOG: BTTHIDPPProtocol: Registry has 5 protocols for this device: (
    3,
    2,
    5,
    1,
    4
)
LOGI LOG:    - Device index 3 → protocol 0xca2cd8af0
LOGI LOG:    - Device index 2 → protocol 0xca2cd9730
LOGI LOG:    - Device index 5 → protocol 0xca2cda0d0
LOGI LOG:    - Device index 1 → protocol 0xca2cd9f80
LOGI LOG:    - Device index 4 → protocol 0xca2cd85b0
LOGI LOG: BTTLogitechManager: Creating device for receiver slot 6...
LOGI LOG: BTTLogitechManager: Receiver retain count for slot 6: 13
LOGI LOG: BTTHIDPPDevice: Initializing with deviceIndex=6, IOHIDDevice retain count=13
LOGI LOG: BTTHIDPPDevice: Receiver slot 6 - using receiver IDs: 046d:c52b
LOGI LOG: Unknown device: USB Receiver (Slot) (046d:c52b) - using feature discovery, deviceIndex: 6, transport: USB
LOGI LOG: BTTHIDPPProtocol: Starting protocol (deviceIndex: 6, isSharedDevice: 1)...
LOGI LOG: BTTHIDPPProtocol: ✅ Registered protocol 0xca2cdabc0 for deviceIndex 6 (total protocols for this device: 6)
LOGI LOG: BTTHIDPPProtocol: Shared device - skipping open/schedule (already done by receiver setup)
LOGI LOG: BTTHIDPPProtocol: Input callback already registered by another slot - reusing it
LOGI LOG: BTTHIDPPProtocol: Supports short reports: YES, long reports: YES
LOGI LOG: BTTLogitechManager: Created device for slot 6, discovering features...
LOGI LOG: BTTHIDPPFeatureCache: ❌ No cached features for 046d:c52b:slot6
LOGI LOG: BTTHIDPPDevice: 🔍 No cached features for USB Receiver (Slot), performing full discovery...
LOGI LOG: BTTHIDPPProtocol: Detecting protocol version (deviceIndex: 6)...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x06, sub_id(featureIdx)=0x8F, address=0x00
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ❌ Protocol version detection failed: HID++ error: 0x09
LOGI LOG: BTTLogitechManager: ❌ Feature discovery failed for slot 6: HID++ error: 0x09
LOGI LOG: BTTLogitechManager: ✅ Finished enumerating all receiver slots
LOGI LOG: BTTLogitechManager: Already running
LOGI LOG: 
==============================================
LOGI LOG: BTTLogitechManager: Scanning for Logitech Devices
LOGI LOG: ==============================================

LOGI LOG: Found 1 Logitech device(s):

LOGI LOG: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
LOGI LOG: Device 1: MX Vertical Advanced Ergonomic Mouse
LOGI LOG: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
LOGI LOG: 📋 Basic Information:
LOGI LOG:    Vendor ID:     0x046d (Logitech)
LOGI LOG:    Product ID:    0xc52b
LOGI LOG:    Database:      ⚠️  Unknown device (will use feature discovery)
LOGI LOG:    Device Index:  1 (0x01)
LOGI LOG: 
🔌 Protocol Information:
LOGI LOG:    HID++ Version: 4.5
LOGI LOG:    Status:        ✅ Ready
LOGI LOG: 
✨ Supported Features:
LOGI LOG:    DPI Control:         ✅ YES
LOGI LOG:    Button Diversion:    ✅ YES ⭐
LOGI LOG:    LED Control:         ❌ NO
LOGI LOG:    Onboard Profiles:    ❌ NO
LOGI LOG:    Report Rate:         ❌ NO
LOGI LOG:    Battery Monitoring:  ✅ YES
LOGI LOG: 
LOGI LOG: ==============================================
LOGI LOG: Scan complete. Found 1 device(s).
LOGI LOG: ==============================================

LOGI LOG: BTTLogitechManager: ✅ Set macOS pointer settings for 'MX Vertical Advanced Ergonomic Mouse' (IOHIDDevice: 0x046D:0xC52B): speed=0.70, accel=10.00
LOGI LOG: BTTLogitechManager: Quick setup for 'MX Vertical Advanced Ergonomic Mouse'...
LOGI LOG: BTTLogitechManager: 🔒 Started quick setup for 'MX Vertical Advanced Ergonomic Mouse' (guard active)
LOGI LOG: BTTLogitechManager: ✅ Device 'MX Vertical Advanced Ergonomic Mouse' is ready, proceeding with quick setup
LOGI LOG: BTTLogitechManager: Stored pending LED effect for atomic profile write
LOGI LOG: BTTLogitechManager: Remapping buttons to standard mouse buttons for 'MX Vertical Advanced Ergonomic Mouse' (remapScrollTilt=0)...
LOGI LOG: BTTLogitechManager: Using runtime task ID remapping (0x1b04) - NO flash writes
LOGI LOG: BTTLogitechManager: Factory profiles preserved - buttons revert on disconnect
LOGI LOG: BTTLogitechManager: ⚡ Using 7 cached buttons for remapping
LOGI LOG: BTTLogitechManager: Found 7 buttons, analyzing task IDs...
LOGI LOG: BTTLogitechManager: Device 'MX Vertical Advanced Ergonomic Mouse' detected, isMXMaster4=0
LOGI LOG: BTTLogitechManager:   Processing button 0x0050, flags=0x11
LOGI LOG: BTTLogitechManager:   → Fixed mapping: 0x0050 (Left) → button 0
LOGI LOG: BTTLogitechManager:   Processing button 0x0051, flags=0x11
LOGI LOG: BTTLogitechManager:   → Fixed mapping: 0x0051 (Right) → button 1
LOGI LOG: BTTLogitechManager:   Processing button 0x0052, flags=0x71
LOGI LOG: BTTLogitechManager:   → Fixed mapping: 0x0052 (Middle) → button 2
LOGI LOG: BTTLogitechManager:   Processing button 0x0053, flags=0x71
LOGI LOG: BTTLogitechManager:   → Fixed mapping: 0x0053 (Back) → button 3
LOGI LOG: BTTLogitechManager:   Processing button 0x0056, flags=0x71
LOGI LOG: BTTLogitechManager:   → Fixed mapping: 0x0056 (Forward) → button 4
LOGI LOG: BTTLogitechManager:   Processing button 0x00FD, flags=0x71
LOGI LOG: BTTLogitechManager:   Processing button 0x00D7, flags=0xA0
LOGI LOG: BTTLogitechManager:   → Skipping non-reprogrammable button 0x00D7
LOGI LOG: BTTLogitechManager:   → Dynamic mapping: controlId 0x00FD → button 10 (sorted by controlId)
LOGI LOG: BTTLogitechManager: ✅ Created dynamic button mapping for 'MX Vertical Advanced Ergonomic Mouse' with 6 buttons
LOGI LOG: BTTLogitechManager: 🔄 Undiversting all reprogrammable buttons first to reset state...
LOGI LOG: BTTLogitechManager:   Skipping standard button 0x0050 (preserving default behavior)
LOGI LOG: BTTLogitechManager:   Skipping standard button 0x0051 (preserving default behavior)
LOGI LOG: BTTLogitechManager:   Skipping standard button 0x0052 (preserving default behavior)
LOGI LOG: BTTLogitechManager:   Skipping non-reprogrammable button 0x00D7 (flags=0xA0)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x12, address=0x08
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 6 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x12, func=0x00)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x08
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 6 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x00)
LOGI LOG: BTTHIDPPButtonManager: 📊 Device reports 7 keys/buttons to enumerate
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 6 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [0] Key/Button 0x0050: flags=0x11 [MouseBtn|Reprog] divertable=0 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 6 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 6 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [1] Key/Button 0x0051: flags=0x11 [MouseBtn|Reprog] divertable=0 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 6 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 6 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [2] Key/Button 0x0052: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 6 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 6 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [3] Key/Button 0x0053: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 6 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 6 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [4] Key/Button 0x0056: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 6 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 6 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [5] Key/Button 0x00FD: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 6 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 6 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [6] Key/Button 0x00D7: flags=0xA0 [DIVERT|VIRTUAL] divertable=1 virtual=1
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 6 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x02)
LOGI LOG: 
🖱️  Buttons:
LOGI LOG:    Total:        7 buttons
LOGI LOG:    Available for diversion:
LOGI LOG:       Button at position 0 (controlId: 0x0050)
LOGI LOG:       Button at position 0 (controlId: 0x0051)
LOGI LOG:       Button at position 0 (controlId: 0x0052)
LOGI LOG:       Button at position 0 (controlId: 0x0053)
LOGI LOG:       Button at position 0 (controlId: 0x0056)
LOGI LOG:       Button at position 0 (controlId: 0x00FD)
LOGI LOG:       Button at position 0 (controlId: 0x00D7)
LOGI LOG: BTTHIDPPProtocol: ⏱️  Request timeout after 2.0 seconds
LOGI LOG:    Feature Index: 0x08, Function ID: 0x00, Device Index: 1
LOGI LOG:    Pending requests before timeout: 5
LOGI LOG:    Device may not support this feature or function.
LOGI LOG: BTTHIDPPProtocol: ⏱️  Request timeout after 2.0 seconds
LOGI LOG:    Feature Index: 0x0A, Function ID: 0x03, Device Index: 1
LOGI LOG:    Pending requests before timeout: 4
LOGI LOG:    Device may not support this feature or function.
LOGI LOG: BTTLogitechManager: ⚠️  Failed to undivert button 0x0053: Request timeout (continuing anyway)
LOGI LOG: BTTHIDPPProtocol: ⏱️  Request timeout after 2.0 seconds
LOGI LOG:    Feature Index: 0x0A, Function ID: 0x03, Device Index: 1
LOGI LOG:    Pending requests before timeout: 3
LOGI LOG:    Device may not support this feature or function.
LOGI LOG: BTTLogitechManager: ⚠️  Failed to undivert button 0x0056: Request timeout (continuing anyway)
LOGI LOG: BTTHIDPPProtocol: ⏱️  Request timeout after 2.0 seconds
LOGI LOG:    Feature Index: 0x0A, Function ID: 0x03, Device Index: 1
LOGI LOG:    Pending requests before timeout: 2
LOGI LOG:    Device may not support this feature or function.
LOGI LOG: BTTLogitechManager: ⚠️  Failed to undivert button 0x00FD: Request timeout (continuing anyway)
LOGI LOG: BTTLogitechManager: ✅ Undivert phase complete, proceeding with remapping...
LOGI LOG: BTTLogitechManager:   Preserving standard button 0x0050 (keeping default behavior)
LOGI LOG: BTTLogitechManager:   Preserving standard button 0x0051 (keeping default behavior)
LOGI LOG: BTTLogitechManager:   Preserving standard button 0x0052 (keeping default behavior)
LOGI LOG: BTTLogitechManager:   Remapping extra button 0x0053: task 0x003C → 0x005E
LOGI LOG: BTTLogitechManager:   Remapping extra button 0x0056: task 0x003E → 0x005F
LOGI LOG: BTTLogitechManager:   Remapping extra button 0x00FD: task 0x00D2 → 0x0060
LOGI LOG: BTTLogitechManager:   Skipping non-reprogrammable button 0x00D7
LOGI LOG: BTTHIDPPProtocol: ⏱️  Request timeout after 2.0 seconds
LOGI LOG:    Feature Index: 0x12, Function ID: 0x01, Device Index: 1
LOGI LOG:    Pending requests before timeout: 4
LOGI LOG:    Device may not support this feature or function.
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 3 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x03)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x03)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x03)
LOGI LOG: BTTLogitechManager: ✅ Remapped 3 buttons via task IDs
LOGI LOG: BTTLogitechManager: No scroll wheel manager, skipping hi-res scroll
LOGI LOG: BTTLogitechManager: No scroll wheel manager, skipping main wheel invert
LOGI LOG: BTTLogitechManager: Setting DPI for 'MX Vertical Advanced Ergonomic Mouse' to 2000...
LOGI LOG: BTTLogitechManager: ⚡ Using cached sensor info (FAST PATH)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x12, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x12, func=0x03)
LOGI LOG: BTTLogitechManager: ✅ DPI set to 2000 for 'MX Vertical Advanced Ergonomic Mouse' (sensor 0)
LOGI LOG: BTTLogitechManager: ❌ Device 'MX Vertical Advanced Ergonomic Mouse' does not support report rate control
LOGI LOG: BTTLogitechManager: ⚠️  Report rate setup failed: Device 'MX Vertical Advanced Ergonomic Mouse' does not support report rate control
LOGI LOG: BTTLogitechManager: Setting SmartShift for 'MX Vertical Advanced Ergonomic Mouse' (ratchet: 0, autoDisengage: 20, torque: 80)...
LOGI LOG: BTTLogitechManager: ⚠️  SmartShift setup failed: Device not found or doesn't support scroll wheel features
LOGI LOG: BTTLogitechManager: 🔓 Quick setup guard cleared for 'MX Vertical Advanced Ergonomic Mouse'
LOGI LOG: BTTLogitechManager: ✅ Quick setup complete for 'MX Vertical Advanced Ergonomic Mouse'
LOGI LOG: 
LOGI LOG: ========================================
LOGI LOG: Connected Devices Summary:
LOGI LOG: ========================================
LOGI LOG:   - MX Vertical Advanced Ergonomic Mouse (VID:0x046d PID:0xc52b) Ready:YES Type:Mouse
LOGI LOG:   - USB Receiver (Slot) (VID:0x046d PID:0xc52b) Ready:NO Type:Mouse
LOGI LOG:   - USB Receiver (Slot) (VID:0x046d PID:0xc52b) Ready:NO Type:Mouse
LOGI LOG:   - USB Receiver (Slot) (VID:0x046d PID:0xc52b) Ready:NO Type:Mouse
LOGI LOG:   - USB Receiver (Slot) (VID:0x046d PID:0xc52b) Ready:NO Type:Mouse
LOGI LOG:   - USB Receiver (Slot) (VID:0x046d PID:0xc52b) Ready:NO Type:Mouse
LOGI LOG: 
LOGI LOG: ========================================
LOGI LOG: G604 Scroll Slot Debug:
LOGI LOG: ========================================
LOGI LOG:   No G604 devices found
LOGI LOG: ========================================
LOGI LOG: End of Debug Information
LOGI LOG: ========================================

While everything works, I am curious about this entry, reading this thread, it seems a mouse has to be in the db to be supported correctly:

LOGI LOG:    Database:      ⚠️  Unknown device (will use feature discovery)

Same receiver connected to a hub, I switch the hub between two computers

only mice that require special handling need to be in the DB, others are discovered automatically

@jipumarino could you also check whether this improved with 6.081?

1 Like

Got it, I just updated from 6.011 to 6.081 and now I can’t get the existing shortcuts to work, left and right tilt are now recognized as buttons 10 and 11, and some times as Scroll Right + Button 10 and Scroll Left + Button 11, respectively. Regardless of that, the actions I have enabled for them in Safari (previous tab, next tab) aren’t triggered now.

I’m testing the new Logitech support with my MX Vertical too. It’s connected to the computer via USB.

I have the following configuration. Note that the mouse is detected as a Logitech MX518 instead of an MX Vertical.

The Button 4 action works well, but the Button 3 action actually runs multiple time when I press the button only once. It seems as if BTT detects multiple presses when I only press once.

I’m using 6.081.

that might be an issue with the action itself, coukd you check the standard version with animation?

I’m seeing the same issue with animation.

You can see here that even for recording the button, BTT seems to not detect button 3 presses as a single press but as multiple: I can get multiple button 4 presses to detect correctly, but not multiple button 3 presses.

I had this setup previously working with Logitech Options installed on my computer, but I uninstalled it as BTT recommended before switching.

Could you also post the logs? It's a weird issue but maybe related to being detected as other model

LOGI LOG: ========================================
LOGI LOG: BTT Logitech Debug Information
LOGI LOG: Timestamp: 2026-01-20 21:37:03
LOGI LOG: macOS: Version 26.2 (Build 25C56)
LOGI LOG: ========================================
LOGI LOG: 
LOGI LOG: Step 1: Stopping Logitech Manager...
LOGI LOG: BTTLogitechManager: Stopping...
LOGI LOG: BTTLogitechManager: Setting ONBOARD mode on 1 device(s) before shutdown...
LOGI LOG: BTTLogitechManager: ✅ ONBOARD mode set on 0 device(s), skipped 1 (shutdown complete)
LOGI LOG: BTTHIDPPProtocol: ❌ Unregistered protocol 0x88b9ee3e0 for deviceIndex 255 (remaining protocols for this device: 0)
LOGI LOG: BTTHIDPPProtocol: Last protocol for this device - will unregister callback
LOGI LOG: BTTLogitechManager: Stopped
LOGI LOG: Step 2: Restarting Logitech Manager...
LOGI LOG: BTTLogitechManager: Starting device discovery...
LOGI LOG: BTTLogitechManager: Started successfully
LOGI LOG: Step 3: Calling initializeLogitechMice...
LOGI LOG: BTTLogitechManager: Already running
LOGI LOG: 
==============================================
LOGI LOG: BTTLogitechManager: Scanning for Logitech Devices
LOGI LOG: ==============================================

LOGI LOG: No Logitech HID++ devices found.
LOGI LOG: 
💡 Make sure your device is:
LOGI LOG:    • Connected via USB, Bluetooth, or Unifying Receiver
LOGI LOG:    • Powered on
LOGI LOG:    • Using HID++ 2.0 protocol (most recent Logitech mice/keyboards)
LOGI LOG: Step 4: Waiting 5 seconds for device initialization...
LOGI LOG: BTTLogitechManager: Found HID interface - MX Vertical Advanced Ergonomic Mouse - Interface: 0, Usage Page: 0x0001, Usage: 0x0002
LOGI LOG: BTTLogitechManager: Skipping interface (Usage Page: 0x0001, Usage: 0x0002, Interface: 0)
LOGI LOG: BTTLogitechManager: Found HID interface - MX Vertical Advanced Ergonomic Mouse - Interface: 2, Usage Page: 0xFF00, Usage: 0x0001
LOGI LOG: BTTLogitechManager: ✅ Accepted - Vendor-specific HID++ interface (Interface 2)
LOGI LOG: BTTLogitechManager: Device connected - MX Vertical Advanced Ergonomic Mouse (046d:c08a)
LOGI LOG: BTTHIDPPDevice: Auto-detected deviceIndex 0xFF for 046d:c08a (USB Wired)
LOGI LOG: BTTHIDPPDevice: Initializing with deviceIndex=255, IOHIDDevice retain count=3
LOGI LOG: Known device: Logitech MX518 (046d:c08a) with quirk: 0, type: 0, deviceIndex: 255, transport: USB
LOGI LOG: BTTHIDPPProtocol: Starting protocol (deviceIndex: 255, isSharedDevice: 0)...
LOGI LOG: BTTHIDPPProtocol: ✅ Registered protocol 0x88af0eae0 for deviceIndex 255 (total protocols for this device: 1)
LOGI LOG: BTTHIDPPProtocol: Non-shared device - registering dedicated input callback
LOGI LOG: BTTHIDPPProtocol: ✅ Device opened successfully
LOGI LOG: BTTHIDPPProtocol: Supports short reports: YES, long reports: YES
LOGI LOG: BTTLogitechManager: Starting feature discovery for Logitech MX518...
LOGI LOG: BTTHIDPPFeatureCache: ✅ Found cached features for 046d:c08a (cached 2026-01-20 12:32:04 +0000)
LOGI LOG: BTTHIDPPDevice: ⚡ Using cached features for Logitech MX518 (29 features)
LOGI LOG: BTTHIDPPDevice: ⚡ Restoring cached device name: MX Vertical Advanced Ergonomic Mouse
LOGI LOG: BTTHIDPPProtocol: Pre-populated feature cache with 29 features
LOGI LOG: BTTHIDPPDevice: Cached protocol: 4.5
LOGI LOG: BTTHIDPPProtocol: ✅ Registered event handler for feature 0x1B04 (protocol 0x88af0eae0, deviceIndex 255)
LOGI LOG:    Total event handlers registered: 1
LOGI LOG: Button Manager supported
LOGI LOG: DPI Manager supported
LOGI LOG: Battery Monitor supported (Legacy 0x1000)
LOGI LOG: Checking scroll wheel features...
LOGI LOG:   SmartShift (0x2110): ❌ NO
LOGI LOG:   SmartShift Enhanced (0x2111): ❌ NO
LOGI LOG:   HiRes Wheel (0x2121): ❌ NO
LOGI LOG:   Thumbwheel (0x2150): ❌ NO
LOGI LOG:   Wheel Analytics (0x2250): ✅ YES
LOGI LOG:   Wheel Mode Status (0x2251): ❌ NO
LOGI LOG: No scroll wheel features supported
LOGI LOG: BTTHIDPPDevice: Device type confirmed as MOUSE (has mouse-specific features)
LOGI LOG: Applying default device configuration...
LOGI LOG: 🔍 Attempting to query device name via HID++ feature 0x0005...
LOGI LOG: ✅ Device supports feature 0x0005, querying name length...
LOGI LOG: BTTLogitechManager: Device already tracked, ignoring duplicate interface
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x03, address=0x08
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x03, func=0x00)
LOGI LOG: Device name length: 36 bytes
LOGI LOG: Reading device name chunk at offset 0/36...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x03, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x03, func=0x01)
LOGI LOG: Read 16 bytes: "MX Vertical Adva"
LOGI LOG: Reading device name chunk at offset 16/36...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x03, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x03, func=0x01)
LOGI LOG: Read 16 bytes: "nced Ergonomic M"
LOGI LOG: Reading device name chunk at offset 32/36...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x03, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x03, func=0x01)
LOGI LOG: Read 4 bytes: "ouse"
LOGI LOG: 📝 Device name assembled: "MX Vertical Advanced Ergonomic Mouse" (36 bytes)
LOGI LOG: ✅ Device name from HID++: MX Vertical Advanced Ergonomic Mouse
LOGI LOG: BTTHIDPPFeatureCache: 📝 Updated device name for 046d:c08a to: MX Vertical Advanced Ergonomic Mouse
LOGI LOG: BTTLogitechManager: 📝 Device name updated to: MX Vertical Advanced Ergonomic Mouse
LOGI LOG: BTTLogitechManager: ✅ Device ready - MX Vertical Advanced Ergonomic Mouse (Protocol 4.5)
LOGI LOG: BTTLogitechManager: 🔍 Checking for pending setup requests for 'MX Vertical Advanced Ergonomic Mouse'...
LOGI LOG: BTTLogitechManager: ✅ Device ready - MX Vertical Advanced Ergonomic Mouse (Protocol 4.5)
LOGI LOG: BTTLogitechManager: Device MX Vertical Advanced Ergonomic Mouse has no onboard profiles - skipping auto ONBOARD mode
LOGI LOG: BTTLogitechManager: 🔍 Checking for pending setup requests for 'MX Vertical Advanced Ergonomic Mouse'...
LOGI LOG: BTTHIDPPFeatureCache: Saved 1 device profiles to disk
LOGI LOG: BTTLogitechManager: ⚠️  Device 'Logitech MX518' not found for pointer settings
LOGI LOG: BTTLogitechManager: Quick setup for 'Logitech MX518'...
LOGI LOG: BTTLogitechManager: ⏳ Device 'Logitech MX518' not found yet, queuing setup request for when device becomes ready
LOGI LOG: BTTLogitechManager: 🔄 Replacing 1 existing pending request(s) for device 'Logitech MX518' with updated settings
LOGI LOG: BTTLogitechManager: 📥 Queued device setup request for 'Logitech MX518' (total pending: 1)
LOGI LOG: BTTLogitechManager: Already running
LOGI LOG: 
==============================================
LOGI LOG: BTTLogitechManager: Scanning for Logitech Devices
LOGI LOG: ==============================================

LOGI LOG: Found 1 Logitech device(s):

LOGI LOG: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
LOGI LOG: Device 1: MX Vertical Advanced Ergonomic Mouse
LOGI LOG: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
LOGI LOG: 📋 Basic Information:
LOGI LOG:    Vendor ID:     0x046d (Logitech)
LOGI LOG:    Product ID:    0xc08a
LOGI LOG:    Database:      ✅ Known device
LOGI LOG:    Quirks:        None
LOGI LOG:    Device Index:  255 (0xFF)
LOGI LOG: 
🔌 Protocol Information:
LOGI LOG:    HID++ Version: 4.5
LOGI LOG:    Status:        ✅ Ready
LOGI LOG: 
✨ Supported Features:
LOGI LOG:    DPI Control:         ✅ YES
LOGI LOG:    Button Diversion:    ✅ YES ⭐
LOGI LOG:    LED Control:         ❌ NO
LOGI LOG:    Onboard Profiles:    ❌ NO
LOGI LOG:    Report Rate:         ❌ NO
LOGI LOG:    Battery Monitoring:  ✅ YES
LOGI LOG: 
LOGI LOG: ==============================================
LOGI LOG: Scan complete. Found 1 device(s).
LOGI LOG: ==============================================

LOGI LOG: BTTLogitechManager: ⚠️  Device 'Logitech MX518' not found for pointer settings
LOGI LOG: BTTLogitechManager: Quick setup for 'Logitech MX518'...
LOGI LOG: BTTLogitechManager: ⏳ Device 'Logitech MX518' not found yet, queuing setup request for when device becomes ready
LOGI LOG: BTTLogitechManager: 🔄 Replacing 1 existing pending request(s) for device 'Logitech MX518' with updated settings
LOGI LOG: BTTLogitechManager: 📥 Queued device setup request for 'Logitech MX518' (total pending: 1)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x0F, address=0x08
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 3 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0F, func=0x00)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x0F, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 3 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0F, func=0x01)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x0F, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 3 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0F, func=0x02)
LOGI LOG: 
🎯 DPI Information:
LOGI LOG:    Sensor 0:
LOGI LOG:       Current DPI:  2000
LOGI LOG:       Range:        400 - 4000 (step: 100)
LOGI LOG: BTTHIDPPProtocol: ⏱️  Request timeout after 2.0 seconds
LOGI LOG:    Feature Index: 0x09, Function ID: 0x00, Device Index: 255
LOGI LOG:    Pending requests before timeout: 2
LOGI LOG:    Device may not support this feature or function.
LOGI LOG: BTTHIDPPProtocol: ⏱️  Request timeout after 2.0 seconds
LOGI LOG:    Feature Index: 0x07, Function ID: 0x00, Device Index: 255
LOGI LOG:    Pending requests before timeout: 1
LOGI LOG:    Device may not support this feature or function.
LOGI LOG: 
LOGI LOG: ========================================
LOGI LOG: Connected Devices Summary:
LOGI LOG: ========================================
LOGI LOG:   - MX Vertical Advanced Ergonomic Mouse (VID:0x046d PID:0xc08a) Ready:YES Type:Mouse
LOGI LOG: 
LOGI LOG: ========================================
LOGI LOG: G604 Scroll Slot Debug:
LOGI LOG: ========================================
LOGI LOG:   No G604 devices found
LOGI LOG: ========================================
LOGI LOG: End of Debug Information
LOGI LOG: ========================================

Looks like BTT now detects my MX Vertical properly. Might have been a fix between .079 and .081.

Still seeing the button 3 issue however.

Hey Andreas, I’ve just updated to 6.081 and it’s killed the thumb button operation for me. It seems to be defaulting to Alt + Tab. MX Master 3 - I had it all up and running for about a week with zero issues before this update. Thanks!

That usually means the mouse has not yet been initialized, have you tried to restart BTT? My MX Master 3 (connected via Bluetooth) still seems to work fine. Is yours also connected via Bluetooth or via receiver?

Tried restarting BTT and the computer. Still have the same issue. Connected via receiver.

Could you tell me what name it shows you here?

Best also post the logs, they will show me what's wrong (I did various changes to the receiver recognition, maybe it is related to that)

Wireless Mouse MX Master 3 connected.

I can see the logs but not sure how to export? This is what’s happening when I’m clicking the button

2026/01/20 14:54:02:340 ASL setting overall trigger 8D2E6A9F-4648-4F02-A1DF-4CD8974111C6
2026/01/20 14:54:02:340 FORM SETTING LEVEL 1 TRIGGER
2026/01/20 14:54:02:340 ASL setting overall trigger 8D2E6A9F-4648-4F02-A1DF-4CD8974111C6
2026/01/20 14:54:02:340 FORM 4 UUID 8D2E6A9F-4648-4F02-A1DF-4CD8974111C6 == 97903391-1FAF-4C63-9F26-B656B993D275
editing 0 == 0
2026/01/20 14:54:02:340 ASL active form changed
2026/01/20 14:54:02:403 NEWUI Loading Config Debounced
2026/01/20 14:54:02:403 FORM 1UUID 8D2E6A9F-4648-4F02-A1DF-4CD8974111C6 == 8D2E6A9F-4648-4F02-A1DF-4CD8974111C6
editing 0 == 0
2026/01/20 14:54:02:404 ASL active form changed
2026/01/20 14:54:02:575 ASL did rebuild form
2026/01/20 14:54:04:151 ASL changing first responder <BTTPreferencesTableView: 0x984955e00>
2026/01/20 14:54:04:253 ASL previously selected 2
2026/01/20 14:54:04:253 ASL setting overall trigger (null)
2026/01/20 14:54:04:260 ASL recently used active 0
2026/01/20 14:54:04:264 ASL previously selected 2
2026/01/20 14:54:04:309 ASL setting overall trigger FE2AFBF3-E246-404E-9516-14BA2404C10C
2026/01/20 14:54:04:342 NEWUI Loading Config Debounced
2026/01/20 14:54:04:343 ASL active form changed
2026/01/20 14:54:04:540 ASL did rebuild form
2026/01/20 14:54:04:620 NEWUI Loading Config Debounced
2026/01/20 14:54:04:621 ASL active form changed
2026/01/20 14:54:04:764 ASL did rebuild form
2026/01/20 14:54:06:184 ASL chanaina first responder ‹BTTPreferencesTableView: 0x984957700>

Here:

Hey @Andreas_Hegenberg, now that you have the MX Mechanical keyboard supported, could you add the ability to change channel hosts like you did on the mouse?

Thank you!

I think the action should already worked, have you tried it already? Maybe I forgot something keyboard specific