<feed xmlns='http://www.w3.org/2005/Atom'>
<title>labUI.git/ui/control_editor.py, branch main</title>
<subtitle>Data acquisition program written in Python for use with serial communication devices.
</subtitle>
<id>https://git.kolset.xyz/labUI.git/atom?h=main</id>
<link rel='self' href='https://git.kolset.xyz/labUI.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.kolset.xyz/labUI.git/'/>
<updated>2026-07-29T21:44:24Z</updated>
<entry>
<title>Merge branch 'fix/control-channel-direction-filter'</title>
<updated>2026-07-29T21:44:24Z</updated>
<author>
<name>Christian Kolset</name>
<email>ckolset@colostate.edu</email>
</author>
<published>2026-07-29T21:44:24Z</published>
<link rel='alternate' type='text/html' href='https://git.kolset.xyz/labUI.git/commit/?id=767f1b013dffb8124a389997a2dbf2f06937a1d4'/>
<id>urn:sha1:767f1b013dffb8124a389997a2dbf2f06937a1d4</id>
<content type='text'>
# Conflicts:
#	ui/control_editor.py
</content>
</entry>
<entry>
<title>Rework channel labeling and add source picker to virtual-channel creation</title>
<updated>2026-07-29T19:10:35Z</updated>
<author>
<name>Christian Kolset</name>
<email>ckolset@colostate.edu</email>
</author>
<published>2026-07-29T19:10:35Z</published>
<link rel='alternate' type='text/html' href='https://git.kolset.xyz/labUI.git/commit/?id=2c6b4b751ffdd1156254b31745597654b5f2e286'/>
<id>urn:sha1:2c6b4b751ffdd1156254b31745597654b5f2e286</id>
<content type='text'>
Relabel every channel picker/header to "NAME (DEVICE/SIGNAL)" instead of
the previous "DEVICE/SIGNAL (NAME)" ordering, consistently across
channels_window.py (_channel_combo, ChannelPickerDialog,
ChannelPipelineBlock header), plot_builder.py, plot_config.py,
control_editor.py, and plot_window.py.

While touching each of those pickers, added the missing `.enabled`
filter that _make_picker()/_x_cb/_build_channel_picker lacked (the
default-layout builders already filtered disabled channels; these
manual "add channel to pane" pickers didn't).

Devices window Signals tab: removed the separate "Signal ID" column
(folded into the existing non-editable Device column instead of the
editable Name column, to avoid corrupting the in-place channel rename
feature that column already supports).

Channels window Virtual Channels pane: added a "Source" dropdown next
to "+ Add Channel" — picking a source pre-seeds the new derived
channel with it via DerivedBlock._add_src(); leaving it on the default
"none" entry keeps today's behavior of creating an empty channel.

Note: docs/ToDo.md's "Channels window UI" items referred to the *live*
UI (this window's PipelineTab + the Devices window's Signals tab), not
SignalsListTab in this same file, which its own module docstring flags
as dead/unused code kept only for old-profile compatibility — verified
by grepping for any instantiation of it (none exist).

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Hide non-writable channels from Controls picker, gate writes on enabled+writable</title>
<updated>2026-07-29T18:59:10Z</updated>
<author>
<name>Christian Kolset</name>
<email>ckolset@colostate.edu</email>
</author>
<published>2026-07-29T18:59:10Z</published>
<link rel='alternate' type='text/html' href='https://git.kolset.xyz/labUI.git/commit/?id=9360dea6e6327004b905eb6d7c782cc7c0d3ba13'/>
<id>urn:sha1:9360dea6e6327004b905eb6d7c782cc7c0d3ba13</id>
<content type='text'>
Adds ChannelConfig.writable so the Controls editor can only bind to
channels with a real write mapping (VS/MA/ME/MD/ST for CML, do*/DO for
digital I/O, write_cmd-configured SCPI channels, holding-register Modbus
channels) instead of read-only telemetry — this is exactly the class of
mistake hit earlier (binding a motor-speed control to M1_TV instead of
M1_VS). Also carries forward the enabled-channel gating for controls
(hide disabled channels from the picker, block writes to them at
_write() time) done alongside this investigation.

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Scripting: named signal vars, shared vars dict, control scripts, code templates</title>
<updated>2026-06-10T04:14:20Z</updated>
<author>
<name>Christian Kolset</name>
<email>christian.kolset@gmail.com</email>
</author>
<published>2026-06-10T04:14:20Z</published>
<link rel='alternate' type='text/html' href='https://git.kolset.xyz/labUI.git/commit/?id=7aec470acd69e9c1810b40aa5eea9b96b9eb73ad'/>
<id>urn:sha1:7aec470acd69e9c1810b40aa5eea9b96b9eb73ad</id>
<content type='text'>
- Named variables in expressions: source channel IDs injected as Python
  identifiers alongside x[] (e.g. write `A0 * 2` instead of `x[0] * 2`)
- Shared `vars` dict on SignalProcessor accessible from all expressions,
  functions, and control scripts; persisted in .labdaq profiles
- Per-derived-channel `state` dict for persistent computation state in
  custom scripts
- Control widgets gain optional on_action_script (Python snippet with
  value, vars, channels, math in scope); syntax-checked in editor dialog
- Built-in derived kinds (derivative, rms, power, etc.) now show their
  Python implementation as read-only code previews; "Edit as Custom Script"
  converts to custom_script kind with template pre-filled

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Removed calibration feature in signal processing &gt; pipeline.</title>
<updated>2026-04-22T19:05:05Z</updated>
<author>
<name>Christian Kolset</name>
<email>christian.kolset@gmail.com</email>
</author>
<published>2026-04-22T19:05:05Z</published>
<link rel='alternate' type='text/html' href='https://git.kolset.xyz/labUI.git/commit/?id=445403fdc61f4e65736dc65a959f119fc096f4c0'/>
<id>urn:sha1:445403fdc61f4e65736dc65a959f119fc096f4c0</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fixed saving profile to include devices and their configuration</title>
<updated>2026-04-22T18:21:28Z</updated>
<author>
<name>Christian Kolset</name>
<email>christian.kolset@gmail.com</email>
</author>
<published>2026-04-22T18:21:28Z</published>
<link rel='alternate' type='text/html' href='https://git.kolset.xyz/labUI.git/commit/?id=91101126e9d044adb8afa635cca1ab5d5a4c51a6'/>
<id>urn:sha1:91101126e9d044adb8afa635cca1ab5d5a4c51a6</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Major update to Output control</title>
<updated>2026-04-22T04:58:30Z</updated>
<author>
<name>Christian Kolset</name>
<email>christian.kolset@gmail.com</email>
</author>
<published>2026-04-22T04:58:30Z</published>
<link rel='alternate' type='text/html' href='https://git.kolset.xyz/labUI.git/commit/?id=4db119fb9c04428e7aef6f1a278c1639aa867baf'/>
<id>urn:sha1:4db119fb9c04428e7aef6f1a278c1639aa867baf</id>
<content type='text'>
    Including:
    - Control panel
    - Change status of simulation after devices creation.
    - Arduino serial conflict with multiple channels.
    - Claude instructions.
    - Update to arduino on board code.
</content>
</entry>
<entry>
<title>V13</title>
<updated>2026-04-21T19:57:46Z</updated>
<author>
<name>Christian Kolset</name>
<email>christian.kolset@gmail.com</email>
</author>
<published>2026-04-21T19:43:52Z</published>
<link rel='alternate' type='text/html' href='https://git.kolset.xyz/labUI.git/commit/?id=2a634dca0c7962b90004f75c4cdac6225201bb5e'/>
<id>urn:sha1:2a634dca0c7962b90004f75c4cdac6225201bb5e</id>
<content type='text'>
This version contains the profile feature. Allowins users to save the
channels, signals and plots for specific labs.
</content>
</entry>
</feed>
