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