Skip to content

Instantly share code, notes, and snippets.

@pixelomer
Created January 6, 2021 13:26
Show Gist options
  • Save pixelomer/8088241bc125d60519ed34d8a6dbcb0d to your computer and use it in GitHub Desktop.
Save pixelomer/8088241bc125d60519ed34d8a6dbcb0d to your computer and use it in GitHub Desktop.
Script for automatically triggering a video recording on a Switch once every 25 seconds
#!/usr/bin/env python3
import asyncio
import logging
import os
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, button_press, button_release
from joycontrol.memory import FlashMemory
from joycontrol.protocol import controller_protocol_factory
from joycontrol.server import create_hid_server
async def _main():
spi_flash = FlashMemory()
controller = Controller.from_arg("PRO_CONTROLLER")
factory = controller_protocol_factory(controller, spi_flash=spi_flash)
ctl_psm, itr_psm = 17, 19
transport, protocol = await create_hid_server(
factory,
reconnect_bt_addr=None,
ctl_psm=ctl_psm,
itr_psm=itr_psm
)
controller_state = protocol.get_controller_state()
print("Trying to connect...")
await controller_state.connect()
print("Connected.")
#input("Press enter to send L+R.")
await button_press(controller_state, 'l', 'r')
await button_release(controller_state, 'l', 'r')
try:
while True:
print("\nWaiting 25 seconds...")
await asyncio.sleep(25)
print("Ensuring connection...")
await controller_state.connect()
print("Pressing capture button...")
await button_press(controller_state, "capture")
await asyncio.sleep(1)
await controller_state.connect()
print("Releasing capture button...")
await button_release(controller_state, "capture")
finally:
await transport.close()
loop = asyncio.get_event_loop()
loop.run_until_complete(_main())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment