- Add pyproject.toml (hatchling backend, version 0.1.0, name ecu-framework).
Runtime deps split out from requirements.txt; test extras and the
Melexis-transitive bundle are opt-in.
- Add CHANGELOG.md (Keep-A-Changelog format), seeding [Unreleased] with the
installable shift and a [0.1.0] entry for the existing baseline.
- ecu_framework/__init__.py: resolve __version__ from importlib.metadata
with a "0.0.0+local" fallback for source checkouts. Add power and
flashing to __all__ and the docstring (previously stale).
- Drop per-subpackage __version__ from lin/ and power/. A single
pyproject.toml version is the source of truth; subpackage-level
__version__ strings drift and nothing consumed them.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
owon_psu.py upgrades (all backward-compatible):
- SerialParams.from_config() and OwonPSU.from_config() factories that
translate the YAML power_supply block (parity 'N', stopbits 1.0)
into pyserial constants — eliminates the boilerplate every test
was duplicating.
- Parsed-numeric measurement helpers: measure_voltage_v(),
measure_current_a(), output_is_on(). Tests can now assert on
floats / bools instead of regex-ing strings.
- safe_off_on_close=True (new ctor kwarg, default on) — close()
sends 'output 0' before closing the port. Last-ditch protection
against leaving the bench powered on after an aborted test.
Keyword-only so the historical positional ctor signature is
preserved.
- Cross-platform port resolver: windows_com_to_linux,
linux_serial_to_windows, candidate_ports, resolve_port. The
resolver tries the configured port verbatim, then its
cross-platform translation (COM7 ↔ /dev/ttyS6 on WSL1), then
Linux USB-serial paths (/dev/ttyUSB*, /dev/ttyACM*), then a full
scan_ports() with optional idn_substr filter. One bench config
works on Windows, WSL1, WSL2 + usbipd-win, and native Linux.
- try_idn_on_port refactored to use OwonPSU internally, removing
~25 lines of duplicated serial-port plumbing.
ecu_framework/power/__init__.py re-exports the new helpers so tests
can do `from ecu_framework.power import resolve_port, ...`.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The MUM (Melexis Universal Master) adapter is the current default; the
BabyLIN SDK adapter is retained only for backward compatibility with
existing rigs.
Code:
- Emit DeprecationWarning when BabyLinInterface is instantiated and
when tests/conftest.py routes interface.type=='babylin' to it.
- Update module/class docstrings in ecu_framework/{__init__,config,
lin/__init__,lin/babylin}.py to label BabyLIN-specific fields and
paths as deprecated.
Config / scripts / pytest:
- pytest.ini: relabel the babylin marker as deprecated.
- config/{babylin.example,examples,test_config}.yaml: add deprecation
banners and field comments.
- scripts/99-babylin.rules and scripts/pi_install.sh: annotate the
udev-rule install block as legacy-only.
Documentation:
- TESTING_FRAMEWORK_GUIDE.md, docs/08_babylin_internals.md, and
vendor/README.md: prepend explicit "DEPRECATED" banners.
- docs/{README,01,02,04,05,07,09,10,12,13,14,15,18,DEVELOPER_COMMIT_
GUIDE}.md: relabel "legacy" to "deprecated" where babylin is
mentioned, present MUM as the primary path, and steer new work
toward the MUM examples.
No tests, configs, or modules were deleted; existing BabyLIN setups
keep working but now produce a clear DeprecationWarning at runtime.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>