added ADNS9800 and mouse keys/mouse buttons/mouse wheel support
ADNS9800 - module for interfacing with ADNS9800 optical sensor mouse_keys - module for using mouse buttons, mouse wheel as well as moving mouse cursor with keyboard keys
This commit is contained in:
parent
ea9625106c
commit
3d6e4fde41
8
docs/adns9800.md
Normal file
8
docs/adns9800.md
Normal file
@ -0,0 +1,8 @@
|
||||
# ADNS9800
|
||||
Add this module for controlling ADNS9800 optical sensor.
|
||||
```python
|
||||
from kmk.modules.adns9800 import ADNS9800
|
||||
keyboard.modules.append(ADNS9800(cs=board.GP0, sclk=board.GP2, miso=board.GP4, mosi=board.GP3, invert_y=True))
|
||||
```
|
||||
## Constructor parameters
|
||||
ADNS9800(cs=*cs_pin*, sclk=*clock_pin*, miso=*miso_pin*, mosi=*mosi_pin*, invert_x=*False*, invert_y=*False*)
|
20
docs/mouse_keys.md
Normal file
20
docs/mouse_keys.md
Normal file
@ -0,0 +1,20 @@
|
||||
# Mouse keys
|
||||
To enable mouse cursor and/or mouse buttons control from the keyboard add this module to list:
|
||||
```python
|
||||
from kmk.modules.mouse_keys import MouseKeys
|
||||
keyboard.modules.append(MouseKeys())
|
||||
```
|
||||
|
||||
# Keycodes
|
||||
|
||||
|Keycode | Description |
|
||||
|---------------|---------------------------|
|
||||
|MB_LMB |Left mouse button |
|
||||
|MB_RMB |Right mouse button |
|
||||
|MB_MMB |Middle mouse button |
|
||||
|MW_UP |Mouse wheel up |
|
||||
|MW_DOWN, MW_DN |Mouse wheel down |
|
||||
|MS_UP |Move mouse cursor up |
|
||||
|MS_DOWN, MS_DN |Move mouse cursor down |
|
||||
|MS_LEFT, MS_LT |Move mouse cursor left |
|
||||
|MS_RIGHT, MS_RT|Move mouse cursor right |
|
3313
kmk/modules/adns9800.py
Normal file
3313
kmk/modules/adns9800.py
Normal file
File diff suppressed because it is too large
Load Diff
168
kmk/modules/mouse_keys.py
Normal file
168
kmk/modules/mouse_keys.py
Normal file
@ -0,0 +1,168 @@
|
||||
from kmk.modules import Module
|
||||
from kmk.hid import HID_REPORT_SIZES, HIDReportTypes
|
||||
from kmk.keys import make_key
|
||||
|
||||
|
||||
class PointingDevice:
|
||||
MB_LMB = 1
|
||||
MB_RMB = 2
|
||||
MB_MMB = 4
|
||||
_evt = bytearray(HID_REPORT_SIZES[HIDReportTypes.MOUSE] + 1)
|
||||
|
||||
def __init__(self):
|
||||
self.hid_pending = False
|
||||
self.report_device = memoryview(self._evt)[0:1]
|
||||
self.report_device[0] = HIDReportTypes.MOUSE
|
||||
self.button_status = memoryview(self._evt)[1:2]
|
||||
self.report_x = memoryview(self._evt)[2:3]
|
||||
self.report_y = memoryview(self._evt)[3:4]
|
||||
self.report_w = memoryview(self._evt)[4:]
|
||||
|
||||
|
||||
class MouseKeys(Module):
|
||||
def __init__(self):
|
||||
self.move_step = 1
|
||||
self.pointing_device = PointingDevice()
|
||||
|
||||
make_key(
|
||||
names=('MB_LMB',),
|
||||
on_press=self._mb_lmb_press,
|
||||
on_release=self._mb_lmb_release,
|
||||
)
|
||||
make_key(
|
||||
names=('MB_MMB',),
|
||||
on_press=self._mb_mmb_press,
|
||||
on_release=self._mb_mmb_release,
|
||||
)
|
||||
make_key(
|
||||
names=('MB_RMB',),
|
||||
on_press=self._mb_rmb_press,
|
||||
on_release=self._mb_rmb_release,
|
||||
)
|
||||
make_key(
|
||||
names=('MW_UP',), on_press=self._mw_up_press, on_release=self._mw_up_release
|
||||
)
|
||||
make_key(
|
||||
names=(
|
||||
'MW_DOWN',
|
||||
'MW_DN',
|
||||
),
|
||||
on_press=self._mw_down_press,
|
||||
on_release=self._mw_down_release,
|
||||
)
|
||||
make_key(
|
||||
names=('MS_UP',), on_press=self._ms_up_press, on_release=self._ms_y_release
|
||||
)
|
||||
make_key(
|
||||
names=(
|
||||
'MS_DOWN',
|
||||
'MS_DN',
|
||||
),
|
||||
on_press=self._ms_down_press,
|
||||
on_release=self._ms_y_release,
|
||||
)
|
||||
make_key(
|
||||
names=(
|
||||
'MS_LEFT',
|
||||
'MS_LT',
|
||||
),
|
||||
on_press=self._ms_left_press,
|
||||
on_release=self._ms_x_release,
|
||||
)
|
||||
make_key(
|
||||
names=(
|
||||
'MS_RIGHT',
|
||||
'MS_RT',
|
||||
),
|
||||
on_press=self._ms_right_press,
|
||||
on_release=self._ms_x_release,
|
||||
)
|
||||
|
||||
def during_bootup(self, keyboard):
|
||||
return
|
||||
|
||||
def before_matrix_scan(self, keyboard):
|
||||
return
|
||||
|
||||
def after_matrix_scan(self, keyboard):
|
||||
return
|
||||
|
||||
def before_hid_send(self, keyboard):
|
||||
if self.pointing_device.hid_pending:
|
||||
keyboard._hid_helper.hid_send(self.pointing_device._evt)
|
||||
return
|
||||
|
||||
def after_hid_send(self, keyboard):
|
||||
return
|
||||
|
||||
def on_powersave_enable(self, keyboard):
|
||||
return
|
||||
|
||||
def on_powersave_disable(self, keyboard):
|
||||
return
|
||||
|
||||
def _mb_lmb_press(self, key, keyboard, *args, **kwargs):
|
||||
self.pointing_device.button_status[0] |= self.pointing_device.MB_LMB
|
||||
self.pointing_device.hid_pending = True
|
||||
|
||||
def _mb_lmb_release(self, key, keyboard, *args, **kwargs):
|
||||
self.pointing_device.button_status[0] &= ~self.pointing_device.MB_LMB
|
||||
self.pointing_device.hid_pending = True
|
||||
|
||||
def _mb_mmb_press(self, key, keyboard, *args, **kwargs):
|
||||
self.pointing_device.button_status[0] |= self.pointing_device.MB_MMB
|
||||
self.pointing_device.hid_pending = True
|
||||
|
||||
def _mb_mmb_release(self, key, keyboard, *args, **kwargs):
|
||||
self.pointing_device.button_status[0] &= ~self.pointing_device.MB_MMB
|
||||
self.pointing_device.hid_pending = True
|
||||
|
||||
def _mb_rmb_press(self, key, keyboard, *args, **kwargs):
|
||||
self.pointing_device.button_status[0] |= self.pointing_device.MB_RMB
|
||||
self.pointing_device.hid_pending = True
|
||||
|
||||
def _mb_rmb_release(self, key, keyboard, *args, **kwargs):
|
||||
self.pointing_device.button_status[0] &= ~self.pointing_device.MB_RMB
|
||||
self.pointing_device.hid_pending = True
|
||||
|
||||
def _mw_up_press(self, key, keyboard, *args, **kwargs):
|
||||
self.pointing_device.report_w[0] = self.move_step
|
||||
self.pointing_device.hid_pending = True
|
||||
|
||||
def _mw_up_release(self, key, keyboard, *args, **kwargs):
|
||||
self.pointing_device.report_w[0] = 0
|
||||
self.pointing_device.hid_pending = True
|
||||
|
||||
def _mw_down_press(self, key, keyboard, *args, **kwargs):
|
||||
self.pointing_device.report_w[0] = 0xFF
|
||||
self.pointing_device.hid_pending = True
|
||||
|
||||
def _mw_down_release(self, key, keyboard, *args, **kwargs):
|
||||
self.pointing_device.report_w[0] = 0
|
||||
self.pointing_device.hid_pending = True
|
||||
|
||||
# Mouse movement
|
||||
|
||||
def _ms_up_press(self, key, keyboard, *args, **kwargs):
|
||||
self.pointing_device.report_y[0] = 0xFF & (0 - self.move_step)
|
||||
self.pointing_device.hid_pending = True
|
||||
|
||||
def _ms_down_press(self, key, keyboard, *args, **kwargs):
|
||||
self.pointing_device.report_y[0] = self.move_step
|
||||
self.pointing_device.hid_pending = True
|
||||
|
||||
def _ms_y_release(self, key, keyboard, *args, **kwargs):
|
||||
self.pointing_device.report_y[0] = 0
|
||||
self.pointing_device.hid_pending = False
|
||||
|
||||
def _ms_left_press(self, key, keyboard, *args, **kwargs):
|
||||
self.pointing_device.report_x[0] = 0xFF & (0 - self.move_step)
|
||||
self.pointing_device.hid_pending = True
|
||||
|
||||
def _ms_right_press(self, key, keyboard, *args, **kwargs):
|
||||
self.pointing_device.report_x[0] = self.move_step
|
||||
self.pointing_device.hid_pending = True
|
||||
|
||||
def _ms_x_release(self, key, keyboard, *args, **kwargs):
|
||||
self.pointing_device.report_x[0] = 0
|
||||
self.pointing_device.hid_pending = False
|
Loading…
x
Reference in New Issue
Block a user