Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
b854348
Made definition of _GNU_SOURCE in CMakeLists.txt public
RainerZ Jul 8, 2026
18dcf67
Fixed 'static const' warnings
RainerZ Jul 8, 2026
a6fa6df
Corrected wrong ticks usage in md files
RainerZ Jul 8, 2026
86b55e5
Added a enum metadata declaration to no_a2l_demo
RainerZ Jul 8, 2026
61c0761
Added enum support to xcpclient tool ELF->A2L generator
RainerZ Jul 9, 2026
4103e28
Windows build break fixed
RainerZ Jul 12, 2026
80adea1
Windows bugfix
RainerZ Jul 12, 2026
832a771
Added no_a2l_demo_cpp
RainerZ Jul 17, 2026
46ef24a
cpp_demo shutdown issue fixed
RainerZ Jul 17, 2026
0ab953b
Conditionally removed the A2L generator declarations from the public …
RainerZ Jul 17, 2026
4836deb
Removed the namespace alias xcplib
RainerZ Jul 17, 2026
cb67eb0
Updated the A2L generator Linux remote test scripts for no_a2l_demo a…
RainerZ Jul 17, 2026
694a0c4
Documentation updated
RainerZ Jul 18, 2026
d3e9c12
Demonstrate using class instances with parameters in no_a2l_demo_cpp
RainerZ Jul 19, 2026
d80431a
README.md updated
RainerZ Jul 19, 2026
261a311
Fixed calibration segment name length
RainerZ Jul 20, 2026
d100a78
CANape project for no_a2l_demo_cpp
RainerZ Jul 20, 2026
5493eb3
Fixed C++ meta data problem
RainerZ Jul 21, 2026
7c6b423
Updated gimli and object
RainerZ Jul 21, 2026
9c81079
XcpSetA2lName and XcpGetA2lName is independant from enaling the A2L g…
RainerZ Jul 22, 2026
8335216
Added command line option skip_vars_without_metadata
RainerZ Jul 22, 2026
9e165d3
README.md updated
RainerZ Jul 22, 2026
0afab89
Explicit read_write qualifier
RainerZ Jul 23, 2026
bbf253f
xcpclient option --skip_vars_without_metadata
RainerZ Jul 23, 2026
f591dd4
Added config file support
RainerZ Jul 25, 2026
ec7df9f
Implemented option XCP_ENABLE_DAQ_EVENT_INFO for section registered e…
RainerZ Jul 25, 2026
cb28196
Warning fixed
RainerZ Jul 28, 2026
e2ee381
Bugfix
RainerZ Jul 28, 2026
eec8aae
Bugfix
RainerZ Jul 28, 2026
be5f217
Bugfix
RainerZ Jul 28, 2026
38cf70d
Add CLAUDE.md with build system and architecture guidance
RainerZ Aug 4, 2026
8d6cfbe
Test
RainerZ Jul 28, 2026
971d8c4
Documentation improvements in the public library header files
RainerZ Aug 4, 2026
8d22428
CHANGELOG updated
RainerZ Jul 30, 2026
5c83865
Documentation improvements in the public library header files
RainerZ Aug 4, 2026
82a1b8d
Minor changes
RainerZ Aug 5, 2026
b841483
V2.1.10
RainerZ Aug 5, 2026
6da290d
Fixed free_rtos_esp32_demo linker map section based event detection w…
RainerZ Aug 17, 2026
6d9f84b
Added support for a analog converter with calibration parameters (2-p…
RainerZ Aug 17, 2026
294c525
Added a display line for the analog reading
RainerZ Aug 17, 2026
ebdedee
Fix ESP32 image containing multiple DROM segments
RainerZ Aug 18, 2026
d233d6e
Only include shm.h and persistence.h where their contents are enabled
RainerZ Aug 18, 2026
1d9ce69
xcpclient: check the A2L EPK against the EPK reported by the target
RainerZ Aug 18, 2026
2275075
xcpclient tool dependency to mc_registry switched to public RainerZ/x…
RainerZ Aug 18, 2026
4b12f22
Versions and CHANGELOG updated
RainerZ Aug 20, 2026
1913c14
EPK mismatch will be prompted on terminal and give a hard error if not
RainerZ Aug 19, 2026
828c18c
Versions and CHANGELOG updated
RainerZ Aug 24, 2026
537d184
Improved xcpclient error message when AML is not found
RainerZ Aug 19, 2026
857ef34
fix: link type_detection_test against xcplite for XCPLITE_CONFIGURATI…
RainerZ Aug 24, 2026
63ff061
xcpclient: handle C++ class types and fix empty typedefs for template…
RainerZ Sep 2, 2026
aaddf3b
Fixed metadata macros XCP_LIMITS (missing ;) and XCP_READ_WRITE ([])
RainerZ Aug 31, 2026
5b406c7
xcpclient: merge the DWARF type reader from a2ltool 3.4.1
RainerZ Sep 2, 2026
602f643
Merge remote-tracking branch 'origin/V2.1.10' into V2.1.10
RainerZ Sep 2, 2026
2eab752
CHANGELOG.md updated
RainerZ Sep 2, 2026
7b74137
xcpclient: update xcp_registry to e9da7e9 (unique field typedef names)
RainerZ Sep 2, 2026
69e65b3
xcpclient: document supported types and limitations, fix pointer memb…
RainerZ Sep 2, 2026
9a75a3a
xcpclient: no panic on events without descriptor section or duplicate…
RainerZ Sep 2, 2026
2ae3719
CHANGELOG.md updated
RainerZ Sep 2, 2026
9e762ee
build.sh uses ´cargo install --path . --locked´ to avoid surprises wi…
RainerZ Sep 2, 2026
ef84fed
Split platform.c into platform.c and socket.c
RainerZ Aug 24, 2026
3759210
Documentation updated
RainerZ Aug 24, 2026
f585d20
feat: split platform into platform+sockets, add OPTION_ENABLE_UDP_RAW…
RainerZ Aug 24, 2026
d4b7026
OPTION_ENABLE_UDP_RAW
RainerZ Aug 26, 2026
6ced2c7
Prevent IPv4 fragmentation, report oversized segments at runtime
RainerZ Aug 26, 2026
29c7ddc
Fixed some stale comments about raw max frame size and socket_raw_tes…
RainerZ Aug 27, 2026
1ec5bb4
Add optional zero copy transmit, harden queue payload alignment
RainerZ Aug 27, 2026
92824f5
Test script for udp_raw_demo
RainerZ Aug 27, 2026
244bceb
Add an out-of-tree extension point for the raw Ethernet HAL
RainerZ Aug 28, 2026
4dbb619
Correct the sRxBuf alignment comment in socket_raw.c
RainerZ Aug 28, 2026
d25fa7e
Added cmp_demo, CMP as UDP RAW HAL, CMP not implemented yet
RainerZ Aug 28, 2026
e9824b4
Implemented CMP over UDP in cmp_demo
RainerZ Aug 28, 2026
3046a9d
cmp_demo test.sh
RainerZ Aug 28, 2026
bd0ed01
Reduce OPTION_MTU to 1424 to leave headroom for encapsulating HAL bac…
RainerZ Aug 28, 2026
121d5ca
Minor changes
RainerZ Aug 30, 2026
8a1ffbc
Document XCP discovery: what XCPlite has today and the options
RainerZ Aug 30, 2026
da24404
Implement CMP_CM_DISCOVERY in cmp_demo
RainerZ Aug 30, 2026
03465d0
Use the platform.h thread abstraction in cmp_demo, document what stay…
RainerZ Aug 31, 2026
ceca122
Changed local_test.SH pcap location to invocation folder
RainerZ Aug 31, 2026
faa3bd6
xcpclient: mc_registry dependency swithed to VectorGrp master
RainerZ Sep 3, 2026
c2695e6
xcpclient: added a measurement ticker
RainerZ Sep 3, 2026
d783836
xcpclient A2L generation improvements:
RainerZ Sep 4, 2026
164d2ba
xcpclient: unique typedef names for same-named C++ types in different…
RainerZ Sep 4, 2026
272701b
xcpclient: type name qualification moved into the DWARF reader, more …
RainerZ Sep 5, 2026
a9de161
docs/OFFLINE_A2L.md describes offline A2L generation in detail
RainerZ Sep 5, 2026
4dc2d73
Merge remote-tracking branch 'origin/V2.2.0' into V2.1.12
RainerZ Sep 6, 2026
bbacffb
xcpclient: mc_registry dependency swithed to VectorGrp master
RainerZ Sep 3, 2026
330ddd8
xcpclient: added a measurement ticker
RainerZ Sep 3, 2026
d0c0004
xcpclient A2L generation improvements:
RainerZ Sep 4, 2026
fb81dc4
xcpclient: unique typedef names for same-named C++ types in different…
RainerZ Sep 4, 2026
d228078
xcpclient: type name qualification moved into the DWARF reader, more …
RainerZ Sep 5, 2026
14343e4
docs/OFFLINE_A2L.md describes offline A2L generation in detail
RainerZ Sep 5, 2026
4a1c931
V2.1.13
RainerZ Sep 6, 2026
8e20716
V2.1.14
RainerZ Sep 6, 2026
a7b27b0
Merge remote-tracking branch 'origin/V2.1.14' into V2.2.1
RainerZ Sep 6, 2026
d6f14b3
Fixed Windows build
RainerZ Sep 6, 2026
4f63399
Restore changes lost in the merges
RainerZ Sep 7, 2026
da991fd
xcpclient: call frame information of 32 bit targets parsed with the a…
RainerZ Sep 7, 2026
5f1fc0a
freertos_esp32_demo: build with sockets.c after the platform split, s…
RainerZ Sep 7, 2026
0c0564e
xcpclient: --default-event for the measurement of variables without a…
RainerZ Sep 7, 2026
545f411
xcpclient: --default-event assigns the event to global and static var…
RainerZ Sep 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ RecycleBin.ini
test_bintool
*.bak
*.log
*.pcap

# Other
.vscode
Expand All @@ -36,3 +37,4 @@ test_bintool
/docs/SUBMODULE_GUIDE.md
/shm_*.sh
wlan.h
/TODO_old.md
6 changes: 5 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,9 @@
"cmake.configureOnOpen": false,
"rust-analyzer.linkedProjects": [
"${workspaceFolder}/tools/xcpclient/Cargo.toml"
]
],
"[rust]": {
"editor.defaultFormatter": "rust-lang.rust-analyzer",
"editor.formatOnSave": true
}
}
90 changes: 83 additions & 7 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,90 @@

All notable changes to XCPlite are documented in this file.

## [V2.2.1]

- xcpclient related changes:
- The call frame information (`.debug_frame`, `.eh_frame`) of 32 bit targets is parsed with the address size of the ELF file. It was parsed with the 8 byte address size of the host, which produced unusable frame descriptions for ARM and Xtensa targets and a CFA offset of 0 by accident. For ARM Cortex-M targets (`freertos_stm32_demo`) the stack frame relative addresses of local variables change, please verify on the target
- Xtensa (ESP32): the CFA offset is 0 by design, the trigger macros pass the CFA itself (`__builtin_dwarf_cfa()`), verified on ESP32-S3 with `freertos_esp32_demo`
- Location expressions of variables which can not be evaluated (register locations, entry values, optimized code in other compilation units) and variables without a name are reported at debug level instead of error/warning level
- New option `--default-event <id>` (also `default_event` in the TOML config file): event used for the DAQ measurement of variables without a fixed event, such as global variables in an A2L file generated from an ELF file. When an A2L file is created from an ELF file, the event is assigned to global variables and to static variables in functions without an event trigger as their default event
- Split `platform.c/.h` into `platform.c/.h` (threads, mutex, clock, sleep, memory, atomics) and `sockets.c/.h` (socket abstraction for all platforms). `sockets.h` includes `platform.h`; files that use both include both explicitly (IWYU).
- New raw Ethernet transport `OPTION_ENABLE_UDP_RAW`: XCP on UDP/IPv4 implemented inside xcplib on top of a thin raw Ethernet HAL, for targets without a TCP/IP stack. See `docs/SOCKET_RAW.md`.
- New build configuration `raw` (`src/xcplib_raw_cfg.h`, `build-raw/`) with the new example `udp_raw_demo` and the unit test `socket_raw_test` (Linux only)
- `src/socket_raw.c` — UDP/IPv4 layer, answer-only ARP, ICMP Echo responder, receive filter with an absolute-deadline loop
- `src/socket_raw_hal.h` — raw Ethernet HAL interface, `src/socket_raw_hal_linux.c` — AF_PACKET backend (requires `CAP_NET_RAW`)
- `test/test_socket_raw.sh` — isolated veth/netns test setup with ARP, ping and XCP CONNECT checks
- Mutually exclusive with `OPTION_ENABLE_UDP`/`OPTION_ENABLE_TCP` and requires `OPTION_QUEUE_32`; both enforced by `#error` in `xcptl_cfg.h`, together with the SHM, multicast and MTU restrictions
- The `rtos` configuration keeps using the lwIP socket API - the raw transport is a separate configuration, not an override
- Optional zero copy transmit for the raw Ethernet transport (`OPTION_UDP_RAW_ZERO_COPY`, on by default): headroom is reserved in front of every transmit queue3/queue32 segment so the Ethernet/IPv4/UDP header is written in place instead of copying the payload into a frame buffer.
- New generic queue concept `QUEUE_SEGMENT_HEADER_SIZE` in `queue.h` - reserved once per *segment*, as opposed to the existing per-*message* `QUEUE_ENTRY_USER_HEADER_SIZE`
- `queue32.c`/`queue32m.c` gain one guarded field; with the option off the queue entry layout is byte identical to before
- Command responses keep the copying path, they are built on the stack and are not hot
- New `OPTION_UDP_RAW_HAL_EXTERNAL`: an application can supply its own raw Ethernet HAL from outside the library. xcplib then selects no backend and the `eth_hal_*` symbols stay undefined in `libxcplite` until the application links its own implementation. Intended for backends which do not belong in the library, for example ASAM CMP for testing XCP tools through capture modules, or a vendor specific interface such as XLAPI.
- Also lifts the Linux-only restriction of the raw transport: without a built in backend there is nothing platform specific left in it
- Depends on `libxcplite` being a **static** library, so the undefined `eth_hal_*` resolve at application link time with no indirection in the transmit path. A shared build would resolve them internally and the override would silently not take
- `socket_raw_hal_linux.c` is excluded by the same option, so the built in AF_PACKET backend is not linked in
- `OPTION_MTU` in the `raw` configuration set to **1420**, below the 1500 of a standard Ethernet link, to leave headroom for a HAL backend which encapsulates the frame before putting it on the wire. `XCPTL_MAX_SEGMENT_SIZE` becomes 1392, the largest Ethernet frame 1434 and its IP packet 1420 bytes, i.e. `OPTION_MTU` exactly. An encapsulating backend then fits inside a 1500 byte path: `cmp_demo` wraps that 1434 byte frame in a 34 byte CMP envelope and 28 bytes of outer IPv4/UDP headers, reaching 1496 bytes. At the full link MTU a segment is 1472 bytes and the frame 1514, filling the path on its own, so an encapsulating backend has nothing left and the raw transport, which does not fragment, can only refuse the frame.
- The previous value was 1504, a leftover of the pre-V2.1.11 convention where `OPTION_MTU` was the link MTU rounded up to a multiple of 8. Since "Fix UDP segment size calculation from MTU" (V2.1.11) `XCPTL_MAX_SEGMENT_SIZE` is `(OPTION_MTU - 28) & ~7`, so `OPTION_MTU` is the true link MTU and 1504 gained nothing over 1500
- **Behaviour change:** `udp_raw_demo` now sends segments of 1392 instead of 1472 bytes
- New example `cmp_demo`: an emulated **ASAM CMP** (Capture Module Protocol) capture module carrying XCP, for testing XCP tools which communicate through capture modules. Implemented against ASAM CMP Protocol Layer Specification V1.1.0. Nothing CMP specific is in `libxcplite` — the whole protocol lives in the example, behind the `eth_hal_*` interface.
- A standalone CMake project consuming an **installed** xcplite via `find_package(xcplite)`, not built from the root `CMakeLists.txt`
- CMP over UDP (6.4.2). CMP over raw Ethernet is a possible later step
- `src/cmp.c` — the envelope codec, verified byte exact against the sample PCAPNG files shipped with the specification
- Injection uses `TX_DATA_MSG` (message type `0x04`), which **CMP 1.1 introduced** and 1.0 does not have. Without it a capture module could only carry DAQ and XCP could never `CONNECT`. Note that a CMP 1.0 dissector reports it as an unknown message type
- `src/cmp_rest.c` — the mandatory REST interface (12.3), read only. Its `Transmitter` object is how a Data Sink detects that transmission is supported (7.2.2); without it a tool may never inject
- `src/cmp_discovery.c` — `CMP_CM_DISCOVERY` responder (12.1.1) on `239.255.0.0:5556`, serviced by the REST thread. Section 12 requires only one of three discovery approaches and permits static configuration with none, so this is optional
- `test/cmp_codec_test.c`, `test/fake_sink.py` (a minimal Data Sink), `test/discovery_probe.py`, `test/test_local.sh` (loopback) and `test.sh` (on target)
- New `docs/XCP_DISCOVERY.md`: records what xcplib has for XCP's own multicast discovery today — `GET_SERVER_ID_EXTENDED` implemented, `GET_SERVER_ID` stubbed, both behind `XCPTL_ENABLE_MULTICAST`, which no shipped configuration enables and which the raw transport excludes — and the options for it. Nothing is decided or changed. Also records that `XCPTL_MULTICAST_PORT` is 5557 while ASAM CMP 12.1 states XCP uses 5556, which needs checking against ASAM MCD-1 XCP.
- IPv4 fragmentation is now prevented on the socket transport: `socketOpen` sets the DF bit on UDP sockets (`IP_MTU_DISCOVER`/`IP_PMTUDISC_DO` on Linux, `IP_DONTFRAG` on macOS/BSD, `IP_DONTFRAGMENT` on Windows, no-op on lwIP). Fragmentation is harmful for DAQ - one lost fragment loses the whole datagram and reassembly adds jitter - and an `OPTION_MTU` larger than the path MTU previously degraded measurement silently. Oversized segments now fail with `EMSGSIZE` and a message naming the segment size and the `OPTION_MTU` to reduce. **Behaviour change:** a setup that relied on fragmentation will now report an error instead of silently fragmenting.
- The lwIP socket path now reports a segment that does not fit the link MTU. lwIP sets no DF option - it has no `IP_DONTFRAG` - so unlike Linux, macOS/BSD, QNX and Windows it does not refuse an oversized datagram: it fragments or drops it according to its own `IP_FRAG` build setting, silently either way. That made lwIP the one transport where an `OPTION_MTU` larger than the link MTU degraded measurement with no diagnostic at all. `socketSendTo` now compares the segment plus 28 bytes of IPv4/UDP headers against `netif_default->mtu` and warns once, with the same wording as the socket path. It still sends: this is a diagnostic, not a guard, since refusing a datagram lwIP may well deliver would change behaviour. `netif_default` is not necessarily the interface routing to the destination on a multi-homed target, so a false report is possible there.
- `create_thread()` on Windows now returns 0 on success, matching `pthread_create()`, instead of evaluating to the thread `HANDLE` where non-NULL meant success. The two conventions were inverted, so `if (create_thread(...) != 0)` read as an error on POSIX and as success on Windows. A *portable* check is still not possible - both FreeRTOS variants are `do {} while (0)` statements which assert - and `platform.h` now documents the contract per platform. No caller in the repository tests the result, so nothing changes in behaviour.
- Version aligned to 2.2.1 in `CMakeLists.txt` (what `find_package(xcplite)` reports) and in `OPTION_VERSION_MAJOR`/`_MINOR`/`_PATCH` in `xcplib_cfg.h` (what `XCP_DRIVER_VERSION` reports to the XCP client). The two had drifted apart at 2.1.2 and 2.1.10.
- Fixed `PLATFORM_32_BIT` typo in `xcplib_cfg.h`, which prevented the automatic selection of `OPTION_QUEUE_32` on 32 bit platforms
- Fixed missing `#include <errno.h>` in `shm.c`, which broke the `shm` configuration build on macOS
- Window build workaround to disable section based event pre-registration
- Fixed older XCP protocol layer versions 0x0100 to 0x0102

## [V2.1.14]

- Support static allocation and improve FreeRTOS robustness (#124)
* Support static allocation for FreeRTOS tasks and mutexes
* Use static storage when configSUPPORT_STATIC_ALLOCATION is enabled
* Preserve dynamic allocation and recursive mutex support
* Update FreeRTOS documentation and remove obsolete queue TODOs
* Fix FreeRTOS delay rounding and overflow
* Avoid unaligned IPv4 address access in FreeRTOS/lwIP
* Fix synchronization of FreeRTOS queue state
* Correct FreeRTOS queue and lwIP documentation
* Fix FreeRTOS emulator clock test build


## [V2.1.12]

- xcpclient related changes (xcpclient version 3.0.10):
- Improved variable registration for global and static variables
- Global variables and local static variables in functions without event trigger are registered, but not associated to any specific default DAQ event
- Unique typedef names for struct/class types with the same name in different namespaces, classes or functions (`motor_control.Input`, `valve_control.Input`). Previously all variables of such types referenced the first registered typedef and were shown with the wrong type.
- Global variables with the same name in different namespaces are registered with namespace qualified names (`motor_control.input`, `valve_control.input`) instead of dropping all but the first one
- A struct type which is used for measurement and for calibration variables gets separate typedefs
- The GCC declaration and definition entries of a namespace scope variable are merged, they no longer produce duplicate instance errors
- Variables with internal linkage in a namespace and without DWARF location (e.g. metadata markers `XCP_COMMENT(motor_control__input, ...)` inside a namespace) are resolved by their mangled symbol name
- Metadata annotations placed in the same namespace or function as the variable no longer need a scope prefix (`XCP_COMMENT(input, ...)` in namespace `motor_control` annotates `motor_control.input`), explicit prefixes keep working. Metadata for the typedef fields of namespace qualified instances.
- Local variables without a DWARF location (optimized away) are no longer resolved to the address of a global variable with the same name, only symbols with local binding are considered for them
- no_a2l_demo, no_a2l_demo_cpp: more demo cases, no_a2l_demo_cpp demonstrates types and variables with the same name in different namespaces
- Documentation: new `docs/OFFLINE_A2L.md` for the offline A2L generation with xcpclient (workflow, naming rules, supported types, diagnostics), `docs/TECHNICAL.md` keeps the library topics and the instrumentation marker contract, xcpclient and no_a2l_demo READMEs updated



## [V2.1.11]

* Allow custom memory attributes for queue32m
* Avoid mutex allocation when queue32m uses critical sections
* Support optional recursive FreeRTOS mutexes
* Fix typos in FreeRTOS documentation and comments
* Fix UDP segment size calculation from MTU
* Make FreeRTOS queue segment count configurable
- FreeRTOS related changes:
* Allow custom memory attributes for queue32m
* Avoid mutex allocation when queue32m uses critical sections
* Support optional recursive FreeRTOS mutexes
* Fix typos in FreeRTOS documentation and comments
* Fix UDP segment size calculation from MTU
* Make FreeRTOS queue segment count configurable


## [V2.1.10]
Expand Down Expand Up @@ -139,7 +215,7 @@ All notable changes to XCPlite are documented in this file.
```c
void XcpInit(const char *name, const char *epk, uint8_t mode);
```
- The return value contract of `socketRecv` and `socketRecvFrom` has changed. Only code that uses these functions directly (i.e. code that includes `platform.h` is affected)
- The return value contract of `socketRecv` and `socketRecvFrom` has changed. Only code that uses these functions directly (i.e. code that includes `socket.h` is affected)

### Experimental

Expand Down
7 changes: 5 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,10 @@ src/queue*.c Lock-free/mutex transmit queue implementations (
src/cal.c/.h Calibration segment RCU implementation (page switching, locks)
src/a2l.c, src/a2l_writer.c Runtime A2L file generation
src/persistence.c/.h Binary (.bin) parameter/event persistence across restarts
src/platform.c/.h OS abstraction (threads, sockets, clock, atomics) — Linux/macOS/QNX/Windows/FreeRTOS
src/platform.c/.h OS abstraction (threads, clock, mutex, atomics) — Linux/macOS/QNX/Windows/FreeRTOS
src/sockets.c/.h Socket abstraction over the OS socket API (all standard platforms)
src/socket_raw.c Raw-Ethernet UDP/IPv4 transport (OPTION_ENABLE_UDP_RAW), see docs/SOCKET_RAW.md
src/socket_raw_hal.h Raw Ethernet HAL interface; socket_raw_hal_linux.c is the AF_PACKET backend
src/util.c/.h Shared helpers
```

Expand Down Expand Up @@ -119,7 +122,7 @@ XCPlite encodes *where* a measured/calibrated variable lives (global, stack, hea
- `xcp_evts` section — `tXcpEventDescriptor` constants emitted by `DaqCreateEvent`/`DaqCreateAndTriggerEvent`
- `xcp_cals` section — `tXcpCalSegDescriptor` constants emitted by `CalSegDecl`+`CalSegCreate`

and DWARF scope anchors named `trg__<mode-letters>__<event-name>` (e.g. `trg__AAS__foo`, letter position = address-extension value [0..]: `A`=absolute, `C`=cal-segment-relative, `S`=stack-relative, `D`=dynamic/heap) emitted by the trigger macros, to reconstruct addressing without any runtime A2L calls. Full details, including what changes if you modify the trigger macros, are in `docs/TECHNICAL.md`.
and DWARF scope anchors named `trg__<mode-letters>__<event-name>` (e.g. `trg__AAS__foo`, letter position = address-extension value [0..]: `A`=absolute, `C`=cal-segment-relative, `S`=stack-relative, `D`=dynamic/heap) emitted by the trigger macros, to reconstruct addressing without any runtime A2L calls. The marker contract (sections, marker names, trigger anchor naming) is in `docs/TECHNICAL.md`, the tool side (workflow, naming rules, symbol resolution, supported types) in `docs/OFFLINE_A2L.md`.

### Shared-memory (SHM) multi-application mode (`docs/SHM.md`)

Expand Down
Loading