Initial commit
This commit is contained in:
commit
b837813f18
76
gk1100.py
Normal file
76
gk1100.py
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
import usb.core
|
||||||
|
import usb.util
|
||||||
|
from array import array
|
||||||
|
import pdb
|
||||||
|
|
||||||
|
class GK1100():
|
||||||
|
COMMANDS = ["", "SET_ANIMATION"]
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.ANIMATIONS = ["OFF", "STATIC", "CIRCLE", "CUSTOM", "COLOR_CYCLE", "AFTER_GLOW", "STARS", "ROW_ROCKET"]
|
||||||
|
self.COLORS = ["RED", "WHITE", "GREEN", "BLUE", "PINK", "YELLOW", "LIGHT_BLUE", "VAR"]
|
||||||
|
dev = usb.core.find(idVendor=0x0b05, idProduct=0x1835)
|
||||||
|
if dev is None:
|
||||||
|
raise ValueError('GK1100 keyboard not found!')
|
||||||
|
|
||||||
|
cfg = dev.get_active_configuration()
|
||||||
|
led_interface = cfg[(1,0)]
|
||||||
|
if dev.is_kernel_driver_active(1):
|
||||||
|
dev.detach_kernel_driver(1)
|
||||||
|
usb.util.claim_interface(dev, 1)
|
||||||
|
|
||||||
|
self.led_out = led_interface.endpoints()[1]
|
||||||
|
self.led_in = led_interface.endpoints()[0]
|
||||||
|
|
||||||
|
def set_animation(self, animation, color, speed, brightness):
|
||||||
|
data = array("B", [0x06, 0x0b, 0x01, self.ANIMATIONS.index(animation), brightness, speed, self.COLORS.index(color)])
|
||||||
|
self.led_out.write(data)
|
||||||
|
self.pprint_reply(self.fetch_reply())
|
||||||
|
|
||||||
|
def pprint_reply(self, data):
|
||||||
|
# TODO: is byte 0 alway 0x06 (magic header?)?
|
||||||
|
# TODO: what is byte 1?
|
||||||
|
# TODO: what is byte 2?
|
||||||
|
animation = data[3]
|
||||||
|
brightness = data[4]
|
||||||
|
speed = data[5]
|
||||||
|
animation_color = data[6]
|
||||||
|
success = data[7]
|
||||||
|
# TODO: byte 8 could be some kind of checksum
|
||||||
|
print("Animation:", animation, "->", self.ANIMATIONS[animation])
|
||||||
|
if animation != 2 and animation != 4 and animation != 7 and animation != 0:
|
||||||
|
print("Color:", animation_color, "->", self.COLORS[animation_color])
|
||||||
|
print("Speed:", speed)
|
||||||
|
print("Brightness:", brightness)
|
||||||
|
print("Command was successful executed:", True if success == 1 else False)
|
||||||
|
print("Left-over data:", data[8:])
|
||||||
|
print()
|
||||||
|
|
||||||
|
|
||||||
|
def fetch_reply(self):
|
||||||
|
try:
|
||||||
|
data = self.led_in.read(128, timeout=None)
|
||||||
|
return data
|
||||||
|
except Exception:
|
||||||
|
return None
|
||||||
|
|
||||||
|
#class HID_message():
|
||||||
|
# def __init__(self, command, payload):
|
||||||
|
# self.data = array("B", [0]*64)
|
||||||
|
# self.set_header()
|
||||||
|
# if command in GK1100.COMMANDS:
|
||||||
|
# self.data[2] = GK1100.COMMAND.index(command)
|
||||||
|
# else:
|
||||||
|
# raise ValueError("Command \"{}\" not found".format(command))
|
||||||
|
#
|
||||||
|
# def set_header(self):
|
||||||
|
# self.data[0] = 6
|
||||||
|
# self.data[1] = 11
|
||||||
|
|
||||||
|
|
||||||
|
keyboard = GK1100()
|
||||||
|
keyboard.set_animation("STATIC", "PINK", 0, 3)
|
||||||
|
keyboard.set_animation("STATIC", "RED", 0, 3)
|
||||||
|
keyboard.set_animation("STATIC", "RED", 0, 4)
|
||||||
|
keyboard.set_animation("STATIC", "RED", 1, 3)
|
||||||
|
pdb.set_trace()
|
Loading…
Reference in a new issue