summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Kolset <ckolset@colostate.edu>2026-07-29 13:41:29 -0600
committerChristian Kolset <ckolset@colostate.edu>2026-07-29 13:41:29 -0600
commit934d3fc18bc4fc0e05d26a12d635915b00bd8c8d (patch)
treeefd235350b0cbd014e44591aeef8e6d806335b54
parent23800a32231acecbace12bfc41c03b081b1bf565 (diff)
parentd9ca58e48cf92438087ac24ee261c2c4911316b1 (diff)
Merge branch 'feat/device-naming'
-rw-r--r--core/profile.py9
-rw-r--r--devices/analog_input.py1
-rw-r--r--devices/arduino_device.py1
-rw-r--r--devices/digital_io.py1
-rw-r--r--devices/nidaqmx_device.py1
-rw-r--r--devices/serial_device.py1
-rw-r--r--plugins/motion_capture/device.py1
-rw-r--r--ui/add_device_dialog.py8
-rw-r--r--ui/config_dialog.py9
-rw-r--r--ui/windows/devices_window.py2
10 files changed, 31 insertions, 3 deletions
diff --git a/core/profile.py b/core/profile.py
index d3c7e3a..7ede859 100644
--- a/core/profile.py
+++ b/core/profile.py
@@ -302,8 +302,15 @@ class ProfileManager:
print(f"[Profile] Unknown device type: {dev_type}")
continue
try:
- kwargs = {k: v for k, v in dev_cfg.items() if k != "device_type"}
+ # "name" is a display label, not a constructor arg — every device
+ # factory builds its own default name internally, so apply it
+ # after construction instead of passing it through.
+ custom_name = dev_cfg.get("name")
+ kwargs = {k: v for k, v in dev_cfg.items()
+ if k not in ("device_type", "name")}
dev = factory(**kwargs)
+ if custom_name:
+ dev.info.name = custom_name
registry.add_instance(dev)
dev.connect()
if engine is not None:
diff --git a/devices/analog_input.py b/devices/analog_input.py
index 6ac82d4..8938bf2 100644
--- a/devices/analog_input.py
+++ b/devices/analog_input.py
@@ -175,6 +175,7 @@ class AnalogInputDevice(BaseDevice):
return {
"device_type": self.DEVICE_TYPE,
"device_id": self.info.device_id,
+ "name": self.info.name,
"num_channels": self._num_channels,
"simulate": self.simulate,
"backend": self.backend,
diff --git a/devices/arduino_device.py b/devices/arduino_device.py
index 954d387..8293a23 100644
--- a/devices/arduino_device.py
+++ b/devices/arduino_device.py
@@ -203,6 +203,7 @@ class ArduinoDevice(BaseDevice):
return {
"device_type": self.DEVICE_TYPE,
"device_id": self.info.device_id,
+ "name": self.info.name,
"analog_pins": self._analog_pins,
"di_pins": self._di_pins,
"do_pins": self._do_pins,
diff --git a/devices/digital_io.py b/devices/digital_io.py
index 2bd0243..f60c330 100644
--- a/devices/digital_io.py
+++ b/devices/digital_io.py
@@ -258,6 +258,7 @@ class DigitalIODevice(BaseDevice):
return {
"device_type": self.DEVICE_TYPE,
"device_id": self.info.device_id,
+ "name": self.info.name,
"num_inputs": self._num_inputs,
"num_outputs": self._num_outputs,
"simulate": self.simulate,
diff --git a/devices/nidaqmx_device.py b/devices/nidaqmx_device.py
index 3f64998..9d9747e 100644
--- a/devices/nidaqmx_device.py
+++ b/devices/nidaqmx_device.py
@@ -219,6 +219,7 @@ class NidaqmxDevice(BaseDevice):
return {
"device_type": self.DEVICE_TYPE,
"device_id": self.info.device_id,
+ "name": self.info.name,
"num_analog": self._num_analog,
"min_v": self._min_v,
"max_v": self._max_v,
diff --git a/devices/serial_device.py b/devices/serial_device.py
index bd953b8..580421c 100644
--- a/devices/serial_device.py
+++ b/devices/serial_device.py
@@ -168,6 +168,7 @@ class SerialDevice(BaseDevice):
cfg: Dict[str, Any] = {
"device_type": self.DEVICE_TYPE,
"device_id": self.info.device_id,
+ "name": self.info.name,
"port": self._port,
"baud_rate": self._baud,
"parse_format": self._fmt,
diff --git a/plugins/motion_capture/device.py b/plugins/motion_capture/device.py
index 58f89ce..3369962 100644
--- a/plugins/motion_capture/device.py
+++ b/plugins/motion_capture/device.py
@@ -102,6 +102,7 @@ class CameraDevice(BaseDevice):
return {
"device_type": self.DEVICE_TYPE,
"device_id": self.info.device_id,
+ "name": self.info.name,
"camera_index": self._camera_index,
"simulate": self._simulate,
"resolution": list(self._resolution) if self._resolution else None,
diff --git a/ui/add_device_dialog.py b/ui/add_device_dialog.py
index 4b2b373..2bf0233 100644
--- a/ui/add_device_dialog.py
+++ b/ui/add_device_dialog.py
@@ -301,6 +301,10 @@ class AddDeviceDialog(QDialog):
self._id_edit.setPlaceholderText("Leave blank for auto")
cfg_form.addRow("Device ID:", self._id_edit)
+ self._name_edit = QLineEdit()
+ self._name_edit.setPlaceholderText("Leave blank to use the default type name")
+ cfg_form.addRow("Display Name:", self._name_edit)
+
self._fmt_cb = QComboBox()
self._fmt_cb.addItems(list(_FORMAT_LABELS.keys()))
self._fmt_lbl = QLabel("Protocol / Format:")
@@ -451,6 +455,10 @@ class AddDeviceDialog(QDialog):
panel.set_simulate(sim)
dev = panel.build_device(dev_id)
+ display_name = self._name_edit.text().strip()
+ if display_name:
+ dev.info.name = display_name
+
self.created_device = dev
self.accept()
except Exception as e:
diff --git a/ui/config_dialog.py b/ui/config_dialog.py
index d9bc9df..5a95821 100644
--- a/ui/config_dialog.py
+++ b/ui/config_dialog.py
@@ -59,7 +59,14 @@ class DeviceConfigDialog(QDialog):
e = QLineEdit(str(v)); e.setReadOnly(True); return e
form.addRow("Device ID:", _ro(info.device_id))
- form.addRow("Name:", _ro(info.name))
+
+ def _on_name_edited():
+ info.name = name_edit.text().strip() or info.name
+ self.setWindowTitle(f"Configure — {info.name} [{info.device_id}]")
+
+ name_edit = QLineEdit(info.name)
+ name_edit.editingFinished.connect(_on_name_edited)
+ form.addRow("Name:", name_edit)
form.addRow("Type:", _ro(info.device_type))
form.addRow("Description:", _ro(info.description))
form.addRow("Manufacturer:", _ro(info.manufacturer))
diff --git a/ui/windows/devices_window.py b/ui/windows/devices_window.py
index 3b193b2..eec65c8 100644
--- a/ui/windows/devices_window.py
+++ b/ui/windows/devices_window.py
@@ -344,7 +344,7 @@ class DevicesWindow(QWidget):
dev = self.registry.get_instance(device_id)
if dev:
DeviceConfigDialog(dev, self).exec()
- self._ch_tab.refresh()
+ self.refresh() # rebuilds device rows (picks up a renamed display name) + Signals tab
self.device_reconfigured.emit(device_id)
def _on_remove(self, device_id: str):