and I completely agree; this was pure masochism : o ), way too hackish to be generally useful.
I don't know much about wiring to give any decent instructions, but an arduino board connected to either the clock or the data wires should give a clue about if it's working. For instance, with this code:
Just hooking up the analog 3rd pin to it, you can get graphs like this, using the serial plotter:
In this case the x-axis was around 1000 (1000 what...?) with spikes when I pressed anything, that were the clock and the data signals senting information to the computer. This site was very helpful:
.
Now, having connected the keyboard, one needs to check if it is being recognized by the kernel. On linux every input device is a file named `eventXX` in `/dev/input/`. You can check which is which with the `evtest` command:
This is my PS/2 keyboard. Note the "code" part, saying that code 16 is being translated to KEY_Q, and code 30 to KEY_A; these codes are being shown in hexadecimal. "Value" 0 signals a key was released, value 1 that it was pressed, and value 2 that it's being holded down.
My terminal keyboard doesn't generate any hold signals, and only the value 1 ones for most keys, and the same event value both for when I press a key and when I release it; I'm not sure this is how it should be. This will be a problem below : o ).
Now, to translate the scancodes into keypresses, as I said, I've used the evdev Python library. It's straightforward: you declare the input you will listen to, then open a virtual device to output what you want, and then start reading the input in a loop:
The only thing to do is to tell the script what to do and when. For instance:
The "this_event" is a list with three items: the event type, the code, and the value, as I declared in the end of the last snippet. If the event the script receives is this one, the script outputs the ESC key being pressed (with value 1) and then released. Finaly it sends everything in one go by synchronizing the events with the virtual input. This way of dealing with a single scancode for the key might cause problems in any key one needs to *hold* for it to work... this would force me to write some trick to infer when the key is still being pressed, perhaps based on the timing of the event.
A trick I already had to do was with the ALT keys. They generate just one scancode, but for key combinations like alt+a to work, alt needs to still be in the pressed state when the A key gets pressed to. This is what I came out with:
Python breaks the code, throws an exception, when you refer to any variable that doesn't exist. So I wrote this: if the event has the LEFTALT scancode, it tries to check if it has been pressed... in which case leftalt is set to 1. If this is set, it means there was already another event to press it down (value 1), and so it outputs the release event (value 0). If this variable is set, but not to 1, then it's been pressed down, and we send that signal (value 1). Finally, if this variable isn't set already... that is the exception that could break the code, and it means we didn't press it down yet, so we send the press down signal too (value 1). I've attached the code I'm running now... PM me if you wish
. Comments on it are welcome... I wrote it in just an hour, it's bound to be ugly.
I hope this might be useful. Today was a very long day, and English isn't my first language...
Code: Select all
#! /usr/bin/python3
import evdev
modelm = evdev.InputDevice('/dev/input/event0')
modelm.grab()
output = evdev.UInput()
for event in modelm.read_loop():
#print(dir(event))
this_event = [event.type, event.code, event.value]
#print(this_event)
# 1 down
# 2 - hold
# 0 - up
######################################################################
######################################################################
# hack to make alt+anything work
# try:
# if leftalt == 1:
# output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_LEFTALT, 2)
# except:
# pass
#
# try:
# if rightalt == 1:
# output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_RIGHTALT, 2)
# except:
# pass
######################################################################
#
# first row
#
######################################################################
if this_event == [4, 4, int("0x08", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_ESC, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_ESC, 0)
output.syn()
if this_event == [4, 4, int("0x07", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F1, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F1, 0)
output.syn()
if this_event == [4, 4, int("0x0f", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F2, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F2, 0)
output.syn()
if this_event == [4, 4, int("0x17", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F3, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F3, 0)
output.syn()
if this_event == [4, 4, int("0x1f", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F4, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F4, 0)
output.syn()
if this_event == [4, 4, int("0x27", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F5, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F5, 0)
output.syn()
if this_event == [4, 4, int("0x2f", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F6, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F6, 0)
output.syn()
if this_event == [4, 4, int("0x37", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F7, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F7, 0)
output.syn()
if this_event == [4, 4, int("0x3f", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F8, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F8, 0)
output.syn()
if this_event == [4, 4, int("0x47", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F9, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F9, 0)
output.syn()
if this_event == [4, 4, int("0x4f", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F10, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F10, 0)
output.syn()
if this_event == [4, 4, int("0x56", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F11, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F11, 0)
output.syn()
if this_event == [4, 4, int("0x5e", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F12, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F12, 0)
output.syn()
if this_event == [4, 4, int("0x57", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_SYSRQ, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_SYSRQ, 0)
output.syn()
if this_event == [4, 4, int("0x5f", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_SCROLLLOCK, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_SCROLLLOCK, 0)
output.syn()
if this_event == [4, 4, int("0x62", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_PAUSE, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_PAUSE, 0)
output.syn()
######################################################################
#
# second row
#
######################################################################
if this_event == [4, 4, int("0x0e", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_GRAVE, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_GRAVE, 0)
output.syn()
if this_event == [4, 4, int("0x16", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_1, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_1, 0)
output.syn()
if this_event == [4, 4, int("0x1e", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_2, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_2, 0)
output.syn()
if this_event == [4, 4, int("0x26", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_3, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_3, 0)
output.syn()
if this_event == [4, 4, int("0x25", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_4, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_4, 0)
output.syn()
if this_event == [4, 4, int("0x2e", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_5, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_5, 0)
output.syn()
if this_event == [4, 4, int("0x36", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_6, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_6, 0)
output.syn()
if this_event == [4, 4, int("0x3d", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_7, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_7, 0)
output.syn()
if this_event == [4, 4, int("0x3e", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_8, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_8, 0)
output.syn()
if this_event == [4, 4, int("0x46", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_9, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_9, 0)
output.syn()
if this_event == [4, 4, int("0x45", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_0, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_0, 0)
output.syn()
if this_event == [4, 4, int("0x4e", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_MINUS, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_MINUS, 0)
output.syn()
if this_event == [4, 4, int("0x55", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_EQUAL, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_EQUAL, 0)
output.syn()
if this_event == [4, 4, int("0x66", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_BACKSPACE, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_BACKSPACE, 0)
output.syn()
if this_event == [4, 4, int("0x67", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_INSERT, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_INSERT, 0)
output.syn()
if this_event == [4, 4, int("0x6e", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_HOME, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_HOME, 0)
output.syn()
if this_event == [4, 4, int("0x6f", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_PAGEUP, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_PAGEUP, 0)
output.syn()
if this_event == [4, 4, int("0x76", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_NUMLOCK, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_NUMLOCK, 0)
output.syn()
if this_event == [4, 4, int("0x77", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KPSLASH, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KPSLASH, 0)
output.syn()
if this_event == [4, 4, int("0x7e", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KPASTERISK, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KPASTERISK, 0)
output.syn()
if this_event == [4, 4, int("0x104", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KPMINUS, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KPMINUS, 0)
output.syn()
######################################################################
#
# third row
#
######################################################################
if this_event == [4, 4, int("0x0d", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_TAB, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_TAB, 0)
output.syn()
if this_event == [4, 4, int("0x15", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_Q, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_Q, 0)
output.syn()
if this_event == [4, 4, int("0x1d", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_W, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_W, 0)
output.syn()
if this_event == [4, 4, int("0x24", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_E, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_E, 0)
output.syn()
if this_event == [4, 4, int("0x2d", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_R, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_R, 0)
output.syn()
if this_event == [4, 4, int("0x2c", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_T, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_T, 0)
output.syn()
if this_event == [4, 4, int("0x35", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_Y, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_Y, 0)
output.syn()
if this_event == [4, 4, int("0x3c", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_U, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_U, 0)
output.syn()
if this_event == [4, 4, int("0x43", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_I, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_I, 0)
output.syn()
if this_event == [4, 4, int("0x44", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_O, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_O, 0)
output.syn()
if this_event == [4, 4, int("0x4d", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_P, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_P, 0)
output.syn()
if this_event == [4, 4, int("0x54", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_LEFTBRACE, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_LEFTBRACE, 0)
output.syn()
if this_event == [4, 4, int("0x5b", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_RIGHTBRACE, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_RIGHTBRACE, 0)
output.syn()
if this_event == [4, 4, int("0x5c", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_BACKSLASH, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_BACKSLASH, 0)
output.syn()
if this_event == [4, 4, int("0x64", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_DELETE, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_DELETE, 0)
output.syn()
if this_event == [4, 4, int("0x65", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_END, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_END, 0)
output.syn()
if this_event == [4, 4, int("0x6d", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_PAGEDOWN, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_PAGEDOWN, 0)
output.syn()
if this_event == [4, 4, int("0x6c", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KP7, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KP7, 0)
output.syn()
if this_event == [4, 4, int("0x75", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KP8, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KP8, 0)
output.syn()
if this_event == [4, 4, int("0x7d", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KP9, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KP9, 0)
output.syn()
if this_event == [4, 4, int("0x7c", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KPPLUS, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KPPLUS, 0)
output.syn()
######################################################################
#
# fourth row
#
######################################################################
# if this_event == [4, 4, int("0x14", 0)]:
# output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_CAPSLOCK, 1)
# output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_CAPSLOCK, 0)
# output.syn()
if event.type == 1 and event.code == 29:
if event.value == 1:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_LEFTMETA, 1)
else:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_LEFTMETA, 0)
output.syn()
if this_event == [4, 4, int("0x1c", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_A, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_A, 0)
output.syn()
if this_event == [4, 4, int("0x1b", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_S, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_S, 0)
output.syn()
if this_event == [4, 4, int("0x23", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_D, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_D, 0)
output.syn()
if this_event == [4, 4, int("0x2b", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_F, 0)
output.syn()
if this_event == [4, 4, int("0x34", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_G, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_G, 0)
output.syn()
if this_event == [4, 4, int("0x33", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_H, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_H, 0)
output.syn()
if this_event == [4, 4, int("0x3b", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_J, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_J, 0)
output.syn()
if this_event == [4, 4, int("0x42", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_K, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_K, 0)
output.syn()
if this_event == [4, 4, int("0x4b", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_L, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_L, 0)
output.syn()
if this_event == [4, 4, int("0x4c", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_SEMICOLON, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_SEMICOLON, 0)
output.syn()
if this_event == [4, 4, int("0x52", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_APOSTROPHE, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_APOSTROPHE, 0)
output.syn()
if this_event == [4, 4, int("0x5a", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_ENTER, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_ENTER, 0)
output.syn()
if this_event == [4, 4, int("0x6b", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KP4, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KP4, 0)
output.syn()
if this_event == [4, 4, int("0x73", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KP5, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KP5, 0)
output.syn()
if this_event == [4, 4, int("0x77", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KP6, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KP6, 0)
output.syn()
if this_event == [4, 4, int("0x7b", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KPDOT, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KPDOT, 0)
output.syn()
######################################################################
#
# fifth row
#
######################################################################
#if this_event == [4, 4, int("0x12", 0)]:
if event.type == 1 and event.code == 42:
if event.value == 1:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_LEFTSHIFT, 1)
else:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_LEFTSHIFT, 0)
output.syn()
if this_event == [4, 4, int("0x1a", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_Z, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_Z, 0)
output.syn()
if this_event == [4, 4, int("0x22", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_X, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_X, 0)
output.syn()
if this_event == [4, 4, int("0x21", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_C, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_C, 0)
output.syn()
if this_event == [4, 4, int("0x2a", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_V, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_V, 0)
output.syn()
if this_event == [4, 4, int("0x32", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_B, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_B, 0)
output.syn()
if this_event == [4, 4, int("0x31", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_N, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_N, 0)
output.syn()
if this_event == [4, 4, int("0x3a", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_M, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_M, 0)
output.syn()
if this_event == [4, 4, int("0x41", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_COMMA, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_COMMA, 0)
output.syn()
if this_event == [4, 4, int("0x49", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_DOT, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_DOT, 0)
output.syn()
if this_event == [4, 4, int("0x4a", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_SLASH, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_SLASH, 0)
output.syn()
#if this_event == [4, 4, int("0x54", 0)]:
if event.type == 1 and event.code == 54:
if event.value == 1:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_RIGHTSHIFT, 1)
else:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_RIGHTSHIFT, 0)
output.syn()
if this_event == [4, 4, int("0x63", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_UP, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_UP, 0)
output.syn()
if this_event == [4, 4, int("0x69", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KP1, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KP1, 0)
output.syn()
if this_event == [4, 4, int("0x72", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KP2, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KP2, 0)
output.syn()
if this_event == [4, 4, int("0x7a", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KP3, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KP3, 0)
output.syn()
if this_event == [4, 4, int("0x79", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KPENTER, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KPENTER, 0)
output.syn()
######################################################################
#
# sixth row
#
######################################################################
#if this_event == [4, 4, int("0x11", 0)]:
if event.type == 1 and event.code == 56:
if event.value == 1:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_LEFTCTRL, 1)
else:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_LEFTCTRL, 0)
output.syn()
if this_event == [4, 4, int("0x19", 0)]:
try:
if leftalt == 1:
leftalt = 0
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_LEFTALT, 0)
else:
leftalt = 1
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_LEFTALT, 1)
except:
leftalt = 1
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_LEFTALT, 1)
output.syn()
if this_event == [4, 4, int("0x29", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_SPACE, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_SPACE, 0)
output.syn()
if this_event == [4, 4, int("0x39", 0)]:
try:
if rightalt == 1:
rightalt = 0
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_RIGHTALT, 0)
else:
rightalt = 1
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_RIGHTALT, 1)
except:
rightalt = 1
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_RIGHTALT, 1)
output.syn()
if this_event == [4, 4, int("0x58", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_RIGHTCTRL, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_RIGHTCTRL, 0)
output.syn()
#if this_event == [4, 4, int("0x58", 0)]:
if event.type == 1 and event.code == 58:
if event.value == 1:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_RIGHTCTRL, 1)
else:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_RIGHTCTRL, 0)
output.syn()
if this_event == [4, 4, int("0x61", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_LEFT, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_LEFT, 0)
output.syn()
if this_event == [4, 4, int("0x60", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_DOWN, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_DOWN, 0)
output.syn()
if this_event == [4, 4, int("0x6a", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_RIGHT, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_RIGHT, 0)
output.syn()
if this_event == [4, 4, int("0x70", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KP0, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KP0, 0)
output.syn()
if this_event == [4, 4, int("0x71", 0)]:
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KPDOT, 1)
output.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_KPDOT, 0)
output.syn()
modelm.ungrab()