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
Anonymous
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
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.
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.
Normal button settings sure, but I doubt macros will be stored.
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.
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
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:
Related
Support Requests: #101
Hi. I have several Tyons. Just bought a nos Leadr. I am interested in following the hard work you both are putting in to get the Leadr to work in Linux.