/branches/network/kernel/genarch/src/kbrd/kbrd.c |
---|
45,6 → 45,10 |
#include <genarch/kbrd/scanc_sun.h> |
#endif |
#ifdef CONFIG_MAC_KBD |
#include <genarch/kbrd/scanc_mac.h> |
#endif |
#include <synch/spinlock.h> |
#include <console/chardev.h> |
#include <console/console.h> |
/branches/network/kernel/genarch/src/kbrd/kbrd_pl050.c |
---|
0,0 → 1,209 |
/* |
* Copyright (c) 2009 Vineeth Pillai |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** |
* @file |
* @brief pl050 Keyboard processing. |
*/ |
#include <genarch/kbrd/kbrd.h> |
#include <genarch/kbrd/scanc.h> |
#include <genarch/kbrd/scanc_pl050.h> |
#include <synch/spinlock.h> |
#include <console/chardev.h> |
#include <console/console.h> |
#include <proc/thread.h> |
#include <arch.h> |
#include <macros.h> |
#define PRESSED_SHIFT (1 << 0) |
#define PRESSED_CAPSLOCK (1 << 1) |
#define LOCKED_CAPSLOCK (1 << 0) |
#define PL050_KEY_RELEASE 0xF0 |
#define PL050_ESC_KEY 0xE0 |
#define PL050_CAPS_SCAN_CODE 0x58 |
#define PL050_NUM_SCAN_CODE 0x77 |
#define PL050_SCROLL_SCAN_CODE 0x7E |
static bool is_lock_key(wchar_t); |
static indev_operations_t kbrd_raw_ops = { |
.poll = NULL |
}; |
/** Process release of key. |
* |
* @param sc Scancode of the key being released. |
*/ |
static void key_released(kbrd_instance_t *instance, wchar_t sc) |
{ |
spinlock_lock(&instance->keylock); |
switch (sc) { |
case SC_LSHIFT: |
case SC_RSHIFT: |
instance->keyflags &= ~PRESSED_SHIFT; |
break; |
case SC_CAPSLOCK: |
instance->keyflags &= ~PRESSED_CAPSLOCK; |
if (instance->lockflags & LOCKED_CAPSLOCK) |
instance->lockflags &= ~LOCKED_CAPSLOCK; |
else |
instance->lockflags |= LOCKED_CAPSLOCK; |
break; |
default: |
break; |
} |
spinlock_unlock(&instance->keylock); |
} |
/** Process keypress. |
* |
* @param sc Scancode of the key being pressed. |
*/ |
static void key_pressed(kbrd_instance_t *instance, wchar_t sc) |
{ |
bool letter; |
bool shift; |
bool capslock; |
spinlock_lock(&instance->keylock); |
switch (sc) { |
case SC_LSHIFT: |
case SC_RSHIFT: |
instance->keyflags |= PRESSED_SHIFT; |
break; |
case SC_CAPSLOCK: |
instance->keyflags |= PRESSED_CAPSLOCK; |
break; |
case SC_SCAN_ESCAPE: |
break; |
default: |
letter = islower(sc_primary_map[sc]); |
shift = instance->keyflags & PRESSED_SHIFT; |
capslock = (instance->keyflags & PRESSED_CAPSLOCK) || |
(instance->lockflags & LOCKED_CAPSLOCK); |
if ((letter) && (capslock)) |
shift = !shift; |
if (shift) |
indev_push_character(instance->sink, sc_secondary_map[sc]); |
else |
indev_push_character(instance->sink, sc_primary_map[sc]); |
break; |
} |
spinlock_unlock(&instance->keylock); |
} |
static void kkbrd(void *arg) |
{ |
static int key_released_flag = 0; |
static int is_locked = 0; |
kbrd_instance_t *instance = (kbrd_instance_t *) arg; |
while (true) { |
wchar_t sc = indev_pop_character(&instance->raw); |
if (sc == PL050_KEY_RELEASE) { |
key_released_flag = 1; |
} else { |
if (key_released_flag) { |
key_released_flag = 0; |
if (is_lock_key(sc)) { |
if (!is_locked) { |
is_locked = 1; |
} else { |
is_locked = 0; |
continue; |
} |
} |
key_released(instance, sc); |
} else { |
if (is_lock_key(sc) && is_locked) |
continue; |
key_pressed(instance, sc); |
} |
} |
} |
} |
kbrd_instance_t *kbrd_init(void) |
{ |
kbrd_instance_t *instance |
= malloc(sizeof(kbrd_instance_t), FRAME_ATOMIC); |
if (instance) { |
instance->thread |
= thread_create(kkbrd, (void *) instance, TASK, 0, "kkbrd", false); |
if (!instance->thread) { |
free(instance); |
return NULL; |
} |
instance->sink = NULL; |
indev_initialize("kbrd", &instance->raw, &kbrd_raw_ops); |
spinlock_initialize(&instance->keylock, "instance_keylock"); |
instance->keyflags = 0; |
instance->lockflags = 0; |
} |
return instance; |
} |
indev_t *kbrd_wire(kbrd_instance_t *instance, indev_t *sink) |
{ |
ASSERT(instance); |
ASSERT(sink); |
instance->sink = sink; |
thread_ready(instance->thread); |
return &instance->raw; |
} |
static bool is_lock_key(wchar_t sc) |
{ |
return ((sc == PL050_CAPS_SCAN_CODE) || (sc == PL050_NUM_SCAN_CODE) || |
(sc == PL050_SCROLL_SCAN_CODE)); |
} |
/** @} |
*/ |
/branches/network/kernel/genarch/src/kbrd/scanc_mac.c |
---|
0,0 → 1,306 |
/* |
* Copyright (c) 2009 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** |
* @file |
* @brief Scan codes for Macintosh ADB keyboards. |
*/ |
#include <genarch/kbrd/scanc.h> |
#include <typedefs.h> |
#include <string.h> |
/** Primary meaning of scancodes. */ |
wchar_t sc_primary_map[SCANCODES] = { |
[0x00] = 'a', |
[0x01] = 's', |
[0x02] = 'd', |
[0x03] = 'f', |
[0x04] = 'h', |
[0x05] = 'g', |
[0x06] = 'z', |
[0x07] = 'x', |
[0x08] = 'c', |
[0x09] = 'v', |
[0x0a] = U_SPECIAL, |
[0x0b] = 'b', |
[0x0c] = 'q', |
[0x0d] = 'w', |
[0x0e] = 'e', |
[0x0f] = 'r', |
[0x10] = 'y', |
[0x11] = 't', |
[0x12] = '1', |
[0x13] = '2', |
[0x14] = '3', |
[0x15] = '4', |
[0x16] = '6', |
[0x17] = '5', |
[0x18] = '=', |
[0x19] = '9', |
[0x1a] = '7', |
[0x1b] = '-', |
[0x1c] = '8', |
[0x1d] = '0', |
[0x1e] = ']', |
[0x1f] = 'o', |
[0x20] = 'u', |
[0x21] = '[', |
[0x22] = 'i', |
[0x23] = 'p', |
[0x24] = '\n', /* Enter */ |
[0x25] = 'l', |
[0x26] = 'j', |
[0x27] = '\'', |
[0x28] = 'k', |
[0x29] = ';', |
[0x2a] = '\\', |
[0x2b] = ',', |
[0x2c] = '/', |
[0x2d] = 'n', |
[0x2e] = 'm', |
[0x2f] = '.', |
[0x30] = '\t', /* Tab */ |
[0x31] = ' ', /* Space */ |
[0x32] = '`', |
[0x33] = '\b', /* Backspace */ |
[0x34] = U_SPECIAL, |
[0x35] = U_ESCAPE, |
[0x36] = U_SPECIAL, |
[0x37] = U_SPECIAL, |
[0x38] = U_SPECIAL, |
[0x39] = U_SPECIAL, |
[0x3a] = U_SPECIAL, |
[0x3b] = U_LEFT_ARROW, |
[0x3c] = U_RIGHT_ARROW, |
[0x3d] = U_DOWN_ARROW, |
[0x3e] = U_UP_ARROW, |
[0x3f] = U_SPECIAL, |
[0x40] = U_SPECIAL, |
[0x41] = '.', /* Num Separator */ |
[0x42] = U_SPECIAL, |
[0x43] = '*', /* Num Times */ |
[0x44] = U_SPECIAL, |
[0x45] = '+', /* Num Plus */ |
[0x46] = U_SPECIAL, |
[0x47] = U_SPECIAL, |
[0x48] = U_SPECIAL, |
[0x49] = U_SPECIAL, |
[0x4a] = U_SPECIAL, |
[0x4b] = '/', /* Num Divide */ |
[0x4c] = U_SPECIAL, |
[0x4d] = U_SPECIAL, |
[0x4e] = '-', /* Num Minus */ |
[0x4f] = U_SPECIAL, |
[0x50] = U_SPECIAL, |
[0x51] = U_SPECIAL, |
[0x52] = '0', /* Num Zero */ |
[0x53] = '1', /* Num One */ |
[0x54] = '2', /* Num Two */ |
[0x55] = '3', /* Num Three */ |
[0x56] = '4', /* Num Four */ |
[0x57] = '5', /* Num Five */ |
[0x58] = '6', /* Num Six */ |
[0x59] = '7', /* Num Seven */ |
[0x5a] = U_SPECIAL, |
[0x5b] = '8', /* Num Eight */ |
[0x5c] = '9', /* Num Nine */ |
[0x5d] = U_SPECIAL, |
[0x5e] = U_SPECIAL, |
[0x5f] = U_SPECIAL, |
[0x60] = U_SPECIAL, |
[0x61] = U_SPECIAL, |
[0x62] = U_SPECIAL, |
[0x63] = U_SPECIAL, |
[0x64] = U_SPECIAL, |
[0x65] = U_SPECIAL, |
[0x66] = U_SPECIAL, |
[0x67] = U_SPECIAL, |
[0x68] = U_SPECIAL, |
[0x69] = U_SPECIAL, |
[0x6a] = U_SPECIAL, |
[0x6b] = U_SPECIAL, |
[0x6c] = U_SPECIAL, |
[0x6d] = U_SPECIAL, |
[0x6e] = U_SPECIAL, |
[0x6f] = U_SPECIAL, |
[0x70] = U_SPECIAL, |
[0x71] = U_SPECIAL, |
[0x72] = U_SPECIAL, |
[0x73] = U_HOME_ARROW, |
[0x74] = U_PAGE_UP, |
[0x75] = U_DELETE, |
[0x76] = U_SPECIAL, |
[0x77] = U_SPECIAL, |
[0x78] = U_SPECIAL, |
[0x79] = U_PAGE_DOWN, |
[0x7a] = U_SPECIAL, |
[0x7b] = U_SPECIAL, |
[0x7c] = U_SPECIAL, |
[0x7d] = U_SPECIAL, |
[0x7e] = U_SPECIAL, |
[0x7f] = U_SPECIAL |
}; |
/** Secondary meaning of scancodes. */ |
wchar_t sc_secondary_map[SCANCODES] = { |
[0x00] = 'A', |
[0x01] = 'S', |
[0x02] = 'D', |
[0x03] = 'F', |
[0x04] = 'H', |
[0x05] = 'G', |
[0x06] = 'Z', |
[0x07] = 'X', |
[0x08] = 'C', |
[0x09] = 'V', |
[0x0a] = U_SPECIAL, |
[0x0b] = 'B', |
[0x0c] = 'Q', |
[0x0d] = 'W', |
[0x0e] = 'E', |
[0x0f] = 'R', |
[0x10] = 'Y', |
[0x11] = 'T', |
[0x12] = '!', |
[0x13] = '@', |
[0x14] = '#', |
[0x15] = '$', |
[0x16] = '^', |
[0x17] = '%', |
[0x18] = '+', |
[0x19] = '(', |
[0x1a] = '&', |
[0x1b] = '_', |
[0x1c] = '*', |
[0x1d] = ')', |
[0x1e] = '}', |
[0x1f] = 'O', |
[0x20] = 'U', |
[0x21] = '{', |
[0x22] = 'I', |
[0x23] = 'P', |
[0x24] = '\n', /* Enter */ |
[0x25] = 'L', |
[0x26] = 'J', |
[0x27] = '"', |
[0x28] = 'K', |
[0x29] = ':', |
[0x2a] = '|', |
[0x2b] = '<', |
[0x2c] = '?', |
[0x2d] = 'N', |
[0x2e] = 'M', |
[0x2f] = '>', |
[0x30] = '\t', /* Tab */ |
[0x31] = ' ', /* Space */ |
[0x32] = '~', |
[0x33] = '\b', /* Backspace */ |
[0x34] = U_SPECIAL, |
[0x35] = U_SPECIAL, |
[0x36] = U_SPECIAL, |
[0x37] = U_SPECIAL, |
[0x38] = U_SPECIAL, |
[0x39] = U_SPECIAL, |
[0x3a] = U_SPECIAL, |
[0x3b] = U_SPECIAL, |
[0x3c] = U_SPECIAL, |
[0x3d] = U_SPECIAL, |
[0x3e] = U_SPECIAL, |
[0x3f] = U_SPECIAL, |
[0x40] = U_SPECIAL, |
[0x41] = '.', /* Num Separator */ |
[0x42] = U_SPECIAL, |
[0x43] = '*', /* Num Times */ |
[0x44] = U_SPECIAL, |
[0x45] = '+', /* Num Plus */ |
[0x46] = U_SPECIAL, |
[0x47] = U_SPECIAL, |
[0x48] = U_SPECIAL, |
[0x49] = U_SPECIAL, |
[0x4a] = U_SPECIAL, |
[0x4b] = '/', /* Num Divide */ |
[0x4c] = U_SPECIAL, |
[0x4d] = U_SPECIAL, |
[0x4e] = '-', /* Num Minus */ |
[0x4f] = U_SPECIAL, |
[0x50] = U_SPECIAL, |
[0x51] = U_SPECIAL, |
[0x52] = '0', /* Num Zero */ |
[0x53] = '1', /* Num One */ |
[0x54] = '2', /* Num Two */ |
[0x55] = '3', /* Num Three */ |
[0x56] = '4', /* Num Four */ |
[0x57] = '5', /* Num Five */ |
[0x58] = '6', /* Num Six */ |
[0x59] = '7', /* Num Seven */ |
[0x5a] = U_SPECIAL, |
[0x5b] = '8', /* Num Eight */ |
[0x5c] = '9', /* Num Nine */ |
[0x5d] = U_SPECIAL, |
[0x5e] = U_SPECIAL, |
[0x5f] = U_SPECIAL, |
[0x60] = U_SPECIAL, |
[0x61] = U_SPECIAL, |
[0x62] = U_SPECIAL, |
[0x63] = U_SPECIAL, |
[0x64] = U_SPECIAL, |
[0x65] = U_SPECIAL, |
[0x66] = U_SPECIAL, |
[0x67] = U_SPECIAL, |
[0x68] = U_SPECIAL, |
[0x69] = U_SPECIAL, |
[0x6a] = U_SPECIAL, |
[0x6b] = U_SPECIAL, |
[0x6c] = U_SPECIAL, |
[0x6d] = U_SPECIAL, |
[0x6e] = U_SPECIAL, |
[0x6f] = U_SPECIAL, |
[0x70] = U_SPECIAL, |
[0x71] = U_SPECIAL, |
[0x72] = U_SPECIAL, |
[0x73] = U_SPECIAL, |
[0x74] = U_SPECIAL, |
[0x75] = U_SPECIAL, |
[0x76] = U_SPECIAL, |
[0x77] = U_SPECIAL, |
[0x78] = U_SPECIAL, |
[0x79] = U_SPECIAL, |
[0x7a] = U_SPECIAL, |
[0x7b] = U_SPECIAL, |
[0x7c] = U_SPECIAL, |
[0x7d] = U_SPECIAL, |
[0x7e] = U_SPECIAL, |
[0x7f] = U_SPECIAL |
}; |
/** @} |
*/ |
/branches/network/kernel/genarch/src/kbrd/scanc_pl050.c |
---|
0,0 → 1,234 |
/* |
* Copyright (c) 2009 Vineeth Pillai |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, U_SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** |
* @file |
* @brief Scan codes for pl050 keyboards. |
*/ |
#include <genarch/kbrd/scanc.h> |
#include <typedefs.h> |
#include <string.h> |
/** Primary meaning of scancodes. */ |
wchar_t sc_primary_map[] = { |
U_NULL, /* 0x00 */ |
U_SPECIAL, /* 0x01 - F9 */ |
U_SPECIAL, /* 0x02 - F7 */ |
U_SPECIAL, /* 0x03 - F5 */ |
U_SPECIAL, /* 0x04 - F3 */ |
U_SPECIAL, /* 0x05 - F1 */ |
U_SPECIAL, /* 0x06 - F2 */ |
U_SPECIAL, /* 0x07 - F12 */ |
U_SPECIAL, /* 0x08 - */ |
U_SPECIAL, /* 0x09 - F10 */ |
U_SPECIAL, /* 0x0A - F8 */ |
U_SPECIAL, /* 0x0B - F10 */ |
U_SPECIAL, /* 0x0C - F4 */ |
'\t', /* 0x0D - Tab */ |
'`', |
U_SPECIAL, /* 0x0F */ |
U_SPECIAL, /* 0x10 */ |
U_SPECIAL, /* 0x11 - LAlt */ |
U_SPECIAL, /* 0x12 - LShift */ |
U_SPECIAL, /* ox13 */ |
U_SPECIAL, /* 0x14 Ctrl */ |
'q', '1', |
U_SPECIAL, /* 0x17 */ |
U_SPECIAL, /* 0x18 */ |
U_SPECIAL, /* 0x19 */ |
'z', 's', 'a', 'w', '2', |
U_SPECIAL, /* 0x1F */ |
U_SPECIAL, /* 0x20 */ |
'c', 'x', 'd', 'e', '4', '3', |
U_SPECIAL, /* 0x27 */ |
U_SPECIAL, /* 0x28 */ |
' ', 'v', 'f', 't', 'r', '5', |
U_SPECIAL, /* 0x2F */ |
U_SPECIAL, /* 0x30 */ |
'n', 'b', 'h', 'g', 'y', '6', |
U_SPECIAL, /* 0x37 */ |
U_SPECIAL, /* 0x38 */ |
U_SPECIAL, /* 0x39 */ |
'm', 'j', 'u', '7', '8', |
U_SPECIAL, /* 0x3F */ |
U_SPECIAL, /* 0x40 */ |
',', 'k', 'i', 'o', '0', '9', |
U_SPECIAL, /* 0x47 */ |
U_SPECIAL, /* 0x48 */ |
'.', '/', 'l', ';', 'p', '-', |
U_SPECIAL, /* 0x4F */ |
U_SPECIAL, /* 0x50 */ |
U_SPECIAL, /* 0x51 */ |
'\'', |
U_SPECIAL, /* 0x53 */ |
'[', '=', |
U_SPECIAL, /* 0x56 */ |
U_SPECIAL, /* 0x57 */ |
U_SPECIAL, /* 0x58 - Caps Lock */ |
U_SPECIAL, /* 0x59 - RShift */ |
'\n', ']', |
U_SPECIAL, /* 0x5C */ |
'\\', |
U_SPECIAL, /* 0x5E */ |
U_SPECIAL, /* 0x5F */ |
U_SPECIAL, /* 0x60 */ |
U_SPECIAL, /* 0x61 */ |
U_SPECIAL, /* 0x62 */ |
U_SPECIAL, /* 0x63 */ |
U_SPECIAL, /* 0x64 */ |
U_SPECIAL, /* 0x65 */ |
'\b', /* 0x66 - backspace*/ |
U_SPECIAL, /* 0x67 */ |
U_SPECIAL, /* 0x68 */ |
U_END_ARROW, /* 0x69 */ |
U_SPECIAL, /* 0x6a */ |
U_LEFT_ARROW, /* 0x6b - Left Arrow */ |
U_SPECIAL, /* 0x6c */ |
U_SPECIAL, /* 0x6d */ |
U_SPECIAL, /* 0x6e */ |
U_SPECIAL, /* 0x6f */ |
U_SPECIAL, /* 0x70 */ |
U_DELETE, /* 0x71 - Del*/ |
U_DOWN_ARROW, /* 0x72 Down Arrow */ |
U_SPECIAL, /* 0x73 */ |
U_RIGHT_ARROW, /* 0x74 - Right Arrow */ |
U_UP_ARROW, /* 0x75 Up Arrow */ |
U_ESCAPE, /* 0x76 Esc */ |
U_SPECIAL, /* 0x77 - NumLock*/ |
U_SPECIAL, /* 0x78 F11*/ |
U_SPECIAL, /* 0x79 */ |
U_PAGE_DOWN, /* 0x7a */ |
U_SPECIAL, /* 0x7b */ |
U_SPECIAL, /* 0x7c */ |
U_PAGE_UP, /* 0x7d */ |
U_SPECIAL, /* 0x7e */ |
U_SPECIAL /* 0x7f */ |
}; |
/** Secondary meaning of scancodes. */ |
wchar_t sc_secondary_map[] = { |
U_NULL, /* 0x00 */ |
U_SPECIAL, /* 0x01 - F9 */ |
U_SPECIAL, /* 0x02 - F7 */ |
U_SPECIAL, /* 0x03 - F5 */ |
U_SPECIAL, /* 0x04 - F3 */ |
U_SPECIAL, /* 0x05 - F1 */ |
U_SPECIAL, /* 0x06 - F2 */ |
U_SPECIAL, /* 0x07 - F12 */ |
U_SPECIAL, /* 0x08 - */ |
U_SPECIAL, /* 0x09 - F10 */ |
U_SPECIAL, /* 0x0A - F8 */ |
U_SPECIAL, /* 0x0B - F10 */ |
U_SPECIAL, /* 0x0C - F4 */ |
'\t', /* 0x0D - Tab */ |
'~', |
U_SPECIAL, /* 0x0F */ |
U_SPECIAL, /* 0x10 */ |
U_SPECIAL, /* 0x11 - LAlt */ |
U_SPECIAL, /* 0x12 - LShift */ |
U_SPECIAL, /* ox13 */ |
U_SPECIAL, /* 0x14 Ctrl */ |
'Q', '!', |
U_SPECIAL, /* 0x17 */ |
U_SPECIAL, /* 0x18 */ |
U_SPECIAL, /* 0x19 */ |
'Z', 'S', 'A', 'W', '@', |
U_SPECIAL, /* 0x1F */ |
U_SPECIAL, /* 0x20 */ |
'C', 'X', 'D', 'E', '$', '#', |
U_SPECIAL, /* 0x27 */ |
U_SPECIAL, /* 0x28 */ |
' ', 'V', 'F', 'T', 'R', '%', |
U_SPECIAL, /* 0x2F */ |
U_SPECIAL, /* 0x30 */ |
'N', 'B', 'H', 'G', 'Y', '^', |
U_SPECIAL, /* 0x37 */ |
U_SPECIAL, /* 0x38 */ |
U_SPECIAL, /* 0x39 */ |
'M', 'J', 'U', '&', '*', |
U_SPECIAL, /* 0x3F */ |
U_SPECIAL, /* 0x40 */ |
'<', 'K', 'I', 'O', ')', '(', |
U_SPECIAL, /* 0x47 */ |
U_SPECIAL, /* 0x48 */ |
'>', '?', 'L', ':', 'P', '_', |
U_SPECIAL, /* 0x4F */ |
U_SPECIAL, /* 0x50 */ |
U_SPECIAL, /* 0x51 */ |
'"', |
U_SPECIAL, /* 0x53 */ |
'{', '+', |
U_SPECIAL, /* 0x56 */ |
U_SPECIAL, /* 0x57 */ |
U_SPECIAL, /* 0x58 - Caps Lock */ |
U_SPECIAL, /* 0x59 - RShift */ |
'\n', '}', |
U_SPECIAL, /* 0x5C */ |
'|', |
U_SPECIAL, /* 0x5E */ |
U_SPECIAL, /* 0x5F */ |
U_SPECIAL, /* 0x60 */ |
U_SPECIAL, /* 0x61 */ |
U_SPECIAL, /* 0x62 */ |
U_SPECIAL, /* 0x63 */ |
U_SPECIAL, /* 0x64 */ |
U_SPECIAL, /* 0x65 */ |
'\b', /* 0x66 - backspace*/ |
U_SPECIAL, /* 0x67 */ |
U_SPECIAL, /* 0x68 */ |
U_END_ARROW, /* 0x69 */ |
U_SPECIAL, /* 0x6a */ |
U_LEFT_ARROW, /* 0x6b - Left Arrow */ |
U_SPECIAL, /* 0x6c */ |
U_SPECIAL, /* 0x6d */ |
U_SPECIAL, /* 0x6e */ |
U_SPECIAL, /* 0x6f */ |
U_SPECIAL, /* 0x70 */ |
U_DELETE, /* 0x71 - Del*/ |
U_DOWN_ARROW, /* 0x72 Down Arrow */ |
U_SPECIAL, /* 0x73 */ |
U_RIGHT_ARROW, /* 0x74 - Right Arrow */ |
U_UP_ARROW, /* 0x75 Up Arrow */ |
U_ESCAPE, /* 0x76 Esc */ |
U_SPECIAL, /* 0x77 - NumLock*/ |
U_SPECIAL, /* 0x78 F11*/ |
U_SPECIAL, /* 0x79 */ |
U_PAGE_DOWN, /* 0x7a */ |
U_SPECIAL, /* 0x7b */ |
U_SPECIAL, /* 0x7c */ |
U_PAGE_UP, /* 0x7d */ |
U_SPECIAL, /* 0x7e */ |
U_SPECIAL /* 0x7f */ |
}; |
/** @} |
*/ |