summaryrefslogtreecommitdiff
path: root/ui
diff options
context:
space:
mode:
Diffstat (limited to 'ui')
-rw-r--r--ui/control_editor.py6
-rw-r--r--ui/control_panel.py6
2 files changed, 10 insertions, 2 deletions
diff --git a/ui/control_editor.py b/ui/control_editor.py
index 48de21d..5140bf3 100644
--- a/ui/control_editor.py
+++ b/ui/control_editor.py
@@ -360,8 +360,12 @@ class ControlEditorDialog(QDialog):
dev = self.registry.get_instance(dev_id)
if not dev:
return
- # Add actual channels
+ # Add actual channels (skip disabled — can't be driven while switched
+ # off — and skip read-only channels — a control writes, so a channel
+ # with no write mapping should never be offered as a target)
for ch in dev.info.channels:
+ if not ch.enabled or not ch.writable:
+ continue
self._ch_cb.addItem(f"{ch.channel_id} ({ch.name})",
userData=ch.channel_id)
# For Arduino backends also suggest digital pins for output
diff --git a/ui/control_panel.py b/ui/control_panel.py
index 2b936c4..22229ee 100644
--- a/ui/control_panel.py
+++ b/ui/control_panel.py
@@ -120,7 +120,11 @@ class ControlWidget(QFrame):
if self.registry and self.device_id and self.channel_id:
dev = self.registry.get_instance(self.device_id)
if dev:
- if dev.status not in (DeviceStatus.CONNECTED, DeviceStatus.SIMULATED):
+ ch = dev.get_channel(self.channel_id)
+ if ch is not None and not ch.enabled:
+ print(f"[Control] write_channel({self.channel_id}, {value}) skipped on "
+ f"{self.device_id} — channel is disabled")
+ elif dev.status not in (DeviceStatus.CONNECTED, DeviceStatus.SIMULATED):
print(f"[Control] write_channel({self.channel_id}, {value}) skipped on "
f"{self.device_id} — device status is {dev.status.value}, not connected")
else: