UmberHubManager/api/examples/python/speed_test_cli/argument_parser.py

102 lines
3.1 KiB
Python
Executable File

#!/usr/bin/env python3
import argparse
import sys
import os
# Add utilities to path for readme_helper import
script_dir = os.path.dirname(os.path.abspath(__file__))
utilities_dir = os.path.abspath(os.path.join(script_dir, "../utilities"))
sys.path.insert(0, utilities_dir)
from readme_helper import read_readme_as_help
class CustomArgumentParser:
"""Command-line argument parser for the Speed Test CLI script."""
def __init__(self, argv):
self._test_ports = None
self._sn = 0
self._automatic = False
self._parse_arguments(argv)
@staticmethod
def _parse_serial_number(value):
try:
return int(value, 0)
except ValueError:
try:
return int(value, 16)
except ValueError:
raise argparse.ArgumentTypeError("'%s' - use decimal or hex (0x...)" % value)
def _parse_arguments(self, argv):
"""Parse command-line arguments."""
parser = argparse.ArgumentParser(
description="USB Hub Speed Test CLI - Tests device enumeration speeds across multiple ports and data rate configurations.",
epilog="Use --help_extended for detailed documentation from the README.",
formatter_class=argparse.RawDescriptionHelpFormatter
)
parser.add_argument(
"-t", "--test_ports",
type=int,
nargs="+",
default=None,
help="List of ports to test. If not specified, automatic port discovery is used."
)
parser.add_argument(
"-s", "--sn",
type=self._parse_serial_number,
default=0,
help="Serial number of the device to connect to (hex or decimal, default: 0 = first found)"
)
parser.add_argument(
"--help_extended",
action="store_true",
default=False,
help="Show extended help from the README file and exit."
)
args = parser.parse_args(argv[1:])
# Handle --help_extended
if args.help_extended:
print(read_readme_as_help(__file__))
sys.exit(0)
self._sn = args.sn
# Handle test_ports - if not specified, use automatic mode
if args.test_ports:
# Manual mode - use provided ports
self._automatic = False
self._test_ports = args.test_ports
print("Testing ports: %s" % (self._test_ports))
else:
# Automatic mode (default)
self._automatic = True
self._test_ports = None # Will be populated during automatic discovery
print("Automatic port discovery enabled")
if self._sn:
print("Target serial number: 0x%08X" % (self._sn))
@property
def test_ports(self):
return self._test_ports
@test_ports.setter
def test_ports(self, value):
self._test_ports = value
@property
def sn(self):
return self._sn
@property
def automatic(self):
return self._automatic