mirror of
https://github.com/erjiang/huion-keys.git
synced 2026-03-23 21:54:53 +03:00
Fixed XDO not working
General cleanup in accordance with pep8
This commit is contained in:
parent
611621d4ab
commit
5d3f0778f1
@ -31,6 +31,7 @@ BUTTON_BITS = {
|
|||||||
0x80: 8,
|
0x80: 8,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
# Commandline arguments processing
|
# Commandline arguments processing
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
@ -66,7 +67,6 @@ def main():
|
|||||||
hidraw_path = get_tablet_hidraw(device_id)
|
hidraw_path = get_tablet_hidraw(device_id)
|
||||||
if hidraw_path is not None:
|
if hidraw_path is not None:
|
||||||
hidraw_paths = hidraw_paths + hidraw_path
|
hidraw_paths = hidraw_paths + hidraw_path
|
||||||
|
|
||||||
if hidraw_paths:
|
if hidraw_paths:
|
||||||
print("Found %s at %s" % (device_name, hidraw_paths))
|
print("Found %s at %s" % (device_name, hidraw_paths))
|
||||||
break
|
break
|
||||||
@ -85,14 +85,14 @@ def main():
|
|||||||
for thread in threads:
|
for thread in threads:
|
||||||
thread.join()
|
thread.join()
|
||||||
|
|
||||||
|
|
||||||
class PollThread(threading.Thread):
|
class PollThread(threading.Thread):
|
||||||
|
|
||||||
cycle_mode = None
|
cycle_mode = None
|
||||||
|
scroll_state = None
|
||||||
hidraw_path = None
|
hidraw_path = None
|
||||||
xdo = None
|
xdo = None
|
||||||
|
|
||||||
SCROLL_STATE=None
|
|
||||||
|
|
||||||
def __init__(self, hidraw_path):
|
def __init__(self, hidraw_path):
|
||||||
super(PollThread, self).__init__()
|
super(PollThread, self).__init__()
|
||||||
self.xdo = lib.xdo_new(ffi.NULL)
|
self.xdo = lib.xdo_new(ffi.NULL)
|
||||||
@ -119,8 +119,6 @@ class PollThread(threading.Thread):
|
|||||||
time.sleep(3)
|
time.sleep(3)
|
||||||
break
|
break
|
||||||
print("Got button %s" % (btn,))
|
print("Got button %s" % (btn,))
|
||||||
print(CYCLE_MODES)
|
|
||||||
print(self.cycle_mode)
|
|
||||||
if btn == CYCLE_BUTTON and CYCLE_BUTTON is not None:
|
if btn == CYCLE_BUTTON and CYCLE_BUTTON is not None:
|
||||||
self.cycle_mode = self.cycle_mode + 1
|
self.cycle_mode = self.cycle_mode + 1
|
||||||
if self.cycle_mode > CYCLE_MODES:
|
if self.cycle_mode > CYCLE_MODES:
|
||||||
@ -141,7 +139,7 @@ class PollThread(threading.Thread):
|
|||||||
lib.xdo_send_keysequence_window(
|
lib.xdo_send_keysequence_window(
|
||||||
self.xdo, lib.CURRENTWINDOW, BUTTON_BINDINGS[btn], 1000)
|
self.xdo, lib.CURRENTWINDOW, BUTTON_BINDINGS[btn], 1000)
|
||||||
|
|
||||||
def get_button_press(self,hidraw):
|
def get_button_press(self, hidraw):
|
||||||
while True:
|
while True:
|
||||||
sequence = hidraw.read(12)
|
sequence = hidraw.read(12)
|
||||||
# 0xf7 is what my Kamvas Pro 22 reads
|
# 0xf7 is what my Kamvas Pro 22 reads
|
||||||
@ -163,18 +161,18 @@ class PollThread(threading.Thread):
|
|||||||
scroll_pos = sequence[5]
|
scroll_pos = sequence[5]
|
||||||
if scroll_pos == 0:
|
if scroll_pos == 0:
|
||||||
# reset scroll state after lifting finger off scroll strip
|
# reset scroll state after lifting finger off scroll strip
|
||||||
self.SCROLL_STATE = None
|
self.scroll_state = None
|
||||||
elif self.SCROLL_STATE is not None:
|
elif self.scroll_state is not None:
|
||||||
# scroll strip is numbered from top to bottom so a greater new
|
# scroll strip is numbered from top to bottom so a greater new
|
||||||
# value means they scrolled down
|
# value means they scrolled down
|
||||||
if scroll_pos > self.SCROLL_STATE:
|
if scroll_pos > self.scroll_state:
|
||||||
self.SCROLL_STATE = scroll_pos
|
self.scroll_state = scroll_pos
|
||||||
return 'scroll_down'
|
return 'scroll_down'
|
||||||
elif scroll_pos < self.SCROLL_STATE:
|
elif scroll_pos < self.scroll_state:
|
||||||
self.SCROLL_STATE = scroll_pos
|
self.scroll_state = scroll_pos
|
||||||
return 'scroll_up'
|
return 'scroll_up'
|
||||||
else:
|
else:
|
||||||
self.SCROLL_STATE = scroll_pos
|
self.scroll_state = scroll_pos
|
||||||
continue
|
continue
|
||||||
elif sequence[1] == 0xf1: # dial on Q620M, practically 2 buttons
|
elif sequence[1] == 0xf1: # dial on Q620M, practically 2 buttons
|
||||||
if sequence[5] == 0x1:
|
if sequence[5] == 0x1:
|
||||||
@ -184,17 +182,18 @@ class PollThread(threading.Thread):
|
|||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
def get_button_release(self,hidraw):
|
def get_button_release(self, hidraw):
|
||||||
while True:
|
while True:
|
||||||
sequence = hidraw.read(12)
|
sequence = hidraw.read(12)
|
||||||
if sequence[1] == 0xe0 and sequence[4] == 0 and sequence[5] == 0:
|
if sequence[1] == 0xe0 and sequence[4] == 0 and sequence[5] == 0:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def get_tablet_hidraw(device_id):
|
def get_tablet_hidraw(device_id):
|
||||||
"""Finds the /dev/hidrawX file or files that belong to the given device ID (in xxxx:xxxx format)."""
|
"""Finds the /dev/hidrawX file or files that belong to the given device ID (in xxxx:xxxx format)."""
|
||||||
# TODO: is this too fragile?
|
# TODO: is this too fragile?
|
||||||
hidraws = os.listdir('/sys/class/hidraw')
|
hidraws = os.listdir('/sys/class/hidraw')
|
||||||
inputs = [];
|
inputs = []
|
||||||
for h in hidraws:
|
for h in hidraws:
|
||||||
device_path = os.readlink(os.path.join('/sys/class/hidraw', h, 'device'))
|
device_path = os.readlink(os.path.join('/sys/class/hidraw', h, 'device'))
|
||||||
if device_id.upper() in device_path:
|
if device_id.upper() in device_path:
|
||||||
@ -229,7 +228,7 @@ def read_config(config_file):
|
|||||||
continue # ignore empty line
|
continue # ignore empty line
|
||||||
else:
|
else:
|
||||||
print("[WARN] unrecognized regular binding '%s'" % (binding,))
|
print("[WARN] unrecognized regular binding '%s'" % (binding,))
|
||||||
#Same, but for buttons that should be held down
|
# Same, but for buttons that should be held down
|
||||||
if 'Hold' in CONFIG:
|
if 'Hold' in CONFIG:
|
||||||
for binding in CONFIG['Hold']:
|
for binding in CONFIG['Hold']:
|
||||||
if binding.isdigit():
|
if binding.isdigit():
|
||||||
@ -237,7 +236,7 @@ def read_config(config_file):
|
|||||||
elif binding == '':
|
elif binding == '':
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
print ("[WARN] unrecognized hold binding '%s'" % (binding,))
|
print("[WARN] unrecognized hold binding '%s'" % (binding,))
|
||||||
# Assume that if cycle is assigned we have modes for now
|
# Assume that if cycle is assigned we have modes for now
|
||||||
if 'Dial' in CONFIG:
|
if 'Dial' in CONFIG:
|
||||||
CYCLE_BUTTON = int(CONFIG['Dial']['cycle'])
|
CYCLE_BUTTON = int(CONFIG['Dial']['cycle'])
|
||||||
@ -251,12 +250,14 @@ def read_config(config_file):
|
|||||||
for binding in CONFIG[key]:
|
for binding in CONFIG[key]:
|
||||||
DIAL_MODES[mode][binding] = CONFIG[key][binding].encode('utf-8')
|
DIAL_MODES[mode][binding] = CONFIG[key][binding].encode('utf-8')
|
||||||
|
|
||||||
|
|
||||||
def make_rules():
|
def make_rules():
|
||||||
for device_name, device_id in TABLET_MODELS.items():
|
for device_name, device_id in TABLET_MODELS.items():
|
||||||
print("# %s" % (device_name, ))
|
print("# %s" % (device_name, ))
|
||||||
VID, PID = device_id.split(':')
|
VID, PID = device_id.split(':')
|
||||||
print('KERNEL=="hidraw*", ATTRS{idVendor}=="%s", ATTRS{idProduct}=="%s", MODE="0660", TAG+="uaccess"' % (VID, PID, ))
|
print('KERNEL=="hidraw*", ATTRS{idVendor}=="%s", ATTRS{idProduct}=="%s", MODE="0660", TAG+="uaccess"' % (VID, PID, ))
|
||||||
|
|
||||||
|
|
||||||
def create_default_config(config_file):
|
def create_default_config(config_file):
|
||||||
with open(config_file, 'w') as config:
|
with open(config_file, 'w') as config:
|
||||||
config.write("""
|
config.write("""
|
||||||
@ -286,5 +287,6 @@ dial_cw=minus
|
|||||||
dial_ccw=equal
|
dial_ccw=equal
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user