From 2660d7bad97127e44f1f7606fb78c0150a0950bb Mon Sep 17 00:00:00 2001 From: qiurui Date: Wed, 10 Apr 2024 17:39:13 +0800 Subject: [PATCH] add test code --- test/client.py | 177 ++++++++++++++++++++++++++++++++ test/scan-code.csv | 248 +++++++++++++++++++++++++++++++++++++++++++++ test/test.py | 126 +++++++++++++++++++++++ test/test.txt | 0 4 files changed, 551 insertions(+) create mode 100644 test/client.py create mode 100644 test/scan-code.csv create mode 100644 test/test.py create mode 100644 test/test.txt diff --git a/test/client.py b/test/client.py new file mode 100644 index 0000000..78b2a83 --- /dev/null +++ b/test/client.py @@ -0,0 +1,177 @@ +import evdev,sys +import pandas as pd +from socket import * + +NULL_CHAR = chr(0) +serHost = '127.0.0.1' +serPort = 50009 + +data = pd.read_csv("./scan-code.csv") +list = data.values.tolist() + +def read_line(code): + code_hex = code.replace("0x","") + #print("code_hex=",code_hex) + for i in range(len(list)): + lkc = str(list[i][2]) + if lkc[-1] == "0": + if code_hex == lkc.replace("0x00",""): + return int(list[i][0].replace("0x07 0x00",""),16) + else: + if code_hex == lkc[lkc.rfind("0")+1:]: + return int(list[i][0].replace("0x07 0x00",""),16) + +def send_report(report): + sockobj.send(report.encode()) + +sockobj = socket(AF_INET, SOCK_STREAM) +sockobj.connect((serHost,serPort)) + +while True: + for i in range(4,34): + send_report(NULL_CHAR*2+chr(i)+NULL_CHAR*5) + data = sockobj.recv(1024) + print(data) + i = i+1 + if i == 255: + i = 4 + +device = evdev.InputDevice('/dev/input/event1') + +print(device) +tmp = 0 +tmp_code = 0 +hang = 0 +caps = 0 +for event in device.read_loop(): + if event.type == evdev.ecodes.EV_KEY : + k = evdev.events.KeyEvent(event) + + #print(k) #完整事件 + #print(event.code) ##键盘code --按键的hex code(如28---enter) + hid_code = read_line(hex(event.code)) + #print("hid_code=",hid_code)##完成scan code到hid code的转换 + #print("hid_code_type=",type(hid_code)) + #print(event.value) ##键盘状态 0,1,2 --0为release, 1为down , 2hold + + if event.value == 1: + #print(NULL_CHAR*2+chr(event.code)+NULL_CHAR*5) + if hid_code == 224 or hid_code == 225 or hid_code == 226 or hid_code == 227 or hid_code == 228 or hid_code == 229 or hid_code == 230 or hid_code == 231 or hid_code == 58: + tmp_code = hid_code + hang = 1 + match hid_code: + case 224: + tmp = 1 + case 225: + tmp = 2 + case 226: + tmp = 4 + case 227: + tmp = 8 + case 228: + tmp = 16 + case 229: + tmp = 32 + case 230: + tmp = 64 + case 231: + tmp = 128 + case 58: + if caps == 1: + caps = 0 + else: + caps = 1 + hang = 0 + tmp_code = 0 + else: + if tmp != 0: ##按住ctrl等然后按字母等 + hang = 2 ##可以认定为没有单次敲击shift + print("caps=",caps) + if caps == 1 and (tmp_code == 225 or tmp_code == 229): + send_report(NULL_CHAR*2+chr(hid_code)+NULL_CHAR*5) + else: + send_report(chr(tmp)+NULL_CHAR+chr(hid_code)+NULL_CHAR*5) + else: + if caps == 1 : + send_report(chr(32)+NULL_CHAR+chr(hid_code)+NULL_CHAR*5) + else: + send_report(NULL_CHAR*2+chr(hid_code)+NULL_CHAR*5) + data = sockobj.recv(1024) + #print(data) + + if event.value == 2: + #print(NULL_CHAR*2+chr(event.code)+NULL_CHAR*5) + if hid_code == 224 or hid_code == 225 or hid_code == 226 or hid_code == 227 or hid_code == 228 or hid_code == 229 or hid_code == 230 or hid_code == 231 : + tmp_code = hid_code + match hid_code: + case 224: + tmp = 1 + case 225: + tmp = 2 + case 226: + tmp = 4 + case 227: + tmp = 8 + case 228: + tmp = 16 + case 229: + tmp = 32 + case 230: + tmp = 64 + case 231: + tmp = 128 + else: + if tmp != 0: + hang = 2 + if caps == 1 and (tmp_code == 225 or tmp_code == 229): + send_report(NULL_CHAR*2+chr(hid_code)+NULL_CHAR*5) + else: + send_report(chr(tmp)+NULL_CHAR+chr(hid_code)+NULL_CHAR*5) + else: + if caps == 1 : + send_report(chr(32)+NULL_CHAR+chr(hid_code)+NULL_CHAR*5) + data = sockobj.recv(1024) + #print(data) + else: + send_report(NULL_CHAR*2+chr(hid_code)+NULL_CHAR*5) + data = sockobj.recv(1024) + #print(data) + + if event.value == 0: + if hid_code == tmp_code and hang == 1: + send_report(chr(tmp)+NULL_CHAR*7) + send_report(NULL_CHAR*8) + tmp = 0 + tmp_code = 0 + hang = 0 + elif hid_code == tmp_code: + send_report(NULL_CHAR*8) + tmp = 0 + tmp_code = 0 + hang = 0 + else: + send_report(NULL_CHAR*8) + data = sockobj.recv(1024) + #print(data) +''' +This article provided the answer. + +Input reports (sent from keyboard to computer) have the following structure for a total of 8 bytes: + +1 byte: modifier keys (Control, Shift, Alt, etc.), where each bit corresponds to a key +1 byte: unused/reserved for OEM +6 bytes: pressed key codes +Further into the article, there is a list of the modifiers, each represented by a bit: + +Left Control: 224 (0x00e0)-------0x01 +Left Shift: 225 (0x00e1)-------0x02 +Left Alt: 226 (0x00e2)-------0x04 +Left Meta (Windows key): 227 (0x00e3)-------0x08 +Right Control: 228 (0x00e4)-------0x10 +Right Shift: 229 (0x00e5)-------0x20 +Right Alt: 230 (0x00e6)-------0x40 +Right Meta (Windows key): 231 (0x00e7)-------0x80 + +For firing my screenshot app, I need CMD-SHIFT-5, so I need to set the 2nd and 4th bits on. +0b01010000 +''' diff --git a/test/scan-code.csv b/test/scan-code.csv new file mode 100644 index 0000000..4e034ca --- /dev/null +++ b/test/scan-code.csv @@ -0,0 +1,248 @@ +HID Usage,HID Usage Name,LKC,Linux Key Code Name,Version,AKC,Android Key Code Name,Notes +0x07 0x0001,Keyboard Error Roll Over,,,,,, +0x07 0x0002,Keyboard POST Fail,,,,,, +0x07 0x0003,Keyboard Error Undefined,,,,,, +0x07 0x0004,Keyboard a and A,0x001e,KEY_A,1.6,0x001d,KEYCODE_A,1 +0x07 0x0005,Keyboard b and B,0x0030,KEY_B,1.6,0x001e,KEYCODE_B,1 +0x07 0x0006,Keyboard c and C,0x002e,KEY_C,1.6,0x001f,KEYCODE_C,1 +0x07 0x0007,Keyboard d and D,0x0020,KEY_D,1.6,0x0020,KEYCODE_D,1 +0x07 0x0008,Keyboard e and E,0x0012,KEY_E,1.6,0x0021,KEYCODE_E,1 +0x07 0x0009,Keyboard f and F,0x0021,KEY_F,1.6,0x0022,KEYCODE_F,1 +0x07 0x000a,Keyboard g and G,0x0022,KEY_G,1.6,0x0023,KEYCODE_G,1 +0x07 0x000b,Keyboard h and H,0x0023,KEY_H,1.6,0x0024,KEYCODE_H,1 +0x07 0x000c,Keyboard i and I,0x0017,KEY_I,1.6,0x0025,KEYCODE_I,1 +0x07 0x000d,Keyboard j and J,0x0024,KEY_J,1.6,0x0026,KEYCODE_J,1 +0x07 0x000e,Keyboard k and K,0x0025,KEY_K,1.6,0x0027,KEYCODE_K,1 +0x07 0x000f,Keyboard l and L,0x0026,KEY_L,1.6,0x0028,KEYCODE_L,1 +0x07 0x0010,Keyboard m and M,0x0032,KEY_M,1.6,0x0029,KEYCODE_M,1 +0x07 0x0011,Keyboard n and N,0x0031,KEY_N,1.6,0x002a,KEYCODE_N,1 +0x07 0x0012,Keyboard o and O,0x0018,KEY_O,1.6,0x002b,KEYCODE_O,1 +0x07 0x0013,Keyboard p and P,0x0019,KEY_P,1.6,0x002c,KEYCODE_P,1 +0x07 0x0014,Keyboard q and Q,0x0010,KEY_Q,1.6,0x002d,KEYCODE_Q,1 +0x07 0x0015,Keyboard r and R,0x0013,KEY_R,1.6,0x002e,KEYCODE_R,1 +0x07 0x0016,Keyboard s and S,0x001f,KEY_S,1.6,0x002f,KEYCODE_S,1 +0x07 0x0017,Keyboard t and T,0x0014,KEY_T,1.6,0x0030,KEYCODE_T,1 +0x07 0x0018,Keyboard u and U,0x0016,KEY_U,1.6,0x0031,KEYCODE_U,1 +0x07 0x0019,Keyboard v and V,0x002f,KEY_V,1.6,0x0032,KEYCODE_V,1 +0x07 0x001a,Keyboard w and W,0x0011,KEY_W,1.6,0x0033,KEYCODE_W,1 +0x07 0x001b,Keyboard x and X,0x002d,KEY_X,1.6,0x0034,KEYCODE_X,1 +0x07 0x001c,Keyboard y and Y,0x0015,KEY_Y,1.6,0x0035,KEYCODE_Y,1 +0x07 0x001d,Keyboard z and Z,0x002c,KEY_Z,1.6,0x0036,KEYCODE_Z,1 +0x07 0x001e,Keyboard 1 and !,0x0002,KEY_1,1.6,0x0008,KEYCODE_1,1 +0x07 0x001f,Keyboard 2 and @,0x0003,KEY_2,1.6,0x0009,KEYCODE_2,1 +0x07 0x0020,Keyboard 3 and #,0x0004,KEY_3,1.6,0x000a,KEYCODE_3,1 +0x07 0x0021,Keyboard 4 and $,0x0005,KEY_4,1.6,0x000b,KEYCODE_4,1 +0x07 0x0022,Keyboard 5 and %,0x0006,KEY_5,1.6,0x000c,KEYCODE_5,1 +0x07 0x0023,Keyboard 6 and ^,0x0007,KEY_6,1.6,0x000d,KEYCODE_6,1 +0x07 0x0024,Keyboard 7 and &,0x0008,KEY_7,1.6,0x000e,KEYCODE_7,1 +0x07 0x0025,Keyboard 8 and *,0x0009,KEY_8,1.6,0x000f,KEYCODE_8,1 +0x07 0x0026,Keyboard 9 and (,0x000a,KEY_9,1.6,0x0010,KEYCODE_9,1 +0x07 0x0027,Keyboard 0 and ),0x000b,KEY_0,1.6,0x0007,KEYCODE_0,1 +0x07 0x0028,Keyboard Return (ENTER),0x001c,KEY_ENTER,1.6,0x0042,KEYCODE_ENTER,1 +0x07 0x0029,Keyboard ESCAPE,0x0001,KEY_ESC,3,0x006f,KEYCODE_ESCAPE, +"""""","""""","""""","""""",2.3,0x0004,KEYCODE_BACK, +0x07 0x002a,Keyboard DELETE (Backspace),0x000e,KEY_BACKSPACE,1.6,0x0043,KEYCODE_DEL, +0x07 0x002b,Keyboard Tab,0x000f,KEY_TAB,1.6,0x003d,KEYCODE_TAB, +0x07 0x002c,Keyboard Spacebar,0x0039,KEY_SPACE,1.6,0x003e,KEYCODE_SPACE, +0x07 0x002d,Keyboard - and _,0x000c,KEY_MINUS,1.6,0x0045,KEYCODE_MINUS,1 +0x07 0x002e,Keyboard = and +,0x000d,KEY_EQUAL,1.6,0x0046,KEYCODE_EQUALS,1 +0x07 0x002f,Keyboard [ and {,0x001a,KEY_LEFTBRACE,1.6,0x0047,KEYCODE_LEFT_BRACKET,1 +0x07 0x0030,Keyboard ] and },0x001b,KEY_RIGHTBRACE,1.6,0x0048,KEYCODE_RIGHT_BRACKET,1 +0x07 0x0031,Keyboard \ and |,0x002b,KEY_BACKSLASH,1.6,0x0049,KEYCODE_BACKSLASH,1 +0x07 0x0032,Keyboard Non-US # and ~,0x002b,KEY_BACKSLASH,1.6,0x0049,KEYCODE_BACKSLASH,1 +0x07 0x0033,Keyboard ; and :,0x0027,KEY_SEMICOLON,1.6,0x004a,KEYCODE_SEMICOLON,1 +0x07 0x0034,Keyboard ' and ",0x0028,KEY_APOSTROPHE,1.6,0x004b,KEYCODE_APOSTROPHE,1 +0x07 0x0035,Keyboard ` and ~,0x0029,KEY_GRAVE,3,0x0044,KEYCODE_GRAVE,1 +0x07 0x0036,"Keyboard , and <",0x0033,KEY_COMMA,1.6,0x0037,KEYCODE_COMMA,1 +0x07 0x0037,Keyboard . and >,0x0034,KEY_DOT,1.6,0x0038,KEYCODE_PERIOD,1 +0x07 0x0038,Keyboard / and ?,0x0035,KEY_SLASH,1.6,0x004c,KEYCODE_SLASH,1 +0x07 0x0039,Keyboard Caps Lock,0x003a,KEY_CAPSLOCK,3,0x0073,KEYCODE_CAPS_LOCK, +0x07 0x003a,Keyboard F1,0x003b,KEY_F1,3,0x0083,KEYCODE_F1, +"""""","""""","""""","""""",1.6,0x0052,KEYCODE_MENU, +0x07 0x003b,Keyboard F2,0x003c,KEY_F2,3,0x0084,KEYCODE_F2, +"""""","""""","""""","""""",1.6,0x0002,KEYCODE_SOFT_RIGHT, +0x07 0x003c,Keyboard F3,0x003d,KEY_F3,3,0x0085,KEYCODE_F3, +"""""","""""","""""","""""",1.6,0x0005,KEYCODE_CALL, +0x07 0x003d,Keyboard F4,0x003e,KEY_F4,3,0x0086,KEYCODE_F4, +"""""","""""","""""","""""",1.6,0x0006,KEYCODE_ENDCALL, +0x07 0x003e,Keyboard F5,0x003f,KEY_F5,3,0x0087,KEYCODE_F5, +0x07 0x003f,Keyboard F6,0x0040,KEY_F6,3,0x0088,KEYCODE_F6, +0x07 0x0040,Keyboard F7,0x0041,KEY_F7,3,0x0089,KEYCODE_F7, +0x07 0x0041,Keyboard F8,0x0042,KEY_F8,3,0x008a,KEYCODE_F8, +0x07 0x0042,Keyboard F9,0x0043,KEY_F9,3,0x008b,KEYCODE_F9, +0x07 0x0043,Keyboard F10,0x0044,KEY_F10,3,0x008c,KEYCODE_F10, +"""""","""""","""""","""""",2.3,0x0052,KEYCODE_MENU, +0x07 0x0044,Keyboard F11,0x0057,KEY_F11,3,0x008d,KEYCODE_F11, +0x07 0x0045,Keyboard F12,0x0058,KEY_F12,3,0x008e,KEYCODE_F12, +0x07 0x0046,Keyboard Print Screen,0x0063,KEY_SYSRQ,3,0x0078,KEYCODE_SYSRQ, +0x07 0x0047,Keyboard Scroll Lock,0x0046,KEY_SCROLLLOCK,3,0x0074,KEYCODE_SCROLL_LOCK, +0x07 0x0048,Keyboard Pause,0x0077,KEY_PAUSE,3,0x0079,KEYCODE_BREAK, +0x07 0x0049,Keyboard Insert,0x006e,KEY_INSERT,3,0x007c,KEYCODE_INSERT, +0x07 0x004a,Keyboard Home,0x0066,KEY_HOME,3,0x007a,KEYCODE_MOVE_HOME, +"""""","""""","""""","""""",1.6,0x0003,KEYCODE_HOME, +0x07 0x004b,Keyboard Page Up,0x0068,KEY_PAGEUP,3,0x005c,KEYCODE_PAGE_UP, +0x07 0x004c,Keyboard Delete Forward,0x006f,KEY_DELETE,3,0x0070,KEYCODE_FORWARD_DEL, +0x07 0x004d,Keyboard End,0x006b,KEY_END,3,0x007b,KEYCODE_MOVE_END, +"""""","""""","""""","""""",1.6,0x0006,KEYCODE_ENDCALL, +0x07 0x004e,Keyboard Page Down,0x006d,KEY_PAGEDOWN,3,0x005d,KEYCODE_PAGE_DOWN, +0x07 0x004f,Keyboard Right Arrow,0x006a,KEY_RIGHT,1.6,0x0016,KEYCODE_DPAD_RIGHT, +0x07 0x0050,Keyboard Left Arrow,0x0069,KEY_LEFT,1.6,0x0015,KEYCODE_DPAD_LEFT, +0x07 0x0051,Keyboard Down Arrow,0x006c,KEY_DOWN,1.6,0x0014,KEYCODE_DPAD_DOWN, +0x07 0x0052,Keyboard Up Arrow,0x0067,KEY_UP,1.6,0x0013,KEYCODE_DPAD_UP, +0x07 0x0053,Keyboard Num Lock and Clear,0x0045,KEY_NUMLOCK,3,0x008f,KEYCODE_NUM_LOCK, +0x07 0x0054,Keypad /,0x0062,KEY_KPSLASH,3,0x009a,KEYCODE_NUMPAD_DIVIDE, +0x07 0x0055,Keypad *,0x0037,KEY_KPASTERISK,3,0x009b,KEYCODE_NUMPAD_MULTIPLY, +0x07 0x0056,Keypad -,0x004a,KEY_KPMINUS,3,0x009c,KEYCODE_NUMPAD_SUBTRACT, +0x07 0x0057,Keypad +,0x004e,KEY_KPPLUS,3,0x009d,KEYCODE_NUMPAD_ADD, +0x07 0x0058,Keypad ENTER,0x0060,KEY_KPENTER,3,0x00a0,KEYCODE_NUMPAD_ENTER, +0x07 0x0059,Keypad 1 and End,0x004f,KEY_KP1,3,0x0091,KEYCODE_NUMPAD_1, +0x07 0x005a,Keypad 2 and Down Arrow,0x0050,KEY_KP2,3,0x0092,KEYCODE_NUMPAD_2, +0x07 0x005b,Keypad 3 and PageDn,0x0051,KEY_KP3,3,0x0093,KEYCODE_NUMPAD_3, +0x07 0x005c,Keypad 4 and Left Arrow,0x004b,KEY_KP4,3,0x0094,KEYCODE_NUMPAD_4, +0x07 0x005d,Keypad 5,0x004c,KEY_KP5,3,0x0095,KEYCODE_NUMPAD_5, +0x07 0x005e,Keypad 6 and Right Arrow,0x004d,KEY_KP6,3,0x0096,KEYCODE_NUMPAD_6, +0x07 0x005f,Keypad 7 and Home,0x0047,KEY_KP7,3,0x0097,KEYCODE_NUMPAD_7, +0x07 0x0060,Keypad 8 and Up Arrow,0x0048,KEY_KP8,3,0x0098,KEYCODE_NUMPAD_8, +0x07 0x0061,Keypad 9 and Page Up,0x0049,KEY_KP9,3,0x0099,KEYCODE_NUMPAD_9, +0x07 0x0062,Keypad 0 and Insert,0x0052,KEY_KP0,3,0x0090,KEYCODE_NUMPAD_0, +0x07 0x0063,Keypad . and Delete,0x0053,KEY_KPDOT,3,0x009e,KEYCODE_NUMPAD_DOT, +0x07 0x0064,Keyboard Non-US \ and |,0x0056,KEY_102ND,4,0x0049,KEYCODE_BACKSLASH,1 +0x07 0x0065,Keyboard Application,0x007f,KEY_COMPOSE,3,0x0052,KEYCODE_MENU, +"""""","""""","""""","""""",1.6,0x0054,KEYCODE_SEARCH, +0x07 0x0066,Keyboard Power,0x0074,KEY_POWER,1.6,0x001a,KEYCODE_POWER, +0x07 0x0067,Keypad =,0x0075,KEY_KPEQUAL,3,0x00a1,KEYCODE_NUMPAD_EQUALS, +0x07 0x0068,Keyboard F13,0x00b7,KEY_F13,,,, +0x07 0x0069,Keyboard F14,0x00b8,KEY_F14,,,, +0x07 0x006a,Keyboard F15,0x00b9,KEY_F15,,,, +0x07 0x006b,Keyboard F16,0x00ba,KEY_F16,,,, +0x07 0x006c,Keyboard F17,0x00bb,KEY_F17,,,, +0x07 0x006d,Keyboard F18,0x00bc,KEY_F18,,,, +0x07 0x006e,Keyboard F19,0x00bd,KEY_F19,,,, +0x07 0x006f,Keyboard F20,0x00be,KEY_F20,,,, +0x07 0x0070,Keyboard F21,0x00bf,KEY_F21,,,, +0x07 0x0071,Keyboard F22,0x00c0,KEY_F22,,,, +0x07 0x0072,Keyboard F23,0x00c1,KEY_F23,,,, +0x07 0x0073,Keyboard F24,0x00c2,KEY_F24,,,, +0x07 0x0074,Keyboard Execute,0x0086,KEY_OPEN,,,, +0x07 0x0075,Keyboard Help,0x008a,KEY_HELP,,,, +0x07 0x0076,Keyboard Menu,0x0082,KEY_PROPS,,,, +0x07 0x0077,Keyboard Select,0x0084,KEY_FRONT,,,, +0x07 0x0078,Keyboard Stop,0x0080,KEY_STOP,3,0x0056,KEYCODE_MEDIA_STOP, +0x07 0x0079,Keyboard Again,0x0081,KEY_AGAIN,,,, +0x07 0x007a,Keyboard Undo,0x0083,KEY_UNDO,,,, +0x07 0x007b,Keyboard Cut,0x0089,KEY_CUT,,,, +0x07 0x007c,Keyboard Copy,0x0085,KEY_COPY,,,, +0x07 0x007d,Keyboard Paste,0x0087,KEY_PASTE,,,, +0x07 0x007e,Keyboard Find,0x0088,KEY_FIND,,,, +0x07 0x007f,Keyboard Mute,0x0071,KEY_MUTE,3,0x00a4,KEYCODE_VOLUME_MUTE, +0x07 0x0080,Keyboard Volume Up,0x0073,KEY_VOLUMEUP,1.6,0x0018,KEYCODE_VOLUME_UP, +0x07 0x0081,Keyboard Volume Down,0x0072,KEY_VOLUMEDOWN,1.6,0x0019,KEYCODE_VOLUME_DOWN, +0x07 0x0082,Keyboard Locking Caps Lock,,,,,, +0x07 0x0083,Keyboard Locking Num Lock,,,,,, +0x07 0x0084,Keyboard Locking Scroll Lock,,,,,, +0x07 0x0085,Keypad Comma,0x0079,KEY_KPCOMMA,3,0x009f,KEYCODE_NUMPAD_COMMA, +0x07 0x0086,Keypad Equal Sign,,,,,, +0x07 0x0087,Keyboard International1,0x0059,KEY_RO,,,, +0x07 0x0088,Keyboard International2,0x005d,KEY_KATAKANAHIRAGANA,,,, +0x07 0x0089,Keyboard International3,0x007c,KEY_YEN,,,, +0x07 0x008a,Keyboard International4,0x005c,KEY_HENKAN,,,, +0x07 0x008b,Keyboard International5,0x005e,KEY_MUHENKAN,,,, +0x07 0x008c,Keyboard International6,0x005f,KEY_KPJPCOMMA,,,, +0x07 0x008d,Keyboard International7,,,,,, +0x07 0x008e,Keyboard International8,,,,,, +0x07 0x008f,Keyboard International9,,,,,, +0x07 0x0090,Keyboard LANG1,0x007a,KEY_HANGEUL,,,, +0x07 0x0091,Keyboard LANG2,0x007b,KEY_HANJA,,,, +0x07 0x0092,Keyboard LANG3,0x005a,KEY_KATAKANA,,,, +0x07 0x0093,Keyboard LANG4,0x005b,KEY_HIRAGANA,,,, +0x07 0x0094,Keyboard LANG5,0x0055,KEY_ZENKAKUHANKAKU,,,, +0x07 0x0095,Keyboard LANG6,,,,,, +0x07 0x0096,Keyboard LANG7,,,,,, +0x07 0x0097,Keyboard LANG8,,,,,, +0x07 0x0098,Keyboard LANG9,,,,,, +0x07 0x0099,Keyboard Alternate Erase,,,,,, +0x07 0x009a,Keyboard SysReq/Attention,,,,,, +0x07 0x009b,Keyboard Cancel,,,,,, +0x07 0x009c,Keyboard Clear,,,,,, +0x07 0x009d,Keyboard Prior,,,,,, +0x07 0x009e,Keyboard Return,,,,,, +0x07 0x009f,Keyboard Separator,,,,,, +0x07 0x00a0,Keyboard Out,,,,,, +0x07 0x00a1,Keyboard Oper,,,,,, +0x07 0x00a2,Keyboard Clear/Again,,,,,, +0x07 0x00a3,Keyboard CrSel/Props,,,,,, +0x07 0x00a4,Keyboard ExSel,,,,,, +0x07 0x00b0,Keypad 00,,,,,, +0x07 0x00b1,Keypad 000,,,,,, +0x07 0x00b2,Thousands Separator,,,,,, +0x07 0x00b3,Decimal Separator,,,,,, +0x07 0x00b4,Currency Unit,,,,,, +0x07 0x00b5,Currency Sub-unit,,,,,, +0x07 0x00b6,Keypad (,0x00b3,KEY_KPLEFTPAREN,3,0x00a2,KEYCODE_NUMPAD_LEFT_PAREN, +0x07 0x00b7,Keypad ),0x00b4,KEY_KPRIGHTPAREN,3,0x00a3,KEYCODE_NUMPAD_RIGHT_PAREN, +0x07 0x00b8,Keypad {,,,,,, +0x07 0x00b9,Keypad },,,,,, +0x07 0x00ba,Keypad Tab,,,,,, +0x07 0x00bb,Keypad Backspace,,,,,, +0x07 0x00bc,Keypad A,,,,,, +0x07 0x00bd,Keypad B,,,,,, +0x07 0x00be,Keypad C,,,,,, +0x07 0x00bf,Keypad D,,,,,, +0x07 0x00c0,Keypad E,,,,,, +0x07 0x00c1,Keypad F,,,,,, +0x07 0x00c2,Keypad XOR,,,,,, +0x07 0x00c3,Keypad ^,,,,,, +0x07 0x00c4,Keypad %,,,,,, +0x07 0x00c5,Keypad <,,,,,, +0x07 0x00c6,Keypad >,,,,,, +0x07 0x00c7,Keypad &,,,,,, +0x07 0x00c8,Keypad &&,,,,,, +0x07 0x00c9,Keypad |,,,,,, +0x07 0x00ca,Keypad ||,,,,,, +0x07 0x00cb,Keypad :,,,,,, +0x07 0x00cc,Keypad #,,,,,, +0x07 0x00cd,Keypad Space,,,,,, +0x07 0x00ce,Keypad @,,,,,, +0x07 0x00cf,Keypad !,,,,,, +0x07 0x00d0,Keypad Memory Store,,,,,, +0x07 0x00d1,Keypad Memory Recall,,,,,, +0x07 0x00d2,Keypad Memory Clear,,,,,, +0x07 0x00d3,Keypad Memory Add,,,,,, +0x07 0x00d4,Keypad Memory Subtract,,,,,, +0x07 0x00d5,Keypad Memory Multiply,,,,,, +0x07 0x00d6,Keypad Memory Divide,,,,,, +0x07 0x00d7,Keypad +/-,,,,,, +0x07 0x00d8,Keypad Clear,,,,,, +0x07 0x00d9,Keypad Clear Entry,,,,,, +0x07 0x00da,Keypad Binary,,,,,, +0x07 0x00db,Keypad Octal,,,,,, +0x07 0x00dc,Keypad Decimal,,,,,, +0x07 0x00dd,Keypad Hexadecimal,,,,,, +0x07 0x00e0,Keyboard Left Control,0x001d,KEY_LEFTCTRL,3,0x0071,KEYCODE_CTRL_LEFT, +0x07 0x00e1,Keyboard Left Shift,0x002a,KEY_LEFTSHIFT,1.6,0x003b,KEYCODE_SHIFT_LEFT, +0x07 0x00e2,Keyboard Left Alt,0x0038,KEY_LEFTALT,1.6,0x0039,KEYCODE_ALT_LEFT, +0x07 0x00e3,Keyboard Left GUI,0x007d,KEY_LEFTMETA,3,0x0075,KEYCODE_META_LEFT, +0x07 0x00e4,Keyboard Right Control,0x0061,KEY_RIGHTCTRL,3,0x0072,KEYCODE_CTRL_RIGHT, +0x07 0x00e5,Keyboard Right Shift,0x0036,KEY_RIGHTSHIFT,1.6,0x003c,KEYCODE_SHIFT_RIGHT, +0x07 0x00e6,Keyboard Right Alt,0x0064,KEY_RIGHTALT,1.6,0x003a,KEYCODE_ALT_RIGHT, +0x07 0x00e7,Keyboard Right GUI,0x007e,KEY_RIGHTMETA,3,0x0076,KEYCODE_META_RIGHT, +0x07 0x00e8,,0x00a4,KEY_PLAYPAUSE,3,0x0055,KEYCODE_MEDIA_PLAY_PAUSE, +0x07 0x00e9,,0x00a6,KEY_STOPCD,3,0x0056,KEYCODE_MEDIA_STOP, +0x07 0x00ea,,0x00a5,KEY_PREVIOUSSONG,3,0x0058,KEYCODE_MEDIA_PREVIOUS, +0x07 0x00eb,,0x00a3,KEY_NEXTSONG,3,0x0057,KEYCODE_MEDIA_NEXT, +0x07 0x00ec,,0x00a1,KEY_EJECTCD,3,0x0081,KEYCODE_MEDIA_EJECT, +0x07 0x00ed,,0x0073,KEY_VOLUMEUP,1.6,0x0018,KEYCODE_VOLUME_UP, +0x07 0x00ee,,0x0072,KEY_VOLUMEDOWN,1.6,0x0019,KEYCODE_VOLUME_DOWN, +0x07 0x00ef,,0x0071,KEY_MUTE,3,0x00a4,KEYCODE_VOLUME_MUTE, +0x07 0x00f0,,0x0096,KEY_WWW,1.6,0x0040,KEYCODE_EXPLORER, +0x07 0x00f1,,0x009e,KEY_BACK,1.6,0x0004,KEYCODE_BACK, +0x07 0x00f2,,0x009f,KEY_FORWARD,3,0x007d,KEYCODE_FORWARD, +0x07 0x00f3,,0x0080,KEY_STOP,3,0x0056,KEYCODE_MEDIA_STOP, +0x07 0x00f4,,0x0088,KEY_FIND,,,, +0x07 0x00f5,,0x00b1,KEY_SCROLLUP,3,0x005c,KEYCODE_PAGE_UP, +0x07 0x00f6,,0x00b2,KEY_SCROLLDOWN,3,0x005d,KEYCODE_PAGE_DOWN, +0x07 0x00f7,,0x00b0,KEY_EDIT,,,, +0x07 0x00f8,,0x008e,KEY_SLEEP,,,, +0x07 0x00f9,,0x0098,KEY_COFFEE,4,0x001a,KEYCODE_POWER, +0x07 0x00fa,,0x00ad,KEY_REFRESH,,,, +0x07 0x00fb,,0x008c,KEY_CALC,4.0.3,0x00d2,KEYCODE_CALCULATOR, diff --git a/test/test.py b/test/test.py new file mode 100644 index 0000000..18bfa06 --- /dev/null +++ b/test/test.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python3 + +import logging +import os +from socket import * +import fcntl +import time +from multiprocessing import Process + +fifo = '/tmp/process_fifo.txt' +# Setup simple logging +logging.basicConfig(level=logging.INFO) + +# Process1 logic +def process1(): + process1_logger = logging.getLogger('process1') + process1_logger.info(f"Pid:{os.getpid()}") + + + #''代表服务器为 localhost + myHost = '' + #在一个非保留端口号上进行监听 + myPort = 50009 + #设置一个TCP socket对象 + sockobj = socket(AF_INET, SOCK_STREAM) + #绑定端口号 + sockobj.bind((myHost, myPort)) + #监听,允许5个连结 + sockobj.listen(5) + #直到进程结束时才结束循环 + while True: + try: + #等待客户端连接 + connection, address = sockobj.accept() + #连接是一个新的socket + print ('Server connected by', address) + while True: + #读取客户端套接字的下一行 + data = connection.recv(1024) + #如果没有数量的话,那么跳出循环 + if not data: break + + if data == "hid open": + os.popen('ls /sys/class/udc | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC') + print("hid open") + elif data == "hid close": + os.popen('echo > /sys/kernel/config/usb_gadget/g1/UDC') + print("hid close") + else: + print(data) + file = os.open(fifo, os.O_WRONLY) + #data = 'hello' + os.write(file,data) + process1_logger.info(f"Writing: {data}") + os.close(file) + #发送一个回复至客户端 + connection.send(b'server => ' + data) + #当socket关闭时eof + connection.close() + except: + # Log completion + process1_logger.info("Finished process 1") + +# Process2 logic +def process2(): + process2_logger = logging.getLogger('process2') + process2_logger.info(f"Pid:{os.getpid()}") + + # Keep attempting to open the fifo, ignore race condition failures + while True: + try: + file = os.open(fifo, os.O_RDONLY | os.O_NONBLOCK) + fcntl.fcntl(file, fcntl.F_SETFL , os.O_NONBLOCK) + break + except: + pass + + while True: + try: + report = os.read(file,1024) + if report != b'': + fd = open('/home/qiurui/Documents/project/keyboard-hook/usr/bin/test.txt','rb+') + process2_logger.info(f"Writing {report}") + fd.write(report) + fd.flush() + fd.close() + except: + pass + os.close(file) + # Log completion + process2_logger.info("Finished process 2") + + +# Main +def main(): + if not os.path.exists(fifo): + # Create a fifo, os.mkfifo will block until there is a reader (process2) + os.mkfifo(fifo) + + # Setup parent logger and log pid + parent_logger = logging.getLogger('parent') + parent_logger.info(f"Pid:{os.getpid()}") + + # Setup processes + procs = [Process(target=process1), Process(target=process2)] + + # Start processes + for proc in procs: + proc.start() + + # Run to completion + #for proc in procs: + # proc.join() + + timeout = 100 + time.sleep(100) + + # Run to completion + for proc in procs: + proc.kill() + + os.unlink(fifo) + +# Execute main +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/test/test.txt b/test/test.txt new file mode 100644 index 0000000..e69de29