source: mainline/uspace/drv/bus/usb/usbhid/kbd/conv.c@ a501aaba

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since a501aaba was c072a29, checked in by Martin Decky <martin@…>, 11 years ago

use the PAUSE / BREAK key to activate the kernel console in compositor (F15 on some strange keyboards)
this avoids issues with stuck modifier keys and other surprises
it is also unlikely that any client applications would like to use these keys

  • Property mode set to 100644
File size: 4.2 KB
Line 
1/*
2 * Copyright (c) 2011 Lubos Slovak
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup drvusbhid
30 * @{
31 */
32/** @file
33 * USB scancode parser.
34 */
35
36#include <io/keycode.h>
37#include <stdint.h>
38#include <stdio.h>
39#include <usb/debug.h>
40#include "conv.h"
41
42/**
43 * Mapping between USB HID key codes (from HID Usage Tables) and corresponding
44 * HelenOS key codes.
45 */
46static int scanmap_simple[255] = {
47 [0x04] = KC_A,
48 [0x05] = KC_B,
49 [0x06] = KC_C,
50 [0x07] = KC_D,
51 [0x08] = KC_E,
52 [0x09] = KC_F,
53 [0x0a] = KC_G,
54 [0x0b] = KC_H,
55 [0x0c] = KC_I,
56 [0x0d] = KC_J,
57 [0x0e] = KC_K,
58 [0x0f] = KC_L,
59 [0x10] = KC_M,
60 [0x11] = KC_N,
61 [0x12] = KC_O,
62 [0x13] = KC_P,
63 [0x14] = KC_Q,
64 [0x15] = KC_R,
65 [0x16] = KC_S,
66 [0x17] = KC_T,
67 [0x18] = KC_U,
68 [0x19] = KC_V,
69 [0x1a] = KC_W,
70 [0x1b] = KC_X,
71 [0x1c] = KC_Y,
72 [0x1d] = KC_Z,
73
74 [0x1e] = KC_1,
75 [0x1f] = KC_2,
76 [0x20] = KC_3,
77 [0x21] = KC_4,
78 [0x22] = KC_5,
79 [0x23] = KC_6,
80 [0x24] = KC_7,
81 [0x25] = KC_8,
82 [0x26] = KC_9,
83 [0x27] = KC_0,
84
85 [0x28] = KC_ENTER,
86 [0x29] = KC_ESCAPE,
87 [0x2a] = KC_BACKSPACE,
88 [0x2b] = KC_TAB,
89 [0x2c] = KC_SPACE,
90
91 [0x2d] = KC_MINUS,
92 [0x2e] = KC_EQUALS,
93 [0x2f] = KC_LBRACKET,
94 [0x30] = KC_RBRACKET,
95 [0x31] = KC_BACKSLASH,
96 [0x32] = KC_HASH,
97 [0x33] = KC_SEMICOLON,
98 [0x34] = KC_QUOTE,
99 [0x35] = KC_BACKTICK,
100 [0x36] = KC_COMMA,
101 [0x37] = KC_PERIOD,
102 [0x38] = KC_SLASH,
103
104 [0x39] = KC_CAPS_LOCK,
105
106 [0x3a] = KC_F1,
107 [0x3b] = KC_F2,
108 [0x3c] = KC_F3,
109 [0x3d] = KC_F4,
110 [0x3e] = KC_F5,
111 [0x3f] = KC_F6,
112 [0x40] = KC_F7,
113 [0x41] = KC_F8,
114 [0x42] = KC_F9,
115 [0x43] = KC_F10,
116 [0x44] = KC_F11,
117 [0x45] = KC_F12,
118
119 [0x46] = KC_PRTSCR,
120 [0x47] = KC_SCROLL_LOCK,
121 [0x48] = KC_PAUSE,
122 [0x49] = KC_INSERT,
123 [0x4a] = KC_HOME,
124 [0x4b] = KC_PAGE_UP,
125 [0x4c] = KC_DELETE,
126 [0x4d] = KC_END,
127 [0x4e] = KC_PAGE_DOWN,
128 [0x4f] = KC_RIGHT,
129 [0x50] = KC_LEFT,
130 [0x51] = KC_DOWN,
131 [0x52] = KC_UP,
132
133 [0x53] = KC_NUM_LOCK,
134 [0x54] = KC_NSLASH,
135 [0x55] = KC_NTIMES,
136 [0x56] = KC_NMINUS,
137 [0x57] = KC_NPLUS,
138 [0x58] = KC_NENTER,
139 [0x59] = KC_N1,
140 [0x5a] = KC_N2,
141 [0x5b] = KC_N3,
142 [0x5c] = KC_N4,
143 [0x5d] = KC_N5,
144 [0x5e] = KC_N6,
145 [0x5f] = KC_N7,
146 [0x60] = KC_N8,
147 [0x61] = KC_N9,
148 [0x62] = KC_N0,
149 [0x63] = KC_NPERIOD,
150
151 [0x64] = KC_BACKSLASH,
152
153 [0x9a] = KC_SYSREQ,
154
155 [0xe0] = KC_LCTRL,
156 [0xe1] = KC_LSHIFT,
157 [0xe2] = KC_LALT,
158 [0xe4] = KC_RCTRL,
159 [0xe5] = KC_RSHIFT,
160 [0xe6] = KC_RALT,
161};
162
163/**
164 * Translate USB HID key codes (from HID Usage Tables) to generic key codes
165 * recognized by HelenOS.
166 *
167 * @param scancode USB HID key code (from HID Usage Tables).
168 *
169 * @retval HelenOS key code corresponding to the given USB HID key code.
170 */
171unsigned int usbhid_parse_scancode(int scancode)
172{
173 unsigned int key;
174 int *map = scanmap_simple;
175 size_t map_length = sizeof(scanmap_simple) / sizeof(int);
176
177 if ((scancode < 0) || ((size_t) scancode >= map_length))
178 return -1;
179
180 key = map[scancode];
181
182 return key;
183}
184
185/**
186 * @}
187 */
Note: See TracBrowser for help on using the repository browser.