93 lines
2.4 KiB
Python
Executable File
93 lines
2.4 KiB
Python
Executable File
import time
|
|
import board
|
|
from digitalio import DigitalInOut, Direction, Pull
|
|
import usb_hid
|
|
from adafruit_hid.keyboard import Keyboard
|
|
from adafruit_hid.keycode import Keycode
|
|
from adafruit_hid.mouse import Mouse
|
|
from adafruit_hid.consumer_control import ConsumerControl
|
|
|
|
led = DigitalInOut(board.LED)
|
|
led.direction = Direction.OUTPUT
|
|
led.value = True
|
|
|
|
kbd = Keyboard(usb_hid.devices)
|
|
mse = Mouse(usb_hid.devices)
|
|
ctl = ConsumerControl(usb_hid.devices)
|
|
|
|
pins = [
|
|
board.GP0, # 0 1 2
|
|
board.GP1, # 3 4 5
|
|
board.GP2, # 6 7 8
|
|
board.GP3,
|
|
board.GP4,
|
|
board.GP5,
|
|
board.GP6,
|
|
board.GP7,
|
|
board.GP8,
|
|
]
|
|
|
|
def press(key):
|
|
if key == 0: # xf86copy
|
|
ctl.send(0x21B)
|
|
elif key == 1: # xf86paste
|
|
ctl.send(0x21D)
|
|
elif key == 2:
|
|
mse.press(Mouse.MIDDLE_BUTTON)
|
|
elif key == 3:
|
|
ctl.send(0x224) # back (browser)
|
|
elif key == 4:
|
|
ctl.send(0x225) # forward (browser)
|
|
elif key == 5:
|
|
mse.press(Mouse.RIGHT_BUTTON)
|
|
elif key == 6: # ctrl-w
|
|
kbd.press(Keycode.CONTROL)
|
|
kbd.press(Keycode.W)
|
|
kbd.release(Keycode.W)
|
|
kbd.release(Keycode.CONTROL)
|
|
elif key == 7:
|
|
# toggles scroll mode in ploopy nano using maddie layout
|
|
kbd.press(Keycode.KEYPAD_NUMLOCK)
|
|
kbd.release(Keycode.KEYPAD_NUMLOCK)
|
|
kbd.press(Keycode.KEYPAD_NUMLOCK)
|
|
kbd.release(Keycode.KEYPAD_NUMLOCK)
|
|
elif key == 8:
|
|
mse.press(Mouse.LEFT_BUTTON)
|
|
|
|
def release(key):
|
|
if key == 2:
|
|
mse.release(Mouse.MIDDLE_BUTTON)
|
|
elif key == 5:
|
|
mse.release(Mouse.RIGHT_BUTTON)
|
|
elif key == 8:
|
|
mse.release(Mouse.LEFT_BUTTON)
|
|
|
|
switches = [0, 1, 2, 3, 4, 5, 6, 7, 8]
|
|
|
|
for i in range(9):
|
|
switches[i] = DigitalInOut(pins[i])
|
|
switches[i].direction = Direction.INPUT
|
|
switches[i].pull = Pull.UP
|
|
|
|
switch_state = [0, 0, 0, 0, 0, 0, 0, 0, 0]
|
|
|
|
while True:
|
|
for button in range(9):
|
|
if switch_state[button] == 0:
|
|
if not switches[button].value:
|
|
try:
|
|
press(button)
|
|
except ValueError: # deals w six key limit
|
|
pass
|
|
switch_state[button] = 1
|
|
|
|
if switch_state[button] == 1:
|
|
if switches[button].value:
|
|
try:
|
|
release(button)
|
|
except ValueError:
|
|
pass
|
|
switch_state[button] = 0
|
|
|
|
time.sleep(0.01) # debounce
|