Added test CLI option
This commit is contained in:
parent
e4c015a4a7
commit
68a776e1e8
1 changed files with 88 additions and 2 deletions
90
nxbt/cli.py
90
nxbt/cli.py
|
|
@ -2,6 +2,7 @@ import argparse
|
||||||
from random import randint
|
from random import randint
|
||||||
from time import sleep
|
from time import sleep
|
||||||
import os
|
import os
|
||||||
|
import traceback
|
||||||
|
|
||||||
from .nxbt import Nxbt, PRO_CONTROLLER
|
from .nxbt import Nxbt, PRO_CONTROLLER
|
||||||
from .bluez import find_devices_by_alias
|
from .bluez import find_devices_by_alias
|
||||||
|
|
@ -10,7 +11,7 @@ from .tui import InputTUI
|
||||||
|
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument('command', default=False, choices=[
|
parser.add_argument('command', default=False, choices=[
|
||||||
'webapp', 'demo', 'macro', 'tui', 'remote_tui', 'addresses'
|
'webapp', 'demo', 'macro', 'tui', 'remote_tui', 'addresses', 'test'
|
||||||
],
|
],
|
||||||
help="""Specifies the nxbt command to run:
|
help="""Specifies the nxbt command to run:
|
||||||
webapp - Runs web server and allows for controller/macro
|
webapp - Runs web server and allows for controller/macro
|
||||||
|
|
@ -22,7 +23,9 @@ parser.add_argument('command', default=False, choices=[
|
||||||
tui/remote_tui - Opens a TUI that allows for direct input from the keyboard
|
tui/remote_tui - Opens a TUI that allows for direct input from the keyboard
|
||||||
to the Switch.
|
to the Switch.
|
||||||
addresses - Lists the Bluetooth MAC addresses for
|
addresses - Lists the Bluetooth MAC addresses for
|
||||||
all previously connected Nintendo Switches""")
|
all previously connected Nintendo Switches.
|
||||||
|
test - Runs through a series of tests to ensure NXBT is working and
|
||||||
|
compatible with your system.""")
|
||||||
parser.add_argument('-c', '--commands', required=False, default=False,
|
parser.add_argument('-c', '--commands', required=False, default=False,
|
||||||
help="""Used in conjunction with the macro command. Specifies a
|
help="""Used in conjunction with the macro command. Specifies a
|
||||||
macro string or a file location to load a macro string from.""")
|
macro string or a file location to load a macro string from.""")
|
||||||
|
|
@ -141,6 +144,9 @@ def demo():
|
||||||
|
|
||||||
nx = Nxbt(debug=args.debug, log_to_file=args.logfile)
|
nx = Nxbt(debug=args.debug, log_to_file=args.logfile)
|
||||||
adapters = nx.get_available_adapters()
|
adapters = nx.get_available_adapters()
|
||||||
|
if len(adapters) < 1:
|
||||||
|
raise OSError("Unable to detect any Bluetooth adapters.")
|
||||||
|
|
||||||
controller_idxs = []
|
controller_idxs = []
|
||||||
for i in range(0, len(adapters)):
|
for i in range(0, len(adapters)):
|
||||||
index = nx.create_controller(
|
index = nx.create_controller(
|
||||||
|
|
@ -160,9 +166,87 @@ def demo():
|
||||||
print(state['errors'])
|
print(state['errors'])
|
||||||
exit(1)
|
exit(1)
|
||||||
sleep(1.0)
|
sleep(1.0)
|
||||||
|
|
||||||
print("Finished!")
|
print("Finished!")
|
||||||
|
|
||||||
|
|
||||||
|
def test():
|
||||||
|
"""Tests NXBT functionality"""
|
||||||
|
# Init
|
||||||
|
print("[1] Attempting to initialize NXBT...")
|
||||||
|
nx = None
|
||||||
|
try:
|
||||||
|
nx = Nxbt(debug=args.debug, log_to_file=args.logfile)
|
||||||
|
except Exception as e:
|
||||||
|
print("Failed to initialize:")
|
||||||
|
print(traceback.format_exc())
|
||||||
|
exit(1)
|
||||||
|
print("Successfully initialized NXBT.\n")
|
||||||
|
|
||||||
|
# Adapter Check
|
||||||
|
print("[2] Checking for Bluetooth adapter availability...")
|
||||||
|
adapters = None
|
||||||
|
try:
|
||||||
|
adapters = nx.get_available_adapters()
|
||||||
|
except Exception as e:
|
||||||
|
print("Failed to check for adapters:")
|
||||||
|
print(traceback.format_exc())
|
||||||
|
exit(1)
|
||||||
|
if len(adapters) < 1:
|
||||||
|
print("Unable to detect any Bluetooth adapters.")
|
||||||
|
print("Please ensure you system has Bluetooth capability.")
|
||||||
|
exit(1)
|
||||||
|
print(f"{len(adapters)} Bluetooth adapter(s) available.")
|
||||||
|
print("Adapters:", adapters, "\n")
|
||||||
|
|
||||||
|
# Creating a controller
|
||||||
|
print("[3] Please turn on your Switch and navigate to the 'Change Grip/Order menu.'")
|
||||||
|
input("Press Enter to continue...")
|
||||||
|
|
||||||
|
print("Creating a controller with the first Bluetooth adapter...")
|
||||||
|
cindex = None
|
||||||
|
try:
|
||||||
|
cindex = nx.create_controller(
|
||||||
|
PRO_CONTROLLER,
|
||||||
|
adapters[0],
|
||||||
|
colour_body=random_colour(),
|
||||||
|
colour_buttons=random_colour())
|
||||||
|
except Exception as e:
|
||||||
|
print("Failed to create a controller:")
|
||||||
|
print(traceback.format_exc())
|
||||||
|
exit(1)
|
||||||
|
print("Successfully created a controller.\n")
|
||||||
|
|
||||||
|
# Controller connection check
|
||||||
|
print("[4] Waiting for controller to connect with the Switch...")
|
||||||
|
timeout = 120
|
||||||
|
print(f"Connection timeout is {timeout} seconds for this test script.")
|
||||||
|
elapsed = 0
|
||||||
|
while nx.state[cindex]['state'] != 'connected':
|
||||||
|
if elapsed >= timeout:
|
||||||
|
print("Timeout reached, exiting...")
|
||||||
|
exit(1)
|
||||||
|
elif nx.state[cindex]['state'] == 'crashed':
|
||||||
|
print("An error occurred while connecting:")
|
||||||
|
print(nx.state[cindex]['errors'])
|
||||||
|
exit(1)
|
||||||
|
elapsed += 1
|
||||||
|
sleep(1)
|
||||||
|
print("Successfully connected.\n")
|
||||||
|
|
||||||
|
# Exit the Change Grip/Order Menu
|
||||||
|
print("[5] Attempting to exit the 'Change Grip/Order Menu'...")
|
||||||
|
nx.macro(cindex, "B 0.1s\n0.1s")
|
||||||
|
sleep(5)
|
||||||
|
if nx.state[cindex]['state'] != 'connected':
|
||||||
|
print("Controller disconnected after leaving the menu.")
|
||||||
|
print("Exiting...")
|
||||||
|
exit(1)
|
||||||
|
print("Controller successfully exited the menu.\n")
|
||||||
|
|
||||||
|
print("All tests passed.")
|
||||||
|
|
||||||
|
|
||||||
def macro():
|
def macro():
|
||||||
"""Runs a macro from the command line.
|
"""Runs a macro from the command line.
|
||||||
The macro can be from a specified file, a command line string,
|
The macro can be from a specified file, a command line string,
|
||||||
|
|
@ -244,3 +328,5 @@ def main():
|
||||||
tui.start()
|
tui.start()
|
||||||
elif args.command == 'addresses':
|
elif args.command == 'addresses':
|
||||||
list_switch_addresses()
|
list_switch_addresses()
|
||||||
|
elif args.command == 'test':
|
||||||
|
test()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue