1d41c2a70SStefan Achatz #ifndef __HID_ROCCAT_ISKU_H 2d41c2a70SStefan Achatz #define __HID_ROCCAT_ISKU_H 3d41c2a70SStefan Achatz 4d41c2a70SStefan Achatz /* 5d41c2a70SStefan Achatz * Copyright (c) 2011 Stefan Achatz <erazor_de@users.sourceforge.net> 6d41c2a70SStefan Achatz */ 7d41c2a70SStefan Achatz 8d41c2a70SStefan Achatz /* 9d41c2a70SStefan Achatz * This program is free software; you can redistribute it and/or modify it 10d41c2a70SStefan Achatz * under the terms of the GNU General Public License as published by the Free 11d41c2a70SStefan Achatz * Software Foundation; either version 2 of the License, or (at your option) 12d41c2a70SStefan Achatz * any later version. 13d41c2a70SStefan Achatz */ 14d41c2a70SStefan Achatz 15d41c2a70SStefan Achatz #include <linux/types.h> 16d41c2a70SStefan Achatz 17d41c2a70SStefan Achatz enum { 186e5920ddSStefan Achatz ISKU_SIZE_CONTROL = 0x03, 196e5920ddSStefan Achatz ISKU_SIZE_INFO = 0x06, 206e5920ddSStefan Achatz ISKU_SIZE_KEY_MASK = 0x06, 216e5920ddSStefan Achatz ISKU_SIZE_KEYS_FUNCTION = 0x29, 226e5920ddSStefan Achatz ISKU_SIZE_KEYS_EASYZONE = 0x41, 236e5920ddSStefan Achatz ISKU_SIZE_KEYS_MEDIA = 0x1d, 246e5920ddSStefan Achatz ISKU_SIZE_KEYS_THUMBSTER = 0x17, 256e5920ddSStefan Achatz ISKU_SIZE_KEYS_MACRO = 0x23, 266e5920ddSStefan Achatz ISKU_SIZE_KEYS_CAPSLOCK = 0x06, 276e5920ddSStefan Achatz ISKU_SIZE_LAST_SET = 0x14, 28*ce716965SStefan Achatz ISKU_SIZE_LIGHT = 0x10, 296e5920ddSStefan Achatz ISKU_SIZE_MACRO = 0x823, 30f1da71e1SStefan Achatz ISKU_SIZE_RESET = 0x03, 316e5920ddSStefan Achatz ISKU_SIZE_TALK = 0x10, 32*ce716965SStefan Achatz ISKU_SIZE_TALKFX = 0x10, 336e5920ddSStefan Achatz }; 346e5920ddSStefan Achatz 356e5920ddSStefan Achatz enum { 36d41c2a70SStefan Achatz ISKU_PROFILE_NUM = 5, 37d41c2a70SStefan Achatz ISKU_USB_INTERFACE_PROTOCOL = 0, 38d41c2a70SStefan Achatz }; 39d41c2a70SStefan Achatz 40d41c2a70SStefan Achatz struct isku_actual_profile { 41d41c2a70SStefan Achatz uint8_t command; /* ISKU_COMMAND_ACTUAL_PROFILE */ 42d41c2a70SStefan Achatz uint8_t size; /* always 3 */ 43d41c2a70SStefan Achatz uint8_t actual_profile; 44d41c2a70SStefan Achatz } __packed; 45d41c2a70SStefan Achatz 46d41c2a70SStefan Achatz enum isku_commands { 47d41c2a70SStefan Achatz ISKU_COMMAND_CONTROL = 0x4, 48d41c2a70SStefan Achatz ISKU_COMMAND_ACTUAL_PROFILE = 0x5, 49d41c2a70SStefan Achatz ISKU_COMMAND_KEY_MASK = 0x7, 50d41c2a70SStefan Achatz ISKU_COMMAND_KEYS_FUNCTION = 0x8, 51d41c2a70SStefan Achatz ISKU_COMMAND_KEYS_EASYZONE = 0x9, 52d41c2a70SStefan Achatz ISKU_COMMAND_KEYS_MEDIA = 0xa, 53d41c2a70SStefan Achatz ISKU_COMMAND_KEYS_THUMBSTER = 0xb, 54d41c2a70SStefan Achatz ISKU_COMMAND_KEYS_MACRO = 0xd, 55d41c2a70SStefan Achatz ISKU_COMMAND_MACRO = 0xe, 56d41c2a70SStefan Achatz ISKU_COMMAND_INFO = 0xf, 57d41c2a70SStefan Achatz ISKU_COMMAND_LIGHT = 0x10, 58f1da71e1SStefan Achatz ISKU_COMMAND_RESET = 0x11, 59d41c2a70SStefan Achatz ISKU_COMMAND_KEYS_CAPSLOCK = 0x13, 60d41c2a70SStefan Achatz ISKU_COMMAND_LAST_SET = 0x14, 61d41c2a70SStefan Achatz ISKU_COMMAND_15 = 0x15, 62d41c2a70SStefan Achatz ISKU_COMMAND_TALK = 0x16, 63*ce716965SStefan Achatz ISKU_COMMAND_TALKFX = 0x17, 64d41c2a70SStefan Achatz ISKU_COMMAND_FIRMWARE_WRITE = 0x1b, 65d41c2a70SStefan Achatz ISKU_COMMAND_FIRMWARE_WRITE_CONTROL = 0x1c, 66d41c2a70SStefan Achatz }; 67d41c2a70SStefan Achatz 68d41c2a70SStefan Achatz struct isku_report_button { 69d41c2a70SStefan Achatz uint8_t number; /* ISKU_REPORT_NUMBER_BUTTON */ 70d41c2a70SStefan Achatz uint8_t zero; 71d41c2a70SStefan Achatz uint8_t event; 72d41c2a70SStefan Achatz uint8_t data1; 73d41c2a70SStefan Achatz uint8_t data2; 74d41c2a70SStefan Achatz }; 75d41c2a70SStefan Achatz 76d41c2a70SStefan Achatz enum isku_report_numbers { 77d41c2a70SStefan Achatz ISKU_REPORT_NUMBER_BUTTON = 3, 78d41c2a70SStefan Achatz }; 79d41c2a70SStefan Achatz 80d41c2a70SStefan Achatz enum isku_report_button_events { 81d41c2a70SStefan Achatz ISKU_REPORT_BUTTON_EVENT_PROFILE = 0x2, 82d41c2a70SStefan Achatz }; 83d41c2a70SStefan Achatz 84d41c2a70SStefan Achatz struct isku_roccat_report { 85d41c2a70SStefan Achatz uint8_t event; 86d41c2a70SStefan Achatz uint8_t data1; 87d41c2a70SStefan Achatz uint8_t data2; 88d41c2a70SStefan Achatz uint8_t profile; 89d41c2a70SStefan Achatz } __packed; 90d41c2a70SStefan Achatz 91d41c2a70SStefan Achatz struct isku_device { 92d41c2a70SStefan Achatz int roccat_claimed; 93d41c2a70SStefan Achatz int chrdev_minor; 94d41c2a70SStefan Achatz 95d41c2a70SStefan Achatz struct mutex isku_lock; 96d41c2a70SStefan Achatz 97d41c2a70SStefan Achatz int actual_profile; 98d41c2a70SStefan Achatz }; 99d41c2a70SStefan Achatz 100d41c2a70SStefan Achatz #endif 101