Go2Py_SIM/Go2Py/robot/remote.py

63 lines
1.8 KiB
Python
Raw Normal View History

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