2.4 KiB
2.4 KiB
LIN Interface Call Flow
This document explains how LIN operations flow through the abstraction for both Mock and BabyLin adapters.
Contract (base)
File: ecu_framework/lin/base.py
connect()/disconnect()send(frame: LinFrame)receive(id: int | None = None, timeout: float = 1.0) -> LinFrame | Nonerequest(id: int, length: int, timeout: float = 1.0) -> LinFrame | Noneflush()
LinFrame validates:
- ID is 0x00–0x3F (6-bit LIN ID)
- Data length ≤ 8 bytes
Mock adapter flow
File: ecu_framework/lin/mock.py
connect(): initialize buffers and statesend(frame): enqueues the frame and (for echo behavior) schedules it for RXreceive(timeout): waits up to timeout for a frame in RX bufferrequest(id, length, timeout): synthesizes a deterministic response of the given length for predictabilitydisconnect(): clears state
Use cases:
- Fast local dev, deterministic responses, no hardware
- Timeout and boundary behavior validation
BabyLIN adapter flow (SDK wrapper)
File: ecu_framework/lin/babylin.py
connect(): import SDKBabyLIN_library.py, discover ports, open first, optionallyBLC_loadSDF, get channel handle, andBLC_sendCommand("start schedule N;")send(frame): callsBLC_mon_set_xmit(channelHandle, frameId, data, slotTime=0)receive(timeout): callsBLC_getNextFrameTimeout(channelHandle, timeout_ms)and converts returnedBLC_FRAMEtoLinFramerequest(id, length, timeout): prefersBLC_sendRawMasterRequest(channel, id, length); falls back to(channel, id, bytes); if unavailable, sends a header and waits onreceive()disconnect(): callsBLC_closeAll()- Error handling: uses
BLC_getDetailedErrorString(if available)
Configuration:
interface.sdf_pathlocates the SDF to loadinterface.schedule_nrsets the schedule to start upon connectinterface.channelselects the channel index
Edge considerations
- Ensure the correct architecture (x86/x64) of the DLL matches Python
- Channel/bitrate must match your network configuration
- Some SDKs require initialization/scheduling steps before transmit/receive
- Time synchronization and timestamp units vary per SDK — convert as needed
Note on master requests:
- Our mock wrapper returns a deterministic byte pattern when called with the
lengthsignature. - When only the bytes signature is available, zeros of the requested length are used in tests.