1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun #ifndef __HID_ROCCAT_ARVO_H 3*4882a593Smuzhiyun #define __HID_ROCCAT_ARVO_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 struct arvo_mode_key { /* 2 bytes */ 15*4882a593Smuzhiyun uint8_t command; /* ARVO_COMMAND_MODE_KEY */ 16*4882a593Smuzhiyun uint8_t state; 17*4882a593Smuzhiyun } __packed; 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun struct arvo_button { 20*4882a593Smuzhiyun uint8_t unknown[24]; 21*4882a593Smuzhiyun } __packed; 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun struct arvo_info { 24*4882a593Smuzhiyun uint8_t unknown[8]; 25*4882a593Smuzhiyun } __packed; 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun struct arvo_key_mask { /* 2 bytes */ 28*4882a593Smuzhiyun uint8_t command; /* ARVO_COMMAND_KEY_MASK */ 29*4882a593Smuzhiyun uint8_t key_mask; 30*4882a593Smuzhiyun } __packed; 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun /* selected profile is persistent */ 33*4882a593Smuzhiyun struct arvo_actual_profile { /* 2 bytes */ 34*4882a593Smuzhiyun uint8_t command; /* ARVO_COMMAND_ACTUAL_PROFILE */ 35*4882a593Smuzhiyun uint8_t actual_profile; 36*4882a593Smuzhiyun } __packed; 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun enum arvo_commands { 39*4882a593Smuzhiyun ARVO_COMMAND_MODE_KEY = 0x3, 40*4882a593Smuzhiyun ARVO_COMMAND_BUTTON = 0x4, 41*4882a593Smuzhiyun ARVO_COMMAND_INFO = 0x5, 42*4882a593Smuzhiyun ARVO_COMMAND_KEY_MASK = 0x6, 43*4882a593Smuzhiyun ARVO_COMMAND_ACTUAL_PROFILE = 0x7, 44*4882a593Smuzhiyun }; 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun struct arvo_special_report { 47*4882a593Smuzhiyun uint8_t unknown1; /* always 0x01 */ 48*4882a593Smuzhiyun uint8_t event; 49*4882a593Smuzhiyun uint8_t unknown2; /* always 0x70 */ 50*4882a593Smuzhiyun } __packed; 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun enum arvo_special_report_events { 53*4882a593Smuzhiyun ARVO_SPECIAL_REPORT_EVENT_ACTION_PRESS = 0x10, 54*4882a593Smuzhiyun ARVO_SPECIAL_REPORT_EVENT_ACTION_RELEASE = 0x0, 55*4882a593Smuzhiyun }; 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun enum arvo_special_report_event_masks { 58*4882a593Smuzhiyun ARVO_SPECIAL_REPORT_EVENT_MASK_ACTION = 0xf0, 59*4882a593Smuzhiyun ARVO_SPECIAL_REPORT_EVENT_MASK_BUTTON = 0x0f, 60*4882a593Smuzhiyun }; 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun struct arvo_roccat_report { 63*4882a593Smuzhiyun uint8_t profile; 64*4882a593Smuzhiyun uint8_t button; 65*4882a593Smuzhiyun uint8_t action; 66*4882a593Smuzhiyun } __packed; 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun enum arvo_roccat_report_action { 69*4882a593Smuzhiyun ARVO_ROCCAT_REPORT_ACTION_RELEASE = 0, 70*4882a593Smuzhiyun ARVO_ROCCAT_REPORT_ACTION_PRESS = 1, 71*4882a593Smuzhiyun }; 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun struct arvo_device { 74*4882a593Smuzhiyun int roccat_claimed; 75*4882a593Smuzhiyun int chrdev_minor; 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun struct mutex arvo_lock; 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun int actual_profile; 80*4882a593Smuzhiyun }; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun #endif 83