From 7a19841a2c9db288c2cd6bb197e43ff05477e03f Mon Sep 17 00:00:00 2001 From: grace Date: Fri, 10 Jul 2020 23:06:40 -0700 Subject: [PATCH 1/4] split button_push into distinct putton_down and button_up functions --- joycontrol/controller_state.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/joycontrol/controller_state.py b/joycontrol/controller_state.py index 8dadd55..3d88663 100644 --- a/joycontrol/controller_state.py +++ b/joycontrol/controller_state.py @@ -187,7 +187,7 @@ class ButtonState: self._byte_1 = self._byte_2 = self._byte_3 = 0 -async def button_push(controller_state, *buttons, sec=0.1): +async def button_down(controller_state, *buttons): if not buttons: raise ValueError('No Buttons were given.') @@ -199,7 +199,13 @@ async def button_push(controller_state, *buttons, sec=0.1): # send report await controller_state.send() - await asyncio.sleep(sec) + + +async def button_up(controller_state, *buttons): + if not buttons: + raise ValueError('No Buttons were given.') + + button_state = controller_state.button_state for button in buttons: # release button @@ -209,6 +215,12 @@ async def button_push(controller_state, *buttons, sec=0.1): await controller_state.send() +async def button_push(controller_state, *buttons, sec=0.1): + await button_down(controller_state, *buttons) + await asyncio.sleep(sec) + await button_up(controller_state, *buttons) + + class _StickCalibration: def __init__(self, h_center, v_center, h_max_above_center, v_max_above_center, h_max_below_center, v_max_below_center): self.h_center = h_center From 2581296c152126f5a359ad72e0f3d7d05b6b3bfe Mon Sep 17 00:00:00 2001 From: grace Date: Fri, 10 Jul 2020 23:07:44 -0700 Subject: [PATCH 2/4] add hold and release commands to cli --- run_controller_cli.py | 54 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/run_controller_cli.py b/run_controller_cli.py index c90e506..caf1cc8 100644 --- a/run_controller_cli.py +++ b/run_controller_cli.py @@ -10,7 +10,7 @@ from aioconsole import ainput from joycontrol import logging_default as log, utils from joycontrol.command_line_interface import ControllerCLI from joycontrol.controller import Controller -from joycontrol.controller_state import ControllerState, button_push +from joycontrol.controller_state import ControllerState, button_push, button_down, button_up from joycontrol.memory import FlashMemory from joycontrol.protocol import controller_protocol_factory from joycontrol.server import create_hid_server @@ -168,6 +168,26 @@ async def mash_button(controller_state, button, interval): await user_input +async def hold_button(controller_state, button): + # waits until controller is fully connected + await controller_state.connect() + + if button not in controller_state.button_state.get_available_buttons(): + raise ValueError(f'Button {button} does not exist on {controller_state.get_controller()}') + + await button_down(controller_state, button) + + +async def release_button(controller_state, button): + # waits until controller is fully connected + await controller_state.connect() + + if button not in controller_state.button_state.get_available_buttons(): + raise ValueError(f'Button {button} does not exist on {controller_state.get_controller()}') + + await button_up(controller_state, button) + + async def _main(args): # parse the spi flash if args.spi_flash: @@ -220,6 +240,38 @@ async def _main(args): # add the script from above cli.add_command('mash', call_mash_button) + # Hold a button command + async def hold(*args): + """ + hold - Press and hold a specified button + + Usage: + hold