GithubHelp home page GithubHelp logo

Comments (26)

X3n0m0rph59 avatar X3n0m0rph59 commented on July 3, 2024 2

Hi @erockce,

In #25, @1drp mentioned cycling through buttons and the wheel. I didn't do that in my trace. Do you need this information to get all the buttons working?

No, this information is not strictly necessary to write a driver sub-module. Only the device initialization sequence, as well as setting of the colors when the device is in AIMO mode are strictly required.
(To get DPI switch notifications Eruption needs to listen to USB HID events though, for which I maybe need further data gathered via the eruption-debug-tool, not via Wireshark)

Using evtest it seems that some button events are spread across multiple /dev/input/event* devices (sorry I'm not a Linux kernel device expert, just have learned enough to get by).

These are all Linux input subsystem (evdev) devices belonging to the Kova mouse. They serve different purposes:

Device 15

This is the mouse device that sends relative motion events as well as button press events, except for the DPI switch. The DPI switch button is only accessible via the USB HID layer. The Linux input subsystem (evdev) does not emit or pass through events originating from the DPI switch button.

Device 19

This one sends pointer motion events in absolute coordinate space. Don't know much more to say about it.

Device 17

Used for hardware assisted macros as well as Easy Shift+. I believe this one can be used to control wireless hardware, e.g. to switch the state of the radio as well.

Device 20

Used for hardware assisted macros as well as Easy Shift+. Like device 17, this is a keyboard device of your Kova mouse from which macros are send to the system. Like device 17, Eruption neither uses nor implements this. It is all done in software to gain more flexibility than what can be achieved by using the hardware based macro mechanism.

Sorry for the disfunctional build, I will rebuild the eruption-debug-tool in a Ubuntu container and post another binary...

from eruption.

X3n0m0rph59 avatar X3n0m0rph59 commented on July 3, 2024 2

To enable detection of click events of the DPI switch button (within Eruption), I would need the originating USB HID subdevice and the byte sequence that gets sent as the payload of the interrupt. Please note that this is not strictly needed for the DPI switch feature of your device to work, as switching DPI profiles is handled by the mouse hardware already. It would just complement the feature set, so that Eruption may display a visual notification when the DPI setting is switched via the respective mouse button. It would be great, if you could find the time to gather this information!

To gather the required data, you may use the trace subcommand of the eruption-debug-tool

$ sudo eruption-debug-tool list

 Please stop the Eruption daemon prior to running this tool:
 $ sudo systemctl mask eruption.service && sudo systemctl stop eruption.service

 You can re-enable Eruption with this command afterwards:
 $ sudo systemctl unmask eruption.service && sudo systemctl start eruption.service
 

Please find the device you want to debug below and use its respective
index number (column 1) as the device index for the other subcommands of this tool

Index: 00: ID: 1e7d:2dd2 ROCCAT/ROCCAT Kone Pure Ultra Subdev: 0
Index: 01: ID: 1e7d:2dd2 ROCCAT/ROCCAT Kone Pure Ultra Subdev: 1
Index: 02: ID: 1e7d:2dd2 ROCCAT/ROCCAT Kone Pure Ultra Subdev: 2
Index: 03: ID: 1e7d:2dd2 ROCCAT/ROCCAT Kone Pure Ultra Subdev: 3
Index: 04: ID: 1e7d:3098 ROCCAT/ROCCAT Vulcan AIMO Subdev: 0
Index: 05: ID: 1e7d:3098 ROCCAT/ROCCAT Vulcan AIMO Subdev: 1
Index: 06: ID: 1e7d:3098 ROCCAT/ROCCAT Vulcan AIMO Subdev: 2
Index: 07: ID: 1e7d:3098 ROCCAT/ROCCAT Vulcan AIMO Subdev: 3

Enumeration completed

By tracing each sub-device, I found that on my mouse, a ROCCAT Kone Pure Ultra, the subdevice 0 sends motion events as well as click events of the main buttons. The DPI switches (up/down) send interrupts originating from the third HID sub-device. So the originating sub-device index would be 2.

Example session:

$ sudo eruption-debug-tool trace 2
-- Start of trace --
Index: 02: ID: 1e7d:2dd2 ROCCAT/ROCCAT Kone Pure Ultra Subdev: 2
Initializing...
8 bytes
  |04010000 00000000|                   ........         00000000
                                                         00000008
Entering polling loop:
Instant { tv_sec: 18520, tv_nsec: 853536368 }: 8 bytes
  |0300b004 00000000 00000000 00000000| ................ 00000000
                                                         00000010
Instant { tv_sec: 18521, tv_nsec: 907516478 }: 8 bytes
  |0300b005 00000000 00000000 00000000| ................ 00000000
                                                         00000010
Instant { tv_sec: 18524, tv_nsec: 161524453 }: 8 bytes
  |0300b004 00000000 00000000 00000000| ................ 00000000
                                                         00000010
Instant { tv_sec: 18524, tv_nsec: 391529991 }: 8 bytes
  |0300b003 00000000 00000000 00000000| ................ 00000000
                                                         00000010
Instant { tv_sec: 18524, tv_nsec: 576524540 }: 8 bytes
  |0300b002 00000000 00000000 00000000| ................ 00000000
                                                         00000010
Instant { tv_sec: 18524, tv_nsec: 752525964 }: 8 bytes
  |0300b001 00000000 00000000 00000000| ................ 00000000
                                                         00000010
Instant { tv_sec: 18525, tv_nsec: 825536526 }: 8 bytes
  |0300b002 00000000 00000000 00000000| ................ 00000000
                                                         00000010
Instant { tv_sec: 18527, tv_nsec: 994448139 }: 8 bytes
  |0300b001 00000000 00000000 00000000| ................ 00000000
                                                         00000010

The fourth byte encodes the active DPI slot, so this line: |0300b004 00000000 00000000 00000000| means that DPI slot 4 is the currently active one, where that line |0300b001 00000000 00000000 00000000| tells us that we are in the lowest DPI slot 1.

It would be really great if you could find the sub-device that reports changes of the DPI slot, as well as show the payload that gets send.

from eruption.

erockce avatar erockce commented on July 3, 2024 2

Thank you very much for the explainations provided so far.

When I used evtest before and pressed the buttons, depending on the event* chosen, it results in either an event, a control character, or nothing at all.

It will be better for me to describe the button press tests with a picture

Roccat-KOVA-Mouse-Image-with-Number-Overlay

(Source from here)

Here is testing the Kova event* devices. I go through pressing each button (keeping the mouse lifted to prevent movement events).

$ sudo evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
...
/dev/input/event9:	ROCCAT ROCCAT Kova Aimo Mouse
/dev/input/event10:	ROCCAT ROCCAT Kova Aimo Consumer Control
/dev/input/event11:	ROCCAT ROCCAT Kova Aimo
..
/dev/input/event14:	ROCCAT ROCCAT Kova Aimo
/dev/input/event15:	ROCCAT ROCCAT Vulcan AIMO
/dev/input/event19:	ROCCAT ROCCAT Vulcan AIMO
/dev/input/event21:	Eruption Virtual Keyboard
/dev/input/event22:	Eruption Virtual Mouse

event9, I get as output:

Select the device event number [0-22]: 9
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x1e7d product 0x2cf1 version 0x111
Input device name: "ROCCAT ROCCAT Kova Aimo Mouse"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 272 (BTN_LEFT)
    Event code 273 (BTN_RIGHT)
    Event code 274 (BTN_MIDDLE)
    Event code 275 (BTN_SIDE)
    Event code 276 (BTN_EXTRA)
  Event type 2 (EV_REL)
    Event code 0 (REL_X)
    Event code 1 (REL_Y)
    Event code 6 (REL_HWHEEL)
    Event code 8 (REL_WHEEL)
    Event code 11 (?)
    Event code 12 (?)
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
Properties:
Testing ... (interrupt to exit)
Event: time 1605505445.218797, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90001
Event: time 1605505445.218797, type 1 (EV_KEY), code 272 (BTN_LEFT), value 1
Event: time 1605505445.218797, -------------- SYN_REPORT ------------
Event: time 1605505445.371816, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90001
Event: time 1605505445.371816, type 1 (EV_KEY), code 272 (BTN_LEFT), value 0
Event: time 1605505445.371816, -------------- SYN_REPORT ------------
Event: time 1605505446.613796, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90002
Event: time 1605505446.613796, type 1 (EV_KEY), code 273 (BTN_RIGHT), value 1
Event: time 1605505446.613796, -------------- SYN_REPORT ------------
Event: time 1605505446.772821, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90002
Event: time 1605505446.772821, type 1 (EV_KEY), code 273 (BTN_RIGHT), value 0
Event: time 1605505446.772821, -------------- SYN_REPORT ------------
Event: time 1605505450.337733, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90003
Event: time 1605505450.337733, type 1 (EV_KEY), code 274 (BTN_MIDDLE), value 1
Event: time 1605505450.337733, -------------- SYN_REPORT ------------
Event: time 1605505450.538712, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90003
Event: time 1605505450.538712, type 1 (EV_KEY), code 274 (BTN_MIDDLE), value 0
Event: time 1605505450.538712, -------------- SYN_REPORT ------------
^[[5~^[[6~^C

When I pressed button 1 and 2, I get a "control character". Pressing button 7, changes the mouse wheel color briefly to blue on click. The rest of the buttons show nothing.

event10, I get as output:

Select the device event number [0-22]: 10
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x1e7d product 0x2cf1 version 0x111
Input device name: "ROCCAT ROCCAT Kova Aimo Consumer Control"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 1 (KEY_ESC)
    Event code 28 (KEY_ENTER)
    Event code 74 (KEY_KPMINUS)
    Event code 78 (KEY_KPPLUS)
    Event code 103 (KEY_UP)
    Event code 105 (KEY_LEFT)
    Event code 106 (KEY_RIGHT)
    Event code 108 (KEY_DOWN)
    Event code 113 (KEY_MUTE)
    Event code 114 (KEY_VOLUMEDOWN)
    Event code 115 (KEY_VOLUMEUP)
    Event code 116 (KEY_POWER)
    Event code 119 (KEY_PAUSE)
    Event code 128 (KEY_STOP)
    Event code 130 (KEY_PROPS)
    Event code 131 (KEY_UNDO)
    Event code 133 (KEY_COPY)
    Event code 134 (KEY_OPEN)
    Event code 135 (KEY_PASTE)
    Event code 136 (KEY_FIND)
    Event code 137 (KEY_CUT)
    Event code 138 (KEY_HELP)
    Event code 139 (KEY_MENU)
    Event code 140 (KEY_CALC)
    Event code 142 (KEY_SLEEP)
    Event code 144 (KEY_FILE)
    Event code 150 (KEY_WWW)
    Event code 152 (KEY_SCREENLOCK)
    Event code 155 (KEY_MAIL)
    Event code 156 (KEY_BOOKMARKS)
    Event code 158 (KEY_BACK)
    Event code 159 (KEY_FORWARD)
    Event code 161 (KEY_EJECTCD)
    Event code 163 (KEY_NEXTSONG)
    Event code 164 (KEY_PLAYPAUSE)
    Event code 165 (KEY_PREVIOUSSONG)
    Event code 166 (KEY_STOPCD)
    Event code 167 (KEY_RECORD)
    Event code 168 (KEY_REWIND)
    Event code 169 (KEY_PHONE)
    Event code 171 (KEY_CONFIG)
    Event code 172 (KEY_HOMEPAGE)
    Event code 173 (KEY_REFRESH)
    Event code 174 (KEY_EXIT)
    Event code 177 (KEY_SCROLLUP)
    Event code 178 (KEY_SCROLLDOWN)
    Event code 181 (KEY_NEW)
    Event code 206 (KEY_CLOSE)
    Event code 207 (KEY_PLAY)
    Event code 208 (KEY_FASTFORWARD)
    Event code 209 (KEY_BASSBOOST)
    Event code 210 (KEY_PRINT)
    Event code 212 (KEY_CAMERA)
    Event code 216 (KEY_CHAT)
    Event code 217 (KEY_SEARCH)
    Event code 219 (KEY_FINANCE)
    Event code 224 (KEY_BRIGHTNESSDOWN)
    Event code 225 (KEY_BRIGHTNESSUP)
    Event code 228 (KEY_KBDILLUMTOGGLE)
    Event code 229 (KEY_KBDILLUMDOWN)
    Event code 230 (KEY_KBDILLUMUP)
    Event code 234 (KEY_SAVE)
    Event code 235 (KEY_DOCUMENTS)
    Event code 240 (KEY_UNKNOWN)
    Event code 241 (KEY_VIDEO_NEXT)
    Event code 244 (KEY_BRIGHTNESS_ZERO)
    Event code 256 (BTN_0)
    Event code 353 (KEY_SELECT)
    Event code 354 (KEY_GOTO)
    Event code 358 (KEY_INFO)
    Event code 362 (KEY_PROGRAM)
    Event code 366 (KEY_PVR)
    Event code 370 (KEY_SUBTITLE)
    Event code 372 (KEY_ZOOM)
    Event code 374 (KEY_KEYBOARD)
    Event code 375 (KEY_SCREEN)
    Event code 376 (KEY_PC)
    Event code 377 (KEY_TV)
    Event code 378 (KEY_TV2)
    Event code 379 (KEY_VCR)
    Event code 380 (KEY_VCR2)
    Event code 381 (KEY_SAT)
    Event code 383 (KEY_CD)
    Event code 384 (KEY_TAPE)
    Event code 386 (KEY_TUNER)
    Event code 387 (KEY_PLAYER)
    Event code 389 (KEY_DVD)
    Event code 392 (KEY_AUDIO)
    Event code 393 (KEY_VIDEO)
    Event code 396 (KEY_MEMO)
    Event code 397 (KEY_CALENDAR)
    Event code 398 (KEY_RED)
    Event code 399 (KEY_GREEN)
    Event code 400 (KEY_YELLOW)
    Event code 401 (KEY_BLUE)
    Event code 402 (KEY_CHANNELUP)
    Event code 403 (KEY_CHANNELDOWN)
    Event code 405 (KEY_LAST)
    Event code 407 (KEY_NEXT)
    Event code 408 (KEY_RESTART)
    Event code 409 (KEY_SLOW)
    Event code 410 (KEY_SHUFFLE)
    Event code 412 (KEY_PREVIOUS)
    Event code 416 (KEY_VIDEOPHONE)
    Event code 417 (KEY_GAMES)
    Event code 418 (KEY_ZOOMIN)
    Event code 419 (KEY_ZOOMOUT)
    Event code 420 (KEY_ZOOMRESET)
    Event code 421 (KEY_WORDPROCESSOR)
    Event code 422 (KEY_EDITOR)
    Event code 423 (KEY_SPREADSHEET)
    Event code 424 (KEY_GRAPHICSEDITOR)
    Event code 425 (KEY_PRESENTATION)
    Event code 426 (KEY_DATABASE)
    Event code 427 (KEY_NEWS)
    Event code 428 (KEY_VOICEMAIL)
    Event code 429 (KEY_ADDRESSBOOK)
    Event code 430 (KEY_MESSENGER)
    Event code 431 (KEY_DISPLAYTOGGLE)
    Event code 432 (KEY_SPELLCHECK)
    Event code 433 (KEY_LOGOFF)
    Event code 439 (KEY_MEDIA_REPEAT)
    Event code 442 (KEY_IMAGES)
    Event code 576 (KEY_BUTTONCONFIG)
    Event code 577 (KEY_TASKMANAGER)
    Event code 578 (KEY_JOURNAL)
    Event code 579 (KEY_CONTROLPANEL)
    Event code 580 (KEY_APPSELECT)
    Event code 581 (KEY_SCREENSAVER)
    Event code 582 (KEY_VOICECOMMAND)
    Event code 583 (?)
    Event code 592 (KEY_BRIGHTNESS_MIN)
    Event code 593 (KEY_BRIGHTNESS_MAX)
  Event type 2 (EV_REL)
    Event code 6 (REL_HWHEEL)
    Event code 12 (?)
  Event type 3 (EV_ABS)
    Event code 32 (ABS_VOLUME)
      Value      0
      Min        0
      Max      572
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
Properties:
Testing ... (interrupt to exit)
^[[5~^[[6~^C

When I pressed button 4 and 5, I get a "control character". Pressing button 7, changes the mouse wheel color briefly to blue on click. The rest of the buttons show nothing.

event11, I get as output:

Select the device event number [0-22]: 11
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x1e7d product 0x2cf1 version 0x111
Input device name: "ROCCAT ROCCAT Kova Aimo"
Supported events:
  Event type 0 (EV_SYN)
  Event type 3 (EV_ABS)
    Event code 40 (ABS_MISC)
      Value      0
      Min        0
      Max        0
Properties:
Testing ... (interrupt to exit)
^[[5~^[[6~^C

When I pressed button 4 and 5, I get a "control character". Pressing button 7, changes the mouse wheel color briefly to blue on click. The rest of the buttons show nothing.

event14, I get as output:

Select the device event number [0-22]: 14
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x1e7d product 0x2cf1 version 0x111
Input device name: "ROCCAT ROCCAT Kova Aimo"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 1 (KEY_ESC)
    Event code 2 (KEY_1)
    Event code 3 (KEY_2)
    Event code 4 (KEY_3)
    Event code 5 (KEY_4)
    Event code 6 (KEY_5)
    Event code 7 (KEY_6)
    Event code 8 (KEY_7)
    Event code 9 (KEY_8)
    Event code 10 (KEY_9)
    Event code 11 (KEY_0)
    Event code 12 (KEY_MINUS)
    Event code 13 (KEY_EQUAL)
    Event code 14 (KEY_BACKSPACE)
    Event code 15 (KEY_TAB)
    Event code 16 (KEY_Q)
    Event code 17 (KEY_W)
    Event code 18 (KEY_E)
    Event code 19 (KEY_R)
    Event code 20 (KEY_T)
    Event code 21 (KEY_Y)
    Event code 22 (KEY_U)
    Event code 23 (KEY_I)
    Event code 24 (KEY_O)
    Event code 25 (KEY_P)
    Event code 26 (KEY_LEFTBRACE)
    Event code 27 (KEY_RIGHTBRACE)
    Event code 28 (KEY_ENTER)
    Event code 29 (KEY_LEFTCTRL)
    Event code 30 (KEY_A)
    Event code 31 (KEY_S)
    Event code 32 (KEY_D)
    Event code 33 (KEY_F)
    Event code 34 (KEY_G)
    Event code 35 (KEY_H)
    Event code 36 (KEY_J)
    Event code 37 (KEY_K)
    Event code 38 (KEY_L)
    Event code 39 (KEY_SEMICOLON)
    Event code 40 (KEY_APOSTROPHE)
    Event code 41 (KEY_GRAVE)
    Event code 42 (KEY_LEFTSHIFT)
    Event code 43 (KEY_BACKSLASH)
    Event code 44 (KEY_Z)
    Event code 45 (KEY_X)
    Event code 46 (KEY_C)
    Event code 47 (KEY_V)
    Event code 48 (KEY_B)
    Event code 49 (KEY_N)
    Event code 50 (KEY_M)
    Event code 51 (KEY_COMMA)
    Event code 52 (KEY_DOT)
    Event code 53 (KEY_SLASH)
    Event code 54 (KEY_RIGHTSHIFT)
    Event code 55 (KEY_KPASTERISK)
    Event code 56 (KEY_LEFTALT)
    Event code 57 (KEY_SPACE)
    Event code 58 (KEY_CAPSLOCK)
    Event code 59 (KEY_F1)
    Event code 60 (KEY_F2)
    Event code 61 (KEY_F3)
    Event code 62 (KEY_F4)
    Event code 63 (KEY_F5)
    Event code 64 (KEY_F6)
    Event code 65 (KEY_F7)
    Event code 66 (KEY_F8)
    Event code 67 (KEY_F9)
    Event code 68 (KEY_F10)
    Event code 69 (KEY_NUMLOCK)
    Event code 70 (KEY_SCROLLLOCK)
    Event code 71 (KEY_KP7)
    Event code 72 (KEY_KP8)
    Event code 73 (KEY_KP9)
    Event code 74 (KEY_KPMINUS)
    Event code 75 (KEY_KP4)
    Event code 76 (KEY_KP5)
    Event code 77 (KEY_KP6)
    Event code 78 (KEY_KPPLUS)
    Event code 79 (KEY_KP1)
    Event code 80 (KEY_KP2)
    Event code 81 (KEY_KP3)
    Event code 82 (KEY_KP0)
    Event code 83 (KEY_KPDOT)
    Event code 86 (KEY_102ND)
    Event code 87 (KEY_F11)
    Event code 88 (KEY_F12)
    Event code 96 (KEY_KPENTER)
    Event code 97 (KEY_RIGHTCTRL)
    Event code 98 (KEY_KPSLASH)
    Event code 99 (KEY_SYSRQ)
    Event code 100 (KEY_RIGHTALT)
    Event code 102 (KEY_HOME)
    Event code 103 (KEY_UP)
    Event code 104 (KEY_PAGEUP)
    Event code 105 (KEY_LEFT)
    Event code 106 (KEY_RIGHT)
    Event code 107 (KEY_END)
    Event code 108 (KEY_DOWN)
    Event code 109 (KEY_PAGEDOWN)
    Event code 110 (KEY_INSERT)
    Event code 111 (KEY_DELETE)
    Event code 119 (KEY_PAUSE)
    Event code 125 (KEY_LEFTMETA)
    Event code 126 (KEY_RIGHTMETA)
    Event code 127 (KEY_COMPOSE)
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
  Event type 17 (EV_LED)
    Event code 0 (LED_NUML) state 1
    Event code 1 (LED_CAPSL) state 0
    Event code 2 (LED_SCROLLL) state 0
    Event code 3 (LED_COMPOSE) state 0
    Event code 4 (LED_KANA) state 0
Key repeat handling:
  Repeat type 20 (EV_REP)
    Repeat code 0 (REP_DELAY)
      Value    250
    Repeat code 1 (REP_PERIOD)
      Value     33
Properties:
Testing ... (interrupt to exit)
Event: time 1605505574.865951, type 17 (EV_LED), code 0 (LED_NUML), value 0
Event: time 1605505574.865951, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7004b
Event: time 1605505574.865951, type 1 (EV_KEY), code 104 (KEY_PAGEUP), value 1
Event: time 1605505574.865951, -------------- SYN_REPORT ------------
^[[5~Event: time 1605505575.032919, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7004b
Event: time 1605505575.032919, type 1 (EV_KEY), code 104 (KEY_PAGEUP), value 0
Event: time 1605505575.032919, -------------- SYN_REPORT ------------
Event: time 1605505578.230862, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7004e
Event: time 1605505578.230862, type 1 (EV_KEY), code 109 (KEY_PAGEDOWN), value 1
Event: time 1605505578.230862, -------------- SYN_REPORT ------------
^[[6~Event: time 1605505578.457862, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7004e
Event: time 1605505578.457862, type 1 (EV_KEY), code 109 (KEY_PAGEDOWN), value 0
Event: time 1605505578.457862, -------------- SYN_REPORT ------------
Event: time 1605505583.794773, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e1
Event: time 1605505583.794773, type 1 (EV_KEY), code 42 (KEY_LEFTSHIFT), value 1
Event: time 1605505583.794773, -------------- SYN_REPORT ------------
Event: time 1605505583.995767, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e1
Event: time 1605505583.995767, type 1 (EV_KEY), code 42 (KEY_LEFTSHIFT), value 0
Event: time 1605505583.995767, -------------- SYN_REPORT ------------
Event: time 1605505585.303806, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1605505585.303806, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 1
Event: time 1605505585.303806, -------------- SYN_REPORT ------------
Event: time 1605505585.497784, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1605505585.497784, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 0
Event: time 1605505585.497784, -------------- SYN_REPORT ------------
^C

When I pressed button 4 and 5, I get a "control character" along with event data. Pressing button 8 and 9 just shows event data (no "control characters"). Pressing button 7, changes the mouse wheel color briefly to blue on click. The rest of the buttons show nothing.

event22, I get as output:

Select the device event number [0-22]: 22
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0xffff product 0x124 version 0x1
Input device name: "Eruption Virtual Mouse"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 256 (BTN_0)
    Event code 257 (BTN_1)
    Event code 258 (BTN_2)
    Event code 259 (BTN_3)
    Event code 260 (BTN_4)
    Event code 261 (BTN_5)
    Event code 262 (BTN_6)
    Event code 263 (BTN_7)
    Event code 264 (BTN_8)
    Event code 265 (BTN_9)
    Event code 272 (BTN_LEFT)
    Event code 273 (BTN_RIGHT)
    Event code 274 (BTN_MIDDLE)
    Event code 275 (BTN_SIDE)
    Event code 276 (BTN_EXTRA)
    Event code 277 (BTN_FORWARD)
    Event code 278 (BTN_BACK)
    Event code 279 (BTN_TASK)
  Event type 2 (EV_REL)
    Event code 0 (REL_X)
    Event code 1 (REL_Y)
    Event code 2 (REL_Z)
    Event code 6 (REL_HWHEEL)
    Event code 8 (REL_WHEEL)
    Event code 11 (?)
    Event code 12 (?)
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
Properties:
Testing ... (interrupt to exit)
^[[5~^[[6~^C

When I pressed button 4 and 5, I get a "control character". Pressing button 7, changes the mouse wheel color briefly to blue on click. The rest of the buttons show nothing.

Let me know if you want more data!

from eruption.

erockce avatar erockce commented on July 3, 2024 1

Sorry this took a while to get to. I just tried it out today. Hopefully it has what you need.

I made the capture with only relevant devices like the ROCCAT KOVA mouse attached. All other devices were generic, and I turned off the Eruption service.

ROCCAT Swarm
Software Version: 1.9379

ROCCAT KOVA
Firmware: 1.03

$ lsusb | grep -i roccat
Bus 002 Device 003: ID 1e7d:2cf1 ROCCAT

I performed the following steps:

  1. Installed wireshark-qt
    a. Added my user to wireshark group
    b. Logged out and back in with new group membership
  2. Started usbmon kernel module (sudo modprobe usbmon)
  3. Started Wireshark QT
    a. Set input capture option for only usbmon2 (correspond to the bus with KOVA)
  4. Created a test capture to ensure I was able to see packets from the mouse
    a. Saved then closed the capture file
  5. Started a new capture file
  6. Start Windows VM
  7. Start Wireshark capture
  8. Logged in
  9. Forwarded KOVA to Windows
  10. Started Swarm
  11. Caused a RESET to defaults for the mouse
  12. Changed color settings
    a. Changed brightness
    b. Changed color theme
  13. Caused a RESET to defaults for the mouse
  14. Stopped Swarm
  15. Stopped Wireshark package capture

How should I get the capture to you? I tried direct upload, then zip, and that doesn't work either. The compressed size is only 217k.

from eruption.

erockce avatar erockce commented on July 3, 2024 1

usb-roccat-kova-winvm-swarm-reset-test-color-set-reset-capture-erockce-2020NOV08.zip

I'm embarassed :( I could not upload before because an associated Github site was blocked by default by uMatrix.

You should see the attached zip file now. It is a compressed .pcapng file. That was the default from Wireshark QT on Ubuntu 18.04.5. Let me know if you need a different format.

from eruption.

erockce avatar erockce commented on July 3, 2024 1
$ sudo systemctl mask eruption.service && sudo systemctl stop eruption.service
Created symlink /etc/systemd/system/eruption.service → /dev/null.
$ sudo ./eruption-debug-tool list
...
Please find the device you want to debug below and use its respective
index number (column 1) as the device index for the other subcommands of this tool

Index: 00: ID: 1e7d:2cf1 ROCCAT/ROCCAT Kova Aimo Subdev: 0
Index: 01: ID: 1e7d:2cf1 ROCCAT/ROCCAT Kova Aimo Subdev: 1
Index: 02: ID: 1e7d:3098 ROCCAT/ROCCAT Vulcan AIMO Subdev: 0
Index: 03: ID: 1e7d:3098 ROCCAT/ROCCAT Vulcan AIMO Subdev: 1
Index: 04: ID: 1e7d:3098 ROCCAT/ROCCAT Vulcan AIMO Subdev: 2
Index: 05: ID: 1e7d:3098 ROCCAT/ROCCAT Vulcan AIMO Subdev: 3

Enumeration completed

Index 00: eruption-debug-tool_index00.txt

The colors changed from Red to Blue, and stayed blue after the test finished.
Mouse is responsive and usable as expected (e.g. no corruption or lockups)

For a clean test between index numbers, I unplugged/plugged in the mouse and colors/theme resumed to default.

Index 01: eruption-debug-tool_index01.txt

Output is mostly similar except for a few lines...

$ diff -u eruption-debug-tool_index0*
--- eruption-debug-tool_index00.txt	2020-11-13 23:39:09.365454038 -0700
+++ eruption-debug-tool_index01.txt	2020-11-13 23:39:28.929149470 -0700
@@ -1,6 +1,6 @@
-$ sudo ./eruption-debug-tool run-tests 00
+$ sudo ./eruption-debug-tool run-tests 01
 ...
-Index: 00: ID: 1e7d:2cf1 ROCCAT/ROCCAT Kova Aimo Subdev: 0
+Index: 01: ID: 1e7d:2cf1 ROCCAT/ROCCAT Kova Aimo Subdev: 1
 Bound driver: ROCCAT Kova AIMO
 Sending device init sequence...
 Sending control device feature report
@@ -24,9 +24,7 @@
   |09080100 00000000|                   ........         00000000
                                                          00000008
 Waiting for control device to respond...
-  |040300cf|                            ....             00000000
-                                                         00000004
-  |040300cf|                            ....             00000000
+  |04000000|                            ....             00000000
                                                          00000004
   |040300cf|                            ....             00000000
                                                          00000004

I hope this is helpful information.

Thank you again for implementing some functionality for this device!

from eruption.

X3n0m0rph59 avatar X3n0m0rph59 commented on July 3, 2024 1

@erockce Excellent! Thank you very much for trying things out!

So the next release of Eruption will ship with support for the ROCCAT Kova AIMO.

from eruption.

erockce avatar erockce commented on July 3, 2024 1

Reports and traces attached. My apologies if some of it is very redundant, but I wanted to make sure you had enough data.

Reports:
eruption-debug-tool-report00.txt
eruption-debug-tool-report01.txt

DPI trace:
eruption-debug-tool-trace00-dpi-switch.txt
eruption-debug-tool-trace01-dpi-switch.txt

Button (minus DPI) trace:
eruption-debug-tool-trace00-buttons-only-no-dpi.txt
eruption-debug-tool-trace01-buttons-only-no-dpi.txt

Not sure if this is news worthy but between debugging "trace" 0 and 1, I lost functionality (not because I was holding the mouse in the air to prevent movement events! 😄 ). So I unplugged and re-plugged in the mouse between traces.

I double-clicked each button (minus DPI) for the traces.

Four of the buttons (bottom two on each side) are not recognized by the current driver or X. I think I questioned this before if I need to specify a custom configuration like having a manually configured xorg.conf again? I thought that this was handled dynamically nowadays.

from eruption.

erockce avatar erockce commented on July 3, 2024 1

I finally had a chance to install the pre-release package. For now I'm still using Ubuntu 18.04. I uninstalled eruption-roccat-vulcan-git before installing eruption-git_0.1.19-ubuntu0-pre_amd64.deb. Only file I allowed that was to be overwritten is /etc/eruption/eruption.conf. I took backups so it will be easy to replace my custom changes as needed.

After eruption was started there were no lights on the mouse. Then I switched keyboard profiles verifying prior settings were intact - my custom copied profile files in /var/lib/eruption/profiles were untouched.

Seems that by design and selection of modules some profiles do not vary the colors on the mouse. Not a complaint just an observation.

The colors are varying depending on the profile selected, looks great!

Here is additional button tests you requested with the eruption-debug-tool provided from the pre-release package.

$ sudo systemctl mask eruption.service && sudo systemctl stop eruption.service
$ sudo eruption-debug-tool list

 Please stop the Eruption daemon prior to running this tool:
...
Index: 00: ID: 1e7d:3098 ROCCAT/ROCCAT Vulcan AIMO Subdev: 0
Index: 01: ID: 1e7d:3098 ROCCAT/ROCCAT Vulcan AIMO Subdev: 1
Index: 02: ID: 1e7d:3098 ROCCAT/ROCCAT Vulcan AIMO Subdev: 2
Index: 03: ID: 1e7d:3098 ROCCAT/ROCCAT Vulcan AIMO Subdev: 3
Index: 04: ID: 1e7d:2cf1 ROCCAT/ROCCAT Kova Aimo Subdev: 0
Index: 05: ID: 1e7d:2cf1 ROCCAT/ROCCAT Kova Aimo Subdev: 1

Enumeration completed

Index 04:
eruption-debug-kova-index-04-20201129-201326.txt

  1. Moved the mouse varying X and Y coordinates
  2. Button sequence (refer to picture in post above): 1, 2, 3, 3(roll up/down), 4, 5, 6, 7, 8, 9, 10

After escaping to finish the mouse stopped working requiring a power cycle (unplug/re-plug in)

Kova returned to factory default color cycling and button 7 flashing blue when pressed.

Index 05:
eruption-debug-kova-index-05-20201129-201709.txt

  1. Moved the mouse varying X and Y coordinates
  2. Button sequence (refer to picture in post above): 1, 2, 3, 3(roll up/down), 4, 5, 6, 7, 8, 9, 10

Note the "control character sequence" on the buttons without events.

Please let me know if you need more data!

from eruption.

thelyron avatar thelyron commented on July 3, 2024 1
$ lsusb | grep -i roccat
Bus 002 Device 003: ID 1e7d:2cf1 ROCCAT

Btw I have the same mouse in white. According from sniffing arround in the roccat-tools it seems each color has it's own USB ID.

$ lsusb
Bus 003 Device 008: ID 1e7d:2cf3 ROCCAT ROCCAT Kova Aimo

Pull Request: #49

from eruption.

X3n0m0rph59 avatar X3n0m0rph59 commented on July 3, 2024

Hi! Thanks for the excellent and detailed issue report! This mouse is currently not supported, but I am definitely interested in adding support for it to Eruption. Since I am lacking the hardware it would be really nice if you could send me some packet dumps of the initialization sequence of your Kova.

Unsure if the message..."This mouse is currently not supported, falling back to the generic driver" is an indicator of limited functionality. This new mouse is the only one plugged in now.

Yes, that means there only will be the basic HID device functionality, as configured by the kernel. No DPI switching or AIMO LEDs are supported by the generic driver code, as this requires a specific driver plugin for the Kova. The colors you are currently seeing are probably generated by the mouse hardware itself.

The easiest way to update the firmware would be to plug in a second mouse device. This way you can use the second mouse while your Kova is routed to the Windows 10 VM.

If you are interested in helping out, I can write up a detailed HOWTO, maybe in a Wiki article, on how to save a packet dump of the device init sequence.

from eruption.

erockce avatar erockce commented on July 3, 2024

@X3n0m0rph59 , of course I will help!

I don't think I need a detailed HOWTO unless you want to write something up for any one to follow in the future.

Please point me in the right direction to start (e.g. strace, lsof, etc) and I will get you some data!

from eruption.

X3n0m0rph59 avatar X3n0m0rph59 commented on July 3, 2024

@X3n0m0rph59 , of course I will help!

Great! Glad to hear that!

Basically I need a *.pcapng file of the init sequence of the Kova, as sent by ROCCAT Swarm, as well as a sample where it sets the colors while in AIMO LED mode.

You need this:

  • Loaded the usbmon kernel module
  • A Windows 10 VM with ROCCAT Swarm installed
  • Wireshark: Wireshark-qt works great
  • Fully updated device firmware and latest Swarm software would be nice
  • A second mouse or other pointing device would be nice

Please perform the following steps in roughly that order:

  • Load the usbmon Linux kernel module that creates a virtual network device which allows for capturing USB traffic using Wireshark
$ sudo modprobe usbmon
  • Start up Wireshark

  • Boot the Windows 10 VM

  • Start capturing the traffic on the correct USB bus, you may want to note what your keyboard device and mouse devices bus IDs are

  • Enable USB forwarding of the Kova to the Windows 10 VM

  • Start ROCCAT Swarm: This will sent the full initialization sequence to the forwarded Kova (please use Swarm factory settings for the Kova. The LED mode has to be AIMO Lighting)

  • After the device has been initialized, you should see Swarm changing the colors on the Kova

  • Capture a few seconds of these 'color setting' packets

  • In Wireshark: Please save the capture as pcapng file

With the captured data, I should be able to reverse engineer a subset of the protocol and get the device initialized and the LEDs up and running.

Thanks in advance!

from eruption.

1drp avatar 1drp commented on July 3, 2024

Do you know if you'd be able to tweak that process to get what you needed from a bare metal Windows install? I have a Kone AIMO (not Kova, but still an AIMO device), that I'd like to get the LEDs syncing with the keyboard like they do on Windows. Similar to the report on Kova performance, some profiles will recognize mouse events.

from eruption.

X3n0m0rph59 avatar X3n0m0rph59 commented on July 3, 2024

Hi! @1drp Yes, it seems that this is possible. Please have a look at https://wiki.wireshark.org/CaptureSetup/USB in section Windows. You would need to set-up https://desowin.org/usbpcap/ and Wireshark.
(I have not verified that this actually works, but chances are pretty high).
Please get back to me if you need assistance!

from eruption.

X3n0m0rph59 avatar X3n0m0rph59 commented on July 3, 2024

Hi @erockce, that sounds great! With the packet capture I should be able to implement support for your device.

It would be nice if you could attach the capture file to a message in this thread. Alternatively you could upload it to a cloud storage/file hoster and then just post a link to it here.

How should I get the capture to you? I tried direct upload, then zip, and that doesn't work either.

If your browser is unable to read the capture file, it could be that this is due to an AppArmor profile blocking access to it. It should work if you paste a file from within the /home/user/Downloads directory. (Copy the *.pcap file to ~/Downloads prior to pasting it here)

Next steps:

  • I will implement device initialization code within eruption-debug-tool using your capture file
  • I will send you a build of eruption-debug-tool so that you can verify that the new code works
  • After you confirmed that all worked out right, I will port the code over to the Eruption daemon

For further information, please see this thread: #25

Thank you very much! Your help is highly appreciated!

from eruption.

X3n0m0rph59 avatar X3n0m0rph59 commented on July 3, 2024

Thank you very much! This looks good!

I have implemented a driver sub-module in eruption-debug-tool.

  • It seems like the init sequence of the ROCCAT Kova AIMO is much like that of the ROCCAT Kone Aimo.
  • It seems to have two distinct configurable colors
  • There is a major difference in the way the colors are set. The Kova AIMO is using a completely different feature report there

Please run the attached eruption-debug-tool version 0.0.4 like this:

$ sudo ./eruption-debug-tool list

Note the index of your mouse device, sub-device 0.

$ sudo ./eruption-debug-tool run-tests <index>

If everything works out right, it should show first red then blue lighting effects.

Please mask and stop the eruption.service prior to running the attached eruption-debug-tool. If your mouse configuration becomes garbled in any way, you should be able to reset it to factory defaults using ROCCAT Swarm. Maybe you need a second mouse device to do this.

eruption-debug-tool.zip

from eruption.

erockce avatar erockce commented on July 3, 2024

In #25, @1drp mentioned cycling through buttons and the wheel. I didn't do that in my trace. Do you need this information to get all the buttons working?

Using evtest it seems that some button events are spread across multiple /dev/input/event* devices (sorry I'm not a Linux kernel device expert, just have learned enough to get by).

Device 15:

$ sudo evtest 
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:	Sleep Button
...
/dev/input/event9:	ROCCAT ROCCAT Vulcan AIMO
/dev/input/event13:	ROCCAT ROCCAT Vulcan AIMO
/dev/input/event15:	ROCCAT ROCCAT Kova Aimo Mouse
...
/dev/input/event17:	ROCCAT ROCCAT Kova Aimo Consumer Control
...
/dev/input/event19:	ROCCAT ROCCAT Kova Aimo
/dev/input/event20:	ROCCAT ROCCAT Kova Aimo
/dev/input/event21:	Eruption Virtual Keyboard
/dev/input/event22:	Eruption Virtual Mouse
Select the device event number [0-22]: 15
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x1e7d product 0x2cf1 version 0x111
Input device name: "ROCCAT ROCCAT Kova Aimo Mouse"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 272 (BTN_LEFT)
    Event code 273 (BTN_RIGHT)
    Event code 274 (BTN_MIDDLE)
    Event code 275 (BTN_SIDE)
    Event code 276 (BTN_EXTRA)
  Event type 2 (EV_REL)
    Event code 0 (REL_X)
    Event code 1 (REL_Y)
    Event code 6 (REL_HWHEEL)
    Event code 8 (REL_WHEEL)
    Event code 11 (?)
    Event code 12 (?)
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
Properties:
Testing ... (interrupt to exit)

Device 19

$ sudo evtest 
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:	Sleep Button
...
/dev/input/event9:	ROCCAT ROCCAT Vulcan AIMO
/dev/input/event13:	ROCCAT ROCCAT Vulcan AIMO
/dev/input/event15:	ROCCAT ROCCAT Kova Aimo Mouse
...
/dev/input/event17:	ROCCAT ROCCAT Kova Aimo Consumer Control
...
/dev/input/event19:	ROCCAT ROCCAT Kova Aimo
/dev/input/event20:	ROCCAT ROCCAT Kova Aimo
/dev/input/event21:	Eruption Virtual Keyboard
/dev/input/event22:	Eruption Virtual Mouse
Select the device event number [0-22]: 19
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x1e7d product 0x2cf1 version 0x111
Input device name: "ROCCAT ROCCAT Kova Aimo"
Supported events:
  Event type 0 (EV_SYN)
  Event type 3 (EV_ABS)
    Event code 40 (ABS_MISC)
      Value      0
      Min        0
      Max        0
Properties:
Testing ... (interrupt to exit)

Device 20:

$ sudo evtest 
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:	Sleep Button
...
/dev/input/event9:	ROCCAT ROCCAT Vulcan AIMO
/dev/input/event13:	ROCCAT ROCCAT Vulcan AIMO
/dev/input/event15:	ROCCAT ROCCAT Kova Aimo Mouse
...
/dev/input/event17:	ROCCAT ROCCAT Kova Aimo Consumer Control
...
/dev/input/event19:	ROCCAT ROCCAT Kova Aimo
/dev/input/event20:	ROCCAT ROCCAT Kova Aimo
/dev/input/event21:	Eruption Virtual Keyboard
/dev/input/event22:	Eruption Virtual Mouse
Select the device event number [0-22]: 20
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x1e7d product 0x2cf1 version 0x111
Input device name: "ROCCAT ROCCAT Kova Aimo"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 1 (KEY_ESC)
    Event code 2 (KEY_1)
    Event code 3 (KEY_2)
    Event code 4 (KEY_3)
    Event code 5 (KEY_4)
    Event code 6 (KEY_5)
    Event code 7 (KEY_6)
    Event code 8 (KEY_7)
    Event code 9 (KEY_8)
    Event code 10 (KEY_9)
    Event code 11 (KEY_0)
    Event code 12 (KEY_MINUS)
    Event code 13 (KEY_EQUAL)
    Event code 14 (KEY_BACKSPACE)
    Event code 15 (KEY_TAB)
    Event code 16 (KEY_Q)
    Event code 17 (KEY_W)
    Event code 18 (KEY_E)
    Event code 19 (KEY_R)
    Event code 20 (KEY_T)
    Event code 21 (KEY_Y)
    Event code 22 (KEY_U)
    Event code 23 (KEY_I)
    Event code 24 (KEY_O)
    Event code 25 (KEY_P)
    Event code 26 (KEY_LEFTBRACE)
    Event code 27 (KEY_RIGHTBRACE)
    Event code 28 (KEY_ENTER)
    Event code 29 (KEY_LEFTCTRL)
    Event code 30 (KEY_A)
    Event code 31 (KEY_S)
    Event code 32 (KEY_D)
    Event code 33 (KEY_F)
    Event code 34 (KEY_G)
    Event code 35 (KEY_H)
    Event code 36 (KEY_J)
    Event code 37 (KEY_K)
    Event code 38 (KEY_L)
    Event code 39 (KEY_SEMICOLON)
    Event code 40 (KEY_APOSTROPHE)
    Event code 41 (KEY_GRAVE)
    Event code 42 (KEY_LEFTSHIFT)
    Event code 43 (KEY_BACKSLASH)
    Event code 44 (KEY_Z)
    Event code 45 (KEY_X)
    Event code 46 (KEY_C)
    Event code 47 (KEY_V)
    Event code 48 (KEY_B)
    Event code 49 (KEY_N)
    Event code 50 (KEY_M)
    Event code 51 (KEY_COMMA)
    Event code 52 (KEY_DOT)
    Event code 53 (KEY_SLASH)
    Event code 54 (KEY_RIGHTSHIFT)
    Event code 55 (KEY_KPASTERISK)
    Event code 56 (KEY_LEFTALT)
    Event code 57 (KEY_SPACE)
    Event code 58 (KEY_CAPSLOCK)
    Event code 59 (KEY_F1)
    Event code 60 (KEY_F2)
    Event code 61 (KEY_F3)
    Event code 62 (KEY_F4)
    Event code 63 (KEY_F5)
    Event code 64 (KEY_F6)
    Event code 65 (KEY_F7)
    Event code 66 (KEY_F8)
    Event code 67 (KEY_F9)
    Event code 68 (KEY_F10)
    Event code 69 (KEY_NUMLOCK)
    Event code 70 (KEY_SCROLLLOCK)
    Event code 71 (KEY_KP7)
    Event code 72 (KEY_KP8)
    Event code 73 (KEY_KP9)
    Event code 74 (KEY_KPMINUS)
    Event code 75 (KEY_KP4)
    Event code 76 (KEY_KP5)
    Event code 77 (KEY_KP6)
    Event code 78 (KEY_KPPLUS)
    Event code 79 (KEY_KP1)
    Event code 80 (KEY_KP2)
    Event code 81 (KEY_KP3)
    Event code 82 (KEY_KP0)
    Event code 83 (KEY_KPDOT)
    Event code 86 (KEY_102ND)
    Event code 87 (KEY_F11)
    Event code 88 (KEY_F12)
    Event code 96 (KEY_KPENTER)
    Event code 97 (KEY_RIGHTCTRL)
    Event code 98 (KEY_KPSLASH)
    Event code 99 (KEY_SYSRQ)
    Event code 100 (KEY_RIGHTALT)
    Event code 102 (KEY_HOME)
    Event code 103 (KEY_UP)
    Event code 104 (KEY_PAGEUP)
    Event code 105 (KEY_LEFT)
    Event code 106 (KEY_RIGHT)
    Event code 107 (KEY_END)
    Event code 108 (KEY_DOWN)
    Event code 109 (KEY_PAGEDOWN)
    Event code 110 (KEY_INSERT)
    Event code 111 (KEY_DELETE)
    Event code 119 (KEY_PAUSE)
    Event code 125 (KEY_LEFTMETA)
    Event code 126 (KEY_RIGHTMETA)
    Event code 127 (KEY_COMPOSE)
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
  Event type 17 (EV_LED)
    Event code 0 (LED_NUML) state 0
    Event code 1 (LED_CAPSL) state 0
    Event code 2 (LED_SCROLLL) state 0
    Event code 3 (LED_COMPOSE) state 0
    Event code 4 (LED_KANA) state 0
Key repeat handling:
  Repeat type 20 (EV_REP)
    Repeat code 0 (REP_DELAY)
      Value    250
    Repeat code 1 (REP_PERIOD)
      Value     33
Properties:
Testing ... (interrupt to exit)

This appears to be keyboard, yet the device is named "Kova Mouse".

Is this possibly because the default Linux kernel mouse driver (or your virtual) is not fully recognizing my Kova mouse and having 9 buttons (including the DPI switch)?

Beyond the primary, secondary, middle, and wheel buttons I can use the two outer buttons for scroll up and down in applications. With the exception of the DPI switch, one button briefly switches the wheel color to blue but other than the buttons mentioned the rest are non-functional.

from eruption.

erockce avatar erockce commented on July 3, 2024

By the way I recently updated packages and now have Eruption 0.1.17.

I tried using the debug tool and having glib dependency issues.

$ sudo ./eruption-debug-tool list
./eruption-debug-tool: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by ./eruption-debug-tool)
$ ldd ./eruption-debug-tool 
./eruption-debug-tool: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by ./eruption-debug-tool)
	linux-vdso.so.1 (0x00007ffe56be8000)
	libusb-1.0.so.0 => /lib/x86_64-linux-gnu/libusb-1.0.so.0 (0x00007f534fae2000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f534f8ca000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f534f6ab000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f534f30d000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f534f109000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f534ed18000)
	libudev.so.1 => /lib/x86_64-linux-gnu/libudev.so.1 (0x00007f534eafa000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f534ff28000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f534e8f2000)

This is Ubuntu 18.04. I plan to upgrade to 20 maybe in a couple more weeks.

from eruption.

X3n0m0rph59 avatar X3n0m0rph59 commented on July 3, 2024

@erockce This one should link to the correct libc:

eruption-debug-tool.zip

from eruption.

X3n0m0rph59 avatar X3n0m0rph59 commented on July 3, 2024

Great, thank you very much!

So if I interpret things correctly the DPI switch events are sent via sub-device 0. I will add support for these USB HID events to the ROCCAT Kova AIMO driver within Eruption.

Not sure if this is news worthy but between debugging "trace" 0 and 1, I lost functionality (not because I was holding the mouse in the air to prevent movement events! 😄 ). So I unplugged and re-plugged in the mouse between traces.

😄 This happens on my system too. I did not have time to fix this bug...

Four of the buttons (bottom two on each side) are not recognized by the current driver or X. I think I questioned this before if I need to specify a custom configuration like having a manually configured xorg.conf again? I thought that this was handled dynamically nowadays.

  • Is this a bug within Eruption or are said mouse buttons non-functional, even with the Eruption daemon disabled?
  • Did the clicks of the non-functional buttons generate any output in the trace run of eruption-debug-tool, either on sub-device 0 or sub-device 1? If this is the case, then I can add support for them.

To verify whether the kernel's input subsystem processes clicks of these buttons at all, you could try out evtest. The eruption.service has to be masked and disabled for this to work.

$ sudo evtest

Then please try out each /dev/input/event?? evdev device that has the text ROCCAT Kova AIMO in its name. If a button is clicked, it should show up in the output of evtest on at least one of the sub-devices.

I suspect that the non-functioning buttons trigger events not on the primary mouse device, but on an associated keyboard sub-device of the Kova. So an additional software layer is needed for this to work. I don't think that auto-configuration is supported for this kind of hardware. I recently added an experimental evdev-based "secondary sub-device" feature to Eruption, exactly to cover this kind of configuration. This is, as of now, completely untested and hidden behind a feature gate.

I suspect that /dev/input/event20 (from the posts above) may be the device that sends the events for the non-functional buttons. It would be really great to see the output of evtest for said buttons!

Thanks in advance!

from eruption.

X3n0m0rph59 avatar X3n0m0rph59 commented on July 3, 2024

@erockce I just released version 0.1.18 of Eruption

Please note that I renamed the project, the PPA, and the Eruption (Ubuntu) package to accommodate for the recent changes in the direction of the project. Please see README.md for PPA and package names.

Eruption version 0.1.18 should display info messages in the system log, when the buttons on the Kova are clicked. It should dump hexadecimal output of the HID report payload. (Much like the debug tool did). I ended up implementing support for the extra buttons on the USB HID layer instead of the Linux input (evdev) layer.

The button events are not yet hard-wired in the core daemon, so they still wont trigger any events besides printing hexdumps.

If all works out right and you can see said info messages when clicking the Buttons on your Kova, could you please create a list of Button index/number => HID report payload (the hexdump) mappings. With this information I will proceed implementing the missing functionality.

Thanks in advance!

from eruption.

X3n0m0rph59 avatar X3n0m0rph59 commented on July 3, 2024

@erockce I have prepared a pre-release build of the upcoming Eruption 0.1.19 for Ubuntu Bionic, which should support the extra mouse buttons on the Kova AIMO.

The code is mostly untested, since I am still lacking the required hardware. I had to make some guesses, so I hope that it all works out...

Please unzip the file prior to installing it:
eruption-git_0.1.19-ubuntu0-pre_amd64.deb.zip

from eruption.

erockce avatar erockce commented on July 3, 2024

Ok, now something weird is happening after reactivating and using eruption. I can put in a separate issue, but figured since I have a pre-release, this version is "use at your own risk"!

After the restart of eruption, the mouse no longer works; no mouse click, lights, or cursor movement. So I manually unplugged and re-plugged back in but still have the same result. I thought at first it was because I swapped the USB ports, but the same behavior still happens.

I tried different combinations of adjusting enable_mouse and grab_mouse but that did not make a difference. To have the ability to use the mouse, I set both options to false for now.

Maybe the eruption-debug-tool has left the mouse in a strange state?

I have not restarted my computer or tried to re-initialize with SWARM via my Windows VM yet.

I can wait until you have the next official Eruption release and test again.

Just providing some information in case you had a thought to what might be happening.

from eruption.

X3n0m0rph59 avatar X3n0m0rph59 commented on July 3, 2024

@erockce Thanks for testing the pre-release!

After eruption was started there were no lights on the mouse. Then I switched keyboard profiles verifying prior settings were intact - my custom copied profile files in /var/lib/eruption/profiles were untouched.

Seems that by design and selection of modules some profiles do not vary the colors on the mouse. Not a complaint just an observation.

This behavior is expected and by design! Previously the mouse "zone" of the LED color map completely overlapped with the "zone" of the keyboard (the numpad area was used for this). So the mouse simply reflected the color state of the keyboard. Since version 0.1.18, the LED color map is now larger and each device has its own "zone" allocated on that color map. The mouse can now show colors which are independent from that of the keyboard. Each Lua script may decide on its own which parts of the unified LED color map it modifies.

This introduces a change to the way the Lua scripts should iterate over the color maps. The upper bounds of the loops need to be changed from get_num_keys() to get_canvas_size() since these are now distinct concepts. Otherwise the mouse will just "stay dark" since only the keyboard part of the color map will be modified.

Custom Lua scripts will need to be changed to add support for multiple devices. The vendor supplied scripts should be up-to-date by now. (I updated alle Lua scripts to use canvas_size where it made sense. They now only use get_num_keys() when just the keyboard "zone" should be modified)

So, new Lua code should look like this example:

require "declarations"
-- ....
for i = 0, canvas_size do
    color_map[i] = rgba_to_color(r, g, b, lerp(0, 255, opacity)) -- just an example
end

Regarding the mouse buttons:

Does Eruption version 0.1.19-pre show debug messages in the syslog, as soon as a button on the mouse is clicked?
I am especially looking for the Macros: HID event (mouse): messages.

You can enable debug messages like this, by running Eruption from a terminal:

$ sudo systemctl mask eruption.service && sudo systemctl stop eruption.service
$ sudo RUST_LOG=debug eruption

enable_mouse and grab_mouse have to be set to true in the configuration file! Please try to disable third party drivers that could grab the Linux input (evdev) or HID devices of the mouse exclusively.

After the restart of eruption, the mouse no longer works; no mouse click, lights, or cursor movement. So I manually unplugged and re-plugged back in but still have the same result. I thought at first it was because I swapped the USB ports, but the same behavior still happens.

It should be fixed by rebooting your system. Otherwise, please load factory defaults using Swarm.

Maybe the eruption-debug-tool has left the mouse in a strange state?

That is entirely possible, though I think that some part of the input stack got confused.

Please tell me whether Eruption 0.1.19-pre is able to register the mouse button events. As said before, I am especially looking for the Macros: HID event (mouse): messages. They should at least get printed when changing the DPI level.

from eruption.

erockce avatar erockce commented on July 3, 2024

Upgraded SWARM from V1.9380 to V1.9381.

The KOVA Firmware is still 1.03

I used SWARM in Windows VM to reset and set Kova to defaults again.

As far as Roccat devices I only have the KOVA plugged in during testing.

$ sudo systemctl mask eruption.service && sudo systemctl stop eruption.service
Created symlink /etc/systemd/system/eruption.service → /dev/null.
$ cat /etc/eruption/eruption.conf | grep -v "#" | grep -v "^$"
[global]
profile_dir = "/var/lib/eruption/profiles/"
script_dir = "/usr/share/eruption/scripts/"
keyboard_variant = "ISO"
enable_mouse = true
grab_mouse = true
afk_profile = "rainbow-wave.profile"
afk_timeout_secs = 0

Ran

$ sudo RUST_LOG=debug eruption 2>&1 | tee eruption-cli-`date +%Y%m%d-%H%M%S`.txt

eruption-cli-20201206-140403.txt

Referencing the picture in post above. Events were received from all except buttons 6, 7, and 10.

There were no messages from the eruption command in /var/log/syslog. Just messages from the kernel or other OS services.

from eruption.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.