1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun #ifndef __HID_ROCCAT_ISKU_H 3*4882a593Smuzhiyun #define __HID_ROCCAT_ISKU_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun /* 6*4882a593Smuzhiyun * Copyright (c) 2011 Stefan Achatz <erazor_de@users.sourceforge.net> 7*4882a593Smuzhiyun */ 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun /* 10*4882a593Smuzhiyun */ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #include <linux/types.h> 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun enum { 15*4882a593Smuzhiyun ISKU_SIZE_CONTROL = 0x03, 16*4882a593Smuzhiyun ISKU_SIZE_INFO = 0x06, 17*4882a593Smuzhiyun ISKU_SIZE_KEY_MASK = 0x06, 18*4882a593Smuzhiyun ISKU_SIZE_KEYS_FUNCTION = 0x29, 19*4882a593Smuzhiyun ISKU_SIZE_KEYS_EASYZONE = 0x41, 20*4882a593Smuzhiyun ISKU_SIZE_KEYS_MEDIA = 0x1d, 21*4882a593Smuzhiyun ISKU_SIZE_KEYS_THUMBSTER = 0x17, 22*4882a593Smuzhiyun ISKU_SIZE_KEYS_MACRO = 0x23, 23*4882a593Smuzhiyun ISKU_SIZE_KEYS_CAPSLOCK = 0x06, 24*4882a593Smuzhiyun ISKU_SIZE_LAST_SET = 0x14, 25*4882a593Smuzhiyun ISKU_SIZE_LIGHT = 0x10, 26*4882a593Smuzhiyun ISKU_SIZE_MACRO = 0x823, 27*4882a593Smuzhiyun ISKU_SIZE_RESET = 0x03, 28*4882a593Smuzhiyun ISKU_SIZE_TALK = 0x10, 29*4882a593Smuzhiyun ISKU_SIZE_TALKFX = 0x10, 30*4882a593Smuzhiyun }; 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun enum { 33*4882a593Smuzhiyun ISKU_PROFILE_NUM = 5, 34*4882a593Smuzhiyun ISKU_USB_INTERFACE_PROTOCOL = 0, 35*4882a593Smuzhiyun }; 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun struct isku_actual_profile { 38*4882a593Smuzhiyun uint8_t command; /* ISKU_COMMAND_ACTUAL_PROFILE */ 39*4882a593Smuzhiyun uint8_t size; /* always 3 */ 40*4882a593Smuzhiyun uint8_t actual_profile; 41*4882a593Smuzhiyun } __packed; 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun enum isku_commands { 44*4882a593Smuzhiyun ISKU_COMMAND_CONTROL = 0x4, 45*4882a593Smuzhiyun ISKU_COMMAND_ACTUAL_PROFILE = 0x5, 46*4882a593Smuzhiyun ISKU_COMMAND_KEY_MASK = 0x7, 47*4882a593Smuzhiyun ISKU_COMMAND_KEYS_FUNCTION = 0x8, 48*4882a593Smuzhiyun ISKU_COMMAND_KEYS_EASYZONE = 0x9, 49*4882a593Smuzhiyun ISKU_COMMAND_KEYS_MEDIA = 0xa, 50*4882a593Smuzhiyun ISKU_COMMAND_KEYS_THUMBSTER = 0xb, 51*4882a593Smuzhiyun ISKU_COMMAND_KEYS_MACRO = 0xd, 52*4882a593Smuzhiyun ISKU_COMMAND_MACRO = 0xe, 53*4882a593Smuzhiyun ISKU_COMMAND_INFO = 0xf, 54*4882a593Smuzhiyun ISKU_COMMAND_LIGHT = 0x10, 55*4882a593Smuzhiyun ISKU_COMMAND_RESET = 0x11, 56*4882a593Smuzhiyun ISKU_COMMAND_KEYS_CAPSLOCK = 0x13, 57*4882a593Smuzhiyun ISKU_COMMAND_LAST_SET = 0x14, 58*4882a593Smuzhiyun ISKU_COMMAND_15 = 0x15, 59*4882a593Smuzhiyun ISKU_COMMAND_TALK = 0x16, 60*4882a593Smuzhiyun ISKU_COMMAND_TALKFX = 0x17, 61*4882a593Smuzhiyun ISKU_COMMAND_FIRMWARE_WRITE = 0x1b, 62*4882a593Smuzhiyun ISKU_COMMAND_FIRMWARE_WRITE_CONTROL = 0x1c, 63*4882a593Smuzhiyun }; 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun struct isku_report_button { 66*4882a593Smuzhiyun uint8_t number; /* ISKU_REPORT_NUMBER_BUTTON */ 67*4882a593Smuzhiyun uint8_t zero; 68*4882a593Smuzhiyun uint8_t event; 69*4882a593Smuzhiyun uint8_t data1; 70*4882a593Smuzhiyun uint8_t data2; 71*4882a593Smuzhiyun }; 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun enum isku_report_numbers { 74*4882a593Smuzhiyun ISKU_REPORT_NUMBER_BUTTON = 3, 75*4882a593Smuzhiyun }; 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun enum isku_report_button_events { 78*4882a593Smuzhiyun ISKU_REPORT_BUTTON_EVENT_PROFILE = 0x2, 79*4882a593Smuzhiyun }; 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun struct isku_roccat_report { 82*4882a593Smuzhiyun uint8_t event; 83*4882a593Smuzhiyun uint8_t data1; 84*4882a593Smuzhiyun uint8_t data2; 85*4882a593Smuzhiyun uint8_t profile; 86*4882a593Smuzhiyun } __packed; 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun struct isku_device { 89*4882a593Smuzhiyun int roccat_claimed; 90*4882a593Smuzhiyun int chrdev_minor; 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun struct mutex isku_lock; 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun int actual_profile; 95*4882a593Smuzhiyun }; 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun #endif 98