Skip to content

Commit 65bfbbb

Browse files
committed
gui: Add support to configure the connection device from the CLI
Allows the user to predefine the connection device by using: dronecan_gui_tool.py --interface <device-name> Also allows to preconfigure some of the other args in the setup window, so a user preconfigure and select only the device they care about.
1 parent 7186245 commit 65bfbbb

File tree

2 files changed

+34
-6
lines changed

2 files changed

+34
-6
lines changed

dronecan_gui_tool/main.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@
2121
parser.add_argument("--debug", action='store_true', help="enable debugging")
2222
parser.add_argument("--dsdl", help="path to custom DSDL")
2323
parser.add_argument("--signing-passphrase", help="MAVLink2 signing passphrase", default=None)
24+
parser.add_argument("--interface", help="skip the setup dialog by setting the device to connect to")
25+
parser.add_argument("--baudrate", help="set the baudrate", type=int, default=115200)
26+
parser.add_argument("--bitrate", help="set the bitrate of the CAN Bus", type=int, default=1000000)
27+
parser.add_argument("--bus", help="set the CAN Bus number", type=int, default=1)
28+
parser.add_argument("--filtered", action='store_true', help="enable filtering of DroneCAN traffic")
29+
parser.add_argument("--target-system", help="set the targetted system", type=int, default=0)
2430

2531
args = parser.parse_args()
2632

@@ -60,6 +66,8 @@
6066
#
6167
# Importing other stuff once the logging has been configured
6268
#
69+
from serial import SerialException
70+
6371
import dronecan
6472

6573
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QSplitter, QAction
@@ -578,7 +586,18 @@ def main():
578586
while True:
579587
# Asking the user to specify which interface to work with
580588
try:
581-
iface, iface_kwargs, dsdl_directory = run_setup_window(get_app_icon(), args.dsdl)
589+
if args.interface is not None:
590+
iface = args.interface
591+
iface_kwargs = {}
592+
iface_kwargs['baudrate'] = int(args.baudrate)
593+
iface_kwargs['bitrate'] = int(args.bitrate)
594+
iface_kwargs['bus_number'] = int(args.bus)
595+
iface_kwargs['filtered'] = bool(args.filtered)
596+
iface_kwargs['mavlink_target_system'] = int(args.target_system)
597+
iface_kwargs['mavlink_signing_key'] = str(args.signing_passphrase if args.signing_passphrase is not None else '')
598+
dsdl_directory = args.dsdl
599+
else:
600+
iface, iface_kwargs, dsdl_directory = run_setup_window(get_app_icon(), args.dsdl, args.baudrate, args.bitrate, args.bus, args.filtered, args.target_system, args.signing_passphrase)
582601
if not iface:
583602
sys.exit(0)
584603
except Exception as ex:
@@ -624,6 +643,13 @@ def main():
624643
# allow unrecognized messages on startup:
625644
logger.warning('DroneCAN Transfer Error occurred on startup', exc_info=True)
626645
break
646+
except SerialException as ex:
647+
logger.error('DroneCAN node init failed', exc_info=True)
648+
show_error('Error', 'Could not find serial port', ex, blocking=True)
649+
650+
# The serial port had a fault, so reset args and the interface and return to the setup window
651+
args.interface = None
652+
iface = None
627653
except Exception as ex:
628654
logger.error('DroneCAN node init failed', exc_info=True)
629655
show_error('Fatal error', 'Could not initialize DroneCAN node', ex, blocking=True)

dronecan_gui_tool/setup_window.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ def get_list(self):
158158
return copy.copy(self._ifaces)
159159

160160

161-
def run_setup_window(icon, dsdl_path=None):
161+
def run_setup_window(icon, dsdl_path=None, config_baudrate=DEFAULT_BAUD_RATE, config_bitrate=1000000, config_can_bus=1, enable_filtering=False, mavlink_target_system=0, mavlink_signing_key=''):
162162
win = QDialog()
163163
win.setWindowTitle('Application Setup')
164164
win.setWindowIcon(icon)
@@ -179,12 +179,12 @@ def run_setup_window(icon, dsdl_path=None):
179179
bitrate = QSpinBox(win)
180180
bitrate.setMaximum(1000000)
181181
bitrate.setMinimum(10000)
182-
bitrate.setValue(1000000)
182+
bitrate.setValue(config_bitrate)
183183

184184
bus_number = QSpinBox(win)
185185
bus_number.setMaximum(4)
186186
bus_number.setMinimum(1)
187-
bus_number.setValue(1)
187+
bus_number.setValue(config_can_bus)
188188

189189
baudrate = QComboBox(win)
190190
baudrate.setEditable(True)
@@ -198,16 +198,18 @@ def run_setup_window(icon, dsdl_path=None):
198198

199199
baudrate.setValidator(QIntValidator(min(STANDARD_BAUD_RATES), max(STANDARD_BAUD_RATES)))
200200
baudrate.insertItems(0, map(str, STANDARD_BAUD_RATES))
201-
baudrate.setCurrentText(str(DEFAULT_BAUD_RATE))
201+
baudrate.setCurrentText(str(config_baudrate))
202202

203203
filtered = QCheckBox('Enable Filtering')
204+
filtered.setChecked(enable_filtering)
204205

205206
target_system = QSpinBox(win)
206207
target_system.setMaximum(255)
207208
target_system.setMinimum(0)
208-
target_system.setValue(0)
209+
target_system.setValue(mavlink_target_system)
209210

210211
signing_key = PasswordEdit(win)
212+
signing_key.setText(mavlink_signing_key)
211213

212214
dir_selection = directory_selection.DirectorySelectionWidget(win, 'Location of custom DSDL definitions [optional]', path=dsdl_path, directory_only=True)
213215

0 commit comments

Comments
 (0)