Steel series Cataclysm mouse

Preamble

I picked one up for 10 baht. Wow! (no pun intended) this is a giant mouse, and used to cost $99 back in the day.

After some serious fiddling with the buttons, they all work (initially buttons 6 and 7 didn’t), having confirmed using the Windows app, on Windows 10. The OS X application didn’t work on 10.13.6 (High Sierra).

You have to use the application listed under Miscellaneous, at the bottom of the page. The new “engine” application just doesn’t work – it doesn’t recognise the mouse. Use wow_cataclysm_mouse.exe or wow_cataclysm_mouse.pkg. The compatibility of the OS X package is (which version?). On High Sierra it gave a warning about being incompatible, but I proceeded regardless and the installer crashed.

On Linux

On Linux, How to use all buttons of SteelSeries Cataclysm MMO Gaming Mouse in Xorg (GNOME)?. There is some code, from this answer, on Github: / cataclysm-mouse. However, it may not work, see issues, there is a CPI/glow issue.

First libusb is required, from How to install libusb?

sudo apt-get install libusb-1.0-0-dev

then run

make

and then the setup script – however, I got an error, when running as myself

$ ./setup-cataclysm-mouse -h -f testcase.mouse
[h]elp, [v]erbose, verbose-[k]eyarray, verbose-[m]acros, [d]ry and [f]ile (needs an argument)
Verbose implies verbose-macros and verbose-keyarray
libusb: error [_get_usbfs_fd] libusb couldn't open USB device /dev/bus/usb/002/005: Permission denied
libusb: error [_get_usbfs_fd] libusb requires write access to USB device nodes.
Error - SteelSeries World of Warcraft: Cataclysm MMO Gaming Mouse not found
Error printing out diagnostic info
Detaching Kernel driver. Good luck
Segmentation fault (core dumped)
$

Running with sudo worked fine though

$ sudo ./setup-cataclysm-mouse -h -f testcase.mouse
[h]elp, [v]erbose, verbose-[k]eyarray, verbose-[m]acros, [d]ry and [f]ile (needs an argument)
Verbose implies verbose-macros and verbose-keyarray
SteelSeries World of Warcraft: Cataclysm MMO Gaming Mouse was located
idVendor: 0x1038
idProduct: 0x1320
iManufacturer: 1
string: SteelSeries
Detaching Kernel driver. Good luck
Claiming the interface...
Setting illumination values
Setting CPI value
Mapping mouse keys
Mapping keys complete (error: 75, positive = no error)...
Transferring macros
Completed transfer (60 bytes)
Setting up illumination (0 255 0)
Illuminated (error: 3, positive = no error)...
Setting CPI to 3 (low = high CPI)CPI set (error: 1, positive = no error)...
Releasing the interface (return control to kernel)
Packing up and ending the program
user@user-300V3Z-300V4Z-300V5Z:~/Downloads/cataclysm-mouse-master$

I may be imagining it, but the mouse seemed to speed up considerably – not that it had been sluggish – and became rather difficult to handle. However, I had to reduce the speed in the mouse settings control panel from ~50% to ~10% to make it usable. This is due to the CPI being set to 3. See Why Higher CPI Doesn’t Mean Better. Setting the CPI to 10- and then the moue settings back to ~40% seemed better, IMHO.

I also noticed that the mouse now had a green glow, whereas before the LED had been orange (on both Windows, Mac and Linux). This is due to the (0 255 0) setting in the setup command output.

See also World of Warcraft Cataclysm MMO Gaming Mouse (SteelSeries) not functioning, any way to sort this? However, my Cataclysm is working well (at least it moves and the left and right buttons work) on Ubuntu 18.04.5 LTS (Use lsb_release -a).

Linux Python Script

From Reddit, If you have a Steelseries 14 button WoW Cataclysm mouse, and didn’t give it or throw it away you’re in luck, because here’s a hack that let’s you configure all the extra buttons and even with modifier functionality.

#!/usr/bin/python

import usb.core
import usb.util
import sys

#Keybinding String:
#Button	     ?                   ?                   ?                   ?                   ?                   ?                   K7                  K11                 K10                 K12                 K14                 K13                 K4                  K5                  K6                ??
#            0                   1v                  2v                  3v                  4v                  5v                   6       7           7      11           8      10           9      12          10      14          11      13          12       4          13       5          14       6          
data_a = b'\x0e\x00\x4b\x00\x03\x01\x00\x00\x00\x00\x02\x00\x00\x00\x00\x03\x00\x00\x00\x00\x04\x00\x00\x00\x00\x05\x00\x00\x00\x00\x10\x00\x07\x00\x01\x10\x00\x0b\x00\x01\x10\x00\x0a\x00\x01\x10\x00\x0c\x00\x01\x10\x00\x0e\x00\x01\x10\x00\x0d\x00\x01\x10\x00\x04\x00\x01\x10\x00\x05\x00\x01\x10\x00\x06\x00\x01' 
#Special Key Table String
#            0   1    2   3   4   5   6   7   8   9  10  11  12  13  14
data_b = b'\x00\x00\x00\x00\x50\x4f\x4a\x52\x00\x00\xe1\xe2\xe0\x29\x51' 
#Button configuration: 4/5=left/right;#6=home;7/14=up/dwn;10,11,12=shift,alt,ctrl;13=escape

###### I/O USB #########
#Specify Device
device = usb.core.find(idVendor=0x1038, idProduct=0x1320)
#Detach the drivers so we can have access
if device is None:
    sys.exit("Could not find Mouse, ensure it is plugged in")
if device.is_kernel_driver_active(0):
    try:
    device.detach_kernel_driver(0)
except usb.core.USBError as e:
    sys.exit("Could not detatch kernel driver: %s" % str(e))

#Set the correct interface
cfg = device[0]
intf = cfg[(0,0)]
ep = intf[0]
########################

device.ctrl_transfer(0x40, 0x10, 0, 0, data_a)
device.ctrl_transfer(0x40, 0x12, 0, 0, data_b)

usb.util.release_interface(device, 0)

device.attach_kernel_driver(0)

and all of the mappings

# 04-x1d='a-z'
# 1e-x27='1-0'
# 28=return
# 29=Escape
# 2a=backspace
# 2b=tab
# 2c=space
# 2d='+'
# 2e=dead_acute
# 2f='å'
# 30=dead_diaeresis
# 31=' apostrophe
# 32=' apostrophe
# 33='æ' 
# 34='ø' 
# 35='½' 
# 36=',' 
# 37='.' 
# 38='-'
# 39= keycode 66
# 3a-x45=F1-F12
# 46=print screen
# 47=scroll lock
# 48=pause
# 49=insert
# 4a=home
# 4b=prior
# 4c=delete
# 4d=end
# 4e=next
# 4f=right
# 50=left
# 51=down
# 52=up
# 53 numlock
# 54 KP divide
# 55 KP multiply
# 56 KP subtract
# 57 kp add
# 58 kp enter
# 59-64 kp 1-9+0
# 65=menu
# 66=power off
# 67=kp equal
# 68=tools
# 69=launch 5
# 6a=launch 6
# 6b=launch 7
# 6c=launch 8
# 6d=launch 9
# 75=help
# 7f=audio mute
# 80=audio vol up
# 81=audio vol down
# 85=kp decimal
# 88=Hiragana_Katakana
# 9c=delete
# b6-b7=()
# e0=left ctrl
# e1=left shift
# e2=left alt
# e3=left meta
# e4=right ctrl
# e5=right shift
# e6=lvl 3 shift
# e7=right super
# e8=play pause/resume
# e9=audio stop
# ea=audio previous
# eb=audio next
# ec=eject
# ed=vol up
# ee=vol dwn
# ef=audio mute/unmute
# f0=www
# f1=back
# f2=forward
# f3=cancel
# f4=find
# f5=scroll up
# f6=scroll dwn
# f8=sleep
# fa=screensaver
# fb=reload
# fc=calculator

Thread on Linux questions

This is the thread from whence came both the Python script and the OwenRiddy binary, Trying to acess the onboard memory of a gaming mouse.

 

 

 

 

 

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s