-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathStimJimGUI.py
89 lines (79 loc) · 3.15 KB
/
StimJimGUI.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import argparse
import logging
import serial
# noinspection PyUnresolvedReferences
from PyQt5 import uic
from PyQt5.QtWidgets import (
QApplication,
)
# noinspection PyUnresolvedReferences
import resources.resources
from src.StimJim import discover_ports, choose_port_dialog, STIMJIM_SERIAL_BAUDRATE
from src.GUI import StimJimGUI
logger = logging.getLogger("StimJimGUI")
handler = logging.StreamHandler()
# noinspection SpellCheckingInspection
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
LOGGING_LEVELS = [logging.NOTSET, logging.WARNING, logging.INFO, logging.DEBUG]
if __name__ == "__main__":
parser = argparse.ArgumentParser(
prog="StimJimGUI",
description="This software provides a graphical user interface for controlling a StimJim, an open source "
"electrophysiology stimulator for physiology and behavior",
)
parser.add_argument(
"-p",
"--port",
help="the serial port used to communicate with the StimJim. If not provided, "
"then the software will try to find the port automatically, and/or offer "
"a choice of possible ports",
)
parser.add_argument(
"-l", "--log", help="save the log file to file FILENAME", default=None
)
parser.add_argument(
"-v",
"--verbose",
action="count",
default=0,
help="increase verbosity of output (can be "
"repeated to increase verbosity further)",
)
parser.add_argument("--broadcast",
help="Broadcast StimJim train output summary to OpenEphys GUI."
"Specify the URL to broadcast to. Default: localhost:37497",
default="localhost:37497")
parser.add_argument("--no-broadcast", action="store_const", dest="broadcast", const=None,
help="Suppress broadcasting to OpenEphys GUI.")
args = parser.parse_args()
level = LOGGING_LEVELS[
min(args.verbose, len(LOGGING_LEVELS) - 1)
] # cap to last level index
logger.setLevel(level=level)
if args.port is None:
logger.info("Starting serial port auto-discovery...")
possible_ports = discover_ports()
if len(possible_ports) > 1:
# there are more than 1 valid port.
logger.info(
f"Found serial ports {','.join([p.device for p in possible_ports])}. Asking user to choose one"
)
args.port = choose_port_dialog(possible_ports)
elif len(possible_ports) == 1:
args.port = possible_ports[0].device
logger.info(f"Found serial port [{args.port}]")
else:
args.port = None
if args.port is None:
raise IOError(
"Could not find a suitable serial port. Please provide the serial port using the "
"--port argument"
)
serial_port = serial.Serial(args.port, baudrate=STIMJIM_SERIAL_BAUDRATE)
app = QApplication([])
mw = StimJimGUI(serial_port=serial_port, log_filename=args.log, broadcast=args.broadcast)
mw.show()
# Start the event loop.
app.exec()