diff --git a/docs/internal.rst b/docs/internal.rst index 13d59590..df8dc2ad 100644 --- a/docs/internal.rst +++ b/docs/internal.rst @@ -7,7 +7,7 @@ here. Serial handler --------------- -.. automodule:: pslab.serial_handler +.. automodule:: pslab.connection :members: :undoc-members: :show-inheritance: diff --git a/pslab/cli.py b/pslab/cli.py index 5ba833bd..f9b8eee9 100644 --- a/pslab/cli.py +++ b/pslab/cli.py @@ -32,7 +32,7 @@ from pslab.instrument.logic_analyzer import LogicAnalyzer from pslab.instrument.oscilloscope import Oscilloscope from pslab.instrument.waveform_generator import WaveformGenerator, PWMGenerator -from pslab.serial_handler import SerialHandler +from pslab.connection import SerialHandler, autoconnect def logic_analyzer( @@ -222,6 +222,20 @@ def pwm(handler: SerialHandler, args: argparse.Namespace): ) +def _get_connected_handler(args: argparse.Namespace) -> SerialHandler: + """Get a connected SerialHandler based on arguments.""" + try: + if args.port: + handler = SerialHandler(port=args.port) + handler.connect() + else: + handler = autoconnect() + return handler + except Exception as e: + print(f"Error: Could not connect to PSLab device. Details: {e}") + sys.exit(1) + + def main(args: argparse.Namespace): """Perform the given function on PSLab. @@ -234,18 +248,21 @@ def main(args: argparse.Namespace): install(args) return - handler = SerialHandler(port=args.port) - if args.function == "flash": flash(pslab.ScienceLab(args.port), args.hexfile) return - if args.function == "collect": - collect(handler, args) - elif args.function == "wave": - wave(handler, args) - elif args.function == "pwm": - pwm(handler, args) + handler = _get_connected_handler(args) + + try: + if args.function == "collect": + collect(handler, args) + elif args.function == "wave": + wave(handler, args) + elif args.function == "pwm": + pwm(handler, args) + finally: + handler.disconnect() def get_parser() -> Tuple[argparse.ArgumentParser, argparse._SubParsersAction]: diff --git a/pslab/external/gas_sensor.py b/pslab/external/gas_sensor.py index 9e3f6867..7cff65bd 100644 --- a/pslab/external/gas_sensor.py +++ b/pslab/external/gas_sensor.py @@ -3,7 +3,7 @@ from typing import Callable, Union from pslab import Multimeter -from pslab.serial_handler import SerialHandler +from pslab.connection import SerialHandler class MQ135: diff --git a/pslab/external/hcsr04.py b/pslab/external/hcsr04.py index 602173df..ee4b23d3 100644 --- a/pslab/external/hcsr04.py +++ b/pslab/external/hcsr04.py @@ -4,7 +4,7 @@ from pslab.instrument.logic_analyzer import LogicAnalyzer from pslab.instrument.waveform_generator import PWMGenerator -from pslab.serial_handler import SerialHandler +from pslab.connection import SerialHandler class HCSR04: diff --git a/pslab/external/tcd1304.py b/pslab/external/tcd1304.py index aaec8346..411191e6 100644 --- a/pslab/external/tcd1304.py +++ b/pslab/external/tcd1304.py @@ -35,7 +35,7 @@ from pslab import PWMGenerator from pslab.instrument.waveform_generator import _get_wavelength from pslab.protocol import MAX_SAMPLES -from pslab.serial_handler import SerialHandler +from pslab.connection import SerialHandler class TCD1304: