Skip to content

Instantly share code, notes, and snippets.

@willwade
Created December 18, 2018 01:04
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save willwade/30895e766273f606f821568dadebcc1c to your computer and use it in GitHub Desktop.
Save willwade/30895e766273f606f821568dadebcc1c to your computer and use it in GitHub Desktop.
convert all keypresses and turn to HEX codes ready for BLE / AT Commands
"""
Convert the pressed up/down key to the hexcode of all keys and send to BLE
"""
import sys
sys.path.append('..')
import keyboard
import warnings
import serial
import serial.tools.list_ports
def setup():
global ser
arduino_ports = [
p.device
for p in serial.tools.list_ports.comports()
if 'Serial Device' in p.description
]
if not arduino_ports:
raise IOError("No Adafruit found")
if len(arduino_ports) > 1:
warnings.warn('Multiple Arduinos found - using the first')
ser = serial.Serial(arduino_ports[0])
return(True)
def createATCmd(keys):
return("AT+BLEKEYBOARDCODE=00-00-HEX-00-00-00-00")
def print_pressed_keys(e):
global ser
print(e.event_type)
if (e.name in keyboard.all_modifiers):
tmpName = 'KEY_MOD_'
if (e.name in keyboard.sided_modifiers):
tmpName += 'L'
tmpName += str(e.name.upper().replace(" ",""))
elif(e.is_keypad ):
tmpName = str('KEY_'+e.name.upper())
print(tmpName)
else:
tmpName = str('KEY_'+e.name.upper())
keycodeDict = {"KEY_MOD_LCTRL": "0x01","KEY_MOD_LSHIFT": "0x02","KEY_MOD_LALT": "0x04","KEY_MOD_LMETA": "0x08","KEY_MOD_RCTRL": "0x10","KEY_MOD_RSHIFT": "0x20","KEY_MOD_RALT": "0x40","KEY_MOD_RMETA": "0x80","KEY_NONE": "0x00","KEY_ERR_OVF": "0x01","KEY_A": "0x04","KEY_B": "0x05","KEY_C": "0x06","KEY_D": "0x07","KEY_E": "0x08","KEY_F": "0x09","KEY_G": "0x0a","KEY_H": "0x0b","KEY_I": "0x0c","KEY_J": "0x0d","KEY_K": "0x0e","KEY_L": "0x0f","KEY_M": "0x10","KEY_N": "0x11","KEY_O": "0x12","KEY_P": "0x13","KEY_Q": "0x14","KEY_R": "0x15","KEY_S": "0x16","KEY_T": "0x17","KEY_U": "0x18","KEY_V": "0x19","KEY_W": "0x1a","KEY_X": "0x1b","KEY_Y": "0x1c","KEY_Z": "0x1d","KEY_1": "0x1e","KEY_2": "0x1f","KEY_3": "0x20","KEY_4": "0x21","KEY_5": "0x22","KEY_6": "0x23","KEY_7": "0x24","KEY_8": "0x25","KEY_9": "0x26","KEY_0": "0x27","KEY_ENTER": "0x28","KEY_ESC": "0x29","KEY_BACKSPACE": "0x2a","KEY_TAB": "0x2b","KEY_SPACE": "0x2c","KEY_MINUS": "0x2d","KEY_EQUAL": "0x2e","KEY_LEFTBRACE": "0x2f","KEY_RIGHTBRACE": "0x30","KEY_BACKSLASH": "0x31","KEY_HASHTILDE": "0x32","KEY_SEMICOLON": "0x33","KEY_APOSTROPHE": "0x34","KEY_GRAVE": "0x35","KEY_COMMA": "0x36","KEY_DOT": "0x37","KEY_SLASH": "0x38","KEY_CAPSLOCK": "0x39","KEY_F1": "0x3a","KEY_F2": "0x3b","KEY_F3": "0x3c","KEY_F4": "0x3d","KEY_F5": "0x3e","KEY_F6": "0x3f","KEY_F7": "0x40","KEY_F8": "0x41","KEY_F9": "0x42","KEY_F10": "0x43","KEY_F11": "0x44","KEY_F12": "0x45","KEY_SYSRQ": "0x46","KEY_SCROLLLOCK": "0x47","KEY_PAUSE": "0x48","KEY_INSERT": "0x49","KEY_HOME": "0x4a","KEY_PAGEUP": "0x4b","KEY_DELETE": "0x4c","KEY_END": "0x4d","KEY_PAGEDOWN": "0x4e","KEY_RIGHT": "0x4f","KEY_LEFT": "0x50","KEY_DOWN": "0x51","KEY_UP": "0x52","KEY_NUMLOCK": "0x53","KEY_KPSLASH": "0x54","KEY_KPASTERISK": "0x55","KEY_KPMINUS": "0x56","KEY_KPPLUS": "0x57","KEY_KPENTER": "0x58","KEY_KP1": "0x59","KEY_KP2": "0x5a","KEY_KP3": "0x5b","KEY_KP4": "0x5c","KEY_KP5": "0x5d","KEY_KP6": "0x5e","KEY_KP7": "0x5f","KEY_KP8": "0x60","KEY_KP9": "0x61","KEY_KP0": "0x62","KEY_KPDOT": "0x63","KEY_102ND": "0x64","KEY_COMPOSE": "0x65","KEY_POWER": "0x66","KEY_KPEQUAL": "0x67","KEY_F13": "0x68","KEY_F14": "0x69","KEY_F15": "0x6a","KEY_F16": "0x6b","KEY_F17": "0x6c","KEY_F18": "0x6d","KEY_F19": "0x6e","KEY_F20": "0x6f","KEY_F21": "0x70","KEY_F22": "0x71","KEY_F23": "0x72","KEY_F24": "0x73","KEY_OPEN": "0x74","KEY_HELP": "0x75","KEY_PROPS": "0x76","KEY_FRONT": "0x77","KEY_STOP": "0x78","KEY_AGAIN": "0x79","KEY_UNDO": "0x7a","KEY_CUT": "0x7b","KEY_COPY": "0x7c","KEY_PASTE": "0x7d","KEY_FIND": "0x7e","KEY_MUTE": "0x7f","KEY_VOLUMEUP": "0x80","KEY_VOLUMEDOWN": "0x81","KEY_KPCOMMA": "0x85","KEY_RO": "0x87","KEY_KATAKANAHIRAGANA": "0x88","KEY_YEN": "0x89","KEY_HENKAN": "0x8a","KEY_MUHENKAN": "0x8b","KEY_KPJPCOMMA": "0x8c","KEY_HANGEUL": "0x90","KEY_HANJA": "0x91","KEY_KATAKANA": "0x92","KEY_HIRAGANA": "0x93","KEY_ZENKAKUHANKAKU": "0x94","KEY_KPLEFTPAREN": "0xb6","KEY_KPRIGHTPAREN": "0xb7","KEY_LEFTCTRL": "0xe0","KEY_LEFTSHIFT": "0xe1","KEY_LEFTALT": "0xe2","KEY_LEFTWINDOWS": "0xe3","KEY_RIGHTCTRL": "0xe4","KEY_RIGHTSHIFT": "0xe5","KEY_RIGHTALT": "0xe6","KEY_RIGHTMETA": "0xe7","KEY_MEDIA_PLAYPAUSE": "0xe8","KEY_MEDIA_STOPCD": "0xe9","KEY_MEDIA_PREVIOUSSONG": "0xea","KEY_MEDIA_NEXTSONG": "0xeb","KEY_MEDIA_EJECTCD": "0xec","KEY_MEDIA_VOLUMEUP": "0xed","KEY_MEDIA_VOLUMEDOWN": "0xee","KEY_MEDIA_MUTE": "0xef","KEY_MEDIA_WWW": "0xf0","KEY_MEDIA_BACK": "0xf1","KEY_MEDIA_FORWARD": "0xf2","KEY_MEDIA_STOP": "0xf3","KEY_MEDIA_FIND": "0xf4","KEY_MEDIA_SCROLLUP": "0xf5","KEY_MEDIA_SCROLLDOWN": "0xf6","KEY_MEDIA_EDIT": "0xf7","KEY_MEDIA_SLEEP": "0xf8","KEY_MEDIA_COFFEE": "0xf9","KEY_MEDIA_REFRESH": "0xfa","KEY_MEDIA_CALC": "0xfb"}
if (tmpName in keycodeDict):
print (keycodeDict[tmpName])
ser.write(keycodeDict[tmpName])
else:
print ('!notfound:'+e.name)
global ser
setup()
ser.close()
ser.open()
keyboard.hook(print_pressed_keys)
keyboard.wait("ctrl+shift+x")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment