0001
0002 #ifndef __HID_ROCCAT_KONEPLUS_H
0003 #define __HID_ROCCAT_KONEPLUS_H
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include <linux/types.h>
0013
0014 enum {
0015 KONEPLUS_SIZE_ACTUAL_PROFILE = 0x03,
0016 KONEPLUS_SIZE_CONTROL = 0x03,
0017 KONEPLUS_SIZE_FIRMWARE_WRITE = 0x0402,
0018 KONEPLUS_SIZE_INFO = 0x06,
0019 KONEPLUS_SIZE_MACRO = 0x0822,
0020 KONEPLUS_SIZE_PROFILE_SETTINGS = 0x2b,
0021 KONEPLUS_SIZE_PROFILE_BUTTONS = 0x4d,
0022 KONEPLUS_SIZE_SENSOR = 0x06,
0023 KONEPLUS_SIZE_TALK = 0x10,
0024 KONEPLUS_SIZE_TCU = 0x04,
0025 KONEPLUS_SIZE_TCU_IMAGE = 0x0404,
0026 };
0027
0028 enum koneplus_control_requests {
0029 KONEPLUS_CONTROL_REQUEST_PROFILE_SETTINGS = 0x80,
0030 KONEPLUS_CONTROL_REQUEST_PROFILE_BUTTONS = 0x90,
0031 };
0032
0033 struct koneplus_actual_profile {
0034 uint8_t command;
0035 uint8_t size;
0036 uint8_t actual_profile;
0037 } __attribute__ ((__packed__));
0038
0039 struct koneplus_info {
0040 uint8_t command;
0041 uint8_t size;
0042 uint8_t firmware_version;
0043 uint8_t unknown[3];
0044 } __attribute__ ((__packed__));
0045
0046 enum koneplus_commands {
0047 KONEPLUS_COMMAND_ACTUAL_PROFILE = 0x5,
0048 KONEPLUS_COMMAND_CONTROL = 0x4,
0049 KONEPLUS_COMMAND_PROFILE_SETTINGS = 0x6,
0050 KONEPLUS_COMMAND_PROFILE_BUTTONS = 0x7,
0051 KONEPLUS_COMMAND_MACRO = 0x8,
0052 KONEPLUS_COMMAND_INFO = 0x9,
0053 KONEPLUS_COMMAND_TCU = 0xc,
0054 KONEPLUS_COMMAND_TCU_IMAGE = 0xc,
0055 KONEPLUS_COMMAND_E = 0xe,
0056 KONEPLUS_COMMAND_SENSOR = 0xf,
0057 KONEPLUS_COMMAND_TALK = 0x10,
0058 KONEPLUS_COMMAND_FIRMWARE_WRITE = 0x1b,
0059 KONEPLUS_COMMAND_FIRMWARE_WRITE_CONTROL = 0x1c,
0060 };
0061
0062 enum koneplus_mouse_report_numbers {
0063 KONEPLUS_MOUSE_REPORT_NUMBER_HID = 1,
0064 KONEPLUS_MOUSE_REPORT_NUMBER_AUDIO = 2,
0065 KONEPLUS_MOUSE_REPORT_NUMBER_BUTTON = 3,
0066 };
0067
0068 struct koneplus_mouse_report_button {
0069 uint8_t report_number;
0070 uint8_t zero1;
0071 uint8_t type;
0072 uint8_t data1;
0073 uint8_t data2;
0074 uint8_t zero2;
0075 uint8_t unknown[2];
0076 } __attribute__ ((__packed__));
0077
0078 enum koneplus_mouse_report_button_types {
0079
0080 KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_PROFILE = 0x20,
0081
0082
0083 KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_QUICKLAUNCH = 0x60,
0084
0085
0086 KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_TIMER = 0x80,
0087
0088
0089 KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_CPI = 0xb0,
0090
0091
0092 KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_SENSITIVITY = 0xc0,
0093
0094
0095
0096
0097 KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_MULTIMEDIA = 0xf0,
0098 KONEPLUS_MOUSE_REPORT_TALK = 0xff,
0099 };
0100
0101 enum koneplus_mouse_report_button_action {
0102 KONEPLUS_MOUSE_REPORT_BUTTON_ACTION_PRESS = 0,
0103 KONEPLUS_MOUSE_REPORT_BUTTON_ACTION_RELEASE = 1,
0104 };
0105
0106 struct koneplus_roccat_report {
0107 uint8_t type;
0108 uint8_t data1;
0109 uint8_t data2;
0110 uint8_t profile;
0111 } __attribute__ ((__packed__));
0112
0113 struct koneplus_device {
0114 int actual_profile;
0115
0116 int roccat_claimed;
0117 int chrdev_minor;
0118
0119 struct mutex koneplus_lock;
0120 };
0121
0122 #endif