1e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz#ifndef __HID_ROCCAT_ARVO_H 2e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz#define __HID_ROCCAT_ARVO_H 3e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz 4e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz/* 5e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz * Copyright (c) 2011 Stefan Achatz <erazor_de@users.sourceforge.net> 6e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz */ 7e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz 8e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz/* 9e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz * This program is free software; you can redistribute it and/or modify it 10e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz * under the terms of the GNU General Public License as published by the Free 11e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz * Software Foundation; either version 2 of the License, or (at your option) 12e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz * any later version. 13e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz */ 14e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz 15e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz#include <linux/types.h> 16e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz 17e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatzstruct arvo_mode_key { /* 2 bytes */ 18e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz uint8_t command; /* ARVO_COMMAND_MODE_KEY */ 19e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz uint8_t state; 20e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz} __packed; 21e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz 22e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatzstruct arvo_button { 23e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz uint8_t unknown[24]; 24e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz} __packed; 25e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz 26e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatzstruct arvo_info { 27e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz uint8_t unknown[8]; 28e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz} __packed; 29e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz 30e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatzstruct arvo_key_mask { /* 2 bytes */ 31e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz uint8_t command; /* ARVO_COMMAND_KEY_MASK */ 32e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz uint8_t key_mask; 33e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz} __packed; 34e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz 35e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz/* selected profile is persistent */ 36e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatzstruct arvo_actual_profile { /* 2 bytes */ 37e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz uint8_t command; /* ARVO_COMMAND_ACTUAL_PROFILE */ 38e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz uint8_t actual_profile; 39e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz} __packed; 40e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz 41e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatzenum arvo_commands { 42e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz ARVO_COMMAND_MODE_KEY = 0x3, 43e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz ARVO_COMMAND_BUTTON = 0x4, 44e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz ARVO_COMMAND_INFO = 0x5, 45e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz ARVO_COMMAND_KEY_MASK = 0x6, 46e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz ARVO_COMMAND_ACTUAL_PROFILE = 0x7, 47e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz}; 48e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz 49e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatzstruct arvo_special_report { 50e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz uint8_t unknown1; /* always 0x01 */ 51e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz uint8_t event; 52e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz uint8_t unknown2; /* always 0x70 */ 53e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz} __packed; 54e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz 55e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatzenum arvo_special_report_events { 56e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz ARVO_SPECIAL_REPORT_EVENT_ACTION_PRESS = 0x10, 57e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz ARVO_SPECIAL_REPORT_EVENT_ACTION_RELEASE = 0x0, 58e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz}; 59e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz 60e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatzenum arvo_special_report_event_masks { 61e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz ARVO_SPECIAL_REPORT_EVENT_MASK_ACTION = 0xf0, 62e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz ARVO_SPECIAL_REPORT_EVENT_MASK_BUTTON = 0x0f, 63e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz}; 64e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz 65e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatzstruct arvo_roccat_report { 66e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz uint8_t profile; 67e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz uint8_t button; 68e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz uint8_t action; 69e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz} __packed; 70e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz 71e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatzenum arvo_roccat_report_action { 72e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz ARVO_ROCCAT_REPORT_ACTION_RELEASE = 0, 73e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz ARVO_ROCCAT_REPORT_ACTION_PRESS = 1, 74e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz}; 75e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz 76e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatzstruct arvo_device { 77e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz int roccat_claimed; 78e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz int chrdev_minor; 79e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz 80e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz struct mutex arvo_lock; 81e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz 82e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz int actual_profile; 83e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz}; 84e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz 85e68cc603b063416c85f3e408184219fb71d4a9ffStefan Achatz#endif 86