147dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz#ifndef __HID_ROCCAT_KONEPLUS_H
247dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz#define __HID_ROCCAT_KONEPLUS_H
347dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz
447dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz/*
547dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz * Copyright (c) 2010 Stefan Achatz <erazor_de@users.sourceforge.net>
647dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz */
747dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz
847dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz/*
947dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz * This program is free software; you can redistribute it and/or modify it
1047dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz * under the terms of the GNU General Public License as published by the Free
1147dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz * Software Foundation; either version 2 of the License, or (at your option)
1247dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz * any later version.
1347dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz */
1447dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz
1547dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz#include <linux/types.h>
1647dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz
17f114fec54c30ba9c6842ac1121d3e16d3d3c6bddStefan Achatzenum {
18f114fec54c30ba9c6842ac1121d3e16d3d3c6bddStefan Achatz	KONEPLUS_SIZE_ACTUAL_PROFILE = 0x03,
19bb060d65c3bf1d0211262e8229097d9a1beab20dStefan Achatz	KONEPLUS_SIZE_CONTROL = 0x03,
20f114fec54c30ba9c6842ac1121d3e16d3d3c6bddStefan Achatz	KONEPLUS_SIZE_FIRMWARE_WRITE = 0x0402,
21f114fec54c30ba9c6842ac1121d3e16d3d3c6bddStefan Achatz	KONEPLUS_SIZE_INFO = 0x06,
22f114fec54c30ba9c6842ac1121d3e16d3d3c6bddStefan Achatz	KONEPLUS_SIZE_MACRO = 0x0822,
23f114fec54c30ba9c6842ac1121d3e16d3d3c6bddStefan Achatz	KONEPLUS_SIZE_PROFILE_SETTINGS = 0x2b,
24f114fec54c30ba9c6842ac1121d3e16d3d3c6bddStefan Achatz	KONEPLUS_SIZE_PROFILE_BUTTONS = 0x4d,
25f114fec54c30ba9c6842ac1121d3e16d3d3c6bddStefan Achatz	KONEPLUS_SIZE_SENSOR = 0x06,
26f114fec54c30ba9c6842ac1121d3e16d3d3c6bddStefan Achatz	KONEPLUS_SIZE_TALK = 0x10,
27955dca354c3c02850409e773fcbd625ac68dd5e7Stefan Achatz	KONEPLUS_SIZE_TCU = 0x04,
28f114fec54c30ba9c6842ac1121d3e16d3d3c6bddStefan Achatz	KONEPLUS_SIZE_TCU_IMAGE = 0x0404,
29f114fec54c30ba9c6842ac1121d3e16d3d3c6bddStefan Achatz};
306d1dec85afa7306e66fff633689ff06195ad079aStefan Achatz
3147dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatzenum koneplus_control_requests {
3247dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	KONEPLUS_CONTROL_REQUEST_PROFILE_SETTINGS = 0x80,
3347dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	KONEPLUS_CONTROL_REQUEST_PROFILE_BUTTONS = 0x90,
3447dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz};
3547dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz
36b50f315cbb865079a16a12fd9ae6083f98fd592cStefan Achatzstruct koneplus_actual_profile {
37b50f315cbb865079a16a12fd9ae6083f98fd592cStefan Achatz	uint8_t command; /* KONEPLUS_COMMAND_ACTUAL_PROFILE */
3847dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	uint8_t size; /* always 3 */
39b50f315cbb865079a16a12fd9ae6083f98fd592cStefan Achatz	uint8_t actual_profile; /* Range 0-4! */
404d043101897768dfde30a6f2674fc7cec403d6b0Jiri Kosina} __attribute__ ((__packed__));
4147dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz
4247dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatzstruct koneplus_info {
4347dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	uint8_t command; /* KONEPLUS_COMMAND_INFO */
4447dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	uint8_t size; /* always 6 */
4547dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	uint8_t firmware_version;
4647dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	uint8_t unknown[3];
474d043101897768dfde30a6f2674fc7cec403d6b0Jiri Kosina} __attribute__ ((__packed__));
4847dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz
4947dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatzenum koneplus_commands {
50b50f315cbb865079a16a12fd9ae6083f98fd592cStefan Achatz	KONEPLUS_COMMAND_ACTUAL_PROFILE = 0x5,
51bb060d65c3bf1d0211262e8229097d9a1beab20dStefan Achatz	KONEPLUS_COMMAND_CONTROL = 0x4,
5247dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	KONEPLUS_COMMAND_PROFILE_SETTINGS = 0x6,
5347dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	KONEPLUS_COMMAND_PROFILE_BUTTONS = 0x7,
5447dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	KONEPLUS_COMMAND_MACRO = 0x8,
5547dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	KONEPLUS_COMMAND_INFO = 0x9,
561edd5b42a6631b1b1f147e9018e309bde8d96a05Stefan Achatz	KONEPLUS_COMMAND_TCU = 0xc,
57f114fec54c30ba9c6842ac1121d3e16d3d3c6bddStefan Achatz	KONEPLUS_COMMAND_TCU_IMAGE = 0xc,
5847dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	KONEPLUS_COMMAND_E = 0xe,
5947dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	KONEPLUS_COMMAND_SENSOR = 0xf,
606d1dec85afa7306e66fff633689ff06195ad079aStefan Achatz	KONEPLUS_COMMAND_TALK = 0x10,
6147dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	KONEPLUS_COMMAND_FIRMWARE_WRITE = 0x1b,
6247dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	KONEPLUS_COMMAND_FIRMWARE_WRITE_CONTROL = 0x1c,
6347dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz};
6447dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz
6547dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatzenum koneplus_mouse_report_numbers {
6647dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	KONEPLUS_MOUSE_REPORT_NUMBER_HID = 1,
6747dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	KONEPLUS_MOUSE_REPORT_NUMBER_AUDIO = 2,
6847dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	KONEPLUS_MOUSE_REPORT_NUMBER_BUTTON = 3,
6947dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz};
7047dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz
7147dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatzstruct koneplus_mouse_report_button {
7247dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	uint8_t report_number; /* always KONEPLUS_MOUSE_REPORT_NUMBER_BUTTON */
7347dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	uint8_t zero1;
7447dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	uint8_t type;
7547dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	uint8_t data1;
7647dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	uint8_t data2;
7747dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	uint8_t zero2;
7847dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	uint8_t unknown[2];
794d043101897768dfde30a6f2674fc7cec403d6b0Jiri Kosina} __attribute__ ((__packed__));
8047dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz
8147dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatzenum koneplus_mouse_report_button_types {
8247dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	/* data1 = new profile range 1-5 */
8347dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_PROFILE = 0x20,
8447dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz
8547dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	/* data1 = button number range 1-24; data2 = action */
8647dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_QUICKLAUNCH = 0x60,
8747dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz
8847dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	/* data1 = button number range 1-24; data2 = action */
8947dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_TIMER = 0x80,
9047dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz
9147dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	/* data1 = setting number range 1-5 */
9247dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_CPI = 0xb0,
9347dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz
9447dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	/* data1 and data2 = range 0x1-0xb */
9547dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_SENSITIVITY = 0xc0,
9647dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz
9747dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	/* data1 = 22 = next track...
9847dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	 * data2 = action
9947dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	 */
10047dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_MULTIMEDIA = 0xf0,
1016d1dec85afa7306e66fff633689ff06195ad079aStefan Achatz	KONEPLUS_MOUSE_REPORT_TALK = 0xff,
10247dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz};
10347dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz
10447dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatzenum koneplus_mouse_report_button_action {
10547dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	KONEPLUS_MOUSE_REPORT_BUTTON_ACTION_PRESS = 0,
10647dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	KONEPLUS_MOUSE_REPORT_BUTTON_ACTION_RELEASE = 1,
10747dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz};
10847dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz
10947dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatzstruct koneplus_roccat_report {
11047dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	uint8_t type;
11147dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	uint8_t data1;
11247dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	uint8_t data2;
11347dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	uint8_t profile;
1144d043101897768dfde30a6f2674fc7cec403d6b0Jiri Kosina} __attribute__ ((__packed__));
11547dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz
11647dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatzstruct koneplus_device {
11747dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	int actual_profile;
11847dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz
11947dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	int roccat_claimed;
12047dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	int chrdev_minor;
12147dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz
12247dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz	struct mutex koneplus_lock;
12347dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz};
12447dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz
12547dbdbffe15b9582a41727766d43f1d4208e977eStefan Achatz#endif
126