training-labs/labs/stacktrain/virtualbox/keycodes.py

135 lines
3.1 KiB
Python

#!/usr/bin/env python
# The functions in this library are used to get scancode strings for VirtualBox
# keyboard input (keyboardputscancode).
#
# It was generated mostly from output of Cameron Kerr's scancodes.l:
# http://humbledown.org/keyboard-scancodes.xhtml
# Force Python 2 to use float division even for ints
from __future__ import division
from __future__ import print_function
import stacktrain.virtualbox.vm_create as vm
def char2scancode(key):
keycodes = {
'a': "1e 9e",
'b': "30 b0",
'c': "2e ae",
'd': "20 a0",
'e': "12 92",
'f': "21 a1",
'g': "22 a2",
'h': "23 a3",
'i': "17 97",
'j': "24 a4",
'k': "25 a5",
'l': "26 a6",
'm': "32 b2",
'n': "31 b1",
'o': "18 98",
'p': "19 99",
'q': "10 90",
'r': "13 93",
's': "1f 9f",
't': "14 94",
'u': "16 96",
'v': "2f af",
'w': "11 91",
'x': "2d ad",
'y': "15 95",
'z': "2c ac",
'A': "2a 1e 9e aa",
'B': "2a 30 b0 aa",
'C': "2a 2e ae aa",
'D': "2a 20 a0 aa",
'E': "2a 12 92 aa",
'F': "2a 21 a1 aa",
'G': "2a 22 a2 aa",
'H': "2a 23 a3 aa",
'I': "2a 17 97 aa",
'J': "2a 24 a4 aa",
'K': "2a 25 a5 aa",
'L': "2a 26 a6 aa",
'M': "2a 32 b2 aa",
'N': "2a 31 b1 aa",
'O': "2a 18 98 aa",
'P': "2a 19 99 aa",
'Q': "2a 10 90 aa",
'R': "2a 13 93 aa",
'S': "2a 1f 9f aa",
'T': "2a 14 94 aa",
'U': "2a 16 96 aa",
'V': "2a 2f af aa",
'W': "2a 11 91 aa",
'X': "2a 2d ad aa",
'Y': "2a 15 95 aa",
'Z': "2a 2c ac aa",
'1': "02 82",
'2': "03 83",
'3': "04 84",
'4': "05 85",
'5': "06 86",
'6': "07 87",
'7': "08 88",
'8': "09 89",
'9': "0a 8a",
'0': "0b 8b",
'!': "2a 02 82 aa",
'@': "2a 03 83 aa",
'#': "2a 04 84 aa",
'$': "2a 05 85 aa",
'%': "2a 06 86 aa",
'^': "2a 07 87 aa",
'&': "2a 08 88 aa",
'*': "2a 09 89 aa",
'(': "2a 0a 8a aa",
')': "2a 0b 8b aa",
'-': "0c 8c",
'_': "2a 0c 8c aa",
'=': "0d 8d",
'+': "2a 0d 8d aa",
' ': "39 b9",
'[': "1a 9a",
']': "1b 9b",
'{': "2a 1a 9a aa",
'}': "2a 1b 9b aa",
';': "27 a7",
':': "2a 27 a7 aa",
',': "33 b3",
'.': "34 b4",
'/': "35 b5",
'\\': "2b ab",
'|': "2a 2b ab aa",
'?': "2a 35 b5 aa",
'"': "2a 28 a8 aa",
"'": "28 a8",
">": "2a 34 b4 aa",
"<": "2a 33 b3 aa"
}
return keycodes[key]
def esc2scancode():
return "01 81"
def enter2scancode():
return "1c 9c"
def backspace2scancode():
return "0e 8e"
def f6_2scancode():
return "40 c0"
def keyboard_push_scancode(vm_name, code_string):
code = code_string.split(' ')
vm.vbm("controlvm", vm_name, "keyboardputscancode", *code)