From 7a2aac9d79f8ab87215f11fce2f8d238f973d312 Mon Sep 17 00:00:00 2001 From: Ben Reaves Date: Mon, 1 Jun 2020 01:50:21 -0500 Subject: [PATCH 01/10] - New terminal wizard for Kinto setup. --- keycheck.py | 308 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 308 insertions(+) create mode 100755 keycheck.py diff --git a/keycheck.py b/keycheck.py new file mode 100755 index 0000000..47cfc14 --- /dev/null +++ b/keycheck.py @@ -0,0 +1,308 @@ +#!/usr/bin/env python3 + +# pip3 install pynput +# pip3 install --no-deps pynput + +from pynput.keyboard import Key, Listener +import sys, subprocess, time +delay=3 + +class color: + PURPLE = '\033[95m' + CYAN = '\033[96m' + DARKCYAN = '\033[36m' + BLUE = '\033[94m' + GREEN = '\033[92m' + YELLOW = '\033[93m' + RED = '\033[91m' + BOLD = '\033[1m' + UNDERLINE = '\033[4m' + END = '\033[0m' + +def countdown(secs): + for i in range(0,secs): + print(secs-i, end="\r", flush=True) + time.sleep(1) + +def on_press(key): + print('{0} pressed'.format(key)) + +def on_release(key): + # print('{0} release'.format(key)) + if key == Key.esc: + # Stop listener + return False + +def yn_choice(message, default='y'): + choices = 'Y/n' if default.lower() in ('y', 'yes') else 'y/N' + choice = input("%s (%s) " % (message, choices)) + values = ('y', 'yes', '') if choices == 'Y/n' else ('y', 'yes') + return choice.strip().lower() in values + +modifier_keys = { + "primary":"", + "secondary":"", + "rprimary":"", + "rsecondary":"", + "capslock":"", + "capswap":"" +} + +def set_key(key): + global modifiery_keys + print("\nWhich key would you like to set?\n") + + while True: + try: + keytype = int(input( + "1) Ctrl\n" + + "2) Alt\n" + + "3) Super/Win/Cmd/Chrome search key\n")) + if keytype < 4 and keytype > 0: + break + except: + print("That's not a valid option!") + print("") + if keytype == 1: + modifier_keys[key] = "Ctrl" + elif keytype == 2: + modifier_keys[key] = "Alt" + elif keytype == 3: + modifier_keys[key] = "Cmd" + +def set_cap(): + global modifiery_keys + print("\nWhich key would you like to swap?\n") + + while True: + try: + keytype = int(input( + "1) Ctrl (swap)\n" + + "2) Ctrl (duplicate)\n" + + "3) Esc (swap)\n")) + if keytype < 4 and keytype > 0: + break + except: + print("That's not a valid option!") + print("") + if keytype == 1: + modifier_keys["capslock"] = "Ctrl-swap" + elif keytype == 2: + modifier_keys["capslock"] = "Ctrl-dup" + elif keytype == 3: + modifier_keys["capswap"] = "Esc" + +def is_primary(key): + global modifiery_keys + if not (str(key).replace("Key.", "").title() == "Enter" or str(key).replace("Key.", "").title() == "Esc"): + print(str(key).replace("Key.", "").title() + " will be remapped to Ctrl, the Cmd ⌘ key position.") + # countdown(3) + modifier_keys["primary"] = str(key).replace("Key.", "").title() + return False + elif str(key).replace("Key.", "").title() == "Esc": + modifier_keys["primary"] = "Esc" + # countdown(3) + return False + else: + return True + +def is_secondary(key): + global modifiery_keys + if not (str(key).replace("Key.", "").title() == "Enter" or str(key).replace("Key.", "").title() == "Esc"): + print(str(key).replace("Key.", "").title() + " will be remapped to Alt, the Option ⌥ key position.") + # countdown(3) + modifier_keys["secondary"] = str(key).replace("Key.", "").title() + return False + elif str(key).replace("Key.", "").title() == "Esc": + modifier_keys["secondary"] = "Esc" + # countdown(3) + return False + else: + return True + +def is_rprimary(key): + global modifiery_keys + if not (str(key).replace("Key.", "").title() == "Enter" or str(key).replace("Key.", "").title() == "Esc"): + print(str(key).replace("Key.", "").title() + " will be remapped to Ctrl, the Cmd ⌘ key position.") + # countdown(3) + modifier_keys["rprimary"] = str(key).replace("Key.", "").title() + return False + elif str(key).replace("Key.", "").title() == "Esc": + modifier_keys["rprimary"] = "Esc" + # countdown(3) + return False + else: + return True + +def is_rsecondary(key): + global modifiery_keys + if not (str(key).replace("Key.", "").title() == "Enter" or str(key).replace("Key.", "").title() == "Esc"): + print(str(key).replace("Key.", "").title() + " will be remapped to Alt, the Option ⌥ key position.") + # countdown(3) + modifier_keys["rsecondary"] = str(key).replace("Key.", "").title() + return False + elif str(key).replace("Key.", "").title() == "Esc": + modifier_keys["rsecondary"] = "Esc" + # countdown(3) + return False + else: + return True + + +print(color.UNDERLINE + color.YELLOW + "\n\nPlease ignore the FN key." + color.END + " FN cannot be remapped by software, some Thinkpads can swap it with Ctrl in the BIOS.\n") +input("Press Enter to continue...\n\n") +print(chr(27) + "[2J") + +while True: + global modifiery_keys + + + print(color.UNDERLINE + color.YELLOW + "\n\nPress the 1st key Left of the spacebar" + color.END + " (Press Esc to set manaully)\n") + print(" 👇 \n") + print(" □ □ ▣ ░░░░░░░\n") + with Listener( + on_release=is_primary,suppress=True) as listener: + try: + listener.join() + except MyException as e: + print('{0} was pressed'.format(e.args[0])) + + if modifier_keys["primary"] != "Esc": + choice = yn_choice("Is this correct?") + if(choice): + print("Left Physical " + modifier_keys["primary"] + " = Ctrl/Cmd ⌘") + # listener.stop() + break + else: + set_key("primary") + print("Left Physical " + modifier_keys["primary"] + " = Ctrl/Cmd ⌘\n") + # listener.stop() + input("Press Enter to continue...\n\n") + break + +print(chr(27) + "[2J") + +print(listener) + +while True: + global modifiery_keys + print(color.UNDERLINE + color.YELLOW + "\n\nPress the 2nd key Left of the spacebar" + color.END + " (Press Esc to set manaully)\n") + print(" 👇\n") + print(" □ ▣ □ ░░░░░░░\n") + + with Listener( + on_release=is_secondary,suppress=True) as listener: + try: + listener.join() + except MyException as e: + print('{0} was pressed'.format(e.args[0])) + + if modifier_keys["secondary"] != "Esc": + choice = yn_choice("Is this correct?") + if(choice): + # listener.stop() + # print("Left Physical " + modifier_keys["secondary"] + " = Alt/Option ⌥") + break + else: + set_key("secondary") + print("Left Physical " + modifier_keys["secondary"] + " = Alt/Option ⌥\n") + # listener.stop() + input("Press Enter to continue...\n\n") + break + +print(chr(27) + "[2J") + +while True: + global modifiery_keys + print(color.UNDERLINE + color.YELLOW + "\n\nPress the 1st key Right of the spacebar" + color.END + " (Press Esc to set manaully)\n") + print(" 👇 \n") + print(" ░░░░░░░ ▣ □ \n") + + with Listener( + on_release=is_rprimary,suppress=True) as listener: + try: + listener.join() + except MyException as e: + print('{0} was pressed'.format(e.args[0])) + + if modifier_keys["rprimary"] != "Esc": + choice = yn_choice("Is this correct?") + if(choice): + # listener.stop() + # print("Right Physical " + modifier_keys["rprimary"] + " = Ctrl/Cmd ⌘") + break + else: + set_key("rprimary") + print("Right Physical " + modifier_keys["rprimary"] + " = Ctrl/Cmd ⌘\n") + # listener.stop() + input("Press Enter to continue...\n\n") + break + +print(chr(27) + "[2J") + +while True: + print(color.UNDERLINE + color.YELLOW + "\n\nPress the 2nd key Right of the spacebar" + color.END + " (Press Esc to set manaully)\n") + print(" 👇\n") + print(" ░░░░░░░ □ ▣ \n") + + + + with Listener( + on_release=is_rsecondary,suppress=True) as listener: + try: + listener.join() + except MyException as e: + print('{0} was pressed'.format(e.args[0])) + + if modifier_keys["rsecondary"] != "Esc": + choice = yn_choice("Is this correct?") + if(choice): + # listener.stop() + # print("Right Physical " + modifier_keys["rsecondary"] + " = Alt/Option ⌥") + break + else: + set_key("rsecondary") + print("Right Physical " + modifier_keys["rsecondary"] + " = Alt/Option ⌥\n") + # listener.stop() + input("Press Enter to continue...\n\n") + break + +print(chr(27) + "[2J") + +if modifier_keys["secondary"] != "Ctrl": + print(color.UNDERLINE + color.YELLOW + "GUI Usage (Physical Ctrl key)\n"+ color.END) + print("Ctrl key will be mapped to Super. (Search key on chromebooks)\n") + print("👇\n") + print(" ▣ □ □ ░░░░░░░\n") + + print("Note: Super may still activate Ctrl based shortcuts\n") + print("at times depending on application or system level shortcut.\n") + print("This will only be done to align shortcuts to their expected functionality.\n") + + input("Press Enter to continue...\n\n") + # print(chr(27) + "[2J") + + print(color.UNDERLINE + color.YELLOW + "Terminal Usage" + color.END + "\n") + print("Ctrl key will be the Ctrl key.\n") + print("👇\n") + print(" ▣ □ □ ░░░░░░░\n\n") + print("The Cmd ⌘ key position during terminal usage will usually be Ctrl+Shift.\n") + print(" 👇 \n") + print(" □ □ ▣ ░░░░░░░\n\n") + input("Press Enter to continue...\n\n") +else: + print("Chromebook detected.") + + print(color.UNDERLINE + color.YELLOW + "Terminal Usage" + color.END + "\n") + print(" □ capslock/search key = Alt\n") + print(" shift\n") + print(" ▣ □ ░░░░░░░") + print("☝️\n") + + input("Press Enter to continue...\n\n") + +print(chr(27) + "[2J") + +choice = yn_choice(color.UNDERLINE + color.YELLOW + "Do you want to swap Capslock with another key?" + color.END + "\n","n") +if(choice): + set_cap() \ No newline at end of file From 0adc44907cd8d840275f302d38b6e015807a7b9f Mon Sep 17 00:00:00 2001 From: Ben Reaves Date: Mon, 1 Jun 2020 03:39:16 -0500 Subject: [PATCH 02/10] - Swapped out unstable pynput with xbindkeys --- keycheck.py | 144 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 83 insertions(+), 61 deletions(-) diff --git a/keycheck.py b/keycheck.py index 47cfc14..706c5e0 100755 --- a/keycheck.py +++ b/keycheck.py @@ -3,10 +3,20 @@ # pip3 install pynput # pip3 install --no-deps pynput -from pynput.keyboard import Key, Listener -import sys, subprocess, time +# from pynput.keyboard import Key, Listener +import sys, subprocess, time, os +from subprocess import PIPE, Popen delay=3 +def cmdline(command): + process = Popen( + args=command, + stdout=PIPE, + universal_newlines=True, + shell=True + ) + return process.communicate()[0] + class color: PURPLE = '\033[95m' CYAN = '\033[96m' @@ -49,7 +59,7 @@ modifier_keys = { } def set_key(key): - global modifiery_keys + global modifier_keys print("\nWhich key would you like to set?\n") while True: @@ -71,7 +81,7 @@ def set_key(key): modifier_keys[key] = "Cmd" def set_cap(): - global modifiery_keys + global modifier_keys print("\nWhich key would you like to swap?\n") while True: @@ -90,59 +100,58 @@ def set_cap(): elif keytype == 2: modifier_keys["capslock"] = "Ctrl-dup" elif keytype == 3: - modifier_keys["capswap"] = "Esc" + modifier_keys["capswap"] = "Escape" def is_primary(key): - global modifiery_keys - if not (str(key).replace("Key.", "").title() == "Enter" or str(key).replace("Key.", "").title() == "Esc"): + global modifier_keys + if not (str(key).replace("Key.", "").title() == "Enter" or str(key).replace("Key.", "").title() == "Escape"): print(str(key).replace("Key.", "").title() + " will be remapped to Ctrl, the Cmd ⌘ key position.") # countdown(3) modifier_keys["primary"] = str(key).replace("Key.", "").title() - return False - elif str(key).replace("Key.", "").title() == "Esc": - modifier_keys["primary"] = "Esc" + elif str(key).replace("Key.", "").title() == "Escape": + modifier_keys["primary"] = "Escape" # countdown(3) - return False else: return True + return False def is_secondary(key): - global modifiery_keys - if not (str(key).replace("Key.", "").title() == "Enter" or str(key).replace("Key.", "").title() == "Esc"): + global modifier_keys + if not (str(key).replace("Key.", "").title() == "Enter" or str(key).replace("Key.", "").title() == "Escape"): print(str(key).replace("Key.", "").title() + " will be remapped to Alt, the Option ⌥ key position.") # countdown(3) modifier_keys["secondary"] = str(key).replace("Key.", "").title() return False - elif str(key).replace("Key.", "").title() == "Esc": - modifier_keys["secondary"] = "Esc" + elif str(key).replace("Key.", "").title() == "Escape": + modifier_keys["secondary"] = "Escape" # countdown(3) return False else: return True def is_rprimary(key): - global modifiery_keys - if not (str(key).replace("Key.", "").title() == "Enter" or str(key).replace("Key.", "").title() == "Esc"): + global modifier_keys + if not (str(key).replace("Key.", "").title() == "Enter" or str(key).replace("Key.", "").title() == "Escape"): print(str(key).replace("Key.", "").title() + " will be remapped to Ctrl, the Cmd ⌘ key position.") # countdown(3) modifier_keys["rprimary"] = str(key).replace("Key.", "").title() return False - elif str(key).replace("Key.", "").title() == "Esc": - modifier_keys["rprimary"] = "Esc" + elif str(key).replace("Key.", "").title() == "Escape": + modifier_keys["rprimary"] = "Escape" # countdown(3) return False else: return True def is_rsecondary(key): - global modifiery_keys - if not (str(key).replace("Key.", "").title() == "Enter" or str(key).replace("Key.", "").title() == "Esc"): + global modifier_keys + if not (str(key).replace("Key.", "").title() == "Enter" or str(key).replace("Key.", "").title() == "Escape"): print(str(key).replace("Key.", "").title() + " will be remapped to Alt, the Option ⌥ key position.") # countdown(3) modifier_keys["rsecondary"] = str(key).replace("Key.", "").title() return False - elif str(key).replace("Key.", "").title() == "Esc": - modifier_keys["rsecondary"] = "Esc" + elif str(key).replace("Key.", "").title() == "Escape": + modifier_keys["rsecondary"] = "Escape" # countdown(3) return False else: @@ -153,25 +162,32 @@ print(color.UNDERLINE + color.YELLOW + "\n\nPlease ignore the FN key." + color.E input("Press Enter to continue...\n\n") print(chr(27) + "[2J") +counter = 0 + while True: - global modifiery_keys - print(color.UNDERLINE + color.YELLOW + "\n\nPress the 1st key Left of the spacebar" + color.END + " (Press Esc to set manaully)\n") print(" 👇 \n") print(" □ □ ▣ ░░░░░░░\n") - with Listener( - on_release=is_primary,suppress=True) as listener: - try: - listener.join() - except MyException as e: - print('{0} was pressed'.format(e.args[0])) + # listener = Listener(on_release=is_primary,suppress=True) + # listener.start() - if modifier_keys["primary"] != "Esc": + # with Listener( + # on_release=is_primary,suppress=True) as listener: + # try: + # listener.join() + # except MyException as e: + # print('{0} was pressed'.format(e.args[0])) + + modifier_keys["primary"] = cmdline("xbindkeys -k | awk 'END {print $NF}'").strip() + print(modifier_keys["primary"] + " will be remapped to Ctrl, the Cmd ⌘ key position.") + + if modifier_keys["primary"] != "Escape": choice = yn_choice("Is this correct?") if(choice): - print("Left Physical " + modifier_keys["primary"] + " = Ctrl/Cmd ⌘") + # print("Left Physical " + modifier_keys["primary"] + " = Ctrl/Cmd ⌘") # listener.stop() + # input("Press Enter to continue...\n\n") break else: set_key("primary") @@ -179,29 +195,32 @@ while True: # listener.stop() input("Press Enter to continue...\n\n") break + counter += 1 + print(str(counter)+"\n") + time.sleep(1) print(chr(27) + "[2J") -print(listener) - while True: - global modifiery_keys print(color.UNDERLINE + color.YELLOW + "\n\nPress the 2nd key Left of the spacebar" + color.END + " (Press Esc to set manaully)\n") print(" 👇\n") print(" □ ▣ □ ░░░░░░░\n") - with Listener( - on_release=is_secondary,suppress=True) as listener: - try: - listener.join() - except MyException as e: - print('{0} was pressed'.format(e.args[0])) + # with Listener( + # on_release=is_secondary,suppress=True) as listener: + # try: + # listener.join() + # except MyException as e: + # print('{0} was pressed'.format(e.args[0])) + modifier_keys["secondary"] = cmdline("xbindkeys -k | awk 'END {print $NF}'").strip() + print(modifier_keys["secondary"] + " will be remapped to Alt, the Option ⌥ key position.") - if modifier_keys["secondary"] != "Esc": + if modifier_keys["secondary"] != "Escape": choice = yn_choice("Is this correct?") if(choice): # listener.stop() # print("Left Physical " + modifier_keys["secondary"] + " = Alt/Option ⌥") + # input("Press Enter to continue...\n\n") break else: set_key("secondary") @@ -213,23 +232,25 @@ while True: print(chr(27) + "[2J") while True: - global modifiery_keys print(color.UNDERLINE + color.YELLOW + "\n\nPress the 1st key Right of the spacebar" + color.END + " (Press Esc to set manaully)\n") print(" 👇 \n") print(" ░░░░░░░ ▣ □ \n") - with Listener( - on_release=is_rprimary,suppress=True) as listener: - try: - listener.join() - except MyException as e: - print('{0} was pressed'.format(e.args[0])) + # with Listener( + # on_release=is_rprimary,suppress=True) as listener: + # try: + # listener.join() + # except MyException as e: + # print('{0} was pressed'.format(e.args[0])) + modifier_keys["rprimary"] = cmdline("xbindkeys -k | awk 'END {print $NF}'").strip() + print(modifier_keys["rprimary"] + " will be remapped to Ctrl, the Cmd ⌘ key position.") - if modifier_keys["rprimary"] != "Esc": + if modifier_keys["rprimary"] != "Escape": choice = yn_choice("Is this correct?") if(choice): # listener.stop() # print("Right Physical " + modifier_keys["rprimary"] + " = Ctrl/Cmd ⌘") + # input("Press Enter to continue...\n\n") break else: set_key("rprimary") @@ -244,21 +265,22 @@ while True: print(color.UNDERLINE + color.YELLOW + "\n\nPress the 2nd key Right of the spacebar" + color.END + " (Press Esc to set manaully)\n") print(" 👇\n") print(" ░░░░░░░ □ ▣ \n") - - - with Listener( - on_release=is_rsecondary,suppress=True) as listener: - try: - listener.join() - except MyException as e: - print('{0} was pressed'.format(e.args[0])) + # with Listener( + # on_release=is_rsecondary,suppress=True) as listener: + # try: + # listener.join() + # except MyException as e: + # print('{0} was pressed'.format(e.args[0])) + modifier_keys["rsecondary"] = cmdline("xbindkeys -k | awk 'END {print $NF}'").strip() + print(modifier_keys["rsecondary"] + " will be remapped to Alt, the Option ⌥ key position.") - if modifier_keys["rsecondary"] != "Esc": + if modifier_keys["rsecondary"] != "Escape": choice = yn_choice("Is this correct?") if(choice): # listener.stop() # print("Right Physical " + modifier_keys["rsecondary"] + " = Alt/Option ⌥") + # modifier_keys["rsecondary"] = str(os.system("xbindkeys -k | awk 'END {print $NF}'")) break else: set_key("rsecondary") @@ -276,7 +298,7 @@ if modifier_keys["secondary"] != "Ctrl": print(" ▣ □ □ ░░░░░░░\n") print("Note: Super may still activate Ctrl based shortcuts\n") - print("at times depending on application or system level shortcut.\n") + print("at times depending on application or system level shortcuts.\n") print("This will only be done to align shortcuts to their expected functionality.\n") input("Press Enter to continue...\n\n") From e7419891285102433aad0c4b8dff0216ca220c75 Mon Sep 17 00:00:00 2001 From: Ben Reaves Date: Mon, 1 Jun 2020 14:49:49 -0500 Subject: [PATCH 03/10] - Made formatting improvements --- keycheck.py | 50 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/keycheck.py b/keycheck.py index 706c5e0..d3607fb 100755 --- a/keycheck.py +++ b/keycheck.py @@ -167,7 +167,7 @@ counter = 0 while True: print(color.UNDERLINE + color.YELLOW + "\n\nPress the 1st key Left of the spacebar" + color.END + " (Press Esc to set manaully)\n") - print(" 👇 \n") + print(" 👇") print(" □ □ ▣ ░░░░░░░\n") # listener = Listener(on_release=is_primary,suppress=True) # listener.start() @@ -203,7 +203,7 @@ print(chr(27) + "[2J") while True: print(color.UNDERLINE + color.YELLOW + "\n\nPress the 2nd key Left of the spacebar" + color.END + " (Press Esc to set manaully)\n") - print(" 👇\n") + print(" 👇") print(" □ ▣ □ ░░░░░░░\n") # with Listener( @@ -233,8 +233,8 @@ print(chr(27) + "[2J") while True: print(color.UNDERLINE + color.YELLOW + "\n\nPress the 1st key Right of the spacebar" + color.END + " (Press Esc to set manaully)\n") - print(" 👇 \n") - print(" ░░░░░░░ ▣ □ \n") + print(" 👇") + print(" ░░░░░░░ ▣ □") # with Listener( # on_release=is_rprimary,suppress=True) as listener: @@ -263,8 +263,8 @@ print(chr(27) + "[2J") while True: print(color.UNDERLINE + color.YELLOW + "\n\nPress the 2nd key Right of the spacebar" + color.END + " (Press Esc to set manaully)\n") - print(" 👇\n") - print(" ░░░░░░░ □ ▣ \n") + print(" 👇") + print(" ░░░░░░░ □ ▣") # with Listener( # on_release=is_rsecondary,suppress=True) as listener: @@ -291,10 +291,10 @@ while True: print(chr(27) + "[2J") -if modifier_keys["secondary"] != "Ctrl": +if not (modifier_keys["secondary"] == "Ctrl" or modifier_keys["secondary"] == "Control_R"): print(color.UNDERLINE + color.YELLOW + "GUI Usage (Physical Ctrl key)\n"+ color.END) - print("Ctrl key will be mapped to Super. (Search key on chromebooks)\n") - print("👇\n") + print("Ctrl key will be mapped to Super. (Search key on chromebooks)") + print("👇") print(" ▣ □ □ ░░░░░░░\n") print("Note: Super may still activate Ctrl based shortcuts\n") @@ -305,19 +305,33 @@ if modifier_keys["secondary"] != "Ctrl": # print(chr(27) + "[2J") print(color.UNDERLINE + color.YELLOW + "Terminal Usage" + color.END + "\n") - print("Ctrl key will be the Ctrl key.\n") - print("👇\n") - print(" ▣ □ □ ░░░░░░░\n\n") - print("The Cmd ⌘ key position during terminal usage will usually be Ctrl+Shift.\n") - print(" 👇 \n") - print(" □ □ ▣ ░░░░░░░\n\n") - input("Press Enter to continue...\n\n") + print("Ctrl key will be the Ctrl key.") + print("👇") + print(" ▣ □ □ ░░░░░░░\n") + print("The Cmd ⌘ key position during terminal usage will usually be Ctrl+Shift.") + print(" 👇 ") + print(" □ □ ▣ ░░░░░░░\n") + input("Press Enter to continue...\n") else: print("Chromebook detected.") + print(color.UNDERLINE + color.YELLOW + "GUI Usage\n"+ color.END) + print("Search key (capslock position) on chromebooks will be Super\n") + + print("Note: Super may still activate Ctrl based shortcuts") + print("at times depending on application or system level shortcuts.\n") + print("Efforts have been made though to use the physical Ctrl key") + print("when it makes sense to do so, and more often than standard") + print("keyboards. How it feels to type is more important than technical") + print("accuracy.\n") + print("If you believe an improvement can be made or an error was made") + print("please let me know on github or you can fork this project.\n") + + input("Press Enter to continue...\n\n") + print(color.UNDERLINE + color.YELLOW + "Terminal Usage" + color.END + "\n") - print(" □ capslock/search key = Alt\n") - print(" shift\n") + print(" □ capslock/search key = Alt") + print(" shift") print(" ▣ □ ░░░░░░░") print("☝️\n") From d29579e0a54527e0f598682fdbea9b73af7e3647 Mon Sep 17 00:00:00 2001 From: Ben Reaves Date: Sun, 14 Jun 2020 00:58:00 -0500 Subject: [PATCH 04/10] - Fixed posix grouping for Terminus --- windows/kinto.ahk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/windows/kinto.ahk b/windows/kinto.ahk index 00f4029..c75f2cd 100644 --- a/windows/kinto.ahk +++ b/windows/kinto.ahk @@ -64,7 +64,7 @@ GroupAdd, posix, ahk_exe ConEmu.exe GroupAdd, posix, ahk_exe ConEmu64.exe GroupAdd, posix, ahk_exe Hyper.exe GroupAdd, posix, ahk_exe mintty.exe -GroupAdd, terminals, ahk_exe Terminus.exe +GroupAdd, posix, ahk_exe Terminus.exe GroupAdd, posix, Fluent Terminal ahk_class ApplicationFrameWindow GroupAdd, ConEmu, ahk_exe ConEmu.exe From 7f9ccabf7723cc5e8b67fd77968a5364c0f1acba Mon Sep 17 00:00:00 2001 From: Ben Reaves Date: Sun, 14 Jun 2020 22:20:28 -0500 Subject: [PATCH 05/10] - WIP autoset keyboard type for Windows --- system-config/keyboard.ids | 3630 ++++++++++++++++++++++++++++++++++++ windows/detectUSB.ahk | 19 + 2 files changed, 3649 insertions(+) create mode 100644 system-config/keyboard.ids create mode 100644 windows/detectUSB.ahk diff --git a/system-config/keyboard.ids b/system-config/keyboard.ids new file mode 100644 index 0000000..f40825a --- /dev/null +++ b/system-config/keyboard.ids @@ -0,0 +1,3630 @@ +# +# List of USB Keyboard ID's +# +# Filter: ^((?!eyboard|^[0-9]).)*$ +# +# Maintained by Stephen J. Gowdy +# If you have any new entries, please submit them via +# http://www.linux-usb.org/usb-ids.html +# or send entries as patches (diff -u old new) in the +# body of your email (a bot will attempt to deal with it). +# The latest version can be obtained from +# http://www.linux-usb.org/usb.ids +# +# Version: 2020.06.14 +# Date: 2020-06-14 20:34:07 +# + +# Vendors, devices and interfaces. Please keep sorted. + +# Syntax: +# vendor vendor_name +# device device_name <-- single tab +# interface interface_name <-- two tabs +# + +0001 Fry's Electronics +0002 Ingram +0003 Club Mac +0004 Nebraska Furniture Mart +0011 Unknown +0053 Planex +0078 Microntek +0079 DragonRise Inc. +0080 Unknown +0085 Boeye Technology Co., Ltd. +0102 miniSTREAK +0105 Trust International B.V. +0127 IBP +0145 Unknown +017c MLK +0200 TP-Link +0204 Chipsbank Microelectronics Co., Ltd +0218 Hangzhou Worlde +02ad HUMAX Co., Ltd. +0303 Mini Automation Controller +0324 OCZ Technology Inc +0325 OCZ Technology Inc +0386 LTS +03d9 Shenzhen Sinote Tech-Electron Co., Ltd +03da Bernd Walter Computer Technology +03e7 Intel +03e8 EndPoints, Inc. +03e9 Thesys Microelectronics +03ea Data Broadcasting Corp. +03eb Atmel Corp. + 2015 at90usbkey sample firmware (HID keyboard) + 2042 LUFA Keyboard Demo Application + 204d LUFA Combined Mouse and Keyboard Demo Application + 2061 LUFA Combined Mass Storage and Keyboard Demo Application + 6127 AT91SAM HID Keyboard Demo Application +03ec Iwatsu America, Inc. +03ed Mitel Corp. +03ee Mitsumi + 5609 Japanese Keyboard +03f0 HP, Inc + 0024 KU-0316 Keyboard + 010c Multimedia Keyboard Hub + 0122 HID Internet Keyboard + 020c Multimedia Keyboard + 0324 SK-2885 keyboard + 034a Elite Keyboard + 050c 5219 Wireless Keyboard + 0924 Modular Smartcard Keyboard + 0b0c Wireless Keyboard and Optical Mouse receiver + 0d4a SK-2025 Keyboard + 0f0c Wireless Keyboard and Optical Mouse receiver + 1024 Smart Card Keyboard + 1027 Virtual keyboard and mouse + 1524 Smart Card Keyboard - KR + 1624 Smart Card Keyboard - JP + 2b4a Business Slim Keyboard + 304a Slim Keyboard + 354a Slim Keyboard +03f1 Genoa Technology +03f2 Oak Technology, Inc. +03f3 Adaptec, Inc. +03f4 Diebold, Inc. +03f5 Siemens Electromechanical +03f8 Epson Imaging Technology Center +03f9 KeyTronic Corp. + 0100 KT-2001 Keyboard + 0101 Keyboard + 0102 Keyboard Mouse +03fb OPTi, Inc. +03fc Elitegroup Computer Systems +03fd Xilinx, Inc. +03fe Farallon Comunications +0400 National Semiconductor Corp. +0401 National Registry, Inc. +0402 ALi Corp. +0403 Future Technology Devices International, Ltd + 8371 PS/2 Keyboard And Mouse +0404 NCR Corp. + 0320 5932-USB Keyboard + 0322 5932-USB Enhanced Keyboard + 0323 5932-USB Enhanced Keyboard, Flash-Recovery/Download + 032a K016: USB-MSR ISO 3-Track MSR: HID Keyboard Mode +0405 Synopsys, Inc. +0406 Fujitsu-ICL Computers +0407 Fujitsu Personal Systems, Inc. +0408 Quanta Computer, Inc. +0409 NEC Corp. + 0011 PC98 Series Layout Keyboard Mouse + 0014 Japanese Keyboard + 0019 109 Japanese Keyboard with Bus-Powered Hub + 001a PC98 Series Layout Keyboard with Bus-Powered Hub + 0025 Mini Keyboard with Bus-Powered Hub + 0034 109 Japanese Keyboard with One-touch start buttons + 003f Wireless Keyboard with One-touch start buttons + 004f Wireless Keyboard with One-touch start buttons + 0094 Japanese Keyboard with One-touch start buttons + 0095 Japanese Keyboard +040a Kodak Co. +040b Weltrend Semiconductor + 2000 wired Keyboard [Dynex DX-WRK1401] +040c VTech Computers, Ltd +040d VIA Technologies, Inc. +040e MCCI +040f Echo Speech Corp. +0411 BUFFALO INC. (formerly MelCo., Inc.) +0412 Award Software International +0413 Leadtek Research, Inc. +0414 Giga-Byte Technology Co., Ltd +0416 Winbond Electronics Corp. + 551e Keyboard + 551f Keyboard w/ Sys and Media + 5521 Keyboard +0417 Symbios Logic +0418 AST Research +0419 Samsung Info. Systems America, Inc. +041a Phoenix Technologies, Ltd +041b d'TV +041d S3, Inc. +041e Creative Technology, Ltd + 2801 Prodikeys PC-MIDI multifunction keyboard +041f LCS Telegraphics +0420 Chips and Technologies +0421 Nokia Mobile Phones +0422 ADI Systems, Inc. +0423 Computer Access Technology Corp. +0424 Microchip Technology, Inc. (formerly SMSC) +0425 Motorola Semiconductors HK, Ltd + 0101 G-Tech Wireless Mouse & Keyboard +0426 Integrated Device Technology, Inc. +0427 Motorola Electronics Taiwan, Ltd +0428 Advanced Gravis Computer Tech, Ltd +0429 Cirrus Logic +042a Ericsson Austrian, AG +042b Intel Corp. +042c Innovative Semiconductors, Inc. +042d Micronics +042e Acer, Inc. +042f Molex, Inc. +0430 Sun Microsystems, Inc. + 0002 109 Keyboard + 0005 Type 6 Keyboard + 000a 109 Japanese Keyboard + 000b 109 Japanese Keyboard + 0082 109 Japanese Keyboard + 0083 109 Japanese Keyboard + 00a2 Type 7 Keyboard + a111 remote keyboard for P4 chip +0431 Itac Systems, Inc. +0432 Unisys Corp. +0433 Alps Electric, Inc. + abab Keyboard +0434 Samsung Info. Systems America, Inc. +0435 Hyundai Electronics America +0436 Taugagreining HF +0437 Framatome Connectors USA +0438 Advanced Micro Devices, Inc. +0439 Voice Technologies Group +043d Lexmark International, Inc. +043e LG Electronics USA, Inc. +043f RadiSys Corp. +0440 Eizo Nanao Corp. +0441 Winbond Systems Lab. +0442 Ericsson, Inc. +0443 Gateway, Inc. + 000e Multimedia Keyboard + 002e Millennium Keyboard +0445 Lucent Technologies, Inc. +0446 NMB Technologies Corp. + 6781 Keyboard with PS/2 Mouse Port + 6782 Keyboard +0447 Momentum Microsystems +0449 Duta Multi Robotik +044a Shamrock Tech. Co., Ltd +044b WSI +044c CCL/ITRI +044d Siemens Nixdorf AG +044e Alps Electric Co., Ltd + 1104 Japanese Keyboard +044f ThrustMaster, Inc. +0450 DFI, Inc. +0451 Texas Instruments, Inc. + e010 TI SmartPad Keyboard +0452 Mitsubishi Electronics America, Inc. +0453 CMD Technology + 6781 NMB Keyboard + 6783 Chicony Composite Keyboard +0454 Vobis Microcomputer AG +0455 Telematics International, Inc. +0456 Analog Devices, Inc. +0457 Silicon Integrated Systems Corp. +0458 KYE Systems Corp. (Mouse Systems) + 004c Slimstar Pro Keyboard +0459 Adobe Systems, Inc. +045a SONICblue, Inc. +045b Hitachi, Ltd +045d Nortel Networks, Ltd +045e Microsoft Corp. + 000b Natural Keyboard Elite + 001c Internet Keyboard Pro + 001d Natural Keyboard Pro + 002b Internet Keyboard Pro + 002d Internet Keyboard + 0048 Office Keyboard 1.0A + 005c Office Keyboard (106/109) + 005f Wireless MultiMedia Keyboard + 0061 Wireless MultiMedia Keyboard (106/109) + 0063 Wireless Natural MultiMedia Keyboard + 0065 Wireless Natural MultiMedia Keyboard (106/109) + 006d eHome Remote Control Keyboard keys + 0070 Wireless MultiMedia Keyboard + 0071 Wireless MultiMedia Keyboard (106/109) + 0072 Wireless Natural MultiMedia Keyboard + 0073 Wireless Natural MultiMedia Keyboard (106/109) + 0080 Digital Media Pro Keyboard + 00b0 Digital Media Pro Keyboard + 00b4 Digital Media Keyboard 1.0A + 00db Natural Ergonomic Keyboard 4000 V1.0 + 00dd Comfort Curve Keyboard 2000 V1.0 + 071f Mouse/Keyboard 2.4GHz Transceiver V2.0 + 0730 Digital Media Keyboard 3000 + 0750 Wired Keyboard 600 + 0752 Wired Keyboard 400 + 0780 Comfort Curve Keyboard 3000 + 0799 Surface Pro embedded keyboard + 07b6 Comfort Curve Keyboard 3000 + 07b9 Wired Keyboard 200 + 07cd Surface Keyboard + 07f8 Wired Keyboard 600 (model 1576) + 0800 Wireless keyboard (All-in-One-Media) + fff8 Keyboard +0460 Ace Cad Enterprise Co., Ltd +0461 Primax Electronics, Ltd + 0010 HP PR1101U / Primax PMX-KPR1101U Keyboard + 4d01 Comfort Keyboard / Kensington Orbit Elite + 4d8a HP Multimedia Keyboard + 4e04 Lenovo Keyboard KB1021 + 4e6f Acer Wired Keyboard Model KBAY211 +0463 MGE UPS Systems +0464 AMP/Tycoelectronics Corp. +0467 AT&T Paradyne +0468 Wieson Technologies Co., Ltd +046a Cherry GmbH + 0001 Keyboard + 0004 CyBoard Keyboard + 0005 XX33 SmartCard Reader Keyboard + 0008 Wireless Keyboard and Mouse + 0011 G83 (RS 6000) Keyboard + 0023 Keyboard + 0027 CyMotion Master Solar Keyboard + 002a Wireless Mouse & Keyboard + 003c Raptor Gaming Keyboard + 003d Raptor Gaming Keyboard Integrated Hub + 0041 G86 6240 Keyboard + 0081 eHealth Keyboard G87 1504 + 00a1 SmartCard Reader Keyboard KC 1000 SC + 010d MX-Board 3.0 Keyboard + b090 Keyboard +046b American Megatrends, Inc. + 0001 Keyboard + 0101 PS/2 Keyboard, Mouse & Joystick Ports + ff10 Virtual Keyboard and Mouse +046c Toshiba Corp., Digital Media Equipment +046d Logitech, Inc. + 0203 M2452 Keyboard + c221 G11/G15 Keyboard / Keyboard + c222 G15 Keyboard / LCD + c223 G11/G15 Keyboard / USB Hub + c225 G11/G15 Keyboard / G keys + c226 G15 Refresh Keyboard + c227 G15 Refresh Keyboard + c228 G19 Gaming Keyboard + c229 G19 Gaming Keyboard Macro Interface + c22a Gaming Keyboard G110 + c22b Gaming Keyboard G110 G-keys + c22d G510 Gaming Keyboard + c22e G510 Gaming Keyboard onboard audio + c248 G105 Gaming Keyboard + c24d G710 Gaming Keyboard + c301 iTouch Keyboard + c302 iTouch Pro Keyboard + c303 iTouch Keyboard + c305 Internet Keyboard + c307 Internet Keyboard + c308 Internet Navigator Keyboard + c309 Y-BF37 [Internet Navigator Keyboard] + c30b NetPlay Keyboard + c30e UltraX Keyboard (Y-BL49) + c30f Logicool HID-Compliant Keyboard (106 key) + c311 Y-UF49 [Internet Pro Keyboard] + c312 DeLuxe 250 Keyboard + c313 Internet 350 Keyboard + c315 Classic Keyboard 200 + c316 HID-Compliant Keyboard + c317 Wave Corded Keyboard + c318 Illuminated Keyboard + c31b Compact Keyboard K300 + c31c Keyboard K120 + c31d Media Keyboard K200 + c31f Comfort Keyboard K290 + c326 Washable Keyboard K310 + c328 Corded Keyboard K280e + c32b G910 Orion Spark Mechanical Keyboard + c335 G910 Orion Spectrum Mechanical Keyboard + c33a G413 Gaming Keyboard + c503 Cordless Mouse+Keyboard Receiver + c504 Cordless Mouse+Keyboard Receiver + c505 Cordless Mouse+Keyboard Receiver + c509 Cordless Keyboard & Mouse + c529 Logitech Keyboard + Mice + c703 Elite Keyboard Y-RP20 + Mouse MX900 (Bluetooth) + c714 diNovo Edge Keyboard + c71f diNovo Mini Wireless Keyboard + cab1 Cordless Keyboard for Wii HID Receiver +046e Behavior Tech. Computer Corp. + 0100 Keyboard + 5250 KeyMaestro Multimedia Keyboard + 5273 KeyMaestro Multimedia Keyboard + 5308 KeyMaestro Keyboard + 5408 KeyMaestro Multimedia Keyboard/Hub + 5500 Portable Keyboard 86+9 keys (Model 6100C US) + 6782 BTC 7932 mouse+keyboard +046f Crystal Semiconductor +0471 Philips (or NXP) + 0401 Semiconductors CICT Keyboard + 0402 PS/2 Mouse on Semiconductors CICT Keyboard +0472 Chicony Electronics Co., Ltd + 0065 PFU-65 Keyboard [Chicony] +0473 Sanyo Information Business Co., Ltd +0474 Sanyo Electric Co., Ltd +0475 Relisys/Teco Information System +0476 AESP +0477 Seagate Technology, Inc. +0478 Connectix Corp. +0479 Advanced Peripheral Laboratories +047a Semtech Corp. +047b Silitek Corp. + 0001 Keyboard + 0002 Keyboard and Mouse + 0011 SK-1688U Keyboard + 00f9 SK-1789u Keyboard + 0101 BlueTooth Keyboard and Mouse + 050e Internet Compact Keyboard +047c Dell Computer Corp. +047d Kensington +047e Agere Systems, Inc. (Lucent) +047f Plantronics, Inc. +0480 Toshiba America Inc +0481 Zenith Data Systems +0482 Kyocera Corp. +0483 STMicroelectronics +0484 Specialix +0485 Nokia Monitors +0486 ASUS Computers, Inc. +0487 Stewart Connector +0488 Cirque Corp. +0489 Foxconn / Hon Hai +048a S-MOS Systems, Inc. +048c Alps Electric Ireland, Ltd +048d Integrated Technology Express, Inc. +048f Eicon Tech. +0490 United Microelectronics Corp. +0491 Capetronic +0492 Samsung SemiConductor, Inc. +0493 MAG Technology Co., Ltd +0495 ESS Technology, Inc. +0496 Micron Electronics +0497 Smile International +0498 Capetronic (Kaohsiung) Corp. +0499 Yamaha Corp. + 1054 S90XS Keyboard/Music Synthesizer + 1617 PSR-E353 digital keyboard +049a Gandalf Technologies, Ltd +049b Curtis Computer Products +049c Acer Advanced Labs, Inc. + 0002 Keyboard (???) +049d VLSI Technology +049f Compaq Computer Corp. + 000e Internet Keyboard + 0051 KU-0133 Easy Access Interner Keyboard +04a0 Digital Equipment Corp. +04a1 SystemSoft Corp. +04a2 FirePower Systems +04a3 Trident Microsystems, Inc. +04a4 Hitachi, Ltd +04a5 Acer Peripherals Inc. (now BenQ Corp.) + 0001 Keyboard +04a6 Nokia Display Products +04a7 Visioneer +04a8 Multivideo Labs, Inc. +04a9 Canon, Inc. +04aa DaeWoo Telecom, Ltd +04ab Chromatic Research +04ac Micro Audiometrics Corp. +04ad Dooin Electronics +04af Winnov L.P. +04b0 Nikon Corp. +04b1 Pan International +04b3 IBM Corp. + 3003 Rapid Access III Keyboard + 3004 Media Access Pro Keyboard + 300a Rapid Access IIIe Keyboard + 3016 UltraNav Keyboard Hub + 3018 UltraNav Keyboard + 301b SK-8815 Keyboard + 301c Enhanced Performance Keyboard + 3020 Enhanced Performance Keyboard + 3025 NetVista Full Width Keyboard + 4604 Keyboard w/ Card Reader +04b4 Cypress Semiconductor Corp. + 0101 Keyboard/Hub + 0102 Keyboard with APM + 5201 Combi Keyboard-Hub (Hub) + 5202 Combi Keyboard-Hub (Keyboard) + 8329 USB To keyboard/Mouse Converter +04b5 ROHM LSI Systems USA, LLC +04b6 Hint Corp. +04b7 Compal Electronics, Inc. +04b8 Seiko Epson Corp. +04b9 Rainbow Technologies, Inc. +04ba Toucan Systems, Ltd +04bb I-O Data Device, Inc. +04bd Toshiba Electronics Taiwan Corp. +04be Telia Research AB +04bf TDK Corp. +04c1 U.S. Robotics (3Com) +04c2 Methode Electronics Far East PTE, Ltd +04c3 Maxi Switch, Inc. +04c4 Lockheed Martin Energy Research +04c5 Fujitsu, Ltd +04c6 Toshiba America Electronic Components +04c7 Micro Macro Technologies +04c8 Konica Corp. +04ca Lite-On Technology Corp. + 0020 USB Keyboard + 004b Keyboard + 004f SK-9020 keyboard +04cb Fuji Photo Film Co., Ltd +04cc ST-Ericsson +04cd Tatung Co. Of America +04ce ScanLogic Corp. +04cf Myson Century, Inc. + 0022 OCZ Alchemy Series Elixir II Keyboard +04d0 Digi International +04d1 ITT Canon +04d2 Altec Lansing Technologies +04d3 VidUS, Inc. +04d4 LSI Logic, Inc. +04d5 Forte Technologies, Inc. +04d6 Mentor Graphics +04d7 Oki Semiconductor +04d8 Microchip Technology, Inc. +04d9 Holtek Semiconductor, Inc. + 0006 Wired Keyboard (78/79 key) [RPI Wired Keyboard 5] + 0022 Portable Keyboard + 0348 Keyboard + 1203 Keyboard + 1400 PS/2 keyboard + mouse controller + 1503 Keyboard + 1603 Keyboard + 1702 Keyboard LKS02 + 1818 Keyboard [Diatec Filco Majestouch 2] + 2011 Keyboard [Diatec Filco Majestouch 1] + 2013 Keyboard [Das Keyboard] + 2221 Keyboard + 2323 Keyboard + 4545 Keyboard [Diatec Majestouch 2 Tenkeyless] + a01c wireless multimedia keyboard with trackball [Trust ADURA 17911] + a055 Keyboard + a096 Keyboard +04da Panasonic (Matsushita) +04db Hypertec Pty, Ltd +04dc Huan Hsin Holdings, Ltd +04dd Sharp Corp. +04de MindShare, Inc. +04df Interlink Electronics +04e1 Iiyama North America, Inc. +04e2 Exar Corp. +04e3 Zilog, Inc. +04e4 ACC Microelectronics +04e5 Promise Technology +04e6 SCM Microsystems, Inc. + 5151 SCR338 Keyboard Smart Card Reader +04e7 Elo TouchSystems +04e8 Samsung Electronics Co., Ltd +04e9 PC-Tel, Inc. +04ea Brooktree Corp. +04eb Northstar Systems, Inc. +04ec Tokyo Electron Device, Ltd +04ed Annabooks +04ef Pacific Electronic International, Inc. +04f0 Daewoo Electronics Co., Ltd +04f1 Victor Company of Japan, Ltd +04f2 Chicony Electronics Co., Ltd + 0001 KU-8933 Keyboard + 0002 NT68P81 Keyboard + 0110 KU-2971 Keyboard + 0111 KU-9908 Keyboard + 0112 KU-8933 Keyboard with PS/2 Mouse port + 0116 KU-2971/KU-0325 Keyboard + 0201 Gaming Keyboard KPD0250 + 0402 Genius LuxeMate i200 Keyboard + 0403 KU-0420 keyboard + 0618 RG-0618U Wireless HID Receiver & KG-0609 Wireless Keyboard with Touchpad + 0760 Acer KU-0760 Keyboard + 0833 KU-0833 Keyboard + 0841 HP Multimedia Keyboard + 1061 HP KG-1061 Wireless Keyboard+Mouse + 1121 Periboard 717 Mini Wireless Keyboard +04f3 Elan Microelectronics Corp. + 0103 ActiveJet K-2024 Multimedia Keyboard + 01a4 Wireless Keyboard +04f4 Harting Elektronik, Inc. +04f5 Fujitsu-ICL Systems, Inc. +04f6 Norand Corp. +04f7 Newnex Technology Corp. +04f8 FuturePlus Systems +04f9 Brother Industries, Ltd +04fa Dallas Semiconductor +04fb Biostar Microtech International Corp. +04fc Sunplus Technology Co., Ltd + 05d8 Wireless keyboard/mouse +04fd Soliton Systems, K.K. +04fe PFU, Ltd + 0006 Happy Hacking Keyboard Lite2 +04ff E-CMOS Corp. +0500 Siam United Hi-Tech + 0001 DART Keyboard Mouse + 0002 DART-2 Keyboard +0501 Fujikura DDK, Ltd +0502 Acer, Inc. +0503 Hitachi America, Ltd +0504 Hayes Microcomputer Products +0506 3Com Corp. +0507 Hosiden Corp. +0508 Clarion Co., Ltd +0509 Aztech Systems, Ltd +050a Cinch Connectors +050b Cable System International +050c InnoMedia, Inc. +050d Belkin Components + 0200 Nostromo SpeedPad n52te Gaming Keyboard +050e Neon Technology, Inc. +050f KC Technology, Inc. +0510 Sejin Electron, Inc. + 0001 Keyboard + 1000 Keyboard with PS/2 Mouse Port +0511 N'Able (DataBook) Technologies, Inc. +0512 Hualon Microelectronics Corp. +0513 digital-X, Inc. +0514 FCI Electronics +0515 ACTC +0516 Longwell Electronics +0517 Butterfly Communications +0518 EzKEY Corp. + 0002 EZ-9900C Keyboard +0519 Star Micronics Co., Ltd +051a WYSE Technology +051b Silicon Graphics +051c Shuttle, Inc. +051d American Power Conversion +051e Scientific Atlanta, Inc. +051f IO Systems (Elite Electronics), Inc. +0520 Taiwan Semiconductor Manufacturing Co. +0521 Airborn Connectors +0522 Advanced Connectek, Inc. +0523 ATEN GmbH +0524 Sola Electronics +0525 Netchip Technology, Inc. +0526 Temic MHS S.A. +0527 ALTRA +0528 ATI Technologies, Inc. +0529 Aladdin Knowledge Systems +052a Crescent Heart Software +052b Tekom Technologies, Inc. +052c Canon Information Systems, Inc. +052d Avid Electronics Corp. +052e Standard Microsystems Corp. +052f Unicore Software, Inc. +0530 American Microsystems, Inc. +0531 Wacom Technology Corp. +0532 Systech Corp. +0533 Alcatel Mobile Phones +0534 Motorola, Inc. +0535 LIH TZU Electric Co., Ltd +0536 Hand Held Products (Welch Allyn, Inc.) +0537 Inventec Corp. +0538 Caldera International, Inc. (SCO) +0539 Shyh Shiun Terminals Co., Ltd +053a PrehKeyTec GmbH +053b Global Village Communication +053c Institut of Microelectronic & Mechatronic Systems +053d Silicon Architect +053e Mobility Electronics +053f Synopsys, Inc. +0540 UniAccess AB +0541 Sirf Technology, Inc. +0543 ViewSonic Corp. +0544 Cristie Electronics, Ltd +0545 Xirlink, Inc. +0546 Polaroid Corp. +0547 Anchor Chips, Inc. +0548 Tyan Computer Corp. +0549 Pixera Corp. +054a Fujitsu Microelectronics, Inc. +054b New Media Corp. +054c Sony Corp. +054d Try Corp. +054e Proside Corp. +054f WYSE Technology Taiwan +0550 Fuji Xerox Co., Ltd +0551 CompuTrend Systems, Inc. +0552 Philips Monitors +0553 STMicroelectronics Imaging Division (VLSI Vision) +0554 Dictaphone Corp. +0555 ANAM S&T Co., Ltd +0556 Asahi Kasei Microsystems Co., Ltd +0557 ATEN International Co., Ltd + 2004 UC-100KM PS/2 Mouse and Keyboard adapter + 2212 Keyboard/Mouse +0558 Truevision, Inc. +0559 Cadence Design Systems, Inc. +055a Kenwood USA +055b KnowledgeTek, Inc. +055c Proton Electronic Ind. +055d Samsung Electro-Mechanics Co. + 0001 Keyboard + 6780 Keyboard V1 + 6781 Keyboard Mouse +055e CTX Opto-Electronics Corp. +055f Mustek Systems, Inc. +0560 Interface Corp. +0561 Oasis Design, Inc. +0562 Telex Communications, Inc. +0563 Immersion Corp. +0564 Kodak Digital Product Center, Japan Ltd. (formerly Chinon Industries Inc.) +0565 Peracom Networks, Inc. +0566 Monterey International Corp. + 3002 Keyboard + 3013 BakkerElkhuizen Wired Keyboard S-board 840 Design + 3020 BakkerElkhuizen Wired Keyboard S-board 840 Design USB-Hub + 3107 Keyboard +0567 Xyratex International, Ltd +0568 Quartz Ingenierie +0569 SegaSoft +056a Wacom Co., Ltd +056b Decicon, Inc. +056c eTEK Labs +056d EIZO Corp. +056e Elecom Co., Ltd +056f Korea Data Systems Co., Ltd +0570 Epson America +0571 Interex, Inc. +0572 Conexant Systems (Rockwell), Inc. +0573 Zoran Co. Personal Media Division (Nogatech) +0574 City University of Hong Kong +0575 Philips Creative Display Solutions +0576 BAFO/Quality Computer Accessories +0577 ELSA +0578 Intrinsix Corp. +0579 GVC Corp. +057a Samsung Electronics America +057b Y-E Data, Inc. +057c AVM GmbH +057d Shark Multimedia, Inc. +057e Nintendo Co., Ltd +057f QuickShot, Ltd +0580 Denron, Inc. +0581 Racal Data Group +0582 Roland Corp. +0583 Padix Co., Ltd (Rockfire) +0584 RATOC System, Inc. +0585 FlashPoint Technology, Inc. +0586 ZyXEL Communications Corp. + 2011 Scorpion-980N keyboard +0587 America Kotobuki Electronics Industries, Inc. +0588 Sapien Design +0589 Victron +058a Nohau Corp. +058b Infineon Technologies +058c In Focus Systems +058d Micrel Semiconductor +058e Tripath Technology, Inc. +058f Alcor Micro Corp. + 2802 Monterey Keyboard + 9410 Keyboard + 9472 Keyboard Hub +0590 Omron Corp. +0591 Questra Consulting +0592 Powerware Corp. +0593 Incite +0594 Princeton Graphic Systems +0595 Zoran Microelectronics, Ltd +0596 MicroTouch Systems, Inc. +0597 Trisignal Communications +0598 Niigata Canotec Co., Inc. +0599 Brilliance Semiconductor, Inc. +059a Spectrum Signal Processing, Inc. +059b Iomega Corp. +059c A-Trend Technology Co., Ltd +059d Advanced Input Devices +059e Intelligent Instrumentation +059f LaCie, Ltd +05a0 Vetronix Corp. +05a1 USC Corp. +05a2 Fuji Film Microdevices Co., Ltd +05a3 ARC International +05a4 Ortek Technology, Inc. + 1000 WKB-1000S Wireless Ergo Keyboard with Touchpad + 2000 WKB-2000 Wireless Keyboard with Touchpad + 9720 Keyboard Mouse + 9722 Keyboard + 9731 MCK-600W/MCK-800USB Keyboard +05a5 Sampo Technology Corp. +05a6 Cisco Systems, Inc. + 0a01 Virtual Keyboard/Mouse +05a7 Bose Corp. +05a8 Spacetec IMC Corp. +05a9 OmniVision Technologies, Inc. +05aa Utilux South China, Ltd +05ab In-System Design +05ac Apple, Inc. + 0201 USB Keyboard [Alps or Logitech, M2452] + 0202 Keyboard [ALPS] + 0205 Extended Keyboard [Mitsumi] + 0206 Extended Keyboard [Mitsumi] + 020b Pro Keyboard [Mitsumi, A1048/US layout] + 020c Extended Keyboard [Mitsumi] + 020d Pro Keyboard [Mitsumi, A1048/JIS layout] + 020e Internal Keyboard/Trackpad (ANSI) + 020f Internal Keyboard/Trackpad (ISO) + 0214 Internal Keyboard/Trackpad (ANSI) + 0215 Internal Keyboard/Trackpad (ISO) + 0216 Internal Keyboard/Trackpad (JIS) + 0217 Internal Keyboard/Trackpad (ANSI) + 0218 Internal Keyboard/Trackpad (ISO) + 0219 Internal Keyboard/Trackpad (JIS) + 021a Internal Keyboard/Trackpad (ANSI) + 021b Internal Keyboard/Trackpad (ISO) + 021c Internal Keyboard/Trackpad (JIS) + 021d Aluminum Mini Keyboard (ANSI) + 021e Aluminum Mini Keyboard (ISO) + 021f Aluminum Mini Keyboard (JIS) + 0220 Aluminum Keyboard (ANSI) + 0221 Aluminum Keyboard (ISO) + 0222 Aluminum Keyboard (JIS) + 0223 Internal Keyboard/Trackpad (ANSI) + 0224 Internal Keyboard/Trackpad (ISO) + 0225 Internal Keyboard/Trackpad (JIS) + 0229 Internal Keyboard/Trackpad (ANSI) + 022a Internal Keyboard/Trackpad (MacBook Pro) (ISO) + 022b Internal Keyboard/Trackpad (MacBook Pro) (JIS) + 0230 Internal Keyboard/Trackpad (MacBook Pro 4,1) (ANSI) + 0231 Internal Keyboard/Trackpad (MacBook Pro 4,1) (ISO) + 0232 Internal Keyboard/Trackpad (MacBook Pro 4,1) (JIS) + 0236 Internal Keyboard/Trackpad (ANSI) + 0237 Internal Keyboard/Trackpad (ISO) + 0238 Internal Keyboard/Trackpad (JIS) + 023f Internal Keyboard/Trackpad (ANSI) + 0240 Internal Keyboard/Trackpad (ISO) + 0241 Internal Keyboard/Trackpad (JIS) + 0242 Internal Keyboard/Trackpad (ANSI) + 0243 Internal Keyboard/Trackpad (ISO) + 0244 Internal Keyboard/Trackpad (JIS) + 0245 Internal Keyboard/Trackpad (ANSI) + 0246 Internal Keyboard/Trackpad (ISO) + 0247 Internal Keyboard/Trackpad (JIS) + 024a Internal Keyboard/Trackpad (MacBook Air) (ISO) + 024d Internal Keyboard/Trackpad (MacBook Air) (ISO) + 024f Aluminium Keyboard (ANSI) + 0250 Aluminium Keyboard (ISO) + 0252 Internal Keyboard/Trackpad (ANSI) + 0253 Internal Keyboard/Trackpad (ISO) + 0254 Internal Keyboard/Trackpad (JIS) + 0259 Internal Keyboard/Trackpad + 025a Internal Keyboard/Trackpad + 0263 Apple Internal Keyboard / Trackpad (MacBook Retina) + 0267 Magic Keyboard A1644 + 0273 Internal Keyboard/Trackpad (ISO) + 1001 Keyboard Hub [ALPS] + 1002 Extended Keyboard Hub [Mitsumi] + 1003 Hub in Pro Keyboard [Mitsumi, A1048] + 1006 Hub in Aluminum Keyboard + 820a Bluetooth HID Keyboard +05ad Y.C. Cable U.S.A., Inc. +05ae Synopsys, Inc. +05af Jing-Mold Enterprise Co., Ltd + 0806 HP SK806A Keyboard + 0809 Wireless Keyboard and Mouse + 3062 Cordless Keyboard +05b0 Fountain Technologies, Inc. +05b1 First International Computer, Inc. +05b4 LG Semicon Co., Ltd +05b5 Dialogic Corp. +05b6 Proxima Corp. +05b7 Medianix Semiconductor, Inc. +05b8 SYSGRATION +05b9 Philips Research Laboratories +05ba DigitalPersona, Inc. +05bb Grey Cell Systems +05bc 3G Green Green Globe Co., Ltd +05bd RAFI GmbH & Co. KG +05be Tyco Electronics (Raychem) +05bf S & S Research +05c0 Keil Software +05c1 Kawasaki Microelectronics, Inc. +05c2 Media Phonics (Suisse) S.A. +05c5 Digi International, Inc. +05c6 Qualcomm, Inc. +05c7 Qtronix Corp. + 2001 Keyboard + 2011 SCorpius Keyboard +05c8 Cheng Uei Precision Industry Co., Ltd (Foxlink) +05c9 Semtech Corp. +05ca Ricoh Co., Ltd +05cb PowerVision Technologies, Inc. +05cc ELSA AG +05cd Silicom, Ltd +05ce sci-worx GmbH +05cf Sung Forn Co., Ltd +05d0 GE Medical Systems Lunar +05d1 Brainboxes, Ltd +05d2 Wave Systems Corp. +05d3 Tohoku Ricoh Co., Ltd +05d5 Super Gate Technology Co., Ltd +05d6 Philips Semiconductors, CICT +05d7 Thomas & Betts Corp. +05d8 Ultima Electronics Corp. +05d9 Axiohm Transaction Solutions +05da Microtek International, Inc. +05db Sun Corp. (Suntac?) +05dc Lexar Media, Inc. +05dd Delta Electronics, Inc. +05df Silicon Vision, Inc. +05e0 Symbol Technologies +05e1 Syntek Semiconductor Co., Ltd +05e2 ElecVision, Inc. +05e3 Genesys Logic, Inc. + 000a Keyboard with PS/2 Port + 0504 HID Keyboard Filter +05e4 Red Wing Corp. +05e5 Fuji Electric Co., Ltd +05e6 Keithley Instruments +05e8 ICC, Inc. +05e9 Kawasaki LSI +05eb FFC, Ltd +05ec COM21, Inc. +05ee Cytechinfo Inc. +05ef AVB, Inc. [anko?] +05f0 Canopus Co., Ltd +05f1 Compass Communications +05f2 Dexin Corp., Ltd +05f3 PI Engineering, Inc. + 0007 Kinesis Advantage PRO MPC/USB Keyboard + 0203 Y-mouse Keyboard & Mouse Adapter +05f5 Unixtar Technology, Inc. +05f6 AOC International +05f7 RFC Distribution(s) PTE, Ltd +05f9 PSC Scanning, Inc. + 2206 Gryphon series (keyboard emulation mode) +05fa Siemens Telecommunications Systems, Ltd + 3301 Keyboard with PS/2 Mouse Port + 3302 Keyboard + 3303 Keyboard with PS/2 Mouse Port +05fc Harman +05fd InterAct, Inc. +05fe Chic Technology Corp. +05ff LeCroy Corp. +0600 Barco Display Systems +0601 Jazz Hipster Corp. +0602 Vista Imaging, Inc. +0603 Novatek Microelectronics Corp. + 0002 Sino Wealth keyboard/mouse 2.4 GHz receiver + 00f1 Keyboard (Labtec Ultra Flat Keyboard) + 00f2 Keyboard (Labtec Ultra Flat Keyboard) +0604 Jean Co., Ltd +0605 Anchor C&C Co., Ltd +0606 Royal Information Electronics Co., Ltd +0607 Bridge Information Co., Ltd +0608 Genrad Ads +0609 SMK Manufacturing, Inc. +060a Worthington Data Solutions, Inc. +060b Solid Year + 0001 MacAlly Keyboard + 0230 KSK-8003 UX Keyboard + 0540 DeltaCo TB-106U Keyboard + 1006 Japanese Keyboard - 260U + 2101 Keyboard + 2231 KSK-6001 UELX Keyboard + 2270 Gigabyte K8100 Aivia Gaming Keyboard + 500a Cougar 500k Gaming Keyboard + 5253 Thermaltake MEKA G-Unit Gaming Keyboard + 5811 ACK-571U Wireless Keyboard + 5903 Japanese Keyboard - 595U + 6002 SolidTek USB Keyboard + 6003 Japanese Keyboard - 600HM + 6231 Thermaltake eSPORTS Meka Keyboard +060c EEH Datalink GmbH +060d Auctor Corp. +060e Transmonde Technologies, Inc. +060f Joinsoon Electronics Mfg. Co., Ltd +0610 Costar Electronics, Inc. +0611 Totoku Electric Co., Ltd +0613 TransAct Technologies, Inc. +0614 Bio-Rad Laboratories +0615 Quabbin Wire & Cable Co., Inc. +0616 Future Techno Designs PVT, Ltd +0617 Swiss Federal Insitute of Technology +0618 MacAlly +0619 Seiko Instruments, Inc. +061a Veridicom International, Inc. +061b Promptus Communications, Inc. +061c Act Labs, Ltd +061d Quatech, Inc. +061e Nissei Electric Co. +0620 Alaris, Inc. +0621 ODU-Steckverbindungssysteme GmbH & Co. KG +0622 Iotech, Inc. +0623 Littelfuse, Inc. +0624 Avocent Corp. + 0249 Virtual Keyboard/Mouse + 0402 Cisco Virtual Keyboard and Mouse +0625 TiMedia Technology Co., Ltd +0626 Nippon Systems Development Co., Ltd +0627 Adomax Technology Co., Ltd +0628 Tasking Software, Inc. +0629 Zida Technologies, Ltd +062a MosArt Semiconductor Corp. + 0102 Wireless Keyboard/Mouse Combo [MK1152WC] + 0201 Defender Office Keyboard (K7310) S Zodiak KM-9010 + 4101 Wireless Keyboard/Mouse +062b Greatlink Electronics Taiwan, Ltd +062c Institute for Information Industry +062d Taiwan Tai-Hao Enterprises Co., Ltd +062e Mainsuper Enterprises Co., Ltd +062f Sin Sheng Terminal & Machine, Inc. +0631 JUJO Electronics Corp. +0633 Cyrix Corp. +0634 Micron Technology, Inc. +0635 Methode Electronics, Inc. +0636 Sierra Imaging, Inc. +0638 Avision, Inc. +0639 Chrontel, Inc. +063a Techwin Corp. +063b Taugagreining HF +063c Yamaichi Electronics Co., Ltd (Sakura) +063d Fong Kai Industrial Co., Ltd +063e RealMedia Technology, Inc. +063f New Technology Cable, Ltd +0640 Hitex Development Tools +0641 Woods Industries, Inc. +0642 VIA Medical Corp. +0644 TEAC Corp. +0645 Who? Vision Systems, Inc. +0646 UMAX +0647 Acton Research Corp. +0648 Inside Out Networks +0649 Weli Science Co., Ltd +064b Analog Devices, Inc. (White Mountain DSP) +064c Ji-Haw Industrial Co., Ltd +064d TriTech Microelectronics, Ltd +064e Suyin Corp. +064f WIBU-Systems AG +0650 Dynapro Systems +0651 Likom Technology Sdn. Bhd. +0652 Stargate Solutions, Inc. +0653 CNF, Inc. +0654 Granite Microsystems, Inc. +0655 Space Shuttle Hi-Tech Co., Ltd +0656 Glory Mark Electronic, Ltd +0657 Tekcon Electronics Corp. +0658 Sigma Designs, Inc. +0659 Aethra +065a Optoelectronics Co., Ltd + 0001 Opticon OPR-2001 / NLV-1001 (keyboard mode) +065b Tracewell Systems +065e Silicon Graphics +065f Good Way Technology Co., Ltd & GWC technology Inc. +0660 TSAY-E (BVI) International, Inc. +0661 Hamamatsu Photonics K.K. +0662 Kansai Electric Co., Ltd +0663 Topmax Electronic Co., Ltd +0664 ET&T Technology Co., Ltd. +0665 Cypress Semiconductor +0667 Aiwa Co., Ltd +0668 WordWand +0669 Oce' Printing Systems GmbH +066a Total Technologies, Ltd +066b Linksys, Inc. +066d Entrega, Inc. +066e Acer Semiconductor America, Inc. +066f SigmaTel, Inc. +0670 Sequel Imaging +0672 Labtec, Inc. +0673 HCL + 5000 Keyboard +0674 Key Mouse Electronic Enterprise Co., Ltd +0675 DrayTek Corp. +0676 Teles AG +0677 Aiwa Co., Ltd +0678 ACard Technology Corp. +067b Prolific Technology, Inc. +067c Efficient Networks, Inc. +067d Hohner Corp. +067e Intermec Technologies Corp. + 0801 HID Keyboard, Barcode scanner +067f Virata, Ltd +0680 Realtek Semiconductor Corp., CPP Div. (Avance Logic) +0681 Siemens Information and Communication Products +0682 Victor Company of Japan, Ltd +0684 Actiontec Electronics, Inc. +0685 ZD Incorporated +0686 Minolta Co., Ltd +068a Pertech, Inc. +068b Potrans International, Inc. +068e CH Products, Inc. +068f Nihon KOHDEN +0690 Golden Bridge Electech, Inc. +0693 Hagiwara Sys-Com Co., Ltd +0694 Lego Group +0698 Chuntex (CTX) +0699 Tektronix, Inc. +069a Askey Computer Corp. +069b Thomson, Inc. +069d Hughes Network Systems (HNS) +069e Welcat Inc. +069f Allied Data Technologies BV +06a2 Topro Technology, Inc. +06a3 Saitek PLC + 8000 Gamers' Keyboard + 8020 Eclipse Keyboard + 8021 Eclipse II Keyboard +06a4 Xiamen Doowell Electron Co., Ltd +06a5 Divio +06a7 MicroStore, Inc. +06a8 Topaz Systems, Inc. +06a9 Westell +06aa Sysgration, Ltd +06ac Fujitsu Laboratories of America, Inc. +06ad Greatland Electronics Taiwan, Ltd +06ae Professional Multimedia Testing Centre +06af Harting, Inc. of North America +06b8 Pixela Corp. +06b9 Alcatel Telecom +06ba Smooth Cord & Connector Co., Ltd +06bb EDA, Inc. +06bc Oki Data Corp. +06bd AGFA-Gevaert NV +06be AME Optimedia Technology Co., Ltd +06bf Leoco Corp. +06c2 Phidgets Inc. (formerly GLAB) +06c4 Bizlink International Corp. +06c5 Hagenuk, GmbH +06c6 Infowave Software, Inc. +06c8 SIIG, Inc. +06c9 Taxan (Europe), Ltd +06ca Newer Technology, Inc. +06cb Synaptics, Inc. +06cc Terayon Communication Systems +06cd Keyspan +06ce Contec +06cf SpheronVR AG +06d0 LapLink, Inc. +06d1 Daewoo Electronics Co., Ltd +06d3 Mitsubishi Electric Corp. +06d4 Cisco Systems +06d5 Toshiba + 4000 Japanese Keyboard +06d6 Aashima Technology B.V. +06d7 Network Computing Devices (NCD) +06d8 Technical Marketing Research, Inc. +06da Phoenixtec Power Co., Ltd +06db Paradyne +06dc Foxlink Image Technology Co., Ltd +06de Heisei Electronics Co., Ltd +06e0 Multi-Tech Systems, Inc. +06e1 ADS Technologies, Inc. +06e4 Alcatel Microelectronics +06e6 Tiger Jet Network, Inc. +06ea Sirius Technologies +06eb PC Expert Tech. Co., Ltd +06ef I.A.C. Geometrische Ingenieurs B.V. +06f0 T.N.C Industrial Co., Ltd +06f1 Opcode Systems, Inc. +06f2 Emine Technology Co. + 0011 KVM Switch Keyboard +06f6 Wintrend Technology Co., Ltd +06f7 Wailly Technology Ltd +06f8 Guillemot Corp. +06f9 ASYST electronic d.o.o. +06fa HSD S.r.L +06fc Motorola Semiconductor Products Sector +06fd Boston Acoustics +06fe Gallant Computer, Inc. +0701 Supercomal Wire & Cable SDN. BHD. +0703 Bvtech Industry, Inc. +0705 NKK Corp. +0706 Ariel Corp. +0707 Standard Microsystems Corp. +0708 Putercom Co., Ltd +0709 Silicon Systems, Ltd (SSL) +070a Oki Electric Industry Co., Ltd +070d Comoss Electronic Co., Ltd +070e Excel Cell Electronic Co., Ltd +0710 Connect Tech, Inc. +0711 Magic Control Technology Corp. + 0260 PS/2 Keyboard and Mouse +0713 Interval Research Corp. +0714 NewMotion, Inc. +0717 ZNK Corp. +0718 Imation Corp. +0719 Tremon Enterprises Co., Ltd +071b Domain Technologies, Inc. +071c Xionics Document Technologies, Inc. +071d Eicon Networks Corp. +071e Ariston Technologies +0720 Keyence Corp. +0723 Centillium Communications Corp. +0726 Vanguard International Semiconductor-America +0729 Amitm +072e Sunix Co., Ltd +072f Advanced Card Systems, Ltd +0731 Susteen, Inc. +0732 Goldfull Electronics & Telecommunications Corp. +0733 ViewQuest Technologies, Inc. +0734 Lasat Communications A/S +0735 Asuscom Network +0736 Lorom Industrial Co., Ltd +0738 Mad Catz, Inc. + a109 S.T.R.I.K.E.7 Keyboard +073a Chaplet Systems, Inc. +073b Suncom Technologies +073c Industrial Electronic Engineers, Inc. +073d Eutron S.p.a. +073e NEC, Inc. +0742 Stollmann +0745 Syntech Information Co., Ltd +0746 Onkyo Corp. +0747 Labway Corp. +0748 Strong Man Enterprise Co., Ltd +0749 EVer Electronics Corp. +074a Ming Fortune Industry Co., Ltd +074b Polestar Tech. Corp. +074c C-C-C Group PLC +074d Micronas GmbH +074e Digital Stream Corp. +0755 Aureal Semiconductor +0757 Network Technologies, Inc. +0758 Carl Zeiss Microscopy GmbH +075b Sophisticated Circuits, Inc. +0763 M-Audio +0764 Cyber Power System, Inc. +0765 X-Rite, Inc. +0766 Jess-Link Products Co., Ltd +0767 Tokheim Corp. +0768 Camtel Technology Corp. +0769 Surecom Technology Corp. +076a Smart Technology Enablers, Inc. +076b OmniKey AG + a011 CCID Smart Card Reader Keyboard +076c Partner Tech +076d Denso Corp. +076e Kuan Tech Enterprise Co., Ltd +076f Jhen Vei Electronic Co., Ltd +0770 Welch Allyn, Inc - Medical Division +0771 Observator Instruments BV +0772 Your data Our Care +0774 AmTRAN Technology Co., Ltd +0775 Longshine Electronics Corp. +0776 Inalways Corp. +0777 Comda Enterprise Corp. +0778 Volex, Inc. +0779 ON Semiconductor (formerly Fairchild) +077a Sankyo Seiki Mfg. Co., Ltd +077b Linksys +077c Forward Electronics Co., Ltd + 0005 NEC Keyboard +077d Griffin Technology +077e Softing AG +077f Well Excellent & Most Corp. +0780 Sagem Monetel GmbH +0781 SanDisk Corp. +0782 Trackerball +0783 C3PO +0784 Vivitar, Inc. +0785 NTT-ME +0789 Logitec Corp. +078b Happ Controls, Inc. +078c GTCO/CalComp +078e Brincom, Inc. +0790 Pro-Image Manufacturing Co., Ltd +0791 Copartner Wire and Cable Mfg. Corp. +0792 Axis Communications AB +0793 Wha Yu Industrial Co., Ltd +0794 ABL Electronics Corp. +0795 RealChip, Inc. +0796 Certicom Corp. +0797 Grandtech Semiconductor Corp. +0798 Optelec +0799 Altera +079b Sagem +079d Alfadata Computer Corp. +07a1 Digicom S.p.A. +07a2 National Technical Systems +07a3 Onnto Corp. +07a4 Be, Inc. +07a6 ADMtek, Inc. +07aa Corega K.K. +07ab Freecom Technologies +07af Microtech +07b0 Trust Technologies +07b1 IMP, Inc. +07b2 Motorola BCS, Inc. +07b3 Plustek, Inc. +07b4 Olympus Optical Co., Ltd +07b5 Mega World International, Ltd +07b6 Marubun Corp. +07b7 TIME Interconnect, Ltd +07b8 AboCom Systems Inc +07bc Canon Computer Systems, Inc. +07bd Webgear, Inc. +07be Veridicom +07c0 Code Mercenaries Hard- und Software GmbH +07c1 Keisokugiken +07c4 Datafab Systems, Inc. +07c5 APG Cash Drawer +07c6 ShareWave, Inc. +07c7 Powertech Industrial Co., Ltd +07c8 B.U.G., Inc. +07c9 Allied Telesyn International +07ca AVerMedia Technologies, Inc. +07cb Kingmax Technology, Inc. +07cc Carry Computer Eng., Co., Ltd +07cd Elektor +07ce Nidec Copal +07cf Casio Computer Co., Ltd + 6802 MIDI Keyboard + 6803 CTK-3500 (MIDI keyboard) +07d0 Dazzle +07d1 D-Link System +07d2 Aptio Products, Inc. +07d3 Cyberdata Corp. +07d5 Radiant Systems +07d7 GCC Technologies, Inc. +07da Arasan Chip Systems +07de Diamond Multimedia +07df David Electronics Co., Ltd +07e0 NCP engineering GmbH +07e1 Ambient Technologies, Inc. +07e2 Elmeg GmbH & Co., Ltd +07e3 Planex Communications, Inc. +07e4 Movado Enterprise Co., Ltd +07e5 QPS, Inc. +07e6 Allied Cable Corp. +07e7 Mirvo Toys, Inc. +07e8 Labsystems +07ea Iwatsu Electric Co., Ltd +07eb Double-H Technology Co., Ltd +07ec Taiyo Electric Wire & Cable Co., Ltd +07ee Torex Retail (formerly Logware) +07ef STSN +07f2 Microcomputer Applications, Inc. +07f6 Circuit Assembly Corp. +07f7 Century Corp. +07f9 Dotop Technology, Inc. +07fa DrayTek Corp. +07fc Thomann + 1113 SWISSONIC EasyKeys61 Midikeyboard +07fd Mark of the Unicorn +07ff Unknown +0801 MagTek + 0001 Mini Swipe Reader (Keyboard Emulation) +0802 Mako Technologies, LLC +0803 Zoom Telephonics, Inc. +0809 Genicom Technology, Inc. +080a Evermuch Technology Co., Ltd +080b Cross Match Technologies +080c Datalogic S.p.A. +080d Teco Image Systems Co., Ltd +0810 Personal Communication Systems, Inc. +0813 Mattel, Inc. +0819 eLicenser +081a MG Logic +081b Indigita Corp. +081c Mipsys +081e AlphaSmart, Inc. +081f Manta +0822 Reudo Corp. +0825 GC Protronics +0826 Data Transit +0827 BroadLogic, Inc. +0828 Sato Corp. +0829 DirecTV Broadband, Inc. (Telocity) +082d Handspring +0830 Palm, Inc. +0832 Kouwell Electronics Corp. +0833 Sourcenext Corp. +0835 Action Star Enterprise Co., Ltd +0836 TrekStor +0839 Samsung Techwin Co., Ltd +083a Accton Technology Corp. +083f Global Village +0840 Argosy Research, Inc. +0841 Rioport.com, Inc. +0844 Welland Industrial Co., Ltd +0846 NetGear, Inc. +084d Minton Optic Industry Co., Inc. +084e KB Gear +084f Empeg +0850 Fast Point Technologies, Inc. +0851 Macronix International Co., Ltd +0852 CSEM +0853 Topre Corporation + 0200 RealForce Compact Keyboard +0854 ActiveWire, Inc. +0856 B&B Electronics +0858 Hitachi Maxell, Ltd +0859 Minolta Systems Laboratory, Inc. +085a Xircom +085c ColorVision, Inc. +0862 Teletrol Systems, Inc. +0863 Filanet Corp. +0864 NetGear, Inc. +0867 Data Translation, Inc. +086a Emagic Soft- und Hardware GmbH +086c DeTeWe - Deutsche Telephonwerke AG & Co. +086e System TALKS, Inc. +086f MEC IMEX, Inc. +0870 Metricom +0871 SanDisk, Inc. +0873 Xpeed, Inc. +0874 A-Tec Subsystem, Inc. +0879 Comtrol Corp. +087c Adesso/Kbtek America, Inc. +087d Jaton Corp. +087e Fujitsu Computer Products of America +087f QualCore Logic Inc. +0880 APT Technologies, Inc. +0883 Recording Industry Association of America (RIAA) +0885 Boca Research, Inc. +0886 XAC Automation Corp. +0887 Hannstar Electronics Corp. +088a TechTools +088b MassWorks, Inc. +088c Swecoin AB +088e iLok +0892 DioGraphy, Inc. +0894 TSI Incorporated +0897 Lauterbach +089c United Technologies Research Cntr. +089d Icron Technologies Corp. +089e NST Co., Ltd +089f Primex Aerospace Co. +08a5 e9, Inc. +08a6 Toshiba TEC +08a8 Andrea Electronics +08a9 CWAV Inc. +08ac Macraigor Systems LLC +08ae Macally (Mace Group, Inc.) +08b0 Metrohm +08b4 Sorenson Vision, Inc. +08b7 NATSU +08b8 J. Gordon Electronic Design, Inc. +08b9 RadioShack Corp. (Tandy) +08bb Texas Instruments +08bd Citizen Watch Co., Ltd +08c3 Precise Biometrics + 0003 100 SC BioKeyboard + 0006 100 A BioKeyboard +08c4 Proxim, Inc. +08c7 Key Nice Enterprise Co., Ltd +08c8 2Wire, Inc. +08c9 Nippon Telegraph and Telephone Corp. +08ca Aiptek International, Inc. +08cd Jue Hsun Ind. Corp. +08ce Long Well Electronics Corp. +08cf Productivity Enhancement Products +08d1 smartBridges, Inc. +08d3 Virtual Ink +08d4 Fujitsu Siemens Computers +08d8 IXXAT Automation GmbH +08d9 Increment P Corp. +08dd Billionton Systems, Inc. +08de ??? +08df Spyrus, Inc. +08e3 Olitec, Inc. +08e4 Pioneer Corp. +08e5 Litronic +08e6 Gemalto (was Gemplus) +08e7 Pan-International Wire & Cable +08e8 Integrated Memory Logic +08e9 Extended Systems, Inc. +08ea Ericsson, Inc., Blue Ridge Labs +08ec M-Systems Flash Disk Pioneers +08ed MediaTek Inc. +08ee CCSI/Hesso +08f0 Corex Technologies +08f1 CTI Electronics Corp. +08f2 Gotop Information Inc. +08f5 SysTec Co., Ltd +08f6 Logic 3 International, Ltd +08f7 Vernier +08f8 Keen Top International Enterprise Co., Ltd +08f9 Wipro Technologies +08fa Caere +08fb Socket Communications +08fc Sicon Cable Technology Co., Ltd +08fd Digianswer A/S +08ff AuthenTec, Inc. +0900 Pinnacle Systems, Inc. +0901 VST Technologies +0906 Faraday Technology Corp. +0908 Siemens AG + 04b3 keyboard front panel Cockpit +0909 Audio-Technica Corp. +090a Trumpion Microelectronics, Inc. +090b Neurosmith +090c Silicon Motion, Inc. - Taiwan (formerly Feiya Technology Corp.) +090d Multiport Computer Vertriebs GmbH +090e Shining Technology, Inc. +090f Fujitsu Devices, Inc. +0910 Alation Systems, Inc. +0911 Philips Speech Processing +0912 Voquette, Inc. +0915 GlobeSpan, Inc. +0917 SmartDisk Corp. +0919 Tiger Electronics +091e Garmin International +0920 Echelon Co. +0921 GoHubs, Inc. +0922 Dymo-CoStar Corp. +0923 IC Media Corp. +0924 Xerox +0925 Lakeview Research +0927 Summus, Ltd +0928 PLX Technology, Inc. (formerly Oxford Semiconductor, Ltd) +0929 American Biometric Co. +092a Toshiba Information & Industrial Sys. And Services +092b Sena Technologies, Inc. +092f Northern Embedded Science/CAVNEX +0930 Toshiba Corp. +0931 Harmonic Data Systems, Ltd +0932 Crescentec Corp. +0933 Quantum Corp. +0934 Spirent Communications +0936 NuTesla +0939 Lumberg, Inc. +093a Pixart Imaging, Inc. +093b Plextor Corp. +093c Intrepid Control Systems, Inc. +093d InnoSync, Inc. +093e J.S.T. Mfg. Co., Ltd +093f Olympia Telecom Vertriebs GmbH +0940 Japan Storage Battery Co., Ltd +0941 Photobit Corp. +0942 i2Go.com, LLC +0943 HCL Technologies India Private, Ltd +0944 KORG, Inc. + 010d nanoKEY MIDI keyboard +0945 Pasco Scientific +0948 Kronauer music in digital +094b Linkup Systems Corp. +094d Cable Television Laboratories +094f Yano +0951 Kingston Technology +0954 RPM Systems Corp. +0955 NVIDIA Corp. +0956 BSquare Corp. +0957 Agilent Technologies, Inc. +0958 CompuLink Research, Inc. +0959 Cologne Chip AG +095a Portsmith +095b Medialogic Corp. +095c K-Tec Electronics +095d Polycom, Inc. +0964 BITRAN +0967 Acer NeWeb Corp. +0968 Catalyst Enterprises, Inc. +096e Feitian Technologies, Inc. +0971 Gretag-Macbeth AG +0973 Schlumberger +0974 Datagraphix, a business unit of Anacomp +0975 OL'E Communications, Inc. +0976 Adirondack Wire & Cable +0977 Lightsurf Technologies +0978 Beckhoff GmbH +0979 Jeilin Technology Corp., Ltd +097a Minds At Work LLC +097b Knudsen Engineering, Ltd +097c Marunix Co., Ltd +097d Rosun Technologies, Inc. +097e Biopac Systems Inc. +097f Barun Electronics Co., Ltd +0981 Oak Technology, Ltd +0984 Apricorn +0985 cab Produkttechnik GmbH & Co KG +0986 Matsushita Electric Works, Ltd. +098c Vitana Corp. +098d INDesign +098e Integrated Intellectual Property, Inc. +098f Kenwood TMI Corp. +0993 Gemstar eBook Group, Ltd +0996 Integrated Telecom Express, Inc. +099a Zippy Technology Corp. + 0638 Sanwa Supply Inc. Small Keyboard + 610c EL-610 Super Mini Electron luminescent Keyboard + 6330 SANWA Supply Inc. Slim Keyboard + 713a WK-713 Multimedia Keyboard + 7160 Hyper Slim Keyboard +099e Trimble Navigation, Ltd +09a3 PairGain Technologies +09a4 Contech Research, Inc. +09a5 VCON Telecommunications +09a6 Poinchips +09a7 Data Transmission Network Corp. +09a8 Lin Shiung Enterprise Co., Ltd +09a9 Smart Card Technologies Co., Ltd +09aa Intersil Corp. +09ab Japan Cash Machine Co., Ltd. +09ae Tripp Lite +09b0 Fargo +09b2 Franklin Electronic Publishers, Inc. +09b3 Altius Solutions, Inc. +09b4 MDS Telephone Systems +09b5 Celltrix Technology Co., Ltd +09bc Grundig +09be MySmart.Com +09bf Auerswald GmbH & Co. KG +09c0 Genpix Electronics, LLC +09c1 Arris Interactive LLC +09c2 Nisca Corp. +09c3 HID Global +09c4 ACTiSYS Corp. +09c5 Memory Corp. +09ca BMC Messsysteme GmbH +09cb FLIR Systems +09cc Workbit Corp. +09cd Psion Dacom Home Networks, Ltd +09ce City Electronics, Ltd +09cf Electronics Testing Center, Taiwan +09d1 NeoMagic, Inc. +09d2 Vreelin Engineering, Inc. +09d3 Com One +09d7 NovAtel Inc. +09d8 ELATEC GmbH +09d9 KRF Tech, Ltd +09da A4Tech Co., Ltd. + 0260 KV-300H Isolation Keyboard +09db Measurement Computing Corp. +09dc Aimex Corp. +09dd Fellowes, Inc. +09df Addonics Technologies Corp. +09e1 Intellon Corp. +09e5 Jo-Dan International, Inc. +09e6 Silutia, Inc. +09e7 Real 3D, Inc. +09e8 AKAI Professional M.I. Corp. + 0071 MPK25 MIDI Keyboard + 0076 LPK25 MIDI Keyboard +09e9 Chen-Source, Inc. +09eb IM Networks, Inc. +09ef Xitel +09f3 GoFlight, Inc. +09f5 AresCom +09f6 RocketChips, Inc. +09f7 Edu-Science (H.K.), Ltd +09f8 SoftConnex Technologies, Inc. +09f9 Bay Associates +09fa Mtek Vision +09fb Altera +09ff Gain Technology Corp. +0a00 Liquid Audio +0a01 ViA, Inc. +0a05 Unknown Manufacturer +0a07 Ontrak Control Systems Inc. +0a0b Cybex Computer Products Co. +0a0d Servergy, Inc +0a11 Xentec, Inc. +0a12 Cambridge Silicon Radio, Ltd +0a13 Telebyte, Inc. +0a14 Spacelabs Medical, Inc. +0a15 Scalar Corp. +0a16 Trek Technology (S) PTE, Ltd +0a17 Pentax Corp. +0a18 Heidelberger Druckmaschinen AG +0a19 Hua Geng Technologies, Inc. +0a21 Medtronic Physio Control Corp. +0a22 Century Semiconductor USA, Inc. +0a27 Datacard Group +0a2c AK-Modul-Bus Computer GmbH +0a34 TG3 Electronics, Inc. + 0110 Deck 82-key backlit keyboard +0a35 Radikal Technologies +0a39 Gilat Satellite Networks, Ltd +0a3a PentaMedia Co., Ltd +0a3c NTT DoCoMo, Inc. +0a3d Varo Vision +0a3f Swissonic AG +0a43 Boca Systems, Inc. +0a46 Davicom Semiconductor, Inc. +0a47 Hirose Electric +0a48 I/O Interconnect +0a4a Ploytec GmbH +0a4b Fujitsu Media Devices, Ltd +0a4c Computex Co., Ltd +0a4d Evolution Electronics, Ltd + 008e MK-249C MIDI Keyboard + 00a3 MK-461C MIDI Keyboard +0a4e Steinberg Soft-und Hardware GmbH +0a4f Litton Systems, Inc. +0a50 Mimaki Engineering Co., Ltd +0a51 Sony Electronics, Inc. +0a52 Jebsee Electronics Co., Ltd +0a53 Portable Peripheral Co., Ltd +0a5a Electronics For Imaging, Inc. +0a5b EAsics NV +0a5c Broadcom Corp. + 4502 Keyboard (Boot Interface Subclass) + 5803 BCM5880 Secure Applications Processor with secure keyboard +0a5d Diatrend Corp. +0a5f Zebra +0a62 MPMan +0a66 ClearCube Technology +0a67 Medeli Electronics Co., Ltd +0a68 Comaide Corp. +0a69 Chroma ate, Inc. +0a6b Green House Co., Ltd +0a6c Integrated Circuit Systems, Inc. +0a6d UPS Manufacturing +0a6e Benwin +0a6f Core Technology, Inc. +0a70 International Game Technology +0a71 VIPColor Technologies USA, Inc. +0a72 Sanwa Denshi +0a73 Mackie Designs +0a7d NSTL, Inc. +0a7e Octagon Systems Corp. +0a80 Rexon Technology Corp., Ltd +0a81 Chesen Electronics Corp. + 0101 Keyboard + 0103 Keyboard + 0205 PS/2 Keyboard+Mouse Adapter +0a82 Syscan +0a83 NextComm, Inc. +0a84 Maui Innovative Peripherals +0a85 Idexx Labs +0a86 NITGen Co., Ltd +0a89 Aktiv +0a8d Picturetel +0a8e Japan Aviation Electronics Industry, Ltd +0a90 Candy Technology Co., Ltd +0a91 Globlink Technology, Inc. +0a92 EGO SYStems, Inc. +0a93 C Technologies AB +0a94 Intersense +0aa3 Lava Computer Mfg., Inc. +0aa4 Develco Elektronik +0aa5 First International Digital +0aa6 Perception Digital, Ltd +0aa7 Wincor Nixdorf International GmbH + 0100 POS Keyboard, TA58P-USB + 0101 POS Keyboard, TA85P-USB + 0102 POS Keyboard, TA59-USB + 0103 POS Keyboard, TA60-USB + 0104 SNIkey Keyboard, SNIKey-KB-USB + 0502 Hub SNIKey Keyboard +0aa8 TriGem Computer, Inc. +0aa9 Baromtec Co. +0aaa Japan CBM Corp. +0aab Vision Shape Europe SA +0aac iCompression, Inc. +0aad Rohde & Schwarz GmbH & Co. KG +0aae NEC infrontia Corp. (Nitsuko) +0aaf Digitalway Co., Ltd +0ab0 Arrow Strong Electronics Co., Ltd +0ab1 FEIG ELECTRONIC GmbH +0aba Ellisys +0abe Stereo-Link +0abf Diolan +0ac3 Sanyo Semiconductor Company Micro +0ac4 Leco Corp. +0ac5 I & C Corp. +0ac6 Singing Electrons, Inc. +0ac7 Panwest Corp. +0ac8 Z-Star Microelectronics Corp. +0ac9 Micro Solutions, Inc. +0aca OPEN Networks Ltd +0acc Koga Electronics Co. +0acd ID Tech +0ace ZyDAS +0acf Intoto, Inc. +0ad0 Intellix Corp. +0ad1 Remotec Technology, Ltd +0ad2 Service & Quality Technology Co., Ltd +0ada Data Encryption Systems Ltd. +0ae3 Allion Computer, Inc. +0ae4 Taito Corp. +0ae7 Neodym Systems, Inc. +0ae8 System Support Co., Ltd +0ae9 North Shore Circuit Design L.L.P. +0aea SciEssence, LLC +0aeb TTP Communications, Ltd +0aec Neodio Technologies Corp. +0af0 Option +0af6 Silver I Co., Ltd +0af7 B2C2, Inc. +0af9 Hama, Inc. +0afa DMC Co., Ltd. +0afc Zaptronix Ltd +0afd Tateno Dennou, Inc. +0afe Cummins Engine Co. +0aff Jump Zone Network Products, Inc. +0b00 INGENICO +0b05 ASUSTek Computer, Inc. +0b0b Datamax-O'Neil +0b0c Todos AB +0b0d ProjectLab +0b0e GN Netcom +0b0f AVID Technology +0b10 Pcally +0b11 I Tech Solutions Co., Ltd +0b1e Electronic Warfare Assoc., Inc. (EWA) +0b1f Insyde Software Corp. +0b20 TransDimension, Inc. +0b21 Yokogawa Electric Corp. +0b22 Japan System Development Co., Ltd +0b23 Pan-Asia Electronics Co., Ltd +0b24 Link Evolution Corp. +0b27 Ritek Corp. +0b28 Kenwood Corp. +0b2c Village Center, Inc. +0b30 PNY Technologies, Inc. +0b33 Contour Design, Inc. +0b37 Hitachi ULSI Systems Co., Ltd +0b38 Gear Head + 0003 Keyboard + 0010 107-Key Keyboard +0b39 Omnidirectional Control Technology, Inc. +0b3a IPaxess +0b3b Tekram Technology Co., Ltd +0b3c Olivetti Techcenter +0b3e Kikusui Electronics Corp. +0b41 Hal Corp. +0b43 Play.com, Inc. +0b47 Sportbug.com, Inc. +0b48 TechnoTrend AG +0b49 ASCII Corp. +0b4b Pine Corp. Ltd. +0b4d Graphtec America, Inc. +0b4e Musical Electronics, Ltd +0b50 Dumpries Co., Ltd +0b51 Comfort Keyboard Co. + 0020 Comfort Keyboard +0b52 Colorado MicroDisplay, Inc. +0b54 Sinbon Electronics Co., Ltd +0b56 TYI Systems, Ltd +0b57 Beijing HanwangTechnology Co., Ltd +0b59 Lake Communications, Ltd +0b5a Corel Corp. +0b5f Green Electronics Co., Ltd +0b60 Nsine, Ltd +0b61 NEC Viewtechnology, Ltd +0b62 Orange Micro, Inc. +0b63 ADLink Technology, Inc. +0b64 Wonderful Wire Cable Co., Ltd +0b65 Expert Magnetics Corp. +0b66 Cybiko Inc. +0b67 Fairbanks Scales +0b69 CacheVision +0b6a Maxim Integrated Products +0b6f Nagano Japan Radio Co., Ltd +0b70 PortalPlayer, Inc. +0b71 SHIN-EI Sangyo Co., Ltd +0b72 Embedded Wireless Technology Co., Ltd +0b73 Computone Corp. +0b75 Roland DG Corp. +0b79 Sunrise Telecom, Inc. +0b7a Zeevo, Inc. +0b7b Taiko Denki Co., Ltd +0b7c ITRAN Communications, Ltd +0b7d Astrodesign, Inc. +0b81 id3 Technologies +0b84 Rextron Technology, Inc. +0b85 Elkat Electronics, Sdn., Bhd. +0b86 Exputer Systems, Inc. +0b87 Plus-One I & T, Inc. +0b88 Sigma Koki Co., Ltd, Technology Center +0b89 Advanced Digital Broadcast, Ltd +0b8c SMART Technologies Inc. +0b95 ASIX Electronics Corp. +0b96 Sewon Telecom +0b97 O2 Micro, Inc. +0b98 Playmates Toys, Inc. +0b99 Audio International, Inc. +0b9b Dipl.-Ing. Stefan Kunde +0b9d Softprotec Co. +0b9f Chippo Technologies +0baf U.S. Robotics +0bb0 Concord Camera Corp. +0bb1 Infinilink Corp. +0bb2 Ambit Microsystems Corp. +0bb3 Ofuji Technology +0bb4 HTC (High Tech Computer Corp.) +0bb5 Murata Manufacturing Co., Ltd +0bb6 Network Alchemy +0bb7 Joytech Computer Co., Ltd +0bb8 Hitachi Semiconductor and Devices Sales Co., Ltd +0bb9 Eiger M&C Co., Ltd +0bba ZAccess Systems +0bbb General Meters Corp. +0bbc Assistive Technology, Inc. +0bbd System Connection, Inc. +0bc0 Knilink Technology, Inc. +0bc1 Fuw Yng Electronics Co., Ltd +0bc2 Seagate RSS LLC +0bc3 IPWireless, Inc. +0bc4 Microcube Corp. +0bc5 JCN Co., Ltd +0bc6 ExWAY, Inc. +0bc7 X10 Wireless Technology, Inc. +0bc8 Telmax Communications +0bc9 ECI Telecom, Ltd +0bca Startek Engineering, Inc. +0bcb Perfect Technic Enterprise Co., Ltd +0bd7 Andrew Pargeter & Associates +0bda Realtek Semiconductor Corp. +0bdb Ericsson Business Mobile Networks BV +0bdc Y Media Corp. +0bdd Orange PCS +0be2 Kanda Tsushin Kogyo Co., Ltd +0be3 TOYO Corp. +0be4 Elka International, Ltd +0be5 DOME imaging systems, Inc. +0be6 Dong Guan Humen Wonderful Wire Cable Factory +0bed MEI +0bee LTK Industries, Ltd +0bef Way2Call Communications +0bf0 Pace Micro Technology PLC +0bf1 Intracom S.A. +0bf2 Konexx +0bf6 Addonics Technologies, Inc. +0bf7 Sunny Giken, Inc. +0bf8 Fujitsu Siemens Computers + 100c Keyboard FSC KBPC PX + 1017 Keyboard KB SCR +0bfb Grass Valley Group +0bfd Kvaser AB +0c00 FireFly Mouse Mat +0c04 MOTO Development Group, Inc. +0c05 Appian Graphics +0c06 Hasbro Games, Inc. +0c07 Infinite Data Storage, Ltd +0c08 Agate +0c09 Comjet Information System +0c0a Highpoint Technologies, Inc. +0c0b Dura Micro, Inc. (Acomdata) +0c12 Zeroplus +0c15 Iris Graphics +0c16 Gyration, Inc. +0c17 Cyberboard A/S +0c18 SynerTek Korea, Inc. +0c19 cyberPIXIE, Inc. +0c1a Silicon Motion, Inc. +0c1b MIPS Technologies +0c1c Hang Zhou Silan Electronics Co., Ltd +0c1f Magicard +0c22 Tally Printer Corp. +0c23 Lernout + Hauspie +0c24 Taiyo Yuden +0c25 Sampo Corp. +0c26 Prolific Technology Inc. +0c27 RFIDeas, Inc +0c2e Metrologic Instruments + 0204 Metrologic MS7120 Barcode Scanner (keyboard mode) +0c30 Mutoh Industries Ltd +0c35 Eagletron, Inc. +0c36 E Ink Corp. +0c37 e.Digital +0c38 Der An Electric Wire & Cable Co., Ltd +0c39 IFR +0c3a Furui Precise Component (Kunshan) Co., Ltd +0c3b Komatsu, Ltd +0c3c Radius Co., Ltd +0c3d Innocom, Inc. +0c3e Nextcell, Inc. +0c44 Motorola iDEN +0c45 Microdia + 652f Backlit Gaming Keyboard +0c46 WaveRider Communications, Inc. +0c4a ALGE-TIMING GmbH +0c4b Reiner SCT Kartensysteme GmbH +0c4c Needham's Electronics +0c52 Sealevel Systems, Inc. +0c53 ViewPLUS, Inc. +0c54 Glory, Ltd +0c55 Spectrum Digital, Inc. +0c56 Billion Bright, Ltd +0c57 Imaginative Design Operation Co., Ltd +0c58 Vidar Systems Corp. +0c59 Dong Guan Shinko Wire Co., Ltd +0c5a TRS International Mfg., Inc. +0c5e Xytronix Research & Design +0c60 Apogee Electronics Corp. +0c62 Chant Sincere Co., Ltd +0c63 Toko, Inc. +0c64 Signality System Engineering Co., Ltd +0c65 Eminence Enterprise Co., Ltd +0c66 Rexon Electronics Corp. +0c67 Concept Telecom, Ltd +0c6a ACS +0c6c JETI Technische Instrumente GmbH +0c70 MCT Elektronikladen +0c72 PEAK System +0c74 Optronic Laboratories Inc. +0c76 JMTek, LLC. +0c77 Sipix Group, Ltd +0c78 Detto Corp. +0c79 NuConnex Technologies Pte., Ltd +0c7a Wing-Span Enterprise Co., Ltd +0c86 NDA Technologies, Inc. +0c88 Kyocera Wireless Corp. +0c89 Honda Tsushin Kogyo Co., Ltd +0c8a Pathway Connectivity, Inc. +0c8b Wavefly Corp. +0c8c Coactive Networks +0c8d Tempo +0c8e Cesscom Co., Ltd +0c8f Applied Microsystems +0c94 Cryptera +0c98 Berkshire Products, Inc. +0c99 Innochips Co., Ltd +0c9a Hanwool Robotics Corp. +0c9b Jobin Yvon, Inc. +0c9c Brand Innovators BV +0c9d SemTek +0ca2 Zyfer +0ca3 Sega Corp. +0ca4 ST&T Instrument Corp. +0ca5 BAE Systems Canada, Inc. +0ca6 Castles Technology Co., Ltd +0ca7 Information Systems Laboratories +0caa Allied Telesis KK. +0cad Motorola CGISS +0cae Ascom Business Systems, Ltd +0caf Buslink +0cb0 Flying Pig Systems +0cb1 Innovonics, Inc. +0cb6 Celestix Networks, Pte., Ltd +0cb7 Singatron Enterprise Co., Ltd +0cb8 Opticis Co., Ltd +0cba Trust Electronic (Shanghai) Co., Ltd +0cbb Shanghai Darong Electronics Co., Ltd +0cbc Palmax Technology Co., Ltd +0cbd Pentel Co., Ltd (Electronics Equipment Div.) +0cbe Keryx Technologies, Inc. +0cbf Union Genius Computer Co., Ltd +0cc0 Kuon Yi Industrial Corp. +0cc1 Given Imaging, Ltd +0cc2 Timex Corp. +0cc3 Rimage Corp. +0cc4 emsys GmbH +0cc5 Sendo +0cc6 Intermagic Corp. +0cc8 Technotools Corp. +0cc9 BroadMAX Technologies, Inc. +0cca Amphenol +0ccb SKNet Co., Ltd +0ccc Domex Technology Corp. +0ccd TerraTec Electronic GmbH +0cd4 Bang Olufsen +0cd5 LabJack Corporation +0cd6 Scheidt & Bachmann +0cd7 NewChip S.r.l. +0cd8 JS Digitech, Inc. +0cd9 Hitachi Shin Din Cable, Ltd +0cde Z-Com +0ce5 Validation Technologies International +0ce9 Pico Technology +0cf1 e-Conn Electronic Co., Ltd +0cf2 ENE Technology, Inc. +0cf3 Qualcomm Atheros Communications +0cf4 Fomtex Corp. +0cf5 Cellink Co., Ltd +0cf6 Compucable Corp. +0cf7 ishoni Networks +0cf8 Clarisys, Inc. +0cf9 Central System Research Co., Ltd +0cfa Inviso, Inc. +0cfc Minolta-QMS, Inc. +0cff SAFA MEDIA Co., Ltd. +0d06 telos EDV Systementwicklung GmbH +0d08 UTStarcom +0d0b Contemporary Controls +0d0c Astron Electronics Co., Ltd +0d0d MKNet Corp. +0d0e Hybrid Networks, Inc. +0d0f Feng Shin Cable Co., Ltd +0d10 Elastic Networks +0d11 Maspro Denkoh Corp. +0d12 Hansol Electronics, Inc. +0d13 BMF Corp. +0d14 Array Comm, Inc. +0d15 OnStream b.v. +0d16 Hi-Touch Imaging Technologies Co., Ltd +0d17 NALTEC, Inc. +0d18 coaXmedia +0d19 Hank Connection Industrial Co., Ltd +0d28 NXP +0d2f Andamiro +0d32 Leo Hui Electric Wire & Cable Co., Ltd +0d33 AirSpeak, Inc. +0d34 Rearden Steel Technologies +0d35 Dah Kun Co., Ltd +0d3a Posiflex Technologies, Inc. +0d3c Sri Cable Technology, Ltd +0d3d Tangtop Technology Co., Ltd + 0001 HID Keyboard +0d3e Fitcom, inc. +0d3f MTS Systems Corp. +0d40 Ascor, Inc. +0d41 Ta Yun Terminals Industrial Co., Ltd +0d42 Full Der Co., Ltd +0d46 Kobil Systems GmbH +0d48 Promethean Limited +0d49 Maxtor +0d4a NF Corp. +0d4b Grape Systems, Inc. +0d4c Tedas AG +0d4d Coherent, Inc. +0d4e Agere Systems Netherland BV +0d4f EADS Airbus France +0d50 Cleware GmbH +0d51 Volex (Asia) Pte., Ltd +0d53 HMI Co., Ltd +0d54 Holon Corp. +0d55 ASKA Technologies, Inc. +0d56 AVLAB Technology, Inc. +0d57 Solomon Microtech, Ltd +0d59 TRC Simulators b.v. +0d5c SMC Networks, Inc. +0d5e Myacom, Ltd +0d5f CSI, Inc. +0d60 IVL Technologies, Ltd +0d61 Meilu Electronics (Shenzhen) Co., Ltd +0d62 Darfon Electronics Corp. + 0004 Keyboard + 001b Keyboard + 001c Benq X120 Internet Keyboard Pro + 2021 AM805 Keyboard + 2106 Dell L20U Multimedia Keyboard + 910e HP Business Slim Keyboard +0d63 Fritz Gegauf AG +0d64 DXG Technology Corp. +0d65 KMJP Co., Ltd +0d66 TMT +0d67 Advanet, Inc. +0d68 Super Link Electronics Co., Ltd +0d69 NSI +0d6a Megapower International Corp. +0d6b And-Or Logic +0d70 Try Computer Co., Ltd +0d71 Hirakawa Hewtech Corp. +0d72 Winmate Communication, Inc. +0d73 Hit's Communications, Inc. +0d76 MFP Korea, Inc. +0d77 Power Sentry/Newpoint +0d78 Japan Distributor Corp. +0d7a MARX Datentechnik GmbH +0d7b Wellco Technology Co., Ltd +0d7c Taiwan Line Tek Electronic Co., Ltd +0d7d Phison Electronics Corp. +0d7e American Computer & Digital Components +0d7f Essential Reality LLC +0d80 H.R. Silvine Electronics, Inc. +0d81 TechnoVision +0d83 Think Outside, Inc. +0d87 Dolby Laboratories Inc. +0d89 Oz Software +0d8a King Jim Co., Ltd +0d8b Ascom Telecommunications, Ltd +0d8c C-Media Electronics, Inc. +0d8d Promotion & Display Technology, Ltd +0d8e Global Sun Technology, Inc. +0d8f Pitney Bowes +0d90 Sure-Fire Electrical Corp. +0d96 Skanhex Technology, Inc. +0d97 Santa Barbara Instrument Group +0d98 Mars Semiconductor Corp. +0d99 Trazer Technologies, Inc. +0d9a RTX AS +0d9b Tat Shing Electrical Co. +0d9c Chee Chen Hi-Technology Co., Ltd +0d9d Sanwa Supply, Inc. +0d9e Avaya +0d9f Powercom Co., Ltd +0da0 Danger Research +0da1 Suzhou Peter's Precise Industrial Co., Ltd +0da2 Land Instruments International, Ltd +0da3 Nippon Electro-Sensory Devices Corp. +0da4 Polar Electro Oy +0da7 IOGear, Inc. +0da8 softDSP Co., Ltd +0dab Cubig Group +0dad Westover Scientific +0db0 Micro Star International +0db1 Wen Te Electronics Co., Ltd +0db2 Shian Hwi Plug Parts, Plastic Factory +0db3 Tekram Technology Co., Ltd +0db4 Chung Fu Chen Yeh Enterprise Corp. +0db5 Access IS + 013a Barcode Module - Virtual Keyboard +0db7 ELCON Systemtechnik +0dba Digidesign +0dbc A&D Medical +0dbe Jiuh Shiuh Precision Industry Co., Ltd +0dbf Jess-Link International +0dc0 G7 Solutions (formerly Great Notions) +0dc1 Tamagawa Seiki Co., Ltd +0dc3 Athena Smartcard Solutions, Inc. +0dc4 inXtron, Inc. +0dc5 SDK Co., Ltd +0dc6 Precision Squared Technology Corp. + 2301 Wireless Touchpad Keyboard +0dc7 First Cable Line, Inc. +0dcd NetworkFab Corp. +0dd0 Access Solutions +0dd1 Contek Electronics Co., Ltd +0dd2 Power Quotient International Co., Ltd +0dd3 MediaQ +0dd4 Custom Engineering SPA +0dd5 California Micro Devices +0dd7 Kocom Co., Ltd +0dd8 Netac Technology Co., Ltd +0dd9 HighSpeed Surfing +0dda Integrated Circuit Solution, Inc. +0ddb Tamarack, Inc. +0ddd Datelink Technology Co., Ltd +0dde Ubicom, Inc. +0de0 BD Consumer Healthcare +0de7 USBmicro +0dea UTECH Electronic (D.G.) Co., Ltd. +0ded Novasonics +0dee Lifetime Memory Products +0def Full Rise Electronic Co., Ltd +0df4 NET&SYS +0df6 Sitecom Europe B.V. +0df7 Mobile Action Technology, Inc. +0dfa Toyo Communication Equipment Co., Ltd +0dfc GeneralTouch Technology Co., Ltd +0e03 Nippon Systemware Co., Ltd +0e08 Winbest Technology Co., Ltd +0e0b Amigo Technology Inc. +0e0c Gesytec +0e0d PicoQuant GmbH +0e0f VMware, Inc. + 0006 Virtual Keyboard +0e16 JMTek, LLC +0e17 Walex Electronic, Ltd +0e1a Unisys +0e1b Crewave +0e1e Green Hills Software +0e20 Pegasus Technologies Ltd. +0e21 Cowon Systems, Inc. +0e22 Symbian Ltd. +0e23 Liou Yuane Enterprise Co., Ltd +0e25 VinChip Systems, Inc. +0e26 J-Phone East Co., Ltd +0e30 HeartMath LLC +0e34 Micro Computer Control Corp. +0e35 3Pea Technologies, Inc. +0e36 TiePie engineering +0e38 Stratitec, Inc. +0e39 Smart Modular Technologies, Inc. +0e3a Neostar Technology Co., Ltd +0e3b Mansella, Ltd +0e41 Line6, Inc. +0e44 Sun-Riseful Technology Co., Ltd. +0e48 Julia Corp., Ltd +0e4a Shenzhen Bao Hing Electric Wire & Cable Mfr. Co. +0e4c Radica Games, Ltd +0e50 TechnoData Interware +0e55 Speed Dragon Multimedia, Ltd +0e56 Kingston Technology Company, Inc. +0e5a Active Co., Ltd +0e5b Union Power Information Industrial Co., Ltd +0e5c Bitland Information Technology Co., Ltd +0e5d Neltron Industrial Co., Ltd +0e5e Conwise Technology Co., Ltd. +0e66 Hawking Technologies +0e67 Fossil, Inc. +0e6a Megawin Technology Co., Ltd + 02c0 Defender Gaming Keyboard + 030b Truly Ergonomic Computer Keyboard (Device Firmware Update mode) + 030c Truly Ergonomic Computer Keyboard + 6001 GEMBIRD Flexible keyboard KB-109F-B-DE +0e6f Logic3 +0e70 Tokyo Electronic Industry Co., Ltd +0e72 Hsi-Chin Electronics Co., Ltd +0e75 TVS Electronics, Ltd +0e79 Archos, Inc. +0e7b On-Tech Industry Co., Ltd +0e7e Gmate, Inc. +0e82 Ching Tai Electric Wire & Cable Co., Ltd +0e83 Shin An Wire & Cable Co. +0e8c Well Force Electronic Co., Ltd +0e8d MediaTek Inc. +0e8f GreenAsia Inc. + 0021 Multimedia Keyboard Controller + 0022 multimedia keyboard controller +0e90 WiebeTech, LLC +0e91 VTech Engineering Canada, Ltd +0e92 C's Glory Enterprise Co., Ltd +0e93 eM Technics Co., Ltd +0e95 Future Technology Co., Ltd +0e96 Aplux Communications, Ltd +0e97 Fingerworks, Inc. + 0908 Composite HID (Keyboard and Mouse) +0e98 Advanced Analogic Technologies, Inc. +0e99 Parallel Dice Co., Ltd +0e9a TA HSING Industries, Ltd +0e9b ADTEC Corp. +0e9c Streamzap, Inc. +0e9f Tamura Corp. +0ea0 Ours Technology, Inc. +0ea6 Nihon Computer Co., Ltd +0ea7 MSL Enterprises Corp. +0ea8 CenDyne, Inc. +0ead Humax Co., Ltd +0eb0 NovaTech +0eb1 WIS Technologies, Inc. +0eb2 Y-S Electronic Co., Ltd +0eb3 Saint Technology Corp. +0eb7 Endor AG +0eb8 Mettler Toledo +0ebb Thermo Fisher Scientific +0ebe VWeb Corp. +0ebf Omega Technology of Taiwan, Inc. +0ec0 LHI Technology (China) Co., Ltd +0ec1 Abit Computer Corp. +0ec2 Sweetray Industrial, Ltd +0ec3 Axell Co., Ltd +0ec4 Ballracing Developments, Ltd +0ec5 GT Information System Co., Ltd +0ec6 InnoVISION Multimedia, Ltd +0ec7 Theta Link Corp. +0ecd Lite-On IT Corp. +0ece TaiSol Electronics Co., Ltd +0ecf Phogenix Imaging, LLC +0ed1 WinMaxGroup +0ed2 Kyoto Micro Computer Co., Ltd +0ed3 Wing-Tech Enterprise Co., Ltd +0ed5 Fiberbyte +0eda Noriake Itron Corp. +0edf e-MDT Co., Ltd +0ee0 Shima Seiki Mfg., Ltd +0ee1 Sarotech Co., Ltd +0ee2 AMI Semiconductor, Inc. +0ee3 ComTrue Technology Corp. +0ee4 Sunrich Technology, Ltd +0eee Digital Stream Technology, Inc. +0eef D-WAV Scientific Co., Ltd +0ef0 Hitachi Cable, Ltd +0ef1 Aichi Micro Intelligent Corp. +0ef2 I/O Magic Corp. +0ef3 Lynn Products, Inc. +0ef4 DSI Datotech +0ef5 PointChips +0ef6 Yield Microelectronics Corp. +0ef7 SM Tech Co., Ltd (Tulip) +0efd Oasis Semiconductor +0efe Wem Technology, Inc. +0f03 Unitek UPS Systems +0f06 Visual Frontier Enterprise Co., Ltd +0f08 CSL Wire & Plug (Shen Zhen) Co. +0f0c CAS Corp. +0f0d Hori Co., Ltd +0f0e Energy Full Corp. +0f0f Silego Technology Inc +0f11 LD Didactic GmbH +0f12 Mars Engineering Corp. +0f13 Acetek Technology Co., Ltd +0f14 Ingenico +0f18 Finger Lakes Instrumentation +0f19 Oracom Co., Ltd +0f1b Onset Computer Corp. +0f1c Funai Electric Co., Ltd +0f1d Iwill Corp. +0f21 IOI Technology Corp. +0f22 Senior Industries, Inc. +0f23 Leader Tech Manufacturer Co., Ltd +0f24 Flex-P Industries, Snd., Bhd. +0f2d ViPower, Inc. +0f2e Geniality Maple Technology Co., Ltd +0f2f Priva Design Services +0f30 Jess Technology Co., Ltd +0f31 Chrysalis Development +0f32 YFC-BonEagle Electric Co., Ltd +0f37 Kokuyo Co., Ltd +0f38 Nien-Yi Industrial Corp. +0f39 TG3 Electronics + 0404 Recreated ZX Spectrum Keyboard + 0876 Keyboard [87 Francium Pro] + 1086 DK2108SZ Keyboard [Ducky Zero] +0f3d Airprime, Incorporated +0f41 RDC Semiconductor Co., Ltd +0f42 Nital Consulting Services, Inc. +0f44 Polhemus +0f49 Evolis SA +0f4b St. John Technology Co., Ltd +0f4c WorldWide Cable Opto Corp. +0f4d Microtune, Inc. +0f4e Freedom Scientific +0f52 Wing Key Electrical Co., Ltd +0f53 Dongguan White Horse Cable Factory, Ltd +0f54 Kawai Musical Instruments Mfg. Co., Ltd +0f55 AmbiCom, Inc. +0f5c Prairiecomm, Inc. +0f5d NewAge International, LLC +0f5f Key Technology Corp. +0f60 NTK, Ltd +0f61 Varian, Inc. +0f62 Acrox Technologies Co., Ltd +0f63 LeapFrog Enterprises +0f68 Kobe Steel, Ltd +0f69 Dionex Corp. +0f6a Vibren Technologies, Inc. +0f6e INTELLIGENT SYSTEMS +0f73 DFI +0f78 Guntermann & Drunck GmbH +0f7c DQ Technology, Inc. +0f7d NetBotz, Inc. +0f7e Fluke Corp. +0f88 VTech Holdings, Ltd +0f8b Yazaki Corp. +0f8c Young Generation International Corp. +0f8d Uniwill Computer Corp. +0f8e Kingnet Technology Co., Ltd +0f8f Soma Networks +0f97 CviLux Corp. +0f98 CyberBank Corp. +0f9c Hyun Won, Inc. +0f9e Lucent Technologies +0fa3 Starconn Electronic Co., Ltd +0fa4 ATL Technology +0fa5 Sotec Co., Ltd +0fa7 Epox Computer Co., Ltd +0fa8 Logic Controls, Inc. +0faf Winpoint Electronic Corp. +0fb0 Haurtian Wire & Cable Co., Ltd +0fb1 Inclose Design, Inc. +0fb2 Juan-Chern Industrial Co., Ltd +0fb6 Heber Ltd +0fb8 Wistron Corp. +0fb9 AACom Corp. +0fba San Shing Electronics Co., Ltd +0fbb Bitwise Systems, Inc. +0fc1 Mitac Internatinal Corp. +0fc2 Plug and Jack Industrial, Inc. +0fc5 Delcom Engineering +0fc6 Dataplus Supplies, Inc. +0fca Research In Motion, Ltd. +0fce Sony Ericsson Mobile Communications AB +0fcf Dynastream Innovations, Inc. +0fd0 Tulip Computers B.V. +0fd1 Giant Electronics Ltd. +0fd2 Seac Banche +0fd4 Tenovis GmbH & Co., KG +0fd5 Direct Access Technology, Inc. +0fd9 Elgato Systems GmbH +0fda Quantec Networks GmbH +0fdc Micro Plus +0fde Oregon Scientific +0fe0 Osterhout Design Group +0fe2 Air Techniques +0fe4 IN-Tech Electronics, Ltd +0fe5 Greenconn (U.S.A.), Inc. +0fe6 ICS Advent +0fe9 DVICO +0fea United Computer Accessories +0feb CRS Electronic Co., Ltd +0fec UMC Electronics Co., Ltd +0fed Access Co., Ltd +0fee Xsido Corp. +0fef MJ Research, Inc. +0ff6 Core Valley Co., Ltd +0ff7 CHI SHING Computer Accessories Co., Ltd +0ffc Clavia DMI AB +0ffd EarlySense +0fff Aopen, Inc. +1000 Speed Tech Corp. +1001 Ritronics Components (S) Pte., Ltd +1003 Sigma Corp. +1004 LG Electronics, Inc. +1005 Apacer Technology, Inc. +1006 iRiver, Ltd. +1009 Emuzed, Inc. +100a AV Chaseway, Ltd +100b Chou Chin Industrial Co., Ltd +100d Netopia, Inc. +1010 Fukuda Denshi Co., Ltd +1011 Mobile Media Tech. +1012 SDKM Fibres, Wires & Cables Berhad +1013 TST-Touchless Sensor Technology AG +1014 Densitron Technologies PLC +1015 Softronics Pty., Ltd +1016 Xiamen Hung's Enterprise Co., Ltd +1017 Speedy Industrial Supplies, Pte., Ltd +1019 Elitegroup Computer Systems (ECS) +1020 Labtec + 0006 Wireless Keyboard + 0106 Wireless Optical Mouse/Keyboard +1022 Shinko Shoji Co., Ltd +1025 Hyper-Paltek +1026 Newly Corp. +1027 Time Domain +1028 Inovys Corp. +1029 Atlantic Coast Telesys +102a Ramos Technology Co., Ltd +102b Infotronic America, Inc. +102c Etoms Electronics Corp. +102d Winic Corp. +1031 Comax Technology, Inc. +1032 C-One Technology Corp. +1033 Nucam Corp. +1038 SteelSeries ApS +1039 devolo AG +103a PSA +103d Stanton +1043 iCreate Technologies Corp. +1044 Chu Yuen Enterprise Co., Ltd +1046 Winbond Electronics Corp. [hex] +1048 Targus Group International +104b Mylex / Buslogic +104c AMCO TEC International, Inc. +104d Newport Corporation +104f WB Electronics +1050 Yubico.com +1053 Immanuel Electronics Co., Ltd +1054 BMS International Beheer N.V. +1055 Complex Micro Interconnection Co., Ltd +1056 Hsin Chen Ent Co., Ltd +1057 ON Semiconductor +1058 Western Digital Technologies, Inc. +1059 Giesecke & Devrient GmbH +105b Foxconn International, Inc. +105c Hong Ji Electric Wire & Cable (Dongguan) Co., Ltd +105d Delkin Devices, Inc. +105e Valence Semiconductor Design, Ltd +105f Chin Shong Enterprise Co., Ltd +1060 Easthome Industrial Co., Ltd +1063 Motorola Electronics Taiwan, Ltd [hex] +1065 CCYU Technology +1068 Micropi Elettronica +106a Loyal Legend, Ltd +106c Curitel Communications, Inc. +106d San Chieh Manufacturing, Ltd +106e ConectL +106f Money Controls +1076 GCT Semiconductor, Inc. +107b Gateway, Inc. +107d Arlec Australia, Ltd +107e Midoriya Electric Co., Ltd +107f KidzMouse, Inc. +1082 Shin-Etsukaken Co., Ltd +1083 Canon Electronics, Inc. +1084 Pantech Co., Ltd +108a Chloride Power Protection +108b Grand-tek Technology Co., Ltd + 0005 HID Keyboard/Mouse PS/2 Translator +108c Robert Bosch GmbH +108e Lotes Co., Ltd. +1091 Numerik Jena +1099 Surface Optics Corp. +109a DATASOFT Systems GmbH +109b Hisense +109f eSOL Co., Ltd +10a0 Hirotech, Inc. +10a3 Mitsubishi Materials Corp. +10a9 SK Teletech Co., Ltd +10aa Cables To Go +10ab USI Co., Ltd +10ac Honeywell, Inc. +10ae Princeton Technology Corp. +10af Liebert Corp. +10b5 Comodo (PLX?) +10b8 DiBcom +10bb TM Technology, Inc. +10bc Dinging Technology Co., Ltd +10bd TMT Technology, Inc. +10bf SmartHome +10c3 Universal Laser Systems, Inc. +10c4 Silicon Labs +10c5 Sanei Electric, Inc. +10c6 Intec, Inc. +10cb Eratech +10cc GBM Connector Co., Ltd +10cd Kycon, Inc. +10ce Silicon Labs +10cf Velleman Components, Inc. +10d1 Hottinger Baldwin Measurement +10d2 RayComposer - R. Adams +10d4 Man Boon Manufactory, Ltd +10d5 Uni Class Technology Co., Ltd + 5552 KVM Human Interface Composite Device (Keyboard/Mouse ports) +10d6 Actions Semiconductor Co., Ltd +10de Authenex, Inc. +10df In-Win Development, Inc. +10e0 Post-Op Video, Inc. +10e1 CablePlus, Ltd +10e2 Nada Electronics, Ltd +10ec Vast Technologies, Inc. +10f0 Nexio Co., Ltd +10f1 Importek +10f5 Turtle Beach +10f8 Cesys GmbH +10fb Pictos Technologies, Inc. +10fd Anubis Electronics, Ltd +10fe Thrane & Thrane +1100 VirTouch, Ltd +1101 EasyPass Industrial Co., Ltd +1108 Brightcom Technologies, Ltd +110a Moxa Technologies Co., Ltd. +1110 Analog Devices Canada, Ltd (Allied Telesyn) +1111 Pandora International Ltd. +1112 YM ELECTRIC CO., Ltd +1113 Medion AG +111e VSO Electric Co., Ltd +112a RedRat +112e Master Hill Electric Wire and Cable Co., Ltd +112f Cellon International, Inc. +1130 Tenx Technology, Inc. +1131 Integrated System Solution Corp. +1132 Toshiba Corp., Digital Media Equipment [hex] +1136 CTS Electronincs +113c Arin Tech Co., Ltd +113d Mapower Electronics Co., Ltd +113f Integrated Biometrics, LLC +1141 V One Multimedia, Pte., Ltd +1142 CyberScan Technologies, Inc. +1145 Japan Radio Company +1146 Shimane SANYO Electric Co., Ltd. +1147 Ever Great Electric Wire and Cable Co., Ltd +114b Sphairon Access Systems GmbH +114c Tinius Olsen Testing Machine Co., Inc. +114d Alpha Imaging Technology Corp. +114f Wavecom +115b Salix Technology Co., Ltd. +1162 Secugen Corp. +1163 DeLorme Publishing, Inc. +1164 YUAN High-Tech Development Co., Ltd +1165 Telson Electronics Co., Ltd +1166 Bantam Interactive Technologies +1167 Salient Systems Corp. +1168 BizConn International Corp. +116e Gigastorage Corp. +116f Silicon 10 Technology Corp. +1175 Shengyih Steel Mold Co., Ltd +117d Santa Electronic, Inc. +117e JNC, Inc. +1182 Venture Corp., Ltd +1183 Compaq Computer Corp. [hex] (Digital Dream ??) +1184 Kyocera Elco Corp. +1188 Bloomberg L.P. +1189 Acer Communications & Multimedia +118f You Yang Technology Co., Ltd +1190 Tripace +1191 Loyalty Founder Enterprise Co., Ltd +1196 Yankee Robotics, LLC +1197 Technoimagia Co., Ltd +1198 StarShine Technology Corp. +1199 Sierra Wireless, Inc. +119a ZHAN QI Technology Co., Ltd +119b ruwido austria GmbH + 0400 Infrared Keyboard V2.01 +11a0 Chipcon AS +11a3 Technovas Co., Ltd +11aa GlobalMedia Group, LLC +11ab Exito Electronics Co., Ltd +11ac Nike +11b0 ATECH FLASH TECHNOLOGY +11be R&D International NV +11c0 Betop +11c5 Inmax +11c9 Nacon +11ca VeriFone Inc +11db Topfield Co., Ltd. +11e6 K.I. Technology Co. Ltd. +11f5 Siemens AG +11f6 Prolific +11f7 Alcatel (?) +1203 TSC Auto ID Technology Co., Ltd +1209 Generic + 0cbd Andrzej Szombierski kuku.eu.org keyboard + 2201 Dygma Shortcut Keyboard + 2300 Keyboardio Model 01 Bootloader + 2301 Keyboardio Model 01 + 2328 K.T.E.C. Keyboard Device + 345c kinX Keyboard Controller + a1e5 Atreus Keyboards Atreus Keyboard + bb00 keyplus split keyboard firmware + bb02 keyplus nRF24 wireless keyboard dongle +120e Hudson Soft Co., Ltd +120f Magellan +1210 DigiTech +121e Jungsoft Co., Ltd +121f Panini S.p.A. +1220 TC Electronic +1221 Unknown manufacturer +1222 TiPro + faca programmable keyboard +1223 SKYCABLE ENTERPRISE. CO., LTD. +1228 Datapaq Limited +1230 Chipidea-Microelectronica, S.A. +1233 Denver Electronics +1234 Brain Actuated Technologies +1235 Focusrite-Novation + 0012 Nocturn Keyboard +1241 Belkin + 0504 Wireless Trackball Keyboard + 1503 Keyboard + 1603 Keyboard + f767 Keyboard +1243 Holtek Semiconductor, Inc. + e000 Unique NFC/RFID reader (keyboard emulation) +124a AirVast +124b Nyko (Honey Bee) +124c MXI - Memory Experts International, Inc. +125c Apogee Inc. +125d JMicron +125f A-DATA Technology Co., Ltd. +1260 Standard Microsystems Corp. +1264 Covidien Energy-based Devices +1266 Pirelli Broadband Solutions +1267 Logic3 / SpectraVideo plc + 0103 G-720 Keyboard +126c Aristocrat Technologies +126d Bel Stewart +126e Strobe Data, Inc. +126f TwinMOS +1274 Ensoniq +1275 Xaxero Marine Software Engineering, Ltd. +1278 Starlight Xpress +1283 zebris Medical GmbH +1286 Marvell Semiconductor, Inc. +1291 Qualcomm Flarion Technologies, Inc. / Leadtek Research, Inc. +1292 Innomedia +1293 Belkin Components [hex] + 2101 104-key keyboard +1294 RISO KAGAKU CORP. +1297 DekTec +129b CyberTAN Technology +12a7 Trendchip Technologies Corp. +12ab Honey Bee Electronic International Ltd. +12b8 Zhejiang Xinya Electronic Technology Co., Ltd. +12b9 E28 +12ba Licensed by Sony Computer Entertainment America +12bd Gembird +12c4 Autocue Group Ltd +12cf DEXIN +12d1 Huawei Technologies Co., Ltd. +12d2 LINE TECH INDUSTRIAL CO., LTD. +12d3 LINAK +12d6 EMS Dr. Thomas Wuensche +12d7 BETTER WIRE FACTORY CO., LTD. +12d8 Araneus Information Systems Oy +12e6 Waldorf Music GmbH +12ef Tapwave, Inc. +12f2 ViewPlus Technologies, Inc. +12f5 Dynamic System Electronics Corp. +12f7 Memorex Products, Inc. +12fd AIN Comm. Technology Co., Ltd +12ff Fascinating Electronics, Inc. +1306 FM20 Barcode Scanner +1307 Transcend Information, Inc. +1308 Shuttle, Inc. +1310 Roper +1312 ICS Electronics +1313 ThorLabs +131d Natural Point +1325 ams AG +132a Envara Inc. +132b Konica Minolta +133e Kemper Digital GmbH +1342 Mobility + 0201 EasiDock 200 Keyboard and Mouse Port +1343 Citizen Systems +1345 Sino Lite Technology Corp. +1347 Moravian Instruments +1348 Katsuragawa Electric Co., Ltd. +134c PanJit International Inc. +134e Digby's Bitpile, Inc. DBA D Bit +1357 P&E Microcomputer Systems +135e Insta GmbH +135f Control Development Inc. +1366 SEGGER +136b STEC +136e Andor Technology Ltd. +1370 Swissbit +1371 CNet Technology Inc. +1376 Vimtron Electronics Co., Ltd. +1377 Sennheiser electronic GmbH & Co. KG +137b SCAPS GmbH +137c YASKAWA ELECTRIC CORP. +1385 Netgear, Inc +138a Validity Sensors, Inc. +138e Jungo LTD +1390 TOMTOM B.V. +1391 IdealTEK, Inc. +1395 Sennheiser Communications +1397 BEHRINGER International GmbH +1398 Q-tec +13ad Baltech +13b0 PerkinElmer Optoelectronics +13b1 Linksys +13b2 Alesis +13b3 Nippon Dics Co., Ltd. +13ba PCPlay + 0017 PS/2 Keyboard+Mouse Adapter +13be Ricoh Printing Systems, Ltd. +13ca JyeTai Precision Industrial Co., Ltd. +13cf Wisair Ltd. +13d0 Techsan Electronics Co., Ltd. +13d1 A-Max Technology Macao Commercial Offshore Co. Ltd. +13d2 Shark Multimedia +13d3 IMC Networks +13d7 Guidance Software, Inc. +13dc ALEREON, INC. +13dd i.Tech Dynamic Limited +13e1 Kaibo Wire & Cable (Shenzhen) Co., Ltd. +13e5 Rane +13e6 TechnoScope Co., Ltd. +13ea Hengstler +13ec Zydacron +13ee MosArt +13fd Initio Corporation +13fe Kingston Technology Company Inc. +1400 Axxion Group Corp. +1402 Bowe Bell & Howell +1403 Sitronix +1404 Fundamental Software, Inc. +1409 IDS Imaging Development Systems GmbH +140e Telechips, Inc. +1410 Novatel Wireless +1415 Nam Tai E&E Products Ltd. or OmniVision Technologies, Inc. +1419 ABILITY ENTERPRISE CO., LTD. +1421 Sensor Technology +1424 Posnet Polska S.A. +1429 Vega Technologies Industrial (Austria) Co. +142a Thales E-Transactions +142b Arbiter Systems, Inc. +1430 RedOctane +1431 Pertech Resources, Inc. +1435 Wistron NeWeb +1436 Denali Software, Inc. +143c Altek Corporation +1443 Digilent +1446 X.J.GROUP +1451 Force Dimension +1452 Dai Nippon Printing, Inc +1453 Radio Shack +1456 Extending Wire & Cable Co., Ltd. +1457 First International Computer, Inc. +145f Trust + 0176 Isla Keyboard + 01e5 Keyboard [GXT 830] +1460 Tatung Co. +1461 Staccato Communications +1462 Micro Star International +146b BigBen Interactive +1472 Huawei-3Com +147a Formosa Industrial Computing, Inc. +147e Upek +147f Hama GmbH & Co., KG +1482 Vaillant +1484 Elsa AG [hex] +1485 Silicom +1487 DSP Group, Ltd. +148e EVATRONIX SA +148f Ralink Technology, Corp. +1491 Futronic Technology Co. Ltd. +1493 Suunto +1497 Panstrong Company Ltd. +1498 Microtek International Inc. +149a Imagination Technologies +14aa WideView Technology Inc. +14ad CTK Corporation +14ae Printronix Inc. +14af ATP Electronics Inc. +14b0 StarTech.com Ltd. +14b2 Ralink Technology, Corp. +14c0 Rockwell Automation, Inc. +14c2 Gemlight Computer, Ltd +14c8 Zytronic +14cd Super Top +14d8 JAMER INDUSTRIES CO., LTD. +14dd Raritan Computer, Inc. +14e0 WiNRADiO Communications +14e1 Dialogue Technology Corp. +14e5 SAIN Information & Communications Co., Ltd. +14ea Planex Communications +14ed Shure Inc. +14f7 TechniSat Digital GmbH +1500 Ellisys +1501 Pine-Tum Enterprise Co., Ltd. +1504 Bixolon CO LTD +1509 First International Computer, Inc. +1513 medMobile +1514 Actel +1516 CompUSA +1518 Cheshire Engineering Corp. +1519 Comneon +151f Opal Kelly Incorporated +1520 Bitwire Corp. +1524 ENE Technology Inc +1527 Silicon Portals +1529 UBIQUAM Co., Ltd. +152a Thesycon Systemsoftware & Consulting GmbH +152b MIR Srl +152d JMicron Technology Corp. / JMicron USA Technology Corp. +152e LG (HLDS) +1532 Razer USA, Ltd + 0023 Gaming Keyboard [TRON] + 002b Gaming Keyboard [Star Wars: The Old Republic] + 004a RZ03-0133 Gaming Lapboard, Keyboard Mouse Combo, Dongle [Turret Dongle] + 0102 Tarantula Keyboard + 0103 Gaming Keyboard [Reclusa] + 0105 Gaming Keyboard [ProType] + 0106 Gaming Keyboard [ProType] + 0109 Lycosa Keyboard + 010b Gaming Keyboard [Arctosa] + 0118 RZ03-0080, Gaming Keyboard [Deathstalker Essential] + 0119 Gaming Keyboard [Lycosa] + 011e Gaming Keyboard Dock [Edge Keyboard Dock] + 0200 Gaming Keyboard [Reclusa] + 020d Cynosa Pro keyboard (Cynosa Pro Bundle) + 021b Gaming Keyboard [BlackWidow X Tournament Edition] + 0221 RZ03-0203 Gaming Keyboard [BlackWidow Chroma V2] + 023f RZ03-0274 Gaming Keyboard [Cynosa Lite] + 0904 R201-0282 Gaming Keyboard, Mouse Combination [Turret For Xbox One] +153b TerraTec Electronic GmbH +1546 U-Blox AG +1547 SG Intec Ltd & Co KG +154a Celectronic GmbH +154b PNY +154d ConnectCounty Holdings Berhad +154e D&M Holdings, Inc. (Denon/Marantz) +154f SNBC CO., Ltd +1554 Prolink Microsystems Corp. +1557 OQO +1568 Sunf Pu Technology Co., Ltd +156f Quantum Corporation +1570 ALLTOP TECHNOLOGY CO., LTD. +157b Ketron SRL +157e TRENDnet +1582 Fiberline +1587 SMA Technologie AG +158d Oakley Inc. +158e JDS Uniphase Corporation (JDSU) +1598 Kunshan Guoji Electronics Co., Ltd. +15a2 Freescale Semiconductor, Inc. +15a4 Afatech Technologies, Inc. +15a8 Teams Power Limited +15a9 Gemtek +15aa Gearway Electronics (Dong Guan) Co., Ltd. +15ad VMware Inc. +15ba Olimex Ltd. + 003c TERES Keyboard+Touchpad +15c0 XL Imaging +15c2 SoundGraph Inc. +15c5 Advance Multimedia Internet Technology Inc. (AMIT) +15c6 Laboratoires MXM +15c8 KTF Technologies +15c9 D-Box Technologies +15ca Textech International Ltd. +15d5 Coulomb Electronics Ltd. +15d9 Trust International B.V. +15dc Hynix Semiconductor Inc. +15e0 Seong Ji Industrial Co., Ltd. +15e1 RSA +15e4 Numark +15e8 SohoWare +15e9 Pacific Digital Corp. +15ec Belcarra Technologies Corp. +15f4 HanfTek +1604 Tascam +1605 ACCES I/O Products, Inc. +1606 Umax +1608 Inside Out Networks [hex] +160a VIA Technologies, Inc. +160e INRO +1614 Amoi Electronics +1617 Sony Corp. +1619 L & K Precision Technology Co., Ltd. +161c Digitech Systems +1621 Wionics Research +1628 Stonestreet One, Inc. +162a Airgo Networks Inc. +162f WiQuest Communications, Inc. +1630 2Wire, Inc. +1631 Good Way Technology +1633 AIM GmbH +1645 Entrega [hex] +1649 SofTec Microsystems +164a ChipX +164c Matrix Vision GmbH +1657 Struck Innovative Systeme GmbH +165b Frontier Design Group +165c Kondo Kagaku +1660 Creatix Polymedia GmbH +1667 GIGA-TMS INC. + 0005 PCR330A RFID Reader (125 kHz, keyboard emulation) +1668 Actiontec Electronics, Inc. [hex] +1669 PiKRON Ltd. [hex] +166a Clipsal +1677 China Huada Integrated Circuit Design (Group) Co., Ltd. (CIDC Group) +1679 Total Phase +167b Pure Digital Technologies, Inc. +1680 Golden Bridge Electech Inc. +1681 Prevo Technologies, Inc. +1682 Maxwise Production Enterprise Ltd. +1684 Godspeed Computer Corp. +1685 Delock +1686 ZOOM Corporation +1687 Kingmax Digital Inc. +1688 Saab AB +1689 Razer USA, Ltd +168c Atheros Communications +1690 Askey Computer Corp. [hex] +1696 Hitachi Video and Information System, Inc. +1697 VTec Test, Inc. +16a5 Shenzhen Zhengerya Cable Co., Ltd. +16a6 Unigraf +16ab Global Sun Technology +16ac Dongguan ChingLung Wire & Cable Co., Ltd. +16b4 iStation +16b5 Persentec, Inc. +16c0 Van Ooijen Technische Informatica + 047c Teensy Keyboard + 047d Teensy Keyboard+Debug + 0482 Teensyduino Keyboard+Mouse+Joystick + 0487 Teensyduino Serial+Keyboard+Mouse+Joystick + 05df HID device except mice, keyboards, and joysticks + 27d9 HID device except mice, keyboards, and joysticks + 27db Keyboard +16ca Wireless Cables, Inc. +16cc silex technology, Inc. +16d0 MCS +16d1 Suprema Inc. +16d3 Frontline Test Equipment, Inc. +16d5 AnyDATA Corporation +16d6 JABLOCOM s.r.o. +16d8 CMOTECH Co., Ltd. +16dc Wiener, Plein & Baus +16de Telemecanique +16df King Billion Electronics Co., Ltd. +16f0 GN ReSound A/S +16f5 Futurelogic Inc. +1702 FDI-MATELEC +1706 BlueView Technologies, Inc. +1707 ARTIMI +170b Swissonic +170d Avnera +1711 Leica Microsystems +1724 Meyer Instruments (MIS) +1725 Vitesse Semiconductor +1726 Axesstel, Inc. +172f Waltop International Corp. +1733 Cellink Technology Co., Ltd +1736 CANON IMAGING SYSTEM TECHNOLOGIES INC. +1737 802.11g Adapter [Linksys WUSB54GC v3] +173a Roche +173d QSENN + 0002 GP-K7000 keyboard +1740 Senao +1743 General Atomics +1748 MQP Electronics +174c ASMedia Technology Inc. +174f Syntek +1753 GERTEC Telecomunicacoes Ltda. +1756 ENENSYS Technologies +1759 LucidPort Technology, Inc. +1761 ASUSTek Computer, Inc. (wrong ID) +1770 MSI + ff00 steel series rgb keyboard +1772 System Level Solutions, Inc. +1776 Arowana +1777 Microscan Systems, Inc. +177f Sweex +1781 Multiple Vendors +1782 Spreadtrum Communications Inc. +1784 TopSeed Technology Corp. +1787 ATI AIB +1788 ShenZhen Litkconn Technology Co., Ltd. +178e ASUSTek Computer, Inc. (wrong ID) +1796 Printrex, Inc. +1797 JALCO CO., LTD. +1799 Thales Norway A/S +179d Ricavision International, Inc. +17a0 Samson Technologies Corp. +17a4 Concept2 +17a5 Advanced Connection Technology Inc. +17a7 MICOMSOFT CO., LTD. +17a8 Kamstrup A/S +17b3 Grey Innovation +17b5 Lunatone +17ba SAURIS GmbH +17c3 Singim International Corp. +17cc Native Instruments +17cf Hip Hing Cable & Plug Mfy. Ltd. +17d0 Sanford L.P. +17d3 Korea Techtron Co., Ltd. +17e9 DisplayLink +17eb Cornice, Inc. +17ef Lenovo + 6007 Smartcard Keyboard + 6009 ThinkPad Keyboard with TrackPoint + 6014 Mini Wireless Keyboard N5901 + 6022 Ultraslim Plus Wireless Keyboard and Mouse + 602d Black Silk Keyboard + 6032 Wireless Dongle for Keyboard and Mouse + 6047 ThinkPad Compact Keyboard with TrackPoint + 609b Professional Wireless Keyboard and Mouse Combo + 609c Professional Wireless Keyboard + b000 Virtual Keyboard and Mouse + b003 Virtual Keyboard and Mouse / Mass Storage +17f4 WaveSense +17f5 K.K. Rocky +17f6 Unicomp, Inc. + 0709 Model M Keyboard + 0822 Ruffian 6 Keyboard v3 [Model M] +1809 Advantech +1822 Twinhan +1831 Gwo Jinn Industries Co., Ltd. +1832 Huizhou Shenghua Industrial Co., Ltd. +183d VIVOphone +1843 Vaisala +1849 ASRock Incorporation +184f K2L GmbH +1852 GYROCOM C&C Co., LTD +1854 Memory Devices Ltd. +185b Compro +1861 Tech Technology Industrial Company +1862 Teridian Semiconductor Corp. +1870 Nexio Co., Ltd +1871 Aveo Technology Corp. +1873 Navilock +187c Alienware Corporation +187f Siano Mobile Silicon +1892 Vast Technologies, Inc. +1894 Topseed +1897 Evertop Wire Cable Co. +189f 3Shape A/S +18a4 CSSN +18a5 Verbatim, Ltd +18b1 Petalynx +18b4 e3C Technologies +18b6 Mikkon Technology Limited +18b7 Zotek Electronic Co., Ltd. +18c5 AMIT Technology, Inc. +18cd Ecamm +18d1 Google Inc. +18d5 Starline International Group Limited +18d9 Kaba +18dc LKC Technologies, Inc. +18dd Planon System Solutions Inc. +18e3 Fitipower Integrated Technology Inc +18e8 Qcom +18ea Matrox Graphics, Inc. +18ec Arkmicro Technologies Inc. +18ef ELV Elektronik AG +18f8 [Maxxter] +18fb Scriptel Corporation +18fd FineArch Inc. +1901 GE Healthcare +1908 GEMBIRD +190d Motorola GSG +1914 Alco Digital Devices Limited +1915 Nordic Semiconductor ASA +191c Innovative Technology LTD +1923 FitLinxx +1926 NextWindow +1928 Proceq SA +192f Avago Technologies, Pte. +1930 Shenzhen Xianhe Technology Co., Ltd. +1931 Ningbo Broad Telecommunication Co., Ltd. +1934 Feature Integration Technology Inc. (Fintek) +1935 Elektron Music Machines +1938 Meinberg Funkuhren GmbH & Co. KG +1941 Dream Link +1943 Sensoray Co., Inc. +1949 Lab126, Inc. +194f PreSonus Audio Electronics, Inc. +1951 Hyperstone AG +1953 Ironkey Inc. +1954 Radiient Technologies +195d Itron Technology iONE + 7777 Scorpius wireless keyboard +1965 Uniden Corporation +1967 CASIO HITACHI Mobile Communications Co., Ltd. +196b Wispro Technology Inc. +1970 Dane-Elec Corp. USA +1975 Dongguan Guneetal Wire & Cable Co., Ltd. +1976 Chipsbrand Microelectronics (HK) Co., Ltd. +1977 T-Logic +197d Leuze electronic +1989 Nuconn Technology Corp. +198f Beceem Communications Inc. +1990 Acron Precision Industrial Co., Ltd. +1995 Trillium Technology Pty. Ltd. +1996 PixeLINK +199b MicroStrain, Inc. +199e The Imaging Source Europe GmbH +199f Benica Corporation +19a8 Biforst Technology Inc. +19ab Bodelin +19af S Life +19b2 Batronix +19b4 Celestron +19b5 B & W Group +19b6 Infotech Logistic, LLC +19b9 Data Robotics +19c2 Futuba +19ca Mindtribe +19cf Parrot SA +19d2 ZTE WCDMA Technologies MSM +19db KFI Printers +19e1 WeiDuan Electronic Accessory (S.Z.) Co., Ltd. +19e8 Industrial Technology Research Institute +19ef Pak Heng Technology (Shenzhen) Co., Ltd. +19f7 RODE Microphones +19fa Gampaq Co.Ltd +19ff Dynex +1a08 Bellwood International, Inc. +1a0a USB-IF non-workshop +1a12 KES Co., Ltd. +1a1d Veho +1a25 Amphenol East Asia Ltd. +1a2a Seagate Branded Solutions +1a2c China Resource Semico Co., Ltd + 0021 Keyboard + 0024 Multimedia Keyboard +1a32 Quanta Microsystems, Inc. +1a34 ACRUX +1a36 Biwin Technology Ltd. +1a40 Terminus Technology Inc. +1a41 Action Electronics Co., Ltd. +1a44 VASCO Data Security International +1a4a Silicon Image +1a4b SafeBoot International B.V. +1a5a Tandberg Data +1a61 Abbott Diabetes Care +1a6a Spansion Inc. +1a6d SamYoung Electronics Co., Ltd +1a6e Global Unichip Corp. +1a6f Sagem Orga GmbH +1a72 Physik Instrumente +1a79 Bayer Health Care LLC +1a7b Lumberg Connect GmbH & Co. KG +1a7c Evoluent +1a81 Holtek Semiconductor, Inc. +1a86 QinHeng Electronics +1a89 Dynalith Systems Co., Ltd. +1a8b SGS Taiwan Ltd. +1a8d BandRich, Inc. +1a98 Leica Camera AG +1aa4 Data Drive Thru, Inc. +1aa5 UBeacon Technologies, Inc. +1aa6 eFortune Technology Corp. +1aad KeeTouch +1ab1 Rigol Technologies +1acb Salcomp Plc +1acc Midiplus Co, Ltd. +1ad1 Desay Wire Co., Ltd. +1ad4 APS +1adb SEL C662 Serial Cable +1ae4 ic-design Reinhard Gottinger GmbH +1ae7 X-TENSIONS +1aed High Top Precision Electronic Co., Ltd. +1aef Conntech Electronic (Suzhou) Corporation +1af1 Connect One Ltd. +1afe A. Eberle GmbH & Co. KG +1b04 Meilhaus Electronic GmbH +1b0e BLUTRONICS S.r.l. +1b1c Corsair + 0a60 Vengeance K60 Keyboard + 1b04 Raptor K50 Keyboard + 1b07 Vengeance K65 Gaming Keyboard + 1b08 Vengeance K95 Keyboard + 1b09 Vengeance K70R keyboard + 1b11 K95 RGB Mechanical Gaming Keyboard + 1b13 Vengeance K70RGB keyboard +1b1f eQ-3 Entwicklung GmbH +1b20 MStar Semiconductor, Inc. +1b22 WiLinx Corp. +1b26 Cellex Power Products, Inc. +1b27 Current Electronics Inc. +1b28 NAVIsis Inc. +1b32 Ugobe Life Forms, Inc. +1b36 ViXS Systems, Inc. +1b3b iPassion Technology Inc. +1b3f Generalplus Technology Inc. +1b47 Energizer Holdings, Inc. +1b48 Plastron Precision Co., Ltd. +1b52 ARH Inc. +1b59 K.S. Terminals Inc. +1b5a Chao Zhou Kai Yuan Electric Co., Ltd. +1b65 The Hong Kong Standards and Testing Centre Ltd. +1b71 Fushicai +1b72 ATERGI TECHNOLOGY CO., LTD. +1b73 Fresco Logic +1b75 Ovislink Corp. +1b76 Legend Silicon Corp. +1b80 Afatech +1b86 Dongguan Guanshang Electronics Co., Ltd. +1b88 ShenMing Electron (Dong Guan) Co., Ltd. +1b8c Altium Limited +1b8d e-MOVE Technology Co., Ltd. +1b8e Amlogic, Inc. +1b8f MA LABS, Inc. +1b96 N-Trig +1b98 YMax Communications Corp. +1b99 Shenzhen Yuanchuan Electronic +1ba1 JINQ CHERN ENTERPRISE CO., LTD. +1ba2 Lite Metals & Plastic (Shenzhen) Co., Ltd. +1ba4 Ember Corporation +1ba6 Abilis Systems +1ba8 China Telecommunication Technology Labs +1bad Harmonix Music +1bae Vuzix Corporation +1bbb T & A Mobile Phones +1bc4 Ford Motor Co. +1bc5 AVIXE Technology (China) Ltd. +1bc7 Telit Wireless Solutions +1bce Contac Cable Industrial Limited +1bcf Sunplus Innovation Technology Inc. + 05c5 SPRF2413A [2.4GHz Wireless Keyboard/Mouse Receiver] + 05cf Micro keyboard & mouse receiver +1bd0 Hangzhou Riyue Electronic Co., Ltd. +1bd5 BG Systems, Inc. +1bde P-TWO INDUSTRIES, INC. +1bef Shenzhen Tongyuan Network-Communication Cables Co., Ltd +1bf0 RealVision Inc. +1bf5 Extranet Systems Inc. +1bf6 Orient Semiconductor Electronics, Ltd. +1bfd TouchPack +1c02 Kreton Corporation +1c04 QNAP System Inc. +1c0c Ionics EMS, Inc. +1c0d Relm Wireless +1c10 Lanterra Industrial Co., Ltd. +1c13 ALECTRONIC LIMITED +1c1a Datel Electronics Ltd. +1c1b Volkswagen of America, Inc. +1c1f Goldvish S.A. +1c20 Fuji Electric Device Technology Co., Ltd. +1c21 ADDMM LLC +1c22 ZHONGSHAN CHIANG YU ELECTRIC CO., LTD. +1c26 Shanghai Haiying Electronics Co., Ltd. +1c27 HuiYang D & S Cable Co., Ltd. +1c29 Elster GmbH +1c31 LS Cable Ltd. +1c34 SpringCard +1c37 Authorizer Technologies, Inc. +1c3d NONIN MEDICAL INC. +1c3e Wep Peripherals +1c40 EZPrototypes +1c49 Cherng Weei Technology Corp. +1c4f SiGma Micro + 0002 Keyboard TRACER Gamma Ivory + 000e Genius KB-120 Keyboard + 0026 Keyboard +1c6b Philips & Lite-ON Digital Solutions Corporation +1c6c Skydigital Inc. +1c73 AMT +1c77 Kaetat Industrial Co., Ltd. +1c78 Datascope Corp. +1c79 Unigen Corporation +1c7a LighTuning Technology Inc. +1c7b LUXSHARE PRECISION INDUSTRY (SHENZHEN) CO., LTD. +1c83 Schomaecker GmbH +1c87 2N TELEKOMUNIKACE a.s. +1c88 Somagic, Inc. +1c89 HONGKONG WEIDIDA ELECTRON LIMITED +1c8e ASTRON INTERNATIONAL CORP. +1c98 ALPINE ELECTRONICS, INC. +1c9e OMEGA TECHNOLOGY +1ca0 ACCARIO Inc. +1ca1 Symwave +1cac Kinstone +1cb3 Aces Electronic Co., Ltd. +1cb4 OPEX CORPORATION +1cb6 IdeaCom Technology Inc. +1cbe Luminary Micro Inc. +1cbf FORTAT SKYMARK INDUSTRIAL COMPANY +1cc0 PlantSense +1cca NextWave Broadband Inc. +1ccd Bodatong Technology (Shenzhen) Co., Ltd. +1cd4 adp corporation +1cd5 Firecomms Ltd. +1cd6 Antonio Precise Products Manufactory Ltd. +1cde Telecommunications Technology Association (TTA) +1cdf WonTen Technology Co., Ltd. +1ce0 EDIMAX TECHNOLOGY CO., LTD. +1ce1 Amphenol KAE +1cf1 Dresden Elektronik +1cfc ANDES TECHNOLOGY CORPORATION +1cfd Flextronics Digital Design Japan, LTD. +1d03 iCON +1d07 Solid-Motion +1d08 NINGBO HENTEK DRAGON ELECTRONICS CO., LTD. +1d09 TechFaith Wireless Technology Limited +1d0a Johnson Controls, Inc. The Automotive Business Unit +1d0b HAN HUA CABLE & WIRE TECHNOLOGY (J.X.) CO., LTD. +1d0f Sonix Technology Co., Ltd. +1d14 ALPHA-SAT TECHNOLOGY LIMITED +1d17 C-Thru Music Ltd. + 0001 AXiS-49 Harmonic Table MIDI Keyboard +1d19 Dexatek Technology Ltd. +1d1f Diostech Co., Ltd. +1d20 SAMTACK INC. +1d27 ASUS +1d34 Dream Cheeky +1d45 Touch +1d4d PEGATRON CORPORATION +1d50 OpenMoko, Inc. + 6027 Key64 Keyboard + 6028 Teensy 2.0 Development Board [ErgoDox Keyboard] + 6033 frobiac / adnw keyboard + 609c antiAFK keyboard + 60a3 keyboard (bootloader) + 60e8 Alpen Clack keyboard + 60e9 keyman64 keyboard itercepter +1d57 Xenta + 0005 Wireless Receiver (Keyboard and Mouse) + 32da 2.4GHz Receiver (Keyboard and Mouse) + ac01 Wireless Receiver (Keyboard and Mouse) +1d5b Smartronix, Inc. +1d5c Fresco Logic +1d6b Linux Foundation +1d90 Citizen +1d9d Sigma Sport +1de1 Actions Microelectronics Co. +1e0e Qualcomm / Option +1e10 Point Grey Research, Inc. +1e17 Mirion Technologies Dosimetry Services Division +1e1d Kanguru Solutions +1e1f INVIA +1e29 Festo AG & Co. KG +1e3d Chipsbank Microelectronics Co., Ltd +1e41 Cleverscope +1e4e Cubeternet +1e54 TypeMatrix + 2030 2030 USB Keyboard +1e68 TrekStor GmbH & Co. KG +1e71 NZXT +1e74 Coby Electronics Corporation +1e7d ROCCAT + 30d4 Arvo Keyboard +1ea7 SHARKOON Technologies GmbH + 0066 [Mediatrack Edge Mini Keyboard] + 2007 SHARK ZONE K30 Illuminated Gaming Keyboard +1ebb NuCORE Technology, Inc. +1eda AirTies Wireless Networks +1edb Blackmagic design +1ee8 ONDA COMMUNICATION S.p.a. +1ef6 EADS Deutschland GmbH +1f28 Cal-Comp +1f3a Onda (unverified) +1f44 The Neat Company +1f48 H-TRONIC GmbH +1f4d G-Tek Electronics Group +1f6f Aliph +1f75 Innostor Technology Corporation +1f82 TANDBERG +1f84 Alere, Inc. +1f87 Stantum +1f9b Ubiquiti Networks, Inc. +1fab Samsung Opto-Electroncs Co., Ltd. +1fbd Delphin Technology AG +1fc9 NXP Semiconductors +1fde ILX Lightwave Corporation +1fe7 Vertex Wireless Co., Ltd. +1ff7 CVT Electronics.Co.,Ltd +1fff Ideofy Inc. +2001 D-Link Corp. +2002 DAP Technologies +2003 detectomat +200c Reloop +2013 PCTV Systems +2019 PLANEX +203d Encore Electronics Inc. +2040 Hauppauge +2047 Texas Instruments +2058 Nano River Technology +2077 Taicang T&W Electronics Co. Ltd +2080 Barnes & Noble +2086 SIMPASS +2087 Cando +20a0 Clay Logic +20b1 XMOS Ltd +20b3 Hanvon +20b7 Qi Hardware +20ce Minicircuits +20df Simtec Electronics +20f1 NET New Electronic Technology GmbH +20f4 TRENDnet +20f7 XIMEA +2100 RT Systems +2101 ActionStar +2109 VIA Labs, Inc. +2113 Softkinetic +2149 Advanced Silicon S.A. +2162 Creative (?) +2184 GW Instek +21a1 Emotiv Systems Pty. Ltd. +21d6 Agecodagis SARL +2207 Fuzhou Rockchip Electronics Company +2222 MacAlly + 0004 iWebKey Keyboard +2227 SAMWOO Enterprise +2232 Silicon Motion +2233 RadioShack Corporation +2237 Kobo Inc. +224f APDM +225d Morpho +228d 8D Technologies inc. +22a6 Pie Digital, Inc. +22b8 Motorola PCS +22b9 eTurboTouch Technology, Inc. +22ba Technology Innovation Holdings, Ltd +22c9 StepOver GmbH +22cd Kinova Robotics Inc. +22e0 secunet Security Networks AG +2304 Pinnacle Systems, Inc. +2318 Shining Technologies, Inc. [hex] +2341 Arduino SA +2357 TP-Link +2373 Pumatronix Ltda +2375 Digit@lway, Inc. +2406 SANHO Digital Electronics Co., Ltd. +2443 Aessent Technology Ltd +2478 Tripp-Lite +248a Maxxter +249c M2Tech s.r.l. +24e1 Paratronic +2516 Cooler Master Co., Ltd. + 0004 Storm QuickFire Rapid Mechanical Keyboard + 0020 QuickFire Rapid-i Keyboard +2548 Pulse-Eight +25b5 FlatFrog +2632 TwinMOS +2639 Xsens +2650 Electronics For Imaging, Inc. [hex] +2659 Sundtek +2676 Basler AG +2717 Xiaomi Inc. +2730 Citizen +2735 DigitalWay +273f Hughski Limited +2770 NHJ, Ltd +27b8 ThingM +27c6 Shenzhen Goodix Technology Co.,Ltd. +2821 ASUSTek Computer Inc. +2899 Toptronic Industrial Co., Ltd +289b Dracal/Raphnet technologies + 000a Dreamcast (Keyboard mode) + 000b Gamecube/N64 controller v2.9 (Keyboard mode) +28de Valve Software +2931 Jolla Oy +2939 Zaber Technologies Inc. +2a03 dog hunter AG +2a37 RTD Embedded Technologies, Inc. +2a45 Meizu Corp. +2ac7 Ultrahaptics Ltd. +2b24 KeepKey LLC +2c02 Planex Communications +2c1a Dolphin Peripherals +2c23 Supermicro Computer Incorporated +2c7c Quectel Wireless Solutions Co., Ltd. +2cdc Sea & Sun Technology GmbH +2dcf Dialog Semiconductor +2fb2 Fujitsu, Ltd +3016 Boundary Devices, LLC +30a4 Blues Wireless +30c2 UNPARALLEL Innovation, Lda +30c9 Luxvisions Innotech Limited +30ee Fujitsu Connected Technologies Limited +3125 Eagletron +3136 Navini Networks +3176 Whanam Electronics Co., Ltd +3195 Link Instruments +3275 VidzMedia Pte Ltd +3333 InLine +3334 AEI +3340 Yakumo +3344 Leaguer Microelectronics (LME) +3504 Micro Star +3538 Power Quotient International Co., Ltd +3579 DIVA +357d Sharkoon +3636 InVibro +3838 WEM +3923 National Instruments Corp. +40bb I-O Data +4101 i-rocks +4102 iRiver, Ltd. +413c Dell Computer Corp. + 0000 DRAC 5 Virtual Keyboard and Mouse + 1001 Keyboard Hub + 1002 Keyboard Hub + 1003 Keyboard Hub + 1005 Multimedia Pro Keyboard Hub + 2001 Keyboard HID Support + 2002 SK-8125 Keyboard + 2003 Keyboard + 2005 RT7D50 Keyboard + 2010 Keyboard + 2011 Multimedia Pro Keyboard + 2100 SK-3106 Keyboard + 2101 SmartCard Reader Keyboard + 2105 Model L100 Keyboard + 2106 Dell QuietKey Keyboard + 8157 Integrated Keyboard + 8161 Integrated Keyboard +4146 USBest Technology +4168 Targus +4242 USB Design by Example +4255 GoPro +4317 Broadcom Corp. +4348 WinChipHead +4572 Shuttle, Inc. +4586 Panram +4670 EMS Production +4752 Miditech +4757 GW Instek +4766 Aceeca +4855 Memorex +4971 SimpleTech +4d46 Musical Fidelity +5032 Grandtec +5041 Linksys (?) +50c2 Averatec (?) +5173 Sweex +5219 I-Tetra +5345 Owon +534c SatoshiLabs +5354 Meyer Instruments (MIS) +544d Transmeta Corp. +5543 UC-Logic Technology Corp. +5555 Epiphan Systems Inc. +55aa OnSpec Electronic, Inc. +5654 Gotview +5656 Uni-Trend Group Limited +595a IRTOUCHSYSTEMS Co. Ltd. +5986 Acer, Inc +59e3 Nonolith Labs +5a57 Zinwell +6000 Beholder International Ltd. +601a Ingenic Semiconductor Ltd. +6189 Sitecom +6244 LightingSoft AG +6253 TwinHan Technology Co., Ltd +636c CoreLogic, Inc. +6472 Unknown (Sony?) +6547 Arkmicro Technologies Inc. +6615 IRTOUCHSYSTEMS Co. Ltd. +6666 Prototype product Vendor ID +6677 WiseGroup, Ltd. +6891 3Com +695c Opera1 +6993 Yealink Network Technology Co., Ltd. +6a75 Shanghai Jujo Electronics Co., Ltd +7104 CME (Central Music Co.) + 2202 UF5/UF6/UF7/UF8 MIDI Master Keyboard +726c StackFoundry LLC +734c TBS Technologies China +7373 Beijing STONE Technology Co. Ltd. +7392 Edimax Technology Co., Ltd +8086 Intel Corp. + 0dad Cherry MiniatureCard Keyboard +8087 Intel Corp. +80ee VirtualBox +8282 Keio +8341 EGO Systems, Inc. +8564 Transcend Information, Inc. +8644 Intenso GmbG +8e06 CH Products, Inc. +9016 Sitecom +9022 TeVii Technology Ltd. +9148 GeoLab, Ltd +9710 MosChip Semiconductor +9849 Bestmedia CD Recordable GmbH & Co. KG +9999 Odeon +99fa Grandtec +9ac4 J. Westhues +9e88 Marvell Semiconductor, Inc. + 01 Keyboard + 01 Keyboard + 006 Keyboard +HUT 07 Keyboard + 001 Keyboard ErrorRollOver + 002 Keyboard POSTfail + 003 Keyboard Error Undefined + 032 # and ~ (Hash and Tilde, Non-US Keyboard near right shift) + 064 \ and | (Backslash and Bar, UK and Non-US Keyboard near left shift) + 065 Keyboard Application (Windows Key for Win95 or Compose) \ No newline at end of file diff --git a/windows/detectUSB.ahk b/windows/detectUSB.ahk new file mode 100644 index 0000000..0775e17 --- /dev/null +++ b/windows/detectUSB.ahk @@ -0,0 +1,19 @@ +#SingleInstance, force +OnMessage(0x219, "notify_change") +Return + +lastnotify := 0 + +notify_change(wParam, lParam, msg, hwnd) +{ + global lastnotify + T = %A_Now% + T -= 19700101000000,seconds + Tdiff := T + Tdiff -= lastnotify + if Tdiff > 5 + { + MsgBox % Tdiff + } + lastnotify := T +} \ No newline at end of file From 2b9598c84fc73aecb2ebd6b0a5cf572db8b917a0 Mon Sep 17 00:00:00 2001 From: Ben Reaves Date: Mon, 15 Jun 2020 01:15:01 -0500 Subject: [PATCH 06/10] - Completed Windows autoset keyboard feature --- setup.py | 2 ++ windows/detectUSB.ahk | 40 ++++++++++++++++++------ windows/kinto.ahk | 44 +++++++++++++++++++++++++++ windows/usb.vbs | 71 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 147 insertions(+), 10 deletions(-) create mode 100644 windows/usb.vbs diff --git a/setup.py b/setup.py index 1cb6016..53956f3 100755 --- a/setup.py +++ b/setup.py @@ -37,6 +37,8 @@ def windows_setup(): if(stvscode): os.system('perl -pi -e "s/(; )(.*)(; ST2CODE)/$2$3/g" ./windows/kinto-new.ahk') os.system('copy /Y ' + path + '\\windows\\kinto-start.vbs "%userprofile%\\.kinto\\kinto-start.vbs"') + os.system('copy /Y ' + path + '\\windows\\usb.vbs "%userprofile%\\.kinto\\usb.vbs"') + os.system('copy /Y ' + path + '\\windows\\usb.vbs "%userprofile%\\.kinto\\detectUSB.vbs"') os.system('mklink "%userprofile%\\Start Menu\\Programs\\Startup\\kinto-start.vbs" "%userprofile%\\.kinto\\kinto-start.vbs"') os.system('cp '+ path + '\\windows\\NoShell.vbs "%userprofile%\\.kinto\\NoShell.vbs"') os.system('cp '+ path + '\\windows\\toggle_kb.bat "%userprofile%\\.kinto\\toggle_kb.bat"') diff --git a/windows/detectUSB.ahk b/windows/detectUSB.ahk index 0775e17..f09c33f 100644 --- a/windows/detectUSB.ahk +++ b/windows/detectUSB.ahk @@ -1,19 +1,39 @@ #SingleInstance, force +#NoTrayIcon OnMessage(0x219, "notify_change") Return -lastnotify := 0 +lastkb = "" + +DllCall("AllocConsole") +WinHide % "ahk_id " DllCall("GetConsoleWindow", "ptr") notify_change(wParam, lParam, msg, hwnd) { - global lastnotify - T = %A_Now% - T -= 19700101000000,seconds - Tdiff := T - Tdiff -= lastnotify - if Tdiff > 5 + global lastkb + ; kbtype = % ComObjCreate("WScript.Shell").Exec("cscript /nologo usb.vbs").StdOut.ReadAll() + DetectHiddenWindows On + Run %ComSpec%,, Hide, pid + WinWait ahk_pid %pid% + DllCall("AttachConsole", "UInt", pid) + WshShell := ComObjCreate("Wscript.Shell") + exec := WshShell.Exec("cscript /nologo usb.vbs") + kbtype := exec.StdOut.ReadAll() + DllCall("FreeConsole") + Process Close, %pid% + if lastkb != %kbtype% { - MsgBox % Tdiff + + if InStr(kbtype, "Apple") + { + ; MsgBox, Apple + Run, %A_ScriptDir%\NoShell.vbs %A_ScriptDir%\toggle_kb.bat mac, %A_ScriptDir% + } + else{ + ; MsgBox, Windows + Run, %A_ScriptDir%\NoShell.vbs %A_ScriptDir%\toggle_kb.bat win, %A_ScriptDir% + } + ; MsgBox % kbtype } - lastnotify := T -} \ No newline at end of file + lastkb = %kbtype% +} diff --git a/windows/kinto.ahk b/windows/kinto.ahk index c75f2cd..374e950 100644 --- a/windows/kinto.ahk +++ b/windows/kinto.ahk @@ -2,6 +2,9 @@ #NoEnv #Persistent +DetectHiddenWindows, On +Run, %A_ScriptDir%\detectUSB.ahk + I_Icon = %A_ScriptDir%\assets\kinto-white.ico IfExist, %I_Icon% Menu, Tray, Icon, %I_Icon% @@ -44,9 +47,50 @@ tray_suspend(){ } Exit() { + IfWinExist, detectUSB.ahk + WinClose + ExitApp } +OnMessage(0x219, "notify_change") +return + +lastkb = "" + +DllCall("AllocConsole") +WinHide % "ahk_id " DllCall("GetConsoleWindow", "ptr") + +notify_change(wParam, lParam, msg, hwnd) +{ + global lastkb + ; kbtype = % ComObjCreate("WScript.Shell").Exec("cscript /nologo usb.vbs").StdOut.ReadAll() + DetectHiddenWindows On + Run %ComSpec%,, Hide, pid + WinWait ahk_pid %pid% + DllCall("AttachConsole", "UInt", pid) + WshShell := ComObjCreate("Wscript.Shell") + exec := WshShell.Exec("cscript /nologo usb.vbs") + kbtype := exec.StdOut.ReadAll() + DllCall("FreeConsole") + Process Close, %pid% + if lastkb != %kbtype% + { + + if InStr(kbtype, "Apple") + { + ; MsgBox, Apple + Run, %A_ScriptDir%\NoShell.vbs %A_ScriptDir%\toggle_kb.bat mac, %A_ScriptDir% + } + else{ + ; MsgBox, Windows + Run, %A_ScriptDir%\NoShell.vbs %A_ScriptDir%\toggle_kb.bat win, %A_ScriptDir% + } + ; MsgBox % kbtype + } + lastkb = %kbtype% +} + SetTitleMatchMode, 2 GroupAdd, terminals, ahk_exe ubuntu.exe diff --git a/windows/usb.vbs b/windows/usb.vbs new file mode 100644 index 0000000..ab0cdef --- /dev/null +++ b/windows/usb.vbs @@ -0,0 +1,71 @@ +Option Explicit +Dim oWMISrv, collDvcs, iUSBDvc , iDvc, sDvcID, sPID, sVID + +' add item to array +Function AddItem(arr, val) + ReDim Preserve arr(UBound(arr) + 1) + arr(UBound(arr)) = val + AddItem = arr +End Function + +' returns an array of the unique items in for-each-able collection fex +Function uniqFE(fex) + Dim dicTemp : Set dicTemp = CreateObject("Scripting.Dictionary") + Dim xItem + For Each xItem In fex + dicTemp(xItem) = 0 + Next + uniqFE = dicTemp.Keys() +End Function + +Function ReplaceX(ByVal sValue, ByVal sPattern, ByVal sNValue) + Dim oReg : Set oReg = New RegExp + oReg.Pattern = sPattern + ReplaceX = oReg.Replace(sValue, sNValue) + Set oReg = Nothing +End Function + +Set oWMISrv = GetObject("winmgmts:\\.\root\cimv2") +Set collDvcs = oWMISrv.ExecQuery("Select * From Win32_PnPEntity WHERE Service='kbdhid'") + +Dim deviceVID : deviceVID=Array() +Dim devicePID : devicePID=Array() +Dim deviceDesc : deviceDesc=Array() +Dim counter: counter=0 + +For Each iUSBDvc In collDvcs + sVID = ReplaceX(iUSBDvc.DeviceID, ".*VID_(.{4}).*", "$1") + sPID = ReplaceX(iUSBDvc.DeviceID, ".*PID_(.{4}).*", "$1") + deviceVID = AddItem(deviceVID, sVID) + devicePID = AddItem(devicePID, sPID) + deviceDesc = AddItem(deviceDesc, iUSBDvc.Description) + counter = counter + 1 + ' Wscript.Echo "Name : "& iUSBDvc.Description &"VID_PID : "& sVID & sPID + Next + +Dim uniqueVID: uniqueVID = uniqFE(deviceVID) +Dim vcount: vcount = UBound(uniqueVID) + 1 +Dim nonApple: nonApple = 0 +Dim i + +If vcount = 1 Then + If StrComp(deviceVID(0), "05AC") = 0 Then + Wscript.Echo "Apple" + Else + Wscript.Echo "Windows" + End If +Else + For i = 0 To counter-1 + If StrComp(deviceVID(i), "05AC") = -1 Then + nonApple = 1 + End If + Next + If nonApple = 1 Then + Wscript.Echo "Windows" + Else + Wscript.Echo "Apple" + End If +End If + +Set collDvcs = Nothing +Set oWMISrv = Nothing \ No newline at end of file From cc05da2f59e9ff101c5e6834a615c75f2f80eeb9 Mon Sep 17 00:00:00 2001 From: Ben Reaves Date: Mon, 15 Jun 2020 23:01:38 -0500 Subject: [PATCH 07/10] - Added more assets and added suspend and unique windows vs apple keyboard status icons for Windows --- assets/kinto-black-invert.ico | Bin 0 -> 101701 bytes assets/kinto-color-black-invert.ico | Bin 0 -> 107853 bytes assets/kinto-color-invert-border.ico | Bin 0 -> 106409 bytes assets/kinto-color-invert.ico | Bin 0 -> 104526 bytes assets/kinto-color-white-invert.ico | Bin 0 -> 107937 bytes assets/kinto-white-invert.ico | Bin 0 -> 103048 bytes windows/kinto.ahk | 20 +++++++++++++++----- 7 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 assets/kinto-black-invert.ico create mode 100644 assets/kinto-color-black-invert.ico create mode 100644 assets/kinto-color-invert-border.ico create mode 100644 assets/kinto-color-invert.ico create mode 100644 assets/kinto-color-white-invert.ico create mode 100644 assets/kinto-white-invert.ico diff --git a/assets/kinto-black-invert.ico b/assets/kinto-black-invert.ico new file mode 100644 index 0000000000000000000000000000000000000000..42bac53205086e1689170314993b37971c31e1b8 GIT binary patch literal 101701 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 G#{U6tVX~kA literal 0 HcmV?d00001 diff --git a/assets/kinto-color-black-invert.ico b/assets/kinto-color-black-invert.ico new file mode 100644 index 0000000000000000000000000000000000000000..b44cfc9b924c95f70ac4f88d9abc389803183cb9 GIT binary patch literal 107853 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 Xs#UP8ch_Jjf)q|d4f!%Ubj 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 literal 0 HcmV?d00001 diff --git a/assets/kinto-color-invert.ico b/assets/kinto-color-invert.ico new file mode 100644 index 0000000000000000000000000000000000000000..ca6d7db7cc0baaf7b00ecc7f3ce77431417e1711 GIT binary patch literal 104526 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 Ym&YFuj(B4jih~do<(J6W&Do^)e{nk?umAu6 literal 0 HcmV?d00001 diff --git a/assets/kinto-white-invert.ico b/assets/kinto-white-invert.ico new file mode 100644 index 0000000000000000000000000000000000000000..90995633b589e153687bbf9a5fafe0efef2d29f6 GIT binary patch literal 103048 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 Date: Mon, 15 Jun 2020 23:13:31 -0500 Subject: [PATCH 08/10] - Updated uninstaller for Windows to fully remove kinto --- setup.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/setup.py b/setup.py index 53956f3..e87e37e 100755 --- a/setup.py +++ b/setup.py @@ -26,6 +26,11 @@ def windows_setup(): # os.system("regedit " + path + "\\windows\\standard_ctrlalt_swap.reg") elif default == 3: os.system("regedit " + path + "\\windows\\remove_keyswap.reg") + os.system("del /f .\\windows\\kinto-new.ahk") + os.system("del \"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp\\kinto.ahk\"") + os.system("taskkill /IM autohotkey.exe") + os.system('rd /s /q %userprofile%\\.kinto') + os.system('del "%userprofile%\\AppData\\Roaming\\Microsoft\\Windows\\STARTM~1\\Programs\\Startup\\kinto-start.vbs"') stvscode = yn_choice(bcolors.CYELLOW2 + "Would you like to use Sublime Text 3 keymaps in VS Code?\n" + bcolors.ENDC) if default > 0 and default < 3: print("Will now install chocolatey and autohotkey with elevated privileges...") From b5ab41de9d8f651fb546401f2a52de0e5fec43c8 Mon Sep 17 00:00:00 2001 From: Ben Reaves Date: Tue, 16 Jun 2020 00:44:44 -0500 Subject: [PATCH 09/10] - Added proper disabling of the autodetect feature when program is disabled. --- windows/kinto.ahk | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/windows/kinto.ahk b/windows/kinto.ahk index 4d7f48e..832c677 100644 --- a/windows/kinto.ahk +++ b/windows/kinto.ahk @@ -46,11 +46,15 @@ tray_suspend(){ I_Icon = %A_ScriptDir%\assets\kinto-color-invert.ico Menu, Tray, Icon, %I_Icon%,, 1 Menu, Tray, Tip, Suspended - Kinto + IfWinExist, detectUSB.ahk + WinClose } else{ menu, tray, unCheck, Suspend Kinto - I_Icon = %A_ScriptDir%\assets\kinto-white.ico +; I_Icon = %A_ScriptDir%\assets\kinto-white.ico ; MacModifiers +; I_Icon = %A_ScriptDir%\assets\kinto-white-invert.ico ; WinModifiers Menu, Tray, Icon, %I_Icon%,,1 + Run, %A_ScriptDir%\detectUSB.ahk } ; Refocus last active Window Send {LAlt down}{tab}{LAlt up} From 7174904434fcf961e86589ec5c4c2d0c1cbefa90 Mon Sep 17 00:00:00 2001 From: Ben Reaves Date: Tue, 16 Jun 2020 02:37:02 -0500 Subject: [PATCH 10/10] - Added source control remap to VS Code. Closes #191. --- windows/kinto.ahk | 13 +++++++------ xkeysnail-config/kinto.py | 1 + 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/windows/kinto.ahk b/windows/kinto.ahk index 832c677..b41d65b 100644 --- a/windows/kinto.ahk +++ b/windows/kinto.ahk @@ -239,15 +239,16 @@ $^+Right::Send +{End} ; Cmd+Space Alternative ^Space::Send ^{Esc} -; ; Sublime Text Remaps for VS Code -#IfWinActive ahk_group vscode ; ST2CODE +; Sublime Text Remaps for VS Code +#IfWinActive ahk_group vscode ; Remap Ctrl+Shift to behave like macOS Sublimetext ; Will extend cursor to multiple lines - #+Up::send ^!{Up} ; ST2CODE - #+Down::send ^!{Down} ; ST2CODE +; #+Up::send ^!{Up} ; ST2CODE +; #+Down::send ^!{Down} ; ST2CODE ; Remap Ctrl+Cmd+G to select all matches - #^g::send ^+{L} ; ST2CODE -#If ; ST2CODE +; #^g::send ^+{L} ; ST2CODE + !+g::send ^+{G} ; View source control +#If #IfWinActive ahk_exe sublime_text.exe ; Remap Ctrl+Shift to behave like macOS Sublimetext diff --git a/xkeysnail-config/kinto.py b/xkeysnail-config/kinto.py index 3be7d6b..9858a71 100644 --- a/xkeysnail-config/kinto.py +++ b/xkeysnail-config/kinto.py @@ -118,6 +118,7 @@ define_keymap(lambda wm_class: wm_class.casefold() not in mscodes,{ K("M-Shift-Left"): K("C-Shift-Left"), # Select Left of Word K("M-Right"): K("C-Right"), # Right of Word K("M-Shift-Right"): K("C-Shift-Right"), # Select Right of Word + K("M-Shift-g"): K("C-Shift-g"), # View source control # ** VS Code fix ** # Electron issue precludes normal keybinding fix. # Alt menu auto-focus/toggle gets in the way.