diff options
author | Stefan Achatz <erazor_de@users.sourceforge.net> | 2011-01-06 03:00:34 -0500 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2011-01-20 05:27:54 -0500 |
commit | e68cc603b063416c85f3e408184219fb71d4a9ff (patch) | |
tree | 2b1cc1a5bd0234d9a0b7ba44560a48ef2ea88555 /drivers/hid/hid-roccat-arvo.h | |
parent | dacfecdbf3a0a5072984ff8b3c224a48c8461008 (diff) |
HID: roccat: Add support for Roccat Arvo keyboard
This patch add support for Roccat Arvo keyboard. Arvo has 5 additional
configurable buttons and the ability to deactivate certain keys.
Userland tools can soon be found at http://sourceforge.net/projects/roccat
Signed-off-by: Stefan Achatz <erazor_de@users.sourceforge.net>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'drivers/hid/hid-roccat-arvo.h')
-rw-r--r-- | drivers/hid/hid-roccat-arvo.h | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/drivers/hid/hid-roccat-arvo.h b/drivers/hid/hid-roccat-arvo.h new file mode 100644 index 000000000000..d284a781c99e --- /dev/null +++ b/drivers/hid/hid-roccat-arvo.h | |||
@@ -0,0 +1,98 @@ | |||
1 | #ifndef __HID_ROCCAT_ARVO_H | ||
2 | #define __HID_ROCCAT_ARVO_H | ||
3 | |||
4 | /* | ||
5 | * Copyright (c) 2011 Stefan Achatz <erazor_de@users.sourceforge.net> | ||
6 | */ | ||
7 | |||
8 | /* | ||
9 | * This program is free software; you can redistribute it and/or modify it | ||
10 | * under the terms of the GNU General Public License as published by the Free | ||
11 | * Software Foundation; either version 2 of the License, or (at your option) | ||
12 | * any later version. | ||
13 | */ | ||
14 | |||
15 | #include <linux/types.h> | ||
16 | |||
17 | struct arvo_mode_key { /* 2 bytes */ | ||
18 | uint8_t command; /* ARVO_COMMAND_MODE_KEY */ | ||
19 | uint8_t state; | ||
20 | } __packed; | ||
21 | |||
22 | struct arvo_button { | ||
23 | uint8_t unknown[24]; | ||
24 | } __packed; | ||
25 | |||
26 | struct arvo_info { | ||
27 | uint8_t unknown[8]; | ||
28 | } __packed; | ||
29 | |||
30 | struct arvo_key_mask { /* 2 bytes */ | ||
31 | uint8_t command; /* ARVO_COMMAND_KEY_MASK */ | ||
32 | uint8_t key_mask; | ||
33 | } __packed; | ||
34 | |||
35 | /* selected profile is persistent */ | ||
36 | struct arvo_actual_profile { /* 2 bytes */ | ||
37 | uint8_t command; /* ARVO_COMMAND_ACTUAL_PROFILE */ | ||
38 | uint8_t actual_profile; | ||
39 | } __packed; | ||
40 | |||
41 | enum arvo_commands { | ||
42 | ARVO_COMMAND_MODE_KEY = 0x3, | ||
43 | ARVO_COMMAND_BUTTON = 0x4, | ||
44 | ARVO_COMMAND_INFO = 0x5, | ||
45 | ARVO_COMMAND_KEY_MASK = 0x6, | ||
46 | ARVO_COMMAND_ACTUAL_PROFILE = 0x7, | ||
47 | }; | ||
48 | |||
49 | enum arvo_usb_commands { | ||
50 | ARVO_USB_COMMAND_MODE_KEY = 0x303, | ||
51 | /* | ||
52 | * read/write | ||
53 | * Read uses both index bytes as profile/key indexes | ||
54 | * Write has index 0, profile/key is determined by payload | ||
55 | */ | ||
56 | ARVO_USB_COMMAND_BUTTON = 0x304, | ||
57 | ARVO_USB_COMMAND_INFO = 0x305, | ||
58 | ARVO_USB_COMMAND_KEY_MASK = 0x306, | ||
59 | ARVO_USB_COMMAND_ACTUAL_PROFILE = 0x307, | ||
60 | }; | ||
61 | |||
62 | struct arvo_special_report { | ||
63 | uint8_t unknown1; /* always 0x01 */ | ||
64 | uint8_t event; | ||
65 | uint8_t unknown2; /* always 0x70 */ | ||
66 | } __packed; | ||
67 | |||
68 | enum arvo_special_report_events { | ||
69 | ARVO_SPECIAL_REPORT_EVENT_ACTION_PRESS = 0x10, | ||
70 | ARVO_SPECIAL_REPORT_EVENT_ACTION_RELEASE = 0x0, | ||
71 | }; | ||
72 | |||
73 | enum arvo_special_report_event_masks { | ||
74 | ARVO_SPECIAL_REPORT_EVENT_MASK_ACTION = 0xf0, | ||
75 | ARVO_SPECIAL_REPORT_EVENT_MASK_BUTTON = 0x0f, | ||
76 | }; | ||
77 | |||
78 | struct arvo_roccat_report { | ||
79 | uint8_t profile; | ||
80 | uint8_t button; | ||
81 | uint8_t action; | ||
82 | } __packed; | ||
83 | |||
84 | enum arvo_roccat_report_action { | ||
85 | ARVO_ROCCAT_REPORT_ACTION_RELEASE = 0, | ||
86 | ARVO_ROCCAT_REPORT_ACTION_PRESS = 1, | ||
87 | }; | ||
88 | |||
89 | struct arvo_device { | ||
90 | int roccat_claimed; | ||
91 | int chrdev_minor; | ||
92 | |||
93 | struct mutex arvo_lock; | ||
94 | |||
95 | int actual_profile; | ||
96 | }; | ||
97 | |||
98 | #endif | ||