7 {
"esc", 0x00, KEY_ESC },
8 {
"f1", 0x0c, KEY_F1 },
9 {
"f2", 0x18, KEY_F2 },
10 {
"f3", 0x24, KEY_F3 },
11 {
"f4", 0x30, KEY_F4 },
12 {
"f5", 0x3c, KEY_F5 },
13 {
"f6", 0x48, KEY_F6 },
14 {
"f7", 0x54, KEY_F7 },
15 {
"f8", 0x60, KEY_F8 },
16 {
"f9", 0x6c, KEY_F9 },
17 {
"f10", 0x78, KEY_F10 },
18 {
"f11", 0x84, KEY_F11 },
19 {
"grave", 0x01, KEY_GRAVE },
30 {
"minus", 0x85, KEY_MINUS },
31 {
"tab", 0x02, KEY_TAB },
42 {
"lbrace", 0x86, KEY_LEFTBRACE },
43 {
"caps", 0x03, KEY_CAPSLOCK },
53 {
"colon", 0x7b, KEY_SEMICOLON },
54 {
"quote", 0x87, KEY_APOSTROPHE },
55 {
"lshift", 0x04, KEY_LEFTSHIFT },
56 {
"bslash_iso", 0x10, KEY_102ND },
64 {
"comma", 0x70, KEY_COMMA },
65 {
"dot", 0x7c, KEY_DOT },
66 {
"slash", 0x88, KEY_SLASH },
67 {
"lctrl", 0x05, KEY_LEFTCTRL },
68 {
"lwin", 0x11, KEY_LEFTMETA },
69 {
"lalt", 0x1d, KEY_LEFTALT },
71 {
"space", 0x35, KEY_SPACE },
74 {
"ralt", 0x59, KEY_RIGHTALT },
75 {
"rwin", 0x65, KEY_RIGHTMETA },
76 {
"rmenu", 0x71, KEY_COMPOSE },
79 {
"f12", 0x06, KEY_F12 },
80 {
"prtscn", 0x12, KEY_SYSRQ },
81 {
"scroll", 0x1e, KEY_SCROLLLOCK },
82 {
"pause", 0x2a, KEY_PAUSE },
83 {
"ins", 0x36, KEY_INSERT },
84 {
"home", 0x42, KEY_HOME },
85 {
"pgup", 0x4e, KEY_PAGEUP },
86 {
"rbrace", 0x5a, KEY_RIGHTBRACE },
87 {
"bslash", 0x66, KEY_BACKSLASH },
89 {
"enter", 0x7e, KEY_ENTER },
91 {
"equal", 0x07, KEY_EQUAL },
93 {
"bspace", 0x1f, KEY_BACKSPACE },
94 {
"del", 0x2b, KEY_DELETE },
95 {
"end", 0x37, KEY_END },
96 {
"pgdn", 0x43, KEY_PAGEDOWN },
97 {
"rshift", 0x4f, KEY_RIGHTSHIFT },
98 {
"rctrl", 0x5b, KEY_RIGHTCTRL },
99 {
"up", 0x67, KEY_UP },
100 {
"left", 0x73, KEY_LEFT },
101 {
"down", 0x7f, KEY_DOWN },
102 {
"right", 0x8b, KEY_RIGHT },
104 {
"mute", 0x14, KEY_MUTE },
105 {
"stop", 0x20, KEY_STOPCD },
106 {
"prev", 0x2c, KEY_PREVIOUSSONG },
107 {
"play", 0x38, KEY_PLAYPAUSE },
108 {
"next", 0x44, KEY_NEXTSONG },
109 {
"numlock", 0x50, KEY_NUMLOCK },
110 {
"numslash", 0x5c, KEY_KPSLASH },
111 {
"numstar", 0x68, KEY_KPASTERISK },
112 {
"numminus", 0x74, KEY_KPMINUS },
113 {
"numplus", 0x80, KEY_KPPLUS },
114 {
"numenter", 0x8c, KEY_KPENTER },
115 {
"num7", 0x09, KEY_KP7 },
116 {
"num8", 0x15, KEY_KP8 },
117 {
"num9", 0x21, KEY_KP9 },
119 {
"num4", 0x39, KEY_KP4 },
120 {
"num5", 0x45, KEY_KP5 },
121 {
"num6", 0x51, KEY_KP6 },
122 {
"num1", 0x5d, KEY_KP1 },
123 {
"num2", 0x69, KEY_KP2 },
124 {
"num3", 0x75, KEY_KP3 },
125 {
"num0", 0x81, KEY_KP0 },
126 {
"numdot", 0x8d, KEY_KPDOT },
137 {
"volup", 0x20, KEY_VOLUMEUP },
138 {
"voldn", 0x2c, KEY_VOLUMEDOWN },
153 {
"fn", 0x65, KEY_FN },
167 {
"lightup", -1, KEY_BRIGHTNESSUP },
168 {
"lightdn", -1, KEY_BRIGHTNESSDOWN },
169 {
"eject", -1, KEY_EJECTCD },
170 {
"power", -1, KEY_POWER },
171 {
"f13", -1, KEY_F13 },
172 {
"f14", -1, KEY_F14 },
173 {
"f15", -1, KEY_F15 },
174 {
"f16", -1, KEY_F16 },
175 {
"f17", -1, KEY_F17 },
176 {
"f18", -1, KEY_F18 },
177 {
"f19", -1, KEY_F19 },
178 {
"f20", -1, KEY_F20 },
223 void hid_kb_translate(
unsigned char* kbinput,
int endpoint,
int length,
const unsigned char* urbinput){
228 static const short hid_codes[256] = {
229 -1, -1, -1, -1, 37, 54, 52, 39, 27, 40, 41, 42, 32, 43, 44, 45,
230 56, 55, 33, 34, 25, 28, 38, 29, 31, 53, 26, 51, 30, 50, 13, 14,
231 15, 16, 17, 18, 19, 20, 21, 22, 82, 0, 86, 24, 64, 23, 84, 35,
232 79, 80, 81, 46, 47, 12, 57, 58, 59, 36, 1, 2, 3, 4, 5, 6,
233 7, 8, 9, 10, 11, 72, 73, 74, 75, 76, 77, 78, 87, 88, 89, 95,
234 93, 94, 92, 102, 103, 104, 105, 106, 107, 115, 116, 117, 112, 113, 114, 108,
235 109, 110, 118, 119, 49, 69, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
236 -2, -2, -2, -2, -2, -2, -2, -2, 98, -2, -2, -2, -2, -2, -2, 97,
237 130, 131, -1, -1, -1, -2, -1, -2, -2, -2, -2, -2, -2, -1, -1, -1,
238 -2, -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
239 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
240 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
241 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -3, -1, -1, -1,
242 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 136, 137, 138, 139, 140, 141,
243 60, 48, 62, 61, 91, 90, 67, 68, 142, 143, 99, 101, -2, 130, 131, 97,
244 -2, 133, 134, 135, -2, 96, -2, 132, -2, -2, 71, 71, 71, 71, -1, -1,
251 for(
int i = 0; i < 256; i++){
252 if(hid_codes[i] >= 0)
256 for(
int i = 0; i < 8; i++){
257 if((urbinput[0] >> i) & 1)
260 for(
int i = 2; i < length; i++){
262 int scan = hid_codes[urbinput[i]];
266 ckb_warn(
"Got unknown key press %d on EP 1\n", urbinput[i]);
272 if(urbinput[0] == 1){
276 for(
int bit = 0; bit < 8; bit++){
277 if((urbinput[1] >> bit) & 1)
282 for(
int byte = 0; byte < 19; byte++){
283 char input = urbinput[byte + 2];
284 for(
int bit = 0; bit < 8; bit++){
285 int keybit = byte * 8 + bit;
286 int scan = hid_codes[keybit];
287 if((input >> bit) & 1){
291 ckb_warn(
"Got unknown key press %d on EP 2\n", keybit);
297 }
else if(urbinput[0] == 2)
310 for(
int i = 0; i < length; i++){
340 for(
int bit = 0; bit < 8; bit++){
341 if((urbinput[0] >> bit) & 1)
346 for(
int byte = 0; byte < 14; byte++){
347 char input = urbinput[byte + 1];
348 for(
int bit = 0; bit < 8; bit++){
349 int keybit = byte * 8 + bit;
350 int scan = hid_codes[keybit];
351 if((input >> bit) & 1){
355 ckb_warn(
"Got unknown key press %d on EP 3\n", keybit);
364 #define BUTTON_HID_COUNT 5
366 void hid_mouse_translate(
unsigned char* kbinput,
short* xaxis,
short* yaxis,
int endpoint,
int length,
const unsigned char* urbinput){
367 if((endpoint != 2 && endpoint != -2) || length < 10)
374 if(urbinput[1] & (1 << bit))
380 *xaxis += *(
short*)(urbinput + 5);
381 *yaxis += *(
short*)(urbinput + 7);
383 char wheel = urbinput[9];
394 void corsair_kbcopy(
unsigned char* kbinput,
int endpoint,
const unsigned char* urbinput){
395 if(endpoint == 2 || endpoint == -2){
404 if(endpoint == 2 || endpoint == -2){
411 uchar test = 1 << (bit % 8);
412 if(urbinput[byte] & test)
#define CLEAR_KEYBIT(array, index)
#define MOUSE_BUTTON_FIRST
#define SET_KEYBIT(array, index)
#define KEY_BACKSLASH_ISO
void hid_mouse_translate(unsigned char *kbinput, short *xaxis, short *yaxis, int endpoint, int length, const unsigned char *urbinput)
#define ckb_warn(fmt, args...)
void corsair_mousecopy(unsigned char *kbinput, int endpoint, const unsigned char *urbinput)
void hid_kb_translate(unsigned char *kbinput, int endpoint, int length, const unsigned char *urbinput)
#define MOUSE_EXTRA_FIRST
const key keymap[(((152+3+12)+25)+11)]
void corsair_kbcopy(unsigned char *kbinput, int endpoint, const unsigned char *urbinput)