the version I’m using is: BetterTouchTool 6.093
see the logs:
the version I’m using is: BetterTouchTool 6.093
see the logs:
# LOGI LOG: ========================================
LOGI LOG: BTT Logitech Debug Information
LOGI LOG: Timestamp: 2026-01-21 14:49:17
LOGI LOG: BTT: (Version: 6.093 | 2026012108)
LOGI LOG: macOS: Version 26.2 (Build 25C56)
LOGI LOG: ========================================
LOGI LOG:
LOGI LOG: Step 1: Stopping Logitech Manager...
LOGI LOG: BTTLogitechManager: Stopping...
LOGI LOG: BTTLogitechManager: Setting ONBOARD mode on 1 device(s) before shutdown...
LOGI LOG: BTTLogitechManager: ✅ ONBOARD mode set on 0 device(s), skipped 1 (shutdown complete)
LOGI LOG: BTTHIDPPProtocol: ❌ Unregistered protocol 0x7a4f259d0 for deviceIndex 0 (remaining protocols for this device: 1)
LOGI LOG: BTTLogitechManager: Stopped
LOGI LOG: Step 2: Restarting Logitech Manager...
LOGI LOG: BTTLogitechManager: Starting device discovery...
LOGI LOG: BTTLogitechManager: Started successfully
LOGI LOG: Step 3: Calling initializeLogitechMice...
LOGI LOG: BTTLogitechManager: Already running
LOGI LOG:
LOGI LOG: BTTLogitechManager: Scanning for Logitech Devices
LOGI LOG: ==============================================
# LOGI LOG: No Logitech HID++ devices found.
LOGI LOG:
💡 Make sure your device is:
LOGI LOG: • Connected via USB, Bluetooth, or Unifying Receiver
LOGI LOG: • Powered on
LOGI LOG: • Using HID++ 2.0 protocol (most recent Logitech mice/keyboards)
LOGI LOG: Step 4: Waiting 5 seconds for device initialization...
LOGI LOG: BTTLogitechManager: Found HID interface - LIFT - Interface: ?, Usage Page: 0x0001, Usage: 0x0002
LOGI LOG: BTTLogitechManager: ✅ Accepted - Bluetooth Logitech device (HID++ over mouse interface) \[generic\]
LOGI LOG: BTTLogitechManager: Device connected - LIFT (046d:b031)
LOGI LOG: BTTHIDPPDevice: Auto-detected deviceIndex 0x00 for 046d:b031 (Bluetooth)
LOGI LOG: BTTHIDPPDevice: Initializing with deviceIndex=0, IOHIDDevice retain count=3
LOGI LOG: Unknown device: LIFT (046d:b031) - 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 0x7a7471e30 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 LIFT...
LOGI LOG: BTTLogitechManager: Starting feature discovery for LIFT...
LOGI LOG: BTTHIDPPFeatureCache: ✅ Found cached features for 046d:b031 (cached 2026-01-21 18:58:18 +0000)
LOGI LOG: BTTHIDPPDevice: ⚡ Using cached features for LIFT (32 features)
LOGI LOG: BTTHIDPPDevice: ⚡ Restoring cached device name: LIFT VERTICAL ERGONOMIC MOUSE
LOGI LOG: BTTHIDPPProtocol: Pre-populated feature cache with 32 features
LOGI LOG: BTTHIDPPDevice: Cached protocol: 4.5
LOGI LOG: BTTHIDPPProtocol: ✅ Registered event handler for feature 0x1B04 (protocol 0x7a7471e30, deviceIndex 0)
LOGI LOG: Total event handlers registered: 1
LOGI LOG: Button Manager supported
LOGI LOG: DPI Manager supported
LOGI LOG: Battery Monitor supported (Unified Battery 0x1004)
LOGI LOG: Checking scroll wheel features...
LOGI LOG: SmartShift (0x2110): ❌ NO
LOGI LOG: SmartShift Enhanced (0x2111): ❌ NO
LOGI LOG: HiRes Wheel (0x2121): ❌ NO
LOGI LOG: Thumbwheel (0x2150): ❌ NO
LOGI LOG: Wheel Analytics (0x2250): ✅ YES
LOGI LOG: Wheel Mode Status (0x2251): ❌ NO
LOGI LOG: No scroll wheel features supported
LOGI LOG: BTTHIDPPDevice: Device type confirmed as MOUSE (has mouse-specific features)
LOGI LOG: Applying default device configuration...
LOGI LOG: 🔍 Attempting to query device name via HID++ feature 0x0005...
LOGI LOG: ✅ Device supports feature 0x0005, querying name length...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=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: 29 bytes
LOGI LOG: Reading device name chunk at offset 0/29...
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: "LIFT VERTICAL ER"
LOGI LOG: Reading device name chunk at offset 16/29...
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 13 bytes: "GONOMIC MOUSE"
LOGI LOG: 📝 Device name assembled: "LIFT VERTICAL ERGONOMIC MOUSE" (29 bytes)
LOGI LOG: ✅ Device name from HID++: LIFT VERTICAL ERGONOMIC MOUSE
LOGI LOG: BTTHIDPPFeatureCache: 📝 Updated device name for 046d:b031 to: LIFT VERTICAL ERGONOMIC MOUSE
LOGI LOG: BTTLogitechManager: 📝 Device name updated to: LIFT VERTICAL ERGONOMIC MOUSE
LOGI LOG: BTTLogitechManager: ✅ Device ready - LIFT VERTICAL ERGONOMIC MOUSE (Protocol 4.5)
LOGI LOG: BTTLogitechManager: 🔍 Checking for pending setup requests for 'LIFT VERTICAL ERGONOMIC MOUSE'...
LOGI LOG: BTTLogitechManager: ✅ Device ready - LIFT VERTICAL ERGONOMIC MOUSE (Protocol 4.5)
LOGI LOG: BTTLogitechManager: Device LIFT VERTICAL ERGONOMIC MOUSE has no onboard profiles - skipping auto ONBOARD mode
LOGI LOG: BTTLogitechManager: 🔍 Checking for pending setup requests for 'LIFT VERTICAL ERGONOMIC MOUSE'...
LOGI LOG: BTTHIDPPFeatureCache: Saved 1 device profiles to disk
LOGI LOG: BTTLogitechManager: ✅ Set macOS pointer settings for 'LIFT VERTICAL ERGONOMIC MOUSE' (IOHIDDevice: 0x046D:0xB031): speed=0.00, accel=8.00
LOGI LOG: BTTLogitechManager: Quick setup for 'LIFT VERTICAL ERGONOMIC MOUSE'...
LOGI LOG: BTTLogitechManager: 🔒 Started quick setup for 'LIFT VERTICAL ERGONOMIC MOUSE' (guard key: LIFT VERTICAL ERGONOMIC MOUSE)
LOGI LOG: BTTLogitechManager: ✅ Device 'LIFT VERTICAL ERGONOMIC MOUSE' is ready (slot 0), proceeding with quick setup
LOGI LOG: BTTLogitechManager: Remapping buttons to standard mouse buttons for 'LIFT VERTICAL ERGONOMIC MOUSE' (remapScrollTilt=0)...
LOGI LOG: BTTLogitechManager: Using runtime task ID remapping (0x1b04) - NO flash writes
LOGI LOG: BTTLogitechManager: Factory profiles preserved - buttons revert on disconnect
LOGI LOG: BTTHIDPPButtonCache: ✅ Found cached buttons for 046d:b031 (7 buttons, cached 2026-01-21 18:58:35 +0000)
LOGI LOG: BTTHIDPPButtonManager: ⚡ Loaded 7 buttons from persistent cache (FAST STARTUP)
LOGI LOG: BTTLogitechManager: ⚡ Loaded 7 buttons from persistent cache for remapping (FAST STARTUP)
LOGI LOG: BTTLogitechManager: ⚡ Using 7 cached buttons for remapping
LOGI LOG: BTTLogitechManager: Found 7 buttons, analyzing task IDs...
LOGI LOG: BTTLogitechManager: Device 'LIFT VERTICAL ERGONOMIC MOUSE' detected, isMXMaster4=0
LOGI LOG: BTTLogitechManager: Processing button 0x0050, flags=0x01
LOGI LOG: BTTLogitechManager: → Fixed mapping: 0x0050 (Left) → button 0
LOGI LOG: BTTLogitechManager: Processing button 0x0051, flags=0x01
LOGI LOG: BTTLogitechManager: → Fixed mapping: 0x0051 (Right) → button 1
LOGI LOG: BTTLogitechManager: Processing button 0x0052, flags=0x31
LOGI LOG: BTTLogitechManager: → Fixed mapping: 0x0052 (Middle) → button 2
LOGI LOG: BTTLogitechManager: Processing button 0x0053, flags=0x31
LOGI LOG: BTTLogitechManager: → Fixed mapping: 0x0053 (Back) → button 3
LOGI LOG: BTTLogitechManager: Processing button 0x0056, flags=0x31
LOGI LOG: BTTLogitechManager: → Fixed mapping: 0x0056 (Forward) → button 4
LOGI LOG: BTTLogitechManager: Processing button 0x00FD, flags=0x31
LOGI LOG: BTTLogitechManager: Processing button 0x00D7, flags=0xA0
LOGI LOG: BTTLogitechManager: → Skipping non-reprogrammable button 0x00D7
LOGI LOG: BTTLogitechManager: → Dynamic mapping: controlId 0x00FD → button 10 (sorted by controlId)
LOGI LOG: BTTLogitechManager: ✅ Created dynamic button mapping for 'LIFT VERTICAL ERGONOMIC MOUSE' with 6 buttons
LOGI LOG: BTTLogitechManager: 🔄 Undiversting all reprogrammable buttons first to reset state...
LOGI LOG: BTTLogitechManager: Skipping non-reprogrammable button 0x0050 (flags=0x01)
LOGI LOG: BTTLogitechManager: Skipping non-reprogrammable button 0x0051 (flags=0x01)
LOGI LOG: BTTLogitechManager: Skipping standard button 0x0052 (preserving default behavior)
LOGI LOG: BTTLogitechManager: Skipping non-reprogrammable button 0x00D7 (flags=0xA0)
LOGI LOG: BTTHIDPPButtonManager: ⚡ Parallel undiverting 3 buttons (direct connection)...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x03)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x03)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x03)
LOGI LOG: BTTHIDPPButtonManager: ⚡ Parallel undiversion complete: 3/3 succeeded
LOGI LOG: BTTLogitechManager: ✅ Undivert phase complete (3/3), proceeding with remapping...
LOGI LOG: BTTLogitechManager: Skipping non-reprogrammable button 0x0050
LOGI LOG: BTTLogitechManager: Skipping non-reprogrammable button 0x0051
LOGI LOG: BTTLogitechManager: Preserving standard button 0x0052 (keeping default behavior)
LOGI LOG: BTTLogitechManager: Remapping extra button 0x0053: task 0x003C → 0x005E
LOGI LOG: BTTLogitechManager: Remapping extra button 0x0056: task 0x003E → 0x005F
LOGI LOG: BTTLogitechManager: Remapping extra button 0x00FD: task 0x00D2 → 0x0060
LOGI LOG: BTTLogitechManager: Skipping non-reprogrammable button 0x00D7
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0xFF, address=0x09
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, 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=0x09
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, 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=0x09
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, 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 0x00FD: HID++ error: 0x02 (detected in 0xFF response format)
LOGI LOG: BTTLogitechManager: ✅ Remapped 0 buttons via task IDs
LOGI LOG: BTTLogitechManager: 🔀 Diverting 3 buttons that couldn't be remapped for event handling...
LOGI LOG: BTTHIDPPButtonManager: ⚡ Parallel diverting 3 buttons (direct connection)...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x03)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x03)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x03)
LOGI LOG: BTTHIDPPButtonManager: ⚡ Parallel diversion complete: 3/3 succeeded
LOGI LOG: BTTLogitechManager: ✅ Diverted 3/3 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: No scroll wheel manager, skipping thumb wheel invert
LOGI LOG: BTTLogitechManager: Setting DPI for 'LIFT VERTICAL ERGONOMIC MOUSE' to 2000...
LOGI LOG: BTTLogitechManager: First-time DPI setup - enumerating sensors...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0E, address=0x08
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0E, func=0x00)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0E, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0E, func=0x01)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0E, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0E, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0E, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0E, func=0x03)
LOGI LOG: BTTLogitechManager: ✅ DPI set to 2000 for 'LIFT VERTICAL ERGONOMIC MOUSE' (sensor 0)
LOGI LOG: BTTLogitechManager: ❌ Device 'LIFT VERTICAL ERGONOMIC MOUSE' does not support report rate control
LOGI LOG: BTTLogitechManager: ⚠️ Report rate setup failed: Device 'LIFT VERTICAL ERGONOMIC MOUSE' does not support report rate control
LOGI LOG: BTTLogitechManager: Setting SmartShift for 'LIFT VERTICAL ERGONOMIC MOUSE' (ratchet: 1, 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 'LIFT VERTICAL ERGONOMIC MOUSE' (guard key: LIFT VERTICAL ERGONOMIC MOUSE)
LOGI LOG: BTTLogitechManager: ✅ Quick setup complete for 'LIFT VERTICAL ERGONOMIC MOUSE'
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: LIFT VERTICAL ERGONOMIC MOUSE
LOGI LOG: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
LOGI LOG: 📋 Basic Information:
LOGI LOG: Vendor ID: 0x046d (Logitech)
LOGI LOG: Product ID: 0xb031
LOGI LOG: Database: ⚠️ Unknown device (will use feature discovery)
LOGI LOG: Device Index: 0 (0x00)
LOGI LOG:
🔌 Protocol Information:
LOGI LOG: HID++ Version: 4.5
LOGI LOG: Status: ✅ Ready
LOGI LOG:
✨ Supported Features:
LOGI LOG: DPI Control: ✅ YES
LOGI LOG: Button Diversion: ✅ YES ⭐
LOGI LOG: LED Control: ❌ NO
LOGI LOG: Onboard Profiles: ❌ NO
LOGI LOG: Report Rate: ❌ NO
LOGI LOG: Battery Monitoring: ✅ YES
LOGI LOG:
LOGI LOG: ==============================================
LOGI LOG: Scan complete. Found 1 device(s).
LOGI LOG: ==============================================
LOGI LOG: BTTLogitechManager: ✅ Set macOS pointer settings for 'LIFT VERTICAL ERGONOMIC MOUSE' (IOHIDDevice: 0x046D:0xB031): speed=0.00, accel=8.00
LOGI LOG: BTTLogitechManager: Quick setup for 'LIFT VERTICAL ERGONOMIC MOUSE'...
LOGI LOG: BTTLogitechManager: 🔒 Started quick setup for 'LIFT VERTICAL ERGONOMIC MOUSE' (guard key: LIFT VERTICAL ERGONOMIC MOUSE)
LOGI LOG: BTTLogitechManager: ✅ Device 'LIFT VERTICAL ERGONOMIC MOUSE' is ready (slot 0), proceeding with quick setup
LOGI LOG: BTTLogitechManager: Remapping buttons to standard mouse buttons for 'LIFT VERTICAL ERGONOMIC MOUSE' (remapScrollTilt=0)...
LOGI LOG: BTTLogitechManager: Using runtime task ID remapping (0x1b04) - NO flash writes
LOGI LOG: BTTLogitechManager: Factory profiles preserved - buttons revert on disconnect
LOGI LOG: BTTLogitechManager: ⚡ Using 7 cached buttons for remapping
LOGI LOG: BTTLogitechManager: Found 7 buttons, analyzing task IDs...
LOGI LOG: BTTLogitechManager: Device 'LIFT VERTICAL ERGONOMIC MOUSE' detected, isMXMaster4=0
LOGI LOG: BTTLogitechManager: Processing button 0x0050, flags=0x01
LOGI LOG: BTTLogitechManager: → Fixed mapping: 0x0050 (Left) → button 0
LOGI LOG: BTTLogitechManager: Processing button 0x0051, flags=0x01
LOGI LOG: BTTLogitechManager: → Fixed mapping: 0x0051 (Right) → button 1
LOGI LOG: BTTLogitechManager: Processing button 0x0052, flags=0x31
LOGI LOG: BTTLogitechManager: → Fixed mapping: 0x0052 (Middle) → button 2
LOGI LOG: BTTLogitechManager: Processing button 0x0053, flags=0x31
LOGI LOG: BTTLogitechManager: → Fixed mapping: 0x0053 (Back) → button 3
LOGI LOG: BTTLogitechManager: Processing button 0x0056, flags=0x31
LOGI LOG: BTTLogitechManager: → Fixed mapping: 0x0056 (Forward) → button 4
LOGI LOG: BTTLogitechManager: Processing button 0x00FD, flags=0x31
LOGI LOG: BTTLogitechManager: Processing button 0x00D7, flags=0xA0
LOGI LOG: BTTLogitechManager: → Skipping non-reprogrammable button 0x00D7
LOGI LOG: BTTLogitechManager: → Dynamic mapping: controlId 0x00FD → button 10 (sorted by controlId)
LOGI LOG: BTTLogitechManager: ✅ Created dynamic button mapping for 'LIFT VERTICAL ERGONOMIC MOUSE' with 6 buttons
LOGI LOG: BTTLogitechManager: 🔄 Undiversting all reprogrammable buttons first to reset state...
LOGI LOG: BTTLogitechManager: Skipping non-reprogrammable button 0x0050 (flags=0x01)
LOGI LOG: BTTLogitechManager: Skipping non-reprogrammable button 0x0051 (flags=0x01)
LOGI LOG: BTTLogitechManager: Skipping standard button 0x0052 (preserving default behavior)
LOGI LOG: BTTLogitechManager: Skipping non-reprogrammable button 0x00D7 (flags=0xA0)
LOGI LOG: BTTHIDPPButtonManager: ⚡ Parallel undiverting 3 buttons (direct connection)...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0E, address=0x08
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0E, func=0x00)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x08
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x00)
LOGI LOG: BTTHIDPPButtonManager: 📊 Device reports 7 keys/buttons to enumerate
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x08, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x08, func=0x01)
LOGI LOG:
🔋 Battery:
LOGI LOG: Level: 40%
LOGI LOG: Status: Discharging
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x03)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x03)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x03)
LOGI LOG: BTTHIDPPButtonManager: ⚡ Parallel undiversion complete: 3/3 succeeded
LOGI LOG: BTTLogitechManager: ✅ Undivert phase complete (3/3), proceeding with remapping...
LOGI LOG: BTTLogitechManager: Skipping non-reprogrammable button 0x0050
LOGI LOG: BTTLogitechManager: Skipping non-reprogrammable button 0x0051
LOGI LOG: BTTLogitechManager: Preserving standard button 0x0052 (keeping default behavior)
LOGI LOG: BTTLogitechManager: Remapping extra button 0x0053: task 0x003C → 0x005E
LOGI LOG: BTTLogitechManager: Remapping extra button 0x0056: task 0x003E → 0x005F
LOGI LOG: BTTLogitechManager: Remapping extra button 0x00FD: task 0x00D2 → 0x0060
LOGI LOG: BTTLogitechManager: Skipping non-reprogrammable button 0x00D7
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0E, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0E, func=0x01)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 \[0\] Key/Button 0x0050: flags=0x01 \[MouseBtn\] divertable=0 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0xFF, address=0x09
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, 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=0x09
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, 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=0x09
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, 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 0x00FD: HID++ error: 0x02 (detected in 0xFF response format)
LOGI LOG: BTTLogitechManager: ✅ Remapped 0 buttons via task IDs
LOGI LOG: BTTLogitechManager: 🔀 Diverting 3 buttons that couldn't be remapped for event handling...
LOGI LOG: BTTHIDPPButtonManager: ⚡ Parallel diverting 3 buttons (direct connection)...
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0E, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0E, func=0x02)
LOGI LOG:
🎯 DPI Information:
LOGI LOG: Sensor 0:
LOGI LOG: Current DPI: 2000
LOGI LOG: Range: 400 - 4000 (step: 100)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x03)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x03)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x03)
LOGI LOG: BTTHIDPPButtonManager: ⚡ Parallel diversion complete: 3/3 succeeded
LOGI LOG: BTTLogitechManager: ✅ Diverted 3/3 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: No scroll wheel manager, skipping thumb wheel invert
LOGI LOG: BTTLogitechManager: Setting DPI for 'LIFT VERTICAL ERGONOMIC MOUSE' to 2000...
LOGI LOG: BTTLogitechManager: ⚡ Using cached sensor info (FAST PATH)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 \[1\] Key/Button 0x0051: flags=0x01 \[MouseBtn\] divertable=0 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x0E, address=0x38
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 2 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x0E, func=0x03)
LOGI LOG: BTTLogitechManager: ✅ DPI set to 2000 for 'LIFT VERTICAL ERGONOMIC MOUSE' (sensor 0)
LOGI LOG: BTTLogitechManager: ❌ Device 'LIFT VERTICAL ERGONOMIC MOUSE' does not support report rate control
LOGI LOG: BTTLogitechManager: ⚠️ Report rate setup failed: Device 'LIFT VERTICAL ERGONOMIC MOUSE' does not support report rate control
LOGI LOG: BTTLogitechManager: Setting SmartShift for 'LIFT VERTICAL ERGONOMIC MOUSE' (ratchet: 1, 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 'LIFT VERTICAL ERGONOMIC MOUSE' (guard key: LIFT VERTICAL ERGONOMIC MOUSE)
LOGI LOG: BTTLogitechManager: ✅ Quick setup complete for 'LIFT VERTICAL ERGONOMIC MOUSE'
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 \[2\] Key/Button 0x0052: flags=0x31 \[MouseBtn|Reprog|DIVERT\] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 \[3\] Key/Button 0x0053: flags=0x31 \[MouseBtn|Reprog|DIVERT\] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 \[4\] Key/Button 0x0056: flags=0x31 \[MouseBtn|Reprog|DIVERT\] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 \[5\] Key/Button 0x00FD: flags=0x31 \[MouseBtn|Reprog|DIVERT\] divertable=1 virtual=0
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x02)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x18
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x01)
LOGI LOG: BTTHIDPPButtonManager: 📋 \[6\] Key/Button 0x00D7: flags=0xA0 \[DIVERT|VIRTUAL\] divertable=1 virtual=1
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x09, address=0x28
LOGI LOG: BTTHIDPPProtocol: 🔍 Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: ✅ Matched to pending request (feat=0x09, func=0x02)
LOGI LOG:
🖱️ Buttons:
LOGI LOG: Total: 7 buttons
LOGI LOG: Available for diversion:
LOGI LOG: Button at position 0 (controlId: 0x0050)
LOGI LOG: Button at position 0 (controlId: 0x0051)
LOGI LOG: Button at position 0 (controlId: 0x0052)
LOGI LOG: Button at position 0 (controlId: 0x0053)
LOGI LOG: Button at position 0 (controlId: 0x0056)
LOGI LOG: Button at position 0 (controlId: 0x00FD)
LOGI LOG: Button at position 0 (controlId: 0x00D7)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x09, 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 0x09
LOGI LOG: BTTHIDPPProtocol: 🔍 Feature index 0x09 → Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: ✅ Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=\[00 FD 00 00 00 00 00 00\]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
253
)}, Newly pressed: {(
253
)}, Released: {(
)}
LOGI LOG: BTTHIDPPButtonManager: 🔔 Button press: controlId=0x00FD
LOGI LOG: BTTHIDPPDevice: 🔘 Button event received: controlId=0x00FD, pressed=1
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x7a887a440>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: ✅ Calling delegate method...
LOGI LOG: BTTLogitechManager: Button pressed on LIFT VERTICAL ERGONOMIC MOUSE (controlId: 0x00FD)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00FD → button 10 (LIFT VERTICAL ERGONOMIC MOUSE) \[dynamic\]
LOGI LOG: BTTLogitechManager: Click tracking DOWN for LIFT VERTICAL ERGONOMIC MOUSE button 10: clickCount=1, timeSinceLastClick=790721366.321s
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xB031, packed=0xB031046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=25, button=10, buttonNumber=10, clickCount=1, location=(-107.3,141.7)
LOGI LOG: BTTLogitechManager: ✅ Generated CGEvent for button 0x00FD
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x09, address=0x20
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 0x09
LOGI LOG: BTTHIDPPProtocol: 🔍 Feature index 0x09 → Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: ✅ Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x20, params=\[00 FD 01 00 00 00 00 00\]
LOGI LOG: BTTHIDPPButtonManager: ⚠️ Ignoring button event with address=0x20 (only processing address=0x00 to avoid duplicates)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x09, 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 0x09
LOGI LOG: BTTHIDPPProtocol: 🔍 Feature index 0x09 → 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: {(
253
)}
LOGI LOG: BTTHIDPPButtonManager: 🔔 Button release: controlId=0x00FD
LOGI LOG: BTTHIDPPDevice: 🔘 Button event received: controlId=0x00FD, pressed=0
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x7a887a440>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: ✅ Calling delegate method...
LOGI LOG: BTTLogitechManager: Button released on LIFT VERTICAL ERGONOMIC MOUSE (controlId: 0x00FD)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00FD → button 10 (LIFT VERTICAL ERGONOMIC MOUSE) \[dynamic\]
LOGI LOG: BTTLogitechManager: Click tracking UP for LIFT VERTICAL ERGONOMIC MOUSE button 10: clickCount=1 (matched from DOWN)
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xB031, packed=0xB031046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=26, button=10, buttonNumber=10, clickCount=1, location=(-107.3,141.7)
LOGI LOG: BTTLogitechManager: ✅ Generated CGEvent for button 0x00FD
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x09, address=0x20
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 0x09
LOGI LOG: BTTHIDPPProtocol: 🔍 Feature index 0x09 → Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: ✅ Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x20, params=\[00 FD 00 00 00 00 00 00\]
LOGI LOG: BTTHIDPPButtonManager: ⚠️ Ignoring button event with address=0x20 (only processing address=0x00 to avoid duplicates)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x09, 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 0x09
LOGI LOG: BTTHIDPPProtocol: 🔍 Feature index 0x09 → Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: ✅ Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x00, params=\[00 FD 00 00 00 00 00 00\]
LOGI LOG: BTTHIDPPButtonManager: State change - Currently pressed: {(
253
)}, Newly pressed: {(
253
)}, Released: {(
)}
LOGI LOG: BTTHIDPPButtonManager: 🔔 Button press: controlId=0x00FD
LOGI LOG: BTTHIDPPDevice: 🔘 Button event received: controlId=0x00FD, pressed=1
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x7a887a440>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: ✅ Calling delegate method...
LOGI LOG: BTTLogitechManager: Button pressed on LIFT VERTICAL ERGONOMIC MOUSE (controlId: 0x00FD)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00FD → button 10 (LIFT VERTICAL ERGONOMIC MOUSE) \[dynamic\]
LOGI LOG: BTTLogitechManager: Click tracking DOWN for LIFT VERTICAL ERGONOMIC MOUSE button 10: clickCount=2, timeSinceLastClick=0.540s
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xB031, packed=0xB031046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=25, button=10, buttonNumber=10, clickCount=2, location=(-107.3,141.7)
LOGI LOG: BTTLogitechManager: ✅ Generated CGEvent for button 0x00FD
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x09, address=0x20
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 0x09
LOGI LOG: BTTHIDPPProtocol: 🔍 Feature index 0x09 → Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: ✅ Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x20, params=\[00 FD 01 00 00 00 00 00\]
LOGI LOG: BTTHIDPPButtonManager: ⚠️ Ignoring button event with address=0x20 (only processing address=0x00 to avoid duplicates)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x09, 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 0x09
LOGI LOG: BTTHIDPPProtocol: 🔍 Feature index 0x09 → 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: {(
253
)}
LOGI LOG: BTTHIDPPButtonManager: 🔔 Button release: controlId=0x00FD
LOGI LOG: BTTHIDPPDevice: 🔘 Button event received: controlId=0x00FD, pressed=0
LOGI LOG: BTTHIDPPDevice: Delegate=<BTTLogitechManager: 0x7a887a440>, respondsToSelector=1
LOGI LOG: BTTHIDPPDevice: ✅ Calling delegate method...
LOGI LOG: BTTLogitechManager: Button released on LIFT VERTICAL ERGONOMIC MOUSE (controlId: 0x00FD)
LOGI LOG: BTTLogitechManager: Mapped controlId 0x00FD → button 10 (LIFT VERTICAL ERGONOMIC MOUSE) \[dynamic\]
LOGI LOG: BTTLogitechManager: Click tracking UP for LIFT VERTICAL ERGONOMIC MOUSE button 10: clickCount=2 (matched from DOWN)
LOGI LOG: BTTLogitechManager: Set device IDs: vendor=0x046D, product=0xB031, packed=0xB031046D
LOGI LOG: BTTLogitechManager: Created CGEvent: type=26, button=10, buttonNumber=10, clickCount=2, location=(-107.3,141.7)
LOGI LOG: BTTLogitechManager: ✅ Generated CGEvent for button 0x00FD
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x09, address=0x20
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 0x09
LOGI LOG: BTTHIDPPProtocol: 🔍 Feature index 0x09 → Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: ✅ Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x20, params=\[00 FD 00 00 00 00 00 00\]
LOGI LOG: BTTHIDPPButtonManager: ⚠️ Ignoring button event with address=0x20 (only processing address=0x00 to avoid duplicates)
LOGI LOG: BTTHIDPPProtocol: 🔍 INCOMING MESSAGE: deviceIdx=0xFF, sub_id(featureIdx)=0x09, address=0x20
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 0x09
LOGI LOG: BTTHIDPPProtocol: 🔍 Feature index 0x09 → Feature ID 0x1B04
LOGI LOG: BTTHIDPPProtocol: ✅ Dispatching to event handler for feature 0x1B04
LOGI LOG: BTTHIDPPButtonManager: 🎯 handleButtonEvent CALLED! address=0x20, params=\[00 50 01 00 00 00 00 00\]
LOGI LOG: BTTHIDPPButtonManager: ⚠️ Ignoring button event with address=0x20 (only processing address=0x00 to avoid duplicates)
LOGI LOG:
LOGI LOG: ========================================
LOGI LOG: Connected Devices Summary:
LOGI LOG: ========================================
LOGI LOG: - LIFT VERTICAL ERGONOMIC MOUSE (VID:0x046d PID:0xb031) Ready:YES Type:Mouse
LOGI LOG:
LOGI LOG: ========================================
LOGI LOG: G604 Scroll Slot Debug:
LOGI LOG: ========================================
LOGI LOG: No G604 devices found
LOGI LOG: ========================================
LOGI LOG: End of Debug Information
LOGI LOG: ========================================