63 lines
1.8 KiB
Python
63 lines
1.8 KiB
Python
|
import threading
|
||
|
from pynput import keyboard
|
||
|
|
||
|
class BaseRemote:
|
||
|
def __init__(self):
|
||
|
pass
|
||
|
def startSeq(self):
|
||
|
return False
|
||
|
def standUpDownSeq(self):
|
||
|
return False
|
||
|
|
||
|
def flushStates(self):
|
||
|
pass
|
||
|
|
||
|
remote = BaseRemote()
|
||
|
|
||
|
class KeyboardRemote(BaseRemote):
|
||
|
def __init__(self):
|
||
|
super().__init__()
|
||
|
self.start_seq_flag = False
|
||
|
self.stand_up_down_seq_flag = False
|
||
|
self.listener_thread = threading.Thread(target=self._listen_to_keyboard)
|
||
|
self.listener_thread.daemon = True
|
||
|
self.listener_thread.start()
|
||
|
|
||
|
def _on_press(self, key):
|
||
|
try:
|
||
|
if key.char == 's': # Start sequence
|
||
|
self.start_seq_flag = True
|
||
|
elif key.char == 'u': # Stand up/down sequence
|
||
|
self.stand_up_down_seq_flag = True
|
||
|
except AttributeError:
|
||
|
pass # Special keys (like space) will be handled here
|
||
|
|
||
|
|
||
|
def _on_release(self, key):
|
||
|
try:
|
||
|
if key.char == 's': # Start sequence
|
||
|
self.start_seq_flag = False
|
||
|
elif key.char == 'u': # Stand up/down sequence
|
||
|
self.stand_up_down_seq_flag = False
|
||
|
except AttributeError:
|
||
|
pass # Special keys (like space) will be handled here
|
||
|
|
||
|
def _listen_to_keyboard(self):
|
||
|
with keyboard.Listener(on_press=self._on_press, on_release=self._on_release) as listener:
|
||
|
listener.join()
|
||
|
|
||
|
def startSeq(self):
|
||
|
if self.start_seq_flag:
|
||
|
self.start_seq_flag = False
|
||
|
return True
|
||
|
return False
|
||
|
|
||
|
def standUpDownSeq(self):
|
||
|
if self.stand_up_down_seq_flag:
|
||
|
self.stand_up_down_seq_flag = False
|
||
|
return True
|
||
|
return False
|
||
|
|
||
|
def flushStates(self):
|
||
|
self.stand_up_down_seq_flag = False
|
||
|
self.start_seq_flag = False
|