Menu

#101 Assistance in adding Roccat Leadr

v1.0_(example)
open
nobody
None
1
2020-07-02
2020-04-28
No

I'm currently duplicating the Tyon work to another folder for the Leadr (the 2 are nearly identical). I've got it somewhat working? ( I have both a TYON and a Leadr) I can now compile a leadr GUI utility that recognizes the Leadr mouse and some of the buttons. I'm not gonna lie, my programming skills are near zero. I can do scripting and very little programming(Bash, SQL, basic python, wrote very basic code in Java and C++ back in the day like 10 years ago). I'm serious about learning how to reverse engineer this mouse and add support. I know I'm biting off more than I can chew right now, but I can't think of any better way to learn than to dive in head first.

Right now, I have my doubts that the Leadr uses the same "profile_buttons" as the TYON which is why some of them come back as "FIXME". Also the button #s are different in the softwares. I'm also not sure whw/where the values for each button come from? How can I pull these values for the Leadr? I also think that CPI/DPI are going to be different for the Leadr which has a different optical sensor and the tool doesn't seem to recognize when I change CPI profiles. I did increase the MAX CPI to 12000, but I don't think that is working currently.

typedef enum {
LEADR_BUTTON_TYPE_UNUSED = 0x00,
LEADR_BUTTON_TYPE_CLICK = 0x01,
LEADR_BUTTON_TYPE_MENU = 0x02,
LEADR_BUTTON_TYPE_UNIVERSAL_SCROLLING = 0x03,
LEADR_BUTTON_TYPE_DOUBLE_CLICK = 0x04,
LEADR_BUTTON_TYPE_SHORTCUT = 0x05,
LEADR_BUTTON_TYPE_DISABLED = 0x06,
LEADR_BUTTON_TYPE_BROWSER_FORWARD = 0x07,
LEADR_BUTTON_TYPE_BROWSER_BACKWARD = 0x08,
LEADR_BUTTON_TYPE_TILT_LEFT = 0x09,
LEADR_BUTTON_TYPE_TILT_RIGHT = 0x0a,
LEADR_BUTTON_TYPE_SCROLL_UP = 0x0d,
LEADR_BUTTON_TYPE_SCROLL_DOWN = 0x0e,
LEADR_BUTTON_TYPE_QUICKLAUNCH = 0x0f,
LEADR_BUTTON_TYPE_PROFILE_CYCLE = 0x10,
LEADR_BUTTON_TYPE_PROFILE_UP = 0x11,
LEADR_BUTTON_TYPE_PROFILE_DOWN = 0x12,
LEADR_BUTTON_TYPE_CPI_CYCLE = 0x14,
LEADR_BUTTON_TYPE_CPI_UP = 0x15,
LEADR_BUTTON_TYPE_CPI_DOWN = 0x16,
LEADR_BUTTON_TYPE_SENSITIVITY_CYCLE = 0x17,
LEADR_BUTTON_TYPE_SENSITIVITY_UP = 0x18,
LEADR_BUTTON_TYPE_SENSITIVITY_DOWN = 0x19,
LEADR_BUTTON_TYPE_WINDOWS_KEY = 0x1a,
LEADR_BUTTON_TYPE_OPEN_DRIVER = 0x1b,
LEADR_BUTTON_TYPE_OPEN_PLAYER = 0x20,
LEADR_BUTTON_TYPE_PREV_TRACK = 0x21,
LEADR_BUTTON_TYPE_NEXT_TRACK = 0x22,
LEADR_BUTTON_TYPE_PLAY_PAUSE = 0x23,
LEADR_BUTTON_TYPE_STOP = 0x24,
LEADR_BUTTON_TYPE_MUTE = 0x25,
LEADR_BUTTON_TYPE_VOLUME_DOWN = 0x26,
LEADR_BUTTON_TYPE_VOLUME_UP = 0x27,
LEADR_BUTTON_TYPE_MACRO = 0x30,
LEADR_BUTTON_TYPE_TIMER = 0x31,
LEADR_BUTTON_TYPE_TIMER_STOP = 0x32,
LEADR_BUTTON_TYPE_EASYAIM_1 = 0x33,
LEADR_BUTTON_TYPE_EASYAIM_2 = 0x34,
LEADR_BUTTON_TYPE_EASYAIM_3 = 0x35,
LEADR_BUTTON_TYPE_EASYAIM_4 = 0x36,
LEADR_BUTTON_TYPE_EASYAIM_5 = 0x37,
LEADR_BUTTON_TYPE_EASYSHIFT_SELF = 0x41, // FIXME confirm, firmware suggests it's 0x54
LEADR_BUTTON_TYPE_EASYWHEEL_SENSITIVITY = 0x42,
LEADR_BUTTON_TYPE_EASYWHEEL_PROFILE = 0x43,
LEADR_BUTTON_TYPE_EASYWHEEL_CPI = 0x44,
LEADR_BUTTON_TYPE_EASYWHEEL_VOLUME = 0x45,
LEADR_BUTTON_TYPE_EASYWHEEL_ALT_TAB = 0x46,
LEADR_BUTTON_TYPE_EASYWHEEL_AERO_FLIP_3D = 0x47,
LEADR_BUTTON_TYPE_EASYSHIFT_OTHER = 0x51,
LEADR_BUTTON_TYPE_EASYSHIFT_LOCK_OTHER = 0x52,
LEADR_BUTTON_TYPE_EASYSHIFT_ALL = 0x53,
LEADR_BUTTON_TYPE_XINPUT_1 = 0x60,
LEADR_BUTTON_TYPE_XINPUT_2 = 0x61,
LEADR_BUTTON_TYPE_XINPUT_3 = 0x62,
LEADR_BUTTON_TYPE_XINPUT_4 = 0x63,
LEADR_BUTTON_TYPE_XINPUT_5 = 0x64,
LEADR_BUTTON_TYPE_XINPUT_6 = 0x65,
LEADR_BUTTON_TYPE_XINPUT_7 = 0x66,
LEADR_BUTTON_TYPE_XINPUT_8 = 0x67,
LEADR_BUTTON_TYPE_XINPUT_9 = 0x68,
LEADR_BUTTON_TYPE_XINPUT_10 = 0x69,
LEADR_BUTTON_TYPE_XINPUT_RX_UP = 0x6a,
LEADR_BUTTON_TYPE_XINPUT_RX_DOWN = 0x6b,
LEADR_BUTTON_TYPE_XINPUT_RY_UP = 0x6c,
LEADR_BUTTON_TYPE_XINPUT_RY_DOWN = 0x6d,
LEADR_BUTTON_TYPE_XINPUT_X_UP = 0x6e,
LEADR_BUTTON_TYPE_XINPUT_X_DOWN = 0x6f,
LEADR_BUTTON_TYPE_XINPUT_Y_UP = 0x70,
LEADR_BUTTON_TYPE_XINPUT_Y_DOWN = 0x71,
LEADR_BUTTON_TYPE_XINPUT_Z_UP = 0x72,
LEADR_BUTTON_TYPE_XINPUT_Z_DOWN = 0x73,
LEADR_BUTTON_TYPE_DINPUT_1 = 0x74,
LEADR_BUTTON_TYPE_DINPUT_2 = 0x75,
LEADR_BUTTON_TYPE_DINPUT_3 = 0x76,
LEADR_BUTTON_TYPE_DINPUT_4 = 0x77,
LEADR_BUTTON_TYPE_DINPUT_5 = 0x78,
LEADR_BUTTON_TYPE_DINPUT_6 = 0x79,
LEADR_BUTTON_TYPE_DINPUT_7 = 0x7a,
LEADR_BUTTON_TYPE_DINPUT_8 = 0x7b,
LEADR_BUTTON_TYPE_DINPUT_9 = 0x7c,
LEADR_BUTTON_TYPE_DINPUT_10 = 0x7d,
LEADR_BUTTON_TYPE_DINPUT_11 = 0x7e,
LEADR_BUTTON_TYPE_DINPUT_12 = 0x7f,
LEADR_BUTTON_TYPE_DINPUT_X_UP = 0x80,
LEADR_BUTTON_TYPE_DINPUT_X_DOWN = 0x81,
LEADR_BUTTON_TYPE_DINPUT_Y_UP = 0x82,
LEADR_BUTTON_TYPE_DINPUT_Y_DOWN = 0x83,
LEADR_BUTTON_TYPE_DINPUT_Z_UP = 0x84,
LEADR_BUTTON_TYPE_DINPUT_Z_DOWN = 0x85,
LEADR_BUTTON_TYPE_HOME = 0x86,
LEADR_BUTTON_TYPE_END = 0x87,
LEADR_BUTTON_TYPE_PAGE_UP = 0x88,
LEADR_BUTTON_TYPE_PAGE_DOWN = 0x89,
LEADR_BUTTON_TYPE_L_CTRL = 0x8a,
LEADR_BUTTON_TYPE_L_ALT = 0x8b,
} LeadrButtonType;

Bus 005 Device 003: ID 1e7d:2e4a ROCCAT (TYON Black)
Bus 007 Device 007: ID 1e7d:2e4e ROCCAT (Leadr)

Stefan, I know you're out and no longer supporting the tool and you're probably busy, but maybe you could teach me a few things instead if you have time? Right now I'm using wireshark on usbmon5 (BUS 5) Device 3, and usb.endpoint_address.number == 0 to pull the Data Fragments (URB_Control out Host to device) for when the Roccat Tool in a Windows 10 VM configures the mouse. I'm doing this from the Tyon to learn and possibly even port some of the abilities to libratbag. (currently beyond my abilities, but that how learning works).

I'm seriously trying and I feel like I'm flying blind here. I could use some guidance from a pro.

Thanks,
Frosty

Related

Support Requests: #101

Discussion

  • Jerrod Frost

    Jerrod Frost - 2020-04-28

    I can't seem to post photos as it just hangs up when I do so heres a Google Drive Link.
    https://drive.google.com/open?id=1rkCUCcafE0PhrDxfwzH56HeBDapsh9ks

     
  • Stefan Achatz

    Stefan Achatz - 2020-04-30

    It's not as easy as you think. As far as I know the Leadr has no on board memory for profiles. This means everything like macros and profile changes etc. have to be done in software. Everything is already implemented and ready to use. You just have to mix the implementations of a mouse that uses software implementation like Kova[+] and Pyra and the Tyon.
    But I suspect there are small changes in binary data formats on the device as well as in the profile file. What you have to do is change a setting in the gui and see what's sent over usb and what's stored in the profile. Compare this with the previously stored data. Do this for all settings and change the structure and enum definitions accordingly.

     
  • Anonymous

    Anonymous - 2020-05-27

    I think the Leadr has on board memory, I can configure the Leadr under Windows and save the profile on the mouse and ust the buttons alos under Linux.

     
  • Stefan Achatz

    Stefan Achatz - 2020-05-27

    Normal button settings sure, but I doubt macros will be stored.

     
  • Jerrod Frost

    Jerrod Frost - 2020-05-30

    I can live without Macros for now. If I could learn how to get all this stuff going, then perform perform the porting of code from another mouse like the Pyra/Kova+ for macros. I just really wish I understood more of what I'm doing. I'm about to transition to a work from home job so I'll have more time to play around with this if you're willing to teach.

     
  • Anonymous

    Anonymous - 2020-07-02

    Hi

    Thanks Jerrod Frost for your job is not perfect but is usable for apply a config

    I folow this step for work

    more easy but not nesesary because button order are nort correcte in leaderconfig
    connect mouse on virtualbox
    creat a profile in ROCCAT-SWARM aply profile on mousse
    disconnect from virtualbox*

    open leaderconfig
    export config in Default1.rmp

    for apply config
    roccatleadrcontrol --driver-on
    open leaderconfig
    import config Default1.rmp
    apply

    Do you continue to work for fix order of button or other?
    If yes pleas send me the last version of your code and if i have time i try to finish the job

    my email simoncortex-roccat@yahoo.com

     
    • Jerrod Frost

      Jerrod Frost - 2020-07-04

      Sorry, I haven't had a chance to jump back into this since I'm in the
      middle of a job change and some other stuff. Hopefully I can get more
      involved after the switch.

      On Sat, Jul 4, 2020, 03:22 noreply@sourceforge.net wrote:

      Hi

      Thanks Jerrod Frost for your job is not perfect but is usable for apply a
      config

      I folow this step for work

      more easy but not nesesary because button order are nort correcte in
      leaderconfig

      connect mouse on virtualbox
      creat a profile in ROCCAT-SWARM aply profile on mousse
      disconnect from virtualbox*

      open leaderconfig
      export config in Default1.rmp

      for apply config
      roccatleadrcontrol --driver-on
      open leaderconfig
      import config Default1.rmp
      apply

      Do you continue to work for fix order of button or other?
      If yes pleas send me the last version of your code and if i have time i
      try to finish the job

      my email simoncortex-roccat@yahoo.com

      Status: open
      Group: v1.0_(example)
      Created: Tue Apr 28, 2020 10:03 PM UTC by Jerrod Frost
      Last Updated: Thu Jul 02, 2020 10:12 PM UTC
      Owner: nobody

      I'm currently duplicating the Tyon work to another folder for the Leadr
      (the 2 are nearly identical). I've got it somewhat working? ( I have both a
      TYON and a Leadr) I can now compile a leadr GUI utility that recognizes the
      Leadr mouse and some of the buttons. I'm not gonna lie, my programming
      skills are near zero. I can do scripting and very little programming(Bash,
      SQL, basic python, wrote very basic code in Java and C++ back in the day
      like 10 years ago). I'm serious about learning how to reverse engineer this
      mouse and add support. I know I'm biting off more than I can chew right
      now, but I can't think of any better way to learn than to dive in head
      first.

      Right now, I have my doubts that the Leadr uses the same "profile_buttons"
      as the TYON which is why some of them come back as "FIXME". Also the button

      s are different in the softwares. I'm also not sure whw/where the values

      for each button come from? How can I pull these values for the Leadr? I
      also think that CPI/DPI are going to be different for the Leadr which has a
      different optical sensor and the tool doesn't seem to recognize when I
      change CPI profiles. I did increase the MAX CPI to 12000, but I don't think
      that is working currently.

      typedef enum {
      LEADR_BUTTON_TYPE_UNUSED = 0x00,
      LEADR_BUTTON_TYPE_CLICK = 0x01,
      LEADR_BUTTON_TYPE_MENU = 0x02,
      LEADR_BUTTON_TYPE_UNIVERSAL_SCROLLING = 0x03,
      LEADR_BUTTON_TYPE_DOUBLE_CLICK = 0x04,
      LEADR_BUTTON_TYPE_SHORTCUT = 0x05,
      LEADR_BUTTON_TYPE_DISABLED = 0x06,
      LEADR_BUTTON_TYPE_BROWSER_FORWARD = 0x07,
      LEADR_BUTTON_TYPE_BROWSER_BACKWARD = 0x08,
      LEADR_BUTTON_TYPE_TILT_LEFT = 0x09,
      LEADR_BUTTON_TYPE_TILT_RIGHT = 0x0a,
      LEADR_BUTTON_TYPE_SCROLL_UP = 0x0d,
      LEADR_BUTTON_TYPE_SCROLL_DOWN = 0x0e,
      LEADR_BUTTON_TYPE_QUICKLAUNCH = 0x0f,
      LEADR_BUTTON_TYPE_PROFILE_CYCLE = 0x10,
      LEADR_BUTTON_TYPE_PROFILE_UP = 0x11,
      LEADR_BUTTON_TYPE_PROFILE_DOWN = 0x12,
      LEADR_BUTTON_TYPE_CPI_CYCLE = 0x14,
      LEADR_BUTTON_TYPE_CPI_UP = 0x15,
      LEADR_BUTTON_TYPE_CPI_DOWN = 0x16,
      LEADR_BUTTON_TYPE_SENSITIVITY_CYCLE = 0x17,
      LEADR_BUTTON_TYPE_SENSITIVITY_UP = 0x18,
      LEADR_BUTTON_TYPE_SENSITIVITY_DOWN = 0x19,
      LEADR_BUTTON_TYPE_WINDOWS_KEY = 0x1a,
      LEADR_BUTTON_TYPE_OPEN_DRIVER = 0x1b,
      LEADR_BUTTON_TYPE_OPEN_PLAYER = 0x20,
      LEADR_BUTTON_TYPE_PREV_TRACK = 0x21,
      LEADR_BUTTON_TYPE_NEXT_TRACK = 0x22,
      LEADR_BUTTON_TYPE_PLAY_PAUSE = 0x23,
      LEADR_BUTTON_TYPE_STOP = 0x24,
      LEADR_BUTTON_TYPE_MUTE = 0x25,
      LEADR_BUTTON_TYPE_VOLUME_DOWN = 0x26,
      LEADR_BUTTON_TYPE_VOLUME_UP = 0x27,
      LEADR_BUTTON_TYPE_MACRO = 0x30,
      LEADR_BUTTON_TYPE_TIMER = 0x31,
      LEADR_BUTTON_TYPE_TIMER_STOP = 0x32,
      LEADR_BUTTON_TYPE_EASYAIM_1 = 0x33,
      LEADR_BUTTON_TYPE_EASYAIM_2 = 0x34,
      LEADR_BUTTON_TYPE_EASYAIM_3 = 0x35,
      LEADR_BUTTON_TYPE_EASYAIM_4 = 0x36,
      LEADR_BUTTON_TYPE_EASYAIM_5 = 0x37,
      LEADR_BUTTON_TYPE_EASYSHIFT_SELF = 0x41, // FIXME confirm, firmware
      suggests it's 0x54
      LEADR_BUTTON_TYPE_EASYWHEEL_SENSITIVITY = 0x42,
      LEADR_BUTTON_TYPE_EASYWHEEL_PROFILE = 0x43,
      LEADR_BUTTON_TYPE_EASYWHEEL_CPI = 0x44,
      LEADR_BUTTON_TYPE_EASYWHEEL_VOLUME = 0x45,
      LEADR_BUTTON_TYPE_EASYWHEEL_ALT_TAB = 0x46,
      LEADR_BUTTON_TYPE_EASYWHEEL_AERO_FLIP_3D = 0x47,
      LEADR_BUTTON_TYPE_EASYSHIFT_OTHER = 0x51,
      LEADR_BUTTON_TYPE_EASYSHIFT_LOCK_OTHER = 0x52,
      LEADR_BUTTON_TYPE_EASYSHIFT_ALL = 0x53,
      LEADR_BUTTON_TYPE_XINPUT_1 = 0x60,
      LEADR_BUTTON_TYPE_XINPUT_2 = 0x61,
      LEADR_BUTTON_TYPE_XINPUT_3 = 0x62,
      LEADR_BUTTON_TYPE_XINPUT_4 = 0x63,
      LEADR_BUTTON_TYPE_XINPUT_5 = 0x64,
      LEADR_BUTTON_TYPE_XINPUT_6 = 0x65,
      LEADR_BUTTON_TYPE_XINPUT_7 = 0x66,
      LEADR_BUTTON_TYPE_XINPUT_8 = 0x67,
      LEADR_BUTTON_TYPE_XINPUT_9 = 0x68,
      LEADR_BUTTON_TYPE_XINPUT_10 = 0x69,
      LEADR_BUTTON_TYPE_XINPUT_RX_UP = 0x6a,
      LEADR_BUTTON_TYPE_XINPUT_RX_DOWN = 0x6b,
      LEADR_BUTTON_TYPE_XINPUT_RY_UP = 0x6c,
      LEADR_BUTTON_TYPE_XINPUT_RY_DOWN = 0x6d,
      LEADR_BUTTON_TYPE_XINPUT_X_UP = 0x6e,
      LEADR_BUTTON_TYPE_XINPUT_X_DOWN = 0x6f,
      LEADR_BUTTON_TYPE_XINPUT_Y_UP = 0x70,
      LEADR_BUTTON_TYPE_XINPUT_Y_DOWN = 0x71,
      LEADR_BUTTON_TYPE_XINPUT_Z_UP = 0x72,
      LEADR_BUTTON_TYPE_XINPUT_Z_DOWN = 0x73,
      LEADR_BUTTON_TYPE_DINPUT_1 = 0x74,
      LEADR_BUTTON_TYPE_DINPUT_2 = 0x75,
      LEADR_BUTTON_TYPE_DINPUT_3 = 0x76,
      LEADR_BUTTON_TYPE_DINPUT_4 = 0x77,
      LEADR_BUTTON_TYPE_DINPUT_5 = 0x78,
      LEADR_BUTTON_TYPE_DINPUT_6 = 0x79,
      LEADR_BUTTON_TYPE_DINPUT_7 = 0x7a,
      LEADR_BUTTON_TYPE_DINPUT_8 = 0x7b,
      LEADR_BUTTON_TYPE_DINPUT_9 = 0x7c,
      LEADR_BUTTON_TYPE_DINPUT_10 = 0x7d,
      LEADR_BUTTON_TYPE_DINPUT_11 = 0x7e,
      LEADR_BUTTON_TYPE_DINPUT_12 = 0x7f,
      LEADR_BUTTON_TYPE_DINPUT_X_UP = 0x80,
      LEADR_BUTTON_TYPE_DINPUT_X_DOWN = 0x81,
      LEADR_BUTTON_TYPE_DINPUT_Y_UP = 0x82,
      LEADR_BUTTON_TYPE_DINPUT_Y_DOWN = 0x83,
      LEADR_BUTTON_TYPE_DINPUT_Z_UP = 0x84,
      LEADR_BUTTON_TYPE_DINPUT_Z_DOWN = 0x85,
      LEADR_BUTTON_TYPE_HOME = 0x86,
      LEADR_BUTTON_TYPE_END = 0x87,
      LEADR_BUTTON_TYPE_PAGE_UP = 0x88,
      LEADR_BUTTON_TYPE_PAGE_DOWN = 0x89,
      LEADR_BUTTON_TYPE_L_CTRL = 0x8a,
      LEADR_BUTTON_TYPE_L_ALT = 0x8b,
      } LeadrButtonType;

      Bus 005 Device 003: ID 1e7d:2e4a ROCCAT (TYON Black)
      Bus 007 Device 007: ID 1e7d:2e4e ROCCAT (Leadr)

      Stefan, I know you're out and no longer supporting the tool and you're
      probably busy, but maybe you could teach me a few things instead if you
      have time? Right now I'm using wireshark on usbmon5 (BUS 5) Device 3, and
      usb.endpoint_address.number == 0 to pull the Data Fragments (URB_Control
      out Host to device) for when the Roccat Tool in a Windows 10 VM configures
      the mouse. I'm doing this from the Tyon to learn and possibly even port
      some of the abilities to libratbag. (currently beyond my abilities, but
      that how learning works).

      I'm seriously trying and I feel like I'm flying blind here. I could use
      some guidance from a pro.

      Thanks,
      Frosty


      Sent from sourceforge.net because you indicated interest in
      https://sourceforge.net/p/roccat/support-requests/101/

      To unsubscribe from further messages, please visit
      https://sourceforge.net/auth/subscriptions/

       

      Related

      Support Requests: #101

Anonymous
Anonymous

Add attachments
Cancel