MX Ergo Precision Mode Button Remapping Issue with Unifying Receiver


Affected input device (e.g. MacBook Trackpad, Magic Mouse/Trackpad, Touch Bar, etc.): Logitech MX Ergo


Screenshots
If applicable, add screenshots to help explain your problem. (You can just paste or drag them here)

Image from Gyazo


Device information:

  • Type of Mac: Apple M1 MacBook Air
  • macOS version: Sequoia 15.6.1
  • BetterTouchTool version: 6.093(please post the exact version - not just "the latest one")

Additional information (e.g. crash logs, related issues, etc.):

Issue:

When connecting an MX Ergo mouse via a Unifying Receiver, the Precision Mode button(show as Button 12 in BTT) cannot be fully remapped. Specifically, even after enabling the "make all buttons available for remapping in BTT" option, the default Precision Mode toggle setting persists and cannot be overwritten.

Expected Behavior:

For example, when the Precision Mode button is assigned to macOS Mission Control (as shown in the screenshot), pressing the button should launch Mission Control.

Actual Behavior:

Mission Control launches, but simultaneously, the Precision Mode also toggles. This issue does not occur when the mouse is connected via Bluetooth; it only happens when connected with a Unifying Receiver.

The Unifying Receiver and mouse pairing were performed through the BTT UI.

Can you post the logs?

Best press the button a few times towards the end of the 10s capture window

LOGI LOG: ========================================
LOGI LOG: BTT Logitech Debug Information
LOGI LOG: Timestamp: 2026-01-22 16:17:57
LOGI LOG: BTT: (Version: 6.093 | 2026012108)
LOGI LOG: macOS: Version 15.6.1 (Build 24G90)
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 0x600002e063e0 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 0x600002e063e0 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 0x600002e79650 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 0x600002e79650 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 0x600002e04930 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 0x600002e04930 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 0x600002e05e30 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 0x600002e05e30 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 0x600002e28a10 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 0x600002e28a10 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 0x600002e09c00 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: πŸ“₯ Receiver notification: dev=0xFF, subID=0x80, addr=0x00, data=[00 00 00 00]
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: πŸ“₯ Receiver notification: dev=0xFF, subID=0x8F, addr=0x83, data=[B5 03 00 00]
LOGI LOG: BTTLogitechManager: ❌ Receiver error response: register=0x83, error=0xB5
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 0x600002d32d80 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-22 07:12:28 +0000)
LOGI LOG: BTTHIDPPDevice: ⚑ Using cached features for USB Receiver (Slot) (36 features)
LOGI LOG: BTTHIDPPProtocol: Detecting protocol version (deviceIndex: 1)...
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x00, addr=0x18, data=[04 05 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x00, address=0x18
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: βœ… Matched to pending request (feat=0x00, func=0x01)
LOGI LOG: BTTHIDPPProtocol: βœ… Detected protocol version 4.5
LOGI LOG: BTTHIDPPDevice: ⚑ Restoring cached device name: MX Ergo Multi-Device Trackball 
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 0x600002d32d80, deviceIndex 1)
LOGI LOG:    Total event handlers registered: 1
LOGI LOG: Button 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): ❌ NO
LOGI LOG:   Wheel Mode Status (0x2251): ❌ NO
LOGI LOG: No scroll wheel features supported
LOGI LOG: Pointer Speed Manager initialized (0x2205)
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: πŸ“₯ Receiver notification: dev=0x01, subID=0x03, addr=0x08, data=[1F 00 00 00]
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: 31 bytes
LOGI LOG: Reading device name chunk at offset 0/31...
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x03, addr=0x18, data=[4D 58 20 45]
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 Ergo Multi-De"
LOGI LOG: Reading device name chunk at offset 16/31...
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x03, addr=0x18, data=[76 69 63 65]
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: "vice Trackball "
LOGI LOG: πŸ“ Device name assembled: "MX Ergo Multi-Device Trackball " (31 bytes)
LOGI LOG: βœ… Device name from HID++: MX Ergo Multi-Device Trackball 
LOGI LOG: BTTHIDPPFeatureCache: πŸ“ Updated device name for 046d:c52b:slot1 to: MX Ergo Multi-Device Trackball 
LOGI LOG: BTTLogitechManager: πŸ“ Device name updated to: MX Ergo Multi-Device Trackball 
LOGI LOG: BTTLogitechManager: βœ… Device ready - MX Ergo Multi-Device Trackball  (Protocol 4.5)
LOGI LOG: BTTLogitechManager: πŸ” Checking for pending setup requests for 'MX Ergo Multi-Device Trackball '...
LOGI LOG: BTTLogitechManager: Skipping debounced initializeLogitechMice - receiver enumeration in progress
LOGI LOG: BTTLogitechManager: βœ… Device ready in slot 1 - MX Ergo Multi-Device Trackball  (Protocol 4.5)
LOGI LOG: BTTLogitechManager: πŸ” Checking for pending setup requests for 'MX Ergo Multi-Device Trackball '...
LOGI LOG: BTTHIDPPFeatureCache: Saved 2 device profiles to disk
LOGI LOG: BTTLogitechManager: βœ… Set macOS pointer settings for 'MX Ergo Multi-Device Trackball ' (IOHIDDevice: 0x046D:0xC52B): speed=0.80, accel=10.00
LOGI LOG: BTTLogitechManager: ⏳ Deferring quick setup for 'MX Ergo Multi-Device Trackball ' - receiver enumeration in progress
LOGI LOG: BTTLogitechManager: πŸ“₯ Queued deferred setup for 'MX Ergo Multi-Device Trackball ' (total pending: 1)
LOGI LOG: BTTLogitechManager: Checking receiver slot 2...
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0xFF, subID=0x8F, addr=0x83, data=[B5 03 00 00]
LOGI LOG: BTTLogitechManager: ❌ Receiver error response: register=0x83, error=0xB5
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 0x600002d32d80
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 0x600002d33020 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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x02, subID=0x8F, addr=0x00, data=[18 09 00 00]
LOGI LOG: BTTLogitechManager: ❌ Receiver error response: register=0x00, error=0x18
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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0xFF, subID=0x83, addr=0xB5, data=[02 24 11 00]
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 0x600002d32d80
LOGI LOG:    - Device index 2 β†’ protocol 0x600002d33020
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 0x600002e74700 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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x03, subID=0x8F, addr=0x00, data=[18 09 00 00]
LOGI LOG: BTTLogitechManager: ❌ Receiver error response: register=0x00, error=0x18
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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0xFF, subID=0x83, addr=0xB5, data=[03 95 0D 93]
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 0x600002e74700
LOGI LOG:    - Device index 1 β†’ protocol 0x600002d32d80
LOGI LOG:    - Device index 2 β†’ protocol 0x600002d33020
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 0x600002d32fb0 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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x04, subID=0x8F, addr=0x00, data=[18 09 00 00]
LOGI LOG: BTTLogitechManager: ❌ Receiver error response: register=0x00, error=0x18
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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0xFF, subID=0x8F, addr=0x83, data=[B5 03 00 00]
LOGI LOG: BTTLogitechManager: ❌ Receiver error response: register=0x83, error=0xB5
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 0x600002e74700
LOGI LOG:    - Device index 2 β†’ protocol 0x600002d33020
LOGI LOG:    - Device index 1 β†’ protocol 0x600002d32d80
LOGI LOG:    - Device index 4 β†’ protocol 0x600002d32fb0
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 0x600002e755e0 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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x05, subID=0x8F, addr=0x00, data=[18 09 00 00]
LOGI LOG: BTTLogitechManager: ❌ Receiver error response: register=0x00, error=0x18
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: 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 Ergo Multi-Device Trackball 
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 1 device(s).
LOGI LOG: ==============================================

LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0xFF, subID=0x8F, addr=0x83, data=[B5 03 00 00]
LOGI LOG: BTTLogitechManager: ❌ Receiver error response: register=0x83, error=0xB5
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 0x600002e74700
LOGI LOG:    - Device index 2 β†’ protocol 0x600002d33020
LOGI LOG:    - Device index 5 β†’ protocol 0x600002e755e0
LOGI LOG:    - Device index 1 β†’ protocol 0x600002d32d80
LOGI LOG:    - Device index 4 β†’ protocol 0x600002d32fb0
LOGI LOG: BTTLogitechManager: βœ… Set macOS pointer settings for 'MX Ergo Multi-Device Trackball ' (IOHIDDevice: 0x046D:0xC52B): speed=0.80, accel=10.00
LOGI LOG: BTTLogitechManager: ⏳ Deferring quick setup for 'MX Ergo Multi-Device Trackball ' - receiver enumeration in progress
LOGI LOG: BTTLogitechManager: πŸ“₯ Queued deferred setup for 'MX Ergo Multi-Device Trackball ' (total pending: 2)
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 0x600002eef100 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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x08, data=[09 00 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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 9 keys/buttons to enumerate
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x08, addr=0x08, data=[32 14 00 00]
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: 
πŸ”‹ Battery:
LOGI LOG:    Level:        50%
LOGI LOG:    Status:       Discharging
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x18, data=[00 50 00 38]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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=0x11 [MouseBtn|Reprog] divertable=0 virtual=0
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x28, data=[00 50 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x18, data=[00 51 00 39]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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=0x11 [MouseBtn|Reprog] divertable=0 virtual=0
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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x06, subID=0x8F, addr=0x00, data=[18 09 00 00]
LOGI LOG: BTTLogitechManager: ❌ Receiver error response: register=0x00, error=0x18
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: 🧹 Cleared 2 deferred device setup request(s) - will be re-triggered by initializeLogitechMice
LOGI LOG: BTTLogitechManager: Triggering initializeLogitechMice after receiver enumeration complete
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 Ergo Multi-Device Trackball 
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 1 device(s).
LOGI LOG: ==============================================

LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x28, data=[00 51 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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: BTTLogitechManager: βœ… Set macOS pointer settings for 'MX Ergo Multi-Device Trackball ' (IOHIDDevice: 0x046D:0xC52B): speed=0.80, accel=10.00
LOGI LOG: BTTLogitechManager: Quick setup for 'MX Ergo Multi-Device Trackball '...
LOGI LOG: BTTLogitechManager: πŸ”’ Started quick setup for 'MX Ergo Multi-Device Trackball ' (guard key: MX Ergo Multi-Device Trackball :slot1)
LOGI LOG: BTTLogitechManager: βœ… Device 'MX Ergo Multi-Device Trackball ' is ready (slot 1), proceeding with quick setup
LOGI LOG: BTTLogitechManager: Remapping buttons to standard mouse buttons for 'MX Ergo Multi-Device Trackball ' (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 (9 buttons, cached 2026-01-12 02:39:33 +0000)
LOGI LOG: BTTHIDPPButtonManager: ⚑ Loaded 9 buttons from persistent cache (FAST STARTUP)
LOGI LOG: BTTLogitechManager: ⚑ Loaded 9 buttons from persistent cache for remapping (FAST STARTUP)
LOGI LOG: BTTLogitechManager: ⚑ Using 9 cached buttons for remapping
LOGI LOG: BTTLogitechManager: Found 9 buttons, analyzing task IDs...
LOGI LOG: BTTLogitechManager: Device 'MX Ergo Multi-Device Trackball ' 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 0x00ED, flags=0x71
LOGI LOG: BTTLogitechManager:   Processing button 0x005B, flags=0x71
LOGI LOG: BTTLogitechManager:   Processing button 0x005D, flags=0x71
LOGI LOG: BTTLogitechManager:   Processing button 0x00D7, flags=0xA0
LOGI LOG: BTTLogitechManager:   β†’ Skipping non-reprogrammable button 0x00D7
LOGI LOG: BTTLogitechManager:   β†’ Dynamic mapping: controlId 0x005B β†’ button 10 (sorted by controlId)
LOGI LOG: BTTLogitechManager:   β†’ Dynamic mapping: controlId 0x005D β†’ button 11 (sorted by controlId)
LOGI LOG: BTTLogitechManager:   β†’ Dynamic mapping: controlId 0x00ED β†’ button 12 (sorted by controlId)
LOGI LOG: BTTLogitechManager: βœ… Created dynamic button mapping for 'MX Ergo Multi-Device Trackball ' with 8 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: BTTHIDPPButtonManager: πŸ”„ Sequential undiverting 5 buttons (receiver device, slot 1)...
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x08, data=[09 00 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x08
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 4 pending requests for match
LOGI LOG: BTTHIDPPProtocol: βœ… Matched to pending request (feat=0x0A, func=0x00)
LOGI LOG: BTTHIDPPButtonManager: πŸ“Š Device reports 9 keys/buttons to enumerate
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x08, addr=0x08, data=[32 14 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x08, address=0x08
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 4 pending requests for match
LOGI LOG: BTTHIDPPProtocol: βœ… Matched to pending request (feat=0x08, func=0x00)
LOGI LOG: 
πŸ”‹ Battery:
LOGI LOG:    Level:        50%
LOGI LOG:    Status:       Discharging
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x38, data=[00 00 00 00]
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: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x18, data=[00 52 00 3A]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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: πŸ“‹ [2] Key/Button 0x0052: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x18, data=[00 50 00 38]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 3 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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x28, data=[00 52 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 3 pending requests for match
LOGI LOG: BTTHIDPPProtocol: βœ… Matched to pending request (feat=0x0A, func=0x02)
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x38, data=[00 00 00 00]
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: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x28, data=[00 50 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x18, data=[00 53 00 3C]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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: πŸ“‹ [3] Key/Button 0x0053: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x18, data=[00 51 00 39]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 3 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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x28, data=[00 53 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 3 pending requests for match
LOGI LOG: BTTHIDPPProtocol: βœ… Matched to pending request (feat=0x0A, func=0x02)
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x38, data=[00 00 00 00]
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: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x28, data=[00 51 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x18, data=[00 56 00 3E]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 3 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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x18, data=[00 52 00 3A]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 3 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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x38, data=[00 00 00 00]
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: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x28, data=[00 56 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x28, data=[00 52 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x18, data=[00 ED 00 C4]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 3 pending requests for match
LOGI LOG: BTTHIDPPProtocol: βœ… Matched to pending request (feat=0x0A, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: πŸ“‹ [5] Key/Button 0x00ED: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x18, data=[00 53 00 3C]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 3 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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x38, data=[00 00 00 00]
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: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x28, data=[00 ED 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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: πŸ”„ Sequential undiversion complete: 5/5 succeeded
LOGI LOG: BTTLogitechManager: βœ… Undivert phase complete (5/5), 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 0x00ED: task 0x00C4 β†’ 0x0060
LOGI LOG: BTTLogitechManager:   Remapping extra button 0x005B: task 0x003F β†’ 0x0061
LOGI LOG: BTTLogitechManager:   No more task IDs available for button 0x005D, will divert instead
LOGI LOG: BTTLogitechManager:   Skipping non-reprogrammable button 0x00D7
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x28, data=[00 53 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 3 pending requests for match
LOGI LOG: BTTHIDPPProtocol: βœ… Matched to pending request (feat=0x0A, func=0x02)
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x18, data=[00 5B 00 3F]
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 0x005B: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x38, data=[00 00 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x38
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 6 pending requests for match
LOGI LOG: BTTHIDPPProtocol: βœ… Matched to pending request (feat=0x0A, func=0x03)
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x38, data=[00 00 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x38
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 5 pending requests for match
LOGI LOG: BTTHIDPPProtocol: βœ… Matched to pending request (feat=0x0A, func=0x03)
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x38, data=[00 00 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x38
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 4 pending requests for match
LOGI LOG: BTTHIDPPProtocol: βœ… Matched to pending request (feat=0x0A, func=0x03)
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x38, data=[00 00 00 00]
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: βœ… Remapped 4 buttons via task IDs
LOGI LOG: BTTLogitechManager: πŸ”€ Diverting 1 buttons that couldn't be remapped for event handling...
LOGI LOG: BTTHIDPPButtonManager: πŸ”„ Sequential diverting 1 buttons (receiver device, slot 1)...
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x18, data=[00 56 00 3E]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 3 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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x28, data=[00 5B 04 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x28
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 3 pending requests for match
LOGI LOG: BTTHIDPPProtocol: βœ… Matched to pending request (feat=0x0A, func=0x02)
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x38, data=[00 00 00 00]
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: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x28, data=[00 56 04 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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: πŸ”„ Sequential diversion complete: 1/1 succeeded
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x18, data=[00 5D 00 40]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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: BTTLogitechManager: βœ… Diverted 1/1 buttons for event handling
LOGI LOG: BTTLogitechManager: ℹ️  Diverted buttons will trigger buttonEventHandler callback
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: ❌ Device 'MX Ergo Multi-Device Trackball ' does not support DPI control
LOGI LOG: BTTLogitechManager: ⚠️  DPI setup failed: Device 'MX Ergo Multi-Device Trackball ' does not support DPI control
LOGI LOG: BTTLogitechManager: ❌ Device 'MX Ergo Multi-Device Trackball ' does not support report rate control
LOGI LOG: BTTLogitechManager: ⚠️  Report rate setup failed: Device 'MX Ergo Multi-Device Trackball ' does not support report rate control
LOGI LOG: BTTLogitechManager: Setting SmartShift for 'MX Ergo Multi-Device Trackball ' (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 Ergo Multi-Device Trackball ' (guard key: MX Ergo Multi-Device Trackball :slot1)
LOGI LOG: BTTLogitechManager: βœ… Quick setup complete for 'MX Ergo Multi-Device Trackball '
LOGI LOG: BTTHIDPPButtonManager: πŸ“‹ [7] Key/Button 0x005D: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x18, data=[00 ED 00 C4]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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: πŸ“‹ [5] Key/Button 0x00ED: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x28, data=[00 5D 01 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x28, data=[00 ED 04 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x18, data=[00 D7 00 B4]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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: πŸ“‹ [8] Key/Button 0x00D7: flags=0xA0 [DIVERT|VIRTUAL] divertable=1 virtual=1
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x18, data=[00 5B 00 3F]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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: πŸ“‹ [6] Key/Button 0x005B: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x28, data=[00 D7 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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: 
πŸ–±οΈ  Buttons:
LOGI LOG:    Total:        9 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: 0x00ED)
LOGI LOG:       Button at position 0 (controlId: 0x005B)
LOGI LOG:       Button at position 0 (controlId: 0x005D)
LOGI LOG:       Button at position 0 (controlId: 0x00D7)
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x28, data=[00 5B 04 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x18, data=[00 5D 00 40]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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: πŸ“‹ [7] Key/Button 0x005D: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x28, data=[00 5D 01 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x18, data=[00 D7 00 B4]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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: πŸ“‹ [8] Key/Button 0x00D7: flags=0xA0 [DIVERT|VIRTUAL] divertable=1 virtual=1
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x28, data=[00 D7 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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:        9 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: 0x00ED)
LOGI LOG:       Button at position 0 (controlId: 0x005B)
LOGI LOG:       Button at position 0 (controlId: 0x005D)
LOGI LOG:       Button at position 0 (controlId: 0x00D7)
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x00, data=[00 ED 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 ED 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
    237
)}, Newly pressed: {(
    237
)}, Released: {(
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button press: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=1
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x148022cb0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button pressed on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking DOWN for MX Ergo Multi-Device Trackball  button 12: clickCount=1, timeSinceLastClick=790759081.767s
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xC52B, packed=0xC52B046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=25, button=12, buttonNumber=12, clickCount=1, location=(1690.8,594.8)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x00, data=[00 00 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 00 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
)}, Newly pressed: {(
)}, Released: {(
    237
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button release: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=0
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x148022cb0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button released on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking UP for MX Ergo Multi-Device Trackball  button 12: clickCount=1 (matched from DOWN)
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xC52B, packed=0xC52B046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=26, button=12, buttonNumber=12, clickCount=1, location=(1690.8,594.8)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x00, data=[00 ED 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 ED 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
    237
)}, Newly pressed: {(
    237
)}, Released: {(
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button press: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=1
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x148022cb0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button pressed on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking DOWN for MX Ergo Multi-Device Trackball  button 12: clickCount=1, timeSinceLastClick=1.059s
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xC52B, packed=0xC52B046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=25, button=12, buttonNumber=12, clickCount=1, location=(1690.8,594.8)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x00, data=[00 00 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 00 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
)}, Newly pressed: {(
)}, Released: {(
    237
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button release: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=0
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x148022cb0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button released on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking UP for MX Ergo Multi-Device Trackball  button 12: clickCount=1 (matched from DOWN)
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xC52B, packed=0xC52B046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=26, button=12, buttonNumber=12, clickCount=1, location=(1690.8,594.8)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x00, data=[00 ED 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 ED 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
    237
)}, Newly pressed: {(
    237
)}, Released: {(
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button press: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=1
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x148022cb0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button pressed on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking DOWN for MX Ergo Multi-Device Trackball  button 12: clickCount=1, timeSinceLastClick=0.835s
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xC52B, packed=0xC52B046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=25, button=12, buttonNumber=12, clickCount=1, location=(1690.8,594.8)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x00, data=[00 00 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 00 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
)}, Newly pressed: {(
)}, Released: {(
    237
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button release: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=0
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x148022cb0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button released on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking UP for MX Ergo Multi-Device Trackball  button 12: clickCount=1 (matched from DOWN)
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xC52B, packed=0xC52B046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=26, button=12, buttonNumber=12, clickCount=1, location=(1690.8,594.8)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x00, data=[00 ED 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 ED 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
    237
)}, Newly pressed: {(
    237
)}, Released: {(
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button press: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=1
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x148022cb0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button pressed on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking DOWN for MX Ergo Multi-Device Trackball  button 12: clickCount=1, timeSinceLastClick=0.956s
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xC52B, packed=0xC52B046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=25, button=12, buttonNumber=12, clickCount=1, location=(1690.8,594.8)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x00, data=[00 00 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 00 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
)}, Newly pressed: {(
)}, Released: {(
    237
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button release: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=0
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x148022cb0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button released on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking UP for MX Ergo Multi-Device Trackball  button 12: clickCount=1 (matched from DOWN)
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xC52B, packed=0xC52B046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=26, button=12, buttonNumber=12, clickCount=1, location=(1690.8,594.8)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x00, data=[00 ED 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 ED 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
    237
)}, Newly pressed: {(
    237
)}, Released: {(
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button press: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=1
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x148022cb0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button pressed on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking DOWN for MX Ergo Multi-Device Trackball  button 12: clickCount=1, timeSinceLastClick=1.044s
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xC52B, packed=0xC52B046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=25, button=12, buttonNumber=12, clickCount=1, location=(1690.8,594.8)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x00, data=[00 00 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 00 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
)}, Newly pressed: {(
)}, Released: {(
    237
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button release: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=0
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x148022cb0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button released on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking UP for MX Ergo Multi-Device Trackball  button 12: clickCount=1 (matched from DOWN)
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xC52B, packed=0xC52B046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=26, button=12, buttonNumber=12, clickCount=1, location=(1690.8,594.8)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x00, data=[00 ED 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 ED 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
    237
)}, Newly pressed: {(
    237
)}, Released: {(
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button press: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=1
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x148022cb0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button pressed on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking DOWN for MX Ergo Multi-Device Trackball  button 12: clickCount=1, timeSinceLastClick=0.728s
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xC52B, packed=0xC52B046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=25, button=12, buttonNumber=12, clickCount=1, location=(1690.8,594.8)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x00, data=[00 00 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 00 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
)}, Newly pressed: {(
)}, Released: {(
    237
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button release: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=0
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x148022cb0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button released on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking UP for MX Ergo Multi-Device Trackball  button 12: clickCount=1 (matched from DOWN)
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xC52B, packed=0xC52B046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=26, button=12, buttonNumber=12, clickCount=1, location=(1690.8,594.8)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x00, data=[00 ED 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 ED 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
    237
)}, Newly pressed: {(
    237
)}, Released: {(
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button press: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=1
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x148022cb0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button pressed on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking DOWN for MX Ergo Multi-Device Trackball  button 12: clickCount=1, timeSinceLastClick=1.746s
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xC52B, packed=0xC52B046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=25, button=12, buttonNumber=12, clickCount=1, location=(1690.8,594.8)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x0A, addr=0x00, data=[00 00 00 00]
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 00 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
)}, Newly pressed: {(
)}, Released: {(
    237
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button release: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=0
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x148022cb0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button released on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking UP for MX Ergo Multi-Device Trackball  button 12: clickCount=1 (matched from DOWN)
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xC52B, packed=0xC52B046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=26, button=12, buttonNumber=12, clickCount=1, location=(1690.8,594.8)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: 
LOGI LOG: ========================================
LOGI LOG: Connected Devices Summary:
LOGI LOG: ========================================
LOGI LOG:   - MX Ergo Multi-Device Trackball  (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: ========================================

Thank you!! I post my log.

would you be able to post the same log when connected via bluetooth?

LOGI LOG: ========================================
LOGI LOG: BTT Logitech Debug Information
LOGI LOG: Timestamp: 2026-01-22 17:20:52
LOGI LOG: BTT: (Version: 6.093 | 2026012108)
LOGI LOG: macOS: Version 15.6.1 (Build 24G90)
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 0x600002574f50 for deviceIndex 0 (remaining protocols for this device: 1)
LOGI LOG: BTTHIDPPProtocol: ❌ Unregistered protocol 0x6000025501c0 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 0x6000025501c0 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 0x600002545260 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 0x600002545260 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 0x60000254d500 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 0x60000254d500 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 0x60000254ec30 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 0x60000254ec30 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 0x600002547e90 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 0x600002547e90 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 0x600002547db0 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 - MX Ergo - Interface: ?, Usage Page: 0x0001, Usage: 0x0002
LOGI LOG: BTTLogitechManager: βœ… Accepted - Bluetooth Logitech device (HID++ over mouse interface) [generic]
LOGI LOG: BTTLogitechManager: Device connected - MX Ergo (046d:b01d)
LOGI LOG: BTTHIDPPDevice: Auto-detected deviceIndex 0x00 for 046d:b01d (Bluetooth)
LOGI LOG: BTTHIDPPDevice: Initializing with deviceIndex=0, IOHIDDevice retain count=3
LOGI LOG: Unknown device: MX Ergo (046d:b01d) - 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 0x6000026424c0 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 0.5s before starting feature discovery for MX Ergo...
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: 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: πŸ“₯ Receiver notification: dev=0xFF, subID=0x80, addr=0x00, data=[00 00 00 00]
LOGI LOG: BTTLogitechManager: Starting feature discovery for MX Ergo...
LOGI LOG: BTTHIDPPFeatureCache: βœ… Found cached features for 046d:b01d (cached 2026-01-21 19:18:52 +0000)
LOGI LOG: BTTHIDPPDevice: ⚑ Using cached features for MX Ergo (34 features)
LOGI LOG: BTTHIDPPDevice: ⚑ Restoring cached device name: MX Ergo Multi-Device Trackball 
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 0x6000026424c0, deviceIndex 0)
LOGI LOG:    Total event handlers registered: 1
LOGI LOG: Button 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): ❌ NO
LOGI LOG:   Wheel Mode Status (0x2251): ❌ NO
LOGI LOG: No scroll wheel features supported
LOGI LOG: Pointer Speed Manager initialized (0x2205)
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: 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: πŸ“₯ Receiver notification: dev=0xFF, subID=0x8F, addr=0x83, data=[B5 03 00 00]
LOGI LOG: BTTLogitechManager: ❌ Receiver error response: register=0x83, error=0xB5
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: 31 bytes
LOGI LOG: Reading device name chunk at offset 0/31...
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 16 bytes: "MX Ergo Multi-De"
LOGI LOG: Reading device name chunk at offset 16/31...
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 0x60000253cf50 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: 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 15 bytes: "vice Trackball "
LOGI LOG: πŸ“ Device name assembled: "MX Ergo Multi-Device Trackball " (31 bytes)
LOGI LOG: βœ… Device name from HID++: MX Ergo Multi-Device Trackball 
LOGI LOG: BTTHIDPPFeatureCache: πŸ“ Updated device name for 046d:b01d to: MX Ergo Multi-Device Trackball 
LOGI LOG: BTTLogitechManager: πŸ“ Device name updated to: MX Ergo Multi-Device Trackball 
LOGI LOG: BTTLogitechManager: βœ… Device ready - MX Ergo Multi-Device Trackball  (Protocol 4.5)
LOGI LOG: BTTLogitechManager: πŸ” Checking for pending setup requests for 'MX Ergo Multi-Device Trackball '...
LOGI LOG: BTTLogitechManager: Skipping debounced initializeLogitechMice - receiver enumeration in progress
LOGI LOG: BTTLogitechManager: βœ… Device ready - MX Ergo Multi-Device Trackball  (Protocol 4.5)
LOGI LOG: BTTLogitechManager: Device MX Ergo Multi-Device Trackball  has no onboard profiles - skipping auto ONBOARD mode
LOGI LOG: BTTLogitechManager: πŸ” Checking for pending setup requests for 'MX Ergo Multi-Device Trackball '...
LOGI LOG: BTTHIDPPFeatureCache: Saved 1 device profiles to disk
LOGI LOG: BTTLogitechManager: βœ… Set macOS pointer settings for 'MX Ergo Multi-Device Trackball ' (IOHIDDevice: 0x046D:0xB01D): speed=0.80, accel=10.00
LOGI LOG: BTTLogitechManager: ⏳ Deferring quick setup for 'MX Ergo Multi-Device Trackball ' - receiver enumeration in progress
LOGI LOG: BTTLogitechManager: πŸ“₯ Queued deferred setup for 'MX Ergo Multi-Device Trackball ' (total pending: 1)
LOGI LOG: BTTHIDPPFeatureCache: ❌ No cached features for 046d:c52b:slot1
LOGI LOG: BTTHIDPPDevice: πŸ” No cached features for USB Receiver (Slot), performing full discovery...
LOGI LOG: BTTHIDPPProtocol: Detecting protocol version (deviceIndex: 1)...
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x01, subID=0x8F, addr=0x00, data=[18 09 00 00]
LOGI LOG: BTTLogitechManager: ❌ Receiver error response: register=0x00, error=0x18
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x01, 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 1: HID++ error: 0x09
LOGI LOG: BTTLogitechManager: Checking receiver slot 2...
LOGI LOG: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0xFF, subID=0x8F, addr=0x83, data=[B5 03 00 00]
LOGI LOG: BTTLogitechManager: ❌ Receiver error response: register=0x83, error=0xB5
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 0x60000253cf50
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 0x6000025feed0 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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x02, subID=0x8F, addr=0x00, data=[18 09 00 00]
LOGI LOG: BTTLogitechManager: ❌ Receiver error response: register=0x00, error=0x18
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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0xFF, subID=0x83, addr=0xB5, data=[02 24 11 00]
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 0x60000253cf50
LOGI LOG:    - Device index 2 β†’ protocol 0x6000025feed0
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 0x6000025fed10 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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x03, subID=0x8F, addr=0x00, data=[18 09 00 00]
LOGI LOG: BTTLogitechManager: ❌ Receiver error response: register=0x00, error=0x18
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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0xFF, subID=0x83, addr=0xB5, data=[03 95 0D 93]
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 0x6000025fed10
LOGI LOG:    - Device index 1 β†’ protocol 0x60000253cf50
LOGI LOG:    - Device index 2 β†’ protocol 0x6000025feed0
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 0x60000253c8c0 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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x04, subID=0x8F, addr=0x00, data=[18 09 00 00]
LOGI LOG: BTTLogitechManager: ❌ Receiver error response: register=0x00, error=0x18
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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0xFF, subID=0x8F, addr=0x83, data=[B5 03 00 00]
LOGI LOG: BTTLogitechManager: ❌ Receiver error response: register=0x83, error=0xB5
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 0x6000025fed10
LOGI LOG:    - Device index 2 β†’ protocol 0x6000025feed0
LOGI LOG:    - Device index 1 β†’ protocol 0x60000253cf50
LOGI LOG:    - Device index 4 β†’ protocol 0x60000253c8c0
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 0x6000025fe8b0 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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x05, subID=0x8F, addr=0x00, data=[18 09 00 00]
LOGI LOG: BTTLogitechManager: ❌ Receiver error response: register=0x00, error=0x18
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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0xFF, subID=0x8F, addr=0x83, data=[B5 03 00 00]
LOGI LOG: BTTLogitechManager: ❌ Receiver error response: register=0x83, error=0xB5
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 0x6000025fed10
LOGI LOG:    - Device index 2 β†’ protocol 0x6000025feed0
LOGI LOG:    - Device index 5 β†’ protocol 0x6000025fe8b0
LOGI LOG:    - Device index 1 β†’ protocol 0x60000253cf50
LOGI LOG:    - Device index 4 β†’ protocol 0x60000253c8c0
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 0x6000025388c0 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: BTTLogitechManager: πŸ“₯ Receiver notification: dev=0x06, subID=0x8F, addr=0x00, data=[18 09 00 00]
LOGI LOG: BTTLogitechManager: ❌ Receiver error response: register=0x00, error=0x18
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: 🧹 Cleared 1 deferred device setup request(s) - will be re-triggered by initializeLogitechMice
LOGI LOG: BTTLogitechManager: Triggering initializeLogitechMice after receiver enumeration complete
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 Ergo Multi-Device Trackball 
LOGI LOG: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
LOGI LOG: πŸ“‹ Basic Information:
LOGI LOG:    Vendor ID:     0x046d (Logitech)
LOGI LOG:    Product ID:    0xb01d
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:         ❌ 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 1 device(s).
LOGI LOG: ==============================================

LOGI LOG: BTTLogitechManager: βœ… Set macOS pointer settings for 'MX Ergo Multi-Device Trackball ' (IOHIDDevice: 0x046D:0xB01D): speed=0.80, accel=10.00
LOGI LOG: BTTLogitechManager: Quick setup for 'MX Ergo Multi-Device Trackball '...
LOGI LOG: BTTLogitechManager: πŸ”’ Started quick setup for 'MX Ergo Multi-Device Trackball ' (guard key: MX Ergo Multi-Device Trackball )
LOGI LOG: BTTLogitechManager: βœ… Device 'MX Ergo Multi-Device Trackball ' is ready (slot 0), proceeding with quick setup
LOGI LOG: BTTLogitechManager: Remapping buttons to standard mouse buttons for 'MX Ergo Multi-Device Trackball ' (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:b01d (9 buttons, cached 2026-01-12 01:29:17 +0000)
LOGI LOG: BTTHIDPPButtonManager: ⚑ Loaded 9 buttons from persistent cache (FAST STARTUP)
LOGI LOG: BTTLogitechManager: ⚑ Loaded 9 buttons from persistent cache for remapping (FAST STARTUP)
LOGI LOG: BTTLogitechManager: ⚑ Using 9 cached buttons for remapping
LOGI LOG: BTTLogitechManager: Found 9 buttons, analyzing task IDs...
LOGI LOG: BTTLogitechManager: Device 'MX Ergo Multi-Device Trackball ' 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 0x00ED, flags=0x71
LOGI LOG: BTTLogitechManager:   Processing button 0x005B, flags=0x71
LOGI LOG: BTTLogitechManager:   Processing button 0x005D, flags=0x71
LOGI LOG: BTTLogitechManager:   Processing button 0x00D7, flags=0xA0
LOGI LOG: BTTLogitechManager:   β†’ Skipping non-reprogrammable button 0x00D7
LOGI LOG: BTTLogitechManager:   β†’ Dynamic mapping: controlId 0x005B β†’ button 10 (sorted by controlId)
LOGI LOG: BTTLogitechManager:   β†’ Dynamic mapping: controlId 0x005D β†’ button 11 (sorted by controlId)
LOGI LOG: BTTLogitechManager:   β†’ Dynamic mapping: controlId 0x00ED β†’ button 12 (sorted by controlId)
LOGI LOG: BTTLogitechManager: βœ… Created dynamic button mapping for 'MX Ergo Multi-Device Trackball ' with 8 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: BTTHIDPPButtonManager: ⚑ Parallel undiverting 5 buttons (direct connection)...
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 Ergo Multi-Device Trackball 
LOGI LOG: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
LOGI LOG: πŸ“‹ Basic Information:
LOGI LOG:    Vendor ID:     0x046d (Logitech)
LOGI LOG:    Product ID:    0xb01d
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:         ❌ 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 1 device(s).
LOGI LOG: ==============================================

LOGI LOG: BTTLogitechManager: βœ… Set macOS pointer settings for 'MX Ergo Multi-Device Trackball ' (IOHIDDevice: 0x046D:0xB01D): speed=0.80, accel=10.00
LOGI LOG: BTTLogitechManager: Quick setup for 'MX Ergo Multi-Device Trackball '...
LOGI LOG: BTTLogitechManager: ⏭️ Quick setup already in progress for 'MX Ergo Multi-Device Trackball ' (guard key: MX Ergo Multi-Device Trackball ), skipping duplicate call
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 9 keys/buttons to enumerate
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x00, 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: 
πŸ”‹ Battery:
LOGI LOG:    Level:        50%
LOGI LOG:    Status:       Discharging
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 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 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: βœ… Matched to pending request (feat=0x0A, func=0x03)
LOGI LOG: BTTHIDPPButtonManager: ⚑ Parallel undiversion complete: 5/5 succeeded
LOGI LOG: BTTLogitechManager: βœ… Undivert phase complete (5/5), 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 0x00ED: task 0x00C4 β†’ 0x0060
LOGI LOG: BTTLogitechManager:   Remapping extra button 0x005B: task 0x003F β†’ 0x0061
LOGI LOG: BTTLogitechManager:   No more task IDs available for button 0x005D, will divert instead
LOGI LOG: BTTLogitechManager:   Skipping non-reprogrammable button 0x00D7
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 9 keys/buttons to enumerate
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x00, 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: 
πŸ”‹ Battery:
LOGI LOG:    Level:        50%
LOGI LOG:    Status:       Discharging
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=0x11 [MouseBtn|Reprog] divertable=0 virtual=0
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 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 0x0056: 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 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 0x00ED: 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 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 0x005B: HID++ error: 0x02 (detected in 0xFF response format)
LOGI LOG: BTTLogitechManager: βœ… Remapped 0 buttons via task IDs
LOGI LOG: BTTLogitechManager: πŸ”€ Diverting 5 buttons that couldn't be remapped for event handling...
LOGI LOG: BTTHIDPPButtonManager: ⚑ Parallel diverting 5 buttons (direct connection)...
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0A, address=0x18
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 3 pending requests for match
LOGI LOG: BTTHIDPPProtocol: βœ… Matched to pending request (feat=0x0A, func=0x01)
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: πŸ“‹ [0] Key/Button 0x0050: flags=0x11 [MouseBtn|Reprog] divertable=0 virtual=0
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 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 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: βœ… Matched to pending request (feat=0x0A, func=0x03)
LOGI LOG: BTTHIDPPButtonManager: ⚑ Parallel diversion complete: 5/5 succeeded
LOGI LOG: BTTLogitechManager: βœ… Diverted 5/5 buttons for event handling
LOGI LOG: BTTLogitechManager: ℹ️  Diverted buttons will trigger buttonEventHandler callback
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: ❌ Device 'MX Ergo Multi-Device Trackball ' does not support DPI control
LOGI LOG: BTTLogitechManager: ⚠️  DPI setup failed: Device 'MX Ergo Multi-Device Trackball ' does not support DPI control
LOGI LOG: BTTLogitechManager: ❌ Device 'MX Ergo Multi-Device Trackball ' does not support report rate control
LOGI LOG: BTTLogitechManager: ⚠️  Report rate setup failed: Device 'MX Ergo Multi-Device Trackball ' does not support report rate control
LOGI LOG: BTTLogitechManager: Setting SmartShift for 'MX Ergo Multi-Device Trackball ' (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 Ergo Multi-Device Trackball ' (guard key: MX Ergo Multi-Device Trackball )
LOGI LOG: BTTLogitechManager: βœ… Quick setup complete for 'MX Ergo Multi-Device Trackball '
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: 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: πŸ“‹ [1] Key/Button 0x0051: flags=0x11 [MouseBtn|Reprog] divertable=0 virtual=0
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: πŸ“‹ [1] Key/Button 0x0051: flags=0x11 [MouseBtn|Reprog] divertable=0 virtual=0
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: 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: 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: πŸ“‹ [2] Key/Button 0x0052: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
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: πŸ“‹ [2] Key/Button 0x0052: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
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: 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: 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: πŸ“‹ [3] Key/Button 0x0053: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
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: πŸ“‹ [3] Key/Button 0x0053: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
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: 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: 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: πŸ“‹ [4] Key/Button 0x0056: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
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: πŸ“‹ [4] Key/Button 0x0056: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
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: 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: 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: πŸ“‹ [5] Key/Button 0x00ED: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
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: πŸ“‹ [5] Key/Button 0x00ED: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
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: 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: 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: πŸ“‹ [6] Key/Button 0x005B: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
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: πŸ“‹ [6] Key/Button 0x005B: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
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: 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: 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: πŸ“‹ [7] Key/Button 0x005D: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
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: πŸ“‹ [7] Key/Button 0x005D: flags=0x71 [MouseBtn|Reprog|DIVERT|Persist] divertable=1 virtual=0
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: 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: 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: πŸ“‹ [8] Key/Button 0x00D7: flags=0xA0 [DIVERT|VIRTUAL] divertable=1 virtual=1
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: πŸ“‹ [8] 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 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: βœ… Matched to pending request (feat=0x0A, func=0x02)
LOGI LOG: 
πŸ–±οΈ  Buttons:
LOGI LOG:    Total:        9 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: 0x00ED)
LOGI LOG:       Button at position 0 (controlId: 0x005B)
LOGI LOG:       Button at position 0 (controlId: 0x005D)
LOGI LOG:       Button at position 0 (controlId: 0x00D7)
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:        9 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: 0x00ED)
LOGI LOG:       Button at position 0 (controlId: 0x005B)
LOGI LOG:       Button at position 0 (controlId: 0x005D)
LOGI LOG:       Button at position 0 (controlId: 0x00D7)
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 ED 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
    237
)}, Newly pressed: {(
    237
)}, Released: {(
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button press: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=1
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x106b1a4a0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button pressed on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking DOWN for MX Ergo Multi-Device Trackball  button 12: clickCount=1, timeSinceLastClick=790762858.777s
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xB01D, packed=0xB01D046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=25, button=12, buttonNumber=12, clickCount=1, location=(1620.6,579.9)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 00 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
)}, Newly pressed: {(
)}, Released: {(
    237
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button release: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=0
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x106b1a4a0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button released on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking UP for MX Ergo Multi-Device Trackball  button 12: clickCount=1 (matched from DOWN)
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xB01D, packed=0xB01D046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=26, button=12, buttonNumber=12, clickCount=1, location=(1620.6,579.9)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 ED 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
    237
)}, Newly pressed: {(
    237
)}, Released: {(
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button press: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=1
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x106b1a4a0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button pressed on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking DOWN for MX Ergo Multi-Device Trackball  button 12: clickCount=1, timeSinceLastClick=0.774s
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xB01D, packed=0xB01D046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=25, button=12, buttonNumber=12, clickCount=1, location=(1620.6,579.9)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 00 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
)}, Newly pressed: {(
)}, Released: {(
    237
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button release: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=0
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x106b1a4a0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button released on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking UP for MX Ergo Multi-Device Trackball  button 12: clickCount=1 (matched from DOWN)
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xB01D, packed=0xB01D046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=26, button=12, buttonNumber=12, clickCount=1, location=(1620.6,579.9)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 ED 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
    237
)}, Newly pressed: {(
    237
)}, Released: {(
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button press: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=1
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x106b1a4a0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button pressed on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking DOWN for MX Ergo Multi-Device Trackball  button 12: clickCount=1, timeSinceLastClick=0.643s
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xB01D, packed=0xB01D046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=25, button=12, buttonNumber=12, clickCount=1, location=(1620.6,579.9)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 00 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
)}, Newly pressed: {(
)}, Released: {(
    237
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button release: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=0
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x106b1a4a0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button released on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking UP for MX Ergo Multi-Device Trackball  button 12: clickCount=1 (matched from DOWN)
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xB01D, packed=0xB01D046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=26, button=12, buttonNumber=12, clickCount=1, location=(1620.6,579.9)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 ED 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
    237
)}, Newly pressed: {(
    237
)}, Released: {(
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button press: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=1
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x106b1a4a0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button pressed on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking DOWN for MX Ergo Multi-Device Trackball  button 12: clickCount=1, timeSinceLastClick=0.826s
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xB01D, packed=0xB01D046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=25, button=12, buttonNumber=12, clickCount=1, location=(1620.6,579.9)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 00 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
)}, Newly pressed: {(
)}, Released: {(
    237
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button release: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=0
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x106b1a4a0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button released on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking UP for MX Ergo Multi-Device Trackball  button 12: clickCount=1 (matched from DOWN)
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xB01D, packed=0xB01D046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=26, button=12, buttonNumber=12, clickCount=1, location=(1620.6,579.9)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 ED 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
    237
)}, Newly pressed: {(
    237
)}, Released: {(
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button press: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=1
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x106b1a4a0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button pressed on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking DOWN for MX Ergo Multi-Device Trackball  button 12: clickCount=1, timeSinceLastClick=1.176s
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xB01D, packed=0xB01D046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=25, button=12, buttonNumber=12, clickCount=1, location=(1620.6,579.9)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 00 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
)}, Newly pressed: {(
)}, Released: {(
    237
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button release: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=0
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x106b1a4a0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button released on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking UP for MX Ergo Multi-Device Trackball  button 12: clickCount=1 (matched from DOWN)
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xB01D, packed=0xB01D046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=26, button=12, buttonNumber=12, clickCount=1, location=(1620.6,579.9)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 ED 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
    237
)}, Newly pressed: {(
    237
)}, Released: {(
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button press: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=1
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x106b1a4a0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button pressed on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking DOWN for MX Ergo Multi-Device Trackball  button 12: clickCount=1, timeSinceLastClick=0.586s
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xB01D, packed=0xB01D046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=25, button=12, buttonNumber=12, clickCount=1, location=(1620.6,579.9)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: BTTHIDPPProtocol: πŸ” INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x0A, address=0x00
LOGI LOG: BTTHIDPPProtocol: πŸ” Checking 0 pending requests for match
LOGI LOG: BTTHIDPPProtocol: πŸ“’ Message did NOT match any pending request - treating as EVENT
LOGI LOG: BTTHIDPPProtocol: πŸ“¨ Handling event for feature index 0x0A
LOGI LOG: BTTHIDPPProtocol: πŸ” Feature index 0x0A β†’ Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: βœ… Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=[00 00 00 00 00 00 00 00]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
)}, Newly pressed: {(
)}, Released: {(
    237
)}
LOGI LOG: BTTHIDPPButtonManager: πŸ”” Button release: controlId=0x00ED
LOGI LOG: BTTHIDPPDevice: πŸ”˜ Button event received: controlId=0x00ED, pressed=0
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x106b1a4a0>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: βœ… Calling delegate method...
LOGI LOG: BTTLogitechManager: Button released on MX Ergo Multi-Device Trackball  (controlId: 0x00ED)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00ED β†’ button 12 (MX Ergo Multi-Device Trackball ) [dynamic]
LOGI LOG: BTTLogitechManager: Click tracking UP for MX Ergo Multi-Device Trackball  button 12: clickCount=1 (matched from DOWN)
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xB01D, packed=0xB01D046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=26, button=12, buttonNumber=12, clickCount=1, location=(1620.6,579.9)
LOGI LOG: BTTLogitechManager: βœ… Generated CGEvent for button 0x00ED
LOGI LOG: 
LOGI LOG: ========================================
LOGI LOG: Connected Devices Summary:
LOGI LOG: ========================================
LOGI LOG:   - MX Ergo Multi-Device Trackball  (VID:0x046d PID:0xb01d) 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:   - 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: ========================================

Yes, I post the bluetooth oneπŸ™‹β€β™‚οΈ

can you check whether 6.098 fixes the unifying receiver issue? (uploading now)

1 Like

Updated to Ver 6.098. The precision button remapping appears to be working correctly.

Only the remapped action is now activated, and the default precision mode toggle no longer occurs.

Thank you for the quick fixπŸ™Œ

1 Like

Hi,@Andreas_Hegenberg

I was unsure whether to add this to a resolved thread, but I believe it's a similar issue, so I'm reporting it here.

Affected input device (e.g. MacBook Trackpad, Magic Mouse/Trackpad, Touch Bar, etc.): Logitech MX Ergo


Screenshots
If applicable, add screenshots to help explain your problem. (You can just paste or drag them here)


Device information:

  • Type of Mac: Apple M1 MacBook Air

  • macOS version: Sequoia 15.6.1

  • BetterTouchTool version: 6.108(please post the exact version - not just "the latest one")


Additional information (e.g. crash logs, related issues, etc.):

Issue:

A phenomenon similar to the previous problem where the precision mode toggle button could not be remapped when a Logitech MX ERGO was connected to a Mac using a Logitech Unifying Receiver is now occurring with the mouse wheel's left and right tilt buttons.

While BetterTouchTool (BTT) recognizes the left tilt as Button 10 and the right tilt as Button 11 when connected via Bluetooth, it recognizes them as horizontal scroll when connected via the Unifying Receiver.

The log .docx file is attached.

logitech_unifying_receiver_right_tilt copy.docx (14.4 KB)

logitech_unifying_receiver_left_tilt copy.docx (14.0 KB)

Bluetooth_left_tilt copy.docx (14.0 KB)

bluetooth_right_tilt copy.docx (14.2 KB)

I wasn't able to reproduce with my MX Ergo S, but could you check whether 6.109 fixes this for you?

1 Like

I have updated BTT (BetterTouchTool) from version 6.102, which was the latest version available for download from the BTT homepage, to version 6.109.

Upon checking its operation, I found that when the MX ERGO mouse wheel is tilted left or right while connected via a Unifying Receiver, the software recognizes these actions as Button 10 and Button 11, respectively.:man_gesturing_ok:

Thank you very much. I deeply appreciate your prompt and thorough support.:man_bowing: