123 lines
3.4 KiB
Python
123 lines
3.4 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Unified Device Simulator
|
|
Entry point for running Pelican or Glory device simulators.
|
|
"""
|
|
|
|
import argparse
|
|
import sys
|
|
|
|
from loguru import logger
|
|
|
|
# Import simulators
|
|
from source.glory import GlorySimulator
|
|
from source.pelican import PelicanSimulator
|
|
from source.selex import SelexSimulator
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(
|
|
description="Device Simulator - Run Pelican, Glory MACH6, or Selex simulator",
|
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
epilog="""
|
|
Examples:
|
|
# Run Pelican simulator
|
|
python main.py pelican --port /dev/ttyUSB0
|
|
|
|
# Run Glory simulator
|
|
python main.py glory --port /dev/ttyUSB1 --baudrate 9600
|
|
|
|
# Run Selex simulator
|
|
python main.py selex --port /dev/ttyUSB2 --baudrate 9600
|
|
|
|
# Get help for specific simulator
|
|
python main.py pelican --help
|
|
python main.py glory --help
|
|
python main.py selex --help
|
|
""",
|
|
)
|
|
|
|
# Add subparsers for each simulator type
|
|
subparsers = parser.add_subparsers(
|
|
dest="simulator", help="Simulator type to run", required=True
|
|
)
|
|
|
|
# Pelican simulator subcommand
|
|
pelican_parser = subparsers.add_parser(
|
|
"pelican", help="Run Pelican coin counter simulator"
|
|
)
|
|
pelican_parser.add_argument(
|
|
"--port",
|
|
"-p",
|
|
default="/dev/ttyUSB0",
|
|
help="Serial port (default: /dev/ttyUSB0)",
|
|
)
|
|
pelican_parser.add_argument(
|
|
"--baudrate", "-b", type=int, default=115200, help="Baud rate (default: 115200)"
|
|
)
|
|
|
|
# Glory simulator subcommand
|
|
glory_parser = subparsers.add_parser(
|
|
"glory", help="Run Glory MACH6 coin counter simulator"
|
|
)
|
|
glory_parser.add_argument(
|
|
"--port",
|
|
"-p",
|
|
default="/dev/ttyUSB0",
|
|
help="Serial port (default: /dev/ttyUSB0)",
|
|
)
|
|
glory_parser.add_argument(
|
|
"--baudrate", "-b", type=int, default=115200, help="Baud rate (default: 115200)"
|
|
)
|
|
|
|
# Selex simulator subcommand
|
|
selex_parser = subparsers.add_parser(
|
|
"selex", help="Run Selex coin counter simulator"
|
|
)
|
|
selex_parser.add_argument(
|
|
"--port",
|
|
"-p",
|
|
default="/dev/ttyUSB0",
|
|
help="Serial port (default: /dev/ttyUSB0)",
|
|
)
|
|
selex_parser.add_argument(
|
|
"--baudrate", "-b", type=int, default=9600, help="Baud rate (default: 9600)"
|
|
)
|
|
|
|
args = parser.parse_args()
|
|
|
|
# Configure loguru logger
|
|
logger.remove() # Remove default handler
|
|
logger.add(
|
|
sys.stderr,
|
|
format=(
|
|
"<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | "
|
|
"<level>{level: <8}</level> | "
|
|
"<level>{message}</level> "
|
|
"<cyan>({name}</cyan>:<cyan>{function}</cyan>:<cyan>{line})</cyan>"
|
|
),
|
|
level="DEBUG",
|
|
)
|
|
|
|
# Run the appropriate simulator
|
|
try:
|
|
if args.simulator == "pelican":
|
|
simulator = PelicanSimulator(port=args.port, baudrate=args.baudrate)
|
|
simulator.run()
|
|
elif args.simulator == "glory":
|
|
simulator = GlorySimulator(port=args.port, baudrate=args.baudrate)
|
|
simulator.run()
|
|
elif args.simulator == "selex":
|
|
simulator = SelexSimulator(port=args.port, baudrate=args.baudrate)
|
|
simulator.run()
|
|
except KeyboardInterrupt:
|
|
logger.info("Simulator stopped by user")
|
|
sys.exit(0)
|
|
except Exception as e:
|
|
logger.error(f"Error: {e}", exc_info=True)
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|