You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
HID: roccat: Add support for Roccat Kone[+] v2
This patch adds support for Roccat Kone[+] gaming mouse. Kone[+] is an enhanced version of the old Kone with more memory for macros, a better sensor and more functionality. This driver is conceptual similar to the existing Kone and Pyra drivers. Userland tools can soon be found at http://sourceforge.net/projects/roccat Signed-off-by: Stefan Achatz <erazor_de@users.sourceforge.net> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
committed by
Jiri Kosina
parent
14a057f80f
commit
47dbdbffe1
@@ -0,0 +1,108 @@
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/actual_profile
|
||||
Date: October 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: When read, this file returns the number of the actual profile in
|
||||
range 0-4.
|
||||
This file is readonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/firmware_version
|
||||
Date: October 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: When read, this file returns the raw integer version number of the
|
||||
firmware reported by the mouse. Using the integer value eases
|
||||
further usage in other programs. To receive the real version
|
||||
number the decimal point has to be shifted 2 positions to the
|
||||
left. E.g. a returned value of 121 means 1.21
|
||||
This file is readonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/macro
|
||||
Date: October 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: The mouse can store a macro with max 500 key/button strokes
|
||||
internally.
|
||||
When written, this file lets one set the sequence for a specific
|
||||
button for a specific profile. Button and profile numbers are
|
||||
included in written data. The data has to be 2082 bytes long.
|
||||
This file is writeonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/profile_buttons
|
||||
Date: August 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: The mouse can store 5 profiles which can be switched by the
|
||||
press of a button. A profile is split in settings and buttons.
|
||||
profile_buttons holds informations about button layout.
|
||||
When written, this file lets one write the respective profile
|
||||
buttons back to the mouse. The data has to be 77 bytes long.
|
||||
The mouse will reject invalid data.
|
||||
Which profile to write is determined by the profile number
|
||||
contained in the data.
|
||||
This file is writeonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/profile[1-5]_buttons
|
||||
Date: August 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: The mouse can store 5 profiles which can be switched by the
|
||||
press of a button. A profile is split in settings and buttons.
|
||||
profile_buttons holds informations about button layout.
|
||||
When read, these files return the respective profile buttons.
|
||||
The returned data is 77 bytes in size.
|
||||
This file is readonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/profile_settings
|
||||
Date: October 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: The mouse can store 5 profiles which can be switched by the
|
||||
press of a button. A profile is split in settings and buttons.
|
||||
profile_settings holds informations like resolution, sensitivity
|
||||
and light effects.
|
||||
When written, this file lets one write the respective profile
|
||||
settings back to the mouse. The data has to be 43 bytes long.
|
||||
The mouse will reject invalid data.
|
||||
Which profile to write is determined by the profile number
|
||||
contained in the data.
|
||||
This file is writeonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/profile[1-5]_settings
|
||||
Date: August 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: The mouse can store 5 profiles which can be switched by the
|
||||
press of a button. A profile is split in settings and buttons.
|
||||
profile_settings holds informations like resolution, sensitivity
|
||||
and light effects.
|
||||
When read, these files return the respective profile settings.
|
||||
The returned data is 43 bytes in size.
|
||||
This file is readonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/sensor
|
||||
Date: October 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: The mouse has a tracking- and a distance-control-unit. These
|
||||
can be activated/deactivated and the lift-off distance can be
|
||||
set. The data has to be 6 bytes long.
|
||||
This file is writeonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/startup_profile
|
||||
Date: October 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: The integer value of this attribute ranges from 0-4.
|
||||
When read, this attribute returns the number of the profile
|
||||
that's active when the mouse is powered on.
|
||||
When written, this file sets the number of the startup profile
|
||||
and the mouse activates this profile immediately.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/tcu
|
||||
Date: October 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: When written a calibration process for the tracking control unit
|
||||
can be initiated/cancelled.
|
||||
The data has to be 3 bytes long.
|
||||
This file is writeonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/tcu_image
|
||||
Date: October 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: When read the mouse returns a 30x30 pixel image of the
|
||||
sampled underground. This works only in the course of a
|
||||
calibration process initiated with tcu.
|
||||
The returned data is 1028 bytes in size.
|
||||
This file is readonly.
|
||||
@@ -406,6 +406,13 @@ config HID_ROCCAT_KONE
|
||||
---help---
|
||||
Support for Roccat Kone mouse.
|
||||
|
||||
config HID_ROCCAT_KONEPLUS
|
||||
tristate "Roccat Kone[+] mouse support"
|
||||
depends on USB_HID
|
||||
select HID_ROCCAT
|
||||
---help---
|
||||
Support for Roccat Kone[+] mouse.
|
||||
|
||||
config HID_ROCCAT_PYRA
|
||||
tristate "Roccat Pyra mouse support"
|
||||
depends on USB_HID
|
||||
|
||||
@@ -56,6 +56,7 @@ obj-$(CONFIG_HID_PETALYNX) += hid-petalynx.o
|
||||
obj-$(CONFIG_HID_PICOLCD) += hid-picolcd.o
|
||||
obj-$(CONFIG_HID_ROCCAT) += hid-roccat.o
|
||||
obj-$(CONFIG_HID_ROCCAT_KONE) += hid-roccat-kone.o
|
||||
obj-$(CONFIG_HID_ROCCAT_KONEPLUS) += hid-roccat-koneplus.o
|
||||
obj-$(CONFIG_HID_ROCCAT_PYRA) += hid-roccat-pyra.o
|
||||
obj-$(CONFIG_HID_SAMSUNG) += hid-samsung.o
|
||||
obj-$(CONFIG_HID_SMARTJOYPLUS) += hid-sjoy.o
|
||||
|
||||
@@ -1397,6 +1397,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONE) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONEPLUS) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_PYRA_WIRED) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_IR_REMOTE) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE) },
|
||||
|
||||
@@ -485,6 +485,7 @@
|
||||
|
||||
#define USB_VENDOR_ID_ROCCAT 0x1e7d
|
||||
#define USB_DEVICE_ID_ROCCAT_KONE 0x2ced
|
||||
#define USB_DEVICE_ID_ROCCAT_KONEPLUS 0x2d51
|
||||
#define USB_DEVICE_ID_ROCCAT_PYRA_WIRED 0x2c24
|
||||
#define USB_DEVICE_ID_ROCCAT_PYRA_WIRELESS 0x2cf6
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,232 @@
|
||||
#ifndef __HID_ROCCAT_KONEPLUS_H
|
||||
#define __HID_ROCCAT_KONEPLUS_H
|
||||
|
||||
/*
|
||||
* Copyright (c) 2010 Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the Free
|
||||
* Software Foundation; either version 2 of the License, or (at your option)
|
||||
* any later version.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/*
|
||||
* Binary data structures used for hardware communication must have no padding.
|
||||
*/
|
||||
#pragma pack(push)
|
||||
#pragma pack(1)
|
||||
|
||||
/*
|
||||
* case 1: writes request 80 and reads value 1
|
||||
*
|
||||
*/
|
||||
struct koneplus_control {
|
||||
uint8_t command; /* KONEPLUS_COMMAND_CONTROL */
|
||||
/*
|
||||
* value is profile number in range 0-4 for requesting settings and buttons
|
||||
* 1 if status ok for requesting status
|
||||
*/
|
||||
uint8_t value;
|
||||
uint8_t request;
|
||||
};
|
||||
|
||||
enum koneplus_control_requests {
|
||||
KONEPLUS_CONTROL_REQUEST_STATUS = 0x00,
|
||||
KONEPLUS_CONTROL_REQUEST_PROFILE_SETTINGS = 0x80,
|
||||
KONEPLUS_CONTROL_REQUEST_PROFILE_BUTTONS = 0x90,
|
||||
};
|
||||
|
||||
enum koneplus_control_values {
|
||||
KONEPLUS_CONTROL_REQUEST_STATUS_OVERLOAD = 0,
|
||||
KONEPLUS_CONTROL_REQUEST_STATUS_OK = 1,
|
||||
KONEPLUS_CONTROL_REQUEST_STATUS_WAIT = 3,
|
||||
};
|
||||
|
||||
struct koneplus_startup_profile {
|
||||
uint8_t command; /* KONEPLUS_COMMAND_STARTUP_PROFILE */
|
||||
uint8_t size; /* always 3 */
|
||||
uint8_t startup_profile; /* Range 0-4! */
|
||||
};
|
||||
|
||||
struct koneplus_profile_settings {
|
||||
uint8_t command; /* KONEPLUS_COMMAND_PROFILE_SETTINGS */
|
||||
uint8_t size; /* always 43 */
|
||||
uint8_t number; /* range 0-4 */
|
||||
uint8_t advanced_sensitivity;
|
||||
uint8_t sensitivity_x;
|
||||
uint8_t sensitivity_y;
|
||||
uint8_t cpi_levels_enabled;
|
||||
uint8_t cpi_levels_x[5];
|
||||
uint8_t cpi_startup_level; /* range 0-4 */
|
||||
uint8_t cpi_levels_y[5]; /* range 1-60 means 100-6000 cpi */
|
||||
uint8_t unknown1;
|
||||
uint8_t polling_rate;
|
||||
uint8_t lights_enabled;
|
||||
uint8_t light_effect_mode;
|
||||
uint8_t color_flow_effect;
|
||||
uint8_t light_effect_type;
|
||||
uint8_t light_effect_speed;
|
||||
uint8_t lights[16];
|
||||
uint16_t checksum;
|
||||
};
|
||||
|
||||
struct koneplus_profile_buttons {
|
||||
uint8_t command; /* KONEPLUS_COMMAND_PROFILE_BUTTONS */
|
||||
uint8_t size; /* always 77 */
|
||||
uint8_t number; /* range 0-4 */
|
||||
uint8_t data[72];
|
||||
uint16_t checksum;
|
||||
};
|
||||
|
||||
struct koneplus_macro {
|
||||
uint8_t command; /* KONEPLUS_COMMAND_MACRO */
|
||||
uint16_t size; /* always 0x822 little endian */
|
||||
uint8_t profile; /* range 0-4 */
|
||||
uint8_t button; /* range 0-23 */
|
||||
uint8_t data[2075];
|
||||
uint16_t checksum;
|
||||
};
|
||||
|
||||
struct koneplus_info {
|
||||
uint8_t command; /* KONEPLUS_COMMAND_INFO */
|
||||
uint8_t size; /* always 6 */
|
||||
uint8_t firmware_version;
|
||||
uint8_t unknown[3];
|
||||
};
|
||||
|
||||
struct koneplus_e {
|
||||
uint8_t command; /* KONEPLUS_COMMAND_E */
|
||||
uint8_t size; /* always 3 */
|
||||
uint8_t unknown; /* TODO 1; 0 before firmware update */
|
||||
};
|
||||
|
||||
struct koneplus_sensor {
|
||||
uint8_t command; /* KONEPLUS_COMMAND_SENSOR */
|
||||
uint8_t size; /* always 6 */
|
||||
uint8_t data[4];
|
||||
};
|
||||
|
||||
struct koneplus_firmware_write {
|
||||
uint8_t command; /* KONEPLUS_COMMAND_FIRMWARE_WRITE */
|
||||
uint8_t unknown[1025];
|
||||
};
|
||||
|
||||
struct koneplus_firmware_write_control {
|
||||
uint8_t command; /* KONEPLUS_COMMAND_FIRMWARE_WRITE_CONTROL */
|
||||
/*
|
||||
* value is 1 on success
|
||||
* 3 means "not finished yet"
|
||||
*/
|
||||
uint8_t value;
|
||||
uint8_t unknown; /* always 0x75 */
|
||||
};
|
||||
|
||||
struct koneplus_tcu {
|
||||
uint16_t usb_command; /* KONEPLUS_USB_COMMAND_TCU */
|
||||
uint8_t data[2];
|
||||
};
|
||||
|
||||
struct koneplus_tcu_image {
|
||||
uint16_t usb_command; /* KONEPLUS_USB_COMMAND_TCU */
|
||||
uint8_t data[1024];
|
||||
uint16_t checksum;
|
||||
};
|
||||
|
||||
enum koneplus_commands {
|
||||
KONEPLUS_COMMAND_CONTROL = 0x4,
|
||||
KONEPLUS_COMMAND_STARTUP_PROFILE = 0x5,
|
||||
KONEPLUS_COMMAND_PROFILE_SETTINGS = 0x6,
|
||||
KONEPLUS_COMMAND_PROFILE_BUTTONS = 0x7,
|
||||
KONEPLUS_COMMAND_MACRO = 0x8,
|
||||
KONEPLUS_COMMAND_INFO = 0x9,
|
||||
KONEPLUS_COMMAND_E = 0xe,
|
||||
KONEPLUS_COMMAND_SENSOR = 0xf,
|
||||
KONEPLUS_COMMAND_FIRMWARE_WRITE = 0x1b,
|
||||
KONEPLUS_COMMAND_FIRMWARE_WRITE_CONTROL = 0x1c,
|
||||
};
|
||||
|
||||
enum koneplus_usb_commands {
|
||||
KONEPLUS_USB_COMMAND_CONTROL = 0x304,
|
||||
KONEPLUS_USB_COMMAND_STARTUP_PROFILE = 0x305,
|
||||
KONEPLUS_USB_COMMAND_PROFILE_SETTINGS = 0x306,
|
||||
KONEPLUS_USB_COMMAND_PROFILE_BUTTONS = 0x307,
|
||||
KONEPLUS_USB_COMMAND_MACRO = 0x308,
|
||||
KONEPLUS_USB_COMMAND_INFO = 0x309,
|
||||
KONEPLUS_USB_COMMAND_TCU = 0x30c,
|
||||
KONEPLUS_USB_COMMAND_E = 0x30e,
|
||||
KONEPLUS_USB_COMMAND_SENSOR = 0x30f,
|
||||
KONEPLUS_USB_COMMAND_FIRMWARE_WRITE = 0x31b,
|
||||
KONEPLUS_USB_COMMAND_FIRMWARE_WRITE_CONTROL = 0x31c,
|
||||
};
|
||||
|
||||
enum koneplus_mouse_report_numbers {
|
||||
KONEPLUS_MOUSE_REPORT_NUMBER_HID = 1,
|
||||
KONEPLUS_MOUSE_REPORT_NUMBER_AUDIO = 2,
|
||||
KONEPLUS_MOUSE_REPORT_NUMBER_BUTTON = 3,
|
||||
};
|
||||
|
||||
struct koneplus_mouse_report_button {
|
||||
uint8_t report_number; /* always KONEPLUS_MOUSE_REPORT_NUMBER_BUTTON */
|
||||
uint8_t zero1;
|
||||
uint8_t type;
|
||||
uint8_t data1;
|
||||
uint8_t data2;
|
||||
uint8_t zero2;
|
||||
uint8_t unknown[2];
|
||||
};
|
||||
|
||||
enum koneplus_mouse_report_button_types {
|
||||
/* data1 = new profile range 1-5 */
|
||||
KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_PROFILE = 0x20,
|
||||
|
||||
/* data1 = button number range 1-24; data2 = action */
|
||||
KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_QUICKLAUNCH = 0x60,
|
||||
|
||||
/* data1 = button number range 1-24; data2 = action */
|
||||
KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_TIMER = 0x80,
|
||||
|
||||
/* data1 = setting number range 1-5 */
|
||||
KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_CPI = 0xb0,
|
||||
|
||||
/* data1 and data2 = range 0x1-0xb */
|
||||
KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_SENSITIVITY = 0xc0,
|
||||
|
||||
/* data1 = 22 = next track...
|
||||
* data2 = action
|
||||
*/
|
||||
KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_MULTIMEDIA = 0xf0,
|
||||
};
|
||||
|
||||
enum koneplus_mouse_report_button_action {
|
||||
KONEPLUS_MOUSE_REPORT_BUTTON_ACTION_PRESS = 0,
|
||||
KONEPLUS_MOUSE_REPORT_BUTTON_ACTION_RELEASE = 1,
|
||||
};
|
||||
|
||||
struct koneplus_roccat_report {
|
||||
uint8_t type;
|
||||
uint8_t data1;
|
||||
uint8_t data2;
|
||||
uint8_t profile;
|
||||
};
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
struct koneplus_device {
|
||||
int actual_profile;
|
||||
|
||||
int roccat_claimed;
|
||||
int chrdev_minor;
|
||||
|
||||
struct mutex koneplus_lock;
|
||||
|
||||
int startup_profile;
|
||||
struct koneplus_info info;
|
||||
struct koneplus_profile_settings profile_settings[5];
|
||||
struct koneplus_profile_buttons profile_buttons[5];
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user