scrolling is now fine. Thank you!
LOGI LOG: ========================================
LOGI LOG: BTT Logitech Debug Information
LOGI LOG: Timestamp: 2026-01-09 17:44:48
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 7 device(s) before shutdown...
LOGI LOG: BTTLogitechManager: ✅ ONBOARD mode set on 0 device(s), skipped 7 (shutdown complete)
LOGI LOG: BTTHIDPPProtocol: ❌ Unregistered protocol 0x9a800edc0 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 0x9a800edc0 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 0x9a8404060 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 0x9a8404060 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 0x9a8404180 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 0x9a8404180 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 0x9a8404240 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 0x9a8404240 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 0x9a84042a0 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 0x9a84042a0 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 0x9a8404300 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: BTTHIDPPProtocol: ❌ Unregistered protocol 0x9a800c000 for deviceIndex 0 (remaining protocols for this device: 1)
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 Anywhere 3S - Interface: ?, Usage Page: 0x0001, Usage: 0x0002
LOGI LOG: BTTLogitechManager: ✅ Accepted - Bluetooth Logitech device (HID++ over mouse interface) [generic]
LOGI LOG: BTTLogitechManager: Device connected - MX Anywhere 3S (046d:b037)
LOGI LOG: BTTHIDPPDevice: Auto-detected deviceIndex 0x00 for 046d:b037 (Bluetooth)
LOGI LOG: BTTHIDPPDevice: Initializing with deviceIndex=0, IOHIDDevice retain count=3
LOGI LOG: Unknown device: MX Anywhere 3S (046d:b037) - using feature discovery, deviceIndex: 0, transport: Bluetooth Low Energy
LOGI LOG: BTTHIDPPProtocol: Bluetooth device detected - forcing LONG reports only
LOGI LOG: BTTHIDPPProtocol: Starting protocol (deviceIndex: 0, isSharedDevice: 0)...
LOGI LOG: BTTHIDPPProtocol: ✅ Registered Bluetooth protocol 0x9aa064e40 for BOTH deviceIndex 0 and 255 (0xFF)
LOGI LOG: BTTHIDPPProtocol: Non-shared device - registering dedicated input callback
LOGI LOG: BTTHIDPPProtocol: ✅ Device opened successfully
LOGI LOG: BTTHIDPPProtocol: Supports short reports: NO, long reports: YES
LOGI LOG: BTTLogitechManager: Bluetooth device detected - waiting 1.5s before starting feature discovery for MX Anywhere 3S...
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 0x9a8404060 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-07 22:32:10 +0000)
LOGI LOG: BTTHIDPPDevice: ⚡ Using cached features for USB Receiver (Slot) (33 features)
LOGI LOG: BTTHIDPPProtocol: Pre-populated feature cache with 33 features
LOGI LOG: BTTHIDPPDevice: Cached protocol: 4.5
LOGI LOG: BTTHIDPPProtocol: ✅ Registered event handler for feature 0x1B04 (protocol 0x9a8404060, deviceIndex 1)
LOGI LOG: Total event handlers registered: 1
LOGI LOG: Button Manager supported
LOGI LOG: Battery Monitor supported
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): ❌ NO
LOGI LOG: Wheel Mode Status (0x2251): ❌ NO
LOGI LOG: No scroll wheel features supported
LOGI LOG: Backlight Manager initialized (0x1982 BACKLIGHT2)
LOGI LOG: BTTHIDPPDevice: 🔄 Auto-detected device type: KEYBOARD (has REPROG_CONTROLS, no mouse 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: 15 bytes
LOGI LOG: Reading device name chunk at offset 0/15...
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 15 bytes: "MX Keys for Mac"
LOGI LOG: 📝 Device name assembled: "MX Keys for Mac" (15 bytes)
LOGI LOG: ✅ Device name from HID++: MX Keys for Mac
LOGI LOG: BTTLogitechManager: 📝 Device name updated to: MX Keys for Mac
LOGI LOG: BTTLogitechManager: ✅ Device ready - MX Keys for Mac (Protocol 4.5)
LOGI LOG: BTTLogitechManager: ✅ Device ready in slot 1 - MX Keys for Mac (Protocol 4.5)
LOGI LOG: BTTLogitechManager: Checking receiver slot 2...
LOGI LOG: BTTHIDPPProtocol: ❌ No protocol instance found for device index 255 (0xFF), reportID=0x10
LOGI LOG: BTTHIDPPProtocol: Registry has 1 protocols for this device: (
1
)
LOGI LOG: - Device index 1 → protocol 0x9a8404060
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 0x9a8404d80 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: 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: 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 0x9a8404060
LOGI LOG: - Device index 2 → protocol 0x9a8404d80
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 0x9a8401c20 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 0x9a8401c20
LOGI LOG: - Device index 1 → protocol 0x9a8404060
LOGI LOG: - Device index 2 → protocol 0x9a8404d80
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 0x9a8401f20 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 0x9a8401c20
LOGI LOG: - Device index 2 → protocol 0x9a8404d80
LOGI LOG: - Device index 1 → protocol 0x9a8404060
LOGI LOG: - Device index 4 → protocol 0x9a8401f20
LOGI LOG: BTTLogitechManager: Starting feature discovery for MX Anywhere 3S...
LOGI LOG: BTTHIDPPFeatureCache: ✅ Found cached features for 046d:b037 (cached 2026-01-07 22:32:11 +0000)
LOGI LOG: BTTHIDPPDevice: ⚡ Using cached features for MX Anywhere 3S (36 features)
LOGI LOG: BTTHIDPPProtocol: Pre-populated feature cache with 36 features
LOGI LOG: BTTHIDPPDevice: Cached protocol: 4.5
LOGI LOG: BTTHIDPPProtocol: ✅ Registered event handler for feature 0x1B04 (protocol 0x9aa064e40, deviceIndex 0)
LOGI LOG: Total event handlers registered: 1
LOGI LOG: Button Manager supported
LOGI LOG: DPI Manager supported
LOGI LOG: Checking scroll wheel features...
LOGI LOG: SmartShift (0x2110): ❌ NO
LOGI LOG: SmartShift Enhanced (0x2111): ✅ YES
LOGI LOG: HiRes Wheel (0x2121): ✅ YES
LOGI LOG: Thumbwheel (0x2150): ❌ NO
LOGI LOG: Wheel Analytics (0x2250): ✅ YES
LOGI LOG: Wheel Mode Status (0x2251): ✅ YES
LOGI LOG: Scroll Wheel Manager initialized
LOGI LOG: BTTHIDPPDevice: Device type confirmed as MOUSE (has mouse-specific features)
LOGI LOG: Applying default device configuration...
LOGI LOG: Un-diverting main scroll wheel for native HID scrolling...
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 0x9a951b000 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 0x9a8401c20
LOGI LOG: - Device index 2 → protocol 0x9a8404d80
LOGI LOG: - Device index 5 → protocol 0x9a951b000
LOGI LOG: - Device index 1 → protocol 0x9a8404060
LOGI LOG: - Device index 4 → protocol 0x9a8401f20
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 0x9a9518ba0 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: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x10, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x10, func=0x01)
LOGI LOG: BTTLogitechManager: ⚠️ Device 'MX Anywhere 3S' not found for pointer settings
LOGI LOG: BTTLogitechManager: Quick setup for 'MX Anywhere 3S'...
LOGI LOG: BTTLogitechManager: ❌ Device not found: MX Anywhere 3S
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x10, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x10, func=0x02)
LOGI LOG: BTTHIDPPScrollWheelManager: ✅ HiRes divert set successfully
LOGI LOG: ✅ Main scroll wheel configured for native HID scrolling
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=0x00, 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: 14 bytes
LOGI LOG: Reading device name chunk at offset 0/14...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, 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 14 bytes: "MX Anywhere 3S"
LOGI LOG: 📝 Device name assembled: "MX Anywhere 3S" (14 bytes)
LOGI LOG: ✅ Device name from HID++: MX Anywhere 3S
LOGI LOG: BTTLogitechManager: 📝 Device name updated to: MX Anywhere 3S
LOGI LOG: BTTLogitechManager: ✅ Device ready - MX Anywhere 3S (Protocol 4.5)
LOGI LOG: BTTLogitechManager: ✅ Device ready - MX Anywhere 3S (Protocol 4.5)
LOGI LOG: BTTLogitechManager: Device MX Anywhere 3S has no onboard profiles - skipping auto ONBOARD mode
LOGI LOG: BTTLogitechManager: Already running
LOGI LOG:
==============================================
LOGI LOG: BTTLogitechManager: Scanning for Logitech Devices
LOGI LOG: ==============================================
LOGI LOG: Found 2 Logitech device(s):
LOGI LOG: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
LOGI LOG: Device 1: MX Anywhere 3S
LOGI LOG: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
LOGI LOG: 📋 Basic Information:
LOGI LOG: Vendor ID: 0x046d (Logitech)
LOGI LOG: Product ID: 0xb037
LOGI LOG: Database: ⚠️ Unknown device (will use feature discovery)
LOGI LOG: Device Index: 0 (0x00)
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: ❌ NO
LOGI LOG:
LOGI LOG: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
LOGI LOG: Device 2: MX Keys for Mac
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: ❌ NO
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 2 device(s).
LOGI LOG: ==============================================
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x08
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x00)
LOGI LOG: BTTHIDPPButtonManager: 📊 Device reports 24 keys/buttons to enumerate
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x07, address=0x08
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x07, func=0x00)
LOGI LOG:
🔋 Battery:
LOGI LOG: Level: 0%
LOGI LOG: Status: Full
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [0] Key/Button 0x00C7: flags=0x7A [FnKey|FnToggle|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [1] Key/Button 0x00C8: flags=0x7A [FnKey|FnToggle|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [2] Key/Button 0x00E0: flags=0x7A [FnKey|FnToggle|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [3] Key/Button 0x00E1: flags=0x7A [FnKey|FnToggle|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [4] Key/Button 0x00E2: flags=0x7A [FnKey|FnToggle|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0E, address=0x08
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0E, func=0x00)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x08
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 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)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [5] Key/Button 0x00E3: flags=0x7A [FnKey|FnToggle|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0E, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0E, func=0x01)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [0] Key/Button 0x0050: flags=0x01 [MouseBtn] divertable=0 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0E, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0E, func=0x02)
LOGI LOG:
🎯 DPI Information:
LOGI LOG: Sensor 0:
LOGI LOG: Current DPI: 2000
LOGI LOG: Range: 200 - 8000 (step: 50)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 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)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [6] Key/Button 0x00E4: flags=0x7A [FnKey|FnToggle|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPButtonManager: 📋 [1] Key/Button 0x0051: flags=0x01 [MouseBtn] divertable=0 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 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)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [2] Key/Button 0x0052: flags=0x31 [MouseBtn|Reprog|DIVERT] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 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)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [7] Key/Button 0x00E5: flags=0x7A [FnKey|FnToggle|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [3] Key/Button 0x0053: flags=0x31 [MouseBtn|Reprog|DIVERT] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 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)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [4] Key/Button 0x0056: flags=0x31 [MouseBtn|Reprog|DIVERT] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 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)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [8] Key/Button 0x00E6: flags=0x7A [FnKey|FnToggle|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [5] Key/Button 0x00C4: flags=0x31 [MouseBtn|Reprog|DIVERT] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 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)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 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)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [9] Key/Button 0x00E7: flags=0x7A [FnKey|FnToggle|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 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: 0x00C4)
LOGI LOG: Button at position 0 (controlId: 0x00D7)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [10] Key/Button 0x00E8: flags=0x7A [FnKey|FnToggle|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [11] Key/Button 0x00E9: flags=0x7A [FnKey|FnToggle|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [12] Key/Button 0x00D1: flags=0x6A [FnKey|FnToggle|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [13] Key/Button 0x00D2: flags=0x6A [FnKey|FnToggle|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [14] Key/Button 0x00D3: flags=0x6A [FnKey|FnToggle|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [15] Key/Button 0x000A: flags=0x7A [FnKey|FnToggle|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [16] Key/Button 0x00BF: flags=0x7A [FnKey|FnToggle|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [17] Key/Button 0x00EA: flags=0x7A [FnKey|FnToggle|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [18] Key/Button 0x006F: flags=0x7A [FnKey|FnToggle|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [19] Key/Button 0x000D: flags=0x74 [Hotkey|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [20] Key/Button 0x00EC: flags=0x64 [Hotkey|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [21] Key/Button 0x00EB: flags=0x64 [Hotkey|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [22] Key/Button 0x00DE: flags=0x02 [FnKey] divertable=0 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [23] Key/Button 0x0034: flags=0x04 [Hotkey] divertable=0 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x02)
LOGI LOG:
🖱️ Buttons:
LOGI LOG: Total: 24 buttons
LOGI LOG: Available for diversion:
LOGI LOG: Button at position 1 (controlId: 0x00C7)
LOGI LOG: Button at position 2 (controlId: 0x00C8)
LOGI LOG: Button at position 3 (controlId: 0x00E0)
LOGI LOG: Button at position 4 (controlId: 0x00E1)
LOGI LOG: Button at position 5 (controlId: 0x00E2)
LOGI LOG: Button at position 6 (controlId: 0x00E3)
LOGI LOG: Button at position 7 (controlId: 0x00E4)
LOGI LOG: Button at position 8 (controlId: 0x00E5)
LOGI LOG: Button at position 9 (controlId: 0x00E6)
LOGI LOG: Button at position 10 (controlId: 0x00E7)
LOGI LOG: Button at position 11 (controlId: 0x00E8)
LOGI LOG: Button at position 12 (controlId: 0x00E9)
LOGI LOG: Button at position 13 (controlId: 0x00D1)
LOGI LOG: Button at position 14 (controlId: 0x00D2)
LOGI LOG: Button at position 15 (controlId: 0x00D3)
LOGI LOG: Button at position 16 (controlId: 0x000A)
LOGI LOG: Button at position 17 (controlId: 0x00BF)
LOGI LOG: Button at position 18 (controlId: 0x00EA)
LOGI LOG: Button at position 19 (controlId: 0x006F)
LOGI LOG: Button at position 0 (controlId: 0x000D)
LOGI LOG: Button at position 0 (controlId: 0x00EC)
LOGI LOG: Button at position 0 (controlId: 0x00EB)
LOGI LOG: Button at position 0 (controlId: 0x00DE)
LOGI LOG: Button at position 0 (controlId: 0x0034)
LOGI LOG: BTTLogitechManager: ✅ Set macOS pointer settings for 'MX Anywhere 3S' (IOHIDDevice: 0x046D:0xB037): speed=0.50, accel=10.00
LOGI LOG: BTTLogitechManager: Quick setup for 'MX Anywhere 3S'...
LOGI LOG: BTTLogitechManager: 🔒 Started quick setup for 'MX Anywhere 3S' (guard active)
LOGI LOG: BTTLogitechManager: ✅ Device 'MX Anywhere 3S' is ready, proceeding with quick setup
LOGI LOG: BTTLogitechManager: Remapping buttons to standard mouse buttons for 'MX Anywhere 3S'...
LOGI LOG: BTTLogitechManager: Using runtime task ID remapping (0x1b04) - NO flash writes
LOGI LOG: BTTLogitechManager: Factory profiles preserved - buttons revert on disconnect
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x08
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 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=0x00, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [0] Key/Button 0x0050: flags=0x01 [MouseBtn] divertable=0 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [1] Key/Button 0x0051: flags=0x01 [MouseBtn] divertable=0 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [2] Key/Button 0x0052: flags=0x31 [MouseBtn|Reprog|DIVERT] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [3] Key/Button 0x0053: flags=0x31 [MouseBtn|Reprog|DIVERT] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [4] Key/Button 0x0056: flags=0x31 [MouseBtn|Reprog|DIVERT] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 [5] Key/Button 0x00C4: flags=0x31 [MouseBtn|Reprog|DIVERT] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 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=0x00, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x02)
LOGI LOG: BTTLogitechManager: Found 7 buttons, analyzing task IDs...
LOGI LOG: BTTLogitechManager: Device 'MX Anywhere 3S' detected, isMXMaster4=0
LOGI LOG: BTTLogitechManager: Processing button 0x0050, flags=0x01
LOGI LOG: BTTLogitechManager: → Fixed mapping: 0x0050 (Left) → button 0
LOGI LOG: BTTLogitechManager: Processing button 0x0051, flags=0x01
LOGI LOG: BTTLogitechManager: → Fixed mapping: 0x0051 (Right) → button 1
LOGI LOG: BTTLogitechManager: Processing button 0x0052, flags=0x31
LOGI LOG: BTTLogitechManager: → Fixed mapping: 0x0052 (Middle) → button 2
LOGI LOG: BTTLogitechManager: Processing button 0x0053, flags=0x31
LOGI LOG: BTTLogitechManager: → Fixed mapping: 0x0053 (Back) → button 3
LOGI LOG: BTTLogitechManager: Processing button 0x0056, flags=0x31
LOGI LOG: BTTLogitechManager: → Fixed mapping: 0x0056 (Forward) → button 4
LOGI LOG: BTTLogitechManager: Processing button 0x00C4, flags=0x31
LOGI LOG: BTTLogitechManager: → Fixed mapping: 0x00C4 (SmartShift/WheelMode) → button 7
LOGI LOG: BTTLogitechManager: Processing button 0x00D7, flags=0xA0
LOGI LOG: BTTLogitechManager: → Skipping non-reprogrammable button 0x00D7
LOGI LOG: BTTLogitechManager: ✅ Created dynamic button mapping for 'MX Anywhere 3S' with 6 buttons
LOGI LOG: BTTLogitechManager: 🔄 Undiversting all reprogrammable buttons first to reset state...
LOGI LOG: BTTLogitechManager: Skipping non-reprogrammable button 0x0050 (flags=0x01)
LOGI LOG: BTTLogitechManager: Skipping non-reprogrammable button 0x0051 (flags=0x01)
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=0x00, 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=0x00, 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=0x00, 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: Skipping non-reprogrammable button 0x0050
LOGI LOG: BTTLogitechManager: Skipping non-reprogrammable button 0x0051
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: Button 0x00C4 marked for diversion (limited remap targets)
LOGI LOG: BTTLogitechManager: Skipping non-reprogrammable button 0x00D7
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0xFF, address=0x0A
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x03)
LOGI LOG: BTTHIDPPProtocol: ⚠️ 0xFF response contains possible error code 0x02 in parameters[1]
LOGI LOG: Treating this as an ERROR response instead of valid data
LOGI LOG: BTTLogitechManager: ⚠️ Failed to remap button 0x0053: HID++ error: 0x02 (detected in 0xFF response format)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0xFF, address=0x0A
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x03)
LOGI LOG: BTTHIDPPProtocol: ⚠️ 0xFF response contains possible error code 0x02 in parameters[1]
LOGI LOG: Treating this as an ERROR response instead of valid data
LOGI LOG: BTTLogitechManager: ⚠️ Failed to remap button 0x0056: HID++ error: 0x02 (detected in 0xFF response format)
LOGI LOG: BTTLogitechManager: ✅ Remapped 0 buttons via task IDs
LOGI LOG: BTTLogitechManager: 🔀 Diverting 3 buttons that couldn't be remapped for event handling...
LOGI LOG: BTTHIDPPButtonManager: Diverting button 0x00C4 (flags=0x2B, libratbag-compatible)...
LOGI LOG: BTTHIDPPButtonManager: Diverting button 0x0053 (flags=0x2B, libratbag-compatible)...
LOGI LOG: BTTHIDPPButtonManager: Diverting button 0x0056 (flags=0x2B, libratbag-compatible)...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, 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: BTTHIDPPButtonManager: ✅ Successfully diverted button 0x00C4 (response params: 00 C4 2B)
LOGI LOG: BTTLogitechManager: ✅ Diverted button 0x00C4 for event handling
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, 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: BTTHIDPPButtonManager: ✅ Successfully diverted button 0x0053 (response params: 00 53 2B)
LOGI LOG: BTTLogitechManager: ✅ Diverted button 0x0053 for event handling
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, 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: BTTHIDPPButtonManager: ✅ Successfully diverted button 0x0056 (response params: 00 56 2B)
LOGI LOG: BTTLogitechManager: ✅ Diverted button 0x0056 for event handling
LOGI LOG: BTTLogitechManager: ℹ️ Diverted buttons will trigger buttonEventHandler callback
LOGI LOG: BTTLogitechManager: Setting hi-res scroll to disabled...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x02)
LOGI LOG: BTTHIDPPButtonManager: 🔍 Readback for 0x00C4: flags=0x01, remapped=0x0000
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x02)
LOGI LOG: BTTHIDPPButtonManager: 🔍 Readback for 0x0053: flags=0x01, remapped=0x0000
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0A, func=0x02)
LOGI LOG: BTTHIDPPButtonManager: 🔍 Readback for 0x0056: flags=0x01, remapped=0x0000
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x10, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x10, func=0x01)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x10, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x10, func=0x02)
LOGI LOG: BTTLogitechManager: ✅ Hi-res scroll set to disabled
LOGI LOG: BTTLogitechManager: Setting DPI for 'MX Anywhere 3S' to 2000...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0E, address=0x08
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0E, func=0x00)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0E, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0E, func=0x01)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0E, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0E, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0E, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0E, func=0x03)
LOGI LOG: BTTLogitechManager: ✅ DPI set to 2000 for 'MX Anywhere 3S' (sensor 0)
LOGI LOG: BTTLogitechManager: ❌ Device 'MX Anywhere 3S' does not support report rate control
LOGI LOG: BTTLogitechManager: ⚠️ Report rate setup failed: Device 'MX Anywhere 3S' does not support report rate control
LOGI LOG: BTTLogitechManager: Setting SmartShift for 'MX Anywhere 3S' (ratchet: 1, autoDisengage: 20, torque: 33)...
LOGI LOG: BTTHIDPPScrollWheelManager: Setting SmartShift Enhanced (0x2111) - mode=0x02 (RATCHET), threshold=20 (sending 20), torque=33...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0F, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0F, func=0x02)
LOGI LOG: BTTHIDPPScrollWheelManager: ✅ SmartShift Enhanced settings applied
LOGI LOG: BTTLogitechManager: ✅ Successfully set SmartShift settings
LOGI LOG: BTTLogitechManager: 🔓 Quick setup guard cleared for 'MX Anywhere 3S'
LOGI LOG: BTTLogitechManager: ✅ Quick setup complete for 'MX Anywhere 3S'
LOGI LOG:
LOGI LOG: ========================================
LOGI LOG: Connected Devices Summary:
LOGI LOG: ========================================
LOGI LOG: - MX Anywhere 3S (VID:0x046d PID:0xb037) Ready:YES Type:Mouse
LOGI LOG: - MX Keys for Mac (VID:0x046d PID:0xc52b) Ready:YES Type:Keyboard
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: End of Debug Information
LOGI LOG: ========================================