Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 #ifndef __HID_ROCCAT_KONEPLUS_H
0003 #define __HID_ROCCAT_KONEPLUS_H
0004 
0005 /*
0006  * Copyright (c) 2010 Stefan Achatz <erazor_de@users.sourceforge.net>
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; /* KONEPLUS_COMMAND_ACTUAL_PROFILE */
0035     uint8_t size; /* always 3 */
0036     uint8_t actual_profile; /* Range 0-4! */
0037 } __attribute__ ((__packed__));
0038 
0039 struct koneplus_info {
0040     uint8_t command; /* KONEPLUS_COMMAND_INFO */
0041     uint8_t size; /* always 6 */
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; /* always KONEPLUS_MOUSE_REPORT_NUMBER_BUTTON */
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     /* data1 = new profile range 1-5 */
0080     KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_PROFILE = 0x20,
0081 
0082     /* data1 = button number range 1-24; data2 = action */
0083     KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_QUICKLAUNCH = 0x60,
0084 
0085     /* data1 = button number range 1-24; data2 = action */
0086     KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_TIMER = 0x80,
0087 
0088     /* data1 = setting number range 1-5 */
0089     KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_CPI = 0xb0,
0090 
0091     /* data1 and data2 = range 0x1-0xb */
0092     KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_SENSITIVITY = 0xc0,
0093 
0094     /* data1 = 22 = next track...
0095      * data2 = action
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