Files
USB4VC/user_program/usb4vc_shared.py

355 lines
10 KiB
Python

import os
this_app_dir_path = "/home/pi/usb4vc/rpi_app"
config_dir_path = "/home/pi/usb4vc/config"
firmware_dir_path = "/home/pi/usb4vc/firmware"
temp_dir_path = "/home/pi/usb4vc/temp"
def ensure_dir(dir_path):
print('ensure_dir', dir_path)
if not os.path.exists(dir_path):
os.makedirs(dir_path)
RPI_APP_VERSION_TUPLE = (0, 0, 8)
code_name_to_value_lookup = {
'KEY_RESERVED':(0, 'kb_key'),
'KEY_ESC':(1, 'kb_key'),
'KEY_1':(2, 'kb_key'),
'KEY_2':(3, 'kb_key'),
'KEY_3':(4, 'kb_key'),
'KEY_4':(5, 'kb_key'),
'KEY_5':(6, 'kb_key'),
'KEY_6':(7, 'kb_key'),
'KEY_7':(8, 'kb_key'),
'KEY_8':(9, 'kb_key'),
'KEY_9':(10, 'kb_key'),
'KEY_0':(11, 'kb_key'),
'KEY_MINUS':(12, 'kb_key'),
'KEY_EQUAL':(13, 'kb_key'),
'KEY_BACKSPACE':(14, 'kb_key'),
'KEY_TAB':(15, 'kb_key'),
'KEY_Q':(16, 'kb_key'),
'KEY_W':(17, 'kb_key'),
'KEY_E':(18, 'kb_key'),
'KEY_R':(19, 'kb_key'),
'KEY_T':(20, 'kb_key'),
'KEY_Y':(21, 'kb_key'),
'KEY_U':(22, 'kb_key'),
'KEY_I':(23, 'kb_key'),
'KEY_O':(24, 'kb_key'),
'KEY_P':(25, 'kb_key'),
'KEY_LEFTBRACE':(26, 'kb_key'),
'KEY_RIGHTBRACE':(27, 'kb_key'),
'KEY_ENTER':(28, 'kb_key'),
'KEY_LEFTCTRL':(29, 'kb_key'),
'KEY_A':(30, 'kb_key'),
'KEY_S':(31, 'kb_key'),
'KEY_D':(32, 'kb_key'),
'KEY_F':(33, 'kb_key'),
'KEY_G':(34, 'kb_key'),
'KEY_H':(35, 'kb_key'),
'KEY_J':(36, 'kb_key'),
'KEY_K':(37, 'kb_key'),
'KEY_L':(38, 'kb_key'),
'KEY_SEMICOLON':(39, 'kb_key'),
'KEY_APOSTROPHE':(40, 'kb_key'),
'KEY_GRAVE':(41, 'kb_key'),
'KEY_LEFTSHIFT':(42, 'kb_key'),
'KEY_BACKSLASH':(43, 'kb_key'),
'KEY_Z':(44, 'kb_key'),
'KEY_X':(45, 'kb_key'),
'KEY_C':(46, 'kb_key'),
'KEY_V':(47, 'kb_key'),
'KEY_B':(48, 'kb_key'),
'KEY_N':(49, 'kb_key'),
'KEY_M':(50, 'kb_key'),
'KEY_COMMA':(51, 'kb_key'),
'KEY_DOT':(52, 'kb_key'),
'KEY_SLASH':(53, 'kb_key'),
'KEY_RIGHTSHIFT':(54, 'kb_key'),
'KEY_KPASTERISK':(55, 'kb_key'),
'KEY_LEFTALT':(56, 'kb_key'),
'KEY_SPACE':(57, 'kb_key'),
'KEY_CAPSLOCK':(58, 'kb_key'),
'KEY_F1':(59, 'kb_key'),
'KEY_F2':(60, 'kb_key'),
'KEY_F3':(61, 'kb_key'),
'KEY_F4':(62, 'kb_key'),
'KEY_F5':(63, 'kb_key'),
'KEY_F6':(64, 'kb_key'),
'KEY_F7':(65, 'kb_key'),
'KEY_F8':(66, 'kb_key'),
'KEY_F9':(67, 'kb_key'),
'KEY_F10':(68, 'kb_key'),
'KEY_NUMLOCK':(69, 'kb_key'),
'KEY_SCROLLLOCK':(70, 'kb_key'),
'KEY_KP7':(71, 'kb_key'),
'KEY_KP8':(72, 'kb_key'),
'KEY_KP9':(73, 'kb_key'),
'KEY_KPMINUS':(74, 'kb_key'),
'KEY_KP4':(75, 'kb_key'),
'KEY_KP5':(76, 'kb_key'),
'KEY_KP6':(77, 'kb_key'),
'KEY_KPPLUS':(78, 'kb_key'),
'KEY_KP1':(79, 'kb_key'),
'KEY_KP2':(80, 'kb_key'),
'KEY_KP3':(81, 'kb_key'),
'KEY_KP0':(82, 'kb_key'),
'KEY_KPDOT':(83, 'kb_key'),
'KEY_ZENKAKUHANKAKU':(85, 'kb_key'),
'KEY_102ND':(86, 'kb_key'),
'KEY_F11':(87, 'kb_key'),
'KEY_F12':(88, 'kb_key'),
'KEY_RO':(89, 'kb_key'),
'KEY_KATAKANA':(90, 'kb_key'),
'KEY_HIRAGANA':(91, 'kb_key'),
'KEY_HENKAN':(92, 'kb_key'),
'KEY_KATAKANAHIRAGANA':(93, 'kb_key'),
'KEY_MUHENKAN':(94, 'kb_key'),
'KEY_KPJPCOMMA':(95, 'kb_key'),
'KEY_KPENTER':(96, 'kb_key'),
'KEY_RIGHTCTRL':(97, 'kb_key'),
'KEY_KPSLASH':(98, 'kb_key'),
'KEY_SYSRQ':(99, 'kb_key'),
'KEY_RIGHTALT':(100, 'kb_key'),
'KEY_LINEFEED':(101, 'kb_key'),
'KEY_HOME':(102, 'kb_key'),
'KEY_UP':(103, 'kb_key'),
'KEY_PAGEUP':(104, 'kb_key'),
'KEY_LEFT':(105, 'kb_key'),
'KEY_RIGHT':(106, 'kb_key'),
'KEY_END':(107, 'kb_key'),
'KEY_DOWN':(108, 'kb_key'),
'KEY_PAGEDOWN':(109, 'kb_key'),
'KEY_INSERT':(110, 'kb_key'),
'KEY_DELETE':(111, 'kb_key'),
'KEY_MACRO':(112, 'kb_key'),
'KEY_MUTE':(113, 'kb_key'),
'KEY_VOLUMEDOWN':(114, 'kb_key'),
'KEY_VOLUMEUP':(115, 'kb_key'),
'KEY_POWER':(116, 'kb_key'),
'KEY_KPEQUAL':(117, 'kb_key'),
'KEY_KPPLUSMINUS':(118, 'kb_key'),
'KEY_PAUSE':(119, 'kb_key'),
'KEY_SCALE':(120, 'kb_key'),
'KEY_KPCOMMA':(121, 'kb_key'),
'KEY_HANGEUL':(122, 'kb_key'),
'KEY_HANGUEL':(122, 'kb_key'),
'KEY_HANJA':(123, 'kb_key'),
'KEY_YEN':(124, 'kb_key'),
'KEY_LEFTMETA':(125, 'kb_key'),
'KEY_RIGHTMETA':(126, 'kb_key'),
'KEY_COMPOSE':(127, 'kb_key'),
'KEY_STOP':(128, 'kb_key'),
'KEY_AGAIN':(129, 'kb_key'),
'KEY_PROPS':(130, 'kb_key'),
'KEY_UNDO':(131, 'kb_key'),
'KEY_FRONT':(132, 'kb_key'),
'KEY_COPY':(133, 'kb_key'),
'KEY_OPEN':(134, 'kb_key'),
'KEY_PASTE':(135, 'kb_key'),
'KEY_FIND':(136, 'kb_key'),
'KEY_CUT':(137, 'kb_key'),
'KEY_HELP':(138, 'kb_key'),
'KEY_MENU':(139, 'kb_key'),
'KEY_CALC':(140, 'kb_key'),
'KEY_SETUP':(141, 'kb_key'),
'KEY_SLEEP':(142, 'kb_key'),
'KEY_WAKEUP':(143, 'kb_key'),
'KEY_FILE':(144, 'kb_key'),
'KEY_SENDFILE':(145, 'kb_key'),
'KEY_DELETEFILE':(146, 'kb_key'),
'KEY_XFER':(147, 'kb_key'),
'KEY_PROG1':(148, 'kb_key'),
'KEY_PROG2':(149, 'kb_key'),
'KEY_WWW':(150, 'kb_key'),
'KEY_MSDOS':(151, 'kb_key'),
'KEY_COFFEE':(152, 'kb_key'),
'KEY_SCREENLOCK':(152, 'kb_key'),
'KEY_ROTATE_DISPLAY':(153, 'kb_key'),
'KEY_DIRECTION':(153, 'kb_key'),
'KEY_CYCLEWINDOWS':(154, 'kb_key'),
'KEY_MAIL':(155, 'kb_key'),
'KEY_BOOKMARKS':(156, 'kb_key'),
'KEY_COMPUTER':(157, 'kb_key'),
'KEY_BACK':(158, 'kb_key'),
'KEY_FORWARD':(159, 'kb_key'),
'KEY_CLOSECD':(160, 'kb_key'),
'KEY_EJECTCD':(161, 'kb_key'),
'KEY_EJECTCLOSECD':(162, 'kb_key'),
'KEY_NEXTSONG':(163, 'kb_key'),
'KEY_PLAYPAUSE':(164, 'kb_key'),
'KEY_PREVIOUSSONG':(165, 'kb_key'),
'KEY_STOPCD':(166, 'kb_key'),
'KEY_RECORD':(167, 'kb_key'),
'KEY_REWIND':(168, 'kb_key'),
'KEY_PHONE':(169, 'kb_key'),
'KEY_ISO':(170, 'kb_key'),
'KEY_CONFIG':(171, 'kb_key'),
'KEY_HOMEPAGE':(172, 'kb_key'),
'KEY_REFRESH':(173, 'kb_key'),
'KEY_EXIT':(174, 'kb_key'),
'KEY_MOVE':(175, 'kb_key'),
'KEY_EDIT':(176, 'kb_key'),
'KEY_SCROLLUP':(177, 'kb_key'),
'KEY_SCROLLDOWN':(178, 'kb_key'),
'KEY_KPLEFTPAREN':(179, 'kb_key'),
'KEY_KPRIGHTPAREN':(180, 'kb_key'),
'KEY_NEW':(181, 'kb_key'),
'KEY_REDO':(182, 'kb_key'),
'KEY_F13':(183, 'kb_key'),
'KEY_F14':(184, 'kb_key'),
'KEY_F15':(185, 'kb_key'),
'KEY_F16':(186, 'kb_key'),
'KEY_F17':(187, 'kb_key'),
'KEY_F18':(188, 'kb_key'),
'KEY_F19':(189, 'kb_key'),
'KEY_F20':(190, 'kb_key'),
'KEY_F21':(191, 'kb_key'),
'KEY_F22':(192, 'kb_key'),
'KEY_F23':(193, 'kb_key'),
'KEY_F24':(194, 'kb_key'),
# --------------------
'BTN_GAMEPAD':(0x130, 'usb_gp_btn'),
'BTN_SOUTH':(0x130, 'usb_gp_btn'),
'BTN_A':(0x130, 'usb_gp_btn'),
'BTN_EAST':(0x131, 'usb_gp_btn'),
'BTN_B':(0x131, 'usb_gp_btn'),
'BTN_C':(0x132, 'usb_gp_btn'),
'BTN_NORTH':(0x133, 'usb_gp_btn'),
'BTN_X':(0x133, 'usb_gp_btn'),
'BTN_WEST':(0x134, 'usb_gp_btn'),
'BTN_Y':(0x134, 'usb_gp_btn'),
'BTN_Z':(0x135, 'usb_gp_btn'),
'BTN_TL':(0x136, 'usb_gp_btn'),
'BTN_TR':(0x137, 'usb_gp_btn'),
'BTN_TL2':(0x138, 'usb_gp_btn'),
'BTN_TR2':(0x139, 'usb_gp_btn'),
'BTN_SELECT':(0x13a, 'usb_gp_btn'),
'BTN_START':(0x13b, 'usb_gp_btn'),
'BTN_MODE':(0x13c, 'usb_gp_btn'),
'BTN_THUMBL':(0x13d, 'usb_gp_btn'),
'BTN_THUMBR':(0x13e, 'usb_gp_btn'),
# --------------------
'ABS_X':(0x00, 'usb_abs_axis'),
'ABS_Y':(0x01, 'usb_abs_axis'),
'ABS_Z':(0x02, 'usb_abs_axis'),
'ABS_RX':(0x03, 'usb_abs_axis'),
'ABS_RY':(0x04, 'usb_abs_axis'),
'ABS_RZ':(0x05, 'usb_abs_axis'),
'ABS_THROTTLE':(0x06, 'usb_abs_axis'),
'ABS_RUDDER':(0x07, 'usb_abs_axis'),
'ABS_WHEEL':(0x08, 'usb_abs_axis'),
'ABS_GAS':(0x09, 'usb_abs_axis'),
'ABS_BRAKE':(0x0a, 'usb_abs_axis'),
'ABS_HAT0X':(0x10, 'usb_abs_axis'),
'ABS_HAT0Y':(0x11, 'usb_abs_axis'),
'ABS_HAT1X':(0x12, 'usb_abs_axis'),
'ABS_HAT1Y':(0x13, 'usb_abs_axis'),
'ABS_HAT2X':(0x14, 'usb_abs_axis'),
'ABS_HAT2Y':(0x15, 'usb_abs_axis'),
'ABS_HAT3X':(0x16, 'usb_abs_axis'),
'ABS_HAT3Y':(0x17, 'usb_abs_axis'),
# --------------------
'BTN_MOUSE':(0x110, 'mouse_btn'),
'BTN_LEFT':(0x110, 'mouse_btn'),
'BTN_RIGHT':(0x111, 'mouse_btn'),
'BTN_MIDDLE':(0x112, 'mouse_btn'),
'BTN_SIDE':(0x113, 'mouse_btn'),
'BTN_EXTRA':(0x114, 'mouse_btn'),
'BTN_FORWARD':(0x115, 'mouse_btn'),
'BTN_BACK':(0x116, 'mouse_btn'),
'BTN_TASK':(0x117, 'mouse_btn'),
# --------------------
'REL_X':(0x00, 'usb_rel_axis'),
'REL_Y':(0x01, 'usb_rel_axis'),
'REL_Z':(0x02, 'usb_rel_axis'),
'REL_RX':(0x03, 'usb_rel_axis'),
'REL_RY':(0x04, 'usb_rel_axis'),
'REL_RZ':(0x05, 'usb_rel_axis'),
'REL_HWHEEL':(0x06, 'usb_rel_axis'),
'REL_DIAL':(0x07, 'usb_rel_axis'),
'REL_WHEEL':(0x08, 'usb_rel_axis'),
'REL_MISC':(0x09, 'usb_rel_axis'),
# --------------------
'IBM_GGP_BTN_1':('IBM_GGP_BTN_1', 'ibm_ggp_btn'),
'IBM_GGP_BTN_2':('IBM_GGP_BTN_2', 'ibm_ggp_btn'),
'IBM_GGP_BTN_3':('IBM_GGP_BTN_3', 'ibm_ggp_btn'),
'IBM_GGP_BTN_4':('IBM_GGP_BTN_4', 'ibm_ggp_btn'),
# --------------------
'IBM_GGP_JS1_X':('IBM_GGP_JS1_X', 'ibm_ggp_axis'),
'IBM_GGP_JS1_Y':('IBM_GGP_JS1_Y', 'ibm_ggp_axis'),
'IBM_GGP_JS2_X':('IBM_GGP_JS2_X', 'ibm_ggp_axis'),
'IBM_GGP_JS2_Y':('IBM_GGP_JS2_Y', 'ibm_ggp_axis'),
# --------------------
'IBM_GGP_JS1_XP':('IBM_GGP_JS1_XP', 'ibm_ggp_half_axis'),
'IBM_GGP_JS1_XN':('IBM_GGP_JS1_XN', 'ibm_ggp_half_axis'),
'IBM_GGP_JS1_YP':('IBM_GGP_JS1_YP', 'ibm_ggp_half_axis'),
'IBM_GGP_JS1_YN':('IBM_GGP_JS1_YN', 'ibm_ggp_half_axis'),
'IBM_GGP_JS2_XP':('IBM_GGP_JS2_XP', 'ibm_ggp_half_axis'),
'IBM_GGP_JS2_XN':('IBM_GGP_JS2_XN', 'ibm_ggp_half_axis'),
'IBM_GGP_JS2_YP':('IBM_GGP_JS2_YP', 'ibm_ggp_half_axis'),
'IBM_GGP_JS2_YN':('IBM_GGP_JS2_YN', 'ibm_ggp_half_axis'),
}
code_value_to_name_lookup = {
0x130:{'BTN_SOUTH', 'BTN_A'},
0x131:{'BTN_EAST', 'BTN_B'},
0x132:{'BTN_C'},
0x133:{'BTN_NORTH', 'BTN_X'},
0x134:{'BTN_WEST', 'BTN_Y'},
0x135:{'BTN_Z'},
0x136:{'BTN_TL'},
0x137:{'BTN_TR'},
0x138:{'BTN_TL2'},
0x139:{'BTN_TR2'},
0x13a:{'BTN_SELECT'},
0x13b:{'BTN_START'},
0x13c:{'BTN_MODE'},
0x13d:{'BTN_THUMBL'},
0x13e:{'BTN_THUMBR'},
0x00:{'ABS_X'},
0x01:{'ABS_Y'},
0x02:{'ABS_Z'},
0x03:{'ABS_RX'},
0x04:{'ABS_RY'},
0x05:{'ABS_RZ'},
0x06:{'ABS_THROTTLE'},
0x07:{'ABS_RUDDER'},
0x08:{'ABS_WHEEL'},
0x09:{'ABS_GAS'},
0x0a:{'ABS_BRAKE'},
0x10:{'ABS_HAT0X'},
0x11:{'ABS_HAT0Y'},
0x12:{'ABS_HAT1X'},
0x13:{'ABS_HAT1Y'},
0x14:{'ABS_HAT2X'},
0x15:{'ABS_HAT2Y'},
0x16:{'ABS_HAT3X'},
0x17:{'ABS_HAT3Y'},
373:{'BTN_MODE'},
}
board_id_lookup = {
'Unknown':0,
'IBMPC':1,
'ADB':2,
}
protocol_id_lookup = {
'OFF':0,
'AT_PS2_KB':1,
'XT_KB':2,
'ADB_KB':3,
'PS2_MOUSE':4,
'MICROSOFT_SERIAL_MOUSE':5,
'ADB_MOUSE':6,
'GAMEPORT_15PIN_GAMEPAD':7,
'GAMEPORT_GRAVIS_GAMEPAD':8,
'GAMEPORT_MICROSOFT_SIDEWINDER':9,
'RAW_KEYBOARD':125,
'RAW_MOUSE':126,
'RAW_GAMEPAD':127,
}