implement keyboard lock status reader API
This commit is contained in:
64
kmk/extensions/lock_status.py
Normal file
64
kmk/extensions/lock_status.py
Normal file
@@ -0,0 +1,64 @@
|
||||
import usb_hid
|
||||
|
||||
from kmk.extensions import Extension
|
||||
from kmk.hid import HIDUsage
|
||||
|
||||
|
||||
class LockCode:
|
||||
NUMLOCK = 0x01
|
||||
CAPSLOCK = 0x02
|
||||
SCROLLLOCK = 0x04
|
||||
COMPOSE = 0x08
|
||||
KANA = 0x10
|
||||
RESERVED = 0x20
|
||||
|
||||
|
||||
class LockStatus(Extension):
|
||||
def __init__(self):
|
||||
self.report = 0x00
|
||||
self.hid = None
|
||||
for device in usb_hid.devices:
|
||||
if device.usage == HIDUsage.KEYBOARD:
|
||||
self.hid = device
|
||||
|
||||
def __repr__(self):
|
||||
return ('LockStatus(report={})').format(self.report)
|
||||
|
||||
def during_bootup(self, sandbox):
|
||||
return
|
||||
|
||||
def before_matrix_scan(self, sandbox):
|
||||
return
|
||||
|
||||
def after_matrix_scan(self, sandbox):
|
||||
return
|
||||
|
||||
def before_hid_send(self, sandbox):
|
||||
return
|
||||
|
||||
def after_hid_send(self, sandbox):
|
||||
report = self.hid.get_last_received_report()
|
||||
if report[0] != self.report:
|
||||
self.report = report[0]
|
||||
return
|
||||
|
||||
def on_powersave_enable(self, sandbox):
|
||||
return
|
||||
|
||||
def on_powersave_disable(self, sandbox):
|
||||
return
|
||||
|
||||
def get_num_lock(self):
|
||||
return bool(self.report & LockCode.NUMLOCK)
|
||||
|
||||
def get_caps_lock(self):
|
||||
return bool(self.report & LockCode.CAPSLOCK)
|
||||
|
||||
def get_scroll_lock(self):
|
||||
return bool(self.report & LockCode.SCROLLLOCK)
|
||||
|
||||
def get_compose(self):
|
||||
return bool(self.report & LockCode.COMPOSE)
|
||||
|
||||
def get_kana(self):
|
||||
return bool(self.report & LockCode.KANA)
|
Reference in New Issue
Block a user