1/*
2 * Copyright 2018, Data61, CSIRO (ABN 41 687 119 230)
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#include <keyboard/codes.h>
8
9/* Mapping from scan codes to characters. Anything that is not a definitive
10 * character is mapped to 0. Note that this assumes set 2 scan codes.
11 */
12static char codes[255] = {
13    [0x16] = '1', // or !
14    [0x1e] = '2', // or @
15    [0x26] = '3', // or #
16    [0x25] = '4', // or $
17    [0x2e] = '5', // or %
18    [0x36] = '6', // or ^
19    [0x3d] = '7', // or &
20    [0x3e] = '8', // or *
21    [0x46] = '9', // or (
22    [0x45] = '0', // or )
23    [0x66] = '\b',
24    [0x0d] = '\t',
25    [0x15] = 'Q',
26    [0x1d] = 'W',
27    [0x24] = 'E',
28    [0x2d] = 'R',
29    [0x2c] = 'T',
30    [0x35] = 'Y',
31    [0x3c] = 'U',
32    [0x43] = 'I',
33    [0x44] = 'O',
34    [0x4d] = 'P',
35    [0x54] = '[', // or {
36    [0x5b] = ']', // or }
37    [0x5d] = '\\', //or |
38    [0x1c] = 'A',
39    [0x1b] = 'S',
40    [0x23] = 'D',
41    [0x2b] = 'F',
42    [0x34] = 'G',
43    [0x33] = 'H',
44    [0x3b] = 'J',
45    [0x42] = 'K',
46    [0x4b] = 'L',
47    [0x4c] = ';', // or :
48    [0x52] = '\'', // or "
49    [0x5a] = '\n', // enter
50    [0x1a] = 'Z',
51    [0x22] = 'X',
52    [0x21] = 'C',
53    [0x2a] = 'V',
54    [0x32] = 'B',
55    [0x31] = 'N',
56    [0x3a] = 'M',
57    [0x41] = ',', // or <
58    [0x49] = '.', // or >
59    [0x4a] = '/', // or ?
60    [0x29] = ' ', // space
61    [0x76] = 033, // esc
62};
63
64char sel4keyboard_code_to_char(int index)
65{
66    if (index > sizeof(codes) || index < 0) {
67        return 0;
68    }
69    return codes[index];
70}
71