150 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2#ifndef __HID_ROCCAT_PYRA_H3#define __HID_ROCCAT_PYRA_H4 5/*6 * Copyright (c) 2010 Stefan Achatz <erazor_de@users.sourceforge.net>7 */8 9/*10 */11 12#include <linux/types.h>13 14enum {15 PYRA_SIZE_CONTROL = 0x03,16 PYRA_SIZE_INFO = 0x06,17 PYRA_SIZE_PROFILE_SETTINGS = 0x0d,18 PYRA_SIZE_PROFILE_BUTTONS = 0x13,19 PYRA_SIZE_SETTINGS = 0x03,20};21 22enum pyra_control_requests {23 PYRA_CONTROL_REQUEST_PROFILE_SETTINGS = 0x10,24 PYRA_CONTROL_REQUEST_PROFILE_BUTTONS = 0x2025};26 27struct pyra_settings {28 uint8_t command; /* PYRA_COMMAND_SETTINGS */29 uint8_t size; /* always 3 */30 uint8_t startup_profile; /* Range 0-4! */31} __attribute__ ((__packed__));32 33struct pyra_profile_settings {34 uint8_t command; /* PYRA_COMMAND_PROFILE_SETTINGS */35 uint8_t size; /* always 0xd */36 uint8_t number; /* Range 0-4 */37 uint8_t xysync;38 uint8_t x_sensitivity; /* 0x1-0xa */39 uint8_t y_sensitivity;40 uint8_t x_cpi; /* unused */41 uint8_t y_cpi; /* this value is for x and y */42 uint8_t lightswitch; /* 0 = off, 1 = on */43 uint8_t light_effect;44 uint8_t handedness;45 uint16_t checksum; /* byte sum */46} __attribute__ ((__packed__));47 48struct pyra_info {49 uint8_t command; /* PYRA_COMMAND_INFO */50 uint8_t size; /* always 6 */51 uint8_t firmware_version;52 uint8_t unknown1; /* always 0 */53 uint8_t unknown2; /* always 1 */54 uint8_t unknown3; /* always 0 */55} __attribute__ ((__packed__));56 57enum pyra_commands {58 PYRA_COMMAND_CONTROL = 0x4,59 PYRA_COMMAND_SETTINGS = 0x5,60 PYRA_COMMAND_PROFILE_SETTINGS = 0x6,61 PYRA_COMMAND_PROFILE_BUTTONS = 0x7,62 PYRA_COMMAND_INFO = 0x9,63 PYRA_COMMAND_B = 0xb64};65 66enum pyra_mouse_report_numbers {67 PYRA_MOUSE_REPORT_NUMBER_HID = 1,68 PYRA_MOUSE_REPORT_NUMBER_AUDIO = 2,69 PYRA_MOUSE_REPORT_NUMBER_BUTTON = 3,70};71 72struct pyra_mouse_event_button {73 uint8_t report_number; /* always 3 */74 uint8_t unknown; /* always 0 */75 uint8_t type;76 uint8_t data1;77 uint8_t data2;78} __attribute__ ((__packed__));79 80struct pyra_mouse_event_audio {81 uint8_t report_number; /* always 2 */82 uint8_t type;83 uint8_t unused; /* always 0 */84} __attribute__ ((__packed__));85 86/* hid audio controls */87enum pyra_mouse_event_audio_types {88 PYRA_MOUSE_EVENT_AUDIO_TYPE_MUTE = 0xe2,89 PYRA_MOUSE_EVENT_AUDIO_TYPE_VOLUME_UP = 0xe9,90 PYRA_MOUSE_EVENT_AUDIO_TYPE_VOLUME_DOWN = 0xea,91};92 93enum pyra_mouse_event_button_types {94 /*95 * Mouse sends tilt events on report_number 1 and 396 * Tilt events are sent repeatedly with 0.94s between first and second97 * event and 0.22s on subsequent98 */99 PYRA_MOUSE_EVENT_BUTTON_TYPE_TILT = 0x10,100 101 /*102 * These are sent sequentially103 * data1 contains new profile number in range 1-5104 */105 PYRA_MOUSE_EVENT_BUTTON_TYPE_PROFILE_1 = 0x20,106 PYRA_MOUSE_EVENT_BUTTON_TYPE_PROFILE_2 = 0x30,107 108 /*109 * data1 = button_number (rmp index)110 * data2 = pressed/released111 */112 PYRA_MOUSE_EVENT_BUTTON_TYPE_MACRO = 0x40,113 PYRA_MOUSE_EVENT_BUTTON_TYPE_SHORTCUT = 0x50,114 115 /*116 * data1 = button_number (rmp index)117 */118 PYRA_MOUSE_EVENT_BUTTON_TYPE_QUICKLAUNCH = 0x60,119 120 /* data1 = new cpi */121 PYRA_MOUSE_EVENT_BUTTON_TYPE_CPI = 0xb0,122 123 /* data1 and data2 = new sensitivity */124 PYRA_MOUSE_EVENT_BUTTON_TYPE_SENSITIVITY = 0xc0,125 126 PYRA_MOUSE_EVENT_BUTTON_TYPE_MULTIMEDIA = 0xf0,127};128 129enum {130 PYRA_MOUSE_EVENT_BUTTON_PRESS = 0,131 PYRA_MOUSE_EVENT_BUTTON_RELEASE = 1,132};133 134struct pyra_roccat_report {135 uint8_t type;136 uint8_t value;137 uint8_t key;138} __attribute__ ((__packed__));139 140struct pyra_device {141 int actual_profile;142 int actual_cpi;143 int roccat_claimed;144 int chrdev_minor;145 struct mutex pyra_lock;146 struct pyra_profile_settings profile_settings[5];147};148 149#endif150