Hosam-Eldin Mostafa 7392272a5b docs(frame_io): explain how frame names reach FrameIO
A reader asked where FrameIO gets its list of known frame names from —
because looking at `fio.send("ALM_Req_A", ...)` it seems like the class
must hold a registry somewhere. It doesn't: FrameIO is a broker that
forwards an incoming string to the LDF object it was constructed with,
and the string lives either in the test source (Path A) or in the
generated wrapper class (Path B).

Adds section 2 "How frame names reach FrameIO" to
docs/19_frame_io_and_alm_helpers.md, between the "Three layers of
access" overview (section 1) and the API reference (formerly section 2,
now section 3). The new section contains:

- A table of where the names actually live: LDF file on disk,
  LdfDatabase after parsing, caller source code. FrameIO is explicitly
  NOT in that table.
- The FrameIO class skeleton showing the empty _frames cache.
- A concrete ASCII call trace of `fio.send("ALM_Req_A", ...)` from
  test source -> FrameIO -> LdfDatabase -> ldfparser -> byte layout.
- Path A (stringly-typed) vs Path B (typed wrapper from gen_lin_api),
  with the trade-off (typo caught at runtime vs at import time).
- The cache lifecycle (starts empty, fills lazily, one entry per
  unique frame name passed in).
- A "mental model" summary calling FrameIO a generic glue layer.

Sections 3-9 renumbered to make room (3->4, 4->5, ..., 8->9). The 7.x
sub-sections under "Writing a new test" become 8.x. Updates the
stale anchor link in 14_power_supply.md
(#72-the-four-phase-test-pattern -> #82-the-four-phase-test-pattern).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 21:12:39 +02:00
..
2026-04-28 23:47:17 +02:00
2026-04-29 00:56:07 +02:00

Documentation Index

A guided tour of the ECU testing framework. Start here:

  1. 01_run_sequence.md — End-to-end run sequence and call flow
  2. 02_configuration_resolution.md — How configuration is loaded and merged
  3. 03_reporting_and_metadata.md — How test documentation becomes report metadata
  4. 11_conftest_plugin_overview.md — Custom pytest plugin: hooks, call sequence, and artifacts
  5. 04_lin_interface_call_flow.md — LIN abstraction and adapter behavior (Mock, MUM, and the deprecated BabyLIN)
  6. 05_architecture_overview.md — High-level architecture and components
  7. 06_requirement_traceability.md — Requirement markers and coverage visuals
  8. 07_flash_sequence.md — ECU flashing workflow and sequence diagram
  9. 08_babylin_internals.md — BabyLIN SDK wrapper internals and call flow (DEPRECATED)
  10. 16_mum_internals.md — MUM (Melexis Universal Master) adapter internals and call flow
  11. 17_ldf_parser.md — LDF parser, ldf fixture, and per-frame pack/unpack helpers
  12. 18_test_catalog.md — Per-test catalog: purpose, markers, hardware needs, expected result
  13. DEVELOPER_COMMIT_GUIDE.md — What to commit vs ignore, commands
  14. 09_raspberry_pi_deployment.md — Run on Raspberry Pi (venv, service, hardware notes)
  15. 10_build_custom_image.md — Build a custom Raspberry Pi OS image with the framework baked in
  16. 12_using_the_framework.md — Practical usage: local, hardware (MUM, or the deprecated BabyLIN), CI, and Pi
  17. 13_unit_testing_guide.md — Unit tests layout, markers, coverage, and tips
  18. 14_power_supply.md — Owon PSU control, configuration, tests, and quick demo script
  19. 15_report_properties_cheatsheet.md — Standardized keys for record_property/rp across suites
  20. 19_frame_io_and_alm_helpers.md — Hardware-test helpers: FrameIO (generic LDF I/O) and AlmTester (ALM_Node domain), plus the tests/hardware/_test_case_template.py starting point
  21. 20_docker_image.md — Containerizing the framework: mock-only CI image, hardware-passthrough image, the Melexis-package obstacle, compose & CI examples
  22. 21_yocto_image_for_raspberry_pi.md — Building a Yocto image that turns a Raspberry Pi into a self-contained test bench (BSP layout, recipes, network/USB config, deploy & maintenance)
  23. 23_config_loader_internals.md — How ecu_framework/config/loader.py is implemented: merge semantics, type coercion, schema quirks, and the PSU side-channel
  24. 24_test_wiring.md — How tests are wired to the framework: fixture topology, session lifecycle, the polymorphism boundary on lin, and the playbook for adding a new framework component

Related references:

  • Root project guide: ../README.md
  • Full framework guide: ../TESTING_FRAMEWORK_GUIDE.md
  • BabyLIN placement and integration: ../vendor/README.md (deprecated; only relevant for legacy rigs)
  • MUM source scripts and protocol details: ../vendor/automated_lin_test/README.md
  • PSU quick demo and scripts: ../vendor/Owon/