diff --git a/.gitignore b/.gitignore index d2cb275e..2e048d4b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ -/build -/build-* +build +build-* # CANape artefacts @@ -8,18 +8,34 @@ *.mf4 *.cnaxml *.tmp +CANapeTmpMea.ini -# Examples A2L files -*.a2l + +# Examples .a2l and .bin files +/*.a2l *.bin # Temporary files +test_bintool conversions.a2l groups.a2l typedefs.a2l *.bak +*.log +*.txt +# Other /run_remote.sh /run.sh -/examples/bpf_demo/CANape/CANapeTmpMea.ini +pi +dwarf +.vscode +.DS_Store +test_bpf_demo_pi.sh +test_bin2hex_pi.sh +CANape.aml +tools/gimli_demo/ +tools/dwarf_reader/ +tools/bintool/USAGE_EXAMPLES.md +/examples/hello_xcp/CANape/vCDMstudioUiConfiguration.xml diff --git a/.vscode/launch.json b/.vscode/launch.json index 2d1fdad6..2d1b5605 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,6 +1,26 @@ { "version": "0.2.0", "configurations": [ + { + "name": "Debug hello_xcp_cpp", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/hello_xcp_cpp.out", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "lldb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ], + "preLaunchTask": "XCPlite: build hello_xcp_cpp" + }, { "name": "Debug cpp_demo", "type": "cppdbg", diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 2c34f730..0a135163 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -96,6 +96,29 @@ "detail": "Build hello_xcp target using CMake", "dependsOn": "cmake configure" }, + { + "type": "shell", + "label": "XCPlite: build hello_xcp_cpp", + "command": "cmake", + "args": [ + "--build", + "build", + "--target", + "hello_xcp_cpp" + ], + "options": { + "cwd": "${workspaceFolder}" + }, + "group": { + "kind": "build", + "isDefault": false + }, + "problemMatcher": [ + "$gcc" + ], + "detail": "Build hello_xcp_cpp target using CMake", + "dependsOn": "cmake configure" + }, { "type": "shell", "label": "XCPlite: build c_demo", @@ -314,10 +337,10 @@ "args": [ "-avz", "--include=\"*.out\"", - "--include=\"*.a\"", + "--include=\"*.a2l\"", "--exclude=\"*\"", "rainer@192.168.0.206:~/XCPlite-RainerZ/build/", - "./build/" + "./pi/" ], "options": { "cwd": "${workspaceFolder}" diff --git a/CANape.aml b/CANape.aml index d742cdda..e5584119 100644 --- a/CANape.aml +++ b/CANape.aml @@ -1,5 +1,5 @@ -// /begin A2ML +/begin A2ML block "IF_DATA" taggedunion if_data { @@ -166,4 +166,4 @@ block "IF_DATA" taggedunion if_data { }; // block "IF_DATA" -// /end A2ML +/end A2ML diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..f9c7644c --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,96 @@ +# Changelog + +All notable changes to XCPlite are documented in this file. + +## [V1.0.0] + +### Breaking API Changes + + +- XcpInit signature changed to +```c +void XcpInit(const char *name, const char *epk, bool activate); +``` + +- A2lInit signature changed to +```c + bool A2lInit(const uint8_t addr[4], uint16_t port, bool use_tcp, uint32_t mode); +``` + +- CalSeg constructor signature changed, takes a pointer to the default parameters +```c + CalSeg(const char *name, const T *default_params) +``` + +- A2lTypedefBegin gets a pointer to any instance of the type. +- A2lTypedefParameterComponent does not need the typename parameter anymore +- A2lTypedefMeasurementComponent does not need the typename parameter anymore and has a comment parameter +```c +{ + A2lTypedefBegin(ParametersT, &kParameters, "A2L Typedef for ParametersT"); + A2lTypedefParameterComponent(min, "Minimum random number value", "Volt", -100.0, 100.0); + A2lTypedefParameterComponent(max, "Maximum random number value", "Volt", -100.0, 100.0); + A2lTypedefEnd(); +} + +- DaqCreateEventInstance does not return the event id anymore, new function DaqGetEventInstanceId to get the event id from the name +```c + DaqCreateEventInstance("task"); + tXcpEventId task_event_id = DaqGetEventInstanceId("task"); +``` + +- BIN format changes to enable future feature extensions, old BIN files are not compatible anymore + + +### Added +- Absolute or relative calibration parameter segment addressing (`OPTION_CAL_SEGMENTS_ABS` in `main_cfg.h`) +- More flexible addressing scheme configuration (see `xcp_cfg.h`) +- Generated A2L file uses the `project_no` identifier to indicate the configured addressing schema (currently ACSDD or CASDD) +- Support for more than one base address in relative address mode, variadic function to trigger event with multiple base addresses +- Optional async event with 1ms cycle time and prescaler support (`OPTION_DAQ_ASYNC_EVENT` in `main_cfg.h`) +- Different options to control the behavior of calibration segment persistence and freeze +- Memory optimization for event/daq-list mapping +- XCP_ENABLE_COPY_CAL_PAGE_WORKAROUND to enable workaround for CANape init calibration segments bug +- Variadic macro to create, trigger, and register local and member variables in one call with automatic addressing mode deduction (see hello_xcp_cpp example) +```c + XcpDaqEventExt(avg_calc1, this, // + (input, "Input value for floating average", "V", 0.0, 1000.0), // + (average, "Current calculated average"), // + (current_index_, "Current position in ring buffer"), // + (sample_count_, "Number of samples collected"), // + (sum_, "Running sum of all samples") + + ); +``` + +### Changed +- Signature of `xcplib::CreateCalSeg` changed, pointer to reference page +- Automatic EPK segment is now optional (`OPTION_CAL_SEGMENT_EPK` in `main_cfg.h`) + +### Experimental +- Tool `bintool` to convert XCPlite-specific BIN files to Intel-HEX format and apply Intel-HEX files to BIN files +- New demo `no_a2l_demo` to demonstrate workflows without runtime A2L generation (using a XCPlite-specific A2L creator, see README.md of `no_a2l_demo`) +- New demo 'bpf_demo' to demonstrate usage of XCPlite together with eBPF programs for Linux kernel tracing (see README.md of `bpf_demo`) +- Internal naming convention refactored to support A2L creation for dynamic objects from ELF/DWARF binaries +- Rust xcp-lite V1.0.0 uses the calibration segment management of XCPlite instead of implementing its own + +### Fixed +- Various bug fixes + + + +## [V0.9.2] + +### Breaking Changes +- Breaking changes from V0.6 + +### Added +- Lockless transmit queue (works on x86-64 strong and ARM-64 weak memory models) +- Measurement and read access to variables on stack +- Calibration segments for lock-free and thread-safe calibration parameter access, consistent calibration changes, and page switches +- Support for multiple segments with working and reference page and independent page switching +- Build as a library +- Used as FFI library for the Rust xcp-lite version + +### Changed +- Refactored A2L generation macros diff --git a/CMakeLists.txt b/CMakeLists.txt index 7ab5d625..2d13cdfd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -93,9 +93,32 @@ elseif(CMAKE_C_COMPILER_ID STREQUAL "MSVC") set(COMMON_WARNING_FLAGS /W3) endif() +# Custom build type configurations for debug symbols in release builds +if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang") + # For Release builds: use -O2 optimization and remove debug symbols and assertions + set(CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG") + set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG") + # For RelWithDebInfo builds: release build with moderate optimization and with debug symbols, preserve stack frames + # -fno-omit-frame-pointer: Always generate frame pointer for better stack traces + # -fno-optimize-sibling-calls: Prevent tail call optimization that can confuse debuggers + set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O1 -g -fno-omit-frame-pointer -fno-optimize-sibling-calls -DNDEBUG") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O1 -g -fno-omit-frame-pointer -fno-optimize-sibling-calls -DNDEBUG") + # For Debug builds: no optimization, full debug symbols + set(CMAKE_C_FLAGS_DEBUG "-O0 -g") + set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g") + message(STATUS "Custom compiler flags set") +elseif(CMAKE_C_COMPILER_ID STREQUAL "MSVC") + # MSVC equivalent settings + set(CMAKE_C_FLAGS_RELEASE "/O2 /Zi /DNDEBUG") + set(CMAKE_CXX_FLAGS_RELEASE "/O2 /Zi /DNDEBUG") + # /Oy- disables frame pointer omission (equivalent to -fno-omit-frame-pointer) + set(CMAKE_C_FLAGS_RELWITHDEBINFO "/O2 /Zi /Oy- /DNDEBUG") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/O2 /Zi /Oy- /DNDEBUG") + message(STATUS "Custom MSVC flags set") +endif() # xcplib sources -set(xcplib_SOURCES src/xcpAppl.c src/xcpLite.c src/xcpEthServer.c src/xcpEthTl.c src/xcpQueue32.c src/xcpQueue64.c src/a2l.c src/persistency.c src/platform.c) +set(xcplib_SOURCES src/xcpAppl.c src/xcpLite.c src/xcpEthServer.c src/xcpEthTl.c src/xcpQueue32.c src/xcpQueue64.c src/a2l.c src/persistence.c src/platform.c) set(PROJECT_ROOT ${CMAKE_CURRENT_LIST_DIR}) message(STATUS "PROJECT_ROOT is: ${PROJECT_ROOT}") @@ -134,6 +157,13 @@ add_executable(hello_xcp ${hello_xcp_SOURCES}) target_include_directories(hello_xcp PUBLIC "${PROJECT_ROOT}/inc") target_link_libraries(hello_xcp PRIVATE xcplib) +# Example no_a2l_demo +set(no_a2l_demo_SOURCES examples/no_a2l_demo/src/main.c) +set_source_files_properties(${no_a2l_demo_SOURCES} PROPERTIES LANGUAGE C) +add_executable(no_a2l_demo ${no_a2l_demo_SOURCES}) +target_include_directories(no_a2l_demo PUBLIC "${PROJECT_ROOT}/inc") +target_link_libraries(no_a2l_demo PRIVATE xcplib) + # Example hello_xcp_cpp add_executable(hello_xcp_cpp examples/hello_xcp_cpp/src/main.cpp ) target_include_directories(hello_xcp_cpp PUBLIC "${PROJECT_ROOT}/inc") @@ -204,6 +234,11 @@ if(BUILD_TEST) add_executable(cal_test test/cal_test/src/main.cpp) target_include_directories(cal_test PUBLIC "${PROJECT_ROOT}/inc") target_link_libraries(cal_test PRIVATE xcplib) + + # Data acquisition multi-threading test (C version) + add_executable(daq_test test/daq_test/src/main.c) + target_include_directories(daq_test PUBLIC "${PROJECT_ROOT}/inc") + target_link_libraries(daq_test PRIVATE xcplib) endif() @@ -219,6 +254,7 @@ else() # Set .out suffix for executables on non-Windows platforms set_target_properties(hello_xcp PROPERTIES SUFFIX ".out") + set_target_properties(no_a2l_demo PROPERTIES SUFFIX ".out") set_target_properties(hello_xcp_cpp PROPERTIES SUFFIX ".out") set_target_properties(c_demo PROPERTIES SUFFIX ".out") set_target_properties(cpp_demo PROPERTIES SUFFIX ".out") @@ -231,6 +267,7 @@ else() set_target_properties(type_detection_test_cpp PROPERTIES SUFFIX ".out") set_target_properties(a2l_test PROPERTIES SUFFIX ".out") set_target_properties(cal_test PROPERTIES SUFFIX ".out") + set_target_properties(daq_test PROPERTIES SUFFIX ".out") endif() endif() diff --git a/README.md b/README.md index 4518e2e3..a4922487 100644 --- a/README.md +++ b/README.md @@ -1,359 +1,100 @@ # XCPlite -## Introduction to XCP +## What is XCP? -XCP is a measurement and calibration protocol commonly used in the automotive industry. It is an ASAM standard. +XCP is a measurement and parameter tuning (calibration) protocol commonly used in the automotive industry (ASAM standard). It provides real-time signal acquisition and parameter tuning over various transport protocols with minimal impact on the target system. -It provides real time signal oriented data acquisition (measurement, logging) and modification of parameter constants (calibration) in a target micro controller system (ECU), to help observing and optimizing cyber physical control algorithms in real time. - -Timestamped events, measurement variables and parameter constants are described by an ASAM-A2L description file, another associated ASAM standard. A2L is a human readable ASCII format. -In a micro controller system programmed in C or C++, measurement data items are directly accessed in their original memory locations. This concept has minimum impact on the target system in terms of memory consumption, runtime and needs minimum code instrumentation. The A2l is a kind of annotated ELF Linker-Address-Map, with meta information on data instances and data types (MC specific types - lookup-tables, axis scaling, physical limits and units, conversion rules, ...). +**New to XCP?** See the [detailed XCP introduction](docs/XCP_INTRODUCTION.md) or visit: +- [Vector XCP Book](https://www.vector.com/int/en/know-how/protocols/xcp-measurement-and-calibration-protocol/xcp-book#) +- [Virtual VectorAcademy E-Learning](https://elearning.vector.com/) -In a Microprocessor system developed in a system programming language like C, C++ or Rust, this concept is still useful and efficient. Measurement signals and calibration parameters usually have a static lifetime and a defined memory layout, but no predefined memory location and are not limited to static storage classes. Data acquisition and modification is achieved by appropriate code instrumentation for measurement and wrapper types for groups of calibration parameters. -From a software developer perspective, XCP may be considered to be a high-frequency application level tracing solution, using statically instrumented trace points with configurable associated data. Tracing can be started, stopped and reconfigured during runtime. What is not configured, does not consume bandwidth, memory and other resources. The acquired context data is always consistent and trace events are precisely time stamped. Data types and instances of available context data items are defined as code or obtained by a XCP tool from ELF/DWARF debug information. Data instances may be in global, local, thread local and heap storage locations. In addition to that, XCP provides the capability to modify application variables and state in a thread safe and consistent way. -The ASAM-XCP standard defines a protocol and a transport layer. There are transport layers for all common communication busses used in the automotive industry, such as CAN, CAN-FD, FLEXRAY, SPI and Ethernet. +## About XCPlite -New to XCP? -Checkout the Vector XCP Book: - +XCPlite extends XCP use cases beyond traditional embedded microcontrollers to **modern multicore microprocessors** and SoCs running POSIX-compliant operating systems (Linux, QNX) or real-time operating systems (RTOS) such as ThreadX. -Visit the Virtual VectorAcademy for an E-Learning on XCP: - +Designed exclusively for **Ethernet transport** (TCP/UDP with jumbo frames), XCPlite solves the challenges of measurement and calibration in systems with true parallelism and multithreading: -## XCPlite Overview +- **Thread-safe & lock-free** - Consistent data acquisition and parameter modification across multiple cores +- **Memory-safe** - Measure and calibrate variables in any storage location: stack, heap, thread-local, and global +- **Runtime A2L generation** - Define events, parameters, and metadata as code; A2L description file generated and uploaded automatically +- **Complex type support** - Handle basic types, structs, arrays, and nested structures +- **Calibration segments** - Page switching, consistent atomic modification, and parameter persistence (freeze) +- **PTP timestamps** - Prepared for high-precision synchronized timestamps -XCPlite is an implementation of XCP for Microprocessors in pure C, optimized for the XCP on Ethernet Transport Layer for TCP or UDP with jumbo frames. -It is optimized for 64 Bit platforms with POSIX based Operating Systems, but also runs on 32 Bit platforms and on Windows with some restrictions. -The A2L measurement and calibration object database can be generated during runtime and uploaded by the XCP client tool on connect. +The API provides instrumentation macros for developers to define measurement points, calibration parameters, and meta data. Lock-free implementation ensures thread safety and data consistency without blocking latencies, even under high contention on multicore systems. -XCPlite is provided to test and demonstrate calibration tools such as CANape or any other XCP client implementation. -It may serve as a base for individually customized XCP on Ethernet implementations on Microprocessors. -It implements and demonstrates some techniques how to deal with variables in dynamically allocated memory and how to do measurement and calibration in multi-threaded applications. +Optimized for 64-bit architectures, compatible with 32-bit platforms. Requires C11 (C++20 for C++ support). Serves as the C library foundation for [XCP-Lite Rust](https://github.com/vectorgrp/xcp-lite). -XCPlite is used as a C library by the implementation of XCP for Rust in: - +**Other XCP Implementations:** +- **XCPbasic** - Free implementation for smaller Microcontrollers (8-bit+), optimized for CAN +- **XCPprof** - Commercial product in Vector's AUTOSAR MICROSAR and CANbedded portfolio -### Whats new in XCPlite V0.9.2 -- Breaking changes to V6. -- Lockless transmit queue. Works on x86-64 strong and ARM-64 weak memory model. -- Measurement and read access to variables on stack. -- Supports multiple calibration segments with working and reference page and independent page switching. -- Lock free and thread safe calibration parameter access, consistent calibration changes and page switches. -- Refactored A2L generation macros. -- Build as a library. -- Used (as FFI library) for the rust xcp-lite version. +## Getting Started -### Features +### Examples -- Supports XCP on TCP or UDP with jumbo frames. -- Thread safe, minimal thread lock and single copy event driven, timestamped high performance and consistent data acquisition. -- Runtime A2L database file generation and upload. -- Prepared for PTP synchronized timestamps. -- Supports calibration and measurement of structures. -- User friendly code instrumentation to create calibration parameter segments, measurement variables and A2L metadata descriptions as code. -- Measurement of global (static), local (stack) or heap variables and class instances. -- Thread safe, lock-free and wait-free ECU access to calibration data. -- Calibration page switching and consistent calibration. -- Calibration segment persistence. +Multiple examples demonstrating different features are available in the [examples](examples/) folder. -There are other implementations of XCP available: -XCPbasic is a free implementation for smaller Microcontrollers (even 8Bit) and optimized for CAN as Transport-Layer. -XCPprof is a commercial product in Vectors AUTOSAR MICROSAR and CANbedded product portfolio. +**Start here:** +- `hello_xcp` - Basic XCP server setup and instrumentation in C +- `hello_xcp_cpp` - Basic instrumentation in C++ -### Compatibilty +**Advanced examples:** +- `c_demo` - Complex data objects, calibration objects, and page switching +- `struct_demo` - Nested structs and multidimensional arrays +- `multi_thread_demo` - Multi-threaded measurement and parameter sharing +- `cpp_demo` - C++ class instrumentation and RAII wrappers +- `no_a2l_demo` - Workflow without runtime A2L generation (experimental) +- `bpf_demo` - Experimental syscall tracing (experimental) -The required C and and C++ language standards are C11 and C++20. +For detailed information about each example and how to set up CANape projects, see the [examples documentation](examples/README.md). -Most of the examples require CANape 23 or later, because they use A2L TYPEDEFs and relative memory addressing. +**Requirements:** -### Documentation +XCPlite examples are designed to showcase advanced XCP capabilities and are tested with **CANape 23+** (free demo version available). The examples leverage: -A description of the XCP instrumentation API is available in the doc folder. +- **Runtime A2L upload** - No manual A2L file management required +- **A2L TYPEDEFs** - Complex data structures with reusable type definitions +- **Address extensions** - Support for relative addressing and multiple memory spaces +- **Shared axis in typedefs** - Advanced calibration structures (CANape 24+, see `cpp_demo`) -## Examples +These features enable efficient workflows for modern multicore HPC applications. While XCPlite is XCP-compliant and works with any XCP tool, the examples take full advantage of CANape's support for dynamic systems and advanced A2L features. -Examples are found in the examples folder. +**Download:** [CANape demo version](https://www.vector.com/de/de/support-downloads/download-center) -To get started, take a first look at C example hello_xcp and then at hello_xcp_cpp for C++. - -### Example CANape projects - -There is a CANape project for each example in a directory folder "examples//CANape". -To load a project into CANape, select load project and navigate to the CANape.ini file in this folder. -All CANape project examples are configured to upload the A2L file via XCP. The IP address of the XCP server is stored in the A2L file uploaded last time. If CANape can not connect, check that the correct IP address is configured in "Device Configuration/Devices//Protocol/Transport Layer". - -The examples should run with a CANape demo version, which can be downloaded from . -The demo installation must be explicitly enabled in the installer and has some limitations: -It will store only the first seconds of measurement data and the number of measurement signals is limited. - -Note: Some of the examples use display windows without title bars to make it look cleaner. This option can be turned of with "Options/Display/View/Display Headline". - -### Example Details - -hello_xcp: - Demonstrates how to start the XCP on Ethernet server and use the runtime A2L generator. - Shows how to create a calibration parameter segment structure, register the parameters in the segment and access them safely. - Defines events for measurement of global and local variables. - Demonstrates the different addressing modes for variables and parameters. - Defines a function, registers local variables and function parameters and creates and triggers a measurement event in the function. - -hello_xcp_cpp: - Demonstrates how to instrument a member function of a C++ class and how to register and access calibration parameters in C++. - -The other examples cover more advanced topics: - -- Safely share calibration parameters among different threads. -- Measure instances of complex types, such a structs, arrays, nested structs and arrays of structs by using typedefs. -- Create complex parameters, like maps, curves and lookup tables with fixed or shared axis. -- Measure thread local instances of variables, create event instances. -- Create physical conversion rules and enumerations. -- Create additional groups. -- Use consistent atomic calibration. -- Make calibration changes persistent (freeze). -- Use the xcplib API to create context and span, measure durations. - -c_demo: - Shows more complex data objects (structs, arrays) and calibration objects (axis, maps and curves). - Measurement variables on stack and in global memory. - Consistent calibration changes and measurement. - Calibration page switching and EPK version check. - Note: If CANAPE_24 is defined in sig_gen.hpp, the lookup table is a nested typedef, it uses a THIS. references to its shared axis contained in the typedef. - -struct_demo: - Shows how to define measurement variables in nested structs, multidimensional fields and arrays of structs - -multi_thread_demo: - Shows measurement in multiple threads. - Create thread local instances of events and measurements. - Share a calibration parameter segment among multiple threads. - Thread safe and consistent access to calibration parameters. - Experimental code to demonstrate how to create context and spans using the XCP instrumentation API. - -cpp_demo: - Demonstrates the calibration segment RAII wrapper. - Demonstrates measurement of member variables and stack variables in class instance member functions. - Shows how to create a class with calibration parameters as member variables. - -threadx_demo: - Planned - -bpf_demo: - Experimental, work in progress. - Demonstrates tracing of process creations and selected syscalls. - -![CANape Screenshot](examples/cpp_demo/cpp_demo.png) - -### Building a CANape project and configuration from scratch - -How to create a new CANape project from scratch is described in the CANape help under "Creating a project and configuration (quick guide)". - -The easiest way to create a new CANape project for XCPlite is: - -- Create a new project in 'Backstage/Project/New'. -- Drag&Drop the A2L file generated by XCPlite on the CANape desktop and step through the pop up dialog pages: - Select XCP, Ethernet and LocalPC:ETH to use the local PCs ethernet adapter. - All other settings may stay on default. -- CANape should now be already connected. - If not, check the Ethernet settings in 'Device/DeviceConfiguration/Devices/MyDevice/Protocol/TransportLayer'. -- To configure CANape for automatic upload of the A2L file, a few more setting have to be modified once in the new project: - In 'Device/DeviceConfiguration/Devices/MyDevice/Database', enable automatic detection of database content and select 'Check identifier and content'. - -The automatic A2L upload then happens every time a new version of A2L file has been generated. -Depending on the settings in XCPlite, this happens after the first run of a new software build, or each time the application is restarted. -Of course, the A2L file may also be copied manually into the CANape project folder. - -### Build on Linux or macOS - -Use the build script to build the library xcplib, example targets and get comprehensive output on issues: - -```bash -./build.sh -``` - -Or build individual example targets: - -```bash -cmake -DCMAKE_BUILD_TYPE=Debug -S . -B build -make --directory ./build hello_xcp -``` - -### Build on Windows - -It is possible to build for Windows with the Microsoft Visual Studio compiler, but there are some limitations and performance penalties under Windows. -XCPlite is optimized for Posix based systems. -On Windows, atomic operations are emulated and the transmit queue always uses a mutex on the producer side. +### Build +**Linux/macOS:** ```bash -cmake -DCMAKE_BUILD_TYPE=Debug -S . -B build-msvc -cmake --build build-msvc --target hello_xcp -build-msvc/debug/hello_xcp.exe +./build.sh # Build all targets +# or +cmake -S . -B build && cmake --build build --target hello_xcp ``` -To create a Visual Studio solution: - +**Windows:** ```bash -./build.bat +./build.bat # Creates Visual Studio solution +# or +cmake -S . -B build-msvc && cmake --build build-msvc --target hello_xcp ``` -## Appendix - -### Trouble shooting compilation issues - -First of all, note that XCPlite requires C11 (and C++17 for C++ support). -A possible problematic requirement is that the 64-bit lockless transmit queue implementation requires atomic_uint_least4. -This may cause problems on some platforms when using the clang compiler. -Prefer gcc for better compatibility. -If this is not an option, the mutex based 32-bit queue may be used instead. +**Note:** Windows has some limitations (atomic operations emulated, mutex-based transmit queue). -```bash - -# Test with system default -cmake -B build -S . && cmake --build build +For detailed build instructions and troubleshooting, see [Building Documentation](docs/BUILDING.md). -# Test with clang -cmake -B build-clang -S . -DUSE_CLANG=ON && cmake --build build-clang +## Documentation -# Test with GCC -cmake -B build-gcc -S . -DUSE_GCC=ON && cmake --build build-gcc - -``` +- **[API Reference](docs/xcplib.md)** - XCP instrumentation API +- **[Configuration](docs/xcplib_cfg.md)** - Configuration options +- **[Examples](examples/README.md)** - Example applications and CANape setup +- **[Technical Details](docs/TECHNICAL.md)** - Addressing modes, A2L generation, instrumentation costs +- **[Building](docs/BUILDING.md)** - Detailed build instructions and troubleshooting +- **[XCP Introduction](docs/XCP_INTRODUCTION.md)** - What is XCP? +- **[Changelog](CHANGELOG.md)** - Version history -There is a script 'build.sh' to automate the build process and to check which of the targets have build issues. -If there are failures, copy & paste the complete output and provide it. - -```bash -./build.sh -``` - -'build.sh' has command line parameters to select a release or debug build and force the compiler to be used. - -```bash -./build.sh --help -``` - -Default is the system default compiler and debug build. - -On failure try to force gcc: - -```bash -./build.sh gcc -``` - -If still fails and if type_detection_test_c builds ok, run it. - -```bash -./build/type_detection_test_c.out -``` - -Copy & paste the complete output and provide it. - -Same with type_detection_test_cpp. - -```bash -./build/type_detection_test_cpp.out -``` +## License -### Instrumentation cost and side effects - -Keeping code instrumentation side effects as small as possible was one of the major goals, but of course there are effects caused by the code instrumentation: - -Data Acquisition: - -The measurement data acquisition trigger and data transfer is a lock-free implementations for the producer. It may be switched to simpler a mutex based implementation, if the platform requirements can not be met. DAQ trigger needs a external call to get the current time. -Some of the DAQ trigger macros do a lazy event lookup by name at the first time (for the convenience not to care about event handles), and cache the result in static or thread local memory. -The instrumentation to create events, uses a mutex lock against other simultaneous event creations. - -Measurement of function parameters and local variables, has the side effect that the compiler will spill the parameters from registers to stack frame and always keeps local variables on the stack frame. This is a side effect of the in scope registration macros, so it will work even with optimization level > -O0. There is no undefined behavior caused by compiler optimizations. - -Calibration: - -The instrumentation to create calibration segments, use a mutex lock against other simultaneous segment creations. -During the creation of a calibration segment, heap allocations for 3 copies of the initial page are requested (a reference, a working page and a single RCU swap page). -Calibration segment access is thread safe and lock less. There is no more heap allocation per thread needed. - -A2L Generation: - -The A2L generation simply uses the file system. There is no need for memory. It opens 4 different files, which will be merged on A2L finalization. -The A2l generation macros are not thread safe and don't have an underlying once pattern. It is up to the user to take care for locking and one time execution. There are helper functions and macros to make this easy. - -The overall concepts often relies on one time execution patterns. If this is not acceptable, the application has to take care for creating events and calibration segments in a controlled way. The A2l address generation for measurement variables on stack needs to be done once in local scope, there is no other option yet. Also the different options to create thread local instances of measurement data. - -### A2L file generation and address update options - -Option 1: -The A2L file is always created during application runtime. The A2L may be volatile, which means it may change on each restart of the application. This happens, when there are race conditions in registering calibration segments and events. The A2L file is just uploaded again by the XCP client. -To avoid A2L changes on each restart, the creation order of events and calibration segments just has to be deterministic. -As a default, the A2L version identifier (EPK) is generated from build time and date. If the A2L file is not stable, it is up to the user to provide an EPK version string which reflects this, otherwise it could create undefined behavior. - -Option 2: -The A2l file is created only once during the first run of a new build of the application. -A copy of all calibration segments and events definitions and calibration segment data is stored in a binary .bin file to achieve the same ordering in the next application start. BIN and A2L file get a unique name based on the software version string. The EPK software version string is used to check validity of the A2l and BIN file. -The existing A2L file is provided for upload to the XCP client or may be provided to the tool by copying it. -As a side effect, calibration segment persistency (freeze command) is supported. - -Option 3: -Create the A2L file once and update it with an A2L update tool such as the CANape integrated A2L Updater or Open Source a2ltool. -Note that currently, the usual A2L tools will only update absolute addresses for variables and instances in global memory and offsets of structure fields. -Data acquisition of variables on stack and relative addressing, is not possible today. This might change in a future version of the A2L Updater. - -XCPlite makes intensive use of relative addressing. -The addressing mode is indicated by the address extension: -0 - Calibration segment (A2L MEMORY_SEGMENT) relative address, high word of the address is the calibration segment index. -1 - Absolute address (Unsigned 32Bit, relative to main module load address). -2 - Signed 32Bit relative address, default is relative to the stack frame pointer of the function which triggers the event. -3 - Signed 16Bit relative address, high word of the address is the event id. This allows asynchronous (polling) access to the variable. Used for heap and class instance member variables. - -### Platform and language standard requirements and resource usage - -- _Generic and declspec for A2L generation type detection - Requires C11 and C++17 - -- File system: fopen, fprintf. - Used for A2L generation and optional calibration persistency to a binary file - -- Heap allocation: malloc, free. - Transmit queue (XcpEthServerInit, parameter queue size). - DAQ table memory (XcpInit, OPTION_DAQ_MEM_SIZE in main_cfg.h). - Calibration segments page memory (XcpCreateCalSeg, 3 copies of the default page for working page, xcp page and RCU). - -- Atomics (C11 stdatomic.h). - Requires atomic_uintptr_t, atomic_uint_fast8_t, atomic_uint_fast64_t, exchange, compare_exchange, fetch_sub, fetch_add. - Used for lock free queue (xcpQueue64), lock free calibration segments, DYN address mode cmd pending state, DAQ running state. - -- THREAD (Linux: pthread_create, pthread_join, pthread_cancel). - Used for XCP transmit and receive thread. - -- THREAD_LOCAL (C11:_Thread_local). - Used for the DaqEvent macros and A2L generation for per thread variable instances. - -- MUTEX (Linux: pthread_mutex_lock, pthread_mutex_unlock). - Used for 32 Bit Queue acquire, queue consumer incrementing the transport layer counter, thread safe creating event and calseg, thread safe lazy A2L registration. - -- Sleep (Linux: nanosleep). - Used for receive thread polling loop. - -- Clock (Linux: clock_gettime). - Used as DAQ timestamp clock. - -- Sockets (Linux: socket, ...). - -### Known issues - -- COPY_CAL_PAGE: CANape initialize RAM is executed only on the first calibration segment. Workaround: always copy all segments. -- CANape ignores segment numbers in A2L, if segment numbering starts with 1, SET_CAL_PAGE is executed on segment 0 and 1 -- GET_ID 5 (EPK) mode = 0x01 is ignored by CANape. Workaround: always provide EPK via upload. -- CANape executes GET_SEGMENT_MODE multiple times on the last calibration segment before freeze request. -- Address extension of memory segment is ignored by CANape. Workaround: using 0 for calibration segment relative addressing. -- Request for unique address extension per DAQ list is ignored by CANape (DAQ_KEY_BYTE == DAQ_EXT_DAQ). Workaround: Store the address extension per ODT entry. -- CANape < V24 does not support shared axis in typedefs or THIS. axis references. -- Transport Layer counter mutex could be avoided with alternative counter mode, which is not default in CANape. -- Indicate when polling access is not possible. CANape assumes polling access is always possible. -- Configuration for begin/end atomic calibration user defined XCP commend is not default. Must be set once in a new CANape project to 0x01F1 and 0x02F1. - -### Todo - -- CANape ignores address extension of loop_histogram in ccp_demo, when saving calibration values to a parameter file - loop_histogram is a CHARACTERISTIC array, but it is in a measurement group +See [LICENSE](LICENSE) file for details. diff --git a/build.sh b/build.sh index defe67cc..8036aa08 100755 --- a/build.sh +++ b/build.sh @@ -1,7 +1,5 @@ - #!/bin/bash -# ccmake -B build -S . # Parse command line arguments BUILD_TYPE="Debug" # Default to Debug build @@ -14,14 +12,14 @@ show_usage() { echo "Usage: $0 [build_type] [compiler] [target] [options]" echo "" echo "Parameters:" - echo " build_type: debug|release (default: debug)" + echo " build_type: debug|release|relwithdebinfo (default: debug)" echo " compiler: gcc|clang" echo " target: lib|examples|tests|bpf|all (default: examples)" echo "" echo "Build Targets:" echo " lib: Build only the xcplib library" echo " examples: Build library + examples (excluding bpf_demo) [DEFAULT]" - echo " tests: Build library + test targets (a2l_test, cal_test, type_detection tests)" + echo " tests: Build library + test targets (a2l_test, cal_test, daq_test, type_detection tests)" echo " bpf: Build library + examples including bpf_demo (Linux only)" echo " all: Build everything (library + examples + tests + bpf_demo)" echo "" @@ -49,7 +47,7 @@ show_usage() { echo " bpf_demo: Only built on Linux systems (requires BPF support)" } -# Parse arguments +# Parse arguments and set correct case for CMake for arg in "$@"; do # Convert to lowercase for comparison arg_lower=$(echo "$arg" | tr '[:upper:]' '[:lower:]') @@ -60,6 +58,9 @@ for arg in "$@"; do release) BUILD_TYPE="Release" ;; + relwithdebinfo) + BUILD_TYPE="RelWithDebInfo" + ;; gcc) COMPILER_CHOICE="gcc" ;; @@ -129,8 +130,7 @@ case "$COMPILER_CHOICE" in ;; esac -BUILD_TYPE_UPPER=$(echo "$BUILD_TYPE" | tr '[:lower:]' '[:upper:]') -echo "Building in $BUILD_TYPE_UPPER mode with $COMPILER_NAME compiler" +echo "Building in $BUILD_TYPE mode with $COMPILER_NAME compiler" echo "Build directory: $BUILD_DIR" echo "Build target: $BUILD_TARGET" @@ -181,6 +181,7 @@ LIBRARY_TARGET="xcplib" EXAMPLE_TARGETS=( "hello_xcp" "hello_xcp_cpp" + "no_a2l_demo" "c_demo" "cpp_demo" "struct_demo" @@ -190,6 +191,7 @@ EXAMPLE_TARGETS=( TEST_TARGETS=( "a2l_test" "cal_test" + "daq_test" "type_detection_test_c" "type_detection_test_cpp" ) @@ -350,7 +352,7 @@ echo "" echo "===================================================================" echo "BUILD SUMMARY" echo "===================================================================" -echo "Build Configuration: $BUILD_TYPE_UPPER mode with $COMPILER_NAME compiler" +echo "Build Configuration: $BUILD_TYPE mode with $COMPILER_NAME compiler" if [ "$COMPILER_CHOICE" = "" ] || [ "$COMPILER_CHOICE" = "default" ]; then echo "System Compiler: $ACTUAL_COMPILER" fi @@ -395,19 +397,20 @@ echo "===================================================================" # Exit with error code if any target failed if [ ${#FAILED_TARGETS[@]} -gt 0 ]; then if [ "$COMPILER_CHOICE" = "" ] || [ "$COMPILER_CHOICE" = "default" ]; then - echo "Total: ${#SUCCESSFUL_TARGETS[@]} successful, ${#FAILED_TARGETS[@]} failed ($BUILD_TYPE_UPPER build with $COMPILER_NAME - $ACTUAL_COMPILER)" + echo "Total: ${#SUCCESSFUL_TARGETS[@]} successful, ${#FAILED_TARGETS[@]} failed ($BUILD_TYPE build with $COMPILER_NAME - $ACTUAL_COMPILER)" else - echo "Total: ${#SUCCESSFUL_TARGETS[@]} successful, ${#FAILED_TARGETS[@]} failed ($BUILD_TYPE_UPPER build with $COMPILER_NAME)" + echo "Total: ${#SUCCESSFUL_TARGETS[@]} successful, ${#FAILED_TARGETS[@]} failed ($BUILD_TYPE build with $COMPILER_NAME)" fi echo "===================================================================" exit 1 else if [ "$COMPILER_CHOICE" = "" ] || [ "$COMPILER_CHOICE" = "default" ]; then - echo "Build completed successfully: $BUILD_TYPE_UPPER mode with $COMPILER_NAME compiler ($ACTUAL_COMPILER)" + echo "Build completed successfully: $BUILD_TYPE mode with $COMPILER_NAME compiler ($ACTUAL_COMPILER)" else - echo "Build completed successfully: $BUILD_TYPE_UPPER mode with $COMPILER_NAME compiler" + echo "Build completed successfully: $BUILD_TYPE mode with $COMPILER_NAME compiler" fi echo "===================================================================" + echo "" exit 0 fi diff --git a/build_qnx.bat b/build_qnx.bat new file mode 100644 index 00000000..5e17ff18 --- /dev/null +++ b/build_qnx.bat @@ -0,0 +1,75 @@ +@echo off +set BUILD_TYPE=%1 +set QNX_DIR=%2 +set PLATFORM=%3 +set QNX_ENV=%QNX_DIR%/qnxsdp-env.bat + +if not exist %QNX_DIR% ( + ECHO Directory %QNX_DIR% does not exist + GOTO show_usage +) + +if not exist %QNX_ENV% ( + echo File %QNX_ENV% does not exist + GOTO show_usage +) + +if not exist %QNX_ENV% ( + echo File %QNX_ENV% does not exist + GOTO show_usage +) + +where /q cmake +IF ERRORLEVEL 1 ( + ECHO CMake not found + GOTO error +) + +2>NUL CALL :CASE_%PLATFORM% +IF ERRORLEVEL 1 CALL :DEFAULT_PLATFORM + +:CASE_x86_64 + GOTO check_build_type +:CASE_aarch64le + GOTO check_build_type +:DEFAULT_PLATFORM + ECHO Unknown target platform "%PLATFORM%" + GOTO show_usage + +:check_build_type +2>NUL CALL :CASE_%BUILD_TYPE% +IF ERRORLEVEL 1 CALL :DEFAULT_BUILD_TYPE + +:CASE_Release + GOTO build +:CASE_Debug + GOTO build +:DEFAULT_BUILD_TYPE + ECHO Unknown build type "%BUILD_TYPE%" + GOTO show_usage + +:build +set PATH=%PATH%;D:\Programme\CMake\bin +call %QNX_ENV% +@echo off +rm -r build +@rem call cmake -S . -B build -DUSE_QCC=ON -G "Unix Makefiles" --debug-trycompile -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON . +call cmake -S . -B build -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DUSE_QCC=ON -G "Unix Makefiles" || goto error +call cmake --build build || goto error + +echo Build for QNX completed successfully +exit(0) + +:show_usage + echo. + echo Usage: build_qnx.bat ^[build_type] ^[qnx_install_dir^] ^[target_platform^] + echo. + echo Parameters: + echo build_type: Debug^|Release + echo qnx_install_dir: Path to QNX SDP installation, e.g. "C:\QNX\qnx710" + echo target_platform: aarch64le^|x86_64 + echo. + +:error +echo Build for QNX failed +exit(-1) \ No newline at end of file diff --git a/docs/BUILDING.md b/docs/BUILDING.md new file mode 100644 index 00000000..cf00633b --- /dev/null +++ b/docs/BUILDING.md @@ -0,0 +1,138 @@ +# Building XCPlite + +## Requirements + +- **C Standard:** C11 +- **C++ Standard:** C++20 (for C++ support) +- **Platforms:** Linux, macOS, Windows (with limitations) + +Most of the examples require **CANape 23 or later**, because they use A2L TYPEDEFs and relative memory addressing. + +## Quick Build + +### Linux or macOS + +Use the build script to build the library xcplib, example targets and get comprehensive output on issues: + +```bash +./build.sh +``` + +Or build individual example targets: + +```bash +cmake -DCMAKE_BUILD_TYPE=Debug -S . -B build +make --directory ./build hello_xcp +``` + +### QNX + +Building QNX targets requires the QNX Software Development Platform (SDP) to be installed on the host. +The installation directory of the QNX SDP to be used for compilation must be given as input argument to the build script. +Note that all CPP targets are currently excluded from the build if QNX SDP 7.0 or lower is used, due to missing support of std::optional. +Currently, two target architectures are supported: x86_64 and aarch64le + +Build all suitable targets with QNX 7.1.0 for x86_64 platforms on a Windows host: + +```bash +build_qnx.bat Debug "C:\QNX\qnx710" x86_64 +``` + +Build all suitable targets with QNX 8.0.0 for AArch64 platforms on a Linux host: + +```bash + ./build.sh Debug qcc all -q=/home/qnx800 -a=aarch64le +``` + +### Windows + +It is possible to build for Windows with the Microsoft Visual Studio compiler, but there are some limitations and performance penalties under Windows. +XCPlite is optimized for Posix based systems. +On Windows, atomic operations are emulated and the transmit queue always uses a mutex on the producer side. + +```bash +cmake -DCMAKE_BUILD_TYPE=Debug -S . -B build-msvc +cmake --build build-msvc --target hello_xcp +build-msvc/debug/hello_xcp.exe +``` + +To create a Visual Studio solution: + +```bash +./build.bat +``` + +## Troubleshooting Compilation Issues + +First of all, note that XCPlite requires C11 (and C++17 for C++ support). + +A possible problematic requirement is that the 64-bit lockless transmit queue implementation requires `atomic_uint_least64_t`. +This may cause problems on some platforms when using the clang compiler. +**Prefer gcc for better compatibility.** +If this is not an option, the mutex based 32-bit queue may be used instead. + +### Testing Different Compilers + +```bash +# Test with system default +cmake -B build -S . && cmake --build build + +# Test with clang +cmake -B build-clang -S . -DUSE_CLANG=ON && cmake --build build-clang + +# Test with GCC +cmake -B build-gcc -S . -DUSE_GCC=ON && cmake --build build-gcc +``` + +### Using build.sh for Diagnostics + +There is a script `build.sh` to automate the build process and to check which of the targets have build issues. +If there are failures, copy & paste the complete output and provide it. + +```bash +./build.sh +``` + +`build.sh` has command line parameters to select a release or debug build and force the compiler to be used: + +```bash +./build.sh --help +``` + +Default is the system default compiler and debug build. + +On failure try to force gcc: + +```bash +./build.sh gcc +``` + +### Type Detection Tests + +If build fails and if `type_detection_test_c` builds ok, run it: + +```bash +./build/type_detection_test_c.out +``` + +Copy & paste the complete output and provide it. + +Same with `type_detection_test_cpp`: + +```bash +./build/type_detection_test_cpp.out +``` + +## Platform-Specific Notes + +### Windows Limitations + +- Atomic operations are emulated +- The transmit queue always uses a mutex on the producer side +- Overall performance is lower compared to POSIX systems + +### Compiler Compatibility + +- **Recommended:** GCC (best compatibility with atomic operations) +- **Alternative:** Clang (may have issues with `atomic_uint_least64_t` on some platforms) +- **Windows:** MSVC (with limitations noted above) diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 00000000..9f217b16 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,18 @@ +# XCPlite Documentation + +This directory contains detailed documentation for XCPlite. + +## Documentation Index + +### Getting Started +- **[XCP Introduction](XCP_INTRODUCTION.md)** - Detailed introduction to the XCP protocol +- **[Examples](../examples/README.md)** - Example applications and tutorials + +### API Reference +- **[xcplib.md](xcplib.md)** - XCP instrumentation API reference +- **[xcplib_cfg.md](xcplib_cfg.md)** - Configuration options + +### Advanced Topics +- **[Technical Details](TECHNICAL.md)** - Instrumentation costs, A2L generation, addressing modes, EPK +- **[Building](BUILDING.md)** - Detailed build instructions and troubleshooting + diff --git a/docs/TECHNICAL.md b/docs/TECHNICAL.md new file mode 100644 index 00000000..c18663be --- /dev/null +++ b/docs/TECHNICAL.md @@ -0,0 +1,280 @@ +# XCPlite Technical Details + +This document contains advanced technical information about XCPlite's implementation, addressing modes, and configuration options. + +## Instrumentation Cost and Side Effects + +Keeping code instrumentation side effects as small as possible was one of the major goals, but of course there are effects caused by the code instrumentation: + +### Data Acquisition + +The measurement data acquisition trigger and data transfer is a lock-free implementation for the producer. It may be switched to simpler a mutex based implementation, if the platform requirements can not be met. DAQ trigger needs an external call to get the current time. + +Some of the DAQ trigger macros do a lazy event lookup by name at the first time (for the convenience not to care about event handles), and cache the result in static or thread local memory. + +The instrumentation to create events uses a mutex lock against other simultaneous event creations. + +### Measurement of Function Parameters and Local Variables + +Measurement of function parameters and local variables has the side effect that the compiler will spill the parameters from registers to stack frame and always keeps local variables on the stack frame. This is a side effect of the in scope registration macros, so it will work even with optimization level > -O0. There is no undefined behavior caused by compiler optimizations. + +### Calibration + +The instrumentation to create calibration parameter segments use a mutex lock against other simultaneous segment creations. + +During the creation of a calibration segment, heap allocations for 3 copies of the initial page are requested (a reference, a working page and a single RCU swap page). + +Calibration segment access is thread safe and lock less. There is no more heap allocation per thread needed. + + + +### A2L Generation + +The A2L generation simply uses the file system. There is no need for memory. It opens 4 different files, which will be merged on A2L finalization. + +The A2l generation macros are not thread safe and don't have an underlying once pattern. It is up to the user to take care for locking and one time execution. There are helper functions and macros to make this easy. + +### One-Time Execution Patterns + +The overall concepts often relies on one time execution patterns. If this is not acceptable, the application has to take care for creating events and calibration segments in a controlled way. The A2l address generation for measurement variables on stack needs to be done once in local scope, there is no other option yet. Also the different options to create thread local instances of measurement data. + +## A2L File Generation and Address Update Options + +### Option 1: Runtime Generation (Volatile) + +The A2L file is always created during application runtime. The A2L may be volatile, which means it may change on each restart of the application. This happens when there are race conditions in registering segments and events. The A2L file is just uploaded again by the XCP client. + +To avoid A2L changes on each restart, the creation order of events and segments just has to be deterministic. + +As a default, the A2L version identifier (EPK) is generated from build time and date. If the A2L file is not stable, it is up to the user to provide an EPK version string which reflects this, otherwise it could create undefined behavior. + +### Option 2: Persistent Generation with Freeze Support + +The A2l file is created only once during the first run of a new build of the application. + +A copy of all calibration parameter segments and events definitions and of the parameter data is stored in a binary .bin file to achieve the same ordering in the next application start. BIN and A2L file get a unique name based on the software version string. The EPK software version string is used to check validity of the A2l and BIN file. + +The existing A2L file is provided for upload to the XCP client or may be provided to the tool by copying it. + +As a side effect, calibration segment persistence (freeze command) is supported. + +### Option 3: External A2L Update Tools + +Create the A2L file once and update it with an A2L update tool such as the CANape integrated A2L Updater or Open Source a2ltool. + +**Note:** Currently, the usual A2L tools will only update absolute addresses for variables and instances in global memory and offsets of structure fields. + +Data acquisition of variables on stack and relative addressing is not possible today. This might change in a future version of the A2L Updater. + +### Option 4: No Runtime A2L Generation (Absolute Addressing) + +Disable A2L generation or don't use the A2L generation functions at all. + +Enable absolute addressing for calibration segments (`#define OPTION_CAL_SEGMENTS_ABS` in `main_cfg.h`). + +Use only absolute addressing mode, which is in this mode associated to address extension 0. + +The A2l file may then be created and updated with any usual method of your choice, using CANape, A2L-Studio, A2L-Creator, a2ltool, ... + +**Limitations:** +- Measurement of heap and stack is not possible anymore +- You are now limited to 32 bit address range starting at the module load address (`ApplXcpGetBaseAddr()`/`xcp_get_base_addr()`) + +**Advantages:** +- Thread safe parameter modification using calibration segments is still assured +- Thread safety of measurement data acquisition is now in your responsibility, by using a safe fixed event for each individual measurement variable + +### Option 5: XCPlite-Specific A2L Creator (Experimental) + +Experimental. Use a XCPlite specific A2L creator tool, which is aware of the different addressing schemes and static markers created by the code instrumentation macros. + +Experimental, work in progress. See `no_a2l_demo`. + +## Addressing Modes + +XCPlite makes intensive use of relative addressing. + +The addressing mode is indicated by the address extension: + +- **0/1** - Calibration segment (A2L MEMORY_SEGMENT) relative address, high word of the address is the segment index +- **1/0** - Absolute address (Unsigned 32Bit, relative to main module load address) +- **2** - Signed 32Bit relative address, default is relative to the stack frame pointer of the function which triggers the event +- **3..** - Signed 16Bit relative address, high word of the address is the event id. This allows asynchronous (polling) access to the variable. Used for heap and class instance member variables + +### CASDD vs ACSDD + +Depending on `#define OPTION_CAL_SEGMENTS_ABS` in `main_cfg.h`, address extension 0 is either the absolute addressing mode or the segment relative addressing mode. + +The 2 modes are named **CASDD** and **ACSDD**. The A2L `project_no` is used to indicate the addressing mode to A2L creators or updaters. + +This is important, because CANape does not support address extensions >0 for parameters in calibration segments. + +Parameters in calibration segments may be accessed by their segment relative address or by their absolute address, using the corresponding address extension. + +### Calibration Parameter Absolute Addressing + +The absolute address of a calibration parameter is an address within the default/reference page structure. This requires that the pointer to the default parameters (reference page) given to `XcpCreateCalSeg` are within the 32 bit addressable with static lifetime! `XcpCreateCalSeg` does not copy the default parameters. + +This would be possible when only using segment relative addressing mode, but is currently not implemented. + +## EPK - ECU Software Version + +To check compatibility of target ECU, A2L and binary parameter files, the so called EPK is used. It is a software version string specified in the A2L file, with an additional address where it is located in the ECU. + +The EPK does not have an explicit address extension, which means it defaults to 0. However the address extension 0 is defined in xcplib, as absolute or segment relative mode, the EPK may be accessed by its memory address. In addition, there is a special XCP info command `GET_ID` mode=5 to obtain the EPK from the ECU. + +### EPK and Binary Parameter Files + +To be able to check the compatibility of binary parameter files, which store only parameter data in calibration parameter segments, an EPK memory segment is needed. This is important, because if CANape persists and caches calibration parameter segments in binary files and if the EPK is not in the address range of a memory segment, there is no way to check compatibility of the binary files. + +In XCPlite, the EPK may be specified with an xcplib API function or is generated from build time and date when calibration segment persistence mode is enabled. + + +### The XCPlite RCU Algorithm for calibration segment updates + +Here is the used RCU algorithm as pseudo code: + +The 3 pages are named as follows: + 1. ecu_page - for current ECU access + 2. xcp_page - for current XCP access + 3. free_page - for RCU + +The variables lock_count, next_page and free_page are atomic pointers. + +This algorithm can be treated as a RCU like pattern with exactly one element (free_page) in its memory reclamation list. +When there is no free memory, the calibration changes just get collected in the xcp_page. +This is used to realize calibration consistency requirements, were the collection is controlled by CANape through user defined commands. +Drawback of this simple approach is, that calibration updates may starve, when there is always at least one reader holding a lock. +Worst case is, that a calibration update may time out. + +''' + Shared mutable atomic state between the XCP thread and the ECU thread is: + - ecu_page_next: a page with newer data, taken over into ecu_page + - free_page: the page freed when new_page is taken over + - ecu_access: 0 - ecu_page, 1 - default_page access mode + + Shared mutable atomic state between the ECU threads is: + - lock_count: number of locks on this segment + + +// Multithreaded lock +function lock(segment) { + if (lock_count++ == 0 } + if (ecu_page != ecu_page_next) { // Need to update ecu_page + + // The ecu_page (which now becomes the free_page) might be used by some other thread, since we got the lock==0 on this segment + free_page_hazard = true; + + free_page = ecu_page; + ecu_page = ecu_page_next; + + } else { + free_page_hazard = false; // There was no other lock and no need for update, free page must be safe now, if there is one + } + } + return ecu_page; + } + +// Multithreaded unlock +function unlock(segment) { + lock_count--; +} + +// Single threaded write +function write(segment, offset, data[]) { + + // Update data in the current xcp page + xcp_page[offset] = data; + + // Calibration page RCU + // If updates are hold back for consistency, (begin/end atomic calibration) we do not update the ECU page yet + if (!consistency_hold) { + try_publish(segment); + } +} + +// Single threaded publish +// Tries to publish pending changes to the ECU, return true on success +// Called cyclically to publish pending changes. It is also called when consistency hold is released. +function try_publish(segment) -> bool { + + // Try allocate a new xcp page + if (free_page == NULL || free_page_hazard ) { + return false // No free page available yet + } + + // allocate the free page + xcp_page_new = free_page; + free_page = NULL; + + // Copy old xcp page to the new xcp page + xcp_page_old = xcp_page; + memcpy(xcp_page_new, xcp_page_old); + xcp_page = xcp_page_new; + + // Update the old xcp page + ecu_page_next = xcp_page_old; + return true; +} + +''' + + +## Platform and Language Standard Requirements + +### Language Features + +- **_Generic and declspec** for A2L generation type detection + - Requires C11 and C++17 + +### System Resources + +**File system:** `fopen`, `fprintf` +- Used for A2L generation and optional parameter persistence to a binary file + +**Heap allocation:** `malloc`, `free` +- Transmit queue (`XcpEthServerInit`, parameter queue size) +- DAQ table memory (`XcpInit`, `OPTION_DAQ_MEM_SIZE` in `main_cfg.h`) +- Calibration segments page memory (`XcpCreateCalSeg`, 3 copies of the default page for working page, xcp page and RCU) + +**Atomics:** C11 `stdatomic.h` +- Requires: `atomic_uintptr_t`, `atomic_uint_fast8_t`, `atomic_uint_fast64_t`, `exchange`, `compare_exchange`, `fetch_sub`, `fetch_add` +- Used for: lock free queue (`xcpQueue64`), lock free calibration parameter segments, DYN address mode cmd pending state, DAQ running state + +**THREAD:** Linux: `pthread_create`, `pthread_join`, `pthread_cancel` +- Used for XCP transmit and receive thread + +**THREAD_LOCAL:** C11:`_Thread_local` +- Used for the DaqTriggerEvent macros and A2L generation for per thread variable instances + +**MUTEX:** Linux: `pthread_mutex_lock`, `pthread_mutex_unlock` +- Used for: 32 Bit Queue acquire, queue consumer incrementing the transport layer counter, thread safe creating event and calseg, thread safe lazy A2L registration + +**Sleep:** Linux: `nanosleep` +- Used for receive thread polling loop + +**Clock:** Linux: `clock_gettime` +- Used as DAQ timestamp clock + +**Sockets:** Linux: `socket`, ... +- Used for XCP on Ethernet transport layer + +## Known Issues + +### CANape-Specific Issues + +- **COPY_CAL_PAGE:** CANape initialize RAM is executed only on the first memory segment. **Workaround:** always copy all segments +- CANape ignores segment numbers in A2L, if segment numbering starts with 1, SET_CAL_PAGE is executed on segment 0 and 1 +- **GET_ID 5 (EPK)** mode = 0x01 is ignored by CANape. **Workaround:** always provide EPK via upload +- CANape executes GET_SEGMENT_MODE multiple times on the last memory segment before freeze request +- Address extension of memory segment is ignored by CANape. **Workaround:** using 0 for segment relative addressing +- Request for unique address extension per DAQ list is ignored by CANape (DAQ_KEY_BYTE == DAQ_EXT_DAQ). **Workaround:** Store the address extension per ODT entry +- CANape < V24 does not support shared axis in typedefs or THIS. axis references +- Transport Layer counter mutex could be avoided with alternative counter mode, which is not default in CANape +- Indicate when polling access is not possible. CANape assumes polling access is always possible +- Configuration for begin/end atomic calibration user defined XCP command is not default. Must be set once in a new CANape project to 0x01F1 and 0x02F1 +- EPK segment is defined with 2 readonly pages, because of CANape irritations with mixed mode calibration segment. CANape would not care for a single page EPK segment, reads active page always from segment 0 and uses only SET_CAL_PAGE ALL mode + +### Other Issues + +- CANape ignores address extension of `loop_histogram` in ccp_demo, when saving calibration values to a parameter file. `loop_histogram` is a CHARACTERISTIC array, but it is in a measurement group diff --git a/docs/XCP_INTRODUCTION.md b/docs/XCP_INTRODUCTION.md new file mode 100644 index 00000000..8b1ba474 --- /dev/null +++ b/docs/XCP_INTRODUCTION.md @@ -0,0 +1,40 @@ +# Introduction to XCP + +## What is XCP? + +XCP is a measurement and parameter tuning (calibration) protocol commonly used in the automotive industry. It is an ASAM standard. + +It provides real time signal oriented data acquisition (measurement, logging) and tuning of parameter constants (calibration) in a target micro controller system (ECU), to help observing and optimizing cyber physical control algorithms in real time. + +## How XCP Works + +Timestamped events, measurement variables and parameter constants are described by an ASAM-A2L description file, another associated ASAM standard. A2L is a human readable ASCII format. + +In a micro controller system programmed in C or C++, measurement data items are directly accessed in their original memory locations. This concept has minimum impact on the target system in terms of memory consumption, runtime and needs minimum code instrumentation. The A2l is a kind of annotated ELF Linker-Address-Map, with meta information on data instances and data types (MC specific types - lookup-tables, axis scaling, physical limits and units, conversion rules, ...). + +In a Microprocessor system developed in a system programming language like C, C++ or Rust, this concept is still useful and efficient. Measurement signals and calibration parameters usually have a static lifetime and a defined memory layout, but no predefined memory location and are not limited to static storage classes. Data acquisition and modification is achieved by appropriate code instrumentation for measurement and wrapper types for groups of calibration parameters. + +## XCP from a Developer Perspective + +From a software developer perspective, XCP may be considered to be a high-frequency application level tracing solution, using statically instrumented trace points with configurable associated data. Tracing can be started, stopped and reconfigured during runtime. What is not configured, does not consume bandwidth, memory and other resources. The acquired context data is always consistent and trace events are precisely time stamped. Data types and instances of available context data items are defined as code or obtained by a XCP tool from ELF/DWARF debug information. Data instances may be in global, local, thread local and heap storage locations. In addition to that, XCP provides the capability to modify application variables and state in a thread safe and consistent way. + +## XCP Protocol and Transport Layers + +The ASAM-XCP standard defines a protocol and a transport layer. There are transport layers for all common communication busses used in the automotive industry, such as CAN, CAN-FD, FLEXRAY, SPI and Ethernet. + +## Learning Resources + +New to XCP? + +**Vector XCP Book:** + + +**Virtual VectorAcademy E-Learning:** + + +## Other XCP Implementations + +There are other implementations of XCP available: + +- **XCPbasic** - A free implementation for smaller Microcontrollers (even 8Bit) and optimized for CAN as Transport-Layer +- **XCPprof** - A commercial product in Vector's AUTOSAR MICROSAR and CANbedded product portfolio diff --git a/docs/xcplib.md b/docs/xcplib.md index 8a4ff411..2b74e592 100644 --- a/docs/xcplib.md +++ b/docs/xcplib.md @@ -1,6 +1,6 @@ # XCPlite API Reference Guide -**Version**: 0.9.2 +**Version**: 1.0.0 ## Table of Contents @@ -31,33 +31,220 @@ Key features: 1. **Include headers** +Code Example: + ```c #include "xcplib.h" -#include "a2l.h" // for A2l generation +#include "a2l.h" ``` +C++ Example: + +```cpp +#include "a2l.hpp" +#include "xcplib.hpp" + +``` + + 2. **Set log level (optional)** +C and C++ Examples: + ```c - XcpSetLogLevel(3); // (1=error, 2=warning, 3=info, 4=debug (XCP commands), 5=trace) + XcpSetLogLevel(3); // (1=error, 2=warning, 3=info, 4=debug (prints all XCP commands), 5=trace) ``` 3. **Initialise the XCP core** *once*: ```c - XcpInit(true); + XcpInit("MyProject" /* Project name*/, "V1.0.1" /* EPK version string*/, true /* activate XCP */); +``` + +4. **Start the Ethernet server** *once*: + +```c + const uint8_t addr[4] = {0,0,0,0}; // bind to any address + XcpEthServerInit(addr, 5555 /* port */, false /* UDP */, 32*1024 /* DAQ queue size */); +``` + +5. **Create calibration parameter segments**. + +C Example: +```c + // Calibration parameters structure + typedef struct params { + uint16_t counter_max; // Maximum value for the counter + uint32_t delay_us; // Sleep time in microseconds for the main loop + float flow_rate; // Flow rate in m3/h + } parameters_t; + + // Default values (reference page, "FLASH") for the calibration parameters + const parameters_t params = {.counter_max = 1024, .delay_us = 1000, .flow_rate = 0.300f}; + + // A global calibration segment handle for the calibration parameters + // A calibration segment has a working page ("RAM") and a reference page ("FLASH"), it is described by a MEMORY_SEGMENT in the A2L file + // Using the calibration segment to access parameters assures safe (thread safe against XCP modifications), wait-free and consistent access + // It supports RAM/FLASH page switching, reinitialization (copy FLASH to RAM page) and persistence (save RAM page to BIN file) + tXcpCalSegIndex calseg = XCP_UNDEFINED_CALSEG; + + // Create a calibration segment named 'Parameters' for the calibration parameter struct instance 'params' as reference page + calseg = XcpCreateCalSeg("params", ¶ms, sizeof(params)); + + // Option1: Register the individual calibration parameters in the calibration segment + A2lSetSegmentAddrMode(calseg, params); + A2lCreateParameter(params.counter_max, "Maximum counter value", "", 0, 2000); + A2lCreateParameter(params.delay_us, "Mainloop delay time in us", "us", 0, 999999); + + // Option2: Register the calibration segment as a typedef instance + { + A2lTypedefBegin(parameters_t, ¶ms, "Calibration parameters typedef"); + A2lTypedefParameterComponent(counter_max, "Maximum counter value", "", 0, 2000); + A2lTypedefParameterComponent(delay_us, "Mainloop delay time in us", "us", 0, 999999); + A2lTypedefEnd(); + A2lSetSegmentAddrMode(calseg, params); + A2lCreateTypedefInstance(params, parameters_t, "Calibration parameters"); + } +``` + +C++ Example: + +```cpp + // Calibration parameters for the random number generator + struct ParametersT { + double min; // Minimum random number value + double max; // Maximum random number value + }; + + // Default parameter values + const ParametersT kParameters = {.min = 2.0, .max = 3.0}; + + // A calibration segment wrapper for the parameters + std::optional> gCalSeg; + + // Create a global calibration segment wrapper for the struct 'ParametersT' and use its default values in constant 'kParameters' + // This calibration segment has a working page (RAM) and a reference page (FLASH), it creates a MEMORY_SEGMENT in the A2L file + // It provides safe (thread safe against XCP modifications), lock-free and consistent access to the calibration parameters + // It supports XCP/ECU independent page switching, checksum calculation and reinitialization (copy reference page to working page) + gCalSeg.emplace("Parameters", &kParameters); + + // Register the calibration segment description as a typedef and an instance in the A2L file + { + A2lTypedefBegin(ParametersT, &kParameters, "Typedef for ParametersT"); + A2lTypedefParameterComponent(min, "Minimum random number value", "", -100.0, 100.0); + A2lTypedefParameterComponent(max, "Maximum random number value", "", -100.0, 100.0); + A2lTypedefEnd(); + } + gCalSeg->CreateA2lTypedefInstance("ParametersT", "Random number generator parameters"); + +``` +6. **Access calibration parameters** via the calibration segment. + +C Example: + +```c + // Lock access to calibration parameters + const parameters_t *params = (parameters_t *)XcpLockCalSeg(calseg); + + printf("Current parameters: counter_max=%u, delay_us=%u\n",params->counter_max,params->delay_us); + + // Unlock calibration segment + XcpUnlockCalSeg(calseg); + ``` -4. **Start the Ethernet server** (TCP or UDP, IP addr, port): +C++ Example: + +```cpp + { + auto params = gCalSeg->lock(); // RAII lock guard for calibration segment + std::cout << "Current parameters: min=" << params->min << ", max=" << params->max << std::endl; + } +``` + +7. **Create and trigger measurement events** to capture variables. + +C or C++ Example: +Basic example: Measure a local variable on stack or a global variable ```c - const uint8_t addr[4] = {0,0,0,0}; - XcpEthServerInit(addr, 5555, false /* UDP */, 32*1024 /* DAQ queue size */); + // Local or global variable to measure + int8_t temperature = 0; + + // Create a measurement event named "MyEvent" and register the local variable 'temperature' for measurement on this event + DaqCreateEvent(MyEvent); + A2lSetStackAddrMode(temperature); // or SetAbsoluteAddrMode(temperature); + A2lCreatePhysMeasurement(temperature, "temperature", "Deg Celcius", -50, 80); + + // Trigger event 'MyEvent' to measure the variable when changed + // Creates a precise timestamp and captures consistent data + temperature = read_temp_sensor(); + DaqTriggerEvent(MyEvent); + +``` + +C++ Example: +Instrument a member function of a class + +```cpp + +class power_meter { +public: + power_meter() : energy_(0.0) {} + void calc_energy(double ); +private: + double energy_; + double last_time_; +}; + +double calc_energy(double voltage, double current) { + + // ... do some calcultions ... + double power = voltage * current; // kW + double energy_ += power * get_elapsed_time(); // kWh + + // Create event 'calc_energy', register individual local or member variables and trigger the event + XcpDaqEventExt(calc_energy, this, + (voltage, "Input voltage", "V", 0.0, 1000.0), // A function parameter + (current, "Input current", "A", 0.0, 500.0), // A function parameter + (power, "Current calculated energy", "kWh", 0.0, 1000.0), // A local variable + (energy_, "Current power", "kW", 0.0, 1000.0), // A member variable accessed via 'this' pointer + ); + + return energy_; +} ``` -6. **Create calibration segments and events** as required (see sections 3.2 & 3.3). +C++ example: +Measure an instance of a class on heap + +```cpp + + // In the constructor or any place where we can access private members of the class + if (A2lOnce()) { + A2lTypedefBegin(PowerMeter, this, "Typedef for PowerMeter"); + A2lTypedefMeasurementComponent(energy_, "Current energy", "kWh", 0.0, 1000.0 ); + A2lTypedefMeasurementComponent(last_time_, "Last calculation time", "ms" ); + A2lTypedefEnd(); + } + + // Create a heap instance of the class PowerMeter + PowerMeter* meter1 = new PowerMeter(); + + // Some where in the code, create an event to measure the heap instance + // Register the complete PowerMeter instance on heap as measurement with event my_meter + DaqCreateEvent(my_meter); + A2lSetRelativeAddrMode(my_meter, meter1); + A2lCreateTypedefReference(meter1, PowerMeter, "Instance my_meter of PowerMeter"); + + // Something happens in the instance + my_meter->calc_energy(voltage, current); + + // Trigger the event "my_meter" to measure the 'PowerMeter' heap instance 'my_meter' + DaqTriggerEventExt(my_meter, my_meter); + +``` -7. **Add DAQ triggers**, trigger DAQ events with the `DaqEvent`/`DaqEventRelative` macros. 8. On shutdown, call `XcpEthServerShutdown()`. @@ -67,7 +254,7 @@ Key features: ### Initialization -#### void XcpInit( bool activate) +#### void XcpInit(const char *project_name, const char*epk, bool activate) *Initialize XCP* @@ -120,7 +307,7 @@ See function and macro documentation in xcplib.h ### 3.4 A2L Generation -#### bool A2lInit(const char *project_name, const char*epk, const uint8_t *address, uint16_t port, bool use_tcp, uint32_t mode_flags) +#### bool A2lInit(const uint8_t *address, uint16_t port, bool use_tcp, uint32_t mode_flags) Initializes the A2L generation system of XCPlite. This function must be called once before any A2L-related macros or API functions are used. It performs the following actions: @@ -130,7 +317,7 @@ Initializes the A2L generation system of XCPlite. This function must be called o **Parameters:** - `project_name`: Name of the project, used for the A2L and BIN file names. -- `epk`: Optional software version string (EPK) for the A2L file. Pass `NULL` to use the default. +- `epk`: Unique software version string (EPK) for version checking of A2L and parameter files. - `address`: Default IPv4 address of the XCP server. - `port`: Port number of the XCP server. - `use_tcp`: If `true`, TCP transport is used; if `false`, UDP transport. @@ -171,9 +358,7 @@ All definitions of instances follow the same principle: Set the addressing mode | Function | Purpose | | ---------------------------------------------------------------- | --------------------------------------------------------------- | | `void XcpSetLogLevel(uint8_t level);` | 1 = error, 2 = warn, 3 = info, 4 = commands, 5 = trace. | -| `void XcpInit(void);` | Initialise core singleton; must precede all other API usage. | -| `void ApplXcpSetA2lName(const char *name);` | Manually set the A2L file name for upload. | -| `void XcpSetEpk(const char *epk);` | Set 32‑byte EPK software identifier (for A2L). | +| `void XcpInit(const char *name, const char *epk, bool activate);`| Initialize core singleton; must precede all other API usage. | | `void XcpDisconnect(void);` | Force client disconnect, stop DAQ, flush pending operations. | | `void XcpSendTerminateSessionEvent(void);` | Notify client of a terminated session. | | `void XcpPrint(const char *str);` | Send arbitrary text to the client (channel 0xFF). | @@ -185,13 +370,27 @@ All definitions of instances follow the same principle: Set the addressing mode See examples folder and README.md for a short descriptions of the example applications. -## 6 · Glossary +## 5 · Appendix -- **A2L** – ASAM MCD‑2 MC description file (measurement & calibration meta‑data). -- **DAQ** – Data Acquisition (periodic or sporadic transmit of ECU variables). -- **EPK** – Embedded Program Identifier (software version string embedded in the ECU). -- **ECU** – Electronic Control Unit (target device exposing the XCP protocol). +### Static Markers ---- +The code instrumentations creates static variables, to help the A2L Creater or an XCP tool reading linker map files, to identify calibration segments, events, capture buffers and the scope where an event is triggered. + +```c +//Create calibration segment macro segment index once pattern +static tXcpCalSegIndex cal__##name; + +// Create measurement event macro event id once pattern +static THREAD_LOCAL tXcpEventId evt__##name +static THREAD_LOCAL tXcpEventId evt__ + +// Daq capture macro capture buffer +static __typeof__(var) daq__##event##__##var + +// Daq event macro event id once pattern +static THREAD_LOCAL tXcpEventId evt___aas0__##name +static THREAD_LOCAL tXcpEventId evt___aasr__##name +static THREAD_LOCAL tXcpEventId evt___aasrr__##name +``` *End of document.* diff --git a/docs/xcplib_cfg.md b/docs/xcplib_cfg.md index 9be9ee0e..303b225e 100644 --- a/docs/xcplib_cfg.md +++ b/docs/xcplib_cfg.md @@ -1,6 +1,6 @@ # XCPlite Configuration Guide -**Version**: 0.9.2 +**Version**: 1.0.0 ## 0 · XCPlite Configuration @@ -118,9 +118,10 @@ This section describes the XCP protocol layer configuration parameters in xcp_cf | Parameter | Description | |-----------|-------------| -| `XCP_ENABLE_CAL_PAGE` | Enables calibration page switching commands | -| `XCP_ENABLE_COPY_CAL_PAGE` | Enables calibration page initialization (FLASH→RAM copy) | -| `XCP_ENABLE_FREEZE_CAL_PAGE` | Enables calibration page freeze and preload functionality | +| `XCP_ENABLE_CAL_PAGE` | Enables calibration page switching commands GET/SET_CAL_PAGE | +| `XCP_ENABLE_COPY_CAL_PAGE` | Enables calibration page initialization COPY_CAL_PAGE (FLASH→RAM copy only supported) | +| `XCP_ENABLE_COPY_CAL_PAGE_WORKAROUND` | Enables a workaround for older CANapes (see xcp_cfg.h) | +| `XCP_ENABLE_FREEZE_CAL_PAGE` | Enables calibration page freeze functionality (GET/SET_SEGMENT_MODE), required for calibration segment persistence | | `XCP_ENABLE_CHECKSUM` | Enables checksum calculation command | | `XCP_CHECKSUM_TYPE` | Checksum algorithm type (XCP_CHECKSUM_TYPE_CRC16CCITT or XCP_CHECKSUM_TYPE_ADD44) | | `XCP_ENABLE_SEED_KEY` | Enables seed/key security mechanism (commented out by default) | @@ -136,6 +137,7 @@ This section describes the XCP protocol layer configuration parameters in xcp_cf | `XCP_MAX_DAQ_COUNT` | Maximum number of DAQ lists. Must be ≤ 0xFFFE (default: 1024) | | `XCP_DAQ_MEM_SIZE` | Static memory allocation for DAQ tables. Each ODT entry needs 5 bytes, each DAQ list 12 bytes, each ODT 8 bytes | | `XCP_ENABLE_DAQ_RESUME` | Enables DAQ resume mode functionality | +| `XCP_ENABLE_DAQ_PRESCALER` | Enables DAQ prescaler (downsampling) | | `XCP_ENABLE_DAQ_EVENT_LIST` | Enables event list management (not needed for Rust xcp-lite) | | `XCP_ENABLE_DAQ_EVENT_INFO` | Enables XCP_GET_EVENT_INFO command | | `XCP_MAX_EVENT_NAME` | Maximum length for event names in characters (default: 15) | diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 00000000..db845ab9 --- /dev/null +++ b/examples/README.md @@ -0,0 +1,111 @@ +# XCPlite Examples + +This directory contains various examples demonstrating different features and capabilities of XCPlite. + +## Getting Started + +To get started, take a first look at the C example `hello_xcp` and then at `hello_xcp_cpp` for C++. + +## Example CANape Projects + +There is a CANape project for each example in a directory folder `examples//CANape`. +To load a project into CANape, select load project and navigate to the CANape.ini file in this folder. +All CANape project examples are configured to upload the A2L file via XCP. The IP address of the XCP server is stored in the A2L file uploaded last time. If CANape can not connect, check that the correct IP address is configured in "Device Configuration/Devices//Protocol/Transport Layer". + +The examples should run with a CANape demo version, which can be downloaded from . +The demo installation must be explicitly enabled in the installer and has some limitations: +It will store only the first seconds of measurement data and the number of measurement signals is limited. + +Note: Some of the examples use display windows without title bars to make it look cleaner. This option can be turned of with "Options/Display/View/Display Headline". + +## Example Details + +### hello_xcp + +Demonstrates how to start the XCP on Ethernet server and use the runtime A2L generator. +Shows how to create a calibration parameter segment structure, register the parameters in the segment and access them safely. +Defines events for measurement of global and local (stack) variables. +Demonstrates the different addressing modes for measurement variables and calibration parameters. +Defines a function, registers local variables and function parameters and creates and triggers a measurement event in the function. + +### hello_xcp_cpp + +Demonstrates how to instrument a member function of a C++ class and how to register and access parameters in C++. + +### c_demo + +Shows more complex data objects (structs, arrays) and calibration objects (axis, maps and curves). +Measurement variables on stack and in global memory. +Consistent parameter changes and measurement. +Calibration page switching and EPK version check. +Note: If CANAPE_24 is defined in sig_gen.hpp, the lookup table is a nested typedef, it uses a THIS. references to its shared axis contained in the typedef. + +### cpp_demo + +Demonstrates the calibration parameter segment RAII wrapper. +Demonstrates measurement of member variables and stack variables in class instance member functions. +Shows how to create a class with a calibration parameter segment as a member variable. + +### struct_demo + +Shows how to define measurement variables in nested structs, multidimensional fields and arrays of structs. +Pure measurement demo, does not have any calibration parameters. + +### multi_thread_demo + +Shows measurement in multiple threads. +Create thread local instances of events and measurements. +Share a parameter segment among multiple threads. +Thread safe and consistent access to parameters. +Experimental code to demonstrate how to create context and spans using the XCP instrumentation API. + + +![CANape Screenshot](cpp_demo/cpp_demo.png) + +### no_a2l_demo + +Demonstrates XCPlite without runtime A2L generation by using an A2L generation tool during the build process. +This variant is currently limited to measurement and modification of global variables. + +### threadx_demo + +Planned + +### bpf_demo + +Experimental, work in progress. +Demonstrates tracing of process creations and selected syscalls. + +## Advanced Topics Covered + +The examples demonstrate various advanced topics: + +- Safely share parameters among different threads +- Measure instances of complex types, such as structs, arrays, nested structs and arrays of structs by using typedefs +- Create complex parameters, like maps, curves and lookup tables with fixed or shared axis +- Measure thread local instances of variables, create event instances +- Create physical conversion rules and enumerations +- Create additional groups +- Use consistent atomic parameter modification +- Make parameter changes persistent (freeze) +- Use the xcplib API to create context and span, measure durations + +## Building a CANape Project from Scratch + +How to create a new CANape project from scratch is described in the CANape help under "Creating a project and configuration (quick guide)". + +The easiest way to create a new CANape project for XCPlite is: + +- Create a new project in 'Backstage/Project/New'. +- Drag&Drop the A2L file generated by XCPlite on the CANape desktop and step through the pop up dialog pages: + Select XCP, Ethernet and LocalPC:ETH to use the local PCs ethernet adapter. + All other settings may stay on default. +- CANape should now be already connected. + If not, check the Ethernet settings in 'Device/DeviceConfiguration/Devices/MyDevice/Protocol/TransportLayer'. +- To configure CANape for automatic upload of the A2L file, a few more settings have to be modified once in the new project: + In 'Device/DeviceConfiguration/Devices/MyDevice/Database', enable automatic detection of database content and select 'Check identifier and content'. +- To use the consistent calibration mode (indirect calibrationmode), the user defined XCP command for start and end calibration sequence have to be configured. This setting is not default in CANape. Refer to one of the example projects for details. + +The automatic A2L upload then happens every time a new version of A2L file has been generated. +Depending on the settings in XCPlite, this happens after the first run of a new software build, or each time the application is restarted. +Of course, the A2L file may also be copied manually into the CANape project folder. diff --git a/examples/bpf_demo/CANape/CANape.ini b/examples/bpf_demo/CANape/CANape.ini index 77bb2658..5a5ea496 100644 --- a/examples/bpf_demo/CANape/CANape.ini +++ b/examples/bpf_demo/CANape/CANape.ini @@ -1,6 +1,6 @@ [!!!!!_CONSISTENCY_CHECK_START_SECTION_!!!!!] -GUID={3F2AA4E1-96F2-490B-B49A-D504BADDAD4C} +GUID={66564AC3-D4A5-4424-AA7B-46A034ABCFAA} [FILE_INFO] Identification=CANape-Project-File @@ -14,8 +14,8 @@ PrgDate=16.06.2025 Description= CreationTime=21:03 CreationDate=07/07/2024 ; Month/Day/Year -ModificationTime=22:03 -ModificationDate=09/10/2025 ; Month/Day/Year +ModificationTime=15:36 +ModificationDate=10/29/2025 ; Month/Day/Year Protected=0 CurrentWindowsACP=1252 @@ -1019,10 +1019,10 @@ ConfigurationJson={"RemoteServiceDataList":[{"DisplayName":"CANape Master","Ip": [DlgCommentWrapper] ScreenDPIinSection=192 -WindowLeft=929 -WindowLeft_dpi96=465 -WindowTop=583 -WindowTop_dpi96=292 +WindowLeft=969 +WindowLeft_dpi96=485 +WindowTop=494 +WindowTop_dpi96=247 WindowWidth=1350 WindowWidth_dpi96=675 WindowHeight=923 @@ -1030,10 +1030,10 @@ WindowHeight_dpi96=462 [DlgMdfComment] ScreenDPIinSection=192 -WindowLeft=942 -WindowLeft_dpi96=471 -WindowTop=641 -WindowTop_dpi96=321 +WindowLeft=982 +WindowLeft_dpi96=491 +WindowTop=552 +WindowTop_dpi96=276 WindowWidth=1324 WindowWidth_dpi96=662 WindowHeight=786 @@ -1266,7 +1266,7 @@ XCP_OPTIONAL_CMD_AVAILABLE_19=3 XCP_OPTIONAL_CMD_AVAILABLE_20=3 XCP_OPTIONAL_CMD_AVAILABLE_21=3 XCP_OPTIONAL_CMD_AVAILABLE_22=3 -XCP_OPTIONAL_CMD_AVAILABLE_23=2 +XCP_OPTIONAL_CMD_AVAILABLE_23=3 XCP_OPTIONAL_CMD_AVAILABLE_24=2 XCP_OPTIONAL_CMD_AVAILABLE_25=3 XCP_OPTIONAL_CMD_AVAILABLE_26=3 @@ -1282,8 +1282,8 @@ XCP_OPTIONAL_CMD_AVAILABLE_35=3 XCP_OPTIONAL_CMD_AVAILABLE_36=3 XCP_OPTIONAL_CMD_AVAILABLE_37=3 XCP_OPTIONAL_CMD_AVAILABLE_38=3 -XCP_OPTIONAL_CMD_AVAILABLE_39=2 -XCP_OPTIONAL_CMD_AVAILABLE_40=2 +XCP_OPTIONAL_CMD_AVAILABLE_39=3 +XCP_OPTIONAL_CMD_AVAILABLE_40=3 XCP_OPTIONAL_CMD_AVAILABLE_41=3 XCP_OPTIONAL_CMD_AVAILABLE_42=3 XCP_OPTIONAL_CMD_AVAILABLE_43=3 @@ -1311,9 +1311,9 @@ XCP_OPTIONAL_CMD_AUTO_LEARNING=1 XCP_OPTIONAL_SUB_CMD_AVAILABLE_0=3 XCP_OPTIONAL_SUB_CMD_AVAILABLE_1=2 XCP_OPTIONAL_SUB_CMD_AVAILABLE_2=2 -XCP_DAQ_PROPERTIES=0x15 +XCP_DAQ_PROPERTIES=0x13 XCP_DAQ_KEY_BYTE=0xC0 -XCP_DAQ_TIMESTAMP_MODE=0x3C +XCP_DAQ_TIMESTAMP_MODE=0x0C XCP_DAQ_TIMESTAMP_TICKS=1 XCP_MIN_DAQ=0 XCP_MAX_DAQ=0 @@ -1383,14 +1383,14 @@ BEG_CAL_SERVICE=0x1f1 END_CAL_SERVICE=0x2f1 TEST_CONNECTION_PERIOD=0 OVERRUN_HANDLING=0 -EVENT_COUNT=3 +EVENT_COUNT=6 EVENT_CHANNEL_0=0x0000 -EVENT_CYCLE_0=0 -EVENT_SAMPLE_UNIT_0=3 +EVENT_CYCLE_0=100 +EVENT_SAMPLE_UNIT_0=7 EVENT_MODE_0=4 EVENT_PRIO_0=0 EVENT_MAX_DAQ_LIST_0=255 -EVENT_NAME_0=mainloop_event +EVENT_NAME_0=async EVENT_MULTISAMPLES_0=0 IGNORE_FIX_EVENTS=0 ECU_CYCLE_TIME=0 @@ -1401,8 +1401,8 @@ DETECT_SYNC_PULSE=0 GENERATE_SYNC_PULSE=0 TIME_CORR_MULTICAST=0 DAQ_TIMEOUT=0 -DAQ_RESUME_SUPPORTED=1 -DAQ_PRESCALER_SUPPORTED=0 +DAQ_RESUME_SUPPORTED=0 +DAQ_PRESCALER_SUPPORTED=1 DAQ_SINGLE_EVENT=0 DTO_SINGLE_EXT=0 DOUBLE_AS_FLOAT=0 @@ -1417,7 +1417,7 @@ PSEUDO_CAN_ID_START=2415919104 DSP_MODE=0 DAQ_LIST_AUTODETECT=1 DAQ_COUNT=0 -DAQ_CONFIG_ID=27820 +DAQ_CONFIG_ID=47056 DAQ_START_STOP_ALL_DISABLED=0 INIT_CAL_PAGE_SEGMENTWISE=0 CALRAM_CHECK_INITIAL_PAGE=1 @@ -1517,7 +1517,7 @@ FLASH_PAGE_ADDRESS_MAPPING_ENABLED=1 MEMORY_SEGMENT_COUNT=1 MEMORY_SEGMENT_NAME_1=epk MEMORY_SEGMENT_TYPE_1=FLASH,DATA,INTERN -MEMORY_SEGMENT_SIZE_1=0x00000015 +MEMORY_SEGMENT_SIZE_1=0x00000009 MEMORY_SEGMENT_ADDR_1=0x80000000 MEMORY_SEGMENT_ADDR_EXT_1=0x00 MEMORY_SEGMENT_ATTRIBUTE_1=0x00000000 @@ -1533,7 +1533,7 @@ MEMORY_SEGMENT_FLASH_OFFSET_2=0x00000000 MEMORY_SEGMENT_ADDRESS_MAPPING_2= CALRAM_SECTOR_NAME_1=epk CALRAM_SECTOR_TYPE_1=FLASH,DATA,INTERN -CALRAM_SECTOR_SIZE_1=0x00000015 +CALRAM_SECTOR_SIZE_1=0x00000009 CALRAM_SECTOR_ADDR_1=0x80000000 CALRAM_SECTOR_ADDR_EXT_1=0x00 CALRAM_SECTOR_ATTRIBUTE_1=0x00000000 @@ -1627,7 +1627,7 @@ EVENT_SAMPLE_UNIT_1=3 EVENT_MODE_1=4 EVENT_PRIO_1=0 EVENT_MAX_DAQ_LIST_1=255 -EVENT_NAME_1=process_event +EVENT_NAME_1=mainloop_event EVENT_MULTISAMPLES_1=0 EVENT_MIN_CYCLE_TIME_CYCLE_1=0 EVENT_MIN_CYCLE_TIME_UNIT_1=9 @@ -1641,11 +1641,44 @@ EVENT_SAMPLE_UNIT_2=3 EVENT_MODE_2=4 EVENT_PRIO_2=0 EVENT_MAX_DAQ_LIST_2=255 -EVENT_NAME_2=syscall_event +EVENT_NAME_2=process_event EVENT_MULTISAMPLES_2=0 EVENT_MIN_CYCLE_TIME_CYCLE_2=0 EVENT_MIN_CYCLE_TIME_UNIT_2=9 EVENT_DPM_SUPPORTED_2=0 +EVENT_CHANNEL_3=0x0003 +EVENT_CHANNEL_4=0x0004 +EVENT_CHANNEL_5=0x0005 +EVENT_CYCLE_3=0 +EVENT_CYCLE_4=0 +EVENT_CYCLE_5=0 +EVENT_SAMPLE_UNIT_3=3 +EVENT_SAMPLE_UNIT_4=3 +EVENT_SAMPLE_UNIT_5=3 +EVENT_MODE_3=4 +EVENT_MODE_4=4 +EVENT_MODE_5=4 +EVENT_PRIO_3=0 +EVENT_PRIO_4=0 +EVENT_PRIO_5=0 +EVENT_MAX_DAQ_LIST_3=255 +EVENT_MAX_DAQ_LIST_4=255 +EVENT_MAX_DAQ_LIST_5=255 +EVENT_NAME_3=syscall_event +EVENT_NAME_4=sendto +EVENT_NAME_5=recvfrom +EVENT_MULTISAMPLES_3=0 +EVENT_MULTISAMPLES_4=0 +EVENT_MULTISAMPLES_5=0 +EVENT_MIN_CYCLE_TIME_CYCLE_3=0 +EVENT_MIN_CYCLE_TIME_CYCLE_4=0 +EVENT_MIN_CYCLE_TIME_CYCLE_5=0 +EVENT_MIN_CYCLE_TIME_UNIT_3=9 +EVENT_MIN_CYCLE_TIME_UNIT_4=9 +EVENT_MIN_CYCLE_TIME_UNIT_5=9 +EVENT_DPM_SUPPORTED_3=0 +EVENT_DPM_SUPPORTED_4=0 +EVENT_DPM_SUPPORTED_5=0 [MODULES] CREATE_SYSTEM_DEVICE=1 @@ -2087,329 +2120,329 @@ MeasurementMapped=0 Device_Name= [DB_EXPLORER] -ScreenDPIinSection=144 -SELECT_X=150 +ScreenDPIinSection=192 +SELECT_X=200 SELECT_X_dpi96=100 -SELECT_Y=75 +SELECT_Y=100 SELECT_Y_dpi96=50 -SELECT_W=1136 +SELECT_W=1514 SELECT_W_dpi96=757 -SELECT_H=600 +SELECT_H=800 SELECT_H_dpi96=400 EDITOR_COL_COUNT=7 -EDITOR_COL_1=29, 66 +EDITOR_COL_1=29, 88 EDITOR_COL_1_dpi96=29, 44 -EDITOR_COL_2=31, 345 +EDITOR_COL_2=31, 460 EDITOR_COL_2_dpi96=31, 230 -EDITOR_COL_3=1, 135 +EDITOR_COL_3=1, 180 EDITOR_COL_3_dpi96=1, 90 -EDITOR_COL_4=2, 127 +EDITOR_COL_4=2, 170 EDITOR_COL_4_dpi96=2, 85 -EDITOR_COL_5=3, 375 +EDITOR_COL_5=3, 500 EDITOR_COL_5_dpi96=3, 250 -EDITOR_COL_6=6, 180 +EDITOR_COL_6=6, 240 EDITOR_COL_6_dpi96=6, 120 -EDITOR_COL_7=7, 180 +EDITOR_COL_7=7, 240 EDITOR_COL_7_dpi96=7, 120 EDITOR_SORT_COL=31 EDITOR_SORT_UPW=1 SELECT_COL_COUNT=4 -SELECT_COL_1=29, 66 +SELECT_COL_1=29, 88 SELECT_COL_1_dpi96=29, 44 -SELECT_COL_2=31, 345 +SELECT_COL_2=31, 460 SELECT_COL_2_dpi96=31, 230 -SELECT_COL_3=16, 105 +SELECT_COL_3=16, 140 SELECT_COL_3_dpi96=16, 70 -SELECT_COL_4=3, 375 +SELECT_COL_4=3, 500 SELECT_COL_4_dpi96=3, 250 SELECT_SORT_COL=31 SELECT_SORT_UPW=1 SEARCH_COL_COUNT=7 -SEARCH_COL_1=29, 66 +SEARCH_COL_1=29, 88 SEARCH_COL_1_dpi96=29, 44 -SEARCH_COL_2=31, 345 +SEARCH_COL_2=31, 460 SEARCH_COL_2_dpi96=31, 230 -SEARCH_COL_3=91, 225 +SEARCH_COL_3=91, 300 SEARCH_COL_3_dpi96=91, 150 -SEARCH_COL_4=19, 180 +SEARCH_COL_4=19, 240 SEARCH_COL_4_dpi96=19, 120 -SEARCH_COL_5=1, 135 +SEARCH_COL_5=1, 180 SEARCH_COL_5_dpi96=1, 90 -SEARCH_COL_6=2, 127 +SEARCH_COL_6=2, 170 SEARCH_COL_6_dpi96=2, 85 -SEARCH_COL_7=3, 375 +SEARCH_COL_7=3, 500 SEARCH_COL_7_dpi96=3, 250 SEARCH_SORT_COL=31 SEARCH_SORT_UPW=1 CAN_SELECT_COL_COUNT=9 -CAN_SELECT_COL_1=29, 66 +CAN_SELECT_COL_1=29, 88 CAN_SELECT_COL_1_dpi96=29, 44 -CAN_SELECT_COL_2=31, 345 +CAN_SELECT_COL_2=31, 460 CAN_SELECT_COL_2_dpi96=31, 230 -CAN_SELECT_COL_3=28, 105 +CAN_SELECT_COL_3=28, 140 CAN_SELECT_COL_3_dpi96=28, 70 -CAN_SELECT_COL_4=16, 105 +CAN_SELECT_COL_4=16, 140 CAN_SELECT_COL_4_dpi96=16, 70 -CAN_SELECT_COL_5=64, 300 +CAN_SELECT_COL_5=64, 400 CAN_SELECT_COL_5_dpi96=64, 200 -CAN_SELECT_COL_6=4, 180 +CAN_SELECT_COL_6=4, 240 CAN_SELECT_COL_6_dpi96=4, 120 -CAN_SELECT_COL_7=17, 105 +CAN_SELECT_COL_7=17, 140 CAN_SELECT_COL_7_dpi96=17, 70 -CAN_SELECT_COL_8=18, 75 +CAN_SELECT_COL_8=18, 100 CAN_SELECT_COL_8_dpi96=18, 50 -CAN_SELECT_COL_9=3, 375 +CAN_SELECT_COL_9=3, 500 CAN_SELECT_COL_9_dpi96=3, 250 CAN_SELECT_SORT_COL=31 CAN_SELECT_SORT_UPW=1 CAN_SEARCH_COL_COUNT=9 -CAN_SEARCH_COL_1=29, 66 +CAN_SEARCH_COL_1=29, 88 CAN_SEARCH_COL_1_dpi96=29, 44 -CAN_SEARCH_COL_2=31, 345 +CAN_SEARCH_COL_2=31, 460 CAN_SEARCH_COL_2_dpi96=31, 230 -CAN_SEARCH_COL_3=28, 105 +CAN_SEARCH_COL_3=28, 140 CAN_SEARCH_COL_3_dpi96=28, 70 -CAN_SEARCH_COL_4=16, 105 +CAN_SEARCH_COL_4=16, 140 CAN_SEARCH_COL_4_dpi96=16, 70 -CAN_SEARCH_COL_5=64, 300 +CAN_SEARCH_COL_5=64, 400 CAN_SEARCH_COL_5_dpi96=64, 200 -CAN_SEARCH_COL_6=4, 180 +CAN_SEARCH_COL_6=4, 240 CAN_SEARCH_COL_6_dpi96=4, 120 -CAN_SEARCH_COL_7=17, 105 +CAN_SEARCH_COL_7=17, 140 CAN_SEARCH_COL_7_dpi96=17, 70 -CAN_SEARCH_COL_8=18, 75 +CAN_SEARCH_COL_8=18, 100 CAN_SEARCH_COL_8_dpi96=18, 50 -CAN_SEARCH_COL_9=3, 375 +CAN_SEARCH_COL_9=3, 500 CAN_SEARCH_COL_9_dpi96=3, 250 CAN_SEARCH_SORT_COL=31 CAN_SEARCH_SORT_UPW=1 LIN_SELECT_COL_COUNT=9 -LIN_SELECT_COL_1=29, 66 +LIN_SELECT_COL_1=29, 88 LIN_SELECT_COL_1_dpi96=29, 44 -LIN_SELECT_COL_2=31, 345 +LIN_SELECT_COL_2=31, 460 LIN_SELECT_COL_2_dpi96=31, 230 -LIN_SELECT_COL_3=28, 105 +LIN_SELECT_COL_3=28, 140 LIN_SELECT_COL_3_dpi96=28, 70 -LIN_SELECT_COL_4=16, 105 +LIN_SELECT_COL_4=16, 140 LIN_SELECT_COL_4_dpi96=16, 70 -LIN_SELECT_COL_5=64, 300 +LIN_SELECT_COL_5=64, 400 LIN_SELECT_COL_5_dpi96=64, 200 -LIN_SELECT_COL_6=4, 180 +LIN_SELECT_COL_6=4, 240 LIN_SELECT_COL_6_dpi96=4, 120 -LIN_SELECT_COL_7=17, 105 +LIN_SELECT_COL_7=17, 140 LIN_SELECT_COL_7_dpi96=17, 70 -LIN_SELECT_COL_8=18, 75 +LIN_SELECT_COL_8=18, 100 LIN_SELECT_COL_8_dpi96=18, 50 -LIN_SELECT_COL_9=3, 375 +LIN_SELECT_COL_9=3, 500 LIN_SELECT_COL_9_dpi96=3, 250 LIN_SELECT_SORT_COL=31 LIN_SELECT_SORT_UPW=1 LIN_SEARCH_COL_COUNT=9 -LIN_SEARCH_COL_1=29, 66 +LIN_SEARCH_COL_1=29, 88 LIN_SEARCH_COL_1_dpi96=29, 44 -LIN_SEARCH_COL_2=31, 345 +LIN_SEARCH_COL_2=31, 460 LIN_SEARCH_COL_2_dpi96=31, 230 -LIN_SEARCH_COL_3=28, 105 +LIN_SEARCH_COL_3=28, 140 LIN_SEARCH_COL_3_dpi96=28, 70 -LIN_SEARCH_COL_4=16, 105 +LIN_SEARCH_COL_4=16, 140 LIN_SEARCH_COL_4_dpi96=16, 70 -LIN_SEARCH_COL_5=64, 300 +LIN_SEARCH_COL_5=64, 400 LIN_SEARCH_COL_5_dpi96=64, 200 -LIN_SEARCH_COL_6=4, 180 +LIN_SEARCH_COL_6=4, 240 LIN_SEARCH_COL_6_dpi96=4, 120 -LIN_SEARCH_COL_7=17, 105 +LIN_SEARCH_COL_7=17, 140 LIN_SEARCH_COL_7_dpi96=17, 70 -LIN_SEARCH_COL_8=18, 75 +LIN_SEARCH_COL_8=18, 100 LIN_SEARCH_COL_8_dpi96=18, 50 -LIN_SEARCH_COL_9=3, 375 +LIN_SEARCH_COL_9=3, 500 LIN_SEARCH_COL_9_dpi96=3, 250 LIN_SEARCH_SORT_COL=31 LIN_SEARCH_SORT_UPW=1 MDF_SELECT_COL_COUNT=8 -MDF_SELECT_COL_1=29, 66 +MDF_SELECT_COL_1=29, 88 MDF_SELECT_COL_1_dpi96=29, 44 -MDF_SELECT_COL_2=31, 345 +MDF_SELECT_COL_2=31, 460 MDF_SELECT_COL_2_dpi96=31, 230 -MDF_SELECT_COL_3=28, 105 +MDF_SELECT_COL_3=28, 140 MDF_SELECT_COL_3_dpi96=28, 70 -MDF_SELECT_COL_4=16, 105 +MDF_SELECT_COL_4=16, 140 MDF_SELECT_COL_4_dpi96=16, 70 -MDF_SELECT_COL_5=64, 300 +MDF_SELECT_COL_5=64, 400 MDF_SELECT_COL_5_dpi96=64, 200 -MDF_SELECT_COL_6=4, 180 +MDF_SELECT_COL_6=4, 240 MDF_SELECT_COL_6_dpi96=4, 120 -MDF_SELECT_COL_7=20, 135 +MDF_SELECT_COL_7=20, 180 MDF_SELECT_COL_7_dpi96=20, 90 -MDF_SELECT_COL_8=3, 375 +MDF_SELECT_COL_8=3, 500 MDF_SELECT_COL_8_dpi96=3, 250 MDF_SELECT_SORT_COL=31 MDF_SELECT_SORT_UPW=1 MDF_SEARCH_COL_COUNT=8 -MDF_SEARCH_COL_1=29, 66 +MDF_SEARCH_COL_1=29, 88 MDF_SEARCH_COL_1_dpi96=29, 44 -MDF_SEARCH_COL_2=31, 345 +MDF_SEARCH_COL_2=31, 460 MDF_SEARCH_COL_2_dpi96=31, 230 -MDF_SEARCH_COL_3=28, 105 +MDF_SEARCH_COL_3=28, 140 MDF_SEARCH_COL_3_dpi96=28, 70 -MDF_SEARCH_COL_4=16, 105 +MDF_SEARCH_COL_4=16, 140 MDF_SEARCH_COL_4_dpi96=16, 70 -MDF_SEARCH_COL_5=64, 300 +MDF_SEARCH_COL_5=64, 400 MDF_SEARCH_COL_5_dpi96=64, 200 -MDF_SEARCH_COL_6=4, 180 +MDF_SEARCH_COL_6=4, 240 MDF_SEARCH_COL_6_dpi96=4, 120 -MDF_SEARCH_COL_7=20, 135 +MDF_SEARCH_COL_7=20, 180 MDF_SEARCH_COL_7_dpi96=20, 90 -MDF_SEARCH_COL_8=3, 375 +MDF_SEARCH_COL_8=3, 500 MDF_SEARCH_COL_8_dpi96=3, 250 MDF_SEARCH_SORT_COL=31 MDF_SEARCH_SORT_UPW=1 WRITE_COL_COUNT=2 -WRITE_COL_1=21, 57 +WRITE_COL_1=21, 76 WRITE_COL_1_dpi96=21, 38 -WRITE_COL_2=23, 900 +WRITE_COL_2=23, 1200 WRITE_COL_2_dpi96=23, 600 WRITE_SORT_COL=31 WRITE_SORT_UPW=1 CONVERSION_COL_COUNT=7 -CONVERSION_COL_1=29, 66 +CONVERSION_COL_1=29, 88 CONVERSION_COL_1_dpi96=29, 44 -CONVERSION_COL_2=31, 345 +CONVERSION_COL_2=31, 460 CONVERSION_COL_2_dpi96=31, 230 -CONVERSION_COL_3=3, 375 +CONVERSION_COL_3=3, 500 CONVERSION_COL_3_dpi96=3, 250 -CONVERSION_COL_4=26, 180 +CONVERSION_COL_4=26, 240 CONVERSION_COL_4_dpi96=26, 120 -CONVERSION_COL_5=16, 105 +CONVERSION_COL_5=16, 140 CONVERSION_COL_5_dpi96=16, 70 -CONVERSION_COL_6=15, 135 +CONVERSION_COL_6=15, 180 CONVERSION_COL_6_dpi96=15, 90 -CONVERSION_COL_7=68, 135 +CONVERSION_COL_7=68, 180 CONVERSION_COL_7_dpi96=68, 90 CONVERSION_SORT_COL=31 CONVERSION_SORT_UPW=1 RECORD_LAYOUT_COL_COUNT=2 -RECORD_LAYOUT_COL_1=29, 66 +RECORD_LAYOUT_COL_1=29, 88 RECORD_LAYOUT_COL_1_dpi96=29, 44 -RECORD_LAYOUT_COL_2=31, 345 +RECORD_LAYOUT_COL_2=31, 460 RECORD_LAYOUT_COL_2_dpi96=31, 230 RECORD_LAYOUT_SORT_COL=31 RECORD_LAYOUT_SORT_UPW=1 VARIANT_CRITERION_COL_COUNT=4 -VARIANT_CRITERION_COL_1=29, 66 +VARIANT_CRITERION_COL_1=29, 88 VARIANT_CRITERION_COL_1_dpi96=29, 44 -VARIANT_CRITERION_COL_2=31, 345 +VARIANT_CRITERION_COL_2=31, 460 VARIANT_CRITERION_COL_2_dpi96=31, 230 -VARIANT_CRITERION_COL_3=25, 300 +VARIANT_CRITERION_COL_3=25, 400 VARIANT_CRITERION_COL_3_dpi96=25, 200 -VARIANT_CRITERION_COL_4=30, 300 +VARIANT_CRITERION_COL_4=30, 400 VARIANT_CRITERION_COL_4_dpi96=30, 200 VARIANT_CRITERION_SORT_COL=31 VARIANT_CRITERION_SORT_UPW=1 SYSTEM_CONSTANT_COL_COUNT=3 -SYSTEM_CONSTANT_COL_1=29, 66 +SYSTEM_CONSTANT_COL_1=29, 88 SYSTEM_CONSTANT_COL_1_dpi96=29, 44 -SYSTEM_CONSTANT_COL_2=31, 345 +SYSTEM_CONSTANT_COL_2=31, 460 SYSTEM_CONSTANT_COL_2_dpi96=31, 230 -SYSTEM_CONSTANT_COL_3=24, 180 +SYSTEM_CONSTANT_COL_3=24, 240 SYSTEM_CONSTANT_COL_3_dpi96=24, 120 SYSTEM_CONSTANT_SORT_COL=31 SYSTEM_CONSTANT_SORT_UPW=1 DEFAULT_COL_COUNT=3 -DEFAULT_COL_1=29, 66 +DEFAULT_COL_1=29, 88 DEFAULT_COL_1_dpi96=29, 44 -DEFAULT_COL_2=31, 345 +DEFAULT_COL_2=31, 460 DEFAULT_COL_2_dpi96=31, 230 -DEFAULT_COL_3=3, 375 +DEFAULT_COL_3=3, 500 DEFAULT_COL_3_dpi96=3, 250 DEFAULT_SORT_COL=31 DEFAULT_SORT_UPW=1 CAN_SIGNAL_COL_COUNT=9 -CAN_SIGNAL_COL_1=29, 66 +CAN_SIGNAL_COL_1=29, 88 CAN_SIGNAL_COL_1_dpi96=29, 44 -CAN_SIGNAL_COL_2=31, 345 +CAN_SIGNAL_COL_2=31, 460 CAN_SIGNAL_COL_2_dpi96=31, 230 -CAN_SIGNAL_COL_3=28, 105 +CAN_SIGNAL_COL_3=28, 140 CAN_SIGNAL_COL_3_dpi96=28, 70 -CAN_SIGNAL_COL_4=16, 105 +CAN_SIGNAL_COL_4=16, 140 CAN_SIGNAL_COL_4_dpi96=16, 70 -CAN_SIGNAL_COL_5=64, 300 +CAN_SIGNAL_COL_5=64, 400 CAN_SIGNAL_COL_5_dpi96=64, 200 -CAN_SIGNAL_COL_6=4, 180 +CAN_SIGNAL_COL_6=4, 240 CAN_SIGNAL_COL_6_dpi96=4, 120 -CAN_SIGNAL_COL_7=17, 105 +CAN_SIGNAL_COL_7=17, 140 CAN_SIGNAL_COL_7_dpi96=17, 70 -CAN_SIGNAL_COL_8=18, 75 +CAN_SIGNAL_COL_8=18, 100 CAN_SIGNAL_COL_8_dpi96=18, 50 -CAN_SIGNAL_COL_9=3, 375 +CAN_SIGNAL_COL_9=3, 500 CAN_SIGNAL_COL_9_dpi96=3, 250 CAN_SIGNAL_SORT_COL=31 CAN_SIGNAL_SORT_UPW=1 CA_MESSAGE_COL_COUNT=7 -CA_MESSAGE_COL_1=29, 66 +CA_MESSAGE_COL_1=29, 88 CA_MESSAGE_COL_1_dpi96=29, 44 -CA_MESSAGE_COL_2=31, 345 +CA_MESSAGE_COL_2=31, 460 CA_MESSAGE_COL_2_dpi96=31, 230 -CA_MESSAGE_COL_3=3, 375 +CA_MESSAGE_COL_3=3, 500 CA_MESSAGE_COL_3_dpi96=3, 250 -CA_MESSAGE_COL_4=64, 300 +CA_MESSAGE_COL_4=64, 400 CA_MESSAGE_COL_4_dpi96=64, 200 -CA_MESSAGE_COL_5=4, 180 +CA_MESSAGE_COL_5=4, 240 CA_MESSAGE_COL_5_dpi96=4, 120 -CA_MESSAGE_COL_6=17, 105 +CA_MESSAGE_COL_6=17, 140 CA_MESSAGE_COL_6_dpi96=17, 70 -CA_MESSAGE_COL_7=18, 75 +CA_MESSAGE_COL_7=18, 100 CA_MESSAGE_COL_7_dpi96=18, 50 CA_MESSAGE_SORT_COL=31 CA_MESSAGE_SORT_UPW=1 MEMORY_SEGMENT_COL_COUNT=4 -MEMORY_SEGMENT_COL_1=29, 66 +MEMORY_SEGMENT_COL_1=29, 88 MEMORY_SEGMENT_COL_1_dpi96=29, 44 -MEMORY_SEGMENT_COL_2=31, 345 +MEMORY_SEGMENT_COL_2=31, 460 MEMORY_SEGMENT_COL_2_dpi96=31, 230 -MEMORY_SEGMENT_COL_3=3, 375 +MEMORY_SEGMENT_COL_3=3, 500 MEMORY_SEGMENT_COL_3_dpi96=3, 250 -MEMORY_SEGMENT_COL_4=1, 135 +MEMORY_SEGMENT_COL_4=1, 180 MEMORY_SEGMENT_COL_4_dpi96=1, 90 MEMORY_SEGMENT_SORT_COL=31 MEMORY_SEGMENT_SORT_UPW=1 1 CAL_PARAM_GROUP_COL_COUNT=4 -CAL_PARAM_GROUP_COL_1=29, 66 +CAL_PARAM_GROUP_COL_1=29, 88 CAL_PARAM_GROUP_COL_1_dpi96=29, 44 -CAL_PARAM_GROUP_COL_2=31, 345 +CAL_PARAM_GROUP_COL_2=31, 460 CAL_PARAM_GROUP_COL_2_dpi96=31, 230 -CAL_PARAM_GROUP_COL_3=1376257, 150 +CAL_PARAM_GROUP_COL_3=1376257, 200 CAL_PARAM_GROUP_COL_3_dpi96=1376257, 100 -CAL_PARAM_GROUP_COL_4=1376260, 150 +CAL_PARAM_GROUP_COL_4=1376260, 200 CAL_PARAM_GROUP_COL_4_dpi96=1376260, 100 CAL_PARAM_GROUP_SORT_COL=31 CAL_PARAM_GROUP_SORT_UPW=1 TABLE_COL_COUNT=4 -TABLE_COL_1=29, 66 +TABLE_COL_1=29, 88 TABLE_COL_1_dpi96=29, 44 -TABLE_COL_2=31, 345 +TABLE_COL_2=31, 460 TABLE_COL_2_dpi96=31, 230 -TABLE_COL_3=3, 375 +TABLE_COL_3=3, 500 TABLE_COL_3_dpi96=3, 250 -TABLE_COL_4=26, 180 +TABLE_COL_4=26, 240 TABLE_COL_4_dpi96=26, 120 TABLE_SORT_COL=31 TABLE_SORT_UPW=1 FILTER_COL_COUNT=3 -FILTER_COL_1=29, 66 +FILTER_COL_1=29, 88 FILTER_COL_1_dpi96=29, 44 -FILTER_COL_2=31, 345 +FILTER_COL_2=31, 460 FILTER_COL_2_dpi96=31, 230 -FILTER_COL_3=3, 375 +FILTER_COL_3=3, 500 FILTER_COL_3_dpi96=3, 250 FILTER_SORT_COL=31 FILTER_SORT_UPW=1 SELECT_SHOW_TOOLTIPS=1 SELECT_SHOW_DISPLAY_NAMES=0 SELECT_EXPAND_TREEVIEW_ITEM=2000 -SELECT_TV_W=225 +SELECT_TV_W=300 SELECT_TV_W_dpi96=150 -SELECT_DLG_H=450 +SELECT_DLG_H=600 SELECT_DLG_H_dpi96=300 SELECT_PREVIEW_DLG_VISIBLE=0 SELECT_SORT_COLUMN_ID=31 @@ -2438,7 +2471,7 @@ SEARCH_COMP_ADDRESS=0 SEARCH_START_ADDRESS=0 SEARCH_END_ADDRESS=0 FILTER_COMMENT= -FILTER_NAME=Suchergebnis +FILTER_NAME=Search result SEARCH_COMMENT= SEARCH_NAME= PARENT= @@ -2518,9 +2551,9 @@ ColWidthTransparent_dpi96=77 COLUMNS_TYP4194304_CONTEXT1= COLUMNS_TYP4194304_CONTEXT1_dpi96= COLUMNS_TYP4194304_CONTEXT1_ScreenDPI=120 -COLUMNS_TYP1_CONTEXT1= +COLUMNS_TYP1_CONTEXT1= COLUMNS_TYP1_CONTEXT1_dpi96= -COLUMNS_TYP1_CONTEXT1_ScreenDPI=96 +COLUMNS_TYP1_CONTEXT1_ScreenDPI=192 COLUMNS_TYP1_CONTEXT4= COLUMNS_TYP1_CONTEXT4_dpi96= COLUMNS_TYP1_CONTEXT4_ScreenDPI=192 @@ -2542,16 +2575,16 @@ WindowHeight=379 WindowHeight_dpi96=379 [Dialog_MdiCfgDlg_Typ1] -LastOpenedDlgType=1 +LastOpenedDlgType=0 TreeWidth=240 TreeWidth_dpi96=120 ScreenDPIinSection=192 -WindowLeft=462 -WindowLeft_dpi96=231 +WindowLeft=66 +WindowLeft_dpi96=33 WindowTop=206 WindowTop_dpi96=103 -WindowWidth=1848 -WindowWidth_dpi96=924 +WindowWidth=3100 +WindowWidth_dpi96=1550 WindowHeight=994 WindowHeight_dpi96=497 @@ -2632,143 +2665,6 @@ COLUMN1_dpi96=400 COLUMN2=274 COLUMN2_dpi96=183 -[COLOR_SCHEME_LIST] -COLOR_SCHEME0=COLOR_SCHEMEUSER_DEFINED -SCHEMES_COUNT=1 -ACTIVE=COLOR_SCHEME_H_CANAPE_CLASSIC -CURRENT_SCHEME_INDEX=0 - -[COLOR_SCHEMEUSER_DEFINED] -IS_USER_DEFINED=1 -SCHEME_NAME=[none] -ColorDisplay1=FF00 -1 8F400 -1 -ColorDisplay2=FF -1 8F4 -1 -ColorDisplay3=FFFF -1 F4F4 -1 -ColorDisplay4=FFFF00 -1 F4F400 -1 -ColorDisplay5=FF00FF -1 F400F4 -1 -ColorDisplay6=80FF -1 80F4 -1 -ColorDisplay7=FF8080 -1 F40000 -1 -ColorDisplay8=FFFFFF -1 0 -1 -ColorDisplay9=AA00 -1 AA00 -1 -ColorDisplay10=CC -1 CC -1 -ColorDisplay11=7070 -1 7070 -1 -ColorDisplay12=FFAA00 -1 FFAA00 -1 -ColorDisplay13=FF00AA -1 FF00AA -1 -ColorDisplay14=55AA -1 55AA -1 -ColorDisplay15=AA5555 -1 AA5555 -1 -ColorDisplay16=AAFFFF -1 AAFFFF -1 -ColorDisplay17=FFAA -1 FFAA -1 -ColorDisplay18=8080FF -1 8080FF -1 -ColorDisplay19=AAAA -1 AAAA -1 -ColorDisplay20=AAAA00 -1 AAAA00 -1 -ColorDisplay21=FFAAFF -1 FFAAFF -1 -ColorDisplay22=AAAAFF -1 AAAAFF -1 -ColorDisplay23=FFAAAA -1 FFAAAA -1 -ColorDisplay24=AAFFAA -1 AAFFAA -1 -ColorMarker1=FFFF00 -1 C6C600 -1 -ColorMarker2=FFFF -1 E1E1 -1 -ColorTrigger=FF00 -1 FF00 -1 -ColorEventAudio=A6620D -1 A6620D -1 -ColorEventMarker=FF -1 E7 -1 -ColorEventOther=FFFFFF -1 BABABA -1 -ColorHitMarker=FF00FF -1 FF00FF -1 -ColorGrid=8000 -1 8000 -1 -ColorBackground=0 -1 FFFFFF -1 -ColorChanged=FF0000 -1 FF0000 -1 -ColorWindowBg=C0C0C0 15 FFFFFF -1 -ColorAxis=FFFFFF -1 0 -1 -ColorAxisBackground=0 -1 FFFFFF -1 -ColorAxisSameScaled=FFFFFF -1 0 -1 -ColorAxisText=0 -1 0 -1 -ColorComments=FFFF00 -1 FFFF00 -1 -ColorCalComments=FFFF00 -1 FFFF00 -1 -ColorLegend=0 15 FFFFFF -1 -ColorLegendText=0 18 0 18 -ColorWindowFrameFocus=606060 -1 CEA27D -1 -ColorWindowFrameButtons=0 -1 0 -1 -ColorHexWinCalRam=8000 -1 8000 -1 -ColorHexWinNotCalRam=FF -1 FF -1 -ColorHexWinDbObject=80FFFF -1 80FFFF -1 -ColorHexWinInvalid=AFAFFF -1 AFAFFF -1 -ColorHexWinInvalidDb=FF -1 FF -1 -ColorHexWinSelection=FF 13 FF 13 -ColorHexWinSelText=0 14 0 14 -ColorWriteText=FFFF00 -1 FFFF00 -1 -ColorValLimitOK=FF00 -1 FF00 -1 -ColorValLimitWarn=FFFF -1 FFFF -1 -ColorValLimitError=FF -1 FF -1 -ColorActiveTitleLeft=54E3 2 54E3 2 -ColorActiveTitleRight=3D95FF 27 3D95FF 27 -ColorActiveTitleText=FFFFFF 9 FFFFFF 9 -ColorInactiveTitleLeft=7A96DF 3 7A96DF 3 -ColorInactiveTitleRight70=7A96DF 28 7A96DF 28 -ColorInactiveTitleText=D8E4F8 19 D8E4F8 19 -ColorMeaCursorTooltip=808080 -1 808080 -1 -ColorMeaCursorTooltipTxt=FFFFFF -1 FFFFFF -1 -ColorDisplayGray=999999 -1 999999 -1 -ColorDisplaySubGrid=4000 -1 4000 -1 -ColorGraphBackground=D2D2D2 -1 EEEEEE -1 -ColorInvalidSignal=F0F0F0 -1 F0F0F0 -1 -ColorLostVariable=C0C0C0 -1 C0C0C0 -1 -ColorMoveFrame=FAD5A3 -1 FAD5A3 -1 -ColorResizeMarkers=646464 -1 646464 -1 -ColorPageBackground=D8C7BC -1 D8C7BC -1 -ColorDisabledLegendText=A0A0A0 17 A0A0A0 17 -ColorBordersHighlight=FFFFFF 20 0 20 -ColorBordersShadow=A0A0A0 16 0 16 -ColorLookupTableX=FF -1 FF -1 -ColorLookupTableY=8000 -1 8000 -1 -ColorLookupTableZ=FF0000 -1 FF0000 -1 -ColorLookupTableZ4=FFFF00 -1 FFFF00 -1 -ColorLookupTableZ5=FF00FF -1 FF00FF -1 -ColorActiveCell=30FFFF -1 30FFFF -1 -ColorActiveCellText=0 -1 0 -1 -ColorMissingValues=FF -1 FF -1 -ColorBackgroundValues=FFFFFF -1 FFFFFF -1 -ColorWorkingPoint=880088 -1 880088 -1 -ColorColumnHeader=F0F0F0 30 F0F0F0 30 -ColorBackgroundMetaData=DADEE1 -1 FFFFFF -1 -ColorStatistic=FFFFFF -1 0 -1 -ColorMarker1CurveMode=F56DF3 -1 944293 -1 -ColorMarker2CurveMode=277FFF -1 2372E6 -1 - -[COMMENT_FIELD_0] -ID="Name" -MAX_LENGTH=32 -MODE=0 -VALUE_COUNT=0 -HISTORY_COUNT=0 -HISTORY_0="RainerZ" - -[COMMENT_FIELD_1] -ID="Division" -MAX_LENGTH=32 -MODE=0 -VALUE_COUNT=0 -HISTORY_COUNT=0 - -[COMMENT_FIELD_2] -ID="Project" -MAX_LENGTH=32 -MODE=0 -VALUE_COUNT=0 -HISTORY_COUNT=0 -HISTORY_0="bpf_demo" - -[COMMENT_FIELD_3] -ID="Subject" -MAX_LENGTH=32 -MODE=0 -VALUE_COUNT=0 -HISTORY_COUNT=0 - -[COMMENT_FIELD_4] -ID="Comment" -MAX_LENGTH=-1 -MODE=12 -VALUE_COUNT=0 -HISTORY_COUNT=0 - [DEVICE_EXPLORER_COLUMNLIST_CHANNELS] ScreenDPIinSection=192 ColumnCount=4 @@ -2828,15 +2724,15 @@ ColumnIdSort=-1 SortUpward=1 [DlgAlgorithmConfiguration] -TreeWidth=170 -TreeWidth_dpi96=85 +TreeWidth=270 +TreeWidth_dpi96=135 ScreenDPIinSection=192 -WindowLeft=1110 -WindowLeft_dpi96=555 +WindowLeft=794 +WindowLeft_dpi96=397 WindowTop=618 WindowTop_dpi96=309 -WindowWidth=1324 -WindowWidth_dpi96=662 +WindowWidth=1826 +WindowWidth_dpi96=913 WindowHeight=986 WindowHeight_dpi96=493 @@ -2903,38 +2799,32 @@ TreeExpStatus=0 DisplayIntValuesAsHex=0 DisplayCharArrayAsString=1 -[MEASUREMENT_0] -FileId=Measurement1 -MeasurementId=38bbfaab-819f-4af7-afef-d7e7d3e80cbd -LoadMeasurementSetting=3 - -[MEASUREMENT_DISPLAY] +[MEASUREMENT_DISPLAY_SELECT_REDUCED] ScreenDPIinSection=192 -POSX=838 -POSX_dpi96=419 -POSY=260 -POSY_dpi96=130 -SIZEX=2918 -SIZEX_dpi96=1459 -SIZEY=1802 -SIZEY_dpi96=901 +POSX=0 +POSX_dpi96=0 +POSY=0 +POSY_dpi96=0 +SIZEX=1620 +SIZEX_dpi96=810 +SIZEY=1200 +SIZEY_dpi96=600 SHOWTOOLBAR=1 SHOWSTATUSBAR=1 SHOWGRID=0 -RIGHTPANE2HEIGHT=304 -RIGHTPANE2HEIGHT_dpi96=152 +RIGHTPANE2HEIGHT=-2 +RIGHTPANE2HEIGHT_dpi96=-1 TREEX=450 TREEX_dpi96=225 -TREEY=1611 -TREEY_dpi96=806 +TREEY=1048 +TREEY_dpi96=524 ACTIVEPANE=1 SELECTED_TREENODE=Measurement signals -FIRSTVISIBLE_TREENODE=Measurement options -TREEEXPAND_COUNT=2 +FIRSTVISIBLE_TREENODE=Measurement signals +TREEEXPAND_COUNT=1 TREEEXPAND_0=Measurement signals -TREEEXPAND_1=Recorder list LAST_FOCUSED_LISTCOLUMN=0 -LAST_FOCUSED_LISTINDEX=6 +LAST_FOCUSED_LISTINDEX=5 LAST_TOP_LISTINDEX=0 DAQLISTS=2 STATUSBAR_BYTES=1 @@ -2943,46 +2833,45 @@ LABELLISTMEAMODE=0 LABELLISTBUSSIGNALMODE=0 TEXT_SEARCH= VXIIColumnsAdded=0 -SHOWONLYACTIVE=0 -[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS] +[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_EVENTS] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS_CUSTOM] +[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_EVENTS_CUSTOM] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS_KEY] +[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_EVENTS_KEY] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS_SYSTEM] +[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_EVENTS_SYSTEM] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=196608 SortUpward=1 -[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS_SYSTEM_DEVICE] +[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_EVENTS_SYSTEM_DEVICE] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_COLUMNLIST_KNOWN_DYNAMIC_COLUMNS_NORMAL] +[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_KNOWN_DYNAMIC_COLUMNS_NORMAL] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 VERSION=100 -[MEASUREMENT_DISPLAY_COLUMNLIST_NORMAL] +[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_NORMAL] ScreenDPIinSection=192 ColumnCount=8 Column_0=65542, 100 @@ -2991,88 +2880,220 @@ Column_1=29, 88 Column_1_dpi96=29, 44 Column_2=34, 96 Column_2_dpi96=34, 48 -Column_3=31, 302 -Column_3_dpi96=31, 151 -Column_4=65540, 290 -Column_4_dpi96=65540, 145 -Column_5=98305, 224 -Column_5_dpi96=98305, 112 -Column_6=1, 180 -Column_6_dpi96=1, 90 -Column_7=65541, 120 -Column_7_dpi96=65541, 60 -ColumnIdSort=65542 +Column_3=31, 460 +Column_3_dpi96=31, 230 +Column_4=65540, 160 +Column_4_dpi96=65540, 80 +Column_5=65541, 120 +Column_5_dpi96=65541, 60 +Column_6=65597, 200 +Column_6_dpi96=65597, 100 +Column_7=98305, 160 +Column_7_dpi96=98305, 80 +ColumnIdSort=-1 SortUpward=1 VERSION=100 -[MEASUREMENT_DISPLAY_COLUMNLIST_RECORDER] +[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_RECORDER] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 VERSION=100 -[MEASUREMENT_DISPLAY_COLUMNLIST_RECORDER_BUSLOGGING] +[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_RECORDER_BUSLOGGING] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_COLUMNLIST_RECORDERS] +[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_RECORDERS] ScreenDPIinSection=192 -ColumnCount=6 -Column_0=327711, 400 -Column_0_dpi96=327711, 200 -Column_1=327684, 120 -Column_1_dpi96=327684, 60 -Column_2=327709, 300 -Column_2_dpi96=327709, 150 -Column_3=327695, 130 -Column_3_dpi96=327695, 65 -Column_4=327681, 400 -Column_4_dpi96=327681, 200 -Column_5=327683, 400 -Column_5_dpi96=327683, 200 +ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_COLUMNLIST_SOUNDS] +[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_SOUNDS] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_COLUMNLIST_TARA_ACTIVE_SIGNALS] +[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_TARA_ACTIVE_SIGNALS] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_COLUMNLIST_TARA_ALL_SIGNALS] +[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_TARA_ALL_SIGNALS] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_COLUMNLIST_VIO] +[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_VIO] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_DYNAMIC_COLUMNS] -Count=0 +[Module_FILE1] +DefaultReplaceFile=0 +Converter=Converter_ID +ChildFileCount=0 -[MEASUREMENT_DISPLAY_SELECT] +[COLOR_SCHEME_LIST] +COLOR_SCHEME0=COLOR_SCHEMEUSER_DEFINED +SCHEMES_COUNT=1 +ACTIVE=COLOR_SCHEME_H_CANAPE_CLASSIC +CURRENT_SCHEME_INDEX=0 + +[COLOR_SCHEMEUSER_DEFINED] +IS_USER_DEFINED=1 +SCHEME_NAME=[none] +ColorDisplay1=FF00 -1 8F400 -1 +ColorDisplay2=FF -1 8F4 -1 +ColorDisplay3=FFFF -1 F4F4 -1 +ColorDisplay4=FFFF00 -1 F4F400 -1 +ColorDisplay5=FF00FF -1 F400F4 -1 +ColorDisplay6=80FF -1 80F4 -1 +ColorDisplay7=FF8080 -1 F40000 -1 +ColorDisplay8=FFFFFF -1 0 -1 +ColorDisplay9=AA00 -1 AA00 -1 +ColorDisplay10=CC -1 CC -1 +ColorDisplay11=7070 -1 7070 -1 +ColorDisplay12=FFAA00 -1 FFAA00 -1 +ColorDisplay13=FF00AA -1 FF00AA -1 +ColorDisplay14=55AA -1 55AA -1 +ColorDisplay15=AA5555 -1 AA5555 -1 +ColorDisplay16=AAFFFF -1 AAFFFF -1 +ColorDisplay17=FFAA -1 FFAA -1 +ColorDisplay18=8080FF -1 8080FF -1 +ColorDisplay19=AAAA -1 AAAA -1 +ColorDisplay20=AAAA00 -1 AAAA00 -1 +ColorDisplay21=FFAAFF -1 FFAAFF -1 +ColorDisplay22=AAAAFF -1 AAAAFF -1 +ColorDisplay23=FFAAAA -1 FFAAAA -1 +ColorDisplay24=AAFFAA -1 AAFFAA -1 +ColorMarker1=FFFF00 -1 C6C600 -1 +ColorMarker2=FFFF -1 E1E1 -1 +ColorTrigger=FF00 -1 FF00 -1 +ColorEventAudio=A6620D -1 A6620D -1 +ColorEventMarker=FF -1 E7 -1 +ColorEventOther=FFFFFF -1 BABABA -1 +ColorHitMarker=FF00FF -1 FF00FF -1 +ColorGrid=8000 -1 8000 -1 +ColorBackground=0 -1 FFFFFF -1 +ColorChanged=FF0000 -1 FF0000 -1 +ColorWindowBg=C0C0C0 15 FFFFFF -1 +ColorAxis=FFFFFF -1 0 -1 +ColorAxisBackground=0 -1 FFFFFF -1 +ColorAxisSameScaled=FFFFFF -1 0 -1 +ColorAxisText=0 -1 0 -1 +ColorComments=FFFF00 -1 FFFF00 -1 +ColorCalComments=FFFF00 -1 FFFF00 -1 +ColorLegend=0 15 FFFFFF -1 +ColorLegendText=0 18 0 18 +ColorWindowFrameFocus=606060 -1 CEA27D -1 +ColorWindowFrameButtons=0 -1 0 -1 +ColorHexWinCalRam=8000 -1 8000 -1 +ColorHexWinNotCalRam=FF -1 FF -1 +ColorHexWinDbObject=80FFFF -1 80FFFF -1 +ColorHexWinInvalid=AFAFFF -1 AFAFFF -1 +ColorHexWinInvalidDb=FF -1 FF -1 +ColorHexWinSelection=FF 13 FF 13 +ColorHexWinSelText=0 14 0 14 +ColorWriteText=FFFF00 -1 FFFF00 -1 +ColorValLimitOK=FF00 -1 FF00 -1 +ColorValLimitWarn=FFFF -1 FFFF -1 +ColorValLimitError=FF -1 FF -1 +ColorActiveTitleLeft=54E3 2 54E3 2 +ColorActiveTitleRight=3D95FF 27 3D95FF 27 +ColorActiveTitleText=FFFFFF 9 FFFFFF 9 +ColorInactiveTitleLeft=7A96DF 3 7A96DF 3 +ColorInactiveTitleRight70=7A96DF 28 7A96DF 28 +ColorInactiveTitleText=D8E4F8 19 D8E4F8 19 +ColorMeaCursorTooltip=808080 -1 808080 -1 +ColorMeaCursorTooltipTxt=FFFFFF -1 FFFFFF -1 +ColorDisplayGray=999999 -1 999999 -1 +ColorDisplaySubGrid=4000 -1 4000 -1 +ColorGraphBackground=D2D2D2 -1 EEEEEE -1 +ColorInvalidSignal=F0F0F0 -1 F0F0F0 -1 +ColorLostVariable=C0C0C0 -1 C0C0C0 -1 +ColorMoveFrame=FAD5A3 -1 FAD5A3 -1 +ColorResizeMarkers=646464 -1 646464 -1 +ColorPageBackground=D8C7BC -1 D8C7BC -1 +ColorDisabledLegendText=A0A0A0 17 A0A0A0 17 +ColorBordersHighlight=FFFFFF 20 0 20 +ColorBordersShadow=A0A0A0 16 0 16 +ColorLookupTableX=FF -1 FF -1 +ColorLookupTableY=8000 -1 8000 -1 +ColorLookupTableZ=FF0000 -1 FF0000 -1 +ColorLookupTableZ4=FFFF00 -1 FFFF00 -1 +ColorLookupTableZ5=FF00FF -1 FF00FF -1 +ColorActiveCell=30FFFF -1 30FFFF -1 +ColorActiveCellText=0 -1 0 -1 +ColorMissingValues=FF -1 FF -1 +ColorBackgroundValues=FFFFFF -1 FFFFFF -1 +ColorWorkingPoint=880088 -1 880088 -1 +ColorColumnHeader=F0F0F0 30 F0F0F0 30 +ColorBackgroundMetaData=DADEE1 -1 FFFFFF -1 +ColorStatistic=FFFFFF -1 0 -1 +ColorMarker1CurveMode=F56DF3 -1 944293 -1 +ColorMarker2CurveMode=277FFF -1 2372E6 -1 + +[COMMENT_FIELD_0] +ID="Name" +MAX_LENGTH=32 +MODE=0 +VALUE_COUNT=0 +HISTORY_COUNT=0 +HISTORY_0="RainerZ" + +[COMMENT_FIELD_1] +ID="Division" +MAX_LENGTH=32 +MODE=0 +VALUE_COUNT=0 +HISTORY_COUNT=0 + +[COMMENT_FIELD_2] +ID="Project" +MAX_LENGTH=32 +MODE=0 +VALUE_COUNT=0 +HISTORY_COUNT=0 +HISTORY_0="bpf_demo" + +[COMMENT_FIELD_3] +ID="Subject" +MAX_LENGTH=32 +MODE=0 +VALUE_COUNT=0 +HISTORY_COUNT=0 + +[COMMENT_FIELD_4] +ID="Comment" +MAX_LENGTH=-1 +MODE=12 +VALUE_COUNT=0 +HISTORY_COUNT=0 + +[MEASUREMENT_0] +FileId=Measurement1 +MeasurementId=a85dd9ff-3193-4ecb-a85a-ecc88f39ca95 +LoadMeasurementSetting=3 + +[MEASUREMENT_DISPLAY] ScreenDPIinSection=192 -POSX=0 -POSX_dpi96=0 -POSY=0 -POSY_dpi96=0 -SIZEX=1620 -SIZEX_dpi96=810 -SIZEY=1200 -SIZEY_dpi96=600 +POSX=58 +POSX_dpi96=29 +POSY=112 +POSY_dpi96=56 +SIZEX=2646 +SIZEX_dpi96=1323 +SIZEY=1802 +SIZEY_dpi96=901 SHOWTOOLBAR=1 SHOWSTATUSBAR=1 SHOWGRID=0 @@ -3080,15 +3101,17 @@ RIGHTPANE2HEIGHT=304 RIGHTPANE2HEIGHT_dpi96=152 TREEX=450 TREEX_dpi96=225 -TREEY=1009 -TREEY_dpi96=505 +TREEY=1611 +TREEY_dpi96=806 ACTIVEPANE=1 -SELECTED_TREENODE=Measurement signals +SELECTED_TREENODE=Measurement signals/xcp_demo FIRSTVISIBLE_TREENODE=Measurement options -TREEEXPAND_COUNT=1 +TREEEXPAND_COUNT=3 TREEEXPAND_0=Measurement signals +TREEEXPAND_1=Measurement signals/xcp_demo +TREEEXPAND_2=Recorder list LAST_FOCUSED_LISTCOLUMN=0 -LAST_FOCUSED_LISTINDEX=5 +LAST_FOCUSED_LISTINDEX=6 LAST_TOP_LISTINDEX=0 DAQLISTS=2 STATUSBAR_BYTES=1 @@ -3097,114 +3120,127 @@ LABELLISTMEAMODE=0 LABELLISTBUSSIGNALMODE=0 TEXT_SEARCH= VXIIColumnsAdded=0 +SHOWONLYACTIVE=0 -[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_EVENTS] +[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_EVENTS_CUSTOM] +[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS_CUSTOM] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_EVENTS_KEY] +[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS_KEY] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_EVENTS_SYSTEM] +[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS_SYSTEM] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=196608 SortUpward=1 -[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_EVENTS_SYSTEM_DEVICE] +[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS_SYSTEM_DEVICE] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_KNOWN_DYNAMIC_COLUMNS_NORMAL] +[MEASUREMENT_DISPLAY_COLUMNLIST_KNOWN_DYNAMIC_COLUMNS_NORMAL] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 VERSION=100 -[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_NORMAL] +[MEASUREMENT_DISPLAY_COLUMNLIST_NORMAL] ScreenDPIinSection=192 ColumnCount=8 Column_0=65542, 100 Column_0_dpi96=65542, 50 -Column_1=29, 88 -Column_1_dpi96=29, 44 -Column_2=34, 96 -Column_2_dpi96=34, 48 -Column_3=31, 460 -Column_3_dpi96=31, 230 -Column_4=65540, 160 -Column_4_dpi96=65540, 80 -Column_5=65541, 120 -Column_5_dpi96=65541, 60 -Column_6=65597, 200 -Column_6_dpi96=65597, 100 -Column_7=98305, 160 -Column_7_dpi96=98305, 80 -ColumnIdSort=-1 +Column_1=34, 104 +Column_1_dpi96=34, 52 +Column_2=31, 326 +Column_2_dpi96=31, 163 +Column_3=65540, 438 +Column_3_dpi96=65540, 219 +Column_4=98305, 160 +Column_4_dpi96=98305, 80 +Column_5=1, 180 +Column_5_dpi96=1, 90 +Column_6=65541, 174 +Column_6_dpi96=65541, 87 +Column_7=29, 374 +Column_7_dpi96=29, 187 +ColumnIdSort=65542 SortUpward=1 VERSION=100 -[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_RECORDER] +[MEASUREMENT_DISPLAY_COLUMNLIST_RECORDER] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 VERSION=100 -[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_RECORDER_BUSLOGGING] +[MEASUREMENT_DISPLAY_COLUMNLIST_RECORDER_BUSLOGGING] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_RECORDERS] +[MEASUREMENT_DISPLAY_COLUMNLIST_RECORDERS] ScreenDPIinSection=192 -ColumnCount=0 +ColumnCount=6 +Column_0=327711, 400 +Column_0_dpi96=327711, 200 +Column_1=327684, 120 +Column_1_dpi96=327684, 60 +Column_2=327709, 300 +Column_2_dpi96=327709, 150 +Column_3=327695, 130 +Column_3_dpi96=327695, 65 +Column_4=327681, 400 +Column_4_dpi96=327681, 200 +Column_5=327683, 400 +Column_5_dpi96=327683, 200 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_SOUNDS] +[MEASUREMENT_DISPLAY_COLUMNLIST_SOUNDS] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_TARA_ACTIVE_SIGNALS] +[MEASUREMENT_DISPLAY_COLUMNLIST_TARA_ACTIVE_SIGNALS] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_TARA_ALL_SIGNALS] +[MEASUREMENT_DISPLAY_COLUMNLIST_TARA_ALL_SIGNALS] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_VIO] +[MEASUREMENT_DISPLAY_COLUMNLIST_VIO] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_SELECT_DYNAMIC_COLUMNS] +[MEASUREMENT_DISPLAY_DYNAMIC_COLUMNS] Count=0 -[MEASUREMENT_DISPLAY_SELECT_REDUCED] +[MEASUREMENT_DISPLAY_SELECT] ScreenDPIinSection=192 POSX=0 POSX_dpi96=0 @@ -3217,15 +3253,15 @@ SIZEY_dpi96=600 SHOWTOOLBAR=1 SHOWSTATUSBAR=1 SHOWGRID=0 -RIGHTPANE2HEIGHT=-2 -RIGHTPANE2HEIGHT_dpi96=-1 +RIGHTPANE2HEIGHT=304 +RIGHTPANE2HEIGHT_dpi96=152 TREEX=450 TREEX_dpi96=225 -TREEY=1048 -TREEY_dpi96=524 -ACTIVEPANE=1 +TREEY=1009 +TREEY_dpi96=505 +ACTIVEPANE=0 SELECTED_TREENODE=Measurement signals -FIRSTVISIBLE_TREENODE=Measurement signals +FIRSTVISIBLE_TREENODE=Measurement options TREEEXPAND_COUNT=1 TREEEXPAND_0=Measurement signals LAST_FOCUSED_LISTCOLUMN=0 @@ -3239,44 +3275,44 @@ LABELLISTBUSSIGNALMODE=0 TEXT_SEARCH= VXIIColumnsAdded=0 -[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_EVENTS] +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_EVENTS] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_EVENTS_CUSTOM] +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_EVENTS_CUSTOM] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_EVENTS_KEY] +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_EVENTS_KEY] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_EVENTS_SYSTEM] +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_EVENTS_SYSTEM] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=196608 SortUpward=1 -[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_EVENTS_SYSTEM_DEVICE] +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_EVENTS_SYSTEM_DEVICE] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_KNOWN_DYNAMIC_COLUMNS_NORMAL] +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_KNOWN_DYNAMIC_COLUMNS_NORMAL] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 VERSION=100 -[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_NORMAL] +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_NORMAL] ScreenDPIinSection=192 ColumnCount=8 Column_0=65542, 100 @@ -3299,57 +3335,55 @@ ColumnIdSort=-1 SortUpward=1 VERSION=100 -[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_RECORDER] +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_RECORDER] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 VERSION=100 -[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_RECORDER_BUSLOGGING] +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_RECORDER_BUSLOGGING] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_RECORDERS] +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_RECORDERS] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_SOUNDS] +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_SOUNDS] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_TARA_ACTIVE_SIGNALS] +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_TARA_ACTIVE_SIGNALS] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_TARA_ALL_SIGNALS] +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_TARA_ALL_SIGNALS] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_DISPLAY_SELECT_REDUCED_COLUMNLIST_VIO] +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_VIO] ScreenDPIinSection=192 ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[Module_FILE1] -DefaultReplaceFile=0 -Converter=Converter_ID -ChildFileCount=0 +[MEASUREMENT_DISPLAY_SELECT_DYNAMIC_COLUMNS] +Count=0 [SIGNSELWND_DYNAMIC_COLUMNS] Count=0 [~~~~~_CONSISTENCY_CHECK_END_SECTION_~~~~~] -GUID={3F2AA4E1-96F2-490B-B49A-D504BADDAD4C} +GUID={66564AC3-D4A5-4424-AA7B-46A034ABCFAA} diff --git a/examples/bpf_demo/CANape/bpf_demo.cna b/examples/bpf_demo/CANape/bpf_demo.cna index dc24a5ac..c9f835fb 100644 --- a/examples/bpf_demo/CANape/bpf_demo.cna +++ b/examples/bpf_demo/CANape/bpf_demo.cna @@ -10,8 +10,8 @@ PrgDate=16.06.2025 Description= CreationTime=13:52 CreationDate=09/10/2025 ; Month/Day/Year -ModificationTime=22:03 -ModificationDate=09/10/2025 ; Month/Day/Year +ModificationTime=15:36 +ModificationDate=10/29/2025 ; Month/Day/Year Protected=0 CurrentWindowsACP=1252 @@ -78,7 +78,7 @@ Count=0 Name=Trace syscalls Comment= Maximized=0 -ActiveWindow=3 +ActiveWindow=6 IsReportPage=0 TimeAxisSynchronized=0 PrintLayout=Default @@ -156,11 +156,9 @@ HasInitialValue=0 InitialValue=0 NumberOfInputSignals=1 Module=Functions -Mode=5 +Mode=10 Rate=0 ModeIsDefault=0 -ModeModule=xcp_demo -ModeName=1,"syscall_event" "xcp_demo" Row=0 Column=0 MeaReferenced=1 @@ -175,11 +173,11 @@ Color=65535 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 -LineTyp=2 +LineTyp=4 YMinHome=0 -YMaxHome=0.05 +YMaxHome=0.2 YMin=0 -YMax=0.05 +YMax=0.2 XOffsetNS=0 XOffset=0 ValueFormat=3 @@ -187,7 +185,7 @@ BitMask=1 ShowYAxis=1 Width=10 LineStyle=1 -MarkerType=1 +MarkerType=5 SRMainValue=0 InvalidValueDrawMode=3 LineWidth=1 @@ -245,11 +243,9 @@ HasInitialValue=0 InitialValue=0 NumberOfInputSignals=1 Module=Functions -Mode=5 +Mode=10 Rate=0 ModeIsDefault=0 -ModeModule=xcp_demo -ModeName=1,"syscall_event" "xcp_demo" Row=0 Column=0 MeaReferenced=1 @@ -264,11 +260,11 @@ Color=65280 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 -LineTyp=2 +LineTyp=4 YMinHome=0 -YMaxHome=0.05 +YMaxHome=0.2 YMin=0 -YMax=0.05 +YMax=0.2 XOffsetNS=0 XOffset=0 ValueFormat=3 @@ -276,13 +272,13 @@ BitMask=1 ShowYAxis=1 Width=10 LineStyle=1 -MarkerType=1 +MarkerType=3 SRMainValue=0 InvalidValueDrawMode=3 LineWidth=1 Precision=-2 Digits=6 -Enabled=1 +Enabled=0 StoredFocused=0 SublMask=1 MeaSublMask=3 @@ -338,7 +334,7 @@ SubConfigsCount=0 Count=0 [MEASUREMENT_LIST] -Count=307 +Count=308 OfflineFileName=bpf_demo.mf4 OfflineFileCount=1 MeaCfgLabellistName= @@ -347,7 +343,7 @@ MeaCfgLabellistName= Module=xcp_demo Name=syscall_count Disabled=0 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -360,7 +356,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_10] Module=xcp_demo -Name=futex_wake +Name=clock_gettime Disabled=0 Mode=1 Rate=1000 @@ -371,11 +367,11 @@ MeaReferenced=1 ArchivBy_1=Recorder IsFallback=0 HasManagedDisplay=0 -DisplayCount=1 +DisplayCount=2 [MEASUREMENT_OBJECT_100] Module=xcp_demo -Name=inotify_add_watch +Name=getuid Disabled=0 Mode=1 Rate=1000 @@ -390,8 +386,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_100_DISPLAY_1] Window=6 -Index=203 -Color=65535 +Index=206 +Color=11206570 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -432,11 +428,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_753cac2f-8c73-4d63-831f-c96e3d454128 +GUID=DISPLAY_b902f2ca-a114-46ce-8896-526d0eb70311 [MEASUREMENT_OBJECT_101] Module=xcp_demo -Name=inotify_init1 +Name=getxattr Disabled=0 Mode=1 Rate=1000 @@ -451,8 +447,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_101_DISPLAY_1] Window=6 -Index=202 -Color=16776960 +Index=205 +Color=65280 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -493,11 +489,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_1a317de2-17bd-4cb2-8966-2103fcf43a03 +GUID=DISPLAY_ce5a66ec-0cb2-4935-b330-90d53f313d1f [MEASUREMENT_OBJECT_102] Module=xcp_demo -Name=inotify_rm_watch +Name=init_module Disabled=0 Mode=1 Rate=1000 @@ -512,8 +508,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_102_DISPLAY_1] Window=6 -Index=201 -Color=16711935 +Index=204 +Color=255 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -554,11 +550,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_d0e1fac1-de29-496d-a63e-2020f141ccf5 +GUID=DISPLAY_11fdd9b0-5237-408c-9449-0867e1d21261 [MEASUREMENT_OBJECT_103] Module=xcp_demo -Name=io_cancel +Name=inotify_add_watch Disabled=0 Mode=1 Rate=1000 @@ -573,8 +569,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_103_DISPLAY_1] Window=6 -Index=200 -Color=33023 +Index=203 +Color=65535 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -615,11 +611,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_8cd9b830-1e75-4acd-9762-f009c38e2af0 +GUID=DISPLAY_753cac2f-8c73-4d63-831f-c96e3d454128 [MEASUREMENT_OBJECT_104] Module=xcp_demo -Name=io_destroy +Name=inotify_init1 Disabled=0 Mode=1 Rate=1000 @@ -634,8 +630,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_104_DISPLAY_1] Window=6 -Index=199 -Color=16744576 +Index=202 +Color=16776960 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -676,11 +672,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_e2223173-5ea5-448a-99dd-87ba0a3d3721 +GUID=DISPLAY_1a317de2-17bd-4cb2-8966-2103fcf43a03 [MEASUREMENT_OBJECT_105] Module=xcp_demo -Name=io_getevents +Name=inotify_rm_watch Disabled=0 Mode=1 Rate=1000 @@ -695,8 +691,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_105_DISPLAY_1] Window=6 -Index=198 -Color=16777215 +Index=201 +Color=16711935 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -737,11 +733,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_4b013543-078d-423b-bcad-ea338424894c +GUID=DISPLAY_d0e1fac1-de29-496d-a63e-2020f141ccf5 [MEASUREMENT_OBJECT_106] Module=xcp_demo -Name=io_pgetevents +Name=io_cancel Disabled=0 Mode=1 Rate=1000 @@ -756,8 +752,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_106_DISPLAY_1] Window=6 -Index=197 -Color=43520 +Index=200 +Color=33023 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -798,11 +794,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_f4cee5ad-620a-4a71-ab83-4aed3c81e2dc +GUID=DISPLAY_8cd9b830-1e75-4acd-9762-f009c38e2af0 [MEASUREMENT_OBJECT_107] Module=xcp_demo -Name=io_setup +Name=io_destroy Disabled=0 Mode=1 Rate=1000 @@ -817,8 +813,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_107_DISPLAY_1] Window=6 -Index=196 -Color=204 +Index=199 +Color=16744576 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -859,11 +855,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_02ca3237-f542-42a6-a3e2-a5a777dd1710 +GUID=DISPLAY_e2223173-5ea5-448a-99dd-87ba0a3d3721 [MEASUREMENT_OBJECT_108] Module=xcp_demo -Name=io_submit +Name=io_getevents Disabled=0 Mode=1 Rate=1000 @@ -878,8 +874,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_108_DISPLAY_1] Window=6 -Index=195 -Color=28784 +Index=198 +Color=16777215 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -920,11 +916,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_135a60d7-a58b-43f2-aa2e-19c5518bcaa1 +GUID=DISPLAY_4b013543-078d-423b-bcad-ea338424894c [MEASUREMENT_OBJECT_109] Module=xcp_demo -Name=io_uring_enter +Name=io_pgetevents Disabled=0 Mode=1 Rate=1000 @@ -939,8 +935,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_109_DISPLAY_1] Window=6 -Index=194 -Color=16755200 +Index=197 +Color=43520 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -981,12 +977,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_db7932be-0189-4143-8198-da3cfe6e975b +GUID=DISPLAY_f4cee5ad-620a-4a71-ab83-4aed3c81e2dc [MEASUREMENT_OBJECT_10_DISPLAY_1] Window=6 -Index=293 -Color=11184895 +Index=277 +Color=8421631 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -1027,11 +1023,57 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_d6e87471-d5a8-44fa-90ca-b71e571c07b8 +GUID=DISPLAY_60c88a13-3dcf-452b-b437-21b5eddfa287 + +[MEASUREMENT_OBJECT_10_DISPLAY_2] +Window=6 +Index=302 +Color=8421631 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_1c167ded-1e11-4a4e-a17f-cad357fe8834 [MEASUREMENT_OBJECT_11] Module=xcp_demo -Name=accept +Name=futex_requeue Disabled=0 Mode=1 Rate=1000 @@ -1046,7 +1088,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_110] Module=xcp_demo -Name=io_uring_register +Name=io_setup Disabled=0 Mode=1 Rate=1000 @@ -1061,8 +1103,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_110_DISPLAY_1] Window=6 -Index=193 -Color=16711850 +Index=196 +Color=204 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -1103,11 +1145,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_f3fa8fc1-878a-4b20-8e54-bca1e4c052ef +GUID=DISPLAY_02ca3237-f542-42a6-a3e2-a5a777dd1710 [MEASUREMENT_OBJECT_111] Module=xcp_demo -Name=io_uring_setup +Name=io_submit Disabled=0 Mode=1 Rate=1000 @@ -1122,8 +1164,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_111_DISPLAY_1] Window=6 -Index=192 -Color=21930 +Index=195 +Color=28784 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -1164,11 +1206,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_67d78269-4fc8-48ad-93ba-609bae37178c +GUID=DISPLAY_135a60d7-a58b-43f2-aa2e-19c5518bcaa1 [MEASUREMENT_OBJECT_112] Module=xcp_demo -Name=ioctl +Name=io_uring_enter Disabled=0 Mode=1 Rate=1000 @@ -1183,8 +1225,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_112_DISPLAY_1] Window=6 -Index=298 -Color=11162965 +Index=194 +Color=16755200 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -1225,11 +1267,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_632f9dd1-d07f-4bce-a98f-5593b183885d +GUID=DISPLAY_db7932be-0189-4143-8198-da3cfe6e975b [MEASUREMENT_OBJECT_113] Module=xcp_demo -Name=ioprio_get +Name=io_uring_register Disabled=0 Mode=1 Rate=1000 @@ -1244,8 +1286,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_113_DISPLAY_1] Window=6 -Index=191 -Color=11206655 +Index=193 +Color=16711850 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -1286,11 +1328,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_591d09cf-cd5f-4ab9-8411-b859f8c72cb8 +GUID=DISPLAY_f3fa8fc1-878a-4b20-8e54-bca1e4c052ef [MEASUREMENT_OBJECT_114] Module=xcp_demo -Name=ioprio_set +Name=io_uring_setup Disabled=0 Mode=1 Rate=1000 @@ -1305,8 +1347,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_114_DISPLAY_1] Window=6 -Index=190 -Color=65450 +Index=192 +Color=21930 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -1347,11 +1389,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_156b351d-ced1-461e-889a-fa33db744d24 +GUID=DISPLAY_67d78269-4fc8-48ad-93ba-609bae37178c [MEASUREMENT_OBJECT_115] Module=xcp_demo -Name=kexec_file_load +Name=ioctl Disabled=0 Mode=1 Rate=1000 @@ -1366,8 +1408,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_115_DISPLAY_1] Window=6 -Index=189 -Color=8421631 +Index=298 +Color=11162965 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -1408,11 +1450,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_bb388b58-b64d-4b05-aaa9-85a11486872f +GUID=DISPLAY_632f9dd1-d07f-4bce-a98f-5593b183885d [MEASUREMENT_OBJECT_116] Module=xcp_demo -Name=kexec_load +Name=ioprio_get Disabled=0 Mode=1 Rate=1000 @@ -1427,8 +1469,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_116_DISPLAY_1] Window=6 -Index=188 -Color=43690 +Index=191 +Color=11206655 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -1469,11 +1511,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_490d5400-fe5b-4852-a28e-e39819cf85e4 +GUID=DISPLAY_591d09cf-cd5f-4ab9-8411-b859f8c72cb8 [MEASUREMENT_OBJECT_117] Module=xcp_demo -Name=keyctl +Name=ioprio_set Disabled=0 Mode=1 Rate=1000 @@ -1488,8 +1530,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_117_DISPLAY_1] Window=6 -Index=187 -Color=11184640 +Index=190 +Color=65450 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -1530,11 +1572,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_f332f434-1ad3-4803-91e1-f646719cd79c +GUID=DISPLAY_156b351d-ced1-461e-889a-fa33db744d24 [MEASUREMENT_OBJECT_118] Module=xcp_demo -Name=kill +Name=kexec_file_load Disabled=0 Mode=1 Rate=1000 @@ -1549,8 +1591,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_118_DISPLAY_1] Window=6 -Index=186 -Color=16755455 +Index=189 +Color=8421631 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -1591,11 +1633,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_0ef49375-0877-4925-bed0-f1bde5fce2ea +GUID=DISPLAY_bb388b58-b64d-4b05-aaa9-85a11486872f [MEASUREMENT_OBJECT_119] Module=xcp_demo -Name=landlock_add_rule +Name=kexec_load Disabled=0 Mode=1 Rate=1000 @@ -1610,8 +1652,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_119_DISPLAY_1] Window=6 -Index=185 -Color=11184895 +Index=188 +Color=43690 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -1652,12 +1694,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_13373ac1-d87d-40f1-811c-ee2ed8d934fd +GUID=DISPLAY_490d5400-fe5b-4852-a28e-e39819cf85e4 [MEASUREMENT_OBJECT_11_DISPLAY_1] Window=6 -Index=292 -Color=65535 +Index=296 +Color=43690 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -1698,11 +1740,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_e16f4317-c8ec-4389-975b-d5b513cc20c6 +GUID=DISPLAY_09d56764-0077-45a5-bb6f-b72084c9883e [MEASUREMENT_OBJECT_12] Module=xcp_demo -Name=accept4 +Name=futex_wait Disabled=0 Mode=1 Rate=1000 @@ -1717,7 +1759,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_120] Module=xcp_demo -Name=landlock_create_ruleset +Name=keyctl Disabled=0 Mode=1 Rate=1000 @@ -1732,8 +1774,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_120_DISPLAY_1] Window=6 -Index=184 -Color=16755370 +Index=187 +Color=11184640 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -1774,11 +1816,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_632ea133-5d34-4436-a821-eaa974e07908 +GUID=DISPLAY_f332f434-1ad3-4803-91e1-f646719cd79c [MEASUREMENT_OBJECT_121] Module=xcp_demo -Name=landlock_restrict_self +Name=kill Disabled=0 Mode=1 Rate=1000 @@ -1793,8 +1835,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_121_DISPLAY_1] Window=6 -Index=183 -Color=11206570 +Index=186 +Color=16755455 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -1835,11 +1877,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_51639c6d-0fb6-4779-8afc-0849081d75b9 +GUID=DISPLAY_0ef49375-0877-4925-bed0-f1bde5fce2ea [MEASUREMENT_OBJECT_122] Module=xcp_demo -Name=lgetxattr +Name=landlock_add_rule Disabled=0 Mode=1 Rate=1000 @@ -1854,8 +1896,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_122_DISPLAY_1] Window=6 -Index=182 -Color=65280 +Index=185 +Color=11184895 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -1896,11 +1938,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_f50f84be-cb43-46d8-8248-a34c64c79f03 +GUID=DISPLAY_13373ac1-d87d-40f1-811c-ee2ed8d934fd [MEASUREMENT_OBJECT_123] Module=xcp_demo -Name=linkat +Name=landlock_create_ruleset Disabled=0 Mode=1 Rate=1000 @@ -1915,8 +1957,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_123_DISPLAY_1] Window=6 -Index=181 -Color=255 +Index=184 +Color=16755370 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -1957,11 +1999,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_d291383e-892c-430c-ae90-e3c58109d116 +GUID=DISPLAY_632ea133-5d34-4436-a821-eaa974e07908 [MEASUREMENT_OBJECT_124] Module=xcp_demo -Name=listen +Name=landlock_restrict_self Disabled=0 Mode=1 Rate=1000 @@ -1976,8 +2018,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_124_DISPLAY_1] Window=6 -Index=180 -Color=65535 +Index=183 +Color=11206570 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -2018,11 +2060,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_1dbcce4f-fdce-45d6-ad19-e2e84407a733 +GUID=DISPLAY_51639c6d-0fb6-4779-8afc-0849081d75b9 [MEASUREMENT_OBJECT_125] Module=xcp_demo -Name=listmount +Name=lgetxattr Disabled=0 Mode=1 Rate=1000 @@ -2037,8 +2079,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_125_DISPLAY_1] Window=6 -Index=179 -Color=16776960 +Index=182 +Color=65280 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -2079,11 +2121,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_9e44c70a-e77a-462d-8c5b-da89a310d7d0 +GUID=DISPLAY_f50f84be-cb43-46d8-8248-a34c64c79f03 [MEASUREMENT_OBJECT_126] Module=xcp_demo -Name=listxattr +Name=linkat Disabled=0 Mode=1 Rate=1000 @@ -2098,8 +2140,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_126_DISPLAY_1] Window=6 -Index=178 -Color=16711935 +Index=181 +Color=255 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -2140,11 +2182,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_3443a2ac-743f-45f4-98bc-98224b2792c6 +GUID=DISPLAY_d291383e-892c-430c-ae90-e3c58109d116 [MEASUREMENT_OBJECT_127] Module=xcp_demo -Name=llistxattr +Name=listen Disabled=0 Mode=1 Rate=1000 @@ -2159,8 +2201,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_127_DISPLAY_1] Window=6 -Index=177 -Color=33023 +Index=180 +Color=65535 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -2201,11 +2243,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_31355489-3f0a-4921-b98d-159f68a41d5b +GUID=DISPLAY_1dbcce4f-fdce-45d6-ad19-e2e84407a733 [MEASUREMENT_OBJECT_128] Module=xcp_demo -Name=lookup_dcookie +Name=listmount Disabled=0 Mode=1 Rate=1000 @@ -2220,8 +2262,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_128_DISPLAY_1] Window=6 -Index=176 -Color=16744576 +Index=179 +Color=16776960 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -2262,11 +2304,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_5d145823-5fd6-46b2-a56e-976442e0e0f8 +GUID=DISPLAY_9e44c70a-e77a-462d-8c5b-da89a310d7d0 [MEASUREMENT_OBJECT_129] Module=xcp_demo -Name=lremovexattr +Name=listxattr Disabled=0 Mode=1 Rate=1000 @@ -2281,8 +2323,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_129_DISPLAY_1] Window=6 -Index=175 -Color=16777215 +Index=178 +Color=16711935 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -2323,12 +2365,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_399f45e8-1149-48a3-8c0a-a023f5856700 +GUID=DISPLAY_3443a2ac-743f-45f4-98bc-98224b2792c6 [MEASUREMENT_OBJECT_12_DISPLAY_1] Window=6 -Index=291 -Color=16776960 +Index=295 +Color=11184640 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -2369,11 +2411,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_8da67a8e-941b-4eca-8413-ffdbf97ad0a6 +GUID=DISPLAY_c3887c07-5888-46f6-9101-411953e03e62 [MEASUREMENT_OBJECT_13] Module=xcp_demo -Name=acct +Name=futex_waitv Disabled=0 Mode=1 Rate=1000 @@ -2388,7 +2430,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_130] Module=xcp_demo -Name=lseek +Name=llistxattr Disabled=0 Mode=1 Rate=1000 @@ -2403,8 +2445,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_130_DISPLAY_1] Window=6 -Index=174 -Color=43520 +Index=177 +Color=33023 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -2445,11 +2487,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_2e8f559f-b416-44ae-aecb-9b80de35ce7c +GUID=DISPLAY_31355489-3f0a-4921-b98d-159f68a41d5b [MEASUREMENT_OBJECT_131] Module=xcp_demo -Name=lsetxattr +Name=lookup_dcookie Disabled=0 Mode=1 Rate=1000 @@ -2464,8 +2506,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_131_DISPLAY_1] Window=6 -Index=173 -Color=204 +Index=176 +Color=16744576 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -2506,11 +2548,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_1f947909-5b3e-47e8-9b4e-2cf2ab10ab7c +GUID=DISPLAY_5d145823-5fd6-46b2-a56e-976442e0e0f8 [MEASUREMENT_OBJECT_132] Module=xcp_demo -Name=lsm_get_self_attr +Name=lremovexattr Disabled=0 Mode=1 Rate=1000 @@ -2525,8 +2567,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_132_DISPLAY_1] Window=6 -Index=172 -Color=28784 +Index=175 +Color=16777215 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -2567,11 +2609,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_0e3171bf-9e70-41e7-87c0-8ac4c349d6dd +GUID=DISPLAY_399f45e8-1149-48a3-8c0a-a023f5856700 [MEASUREMENT_OBJECT_133] Module=xcp_demo -Name=lsm_list_modules +Name=lseek Disabled=0 Mode=1 Rate=1000 @@ -2586,8 +2628,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_133_DISPLAY_1] Window=6 -Index=171 -Color=16755200 +Index=174 +Color=43520 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -2628,11 +2670,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_22793609-050d-4d3b-99dd-662e2c385c89 +GUID=DISPLAY_2e8f559f-b416-44ae-aecb-9b80de35ce7c [MEASUREMENT_OBJECT_134] Module=xcp_demo -Name=lsm_set_self_attr +Name=lsetxattr Disabled=0 Mode=1 Rate=1000 @@ -2647,8 +2689,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_134_DISPLAY_1] Window=6 -Index=170 -Color=16711850 +Index=173 +Color=204 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -2689,11 +2731,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_42a2a3c3-7f06-4b77-b033-a53a6afdeff6 +GUID=DISPLAY_1f947909-5b3e-47e8-9b4e-2cf2ab10ab7c [MEASUREMENT_OBJECT_135] Module=xcp_demo -Name=madvise +Name=lsm_get_self_attr Disabled=0 Mode=1 Rate=1000 @@ -2708,8 +2750,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_135_DISPLAY_1] Window=6 -Index=169 -Color=21930 +Index=172 +Color=28784 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -2750,11 +2792,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_cbe06728-6ce2-4938-8380-709f4f3e5bfb +GUID=DISPLAY_0e3171bf-9e70-41e7-87c0-8ac4c349d6dd [MEASUREMENT_OBJECT_136] Module=xcp_demo -Name=map_shadow_stack +Name=lsm_list_modules Disabled=0 Mode=1 Rate=1000 @@ -2769,8 +2811,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_136_DISPLAY_1] Window=6 -Index=168 -Color=11162965 +Index=171 +Color=16755200 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -2811,11 +2853,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_8c7c906f-4a79-4980-acf2-2911709640ba +GUID=DISPLAY_22793609-050d-4d3b-99dd-662e2c385c89 [MEASUREMENT_OBJECT_137] Module=xcp_demo -Name=mbind +Name=lsm_set_self_attr Disabled=0 Mode=1 Rate=1000 @@ -2830,8 +2872,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_137_DISPLAY_1] Window=6 -Index=167 -Color=11206655 +Index=170 +Color=16711850 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -2872,11 +2914,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_81889ea4-e027-47b4-82f0-298dde2d2a65 +GUID=DISPLAY_42a2a3c3-7f06-4b77-b033-a53a6afdeff6 [MEASUREMENT_OBJECT_138] Module=xcp_demo -Name=membarrier +Name=madvise Disabled=0 Mode=1 Rate=1000 @@ -2891,8 +2933,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_138_DISPLAY_1] Window=6 -Index=166 -Color=65450 +Index=169 +Color=21930 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -2933,11 +2975,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_c6a8fa66-858f-4089-82f9-7ad389231368 +GUID=DISPLAY_cbe06728-6ce2-4938-8380-709f4f3e5bfb [MEASUREMENT_OBJECT_139] Module=xcp_demo -Name=memfd_create +Name=map_shadow_stack Disabled=0 Mode=1 Rate=1000 @@ -2952,8 +2994,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_139_DISPLAY_1] Window=6 -Index=165 -Color=8421631 +Index=168 +Color=11162965 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -2994,12 +3036,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_5a74781a-e6ad-4978-aac9-b7f07401742e +GUID=DISPLAY_8c7c906f-4a79-4980-acf2-2911709640ba [MEASUREMENT_OBJECT_13_DISPLAY_1] Window=6 -Index=290 -Color=16711935 +Index=294 +Color=16755455 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -3040,11 +3082,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_8642eb27-81fc-4d1e-a88c-e452cfe4f668 +GUID=DISPLAY_5ace000d-b269-4435-a4ac-71d952139440 [MEASUREMENT_OBJECT_14] Module=xcp_demo -Name=add_key +Name=futex_wake Disabled=0 Mode=1 Rate=1000 @@ -3059,7 +3101,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_140] Module=xcp_demo -Name=memfd_secret +Name=mbind Disabled=0 Mode=1 Rate=1000 @@ -3074,8 +3116,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_140_DISPLAY_1] Window=6 -Index=164 -Color=43690 +Index=167 +Color=11206655 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -3116,11 +3158,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_5bbcf57e-1f98-47b0-99ed-483b1d8c5fec +GUID=DISPLAY_81889ea4-e027-47b4-82f0-298dde2d2a65 [MEASUREMENT_OBJECT_141] Module=xcp_demo -Name=migrate_pages +Name=membarrier Disabled=0 Mode=1 Rate=1000 @@ -3135,8 +3177,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_141_DISPLAY_1] Window=6 -Index=163 -Color=11184640 +Index=166 +Color=65450 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -3177,11 +3219,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_94ae92f7-dfea-42bf-bd8c-266368ac625f +GUID=DISPLAY_c6a8fa66-858f-4089-82f9-7ad389231368 [MEASUREMENT_OBJECT_142] Module=xcp_demo -Name=mincore +Name=memfd_create Disabled=0 Mode=1 Rate=1000 @@ -3196,8 +3238,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_142_DISPLAY_1] Window=6 -Index=162 -Color=16755455 +Index=165 +Color=8421631 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -3238,11 +3280,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_f00ad12b-fa60-4c7b-ba2c-9eb61ce3fb10 +GUID=DISPLAY_5a74781a-e6ad-4978-aac9-b7f07401742e [MEASUREMENT_OBJECT_143] Module=xcp_demo -Name=mkdirat +Name=memfd_secret Disabled=0 Mode=1 Rate=1000 @@ -3257,8 +3299,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_143_DISPLAY_1] Window=6 -Index=161 -Color=11184895 +Index=164 +Color=43690 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -3299,11 +3341,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_d208349f-4422-423c-95b1-91660f37524b +GUID=DISPLAY_5bbcf57e-1f98-47b0-99ed-483b1d8c5fec [MEASUREMENT_OBJECT_144] Module=xcp_demo -Name=mknodat +Name=migrate_pages Disabled=0 Mode=1 Rate=1000 @@ -3318,8 +3360,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_144_DISPLAY_1] Window=6 -Index=160 -Color=16755370 +Index=163 +Color=11184640 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -3360,11 +3402,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_4ca4df89-6538-4c66-be61-153925f2b531 +GUID=DISPLAY_94ae92f7-dfea-42bf-bd8c-266368ac625f [MEASUREMENT_OBJECT_145] Module=xcp_demo -Name=mlock +Name=mincore Disabled=0 Mode=1 Rate=1000 @@ -3379,8 +3421,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_145_DISPLAY_1] Window=6 -Index=159 -Color=11206570 +Index=162 +Color=16755455 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -3421,11 +3463,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_b40dcf54-3aa5-4ce6-ab2a-0c68479a8a26 +GUID=DISPLAY_f00ad12b-fa60-4c7b-ba2c-9eb61ce3fb10 [MEASUREMENT_OBJECT_146] Module=xcp_demo -Name=mlock2 +Name=mkdirat Disabled=0 Mode=1 Rate=1000 @@ -3440,8 +3482,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_146_DISPLAY_1] Window=6 -Index=158 -Color=65280 +Index=161 +Color=11184895 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -3482,11 +3524,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_37355fd9-ba6d-4576-8d75-065a9b786308 +GUID=DISPLAY_d208349f-4422-423c-95b1-91660f37524b [MEASUREMENT_OBJECT_147] Module=xcp_demo -Name=mlockall +Name=mknodat Disabled=0 Mode=1 Rate=1000 @@ -3501,8 +3543,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_147_DISPLAY_1] Window=6 -Index=157 -Color=255 +Index=160 +Color=16755370 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -3543,11 +3585,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_15bda73f-0d7b-409f-9c1f-572cbb26fb28 +GUID=DISPLAY_4ca4df89-6538-4c66-be61-153925f2b531 [MEASUREMENT_OBJECT_148] Module=xcp_demo -Name=mmap +Name=mlock Disabled=0 Mode=1 Rate=1000 @@ -3562,8 +3604,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_148_DISPLAY_1] Window=6 -Index=156 -Color=65535 +Index=159 +Color=11206570 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -3604,11 +3646,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_615f8a06-7cb8-4d0f-9011-9b0f7b27e8ab +GUID=DISPLAY_b40dcf54-3aa5-4ce6-ab2a-0c68479a8a26 [MEASUREMENT_OBJECT_149] Module=xcp_demo -Name=mount +Name=mlock2 Disabled=0 Mode=1 Rate=1000 @@ -3623,8 +3665,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_149_DISPLAY_1] Window=6 -Index=155 -Color=16776960 +Index=158 +Color=65280 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -3665,12 +3707,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_c050a9a9-a362-472b-8cfc-39dd70c6851a +GUID=DISPLAY_37355fd9-ba6d-4576-8d75-065a9b786308 [MEASUREMENT_OBJECT_14_DISPLAY_1] Window=6 -Index=289 -Color=33023 +Index=293 +Color=11184895 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -3711,11 +3753,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_12b656dc-61b3-43eb-be3a-5d29d54e4c56 +GUID=DISPLAY_d6e87471-d5a8-44fa-90ca-b71e571c07b8 [MEASUREMENT_OBJECT_15] Module=xcp_demo -Name=adjtimex +Name=accept Disabled=0 Mode=1 Rate=1000 @@ -3730,7 +3772,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_150] Module=xcp_demo -Name=mount_setattr +Name=mlockall Disabled=0 Mode=1 Rate=1000 @@ -3745,8 +3787,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_150_DISPLAY_1] Window=6 -Index=154 -Color=16711935 +Index=157 +Color=255 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -3787,11 +3829,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_b11879db-9d6c-406c-a7bf-db55897bceba +GUID=DISPLAY_15bda73f-0d7b-409f-9c1f-572cbb26fb28 [MEASUREMENT_OBJECT_151] Module=xcp_demo -Name=move_mount +Name=mmap Disabled=0 Mode=1 Rate=1000 @@ -3806,8 +3848,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_151_DISPLAY_1] Window=6 -Index=153 -Color=33023 +Index=156 +Color=65535 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -3848,11 +3890,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_507ac80c-e4be-40d4-aa5c-4374a9cc90e5 +GUID=DISPLAY_615f8a06-7cb8-4d0f-9011-9b0f7b27e8ab [MEASUREMENT_OBJECT_152] Module=xcp_demo -Name=move_pages +Name=mount Disabled=0 Mode=1 Rate=1000 @@ -3867,8 +3909,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_152_DISPLAY_1] Window=6 -Index=152 -Color=16744576 +Index=155 +Color=16776960 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -3909,11 +3951,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_9c7c963d-ec64-41f6-a797-700dbdc8aee3 +GUID=DISPLAY_c050a9a9-a362-472b-8cfc-39dd70c6851a [MEASUREMENT_OBJECT_153] Module=xcp_demo -Name=mprotect +Name=mount_setattr Disabled=0 Mode=1 Rate=1000 @@ -3928,8 +3970,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_153_DISPLAY_1] Window=6 -Index=151 -Color=16777215 +Index=154 +Color=16711935 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -3970,11 +4012,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_e81f0c3f-b7b5-4646-ba5d-b6795babde83 +GUID=DISPLAY_b11879db-9d6c-406c-a7bf-db55897bceba [MEASUREMENT_OBJECT_154] Module=xcp_demo -Name=mq_getsetattr +Name=move_mount Disabled=0 Mode=1 Rate=1000 @@ -3989,8 +4031,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_154_DISPLAY_1] Window=6 -Index=150 -Color=43520 +Index=153 +Color=33023 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -4031,11 +4073,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_76c0ea48-c1b5-4f14-b5c5-7e1164104b66 +GUID=DISPLAY_507ac80c-e4be-40d4-aa5c-4374a9cc90e5 [MEASUREMENT_OBJECT_155] Module=xcp_demo -Name=mq_notify +Name=move_pages Disabled=0 Mode=1 Rate=1000 @@ -4050,8 +4092,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_155_DISPLAY_1] Window=6 -Index=149 -Color=204 +Index=152 +Color=16744576 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -4092,11 +4134,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_16ff0654-6911-4a7c-9988-5978bcc17d40 +GUID=DISPLAY_9c7c963d-ec64-41f6-a797-700dbdc8aee3 [MEASUREMENT_OBJECT_156] Module=xcp_demo -Name=mq_open +Name=mprotect Disabled=0 Mode=1 Rate=1000 @@ -4111,8 +4153,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_156_DISPLAY_1] Window=6 -Index=148 -Color=28784 +Index=151 +Color=16777215 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -4153,11 +4195,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_3037cb26-5df9-4109-b356-398aa19e55b1 +GUID=DISPLAY_e81f0c3f-b7b5-4646-ba5d-b6795babde83 [MEASUREMENT_OBJECT_157] Module=xcp_demo -Name=mq_timedreceive +Name=mq_getsetattr Disabled=0 Mode=1 Rate=1000 @@ -4172,8 +4214,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_157_DISPLAY_1] Window=6 -Index=147 -Color=16755200 +Index=150 +Color=43520 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -4214,11 +4256,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_99f48aec-09e0-4d4b-8c4f-6958c8f4e848 +GUID=DISPLAY_76c0ea48-c1b5-4f14-b5c5-7e1164104b66 [MEASUREMENT_OBJECT_158] Module=xcp_demo -Name=mq_timedsend +Name=mq_notify Disabled=0 Mode=1 Rate=1000 @@ -4233,8 +4275,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_158_DISPLAY_1] Window=6 -Index=146 -Color=16711850 +Index=149 +Color=204 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -4275,11 +4317,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_9aa315de-4023-46c9-9113-fd944df2587b +GUID=DISPLAY_16ff0654-6911-4a7c-9988-5978bcc17d40 [MEASUREMENT_OBJECT_159] Module=xcp_demo -Name=mq_unlink +Name=mq_open Disabled=0 Mode=1 Rate=1000 @@ -4294,8 +4336,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_159_DISPLAY_1] Window=6 -Index=145 -Color=21930 +Index=148 +Color=28784 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -4336,12 +4378,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_07872b7e-e87e-41a7-92c9-85535e4fc410 +GUID=DISPLAY_3037cb26-5df9-4109-b356-398aa19e55b1 [MEASUREMENT_OBJECT_15_DISPLAY_1] Window=6 -Index=288 -Color=16744576 +Index=292 +Color=65535 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -4382,11 +4424,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_ba907ae1-156b-4e7f-85bb-cf74c39b4a70 +GUID=DISPLAY_e16f4317-c8ec-4389-975b-d5b513cc20c6 [MEASUREMENT_OBJECT_16] Module=xcp_demo -Name=arch_specific_syscall +Name=accept4 Disabled=0 Mode=1 Rate=1000 @@ -4401,7 +4443,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_160] Module=xcp_demo -Name=mremap +Name=mq_timedreceive Disabled=0 Mode=1 Rate=1000 @@ -4416,8 +4458,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_160_DISPLAY_1] Window=6 -Index=144 -Color=11162965 +Index=147 +Color=16755200 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -4458,11 +4500,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_fd4a71c6-0fb9-4e84-90a5-2867431c67d5 +GUID=DISPLAY_99f48aec-09e0-4d4b-8c4f-6958c8f4e848 [MEASUREMENT_OBJECT_161] Module=xcp_demo -Name=mseal +Name=mq_timedsend Disabled=0 Mode=1 Rate=1000 @@ -4477,8 +4519,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_161_DISPLAY_1] Window=6 -Index=143 -Color=11206655 +Index=146 +Color=16711850 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -4519,11 +4561,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_ebe7f186-dc78-471c-8d88-66e0e4402480 +GUID=DISPLAY_9aa315de-4023-46c9-9113-fd944df2587b [MEASUREMENT_OBJECT_162] Module=xcp_demo -Name=msgctl +Name=mq_unlink Disabled=0 Mode=1 Rate=1000 @@ -4538,8 +4580,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_162_DISPLAY_1] Window=6 -Index=142 -Color=65450 +Index=145 +Color=21930 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -4580,11 +4622,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_0883d446-57fe-4b77-b7a2-6af64b29fe64 +GUID=DISPLAY_07872b7e-e87e-41a7-92c9-85535e4fc410 [MEASUREMENT_OBJECT_163] Module=xcp_demo -Name=msgget +Name=mremap Disabled=0 Mode=1 Rate=1000 @@ -4599,8 +4641,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_163_DISPLAY_1] Window=6 -Index=141 -Color=8421631 +Index=144 +Color=11162965 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -4641,11 +4683,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_e5658562-1fa2-42cd-af30-66fd9321d1ea +GUID=DISPLAY_fd4a71c6-0fb9-4e84-90a5-2867431c67d5 [MEASUREMENT_OBJECT_164] Module=xcp_demo -Name=msgrcv +Name=mseal Disabled=0 Mode=1 Rate=1000 @@ -4660,8 +4702,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_164_DISPLAY_1] Window=6 -Index=140 -Color=43690 +Index=143 +Color=11206655 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -4702,11 +4744,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_5cfa05c7-c169-4e23-9d2e-3c889c2b6996 +GUID=DISPLAY_ebe7f186-dc78-471c-8d88-66e0e4402480 [MEASUREMENT_OBJECT_165] Module=xcp_demo -Name=msgsnd +Name=msgctl Disabled=0 Mode=1 Rate=1000 @@ -4721,8 +4763,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_165_DISPLAY_1] Window=6 -Index=139 -Color=11184640 +Index=142 +Color=65450 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -4763,11 +4805,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_16967996-0a79-4e9d-a35e-70631f18dd18 +GUID=DISPLAY_0883d446-57fe-4b77-b7a2-6af64b29fe64 [MEASUREMENT_OBJECT_166] Module=xcp_demo -Name=msync +Name=msgget Disabled=0 Mode=1 Rate=1000 @@ -4782,8 +4824,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_166_DISPLAY_1] Window=6 -Index=138 -Color=16755455 +Index=141 +Color=8421631 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -4824,11 +4866,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_ff3f0589-73dd-4f0c-8ccb-c446e615cc23 +GUID=DISPLAY_e5658562-1fa2-42cd-af30-66fd9321d1ea [MEASUREMENT_OBJECT_167] Module=xcp_demo -Name=munlock +Name=msgrcv Disabled=0 Mode=1 Rate=1000 @@ -4843,8 +4885,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_167_DISPLAY_1] Window=6 -Index=137 -Color=11184895 +Index=140 +Color=43690 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -4885,11 +4927,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_db49e7d6-96cd-458e-bd5e-2330a93f24c7 +GUID=DISPLAY_5cfa05c7-c169-4e23-9d2e-3c889c2b6996 [MEASUREMENT_OBJECT_168] Module=xcp_demo -Name=munlockall +Name=msgsnd Disabled=0 Mode=1 Rate=1000 @@ -4904,8 +4946,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_168_DISPLAY_1] Window=6 -Index=136 -Color=16755370 +Index=139 +Color=11184640 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -4946,11 +4988,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_0dbe759e-efe2-443e-a153-d48242a27753 +GUID=DISPLAY_16967996-0a79-4e9d-a35e-70631f18dd18 [MEASUREMENT_OBJECT_169] Module=xcp_demo -Name=munmap +Name=msync Disabled=0 Mode=1 Rate=1000 @@ -4965,8 +5007,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_169_DISPLAY_1] Window=6 -Index=135 -Color=11206570 +Index=138 +Color=16755455 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -5007,12 +5049,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_55968484-eebe-429d-8e1c-0d5bf5ca1970 +GUID=DISPLAY_ff3f0589-73dd-4f0c-8ccb-c446e615cc23 [MEASUREMENT_OBJECT_16_DISPLAY_1] Window=6 -Index=287 -Color=16777215 +Index=291 +Color=16776960 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -5053,11 +5095,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_9fd82ca2-6b66-4450-b566-aa8b72fa851d +GUID=DISPLAY_8da67a8e-941b-4eca-8413-ffdbf97ad0a6 [MEASUREMENT_OBJECT_17] Module=xcp_demo -Name=bind +Name=acct Disabled=0 Mode=1 Rate=1000 @@ -5072,7 +5114,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_170] Module=xcp_demo -Name=nfsservctl +Name=munlock Disabled=0 Mode=1 Rate=1000 @@ -5087,8 +5129,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_170_DISPLAY_1] Window=6 -Index=134 -Color=255 +Index=137 +Color=11184895 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -5129,11 +5171,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_c980d545-0268-431d-8571-4ca586ae4b53 +GUID=DISPLAY_db49e7d6-96cd-458e-bd5e-2330a93f24c7 [MEASUREMENT_OBJECT_171] Module=xcp_demo -Name=open_tree +Name=munlockall Disabled=0 Mode=1 Rate=1000 @@ -5148,8 +5190,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_171_DISPLAY_1] Window=6 -Index=133 -Color=65535 +Index=136 +Color=16755370 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -5190,11 +5232,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_490b192e-ef89-4592-95b5-4b26ced0e35a +GUID=DISPLAY_0dbe759e-efe2-443e-a153-d48242a27753 [MEASUREMENT_OBJECT_172] Module=xcp_demo -Name=openat +Name=munmap Disabled=0 Mode=1 Rate=1000 @@ -5209,8 +5251,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_172_DISPLAY_1] Window=6 -Index=132 -Color=16776960 +Index=135 +Color=11206570 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -5251,11 +5293,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_6ec589b2-1db3-48b2-aee8-ac2a83f3d2f1 +GUID=DISPLAY_55968484-eebe-429d-8e1c-0d5bf5ca1970 [MEASUREMENT_OBJECT_173] Module=xcp_demo -Name=openat2 +Name=nfsservctl Disabled=0 Mode=1 Rate=1000 @@ -5270,8 +5312,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_173_DISPLAY_1] Window=6 -Index=131 -Color=16711935 +Index=134 +Color=255 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -5312,11 +5354,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_f1b800e1-8969-41aa-88cc-d30fcbb5afe4 +GUID=DISPLAY_c980d545-0268-431d-8571-4ca586ae4b53 [MEASUREMENT_OBJECT_174] Module=xcp_demo -Name=perf_event_open +Name=open_tree Disabled=0 Mode=1 Rate=1000 @@ -5331,8 +5373,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_174_DISPLAY_1] Window=6 -Index=130 -Color=33023 +Index=133 +Color=65535 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -5373,11 +5415,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_4a06a5be-2382-431a-ae00-541c3d0ce68d +GUID=DISPLAY_490b192e-ef89-4592-95b5-4b26ced0e35a [MEASUREMENT_OBJECT_175] Module=xcp_demo -Name=personality +Name=openat Disabled=0 Mode=1 Rate=1000 @@ -5392,8 +5434,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_175_DISPLAY_1] Window=6 -Index=129 -Color=16744576 +Index=132 +Color=16776960 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -5434,11 +5476,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_9f410d1d-9ee7-4cc0-b57c-e11d67daf8fb +GUID=DISPLAY_6ec589b2-1db3-48b2-aee8-ac2a83f3d2f1 [MEASUREMENT_OBJECT_176] Module=xcp_demo -Name=pidfd_getfd +Name=openat2 Disabled=0 Mode=1 Rate=1000 @@ -5453,8 +5495,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_176_DISPLAY_1] Window=6 -Index=128 -Color=16777215 +Index=131 +Color=16711935 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -5495,11 +5537,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_0ae9a517-5803-4ab3-b421-0b5e0338e265 +GUID=DISPLAY_f1b800e1-8969-41aa-88cc-d30fcbb5afe4 [MEASUREMENT_OBJECT_177] Module=xcp_demo -Name=pidfd_open +Name=perf_event_open Disabled=0 Mode=1 Rate=1000 @@ -5514,8 +5556,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_177_DISPLAY_1] Window=6 -Index=127 -Color=43520 +Index=130 +Color=33023 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -5556,11 +5598,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_93590d80-f7c0-47c2-9d2a-e09d0359490c +GUID=DISPLAY_4a06a5be-2382-431a-ae00-541c3d0ce68d [MEASUREMENT_OBJECT_178] Module=xcp_demo -Name=pidfd_send_signal +Name=personality Disabled=0 Mode=1 Rate=1000 @@ -5575,8 +5617,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_178_DISPLAY_1] Window=6 -Index=126 -Color=204 +Index=129 +Color=16744576 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -5617,11 +5659,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_a4e6b498-e150-4b4c-8b66-bc33c5e0512b +GUID=DISPLAY_9f410d1d-9ee7-4cc0-b57c-e11d67daf8fb [MEASUREMENT_OBJECT_179] Module=xcp_demo -Name=pipe2 +Name=pidfd_getfd Disabled=0 Mode=1 Rate=1000 @@ -5636,8 +5678,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_179_DISPLAY_1] Window=6 -Index=125 -Color=28784 +Index=128 +Color=16777215 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -5678,12 +5720,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_b4a57bf6-a0f8-4401-9265-bfef23823f08 +GUID=DISPLAY_0ae9a517-5803-4ab3-b421-0b5e0338e265 [MEASUREMENT_OBJECT_17_DISPLAY_1] Window=6 -Index=286 -Color=43520 +Index=290 +Color=16711935 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -5724,11 +5766,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_b5af0898-4a68-4d9e-a8ed-8a318f99c010 +GUID=DISPLAY_8642eb27-81fc-4d1e-a88c-e452cfe4f668 [MEASUREMENT_OBJECT_18] Module=xcp_demo -Name=bpf +Name=add_key Disabled=0 Mode=1 Rate=1000 @@ -5743,7 +5785,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_180] Module=xcp_demo -Name=pivot_root +Name=pidfd_open Disabled=0 Mode=1 Rate=1000 @@ -5758,8 +5800,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_180_DISPLAY_1] Window=6 -Index=124 -Color=16755200 +Index=127 +Color=43520 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -5800,11 +5842,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_617c6adb-4235-4d63-8bb5-fa0f6a6cdd71 +GUID=DISPLAY_93590d80-f7c0-47c2-9d2a-e09d0359490c [MEASUREMENT_OBJECT_181] Module=xcp_demo -Name=pkey_alloc +Name=pidfd_send_signal Disabled=0 Mode=1 Rate=1000 @@ -5819,8 +5861,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_181_DISPLAY_1] Window=6 -Index=123 -Color=16711850 +Index=126 +Color=204 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -5861,11 +5903,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_0888699b-9ed6-436e-8ea5-0ac3b5a1b581 +GUID=DISPLAY_a4e6b498-e150-4b4c-8b66-bc33c5e0512b [MEASUREMENT_OBJECT_182] Module=xcp_demo -Name=pkey_free +Name=pipe2 Disabled=0 Mode=1 Rate=1000 @@ -5880,8 +5922,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_182_DISPLAY_1] Window=6 -Index=122 -Color=21930 +Index=125 +Color=28784 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -5922,11 +5964,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_02b2144b-8af0-49e7-99e1-2ff0046a8751 +GUID=DISPLAY_b4a57bf6-a0f8-4401-9265-bfef23823f08 [MEASUREMENT_OBJECT_183] Module=xcp_demo -Name=pkey_mprotect +Name=pivot_root Disabled=0 Mode=1 Rate=1000 @@ -5941,8 +5983,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_183_DISPLAY_1] Window=6 -Index=121 -Color=11162965 +Index=124 +Color=16755200 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -5983,11 +6025,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_936c8e1e-dbf4-4cfd-a0bb-704c9366a151 +GUID=DISPLAY_617c6adb-4235-4d63-8bb5-fa0f6a6cdd71 [MEASUREMENT_OBJECT_184] Module=xcp_demo -Name=ppoll +Name=pkey_alloc Disabled=0 Mode=1 Rate=1000 @@ -6002,8 +6044,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_184_DISPLAY_1] Window=6 -Index=120 -Color=11206655 +Index=123 +Color=16711850 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -6044,11 +6086,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_331c3dad-5832-4534-a777-db70a8b255b7 +GUID=DISPLAY_0888699b-9ed6-436e-8ea5-0ac3b5a1b581 [MEASUREMENT_OBJECT_185] Module=xcp_demo -Name=prctl +Name=pkey_free Disabled=0 Mode=1 Rate=1000 @@ -6063,8 +6105,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_185_DISPLAY_1] Window=6 -Index=119 -Color=65450 +Index=122 +Color=21930 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -6105,11 +6147,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_59d96867-aed0-4799-a684-e717c53e3900 +GUID=DISPLAY_02b2144b-8af0-49e7-99e1-2ff0046a8751 [MEASUREMENT_OBJECT_186] Module=xcp_demo -Name=pread64 +Name=pkey_mprotect Disabled=0 Mode=1 Rate=1000 @@ -6124,8 +6166,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_186_DISPLAY_1] Window=6 -Index=118 -Color=8421631 +Index=121 +Color=11162965 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -6166,11 +6208,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_75b98e2d-f749-4485-a840-475ced0e8ad2 +GUID=DISPLAY_936c8e1e-dbf4-4cfd-a0bb-704c9366a151 [MEASUREMENT_OBJECT_187] Module=xcp_demo -Name=preadv +Name=ppoll Disabled=0 Mode=1 Rate=1000 @@ -6185,8 +6227,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_187_DISPLAY_1] Window=6 -Index=117 -Color=43690 +Index=120 +Color=11206655 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -6227,11 +6269,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_27566b88-f2fc-459b-bcc4-da1c1ed4b73b +GUID=DISPLAY_331c3dad-5832-4534-a777-db70a8b255b7 [MEASUREMENT_OBJECT_188] Module=xcp_demo -Name=preadv2 +Name=prctl Disabled=0 Mode=1 Rate=1000 @@ -6246,8 +6288,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_188_DISPLAY_1] Window=6 -Index=116 -Color=11184640 +Index=119 +Color=65450 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -6288,11 +6330,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_4ecc9f3d-9af2-4cb9-8fe4-566ad823310b +GUID=DISPLAY_59d96867-aed0-4799-a684-e717c53e3900 [MEASUREMENT_OBJECT_189] Module=xcp_demo -Name=process_madvise +Name=pread64 Disabled=0 Mode=1 Rate=1000 @@ -6307,8 +6349,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_189_DISPLAY_1] Window=6 -Index=115 -Color=16755455 +Index=118 +Color=8421631 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -6349,12 +6391,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_bf213d02-5c78-4b6a-8de7-2963779cf445 +GUID=DISPLAY_75b98e2d-f749-4485-a840-475ced0e8ad2 [MEASUREMENT_OBJECT_18_DISPLAY_1] Window=6 -Index=285 -Color=204 +Index=289 +Color=33023 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -6395,11 +6437,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_f25c93fe-adc1-45df-a79b-39425bdb5dd2 +GUID=DISPLAY_12b656dc-61b3-43eb-be3a-5d29d54e4c56 [MEASUREMENT_OBJECT_19] Module=xcp_demo -Name=brk +Name=adjtimex Disabled=0 Mode=1 Rate=1000 @@ -6414,7 +6456,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_190] Module=xcp_demo -Name=process_mrelease +Name=preadv Disabled=0 Mode=1 Rate=1000 @@ -6429,8 +6471,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_190_DISPLAY_1] Window=6 -Index=114 -Color=11184895 +Index=117 +Color=43690 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -6471,11 +6513,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_d909d722-4779-49c5-ab0b-f452905472fb +GUID=DISPLAY_27566b88-f2fc-459b-bcc4-da1c1ed4b73b [MEASUREMENT_OBJECT_191] Module=xcp_demo -Name=pselect6 +Name=preadv2 Disabled=0 Mode=1 Rate=1000 @@ -6490,8 +6532,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_191_DISPLAY_1] Window=6 -Index=113 -Color=16755370 +Index=116 +Color=11184640 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -6532,11 +6574,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_31f180f5-f7fc-42b6-9ca5-779a1828a277 +GUID=DISPLAY_4ecc9f3d-9af2-4cb9-8fe4-566ad823310b [MEASUREMENT_OBJECT_192] Module=xcp_demo -Name=ptrace +Name=process_madvise Disabled=0 Mode=1 Rate=1000 @@ -6551,8 +6593,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_192_DISPLAY_1] Window=6 -Index=112 -Color=11206570 +Index=115 +Color=16755455 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -6593,11 +6635,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_3bd14d87-92e7-4291-a09f-82aed6a35ac4 +GUID=DISPLAY_bf213d02-5c78-4b6a-8de7-2963779cf445 [MEASUREMENT_OBJECT_193] Module=xcp_demo -Name=pwrite64 +Name=process_mrelease Disabled=0 Mode=1 Rate=1000 @@ -6612,8 +6654,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_193_DISPLAY_1] Window=6 -Index=111 -Color=65280 +Index=114 +Color=11184895 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -6654,11 +6696,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_b540ba56-379e-4ff9-ad73-a942fc3f3ea9 +GUID=DISPLAY_d909d722-4779-49c5-ab0b-f452905472fb [MEASUREMENT_OBJECT_194] Module=xcp_demo -Name=pwritev +Name=pselect6 Disabled=0 Mode=1 Rate=1000 @@ -6673,8 +6715,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_194_DISPLAY_1] Window=6 -Index=110 -Color=255 +Index=113 +Color=16755370 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -6715,11 +6757,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_f2d327aa-0b93-4a9b-ac06-1f94813d74b8 +GUID=DISPLAY_31f180f5-f7fc-42b6-9ca5-779a1828a277 [MEASUREMENT_OBJECT_195] Module=xcp_demo -Name=pwritev2 +Name=ptrace Disabled=0 Mode=1 Rate=1000 @@ -6734,8 +6776,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_195_DISPLAY_1] Window=6 -Index=109 -Color=65535 +Index=112 +Color=11206570 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -6776,11 +6818,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_a0704216-9f38-4488-ad8f-a416a6fbe03d +GUID=DISPLAY_3bd14d87-92e7-4291-a09f-82aed6a35ac4 [MEASUREMENT_OBJECT_196] Module=xcp_demo -Name=quotactl +Name=pwrite64 Disabled=0 Mode=1 Rate=1000 @@ -6795,8 +6837,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_196_DISPLAY_1] Window=6 -Index=108 -Color=16776960 +Index=111 +Color=65280 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -6837,11 +6879,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_58731b7d-c9f0-4894-a831-027b7226d956 +GUID=DISPLAY_b540ba56-379e-4ff9-ad73-a942fc3f3ea9 [MEASUREMENT_OBJECT_197] Module=xcp_demo -Name=quotactl_fd +Name=pwritev Disabled=0 Mode=1 Rate=1000 @@ -6856,8 +6898,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_197_DISPLAY_1] Window=6 -Index=107 -Color=16711935 +Index=110 +Color=255 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -6898,11 +6940,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_bdb166ad-9b28-42cd-87e6-ca55d36d4c4c +GUID=DISPLAY_f2d327aa-0b93-4a9b-ac06-1f94813d74b8 [MEASUREMENT_OBJECT_198] Module=xcp_demo -Name=read +Name=pwritev2 Disabled=0 Mode=1 Rate=1000 @@ -6917,8 +6959,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_198_DISPLAY_1] Window=6 -Index=106 -Color=33023 +Index=109 +Color=65535 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -6959,11 +7001,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_a8675184-43a7-4efd-9627-9947d00b9149 +GUID=DISPLAY_a0704216-9f38-4488-ad8f-a416a6fbe03d [MEASUREMENT_OBJECT_199] Module=xcp_demo -Name=readahead +Name=quotactl Disabled=0 Mode=1 Rate=1000 @@ -6978,8 +7020,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_199_DISPLAY_1] Window=6 -Index=105 -Color=16744576 +Index=108 +Color=16776960 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -7020,12 +7062,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_2860d243-38c0-4566-88b4-190b2e2b5bd1 +GUID=DISPLAY_58731b7d-c9f0-4894-a831-027b7226d956 [MEASUREMENT_OBJECT_19_DISPLAY_1] Window=6 -Index=284 -Color=28784 +Index=288 +Color=16744576 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -7066,7 +7108,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_e1f4735b-3c39-4c81-863a-fd4ac27bd3e5 +GUID=DISPLAY_ba907ae1-156b-4e7f-85bb-cf74c39b4a70 [MEASUREMENT_OBJECT_1_DISPLAY_1] Window=5 @@ -7094,7 +7136,7 @@ LineWidth=1 Precision=-2 Digits=6 Enabled=1 -StoredFocused=0 +StoredFocused=1 SublMask=1 MeaSublMask=3 LockScaling=0 @@ -7118,7 +7160,7 @@ GUID=DISPLAY_d161ea39-782d-4f67-9803-02826fe05d3e Module=xcp_demo Name=syscall_rate Disabled=0 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -7131,7 +7173,7 @@ DisplayCount=2 [MEASUREMENT_OBJECT_20] Module=xcp_demo -Name=cachestat +Name=arch_specific_syscall Disabled=0 Mode=1 Rate=1000 @@ -7146,7 +7188,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_200] Module=xcp_demo -Name=readlinkat +Name=quotactl_fd Disabled=0 Mode=1 Rate=1000 @@ -7161,8 +7203,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_200_DISPLAY_1] Window=6 -Index=104 -Color=16777215 +Index=107 +Color=16711935 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -7203,11 +7245,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_d5efd0b6-52a9-42d2-a213-0db2c4bd8b7c +GUID=DISPLAY_bdb166ad-9b28-42cd-87e6-ca55d36d4c4c [MEASUREMENT_OBJECT_201] Module=xcp_demo -Name=readv +Name=read Disabled=0 Mode=1 Rate=1000 @@ -7222,8 +7264,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_201_DISPLAY_1] Window=6 -Index=103 -Color=43520 +Index=106 +Color=33023 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -7264,11 +7306,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_ab3ba013-0879-422d-b623-d31e52fa73da +GUID=DISPLAY_a8675184-43a7-4efd-9627-9947d00b9149 [MEASUREMENT_OBJECT_202] Module=xcp_demo -Name=reboot +Name=readahead Disabled=0 Mode=1 Rate=1000 @@ -7283,8 +7325,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_202_DISPLAY_1] Window=6 -Index=102 -Color=204 +Index=105 +Color=16744576 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -7325,11 +7367,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_5c9edf14-b997-4f2b-ba44-603a1fb1e6fd +GUID=DISPLAY_2860d243-38c0-4566-88b4-190b2e2b5bd1 [MEASUREMENT_OBJECT_203] Module=xcp_demo -Name=recvmmsg +Name=readlinkat Disabled=0 Mode=1 Rate=1000 @@ -7344,8 +7386,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_203_DISPLAY_1] Window=6 -Index=101 -Color=16755200 +Index=104 +Color=16777215 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -7386,11 +7428,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_476b1b1d-c13b-4a0c-bad4-8de1fd86d94d +GUID=DISPLAY_d5efd0b6-52a9-42d2-a213-0db2c4bd8b7c [MEASUREMENT_OBJECT_204] Module=xcp_demo -Name=recvmsg +Name=readv Disabled=0 Mode=1 Rate=1000 @@ -7405,8 +7447,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_204_DISPLAY_1] Window=6 -Index=299 -Color=16711850 +Index=103 +Color=43520 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -7447,11 +7489,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_0af3e1e9-b660-44e0-ac92-d5a443852052 +GUID=DISPLAY_ab3ba013-0879-422d-b623-d31e52fa73da [MEASUREMENT_OBJECT_205] Module=xcp_demo -Name=remap_file_pages +Name=reboot Disabled=0 Mode=1 Rate=1000 @@ -7466,8 +7508,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_205_DISPLAY_1] Window=6 -Index=100 -Color=21930 +Index=102 +Color=204 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -7508,11 +7550,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_b0708d23-0325-469e-a747-ccd5f6cd176f +GUID=DISPLAY_5c9edf14-b997-4f2b-ba44-603a1fb1e6fd [MEASUREMENT_OBJECT_206] Module=xcp_demo -Name=removexattr +Name=recvmmsg Disabled=0 Mode=1 Rate=1000 @@ -7527,8 +7569,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_206_DISPLAY_1] Window=6 -Index=99 -Color=11162965 +Index=101 +Color=16755200 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -7569,11 +7611,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_81696269-0460-453d-b504-d17b8d719048 +GUID=DISPLAY_476b1b1d-c13b-4a0c-bad4-8de1fd86d94d [MEASUREMENT_OBJECT_207] Module=xcp_demo -Name=renameat +Name=recvmsg Disabled=0 Mode=1 Rate=1000 @@ -7588,8 +7630,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_207_DISPLAY_1] Window=6 -Index=98 -Color=11206655 +Index=299 +Color=16711850 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -7630,11 +7672,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_824a0d5f-e2cd-4ada-8e81-c671033e4268 +GUID=DISPLAY_0af3e1e9-b660-44e0-ac92-d5a443852052 [MEASUREMENT_OBJECT_208] Module=xcp_demo -Name=renameat2 +Name=remap_file_pages Disabled=0 Mode=1 Rate=1000 @@ -7649,8 +7691,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_208_DISPLAY_1] Window=6 -Index=97 -Color=65450 +Index=100 +Color=21930 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -7691,11 +7733,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_bae91492-4d2c-4c98-9d64-f8f37eb25b0e +GUID=DISPLAY_b0708d23-0325-469e-a747-ccd5f6cd176f [MEASUREMENT_OBJECT_209] Module=xcp_demo -Name=request_key +Name=removexattr Disabled=0 Mode=1 Rate=1000 @@ -7710,8 +7752,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_209_DISPLAY_1] Window=6 -Index=96 -Color=8421631 +Index=99 +Color=11162965 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -7752,12 +7794,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_c70dc4db-a988-4d63-a2e6-ed951c511341 +GUID=DISPLAY_81696269-0460-453d-b504-d17b8d719048 [MEASUREMENT_OBJECT_20_DISPLAY_1] Window=6 -Index=283 -Color=16755200 +Index=287 +Color=16777215 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -7798,11 +7840,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_c6a94286-a97a-4f7e-84f7-9fcc4af5119a +GUID=DISPLAY_9fd82ca2-6b66-4450-b566-aa8b72fa851d [MEASUREMENT_OBJECT_21] Module=xcp_demo -Name=capget +Name=bind Disabled=0 Mode=1 Rate=1000 @@ -7817,7 +7859,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_210] Module=xcp_demo -Name=restart_syscall +Name=renameat Disabled=0 Mode=1 Rate=1000 @@ -7832,8 +7874,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_210_DISPLAY_1] Window=6 -Index=95 -Color=43690 +Index=98 +Color=11206655 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -7874,11 +7916,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_acca520b-91d3-4ac6-965e-a3a8bb3d0e78 +GUID=DISPLAY_824a0d5f-e2cd-4ada-8e81-c671033e4268 [MEASUREMENT_OBJECT_211] Module=xcp_demo -Name=rseq +Name=renameat2 Disabled=0 Mode=1 Rate=1000 @@ -7893,8 +7935,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_211_DISPLAY_1] Window=6 -Index=94 -Color=11184640 +Index=97 +Color=65450 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -7935,11 +7977,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_2b105cbf-5107-4fe8-b65c-8471cc077660 +GUID=DISPLAY_bae91492-4d2c-4c98-9d64-f8f37eb25b0e [MEASUREMENT_OBJECT_212] Module=xcp_demo -Name=rt_sigaction +Name=request_key Disabled=0 Mode=1 Rate=1000 @@ -7954,8 +7996,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_212_DISPLAY_1] Window=6 -Index=93 -Color=16755455 +Index=96 +Color=8421631 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -7996,11 +8038,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_2c529ba0-8acd-41cd-bf99-987a9b974193 +GUID=DISPLAY_c70dc4db-a988-4d63-a2e6-ed951c511341 [MEASUREMENT_OBJECT_213] Module=xcp_demo -Name=rt_sigpending +Name=restart_syscall Disabled=0 Mode=1 Rate=1000 @@ -8015,8 +8057,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_213_DISPLAY_1] Window=6 -Index=92 -Color=11184895 +Index=95 +Color=43690 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -8057,11 +8099,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_21719de6-f42b-4cd3-9011-d7622ef556aa +GUID=DISPLAY_acca520b-91d3-4ac6-965e-a3a8bb3d0e78 [MEASUREMENT_OBJECT_214] Module=xcp_demo -Name=rt_sigprocmask +Name=rseq Disabled=0 Mode=1 Rate=1000 @@ -8076,8 +8118,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_214_DISPLAY_1] Window=6 -Index=91 -Color=16755370 +Index=94 +Color=11184640 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -8118,11 +8160,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_1f4d9873-17be-4a72-b08d-bcd12a96fd25 +GUID=DISPLAY_2b105cbf-5107-4fe8-b65c-8471cc077660 [MEASUREMENT_OBJECT_215] Module=xcp_demo -Name=rt_sigqueueinfo +Name=rt_sigaction Disabled=0 Mode=1 Rate=1000 @@ -8137,8 +8179,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_215_DISPLAY_1] Window=6 -Index=90 -Color=11206570 +Index=93 +Color=16755455 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -8179,11 +8221,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_1364bbe3-64c9-42ff-8740-b294bac03c0a +GUID=DISPLAY_2c529ba0-8acd-41cd-bf99-987a9b974193 [MEASUREMENT_OBJECT_216] Module=xcp_demo -Name=rt_sigreturn +Name=rt_sigpending Disabled=0 Mode=1 Rate=1000 @@ -8198,8 +8240,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_216_DISPLAY_1] Window=6 -Index=89 -Color=65280 +Index=92 +Color=11184895 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -8240,11 +8282,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_cb76e3e2-c4d4-4b45-813e-888856f9ae54 +GUID=DISPLAY_21719de6-f42b-4cd3-9011-d7622ef556aa [MEASUREMENT_OBJECT_217] Module=xcp_demo -Name=rt_sigsuspend +Name=rt_sigprocmask Disabled=0 Mode=1 Rate=1000 @@ -8259,8 +8301,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_217_DISPLAY_1] Window=6 -Index=88 -Color=255 +Index=91 +Color=16755370 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -8301,11 +8343,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_c2af4b5f-7517-41bb-b886-e493057d2d85 +GUID=DISPLAY_1f4d9873-17be-4a72-b08d-bcd12a96fd25 [MEASUREMENT_OBJECT_218] Module=xcp_demo -Name=rt_sigtimedwait +Name=rt_sigqueueinfo Disabled=0 Mode=1 Rate=1000 @@ -8320,8 +8362,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_218_DISPLAY_1] Window=6 -Index=87 -Color=65535 +Index=90 +Color=11206570 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -8362,11 +8404,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_b515642f-ef7a-4ffc-ad94-9ff6a9a1e46e +GUID=DISPLAY_1364bbe3-64c9-42ff-8740-b294bac03c0a [MEASUREMENT_OBJECT_219] Module=xcp_demo -Name=rt_tgsigqueueinfo +Name=rt_sigreturn Disabled=0 Mode=1 Rate=1000 @@ -8381,8 +8423,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_219_DISPLAY_1] Window=6 -Index=86 -Color=16776960 +Index=89 +Color=65280 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -8423,12 +8465,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_654d9494-b52d-48c7-8ab3-17acaca7f6d0 +GUID=DISPLAY_cb76e3e2-c4d4-4b45-813e-888856f9ae54 [MEASUREMENT_OBJECT_21_DISPLAY_1] Window=6 -Index=282 -Color=16711850 +Index=286 +Color=43520 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -8469,11 +8511,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_98b20d81-9d11-4eb6-adb1-48e83254fe87 +GUID=DISPLAY_b5af0898-4a68-4d9e-a8ed-8a318f99c010 [MEASUREMENT_OBJECT_22] Module=xcp_demo -Name=capset +Name=bpf Disabled=0 Mode=1 Rate=1000 @@ -8488,7 +8530,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_220] Module=xcp_demo -Name=sched_get_priority_max +Name=rt_sigsuspend Disabled=0 Mode=1 Rate=1000 @@ -8503,8 +8545,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_220_DISPLAY_1] Window=6 -Index=85 -Color=16711935 +Index=88 +Color=255 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -8545,11 +8587,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_475dd813-e424-4760-9565-168ea6a4ef6c +GUID=DISPLAY_c2af4b5f-7517-41bb-b886-e493057d2d85 [MEASUREMENT_OBJECT_221] Module=xcp_demo -Name=sched_get_priority_min +Name=rt_sigtimedwait Disabled=0 Mode=1 Rate=1000 @@ -8564,8 +8606,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_221_DISPLAY_1] Window=6 -Index=84 -Color=33023 +Index=87 +Color=65535 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -8606,11 +8648,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_27d90984-92b7-44e0-a4f0-02e6621ab911 +GUID=DISPLAY_b515642f-ef7a-4ffc-ad94-9ff6a9a1e46e [MEASUREMENT_OBJECT_222] Module=xcp_demo -Name=sched_getaffinity +Name=rt_tgsigqueueinfo Disabled=0 Mode=1 Rate=1000 @@ -8625,8 +8667,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_222_DISPLAY_1] Window=6 -Index=83 -Color=16744576 +Index=86 +Color=16776960 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -8667,11 +8709,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_838e253a-84b5-40f8-8ed4-eddb1f162c23 +GUID=DISPLAY_654d9494-b52d-48c7-8ab3-17acaca7f6d0 [MEASUREMENT_OBJECT_223] Module=xcp_demo -Name=sched_getparam +Name=sched_get_priority_max Disabled=0 Mode=1 Rate=1000 @@ -8686,8 +8728,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_223_DISPLAY_1] Window=6 -Index=82 -Color=16777215 +Index=85 +Color=16711935 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -8728,11 +8770,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_24560282-6722-412b-b0b1-740a44792e77 +GUID=DISPLAY_475dd813-e424-4760-9565-168ea6a4ef6c [MEASUREMENT_OBJECT_224] Module=xcp_demo -Name=sched_getscheduler +Name=sched_get_priority_min Disabled=0 Mode=1 Rate=1000 @@ -8747,8 +8789,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_224_DISPLAY_1] Window=6 -Index=81 -Color=43520 +Index=84 +Color=33023 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -8789,11 +8831,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_7326fc18-5ff0-4878-99bd-883a18ffb8da +GUID=DISPLAY_27d90984-92b7-44e0-a4f0-02e6621ab911 [MEASUREMENT_OBJECT_225] Module=xcp_demo -Name=sched_rr_get_interval +Name=sched_getaffinity Disabled=0 Mode=1 Rate=1000 @@ -8808,8 +8850,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_225_DISPLAY_1] Window=6 -Index=80 -Color=204 +Index=83 +Color=16744576 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -8850,11 +8892,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_ff418645-cbe9-4ab5-bc8b-d8c6ad1b8c53 +GUID=DISPLAY_838e253a-84b5-40f8-8ed4-eddb1f162c23 [MEASUREMENT_OBJECT_226] Module=xcp_demo -Name=sched_setaffinity +Name=sched_getparam Disabled=0 Mode=1 Rate=1000 @@ -8869,8 +8911,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_226_DISPLAY_1] Window=6 -Index=79 -Color=28784 +Index=82 +Color=16777215 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -8911,11 +8953,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_ee1dae61-364b-4dfb-bb2a-b0f48cf72c2f +GUID=DISPLAY_24560282-6722-412b-b0b1-740a44792e77 [MEASUREMENT_OBJECT_227] Module=xcp_demo -Name=sched_setparam +Name=sched_getscheduler Disabled=0 Mode=1 Rate=1000 @@ -8930,8 +8972,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_227_DISPLAY_1] Window=6 -Index=78 -Color=16755200 +Index=81 +Color=43520 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -8972,11 +9014,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_677c156c-697b-4cd8-96ed-2ffd45f3226a +GUID=DISPLAY_7326fc18-5ff0-4878-99bd-883a18ffb8da [MEASUREMENT_OBJECT_228] Module=xcp_demo -Name=sched_setscheduler +Name=sched_rr_get_interval Disabled=0 Mode=1 Rate=1000 @@ -8991,8 +9033,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_228_DISPLAY_1] Window=6 -Index=77 -Color=16711850 +Index=80 +Color=204 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -9033,11 +9075,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_94f95283-5ba1-47df-b996-45d16b614358 +GUID=DISPLAY_ff418645-cbe9-4ab5-bc8b-d8c6ad1b8c53 [MEASUREMENT_OBJECT_229] Module=xcp_demo -Name=sched_yield +Name=sched_setaffinity Disabled=0 Mode=1 Rate=1000 @@ -9052,8 +9094,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_229_DISPLAY_1] Window=6 -Index=76 -Color=21930 +Index=79 +Color=28784 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -9094,12 +9136,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_e6e2b23d-4a43-4472-82c9-5c71eade7ad9 +GUID=DISPLAY_ee1dae61-364b-4dfb-bb2a-b0f48cf72c2f [MEASUREMENT_OBJECT_22_DISPLAY_1] Window=6 -Index=281 -Color=21930 +Index=285 +Color=204 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -9140,11 +9182,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_0ba97448-4f01-4d48-b36d-4f16f20bdd36 +GUID=DISPLAY_f25c93fe-adc1-45df-a79b-39425bdb5dd2 [MEASUREMENT_OBJECT_23] Module=xcp_demo -Name=chdir +Name=brk Disabled=0 Mode=1 Rate=1000 @@ -9159,7 +9201,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_230] Module=xcp_demo -Name=seccomp +Name=sched_setparam Disabled=0 Mode=1 Rate=1000 @@ -9174,8 +9216,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_230_DISPLAY_1] Window=6 -Index=75 -Color=11162965 +Index=78 +Color=16755200 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -9216,11 +9258,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_fc3bd431-144a-475a-8480-94df04dd31fd +GUID=DISPLAY_677c156c-697b-4cd8-96ed-2ffd45f3226a [MEASUREMENT_OBJECT_231] Module=xcp_demo -Name=semctl +Name=sched_setscheduler Disabled=0 Mode=1 Rate=1000 @@ -9235,8 +9277,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_231_DISPLAY_1] Window=6 -Index=74 -Color=11206655 +Index=77 +Color=16711850 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -9277,11 +9319,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_39278efb-a579-476a-9fd8-a293e544f50a +GUID=DISPLAY_94f95283-5ba1-47df-b996-45d16b614358 [MEASUREMENT_OBJECT_232] Module=xcp_demo -Name=semget +Name=sched_yield Disabled=0 Mode=1 Rate=1000 @@ -9296,8 +9338,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_232_DISPLAY_1] Window=6 -Index=73 -Color=65450 +Index=76 +Color=21930 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -9338,11 +9380,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_6e0f531c-1462-4683-8b48-0321274a50ab +GUID=DISPLAY_e6e2b23d-4a43-4472-82c9-5c71eade7ad9 [MEASUREMENT_OBJECT_233] Module=xcp_demo -Name=semop +Name=seccomp Disabled=0 Mode=1 Rate=1000 @@ -9357,8 +9399,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_233_DISPLAY_1] Window=6 -Index=72 -Color=8421631 +Index=75 +Color=11162965 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -9399,11 +9441,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_d51322ae-ebb9-4730-9b24-5bb8e4dc471e +GUID=DISPLAY_fc3bd431-144a-475a-8480-94df04dd31fd [MEASUREMENT_OBJECT_234] Module=xcp_demo -Name=semtimedop +Name=semctl Disabled=0 Mode=1 Rate=1000 @@ -9418,8 +9460,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_234_DISPLAY_1] Window=6 -Index=71 -Color=43690 +Index=74 +Color=11206655 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -9460,11 +9502,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_7d58dbcf-117b-4389-8bf0-03fc58e2e974 +GUID=DISPLAY_39278efb-a579-476a-9fd8-a293e544f50a [MEASUREMENT_OBJECT_235] Module=xcp_demo -Name=sendfile +Name=semget Disabled=0 Mode=1 Rate=1000 @@ -9479,8 +9521,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_235_DISPLAY_1] Window=6 -Index=70 -Color=11184640 +Index=73 +Color=65450 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -9521,11 +9563,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_7babb798-012b-4bc0-ba1e-7de2b61b5942 +GUID=DISPLAY_6e0f531c-1462-4683-8b48-0321274a50ab [MEASUREMENT_OBJECT_236] Module=xcp_demo -Name=sendmsg +Name=semop Disabled=0 Mode=1 Rate=1000 @@ -9540,8 +9582,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_236_DISPLAY_1] Window=6 -Index=69 -Color=16755455 +Index=72 +Color=8421631 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -9582,11 +9624,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_facfe3b3-1209-4ac0-9421-ccd18eb2168f +GUID=DISPLAY_d51322ae-ebb9-4730-9b24-5bb8e4dc471e [MEASUREMENT_OBJECT_237] Module=xcp_demo -Name=set_mempolicy +Name=semtimedop Disabled=0 Mode=1 Rate=1000 @@ -9601,8 +9643,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_237_DISPLAY_1] Window=6 -Index=68 -Color=16755370 +Index=71 +Color=43690 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -9643,11 +9685,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_a14be5ff-c010-4060-b623-a1a140a6e39d +GUID=DISPLAY_7d58dbcf-117b-4389-8bf0-03fc58e2e974 [MEASUREMENT_OBJECT_238] Module=xcp_demo -Name=set_mempolicy_home_node +Name=sendfile Disabled=0 Mode=1 Rate=1000 @@ -9662,8 +9704,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_238_DISPLAY_1] Window=6 -Index=67 -Color=11206570 +Index=70 +Color=11184640 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -9704,11 +9746,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_68c4717b-3489-4c09-9c7e-e57241708909 +GUID=DISPLAY_7babb798-012b-4bc0-ba1e-7de2b61b5942 [MEASUREMENT_OBJECT_239] Module=xcp_demo -Name=set_robust_list +Name=sendmsg Disabled=0 Mode=1 Rate=1000 @@ -9723,8 +9765,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_239_DISPLAY_1] Window=6 -Index=66 -Color=65280 +Index=69 +Color=16755455 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -9765,12 +9807,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_f3cbbfd9-5f79-4ca8-97d2-92c3a541b650 +GUID=DISPLAY_facfe3b3-1209-4ac0-9421-ccd18eb2168f [MEASUREMENT_OBJECT_23_DISPLAY_1] Window=6 -Index=280 -Color=11162965 +Index=284 +Color=28784 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -9811,11 +9853,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_414492c6-7861-40be-a924-97988aac98c9 +GUID=DISPLAY_e1f4735b-3c39-4c81-863a-fd4ac27bd3e5 [MEASUREMENT_OBJECT_24] Module=xcp_demo -Name=chroot +Name=cachestat Disabled=0 Mode=1 Rate=1000 @@ -9830,7 +9872,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_240] Module=xcp_demo -Name=set_tid_address +Name=set_mempolicy Disabled=0 Mode=1 Rate=1000 @@ -9845,8 +9887,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_240_DISPLAY_1] Window=6 -Index=65 -Color=255 +Index=68 +Color=16755370 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -9887,11 +9929,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_816d54e6-2e21-4c54-ac08-08419ba35e00 +GUID=DISPLAY_a14be5ff-c010-4060-b623-a1a140a6e39d [MEASUREMENT_OBJECT_241] Module=xcp_demo -Name=setdomainname +Name=set_mempolicy_home_node Disabled=0 Mode=1 Rate=1000 @@ -9906,8 +9948,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_241_DISPLAY_1] Window=6 -Index=64 -Color=65535 +Index=67 +Color=11206570 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -9948,11 +9990,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_9cfaeff3-90ea-48f8-82d1-650803c3121b +GUID=DISPLAY_68c4717b-3489-4c09-9c7e-e57241708909 [MEASUREMENT_OBJECT_242] Module=xcp_demo -Name=setfsgid +Name=set_robust_list Disabled=0 Mode=1 Rate=1000 @@ -9967,8 +10009,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_242_DISPLAY_1] Window=6 -Index=63 -Color=16776960 +Index=66 +Color=65280 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -10009,11 +10051,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_5a620fbd-31a3-459c-a9ca-7e3a37ef45e1 +GUID=DISPLAY_f3cbbfd9-5f79-4ca8-97d2-92c3a541b650 [MEASUREMENT_OBJECT_243] Module=xcp_demo -Name=setfsuid +Name=set_tid_address Disabled=0 Mode=1 Rate=1000 @@ -10028,8 +10070,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_243_DISPLAY_1] Window=6 -Index=62 -Color=16711935 +Index=65 +Color=255 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -10070,11 +10112,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_8b1d4b28-7a3f-4a4a-b986-39cf8b1178f0 +GUID=DISPLAY_816d54e6-2e21-4c54-ac08-08419ba35e00 [MEASUREMENT_OBJECT_244] Module=xcp_demo -Name=setgid +Name=setdomainname Disabled=0 Mode=1 Rate=1000 @@ -10089,8 +10131,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_244_DISPLAY_1] Window=6 -Index=61 -Color=33023 +Index=64 +Color=65535 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -10131,11 +10173,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_86b4ffd2-b268-4a61-b5e9-bffc00816134 +GUID=DISPLAY_9cfaeff3-90ea-48f8-82d1-650803c3121b [MEASUREMENT_OBJECT_245] Module=xcp_demo -Name=setgroups +Name=setfsgid Disabled=0 Mode=1 Rate=1000 @@ -10150,8 +10192,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_245_DISPLAY_1] Window=6 -Index=60 -Color=16744576 +Index=63 +Color=16776960 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -10192,11 +10234,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_40f43eef-bf8b-429e-b7a8-acdf79fdbc5f +GUID=DISPLAY_5a620fbd-31a3-459c-a9ca-7e3a37ef45e1 [MEASUREMENT_OBJECT_246] Module=xcp_demo -Name=sethostname +Name=setfsuid Disabled=0 Mode=1 Rate=1000 @@ -10211,8 +10253,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_246_DISPLAY_1] Window=6 -Index=59 -Color=16777215 +Index=62 +Color=16711935 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -10253,11 +10295,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_76fa549f-870f-4c8d-8022-56307a40aa9a +GUID=DISPLAY_8b1d4b28-7a3f-4a4a-b986-39cf8b1178f0 [MEASUREMENT_OBJECT_247] Module=xcp_demo -Name=setitimer +Name=setgid Disabled=0 Mode=1 Rate=1000 @@ -10272,8 +10314,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_247_DISPLAY_1] Window=6 -Index=58 -Color=43520 +Index=61 +Color=33023 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -10314,11 +10356,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_46e18308-e211-462a-ae43-a777c18d4fe2 +GUID=DISPLAY_86b4ffd2-b268-4a61-b5e9-bffc00816134 [MEASUREMENT_OBJECT_248] Module=xcp_demo -Name=setpgid +Name=setgroups Disabled=0 Mode=1 Rate=1000 @@ -10333,8 +10375,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_248_DISPLAY_1] Window=6 -Index=57 -Color=204 +Index=60 +Color=16744576 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -10375,11 +10417,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_190c0398-6cf7-4461-a9fb-7c60e2aed993 +GUID=DISPLAY_40f43eef-bf8b-429e-b7a8-acdf79fdbc5f [MEASUREMENT_OBJECT_249] Module=xcp_demo -Name=setpriority +Name=sethostname Disabled=0 Mode=1 Rate=1000 @@ -10394,8 +10436,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_249_DISPLAY_1] Window=6 -Index=56 -Color=28784 +Index=59 +Color=16777215 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -10436,12 +10478,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_6f10d0fd-5b58-4fbd-ac85-36ef01386355 +GUID=DISPLAY_76fa549f-870f-4c8d-8022-56307a40aa9a [MEASUREMENT_OBJECT_24_DISPLAY_1] Window=6 -Index=279 -Color=11206655 +Index=283 +Color=16755200 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -10482,11 +10524,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_a32c2942-68db-4675-87a6-ef534dbe2cf8 +GUID=DISPLAY_c6a94286-a97a-4f7e-84f7-9fcc4af5119a [MEASUREMENT_OBJECT_25] Module=xcp_demo -Name=clock_getres +Name=capget Disabled=0 Mode=1 Rate=1000 @@ -10501,7 +10543,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_250] Module=xcp_demo -Name=setregid +Name=setitimer Disabled=0 Mode=1 Rate=1000 @@ -10516,8 +10558,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_250_DISPLAY_1] Window=6 -Index=55 -Color=16755200 +Index=58 +Color=43520 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -10558,11 +10600,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_e2e32fb0-f35c-4439-a1aa-1dbb9725508b +GUID=DISPLAY_46e18308-e211-462a-ae43-a777c18d4fe2 [MEASUREMENT_OBJECT_251] Module=xcp_demo -Name=setresgid +Name=setpgid Disabled=0 Mode=1 Rate=1000 @@ -10577,8 +10619,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_251_DISPLAY_1] Window=6 -Index=54 -Color=16711850 +Index=57 +Color=204 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -10619,11 +10661,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_5102a2b4-91d0-47b7-b8c0-f14abcc11278 +GUID=DISPLAY_190c0398-6cf7-4461-a9fb-7c60e2aed993 [MEASUREMENT_OBJECT_252] Module=xcp_demo -Name=setresuid +Name=setpriority Disabled=0 Mode=1 Rate=1000 @@ -10638,8 +10680,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_252_DISPLAY_1] Window=6 -Index=53 -Color=21930 +Index=56 +Color=28784 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -10680,11 +10722,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_85841b9b-8992-42ca-b0c4-e34f9ce8e801 +GUID=DISPLAY_6f10d0fd-5b58-4fbd-ac85-36ef01386355 [MEASUREMENT_OBJECT_253] Module=xcp_demo -Name=setreuid +Name=setregid Disabled=0 Mode=1 Rate=1000 @@ -10699,8 +10741,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_253_DISPLAY_1] Window=6 -Index=52 -Color=11162965 +Index=55 +Color=16755200 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -10741,11 +10783,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_014213be-b071-43fa-a287-bdb9a3e6ea14 +GUID=DISPLAY_e2e32fb0-f35c-4439-a1aa-1dbb9725508b [MEASUREMENT_OBJECT_254] Module=xcp_demo -Name=setrlimit +Name=setresgid Disabled=0 Mode=1 Rate=1000 @@ -10760,8 +10802,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_254_DISPLAY_1] Window=6 -Index=51 -Color=11206655 +Index=54 +Color=16711850 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -10802,11 +10844,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_517f434b-64f7-4dae-bbc0-ac17cca46033 +GUID=DISPLAY_5102a2b4-91d0-47b7-b8c0-f14abcc11278 [MEASUREMENT_OBJECT_255] Module=xcp_demo -Name=setsid +Name=setresuid Disabled=0 Mode=1 Rate=1000 @@ -10821,8 +10863,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_255_DISPLAY_1] Window=6 -Index=50 -Color=65450 +Index=53 +Color=21930 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -10863,11 +10905,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_feea931e-57a0-4a3b-a366-bea874423348 +GUID=DISPLAY_85841b9b-8992-42ca-b0c4-e34f9ce8e801 [MEASUREMENT_OBJECT_256] Module=xcp_demo -Name=setsockopt +Name=setreuid Disabled=0 Mode=1 Rate=1000 @@ -10882,8 +10924,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_256_DISPLAY_1] Window=6 -Index=49 -Color=8421631 +Index=52 +Color=11162965 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -10924,11 +10966,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_7d12a8f2-e410-4107-a1b4-62ee7c2317f0 +GUID=DISPLAY_014213be-b071-43fa-a287-bdb9a3e6ea14 [MEASUREMENT_OBJECT_257] Module=xcp_demo -Name=settimeofday +Name=setrlimit Disabled=0 Mode=1 Rate=1000 @@ -10943,8 +10985,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_257_DISPLAY_1] Window=6 -Index=48 -Color=43690 +Index=51 +Color=11206655 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -10985,11 +11027,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_56b68f4f-76ed-4731-b165-38c16436e334 +GUID=DISPLAY_517f434b-64f7-4dae-bbc0-ac17cca46033 [MEASUREMENT_OBJECT_258] Module=xcp_demo -Name=setuid +Name=setsid Disabled=0 Mode=1 Rate=1000 @@ -11004,8 +11046,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_258_DISPLAY_1] Window=6 -Index=47 -Color=11184640 +Index=50 +Color=65450 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -11046,11 +11088,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_fc3b3539-a854-4fa7-ae3c-90861955e5a3 +GUID=DISPLAY_feea931e-57a0-4a3b-a366-bea874423348 [MEASUREMENT_OBJECT_259] Module=xcp_demo -Name=setxattr +Name=setsockopt Disabled=0 Mode=1 Rate=1000 @@ -11065,8 +11107,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_259_DISPLAY_1] Window=6 -Index=46 -Color=16755455 +Index=49 +Color=8421631 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -11107,12 +11149,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_de6e54b0-a08b-4d3c-8463-75b176c1722e +GUID=DISPLAY_7d12a8f2-e410-4107-a1b4-62ee7c2317f0 [MEASUREMENT_OBJECT_25_DISPLAY_1] Window=6 -Index=278 -Color=65450 +Index=282 +Color=16711850 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -11153,11 +11195,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_ae92b91a-0135-4f45-8d8c-33e93a0c9728 +GUID=DISPLAY_98b20d81-9d11-4eb6-adb1-48e83254fe87 [MEASUREMENT_OBJECT_26] Module=xcp_demo -Name=clock_gettime +Name=capset Disabled=0 Mode=1 Rate=1000 @@ -11172,7 +11214,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_260] Module=xcp_demo -Name=shmat +Name=settimeofday Disabled=0 Mode=1 Rate=1000 @@ -11187,8 +11229,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_260_DISPLAY_1] Window=6 -Index=45 -Color=11184895 +Index=48 +Color=43690 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -11229,11 +11271,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_ae00e420-62af-41cb-b009-93f3f1349a8d +GUID=DISPLAY_56b68f4f-76ed-4731-b165-38c16436e334 [MEASUREMENT_OBJECT_261] Module=xcp_demo -Name=shmctl +Name=setuid Disabled=0 Mode=1 Rate=1000 @@ -11248,8 +11290,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_261_DISPLAY_1] Window=6 -Index=44 -Color=16755370 +Index=47 +Color=11184640 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -11290,11 +11332,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_c983a9e6-b29f-4562-904c-1ff085417388 +GUID=DISPLAY_fc3b3539-a854-4fa7-ae3c-90861955e5a3 [MEASUREMENT_OBJECT_262] Module=xcp_demo -Name=shmdt +Name=setxattr Disabled=0 Mode=1 Rate=1000 @@ -11309,8 +11351,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_262_DISPLAY_1] Window=6 -Index=43 -Color=11206570 +Index=46 +Color=16755455 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -11351,11 +11393,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_3e7e97e0-4530-48a8-b28a-2ea51aa5753e +GUID=DISPLAY_de6e54b0-a08b-4d3c-8463-75b176c1722e [MEASUREMENT_OBJECT_263] Module=xcp_demo -Name=shmget +Name=shmat Disabled=0 Mode=1 Rate=1000 @@ -11370,8 +11412,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_263_DISPLAY_1] Window=6 -Index=42 -Color=65280 +Index=45 +Color=11184895 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -11412,11 +11454,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_44cb069d-778e-4917-b04e-cfdfea94c3e6 +GUID=DISPLAY_ae00e420-62af-41cb-b009-93f3f1349a8d [MEASUREMENT_OBJECT_264] Module=xcp_demo -Name=shutdown +Name=shmctl Disabled=0 Mode=1 Rate=1000 @@ -11431,8 +11473,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_264_DISPLAY_1] Window=6 -Index=41 -Color=255 +Index=44 +Color=16755370 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -11473,11 +11515,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_064a1c65-e8e2-4bc2-9eb3-121d49fa1d2a +GUID=DISPLAY_c983a9e6-b29f-4562-904c-1ff085417388 [MEASUREMENT_OBJECT_265] Module=xcp_demo -Name=sigaltstack +Name=shmdt Disabled=0 Mode=1 Rate=1000 @@ -11492,8 +11534,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_265_DISPLAY_1] Window=6 -Index=40 -Color=65535 +Index=43 +Color=11206570 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -11534,11 +11576,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_1058d732-0fc3-486a-a847-f61d58bb905d +GUID=DISPLAY_3e7e97e0-4530-48a8-b28a-2ea51aa5753e [MEASUREMENT_OBJECT_266] Module=xcp_demo -Name=signalfd4 +Name=shmget Disabled=0 Mode=1 Rate=1000 @@ -11553,8 +11595,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_266_DISPLAY_1] Window=6 -Index=39 -Color=16776960 +Index=42 +Color=65280 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -11595,11 +11637,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_77cdfc3a-9ce6-4be0-8478-b4f2b75e928c +GUID=DISPLAY_44cb069d-778e-4917-b04e-cfdfea94c3e6 [MEASUREMENT_OBJECT_267] Module=xcp_demo -Name=socket +Name=shutdown Disabled=0 Mode=1 Rate=1000 @@ -11614,8 +11656,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_267_DISPLAY_1] Window=6 -Index=38 -Color=16711935 +Index=41 +Color=255 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -11656,11 +11698,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_dad7b77e-207c-4494-b1f8-7be7a5f34fcc +GUID=DISPLAY_064a1c65-e8e2-4bc2-9eb3-121d49fa1d2a [MEASUREMENT_OBJECT_268] Module=xcp_demo -Name=socketpair +Name=sigaltstack Disabled=0 Mode=1 Rate=1000 @@ -11675,8 +11717,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_268_DISPLAY_1] Window=6 -Index=37 -Color=33023 +Index=40 +Color=65535 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -11717,11 +11759,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_7a0a182b-7f2c-4eb3-84ca-df83dc50b4ac +GUID=DISPLAY_1058d732-0fc3-486a-a847-f61d58bb905d [MEASUREMENT_OBJECT_269] Module=xcp_demo -Name=splice +Name=signalfd4 Disabled=0 Mode=1 Rate=1000 @@ -11736,8 +11778,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_269_DISPLAY_1] Window=6 -Index=36 -Color=16744576 +Index=39 +Color=16776960 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -11778,12 +11820,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_6484c40a-62e5-4ad6-a32b-72c3ed414421 +GUID=DISPLAY_77cdfc3a-9ce6-4be0-8478-b4f2b75e928c [MEASUREMENT_OBJECT_26_DISPLAY_1] Window=6 -Index=277 -Color=8421631 +Index=281 +Color=21930 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -11824,11 +11866,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_60c88a13-3dcf-452b-b437-21b5eddfa287 +GUID=DISPLAY_0ba97448-4f01-4d48-b36d-4f16f20bdd36 [MEASUREMENT_OBJECT_27] Module=xcp_demo -Name=clock_settime +Name=chdir Disabled=0 Mode=1 Rate=1000 @@ -11843,7 +11885,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_270] Module=xcp_demo -Name=statfs +Name=socket Disabled=0 Mode=1 Rate=1000 @@ -11858,8 +11900,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_270_DISPLAY_1] Window=6 -Index=35 -Color=16777215 +Index=38 +Color=16711935 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -11900,11 +11942,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_5a1a7635-4dcf-4eb0-9b58-01e6fc7c650d +GUID=DISPLAY_dad7b77e-207c-4494-b1f8-7be7a5f34fcc [MEASUREMENT_OBJECT_271] Module=xcp_demo -Name=statmount +Name=socketpair Disabled=0 Mode=1 Rate=1000 @@ -11919,8 +11961,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_271_DISPLAY_1] Window=6 -Index=34 -Color=43520 +Index=37 +Color=33023 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -11961,11 +12003,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_8415f795-20f2-49be-9faa-0766235734f0 +GUID=DISPLAY_7a0a182b-7f2c-4eb3-84ca-df83dc50b4ac [MEASUREMENT_OBJECT_272] Module=xcp_demo -Name=statx +Name=splice Disabled=0 Mode=1 Rate=1000 @@ -11980,8 +12022,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_272_DISPLAY_1] Window=6 -Index=33 -Color=204 +Index=36 +Color=16744576 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -12022,11 +12064,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_d8570937-e916-4af8-9cbc-807e84d7fa98 +GUID=DISPLAY_6484c40a-62e5-4ad6-a32b-72c3ed414421 [MEASUREMENT_OBJECT_273] Module=xcp_demo -Name=swapoff +Name=statfs Disabled=0 Mode=1 Rate=1000 @@ -12041,8 +12083,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_273_DISPLAY_1] Window=6 -Index=32 -Color=28784 +Index=35 +Color=16777215 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -12083,11 +12125,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_9b4da56d-eb8f-46c4-9bb1-fe55a2345d7d +GUID=DISPLAY_5a1a7635-4dcf-4eb0-9b58-01e6fc7c650d [MEASUREMENT_OBJECT_274] Module=xcp_demo -Name=swapon +Name=statmount Disabled=0 Mode=1 Rate=1000 @@ -12102,8 +12144,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_274_DISPLAY_1] Window=6 -Index=31 -Color=16755200 +Index=34 +Color=43520 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -12144,11 +12186,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_3541f87c-2647-410c-aa0b-95867f22e5a3 +GUID=DISPLAY_8415f795-20f2-49be-9faa-0766235734f0 [MEASUREMENT_OBJECT_275] Module=xcp_demo -Name=symlinkat +Name=statx Disabled=0 Mode=1 Rate=1000 @@ -12163,8 +12205,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_275_DISPLAY_1] Window=6 -Index=30 -Color=16711850 +Index=33 +Color=204 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -12205,11 +12247,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_b290f1fd-b9e0-4925-a815-72ef7af174a4 +GUID=DISPLAY_d8570937-e916-4af8-9cbc-807e84d7fa98 [MEASUREMENT_OBJECT_276] Module=xcp_demo -Name=sync +Name=swapoff Disabled=0 Mode=1 Rate=1000 @@ -12224,8 +12266,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_276_DISPLAY_1] Window=6 -Index=29 -Color=21930 +Index=32 +Color=28784 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -12266,11 +12308,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_323ad88f-6fd1-44c9-a871-5abd85936567 +GUID=DISPLAY_9b4da56d-eb8f-46c4-9bb1-fe55a2345d7d [MEASUREMENT_OBJECT_277] Module=xcp_demo -Name=sync_file_range +Name=swapon Disabled=0 Mode=1 Rate=1000 @@ -12285,8 +12327,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_277_DISPLAY_1] Window=6 -Index=28 -Color=11162965 +Index=31 +Color=16755200 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -12327,11 +12369,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_8118cd37-8b05-47f9-b2fa-b7c450c8dee4 +GUID=DISPLAY_3541f87c-2647-410c-aa0b-95867f22e5a3 [MEASUREMENT_OBJECT_278] Module=xcp_demo -Name=syscall_nr +Name=symlinkat Disabled=0 Mode=1 Rate=1000 @@ -12342,11 +12384,57 @@ MeaReferenced=1 ArchivBy_1=Recorder IsFallback=0 HasManagedDisplay=0 -DisplayCount=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_278_DISPLAY_1] +Window=6 +Index=30 +Color=16711850 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_b290f1fd-b9e0-4925-a815-72ef7af174a4 [MEASUREMENT_OBJECT_279] Module=xcp_demo -Name=syscall_pid +Name=sync Disabled=0 Mode=1 Rate=1000 @@ -12357,12 +12445,58 @@ MeaReferenced=1 ArchivBy_1=Recorder IsFallback=0 HasManagedDisplay=0 -DisplayCount=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_279_DISPLAY_1] +Window=6 +Index=29 +Color=21930 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_323ad88f-6fd1-44c9-a871-5abd85936567 [MEASUREMENT_OBJECT_27_DISPLAY_1] Window=6 -Index=276 -Color=43690 +Index=280 +Color=11162965 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -12403,11 +12537,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_92afa2ee-a182-4a94-9eee-9ce1b4b7f995 +GUID=DISPLAY_414492c6-7861-40be-a924-97988aac98c9 [MEASUREMENT_OBJECT_28] Module=xcp_demo -Name=clone +Name=chroot Disabled=0 Mode=1 Rate=1000 @@ -12422,7 +12556,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_280] Module=xcp_demo -Name=sysinfo +Name=sync_file_range Disabled=0 Mode=1 Rate=1000 @@ -12437,8 +12571,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_280_DISPLAY_1] Window=6 -Index=27 -Color=8421631 +Index=28 +Color=11162965 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -12479,11 +12613,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_93f387e8-cf4e-4369-b9f4-f9cc574fbac4 +GUID=DISPLAY_8118cd37-8b05-47f9-b2fa-b7c450c8dee4 [MEASUREMENT_OBJECT_281] Module=xcp_demo -Name=syslog +Name=sysinfo Disabled=0 Mode=1 Rate=1000 @@ -12498,8 +12632,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_281_DISPLAY_1] Window=6 -Index=26 -Color=43690 +Index=27 +Color=8421631 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -12540,11 +12674,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_7c6d6000-265d-4eef-a316-7c4a86e873d5 +GUID=DISPLAY_93f387e8-cf4e-4369-b9f4-f9cc574fbac4 [MEASUREMENT_OBJECT_282] Module=xcp_demo -Name=tee +Name=syslog Disabled=0 Mode=1 Rate=1000 @@ -12559,8 +12693,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_282_DISPLAY_1] Window=6 -Index=25 -Color=11184640 +Index=26 +Color=43690 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -12601,11 +12735,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_949de56b-ef0e-49a9-b665-d8dacc69f092 +GUID=DISPLAY_7c6d6000-265d-4eef-a316-7c4a86e873d5 [MEASUREMENT_OBJECT_283] Module=xcp_demo -Name=tgkill +Name=tee Disabled=0 Mode=1 Rate=1000 @@ -12620,8 +12754,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_283_DISPLAY_1] Window=6 -Index=24 -Color=16755455 +Index=25 +Color=11184640 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -12662,11 +12796,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_3c6887b9-bcdf-4b7d-92bb-14526177b567 +GUID=DISPLAY_949de56b-ef0e-49a9-b665-d8dacc69f092 [MEASUREMENT_OBJECT_284] Module=xcp_demo -Name=timer_create +Name=tgkill Disabled=0 Mode=1 Rate=1000 @@ -12681,8 +12815,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_284_DISPLAY_1] Window=6 -Index=23 -Color=11184895 +Index=24 +Color=16755455 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -12723,11 +12857,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_f8a0301d-2ccb-49f2-bf8c-e37c099ece44 +GUID=DISPLAY_3c6887b9-bcdf-4b7d-92bb-14526177b567 [MEASUREMENT_OBJECT_285] Module=xcp_demo -Name=timer_delete +Name=timer_create Disabled=0 Mode=1 Rate=1000 @@ -12742,8 +12876,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_285_DISPLAY_1] Window=6 -Index=22 -Color=16755370 +Index=23 +Color=11184895 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -12784,11 +12918,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_45db27ef-815d-4800-a743-bf461b98795d +GUID=DISPLAY_f8a0301d-2ccb-49f2-bf8c-e37c099ece44 [MEASUREMENT_OBJECT_286] Module=xcp_demo -Name=timer_getoverrun +Name=timer_delete Disabled=0 Mode=1 Rate=1000 @@ -12803,8 +12937,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_286_DISPLAY_1] Window=6 -Index=21 -Color=11206570 +Index=22 +Color=16755370 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -12845,11 +12979,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_2143d4d9-8740-4f4d-8556-b67237639bf5 +GUID=DISPLAY_45db27ef-815d-4800-a743-bf461b98795d [MEASUREMENT_OBJECT_287] Module=xcp_demo -Name=timer_gettime +Name=timer_getoverrun Disabled=0 Mode=1 Rate=1000 @@ -12864,8 +12998,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_287_DISPLAY_1] Window=6 -Index=20 -Color=65280 +Index=21 +Color=11206570 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -12906,11 +13040,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_d77a7b85-628c-48fa-b016-c72192e9cad6 +GUID=DISPLAY_2143d4d9-8740-4f4d-8556-b67237639bf5 [MEASUREMENT_OBJECT_288] Module=xcp_demo -Name=timer_settime +Name=timer_gettime Disabled=0 Mode=1 Rate=1000 @@ -12925,8 +13059,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_288_DISPLAY_1] Window=6 -Index=19 -Color=255 +Index=20 +Color=65280 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -12967,11 +13101,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_bff35a36-6cdd-41ee-9a2f-ddd59d9e498c +GUID=DISPLAY_d77a7b85-628c-48fa-b016-c72192e9cad6 [MEASUREMENT_OBJECT_289] Module=xcp_demo -Name=timerfd_create +Name=timer_settime Disabled=0 Mode=1 Rate=1000 @@ -12986,8 +13120,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_289_DISPLAY_1] Window=6 -Index=18 -Color=65535 +Index=19 +Color=255 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -13028,12 +13162,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_a1b31112-9854-48fb-8f6e-b789a454505e +GUID=DISPLAY_bff35a36-6cdd-41ee-9a2f-ddd59d9e498c [MEASUREMENT_OBJECT_28_DISPLAY_1] Window=6 -Index=275 -Color=11184640 +Index=279 +Color=11206655 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -13074,11 +13208,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_08094d4e-caf2-4fed-9020-189b17f92415 +GUID=DISPLAY_a32c2942-68db-4675-87a6-ef534dbe2cf8 [MEASUREMENT_OBJECT_29] Module=xcp_demo -Name=clone3 +Name=clock_getres Disabled=0 Mode=1 Rate=1000 @@ -13093,7 +13227,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_290] Module=xcp_demo -Name=timerfd_gettime +Name=timerfd_create Disabled=0 Mode=1 Rate=1000 @@ -13108,8 +13242,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_290_DISPLAY_1] Window=6 -Index=17 -Color=16776960 +Index=18 +Color=65535 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -13150,11 +13284,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_472f266d-2eba-495b-b916-ebff4aae96d6 +GUID=DISPLAY_a1b31112-9854-48fb-8f6e-b789a454505e [MEASUREMENT_OBJECT_291] Module=xcp_demo -Name=timerfd_settime +Name=timerfd_gettime Disabled=0 Mode=1 Rate=1000 @@ -13169,8 +13303,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_291_DISPLAY_1] Window=6 -Index=16 -Color=16711935 +Index=17 +Color=16776960 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -13193,7 +13327,7 @@ LineWidth=1 Precision=-2 Digits=6 Enabled=1 -StoredFocused=1 +StoredFocused=0 SublMask=1 MeaSublMask=0 LockScaling=0 @@ -13211,11 +13345,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_5e4fb3a2-81a1-488f-87b9-84c7e8982f43 +GUID=DISPLAY_472f266d-2eba-495b-b916-ebff4aae96d6 [MEASUREMENT_OBJECT_292] Module=xcp_demo -Name=times +Name=timerfd_settime Disabled=0 Mode=1 Rate=1000 @@ -13230,8 +13364,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_292_DISPLAY_1] Window=6 -Index=15 -Color=33023 +Index=16 +Color=16711935 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -13272,11 +13406,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_95efa5cd-df9f-487c-a24f-2c58089ab8d4 +GUID=DISPLAY_5e4fb3a2-81a1-488f-87b9-84c7e8982f43 [MEASUREMENT_OBJECT_293] Module=xcp_demo -Name=tkill +Name=times Disabled=0 Mode=1 Rate=1000 @@ -13291,8 +13425,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_293_DISPLAY_1] Window=6 -Index=14 -Color=16744576 +Index=15 +Color=33023 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -13333,11 +13467,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_f5ab55cb-6353-46d4-af5b-b520c6a86d15 +GUID=DISPLAY_95efa5cd-df9f-487c-a24f-2c58089ab8d4 [MEASUREMENT_OBJECT_294] Module=xcp_demo -Name=truncate +Name=tkill Disabled=0 Mode=1 Rate=1000 @@ -13352,8 +13486,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_294_DISPLAY_1] Window=6 -Index=13 -Color=16777215 +Index=14 +Color=16744576 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -13394,11 +13528,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_edd81ba7-472e-452d-ae73-f6c2dc9ca2b4 +GUID=DISPLAY_f5ab55cb-6353-46d4-af5b-b520c6a86d15 [MEASUREMENT_OBJECT_295] Module=xcp_demo -Name=umask +Name=truncate Disabled=0 Mode=1 Rate=1000 @@ -13413,8 +13547,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_295_DISPLAY_1] Window=6 -Index=12 -Color=43520 +Index=13 +Color=16777215 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -13455,11 +13589,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_43cf278d-e7b7-4fd9-b417-52762beae26f +GUID=DISPLAY_edd81ba7-472e-452d-ae73-f6c2dc9ca2b4 [MEASUREMENT_OBJECT_296] Module=xcp_demo -Name=umount2 +Name=umask Disabled=0 Mode=1 Rate=1000 @@ -13474,8 +13608,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_296_DISPLAY_1] Window=6 -Index=11 -Color=204 +Index=12 +Color=43520 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -13516,11 +13650,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_c5a4a995-1623-4250-9187-4805764ad435 +GUID=DISPLAY_43cf278d-e7b7-4fd9-b417-52762beae26f [MEASUREMENT_OBJECT_297] Module=xcp_demo -Name=uname +Name=umount2 Disabled=0 Mode=1 Rate=1000 @@ -13535,8 +13669,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_297_DISPLAY_1] Window=6 -Index=10 -Color=28784 +Index=11 +Color=204 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -13577,11 +13711,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_ecaaf120-2e1c-4c3d-97f3-2a16ee095db0 +GUID=DISPLAY_c5a4a995-1623-4250-9187-4805764ad435 [MEASUREMENT_OBJECT_298] Module=xcp_demo -Name=unlinkat +Name=uname Disabled=0 Mode=1 Rate=1000 @@ -13596,8 +13730,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_298_DISPLAY_1] Window=6 -Index=9 -Color=16755200 +Index=10 +Color=28784 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -13638,11 +13772,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_af8a7282-fd36-4c8c-b77b-2a40876779d9 +GUID=DISPLAY_ecaaf120-2e1c-4c3d-97f3-2a16ee095db0 [MEASUREMENT_OBJECT_299] Module=xcp_demo -Name=unshare +Name=unlinkat Disabled=0 Mode=1 Rate=1000 @@ -13657,8 +13791,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_299_DISPLAY_1] Window=6 -Index=8 -Color=16711850 +Index=9 +Color=16755200 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -13699,12 +13833,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_891fe3a6-1255-4f8e-8517-3ef1a52881bb +GUID=DISPLAY_af8a7282-fd36-4c8c-b77b-2a40876779d9 [MEASUREMENT_OBJECT_29_DISPLAY_1] Window=6 -Index=274 -Color=16755455 +Index=278 +Color=65450 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -13745,7 +13879,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_f7b1264d-c2b2-4940-8f45-201a310ff971 +GUID=DISPLAY_ae92b91a-0135-4f45-8d8c-33e93a0c9728 [MEASUREMENT_OBJECT_2_DISPLAY_1] Window=4 @@ -13756,9 +13890,9 @@ ColorFunction=0 ColorFunctionScope=1 LineTyp=2 YMinHome=0 -YMaxHome=2000 +YMaxHome=10000 YMin=0 -YMax=2000 +YMax=10000 XOffsetNS=0 XOffset=0 ValueFormat=3 @@ -13788,15 +13922,106 @@ XAxisLabel= YAxisLabel= AxisCaption= Row=0 -Col=0 -YAxis_ID=0 -AxisTemplate= -GUID=DISPLAY_c9c59608-f828-488c-92c2-e78a4983ac13 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_c9c59608-f828-488c-92c2-e78a4983ac13 + +[MEASUREMENT_OBJECT_2_DISPLAY_2] +Window=5 +Index=0 +Color=255 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_cf91cb12-6761-4a65-9538-d5e4baa13a2c + +[MEASUREMENT_OBJECT_3] +Module=xcp_demo +Name=syscall_nr +Disabled=0 +Mode=2147483651 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_30] +Module=xcp_demo +Name=clock_settime +Disabled=0 +Mode=1 +Rate=1000 +ModeIsDefault=0 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_300] +Module=xcp_demo +Name=unshare +Disabled=0 +Mode=1 +Rate=1000 +ModeIsDefault=0 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 -[MEASUREMENT_OBJECT_2_DISPLAY_2] -Window=5 -Index=0 -Color=255 +[MEASUREMENT_OBJECT_300_DISPLAY_1] +Window=6 +Index=8 +Color=16711850 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -13819,7 +14044,7 @@ LineWidth=1 Precision=-2 Digits=6 Enabled=1 -StoredFocused=1 +StoredFocused=0 SublMask=1 MeaSublMask=0 LockScaling=0 @@ -13837,39 +14062,9 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_cf91cb12-6761-4a65-9538-d5e4baa13a2c - -[MEASUREMENT_OBJECT_3] -Module=xcp_demo -Name=recvfrom -Disabled=0 -Mode=2147483650 -Rate=0 -ModeIsDefault=1 -Row=0 -Column=0 -MeaReferenced=1 -ArchivBy_1=Recorder -IsFallback=0 -HasManagedDisplay=0 -DisplayCount=1 - -[MEASUREMENT_OBJECT_30] -Module=xcp_demo -Name=close -Disabled=0 -Mode=1 -Rate=1000 -ModeIsDefault=0 -Row=0 -Column=0 -MeaReferenced=1 -ArchivBy_1=Recorder -IsFallback=0 -HasManagedDisplay=0 -DisplayCount=1 +GUID=DISPLAY_891fe3a6-1255-4f8e-8517-3ef1a52881bb -[MEASUREMENT_OBJECT_300] +[MEASUREMENT_OBJECT_301] Module=xcp_demo Name=userfaultfd Disabled=0 @@ -13884,7 +14079,7 @@ IsFallback=0 HasManagedDisplay=0 DisplayCount=1 -[MEASUREMENT_OBJECT_300_DISPLAY_1] +[MEASUREMENT_OBJECT_301_DISPLAY_1] Window=6 Index=7 Color=21930 @@ -13930,7 +14125,7 @@ YAxis_ID=0 AxisTemplate= GUID=DISPLAY_f3593f46-03e8-4a7f-9d91-1d5ce5c70b8e -[MEASUREMENT_OBJECT_301] +[MEASUREMENT_OBJECT_302] Module=xcp_demo Name=utimensat Disabled=0 @@ -13945,7 +14140,7 @@ IsFallback=0 HasManagedDisplay=0 DisplayCount=1 -[MEASUREMENT_OBJECT_301_DISPLAY_1] +[MEASUREMENT_OBJECT_302_DISPLAY_1] Window=6 Index=6 Color=11162965 @@ -13991,7 +14186,7 @@ YAxis_ID=0 AxisTemplate= GUID=DISPLAY_72ea7b2a-d40d-46bc-a6d9-856aa457420c -[MEASUREMENT_OBJECT_302] +[MEASUREMENT_OBJECT_303] Module=xcp_demo Name=vhangup Disabled=0 @@ -14006,7 +14201,7 @@ IsFallback=0 HasManagedDisplay=0 DisplayCount=1 -[MEASUREMENT_OBJECT_302_DISPLAY_1] +[MEASUREMENT_OBJECT_303_DISPLAY_1] Window=6 Index=5 Color=11206655 @@ -14052,7 +14247,7 @@ YAxis_ID=0 AxisTemplate= GUID=DISPLAY_9b8a9961-a866-4e8a-8223-e7404a772c87 -[MEASUREMENT_OBJECT_303] +[MEASUREMENT_OBJECT_304] Module=xcp_demo Name=vmsplice Disabled=0 @@ -14067,7 +14262,7 @@ IsFallback=0 HasManagedDisplay=0 DisplayCount=1 -[MEASUREMENT_OBJECT_303_DISPLAY_1] +[MEASUREMENT_OBJECT_304_DISPLAY_1] Window=6 Index=4 Color=65450 @@ -14113,7 +14308,7 @@ YAxis_ID=0 AxisTemplate= GUID=DISPLAY_3fc08f63-8a93-4a26-9d14-63b0352bca83 -[MEASUREMENT_OBJECT_304] +[MEASUREMENT_OBJECT_305] Module=xcp_demo Name=wait4 Disabled=0 @@ -14128,7 +14323,7 @@ IsFallback=0 HasManagedDisplay=0 DisplayCount=1 -[MEASUREMENT_OBJECT_304_DISPLAY_1] +[MEASUREMENT_OBJECT_305_DISPLAY_1] Window=6 Index=3 Color=8421631 @@ -14174,7 +14369,7 @@ YAxis_ID=0 AxisTemplate= GUID=DISPLAY_2a99cb10-c923-401c-a539-08a4122a9bbd -[MEASUREMENT_OBJECT_305] +[MEASUREMENT_OBJECT_306] Module=xcp_demo Name=waitid Disabled=0 @@ -14189,7 +14384,7 @@ IsFallback=0 HasManagedDisplay=0 DisplayCount=1 -[MEASUREMENT_OBJECT_305_DISPLAY_1] +[MEASUREMENT_OBJECT_306_DISPLAY_1] Window=6 Index=2 Color=43690 @@ -14235,7 +14430,7 @@ YAxis_ID=0 AxisTemplate= GUID=DISPLAY_242a70ff-77c4-4e87-8018-688f59ee9576 -[MEASUREMENT_OBJECT_306] +[MEASUREMENT_OBJECT_307] Module=xcp_demo Name=write Disabled=0 @@ -14250,7 +14445,7 @@ IsFallback=0 HasManagedDisplay=0 DisplayCount=1 -[MEASUREMENT_OBJECT_306_DISPLAY_1] +[MEASUREMENT_OBJECT_307_DISPLAY_1] Window=6 Index=1 Color=11184640 @@ -14296,7 +14491,7 @@ YAxis_ID=0 AxisTemplate= GUID=DISPLAY_08bbfc9b-2c88-4479-902a-6a624be10ae4 -[MEASUREMENT_OBJECT_307] +[MEASUREMENT_OBJECT_308] Module=xcp_demo Name=writev Disabled=0 @@ -14311,7 +14506,7 @@ IsFallback=0 HasManagedDisplay=0 DisplayCount=1 -[MEASUREMENT_OBJECT_307_DISPLAY_1] +[MEASUREMENT_OBJECT_308_DISPLAY_1] Window=6 Index=0 Color=16755455 @@ -14359,8 +14554,8 @@ GUID=DISPLAY_5e4c9599-244f-4c15-b2a2-18beb18b0029 [MEASUREMENT_OBJECT_30_DISPLAY_1] Window=6 -Index=273 -Color=11184895 +Index=276 +Color=43690 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -14401,11 +14596,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_062cdd1d-b788-469a-ad1a-f6996bab579f +GUID=DISPLAY_92afa2ee-a182-4a94-9eee-9ce1b4b7f995 [MEASUREMENT_OBJECT_31] Module=xcp_demo -Name=close_range +Name=clone Disabled=0 Mode=1 Rate=1000 @@ -14420,8 +14615,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_31_DISPLAY_1] Window=6 -Index=272 -Color=16755370 +Index=275 +Color=11184640 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -14462,11 +14657,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_fc99d826-168e-4c50-aaf1-63218f321707 +GUID=DISPLAY_08094d4e-caf2-4fed-9020-189b17f92415 [MEASUREMENT_OBJECT_32] Module=xcp_demo -Name=connect +Name=clone3 Disabled=0 Mode=1 Rate=1000 @@ -14481,8 +14676,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_32_DISPLAY_1] Window=6 -Index=271 -Color=11206570 +Index=274 +Color=16755455 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -14523,11 +14718,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_3a7bef58-82f8-446c-8196-079b40d4a9ad +GUID=DISPLAY_f7b1264d-c2b2-4940-8f45-201a310ff971 [MEASUREMENT_OBJECT_33] Module=xcp_demo -Name=copy_file_range +Name=close Disabled=0 Mode=1 Rate=1000 @@ -14542,8 +14737,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_33_DISPLAY_1] Window=6 -Index=270 -Color=65280 +Index=273 +Color=11184895 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -14584,11 +14779,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_7990df67-3c56-43cc-b210-25f7b0036e03 +GUID=DISPLAY_062cdd1d-b788-469a-ad1a-f6996bab579f [MEASUREMENT_OBJECT_34] Module=xcp_demo -Name=delete_module +Name=close_range Disabled=0 Mode=1 Rate=1000 @@ -14603,8 +14798,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_34_DISPLAY_1] Window=6 -Index=269 -Color=16776960 +Index=272 +Color=16755370 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -14645,11 +14840,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_07f4b6aa-f7d4-4849-82f0-4e3462d0916a +GUID=DISPLAY_fc99d826-168e-4c50-aaf1-63218f321707 [MEASUREMENT_OBJECT_35] Module=xcp_demo -Name=dup +Name=connect Disabled=0 Mode=1 Rate=1000 @@ -14664,8 +14859,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_35_DISPLAY_1] Window=6 -Index=268 -Color=16711935 +Index=271 +Color=11206570 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -14706,11 +14901,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_aced95bf-9ca0-4b46-88d0-26d35f703a74 +GUID=DISPLAY_3a7bef58-82f8-446c-8196-079b40d4a9ad [MEASUREMENT_OBJECT_36] Module=xcp_demo -Name=dup3 +Name=copy_file_range Disabled=0 Mode=1 Rate=1000 @@ -14725,8 +14920,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_36_DISPLAY_1] Window=6 -Index=267 -Color=33023 +Index=270 +Color=65280 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -14767,11 +14962,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_27e43f2e-e398-447d-bb02-d8a29545f7c1 +GUID=DISPLAY_7990df67-3c56-43cc-b210-25f7b0036e03 [MEASUREMENT_OBJECT_37] Module=xcp_demo -Name=epoll_create1 +Name=delete_module Disabled=0 Mode=1 Rate=1000 @@ -14786,8 +14981,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_37_DISPLAY_1] Window=6 -Index=266 -Color=16744576 +Index=269 +Color=16776960 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -14828,11 +15023,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_511e2157-070a-451e-97df-42e6d2c58a38 +GUID=DISPLAY_07f4b6aa-f7d4-4849-82f0-4e3462d0916a [MEASUREMENT_OBJECT_38] Module=xcp_demo -Name=epoll_ctl +Name=dup Disabled=0 Mode=1 Rate=1000 @@ -14847,8 +15042,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_38_DISPLAY_1] Window=6 -Index=265 -Color=16777215 +Index=268 +Color=16711935 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -14889,11 +15084,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_f05381f8-3236-46ef-bf5d-30081dee6e0e +GUID=DISPLAY_aced95bf-9ca0-4b46-88d0-26d35f703a74 [MEASUREMENT_OBJECT_39] Module=xcp_demo -Name=epoll_pwait +Name=dup3 Disabled=0 Mode=1 Rate=1000 @@ -14908,8 +15103,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_39_DISPLAY_1] Window=6 -Index=264 -Color=43520 +Index=267 +Color=33023 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -14950,20 +15145,20 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_ded65198-c65d-44d7-bf41-b042ff9a4fbe +GUID=DISPLAY_27e43f2e-e398-447d-bb02-d8a29545f7c1 [MEASUREMENT_OBJECT_3_DISPLAY_1] -Window=6 -Index=300 -Color=28784 +Window=7 +Index=1 +Color=65280 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 LineTyp=2 YMinHome=0 -YMaxHome=100 +YMaxHome=4294970000 YMin=0 -YMax=100 +YMax=4294970000 XOffsetNS=0 XOffset=0 ValueFormat=3 @@ -14980,7 +15175,7 @@ Digits=6 Enabled=1 StoredFocused=0 SublMask=1 -MeaSublMask=0 +MeaSublMask=3 LockScaling=0 RightAxis=0 MapMode=2 @@ -14996,13 +15191,13 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_8de0f46e-d7aa-498e-84f9-2bc7e1d6c040 +GUID=DISPLAY_1944648e-7c9e-444d-8469-81f8a24394b4 [MEASUREMENT_OBJECT_4] Module=xcp_demo -Name=sendto +Name=syscall_pid Disabled=0 -Mode=2147483650 +Mode=2147483651 Rate=0 ModeIsDefault=1 Row=0 @@ -15015,7 +15210,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_40] Module=xcp_demo -Name=epoll_pwait2 +Name=epoll_create1 Disabled=0 Mode=1 Rate=1000 @@ -15030,8 +15225,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_40_DISPLAY_1] Window=6 -Index=263 -Color=204 +Index=266 +Color=16744576 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -15072,11 +15267,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_ec4cdfc4-85c5-4236-bd49-5d3331fe59a5 +GUID=DISPLAY_511e2157-070a-451e-97df-42e6d2c58a38 [MEASUREMENT_OBJECT_41] Module=xcp_demo -Name=eventfd2 +Name=epoll_ctl Disabled=0 Mode=1 Rate=1000 @@ -15091,8 +15286,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_41_DISPLAY_1] Window=6 -Index=262 -Color=28784 +Index=265 +Color=16777215 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -15133,11 +15328,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_d7e2787d-4ef2-4e21-9698-a5e84e8cb728 +GUID=DISPLAY_f05381f8-3236-46ef-bf5d-30081dee6e0e [MEASUREMENT_OBJECT_42] Module=xcp_demo -Name=execve +Name=epoll_pwait Disabled=0 Mode=1 Rate=1000 @@ -15152,8 +15347,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_42_DISPLAY_1] Window=6 -Index=261 -Color=16755200 +Index=264 +Color=43520 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -15194,11 +15389,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_3534214c-f40b-47ee-97d6-e5c31284c448 +GUID=DISPLAY_ded65198-c65d-44d7-bf41-b042ff9a4fbe [MEASUREMENT_OBJECT_43] Module=xcp_demo -Name=execveat +Name=epoll_pwait2 Disabled=0 Mode=1 Rate=1000 @@ -15213,8 +15408,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_43_DISPLAY_1] Window=6 -Index=260 -Color=16711850 +Index=263 +Color=204 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -15255,11 +15450,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_1970f459-2223-4686-8db6-1918ea4c58f1 +GUID=DISPLAY_ec4cdfc4-85c5-4236-bd49-5d3331fe59a5 [MEASUREMENT_OBJECT_44] Module=xcp_demo -Name=exit +Name=eventfd2 Disabled=0 Mode=1 Rate=1000 @@ -15274,8 +15469,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_44_DISPLAY_1] Window=6 -Index=259 -Color=21930 +Index=262 +Color=28784 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -15316,11 +15511,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_536a9293-a8bd-415c-be13-52e15b3a0a73 +GUID=DISPLAY_d7e2787d-4ef2-4e21-9698-a5e84e8cb728 [MEASUREMENT_OBJECT_45] Module=xcp_demo -Name=exit_group +Name=execve Disabled=0 Mode=1 Rate=1000 @@ -15335,8 +15530,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_45_DISPLAY_1] Window=6 -Index=258 -Color=11162965 +Index=261 +Color=16755200 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -15377,11 +15572,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_f9cd92fb-0435-453b-94a0-6d84688f2605 +GUID=DISPLAY_3534214c-f40b-47ee-97d6-e5c31284c448 [MEASUREMENT_OBJECT_46] Module=xcp_demo -Name=faccessat +Name=execveat Disabled=0 Mode=1 Rate=1000 @@ -15396,8 +15591,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_46_DISPLAY_1] Window=6 -Index=257 -Color=11206655 +Index=260 +Color=16711850 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -15438,11 +15633,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_fb38aadd-fc96-4b05-9529-1d57d90d0c93 +GUID=DISPLAY_1970f459-2223-4686-8db6-1918ea4c58f1 [MEASUREMENT_OBJECT_47] Module=xcp_demo -Name=faccessat2 +Name=exit Disabled=0 Mode=1 Rate=1000 @@ -15457,8 +15652,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_47_DISPLAY_1] Window=6 -Index=256 -Color=65450 +Index=259 +Color=21930 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -15499,11 +15694,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_9e64571e-734d-42fa-a72e-bad8652bd65a +GUID=DISPLAY_536a9293-a8bd-415c-be13-52e15b3a0a73 [MEASUREMENT_OBJECT_48] Module=xcp_demo -Name=fadvise64 +Name=exit_group Disabled=0 Mode=1 Rate=1000 @@ -15518,8 +15713,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_48_DISPLAY_1] Window=6 -Index=255 -Color=8421631 +Index=258 +Color=11162965 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -15560,11 +15755,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_1dbb22f6-9fd5-4673-9d7d-9aa8690e8e98 +GUID=DISPLAY_f9cd92fb-0435-453b-94a0-6d84688f2605 [MEASUREMENT_OBJECT_49] Module=xcp_demo -Name=fallocate +Name=faccessat Disabled=0 Mode=1 Rate=1000 @@ -15579,8 +15774,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_49_DISPLAY_1] Window=6 -Index=254 -Color=43690 +Index=257 +Color=11206655 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -15621,20 +15816,20 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_55e12012-5c08-4887-989d-ec87c04210b6 +GUID=DISPLAY_fb38aadd-fc96-4b05-9529-1d57d90d0c93 [MEASUREMENT_OBJECT_4_DISPLAY_1] -Window=6 -Index=301 -Color=11184895 +Window=7 +Index=0 +Color=255 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 LineTyp=2 YMinHome=0 -YMaxHome=100 +YMaxHome=4294970000 YMin=0 -YMax=100 +YMax=4294970000 XOffsetNS=0 XOffset=0 ValueFormat=3 @@ -15649,9 +15844,9 @@ LineWidth=1 Precision=-2 Digits=6 Enabled=1 -StoredFocused=0 +StoredFocused=1 SublMask=1 -MeaSublMask=0 +MeaSublMask=3 LockScaling=0 RightAxis=0 MapMode=2 @@ -15667,15 +15862,15 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_671a1a5a-2604-45fd-8157-e69fd7d85014 +GUID=DISPLAY_48506d0a-ff8a-4b8d-97a1-ae3fba094c08 [MEASUREMENT_OBJECT_5] Module=xcp_demo -Name=futex +Name=recvfrom Disabled=0 -Mode=2147483650 +Mode=2147483653 Rate=0 -ModeIsDefault=1 +ModeIsDefault=0 Row=0 Column=0 MeaReferenced=1 @@ -15686,7 +15881,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_50] Module=xcp_demo -Name=fchdir +Name=faccessat2 Disabled=0 Mode=1 Rate=1000 @@ -15701,8 +15896,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_50_DISPLAY_1] Window=6 -Index=253 -Color=11184640 +Index=256 +Color=65450 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -15743,11 +15938,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_d2cb8601-cef1-43c0-b1d2-7b4d0e39a5d4 +GUID=DISPLAY_9e64571e-734d-42fa-a72e-bad8652bd65a [MEASUREMENT_OBJECT_51] Module=xcp_demo -Name=fchmod +Name=fadvise64 Disabled=0 Mode=1 Rate=1000 @@ -15762,8 +15957,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_51_DISPLAY_1] Window=6 -Index=252 -Color=16755455 +Index=255 +Color=8421631 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -15804,11 +15999,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_f1b7cced-c258-483b-ba89-0d24da8dc2bd +GUID=DISPLAY_1dbb22f6-9fd5-4673-9d7d-9aa8690e8e98 [MEASUREMENT_OBJECT_52] Module=xcp_demo -Name=fchmodat +Name=fallocate Disabled=0 Mode=1 Rate=1000 @@ -15823,8 +16018,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_52_DISPLAY_1] Window=6 -Index=251 -Color=11184895 +Index=254 +Color=43690 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -15865,11 +16060,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_405b57a2-c0e1-476d-a0e8-2912e3e3ece6 +GUID=DISPLAY_55e12012-5c08-4887-989d-ec87c04210b6 [MEASUREMENT_OBJECT_53] Module=xcp_demo -Name=fchmodat2 +Name=fchdir Disabled=0 Mode=1 Rate=1000 @@ -15884,8 +16079,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_53_DISPLAY_1] Window=6 -Index=250 -Color=16755370 +Index=253 +Color=11184640 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -15926,11 +16121,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_9216a96d-4f3c-4c32-aa46-323bf4e1d812 +GUID=DISPLAY_d2cb8601-cef1-43c0-b1d2-7b4d0e39a5d4 [MEASUREMENT_OBJECT_54] Module=xcp_demo -Name=fchown +Name=fchmod Disabled=0 Mode=1 Rate=1000 @@ -15945,8 +16140,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_54_DISPLAY_1] Window=6 -Index=249 -Color=11206570 +Index=252 +Color=16755455 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -15987,11 +16182,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_af4e0e41-d1a1-4bfd-b4c1-3bf3c44aff79 +GUID=DISPLAY_f1b7cced-c258-483b-ba89-0d24da8dc2bd [MEASUREMENT_OBJECT_55] Module=xcp_demo -Name=fchownat +Name=fchmodat Disabled=0 Mode=1 Rate=1000 @@ -16006,8 +16201,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_55_DISPLAY_1] Window=6 -Index=248 -Color=65280 +Index=251 +Color=11184895 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -16048,11 +16243,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_1bca4bb8-1175-4dcc-9882-2687c8f4287d +GUID=DISPLAY_405b57a2-c0e1-476d-a0e8-2912e3e3ece6 [MEASUREMENT_OBJECT_56] Module=xcp_demo -Name=fcntl +Name=fchmodat2 Disabled=0 Mode=1 Rate=1000 @@ -16067,8 +16262,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_56_DISPLAY_1] Window=6 -Index=247 -Color=255 +Index=250 +Color=16755370 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -16109,11 +16304,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_5ced7d60-8c40-4a99-a2fb-da35e4da1e44 +GUID=DISPLAY_9216a96d-4f3c-4c32-aa46-323bf4e1d812 [MEASUREMENT_OBJECT_57] Module=xcp_demo -Name=fdatasync +Name=fchown Disabled=0 Mode=1 Rate=1000 @@ -16128,8 +16323,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_57_DISPLAY_1] Window=6 -Index=246 -Color=65535 +Index=249 +Color=11206570 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -16170,11 +16365,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_1806c8a7-30e9-4023-b5a5-0d2f213ceae1 +GUID=DISPLAY_af4e0e41-d1a1-4bfd-b4c1-3bf3c44aff79 [MEASUREMENT_OBJECT_58] Module=xcp_demo -Name=fgetxattr +Name=fchownat Disabled=0 Mode=1 Rate=1000 @@ -16189,8 +16384,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_58_DISPLAY_1] Window=6 -Index=245 -Color=16776960 +Index=248 +Color=65280 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -16231,11 +16426,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_b58eaa2b-8c05-4039-a5eb-ee8097c7f3bb +GUID=DISPLAY_1bca4bb8-1175-4dcc-9882-2687c8f4287d [MEASUREMENT_OBJECT_59] Module=xcp_demo -Name=flistxattr +Name=fcntl Disabled=0 Mode=1 Rate=1000 @@ -16250,8 +16445,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_59_DISPLAY_1] Window=6 -Index=244 -Color=16711935 +Index=247 +Color=255 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -16292,12 +16487,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_5d8e1244-0769-4c9d-b2ab-6f7b7c63d8dc +GUID=DISPLAY_5ced7d60-8c40-4a99-a2fb-da35e4da1e44 [MEASUREMENT_OBJECT_5_DISPLAY_1] Window=6 -Index=297 -Color=8421631 +Index=300 +Color=28784 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -16320,7 +16515,7 @@ LineWidth=1 Precision=-2 Digits=6 Enabled=1 -StoredFocused=0 +StoredFocused=1 SublMask=1 MeaSublMask=0 LockScaling=0 @@ -16338,15 +16533,15 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_aedd0bff-bfc2-4674-9dac-42013c2f47dd +GUID=DISPLAY_8de0f46e-d7aa-498e-84f9-2bc7e1d6c040 [MEASUREMENT_OBJECT_6] Module=xcp_demo -Name=nanosleep +Name=sendto Disabled=0 -Mode=2147483650 +Mode=2147483652 Rate=0 -ModeIsDefault=1 +ModeIsDefault=0 Row=0 Column=0 MeaReferenced=1 @@ -16357,7 +16552,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_60] Module=xcp_demo -Name=flock +Name=fdatasync Disabled=0 Mode=1 Rate=1000 @@ -16372,8 +16567,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_60_DISPLAY_1] Window=6 -Index=243 -Color=33023 +Index=246 +Color=65535 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -16414,11 +16609,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_02c0e3cf-4ef2-485e-ad25-adbc08759570 +GUID=DISPLAY_1806c8a7-30e9-4023-b5a5-0d2f213ceae1 [MEASUREMENT_OBJECT_61] Module=xcp_demo -Name=fremovexattr +Name=fgetxattr Disabled=0 Mode=1 Rate=1000 @@ -16433,8 +16628,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_61_DISPLAY_1] Window=6 -Index=242 -Color=16744576 +Index=245 +Color=16776960 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -16475,11 +16670,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_261f4b6f-03c2-4e0b-96dc-56c1ddabf454 +GUID=DISPLAY_b58eaa2b-8c05-4039-a5eb-ee8097c7f3bb [MEASUREMENT_OBJECT_62] Module=xcp_demo -Name=fsconfig +Name=flistxattr Disabled=0 Mode=1 Rate=1000 @@ -16494,8 +16689,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_62_DISPLAY_1] Window=6 -Index=241 -Color=16777215 +Index=244 +Color=16711935 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -16536,11 +16731,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_850229a2-9e05-4631-bc41-9eeb18c1b8e0 +GUID=DISPLAY_5d8e1244-0769-4c9d-b2ab-6f7b7c63d8dc [MEASUREMENT_OBJECT_63] Module=xcp_demo -Name=fsetxattr +Name=flock Disabled=0 Mode=1 Rate=1000 @@ -16555,8 +16750,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_63_DISPLAY_1] Window=6 -Index=240 -Color=43520 +Index=243 +Color=33023 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -16597,11 +16792,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_16f7f233-0dfb-46d3-9607-51fd9b9392b8 +GUID=DISPLAY_02c0e3cf-4ef2-485e-ad25-adbc08759570 [MEASUREMENT_OBJECT_64] Module=xcp_demo -Name=fsmount +Name=fremovexattr Disabled=0 Mode=1 Rate=1000 @@ -16616,8 +16811,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_64_DISPLAY_1] Window=6 -Index=239 -Color=204 +Index=242 +Color=16744576 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -16658,11 +16853,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_9a2e1ca0-dca7-4e13-85db-930d6681060f +GUID=DISPLAY_261f4b6f-03c2-4e0b-96dc-56c1ddabf454 [MEASUREMENT_OBJECT_65] Module=xcp_demo -Name=fsopen +Name=fsconfig Disabled=0 Mode=1 Rate=1000 @@ -16677,8 +16872,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_65_DISPLAY_1] Window=6 -Index=238 -Color=28784 +Index=241 +Color=16777215 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -16719,11 +16914,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_7a099ed1-4645-4bee-9055-19f4402ce53f +GUID=DISPLAY_850229a2-9e05-4631-bc41-9eeb18c1b8e0 [MEASUREMENT_OBJECT_66] Module=xcp_demo -Name=fspick +Name=fsetxattr Disabled=0 Mode=1 Rate=1000 @@ -16738,8 +16933,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_66_DISPLAY_1] Window=6 -Index=237 -Color=16755200 +Index=240 +Color=43520 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -16780,11 +16975,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_f4dfe020-5216-40d0-ae40-e247a1474492 +GUID=DISPLAY_16f7f233-0dfb-46d3-9607-51fd9b9392b8 [MEASUREMENT_OBJECT_67] Module=xcp_demo -Name=fstat +Name=fsmount Disabled=0 Mode=1 Rate=1000 @@ -16799,8 +16994,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_67_DISPLAY_1] Window=6 -Index=236 -Color=16711850 +Index=239 +Color=204 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -16841,11 +17036,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_281e2b5a-295b-4078-8ebc-6023cad4f480 +GUID=DISPLAY_9a2e1ca0-dca7-4e13-85db-930d6681060f [MEASUREMENT_OBJECT_68] Module=xcp_demo -Name=fstatat +Name=fsopen Disabled=0 Mode=1 Rate=1000 @@ -16860,8 +17055,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_68_DISPLAY_1] Window=6 -Index=235 -Color=21930 +Index=238 +Color=28784 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -16902,11 +17097,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_97aff9db-aa8d-4633-b887-b243eea477e3 +GUID=DISPLAY_7a099ed1-4645-4bee-9055-19f4402ce53f [MEASUREMENT_OBJECT_69] Module=xcp_demo -Name=fstatfs +Name=fspick Disabled=0 Mode=1 Rate=1000 @@ -16921,8 +17116,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_69_DISPLAY_1] Window=6 -Index=234 -Color=11162965 +Index=237 +Color=16755200 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -16963,12 +17158,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_150ecfba-7b4d-488c-ac39-469de8e1a3cc +GUID=DISPLAY_f4dfe020-5216-40d0-ae40-e247a1474492 [MEASUREMENT_OBJECT_6_DISPLAY_1] Window=6 -Index=302 -Color=65280 +Index=301 +Color=11184895 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -17009,14 +17204,14 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_4536a7d0-f789-454b-9430-f500662c2ae8 +GUID=DISPLAY_671a1a5a-2604-45fd-8157-e69fd7d85014 [MEASUREMENT_OBJECT_7] Module=xcp_demo -Name=futex_requeue +Name=clock_nanosleep Disabled=0 -Mode=1 -Rate=1000 +Mode=2147483651 +Rate=0 ModeIsDefault=0 Row=0 Column=0 @@ -17028,7 +17223,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_70] Module=xcp_demo -Name=fsync +Name=fstat Disabled=0 Mode=1 Rate=1000 @@ -17043,8 +17238,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_70_DISPLAY_1] Window=6 -Index=233 -Color=11206655 +Index=236 +Color=16711850 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -17085,11 +17280,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_42d27a15-eab7-42a6-9f59-7fec3ffbdd2b +GUID=DISPLAY_281e2b5a-295b-4078-8ebc-6023cad4f480 [MEASUREMENT_OBJECT_71] Module=xcp_demo -Name=ftruncate +Name=fstatat Disabled=0 Mode=1 Rate=1000 @@ -17104,8 +17299,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_71_DISPLAY_1] Window=6 -Index=232 -Color=65450 +Index=235 +Color=21930 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -17146,11 +17341,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_7e416730-8e6b-4f8a-8914-83e31fe170e9 +GUID=DISPLAY_97aff9db-aa8d-4633-b887-b243eea477e3 [MEASUREMENT_OBJECT_72] Module=xcp_demo -Name=get_mempolicy +Name=fstatfs Disabled=0 Mode=1 Rate=1000 @@ -17165,8 +17360,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_72_DISPLAY_1] Window=6 -Index=231 -Color=16755370 +Index=234 +Color=11162965 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -17207,11 +17402,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_501a04b7-6e81-44f5-bc70-c2092c28b1f1 +GUID=DISPLAY_150ecfba-7b4d-488c-ac39-469de8e1a3cc [MEASUREMENT_OBJECT_73] Module=xcp_demo -Name=get_robust_list +Name=fsync Disabled=0 Mode=1 Rate=1000 @@ -17226,8 +17421,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_73_DISPLAY_1] Window=6 -Index=230 -Color=11206570 +Index=233 +Color=11206655 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -17268,11 +17463,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_1d3f31c1-8149-485e-80bc-f002960aef9d +GUID=DISPLAY_42d27a15-eab7-42a6-9f59-7fec3ffbdd2b [MEASUREMENT_OBJECT_74] Module=xcp_demo -Name=getcpu +Name=ftruncate Disabled=0 Mode=1 Rate=1000 @@ -17287,8 +17482,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_74_DISPLAY_1] Window=6 -Index=229 -Color=65280 +Index=232 +Color=65450 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -17329,11 +17524,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_4aabbf2e-7e38-490c-95cb-d3602fa2aa25 +GUID=DISPLAY_7e416730-8e6b-4f8a-8914-83e31fe170e9 [MEASUREMENT_OBJECT_75] Module=xcp_demo -Name=getcwd +Name=get_mempolicy Disabled=0 Mode=1 Rate=1000 @@ -17348,8 +17543,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_75_DISPLAY_1] Window=6 -Index=228 -Color=255 +Index=231 +Color=16755370 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -17390,11 +17585,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_bded0bcc-1268-4948-8189-a095e6feb827 +GUID=DISPLAY_501a04b7-6e81-44f5-bc70-c2092c28b1f1 [MEASUREMENT_OBJECT_76] Module=xcp_demo -Name=getdents64 +Name=get_robust_list Disabled=0 Mode=1 Rate=1000 @@ -17409,8 +17604,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_76_DISPLAY_1] Window=6 -Index=227 -Color=65535 +Index=230 +Color=11206570 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -17451,11 +17646,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_30df5f44-2054-4b6f-ae98-0fdd72720673 +GUID=DISPLAY_1d3f31c1-8149-485e-80bc-f002960aef9d [MEASUREMENT_OBJECT_77] Module=xcp_demo -Name=getegid +Name=getcpu Disabled=0 Mode=1 Rate=1000 @@ -17470,8 +17665,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_77_DISPLAY_1] Window=6 -Index=226 -Color=16776960 +Index=229 +Color=65280 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -17512,11 +17707,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_016b5c2e-8be7-439b-84c7-b706a812bc6c +GUID=DISPLAY_4aabbf2e-7e38-490c-95cb-d3602fa2aa25 [MEASUREMENT_OBJECT_78] Module=xcp_demo -Name=geteuid +Name=getcwd Disabled=0 Mode=1 Rate=1000 @@ -17531,8 +17726,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_78_DISPLAY_1] Window=6 -Index=225 -Color=16711935 +Index=228 +Color=255 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -17573,11 +17768,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_05cb7447-c297-4a3f-8233-80431edbb93e +GUID=DISPLAY_bded0bcc-1268-4948-8189-a095e6feb827 [MEASUREMENT_OBJECT_79] Module=xcp_demo -Name=getgid +Name=getdents64 Disabled=0 Mode=1 Rate=1000 @@ -17592,8 +17787,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_79_DISPLAY_1] Window=6 -Index=224 -Color=33023 +Index=227 +Color=65535 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -17634,12 +17829,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_00540f96-4aef-4ba9-aa42-eb034256ad81 +GUID=DISPLAY_30df5f44-2054-4b6f-ae98-0fdd72720673 [MEASUREMENT_OBJECT_7_DISPLAY_1] Window=6 -Index=296 -Color=43690 +Index=303 +Color=65535 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -17680,14 +17875,14 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_09d56764-0077-45a5-bb6f-b72084c9883e +GUID=DISPLAY_003ae240-e13f-440e-83ba-9e513a58a932 [MEASUREMENT_OBJECT_8] Module=xcp_demo -Name=futex_wait +Name=nanosleep Disabled=0 -Mode=1 -Rate=1000 +Mode=2147483651 +Rate=0 ModeIsDefault=0 Row=0 Column=0 @@ -17699,7 +17894,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_80] Module=xcp_demo -Name=getgroups +Name=getegid Disabled=0 Mode=1 Rate=1000 @@ -17714,8 +17909,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_80_DISPLAY_1] Window=6 -Index=223 -Color=16744576 +Index=226 +Color=16776960 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -17756,11 +17951,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_ee20d558-d728-45d0-870a-82208f75e46e +GUID=DISPLAY_016b5c2e-8be7-439b-84c7-b706a812bc6c [MEASUREMENT_OBJECT_81] Module=xcp_demo -Name=getitimer +Name=geteuid Disabled=0 Mode=1 Rate=1000 @@ -17775,8 +17970,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_81_DISPLAY_1] Window=6 -Index=222 -Color=16777215 +Index=225 +Color=16711935 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -17817,11 +18012,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_e3cffc21-0af6-4f28-ad03-8f3184412bec +GUID=DISPLAY_05cb7447-c297-4a3f-8233-80431edbb93e [MEASUREMENT_OBJECT_82] Module=xcp_demo -Name=getpeername +Name=getgid Disabled=0 Mode=1 Rate=1000 @@ -17836,8 +18031,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_82_DISPLAY_1] Window=6 -Index=221 -Color=43520 +Index=224 +Color=33023 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -17878,11 +18073,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_37f69124-b12f-41d1-8ee0-9ca4153d5678 +GUID=DISPLAY_00540f96-4aef-4ba9-aa42-eb034256ad81 [MEASUREMENT_OBJECT_83] Module=xcp_demo -Name=getpgid +Name=getgroups Disabled=0 Mode=1 Rate=1000 @@ -17897,8 +18092,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_83_DISPLAY_1] Window=6 -Index=220 -Color=204 +Index=223 +Color=16744576 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -17939,11 +18134,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_6d020077-b820-4c35-9628-37ed52d0d194 +GUID=DISPLAY_ee20d558-d728-45d0-870a-82208f75e46e [MEASUREMENT_OBJECT_84] Module=xcp_demo -Name=getpid +Name=getitimer Disabled=0 Mode=1 Rate=1000 @@ -17958,8 +18153,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_84_DISPLAY_1] Window=6 -Index=219 -Color=28784 +Index=222 +Color=16777215 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -18000,11 +18195,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_37e637d2-e66b-48b4-838c-013ed6431d65 +GUID=DISPLAY_e3cffc21-0af6-4f28-ad03-8f3184412bec [MEASUREMENT_OBJECT_85] Module=xcp_demo -Name=getppid +Name=getpeername Disabled=0 Mode=1 Rate=1000 @@ -18019,8 +18214,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_85_DISPLAY_1] Window=6 -Index=218 -Color=16755200 +Index=221 +Color=43520 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -18061,11 +18256,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_ae52aa85-ed10-413f-aeca-460b9ad8d2d9 +GUID=DISPLAY_37f69124-b12f-41d1-8ee0-9ca4153d5678 [MEASUREMENT_OBJECT_86] Module=xcp_demo -Name=getpriority +Name=getpgid Disabled=0 Mode=1 Rate=1000 @@ -18080,8 +18275,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_86_DISPLAY_1] Window=6 -Index=217 -Color=16711850 +Index=220 +Color=204 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -18122,11 +18317,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_b8806848-0722-422c-b626-754a749d5270 +GUID=DISPLAY_6d020077-b820-4c35-9628-37ed52d0d194 [MEASUREMENT_OBJECT_87] Module=xcp_demo -Name=getrandom +Name=getpid Disabled=0 Mode=1 Rate=1000 @@ -18141,8 +18336,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_87_DISPLAY_1] Window=6 -Index=216 -Color=21930 +Index=219 +Color=28784 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -18183,11 +18378,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_21c8c710-d401-461e-8318-cc9bdfa08722 +GUID=DISPLAY_37e637d2-e66b-48b4-838c-013ed6431d65 [MEASUREMENT_OBJECT_88] Module=xcp_demo -Name=getresgid +Name=getppid Disabled=0 Mode=1 Rate=1000 @@ -18202,8 +18397,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_88_DISPLAY_1] Window=6 -Index=215 -Color=11162965 +Index=218 +Color=16755200 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -18244,11 +18439,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_62d5251f-eb8e-4ebe-a606-007b0bda10d6 +GUID=DISPLAY_ae52aa85-ed10-413f-aeca-460b9ad8d2d9 [MEASUREMENT_OBJECT_89] Module=xcp_demo -Name=getresuid +Name=getpriority Disabled=0 Mode=1 Rate=1000 @@ -18263,8 +18458,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_89_DISPLAY_1] Window=6 -Index=214 -Color=11206655 +Index=217 +Color=16711850 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -18305,12 +18500,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_510c6e25-f4a5-4bd7-ae41-9f664fa38cb7 +GUID=DISPLAY_b8806848-0722-422c-b626-754a749d5270 [MEASUREMENT_OBJECT_8_DISPLAY_1] Window=6 -Index=295 -Color=11184640 +Index=304 +Color=65280 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -18351,14 +18546,14 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_c3887c07-5888-46f6-9101-411953e03e62 +GUID=DISPLAY_4536a7d0-f789-454b-9430-f500662c2ae8 [MEASUREMENT_OBJECT_9] Module=xcp_demo -Name=futex_waitv +Name=futex Disabled=0 -Mode=1 -Rate=1000 +Mode=2147483651 +Rate=0 ModeIsDefault=0 Row=0 Column=0 @@ -18370,7 +18565,7 @@ DisplayCount=1 [MEASUREMENT_OBJECT_90] Module=xcp_demo -Name=getrlimit +Name=getrandom Disabled=0 Mode=1 Rate=1000 @@ -18385,8 +18580,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_90_DISPLAY_1] Window=6 -Index=213 -Color=65450 +Index=216 +Color=21930 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -18427,11 +18622,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_63b07a3d-4e13-43ef-8b67-0212cdb259dc +GUID=DISPLAY_21c8c710-d401-461e-8318-cc9bdfa08722 [MEASUREMENT_OBJECT_91] Module=xcp_demo -Name=getrusage +Name=getresgid Disabled=0 Mode=1 Rate=1000 @@ -18446,8 +18641,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_91_DISPLAY_1] Window=6 -Index=212 -Color=8421631 +Index=215 +Color=11162965 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -18488,11 +18683,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_ed7ad16e-290f-4956-b98b-51c5604661fb +GUID=DISPLAY_62d5251f-eb8e-4ebe-a606-007b0bda10d6 [MEASUREMENT_OBJECT_92] Module=xcp_demo -Name=getsid +Name=getresuid Disabled=0 Mode=1 Rate=1000 @@ -18507,8 +18702,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_92_DISPLAY_1] Window=6 -Index=211 -Color=43690 +Index=214 +Color=11206655 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -18549,11 +18744,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_6078bc3d-4506-4759-ab66-02aea0a16dfe +GUID=DISPLAY_510c6e25-f4a5-4bd7-ae41-9f664fa38cb7 [MEASUREMENT_OBJECT_93] Module=xcp_demo -Name=getsockname +Name=getrlimit Disabled=0 Mode=1 Rate=1000 @@ -18568,8 +18763,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_93_DISPLAY_1] Window=6 -Index=210 -Color=11184640 +Index=213 +Color=65450 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -18610,11 +18805,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_ae312491-53b8-4a72-9f2b-81b511db3fa0 +GUID=DISPLAY_63b07a3d-4e13-43ef-8b67-0212cdb259dc [MEASUREMENT_OBJECT_94] Module=xcp_demo -Name=getsockopt +Name=getrusage Disabled=0 Mode=1 Rate=1000 @@ -18629,8 +18824,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_94_DISPLAY_1] Window=6 -Index=209 -Color=16755455 +Index=212 +Color=8421631 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -18671,11 +18866,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_770b4012-fe5a-4b30-9b99-15c24d7f5200 +GUID=DISPLAY_ed7ad16e-290f-4956-b98b-51c5604661fb [MEASUREMENT_OBJECT_95] Module=xcp_demo -Name=gettid +Name=getsid Disabled=0 Mode=1 Rate=1000 @@ -18690,8 +18885,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_95_DISPLAY_1] Window=6 -Index=208 -Color=11184895 +Index=211 +Color=43690 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -18732,11 +18927,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_cded321a-9245-438a-a6f2-14eaced60ad0 +GUID=DISPLAY_6078bc3d-4506-4759-ab66-02aea0a16dfe [MEASUREMENT_OBJECT_96] Module=xcp_demo -Name=gettimeofday +Name=getsockname Disabled=0 Mode=1 Rate=1000 @@ -18751,8 +18946,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_96_DISPLAY_1] Window=6 -Index=207 -Color=16755370 +Index=210 +Color=11184640 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -18793,11 +18988,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_5aaa4b5a-a728-4aa0-9fb8-60550810c7ea +GUID=DISPLAY_ae312491-53b8-4a72-9f2b-81b511db3fa0 [MEASUREMENT_OBJECT_97] Module=xcp_demo -Name=getuid +Name=getsockopt Disabled=0 Mode=1 Rate=1000 @@ -18812,8 +19007,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_97_DISPLAY_1] Window=6 -Index=206 -Color=11206570 +Index=209 +Color=16755455 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -18854,11 +19049,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_b902f2ca-a114-46ce-8896-526d0eb70311 +GUID=DISPLAY_770b4012-fe5a-4b30-9b99-15c24d7f5200 [MEASUREMENT_OBJECT_98] Module=xcp_demo -Name=getxattr +Name=gettid Disabled=0 Mode=1 Rate=1000 @@ -18873,8 +19068,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_98_DISPLAY_1] Window=6 -Index=205 -Color=65280 +Index=208 +Color=11184895 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -18915,11 +19110,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_ce5a66ec-0cb2-4935-b330-90d53f313d1f +GUID=DISPLAY_cded321a-9245-438a-a6f2-14eaced60ad0 [MEASUREMENT_OBJECT_99] Module=xcp_demo -Name=init_module +Name=gettimeofday Disabled=0 Mode=1 Rate=1000 @@ -18934,8 +19129,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_99_DISPLAY_1] Window=6 -Index=204 -Color=255 +Index=207 +Color=16755370 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -18976,12 +19171,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_11fdd9b0-5237-408c-9449-0867e1d21261 +GUID=DISPLAY_5aaa4b5a-a728-4aa0-9fb8-60550810c7ea [MEASUREMENT_OBJECT_9_DISPLAY_1] Window=6 -Index=294 -Color=16755455 +Index=297 +Color=8421631 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -19022,7 +19217,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_5ace000d-b269-4435-a4ac-71d952139440 +GUID=DISPLAY_aedd0bff-bfc2-4674-9dac-42013c2f47dd [MEASUREMENT_OPTIONS] RemainingRecordingTime=5000 @@ -19090,40 +19285,73 @@ VmdmDescription= Count=0 [Module_xcp_demo] -EVENT_COUNT=3 +EVENT_COUNT=6 EVENT_CHANNEL_0=0x0000 EVENT_CHANNEL_1=0x0001 EVENT_CHANNEL_2=0x0002 -EVENT_CYCLE_0=0 +EVENT_CHANNEL_3=0x0003 +EVENT_CHANNEL_4=0x0004 +EVENT_CHANNEL_5=0x0005 +EVENT_CYCLE_0=100 EVENT_CYCLE_1=0 EVENT_CYCLE_2=0 -EVENT_SAMPLE_UNIT_0=3 +EVENT_CYCLE_3=0 +EVENT_CYCLE_4=0 +EVENT_CYCLE_5=0 +EVENT_SAMPLE_UNIT_0=7 EVENT_SAMPLE_UNIT_1=3 EVENT_SAMPLE_UNIT_2=3 +EVENT_SAMPLE_UNIT_3=3 +EVENT_SAMPLE_UNIT_4=3 +EVENT_SAMPLE_UNIT_5=3 EVENT_MODE_0=4 EVENT_MODE_1=4 EVENT_MODE_2=4 +EVENT_MODE_3=4 +EVENT_MODE_4=4 +EVENT_MODE_5=4 EVENT_PRIO_0=0 EVENT_PRIO_1=0 EVENT_PRIO_2=0 +EVENT_PRIO_3=0 +EVENT_PRIO_4=0 +EVENT_PRIO_5=0 EVENT_MAX_DAQ_LIST_0=255 EVENT_MAX_DAQ_LIST_1=255 EVENT_MAX_DAQ_LIST_2=255 -EVENT_NAME_0=mainloop_event -EVENT_NAME_1=process_event -EVENT_NAME_2=syscall_event +EVENT_MAX_DAQ_LIST_3=255 +EVENT_MAX_DAQ_LIST_4=255 +EVENT_MAX_DAQ_LIST_5=255 +EVENT_NAME_0=async +EVENT_NAME_1=mainloop_event +EVENT_NAME_2=process_event +EVENT_NAME_3=syscall_event +EVENT_NAME_4=sendto +EVENT_NAME_5=recvfrom EVENT_MIN_CYCLE_TIME_CYCLE_0=0 EVENT_MIN_CYCLE_TIME_CYCLE_1=0 EVENT_MIN_CYCLE_TIME_CYCLE_2=0 +EVENT_MIN_CYCLE_TIME_CYCLE_3=0 +EVENT_MIN_CYCLE_TIME_CYCLE_4=0 +EVENT_MIN_CYCLE_TIME_CYCLE_5=0 EVENT_MIN_CYCLE_TIME_UNIT_0=9 EVENT_MIN_CYCLE_TIME_UNIT_1=9 EVENT_MIN_CYCLE_TIME_UNIT_2=9 +EVENT_MIN_CYCLE_TIME_UNIT_3=9 +EVENT_MIN_CYCLE_TIME_UNIT_4=9 +EVENT_MIN_CYCLE_TIME_UNIT_5=9 EVENT_MULTISAMPLES_0=0 EVENT_MULTISAMPLES_1=0 EVENT_MULTISAMPLES_2=0 +EVENT_MULTISAMPLES_3=0 +EVENT_MULTISAMPLES_4=0 +EVENT_MULTISAMPLES_5=0 EVENT_DPM_SUPPORTED_0=0 EVENT_DPM_SUPPORTED_1=0 EVENT_DPM_SUPPORTED_2=0 +EVENT_DPM_SUPPORTED_3=0 +EVENT_DPM_SUPPORTED_4=0 +EVENT_DPM_SUPPORTED_5=0 IGNORE_FIX_EVENTS=0 [OPTIONS] @@ -19133,7 +19361,7 @@ WindowSymbols=1 GlobalCursor=0 GlobalCursorTime=0 GlobalCursorTimeNs=0 -MainWindowPos=1, 69, 35, 3070, 2018 ;cmd, x, y, w, h +MainWindowPos=1, 22, 44, 3245, 1636 ;cmd, x, y, w, h [PAR_COMMENT] 1="Name","" @@ -19280,9 +19508,9 @@ Count=0 Count=0 [SIGNSELWND] -FocusID=2004 +FocusID=2002 ActiveTab=0 -FilterNodeID=All\Measurement list +FilterNodeID=All\Devices\xcp_demo TreeExpand_0=@All TreeExpand_1=All\Devices\xcp_demo\xcp_demo_autodetect.a2l TreeExpand_2=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events @@ -19300,8 +19528,8 @@ TreeExpand_13=@All\Function definitions TreeExpand_14=$All\Function definitions\Library functions TreeExpand_15=#All\Function definitions\Library functions TreeExpand_16=@All\Measurement list -TreeExpand_17=$All\Measurement list\All signals\accept4 -TreeExpand_18=#All\Measurement list\All signals\arch_specific_syscall +TreeExpand_17=$All\Measurement list\All signals +TreeExpand_18=#All\Measurement list\All signals\clock_gettime TextSearchCaseSensitive=0 TextSearchUseMode=1 TextSearchSearchFullText=1 @@ -19331,10 +19559,10 @@ Comment=Write Window Number=1 GUID=WINDOW_fe488169-c951-4049-bc2f-8689c99a387e ScreenDPIinSection=192 -Position=0, 18, 1192, 2484, 400 ;cmd, x, y, w, h -Position_dpi96=0, 9, 596, 1242, 200 ;cmd, x, y, w, h -Position_Page01=0, 18, 1192, 2484, 400 ;cmd, x, y, w, h -Position_Page01_dpi96=0, 9, 596, 1242, 200 ;cmd, x, y, w, h +Position=0, 18, 1190, 2484, 300 ;cmd, x, y, w, h +Position_dpi96=0, 9, 595, 1242, 150 ;cmd, x, y, w, h +Position_Page01=0, 18, 1190, 2484, 300 ;cmd, x, y, w, h +Position_Page01_dpi96=0, 9, 595, 1242, 150 ;cmd, x, y, w, h FloatingWindow=0 ShowSignalComments=1 DisplayMask=1 ; pages 1 @@ -19344,7 +19572,7 @@ ProgID=CNPTRACE.TraceCtrl.1 PROPERTIES_COUNT=22 PROPERTY_1=DeviceItems={"CaptureEvents":"1","ShowEvents":"0","NodeCount":"1","Node0":{"DeviceName":"xcp_demo","CaptureEvents":"1","ShowEvents":"1","NodeCount":"3","Node0":{"Channel":"2","DisplayColor":{"Color":"0","UseColor":"false"},"CaptureEvents":"1","ShowEvents":"1","NodeCount":"0"},"Node1":{"Channel":"3","DisplayColor":{"Color":"0","UseColor":"false"},"CaptureEvents":"1","ShowEvents":"1","NodeCount":"0"},"Node2":{"Channel":"4","DisplayColor":{"Color":"0","UseColor":"false"},"CaptureEvents":"1","ShowEvents":"1","NodeCount":"0"}}} PROPERTY_2=NetworkItems={"Items":"0"} -PROPERTY_3=ColumnConfigs={"ConfigCount":"2","Config0":{"Layout":"1","Name":"Initial","Column0":{"Width":"210","Position":"0","Name":"Time","IsDefaultName":"1"},"Column1":{"Width":"120","Position":"1","Name":"Channel","IsDefaultName":"1"},"Column2":{"Width":"60","Position":"2","Name":"ID","IsDefaultName":"1"},"Column3":{"Width":"90","Position":"3","Name":"Name","IsDefaultName":"1"},"Column5":{"Width":"60","Position":"5","Name":"Dir","IsDefaultName":"1"},"Column6":{"Width":"100","Position":"6","Name":"Length","IsDefaultName":"1"},"Column7":{"Width":"320","Position":"7","Name":"Data","IsDefaultName":"1"},"Column16":{"Width":"150","Position":"4","Name":"Type","IsDefaultName":"1"},"Column52":{"Width":"300","Position":"8","Name":"Protocol Interpretation","IsDefaultName":"1"}},"Config1":{"Layout":"25","Name":"XCP\/CCP Layout 1","Column0":{"Width":"260","Position":"0","Name":"Time","IsDefaultName":"1"},"Column1":{"Width":"150","Position":"6","Name":"Channel","IsDefaultName":"1"},"Column2":{"Width":"100","Position":"7","Name":"ID","IsDefaultName":"1"},"Column3":{"Width":"100","Position":"1","Name":"Name","IsDefaultName":"1"},"Column5":{"Width":"72","Position":"2","Name":"Dir","IsDefaultName":"1"},"Column6":{"Width":"100","Position":"3","Name":"Length","IsDefaultName":"1"},"Column7":{"Width":"3600","Position":"5","Name":"Data","IsDefaultName":"1"},"Column16":{"Width":"100","Position":"9","Name":"Packet Type","IsDefaultName":"1"},"Column52":{"Width":"3600","Position":"4","Name":"Interpretation","IsDefaultName":"1"},"Column79":{"Width":"100","Position":"8","Name":"Source","IsDefaultName":"1"}},"Active":"1","ActiveLayout":"25"} +PROPERTY_3=ColumnConfigs={"ConfigCount":"2","Config0":{"Layout":"1","Name":"Initial","Column0":{"Width":"210","Position":"0","Name":"Time","IsDefaultName":"1"},"Column1":{"Width":"120","Position":"1","Name":"Channel","IsDefaultName":"1"},"Column2":{"Width":"60","Position":"2","Name":"ID","IsDefaultName":"1"},"Column3":{"Width":"90","Position":"3","Name":"Name","IsDefaultName":"1"},"Column5":{"Width":"60","Position":"5","Name":"Dir","IsDefaultName":"1"},"Column6":{"Width":"100","Position":"6","Name":"Length","IsDefaultName":"1"},"Column7":{"Width":"320","Position":"7","Name":"Data","IsDefaultName":"1"},"Column16":{"Width":"150","Position":"4","Name":"Type","IsDefaultName":"1"},"Column52":{"Width":"300","Position":"8","Name":"Protocol Interpretation","IsDefaultName":"1"}},"Config1":{"Layout":"25","Name":"XCP\/CCP Layout 1","Column0":{"Width":"260","Position":"0","Name":"Time","IsDefaultName":"1"},"Column1":{"Width":"150","Position":"6","Name":"Channel","IsDefaultName":"1"},"Column2":{"Width":"100","Position":"7","Name":"ID","IsDefaultName":"1"},"Column3":{"Width":"100","Position":"1","Name":"Name","IsDefaultName":"1"},"Column5":{"Width":"72","Position":"2","Name":"Dir","IsDefaultName":"1"},"Column6":{"Width":"100","Position":"3","Name":"Length","IsDefaultName":"1"},"Column7":{"Width":"2450","Position":"5","Name":"Data","IsDefaultName":"1"},"Column16":{"Width":"100","Position":"9","Name":"Packet Type","IsDefaultName":"1"},"Column52":{"Width":"2450","Position":"4","Name":"Interpretation","IsDefaultName":"1"},"Column79":{"Width":"100","Position":"8","Name":"Source","IsDefaultName":"1"}},"Active":"1","ActiveLayout":"25"} PROPERTY_4=PinningEvents={"EventCount":"0"} PROPERTY_5=ExpandedEvents={"EventCount":"0"} PROPERTY_6=AnalysisGroups={"GroupCount":"1","Group0":{"Enabled":"1","Expanded":"1","Name":"Filter Group 0","FilterCount":"2","Filter0":{"Stop":"1","Enabled":"1","ConditionCount":"0"},"Filter1":{"Stop":"0","Enabled":"0","ConditionCount":"0"}}} @@ -19373,8 +19601,8 @@ Column_0=0, 260 Column_1=4, 100 Column_2=1, 72 Column_3=2, 100 -Column_4=513, 3600 -Column_5=3, 3600 +Column_4=513, 2450 +Column_5=3, 2450 Column_6=256, 150 Column_7=257, 100 Column_8=5, 100 @@ -19407,34 +19635,34 @@ CustomColorFlag=0 Color=0 [WINDOW_3] -ComponentCount=1 +ComponentCount=2 Title= Type=65536 Comment=Multi view window Number=3 GUID=WINDOW_4ba98e44-d13f-4d6f-a877-42d6fa18dbae ScreenDPIinSection=192 -Position=0, 872, 0, 1616, 644 ;cmd, x, y, w, h -Position_dpi96=0, 436, 0, 808, 322 ;cmd, x, y, w, h -Position_Page01=0, 872, 0, 1616, 644 ;cmd, x, y, w, h -Position_Page01_dpi96=0, 436, 0, 808, 322 ;cmd, x, y, w, h +Position=0, 624, 10, 2070, 938 ;cmd, x, y, w, h +Position_dpi96=0, 312, 5, 1035, 469 ;cmd, x, y, w, h +Position_Page01=0, 624, 10, 2070, 938 ;cmd, x, y, w, h +Position_Page01_dpi96=0, 312, 5, 1035, 469 ;cmd, x, y, w, h FloatingWindow=0 ShowSignalComments=1 DisplayMask=1 ; pages 1 [WINDOW_4] -XLen=140562 -XMin=0 -XMinNs=0 -XMax=11273 -XMaxNs=11273682182 +XLen=25018 +XMin=-93 +XMinNs=-93525969 +XMax=356342 +XMaxNs=356342781895 Grid=1 Mark=1 YValue=2 ShowLegend=2 ShowLegendHeader=1 -LegendPixWidth=264 -LegendPixWidth_dpi96=132 +LegendPixWidth=358 +LegendPixWidth_dpi96=179 LegendPixHeight=196 LegendPixHeight_dpi96=98 LegendPos=2 @@ -19450,7 +19678,7 @@ YAxisWidth_dpi96=113 RightYAxisWidth=0 RightYAxisWidth_dpi96=0 ObjectMode=1 -DisplayMode=2 +DisplayMode=1 ShowSignalMode=0 AxisScrollPos2=0 LegendScrollPos=0 @@ -19461,8 +19689,8 @@ YAxisDynScaleEnabled=0 YAxisDynScaleEnlarge=25 TimeStickToZero=0 XYModeRedrawEnabled=0 -MARKER_TIME_1=18343880350 -MARKER_TIME_2=18348626544 +MARKER_TIME_1=92682017805 +MARKER_TIME_2=188275816027 OscilloscopeEnabled=0 OsciEventCount=0 EventCompareModeEnabled=0 @@ -19481,7 +19709,7 @@ FloatingWindow=0 JointIndex=3 ShowSignalComments=1 ComponentOrder=0 -ComponentSpace=100 +ComponentSpace=50 LEGEND_HSCROLL_POS=0 LEGEND_SHARED_COLUMNS=1 TimeAxisTemplate= @@ -19489,9 +19717,11 @@ DisplayMask=1 ; pages 1 [WINDOW_4_LEG_COLUMNS] ScreenDPIinSection=192 -COUNT=1 -COL_0=31, 264 -COL_0_dpi96=31, 132 +COUNT=2 +COL_0=31, 216 +COL_0_dpi96=31, 108 +COL_1=1048578, 130 +COL_1_dpi96=1048578, 65 [WINDOW_5] ScaleFont=1 @@ -19516,10 +19746,10 @@ Comment=Numeric Window Number=5 GUID=WINDOW_f8fb5041-5d5b-4f5c-86f1-e7798564f3fe ScreenDPIinSection=192 -Position=0, 874, 664, 1040, 210 ;cmd, x, y, w, h -Position_dpi96=0, 437, 332, 520, 105 ;cmd, x, y, w, h -Position_Page01=0, 874, 664, 1040, 210 ;cmd, x, y, w, h -Position_Page01_dpi96=0, 437, 332, 520, 105 ;cmd, x, y, w, h +Position=0, 616, 966, 1040, 210 ;cmd, x, y, w, h +Position_dpi96=0, 308, 483, 520, 105 ;cmd, x, y, w, h +Position_Page01=0, 616, 966, 1040, 210 ;cmd, x, y, w, h +Position_Page01_dpi96=0, 308, 483, 520, 105 ;cmd, x, y, w, h FloatingWindow=0 ShowSignalComments=1 LEGEND_HSCROLL_POS=0 @@ -19536,8 +19766,8 @@ COL_0_dpi96=31, 184 ScaleFont=1 ShowLegend=1 ShowLegendHeader=0 -LegendPixWidth=412 -LegendPixWidth_dpi96=206 +LegendPixWidth=350 +LegendPixWidth_dpi96=175 GridStyle=0 DisplayColors=1 LegendFont=0 @@ -19547,7 +19777,7 @@ ShowActivity=0 ExceedLimitWarning=0 OnlyHighlightOnViolation=0 LegendScrollPos=0 -DotLinePos=120 +DotLinePos=65 ObjectCount=0 Title=Numeric {DISPLAYED_FILENAME} Type=4 @@ -19555,10 +19785,10 @@ Comment=Numeric Window Number=6 GUID=WINDOW_6b404c67-6a8e-4df9-8edc-ddba0377b6a4 ScreenDPIinSection=192 -Position=0, 18, 0, 830, 1166 ;cmd, x, y, w, h -Position_dpi96=0, 9, 0, 415, 583 ;cmd, x, y, w, h -Position_Page01=0, 18, 0, 830, 1166 ;cmd, x, y, w, h -Position_Page01_dpi96=0, 9, 0, 415, 583 ;cmd, x, y, w, h +Position=0, 18, 10, 586, 1166 ;cmd, x, y, w, h +Position_dpi96=0, 9, 5, 293, 583 ;cmd, x, y, w, h +Position_Page01=0, 18, 10, 586, 1166 ;cmd, x, y, w, h +Position_Page01_dpi96=0, 9, 5, 293, 583 ;cmd, x, y, w, h FloatingWindow=0 ShowSignalComments=1 LEGEND_HSCROLL_POS=0 @@ -19568,15 +19798,88 @@ DisplayMask=1 ; pages 1 [WINDOW_6_LEG_COLUMNS] ScreenDPIinSection=192 COUNT=1 -COL_0=31, 378 -COL_0_dpi96=31, 189 +COL_0=31, 316 +COL_0_dpi96=31, 158 + +[WINDOW_7] +XLen=25018 +XMin=-93 +XMinNs=-93525969 +XMax=356342 +XMaxNs=356342781895 +Grid=1 +Mark=1 +YValue=1 +ShowLegend=2 +ShowLegendHeader=1 +LegendPixWidth=358 +LegendPixWidth_dpi96=179 +LegendPixHeight=196 +LegendPixHeight_dpi96=98 +LegendPos=2 +Optimize=1 +Average=0 +ShowMinMax=1 +XYModeIndexP1=-1 +DisplayModeAuto=0 +XStart=0 +AbsoluteTimeMode=0 +YAxisWidth=226 +YAxisWidth_dpi96=113 +RightYAxisWidth=0 +RightYAxisWidth_dpi96=0 +ObjectMode=0 +DisplayMode=1 +ShowSignalMode=0 +AxisScrollPos2=0 +LegendScrollPos=0 +LegendShowLifeValues=1 +ShowXScrollbar=1 +ShowWholeTimeRange=0 +YAxisDynScaleEnabled=0 +YAxisDynScaleEnlarge=25 +TimeStickToZero=0 +XYModeRedrawEnabled=0 +MARKER_TIME_1=92682017805 +MARKER_TIME_2=188275816027 +OscilloscopeEnabled=0 +OsciEventCount=0 +EventCompareModeEnabled=0 +ObjectCount=0 +Title=Graphic {DISPLAYED_FILENAME} +Type=1 +Comment=Graphic Window +Number=7 +GUID=WINDOW_f2ab20d9-7478-48e7-876b-2cf9aff59539 +ScreenDPIinSection=192 +Position=0, 75, 75, 1000, 400 ;cmd, x, y, w, h +Position_dpi96=0, 38, 38, 500, 200 ;cmd, x, y, w, h +Position_Page01=0, 75, 75, 1000, 400 ;cmd, x, y, w, h +Position_Page01_dpi96=0, 38, 38, 500, 200 ;cmd, x, y, w, h +FloatingWindow=0 +JointIndex=3 +ShowSignalComments=1 +ComponentOrder=1 +ComponentSpace=50 +LEGEND_HSCROLL_POS=0 +LEGEND_SHARED_COLUMNS=1 +TimeAxisTemplate= +DisplayMask=1 ; pages 1 + +[WINDOW_7_LEG_COLUMNS] +ScreenDPIinSection=192 +COUNT=2 +COL_0=31, 216 +COL_0_dpi96=31, 108 +COL_1=1048578, 130 +COL_1_dpi96=1048578, 65 [WINDOWS] -Count=6 +Count=7 [Y_COMMON_AXIS_1] YMin=0 -YMax=0.05 +YMax=0.2 ValueFormat=3 AxisTemplate= LockScaling=0 @@ -19585,7 +19888,7 @@ Comment= Color=65280 Name=Dt YMin-Home=0 -YMax-Home=0.05 +YMax-Home=0.2 DisplayOnlyComment=0 XAxisGroup=0 diff --git a/examples/bpf_demo/CANape/xcp_demo_autodetect.a2l b/examples/bpf_demo/CANape/xcp_demo_autodetect.a2l new file mode 100644 index 00000000..f09233a1 --- /dev/null +++ b/examples/bpf_demo/CANape/xcp_demo_autodetect.a2l @@ -0,0 +1,464 @@ +ASAP2_VERSION 1 71 +/begin PROJECT bpf_demo "" + +/begin HEADER "" VERSION "1.0" PROJECT_NO XCPLITE__CASDD /end HEADER + +/begin MODULE bpf_demo "" + +/include "XCP_104.aml" + +/begin MOD_COMMON "" +BYTE_ORDER MSB_LAST +ALIGNMENT_BYTE 1 +ALIGNMENT_WORD 1 +ALIGNMENT_LONG 1 +ALIGNMENT_FLOAT16_IEEE 1 +ALIGNMENT_FLOAT32_IEEE 1 +ALIGNMENT_FLOAT64_IEEE 1 +ALIGNMENT_INT64 1 +/end MOD_COMMON + + + +/* Absolute addressing mode: default_event=mainloop_event (1), addr_ext=1 */ +/begin MEASUREMENT syscall_count "Total tracked syscalls count" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41C58 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT syscall_rate "Total tracked syscalls per second" ULONG NO_COMPU_METHOD 0 0 0 2000 ECU_ADDRESS 0x41C68 ECU_ADDRESS_EXTENSION 1 PHYS_UNIT "1/s" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT + +/* Absolute addressing mode: default_event=process_event (2), addr_ext=1 */ +/begin MEASUREMENT new_process_pid "New process PID" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41C78 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x2 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT + +/* Absolute addressing mode: default_event=syscall_event (3), addr_ext=1 */ +/begin MEASUREMENT syscall_nr "Current syscall number" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41C5C ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x3 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT syscall_pid "Syscall PID" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41C60 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x3 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT io_setup "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41178 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT io_destroy "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4117C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT io_submit "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41180 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT io_cancel "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41184 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT io_getevents "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41188 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT setxattr "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4118C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT lsetxattr "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41190 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT fsetxattr "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41194 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT getxattr "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41198 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT lgetxattr "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4119C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT fgetxattr "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411A0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT listxattr "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411A4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT llistxattr "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411A8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT flistxattr "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411AC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT removexattr "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411B0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT lremovexattr "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411B4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT fremovexattr "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411B8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT getcwd "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411BC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT lookup_dcookie "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411C0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT eventfd2 "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411C4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT epoll_create1 "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411C8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT epoll_ctl "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411CC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT epoll_pwait "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411D0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT dup "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411D4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT dup3 "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411D8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT fcntl "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411DC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT inotify_init1 "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411E0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT inotify_add_watch "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411E4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT inotify_rm_watch "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411E8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT ioctl "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411EC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT ioprio_set "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411F0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT ioprio_get "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411F4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT flock "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411F8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT mknodat "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x411FC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT mkdirat "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41200 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT unlinkat "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41204 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT symlinkat "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41208 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT linkat "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4120C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT renameat "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41210 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT umount2 "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41214 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT mount "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41218 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT pivot_root "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4121C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT nfsservctl "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41220 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT statfs "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41224 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT fstatfs "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41228 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT truncate "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4122C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT ftruncate "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41230 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT fallocate "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41234 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT faccessat "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41238 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT chdir "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4123C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT fchdir "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41240 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT chroot "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41244 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT fchmod "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41248 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT fchmodat "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4124C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT fchownat "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41250 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT fchown "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41254 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT openat "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41258 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT close "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4125C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT vhangup "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41260 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT pipe2 "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41264 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT quotactl "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41268 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT getdents64 "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4126C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT lseek "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41270 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT read "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41274 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT write "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41278 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT readv "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4127C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT writev "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41280 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT pread64 "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41284 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT pwrite64 "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41288 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT preadv "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4128C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT pwritev "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41290 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT sendfile "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41294 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT pselect6 "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41298 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT ppoll "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4129C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT signalfd4 "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412A0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT vmsplice "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412A4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT splice "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412A8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT tee "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412AC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT readlinkat "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412B0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT fstatat "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412B4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT fstat "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412B8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT sync "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412BC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT fsync "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412C0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT fdatasync "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412C4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT sync_file_range "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412C8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT timerfd_create "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412CC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT timerfd_settime "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412D0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT timerfd_gettime "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412D4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT utimensat "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412D8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT acct "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412DC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT capget "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412E0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT capset "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412E4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT personality "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412E8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT exit "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412EC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT exit_group "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412F0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT waitid "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412F4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT set_tid_address "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412F8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT unshare "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x412FC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT futex "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41300 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT set_robust_list "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41304 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT get_robust_list "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41308 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT nanosleep "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4130C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT getitimer "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41310 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT setitimer "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41314 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT kexec_load "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41318 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT init_module "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4131C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT delete_module "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41320 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT timer_create "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41324 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT timer_gettime "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41328 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT timer_getoverrun "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4132C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT timer_settime "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41330 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT timer_delete "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41334 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT clock_settime "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41338 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT clock_gettime "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4133C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT clock_getres "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41340 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT clock_nanosleep "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41344 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT syslog "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41348 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT ptrace "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4134C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT sched_setparam "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41350 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT sched_setscheduler "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41354 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT sched_getscheduler "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41358 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT sched_getparam "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4135C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT sched_setaffinity "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41360 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT sched_getaffinity "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41364 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT sched_yield "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41368 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT sched_get_priority_max "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4136C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT sched_get_priority_min "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41370 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT sched_rr_get_interval "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41374 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT restart_syscall "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41378 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT kill "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4137C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT tkill "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41380 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT tgkill "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41384 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT sigaltstack "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41388 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT rt_sigsuspend "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4138C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT rt_sigaction "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41390 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT rt_sigprocmask "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41394 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT rt_sigpending "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41398 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT rt_sigtimedwait "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4139C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT rt_sigqueueinfo "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413A0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT rt_sigreturn "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413A4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT setpriority "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413A8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT getpriority "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413AC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT reboot "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413B0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT setregid "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413B4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT setgid "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413B8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT setreuid "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413BC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT setuid "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413C0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT setresuid "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413C4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT getresuid "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413C8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT setresgid "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413CC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT getresgid "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413D0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT setfsuid "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413D4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT setfsgid "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413D8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT times "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413DC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT setpgid "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413E0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT getpgid "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413E4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT getsid "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413E8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT setsid "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413EC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT getgroups "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413F0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT setgroups "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413F4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT uname "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413F8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT sethostname "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x413FC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT setdomainname "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41400 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT getrlimit "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41404 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT setrlimit "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41408 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT getrusage "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4140C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT umask "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41410 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT prctl "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41414 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT getcpu "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41418 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT gettimeofday "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4141C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT settimeofday "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41420 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT adjtimex "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41424 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT getpid "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41428 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT getppid "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4142C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT getuid "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41430 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT geteuid "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41434 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT getgid "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41438 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT getegid "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4143C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT gettid "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41440 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT sysinfo "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41444 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT mq_open "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41448 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT mq_unlink "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4144C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT mq_timedsend "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41450 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT mq_timedreceive "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41454 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT mq_notify "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41458 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT mq_getsetattr "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4145C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT msgget "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41460 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT msgctl "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41464 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT msgrcv "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41468 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT msgsnd "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4146C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT semget "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41470 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT semctl "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41474 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT semtimedop "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41478 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT semop "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4147C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT shmget "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41480 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT shmctl "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41484 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT shmat "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41488 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT shmdt "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4148C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT socket "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41490 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT socketpair "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41494 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT bind "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41498 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT listen "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4149C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT accept "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414A0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT connect "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414A4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT getsockname "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414A8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT getpeername "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414AC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT sendto "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414B0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT recvfrom "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414B4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT setsockopt "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414B8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT getsockopt "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414BC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT shutdown "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414C0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT sendmsg "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414C4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT recvmsg "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414C8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT readahead "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414CC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT brk "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414D0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT munmap "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414D4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT mremap "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414D8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT add_key "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414DC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT request_key "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414E0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT keyctl "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414E4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT clone "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414E8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT execve "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414EC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT mmap "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414F0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT fadvise64 "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414F4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT swapon "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414F8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT swapoff "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x414FC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT mprotect "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41500 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT msync "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41504 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT mlock "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41508 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT munlock "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4150C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT mlockall "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41510 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT munlockall "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41514 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT mincore "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41518 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT madvise "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4151C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT remap_file_pages "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41520 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT mbind "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41524 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT get_mempolicy "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41528 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT set_mempolicy "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4152C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT migrate_pages "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41530 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT move_pages "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41534 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT rt_tgsigqueueinfo "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41538 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT perf_event_open "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4153C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT accept4 "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41540 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT recvmmsg "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41544 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT arch_specific_syscall "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41548 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT wait4 "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41588 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT renameat2 "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x415C8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT seccomp "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x415CC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT getrandom "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x415D0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT memfd_create "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x415D4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT bpf "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x415D8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT execveat "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x415DC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT userfaultfd "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x415E0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT membarrier "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x415E4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT mlock2 "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x415E8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT copy_file_range "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x415EC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT preadv2 "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x415F0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT pwritev2 "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x415F4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT pkey_mprotect "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x415F8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT pkey_alloc "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x415FC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT pkey_free "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41600 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT statx "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41604 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT io_pgetevents "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41608 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT rseq "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4160C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT kexec_file_load "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41610 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT pidfd_send_signal "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41818 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT io_uring_setup "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4181C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT io_uring_enter "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41820 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT io_uring_register "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41824 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT open_tree "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41828 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT move_mount "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4182C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT fsopen "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41830 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT fsconfig "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41834 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT fsmount "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41838 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT fspick "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4183C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT pidfd_open "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41840 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT clone3 "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41844 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT close_range "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41848 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT openat2 "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4184C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT pidfd_getfd "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41850 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT faccessat2 "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41854 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT process_madvise "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41858 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT epoll_pwait2 "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4185C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT mount_setattr "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41860 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT quotactl_fd "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41864 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT landlock_create_ruleset "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41868 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT landlock_add_rule "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4186C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT landlock_restrict_self "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41870 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT memfd_secret "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41874 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT process_mrelease "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41878 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT futex_waitv "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4187C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT set_mempolicy_home_node "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41880 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT cachestat "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41884 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT fchmodat2 "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41888 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT map_shadow_stack "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4188C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT futex_wake "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41890 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT futex_wait "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41894 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT futex_requeue "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x41898 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT statmount "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x4189C ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT listmount "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x418A0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT lsm_get_self_attr "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x418A4 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT lsm_set_self_attr "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x418A8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT lsm_list_modules "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x418AC ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT +/begin MEASUREMENT mseal "" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x418B0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /end MEASUREMENT + +/* Typedefs */ +/begin RECORD_LAYOUT U8 FNC_VALUES 1 UBYTE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U8 AXIS_PTS_X 1 UBYTE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U8 "" UBYTE NO_COMPU_METHOD 0 0 0 255 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U8 "" VALUE U8 0 NO_COMPU_METHOD 0 255 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT U16 FNC_VALUES 1 UWORD ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U16 AXIS_PTS_X 1 UWORD INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U16 "" UWORD NO_COMPU_METHOD 0 0 0 65535 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U16 "" VALUE U16 0 NO_COMPU_METHOD 0 65535 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT U32 FNC_VALUES 1 ULONG ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U32 AXIS_PTS_X 1 ULONG INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U32 "" ULONG NO_COMPU_METHOD 0 0 0 4294967295 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U32 "" VALUE U32 0 NO_COMPU_METHOD 0 4.29497e+09 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT U64 FNC_VALUES 1 A_UINT64 ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U64 AXIS_PTS_X 1 A_UINT64 INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U64 "" A_UINT64 NO_COMPU_METHOD 0 0 0 1000000000000 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U64 "" VALUE U64 0 NO_COMPU_METHOD 0 1e+12 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I8 FNC_VALUES 1 SBYTE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I8 AXIS_PTS_X 1 SBYTE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I8 "" SBYTE NO_COMPU_METHOD 0 0 -128 127 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I8 "" VALUE I8 0 NO_COMPU_METHOD -128 127 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I16 FNC_VALUES 1 SWORD ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I16 AXIS_PTS_X 1 SWORD INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I16 "" SWORD NO_COMPU_METHOD 0 0 -32768 32767 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I16 "" VALUE I16 0 NO_COMPU_METHOD -32768 32767 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I32 FNC_VALUES 1 SLONG ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I32 AXIS_PTS_X 1 SLONG INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I32 "" SLONG NO_COMPU_METHOD 0 0 -2147483648 2147483647 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I32 "" VALUE I32 0 NO_COMPU_METHOD -2.14748e+09 2.14748e+09 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I64 FNC_VALUES 1 A_INT64 ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I64 AXIS_PTS_X 1 A_INT64 INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I64 "" A_INT64 NO_COMPU_METHOD 0 0 -1000000000000 1000000000000 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I64 "" VALUE I64 0 NO_COMPU_METHOD -1e+12 1e+12 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT F32 FNC_VALUES 1 FLOAT32_IEEE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_F32 AXIS_PTS_X 1 FLOAT32_IEEE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_F32 "" FLOAT32_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_F32 "" VALUE F32 0 NO_COMPU_METHOD -1e+12 1e+12 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT F64 FNC_VALUES 1 FLOAT64_IEEE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_F64 AXIS_PTS_X 1 FLOAT64_IEEE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_F64 "" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_F64 "" VALUE F64 0 NO_COMPU_METHOD -1e+12 1e+12 /end TYPEDEF_CHARACTERISTIC + + +/* Groups */ +/begin GROUP mainloop_event "Measurement event group" /begin REF_MEASUREMENT syscall_count syscall_rate /end REF_MEASUREMENT /end GROUP +/begin GROUP process_event "Measurement event group" /begin REF_MEASUREMENT new_process_pid /end REF_MEASUREMENT /end GROUP +/begin GROUP syscall_event "Measurement event group" /begin REF_MEASUREMENT syscall_nr syscall_pid io_setup io_destroy io_submit io_cancel io_getevents setxattr lsetxattr fsetxattr getxattr lgetxattr fgetxattr listxattr llistxattr flistxattr removexattr lremovexattr fremovexattr getcwd lookup_dcookie eventfd2 epoll_create1 epoll_ctl epoll_pwait dup dup3 fcntl inotify_init1 inotify_add_watch inotify_rm_watch ioctl ioprio_set ioprio_get flock mknodat mkdirat unlinkat symlinkat linkat renameat umount2 mount pivot_root nfsservctl statfs fstatfs truncate ftruncate fallocate faccessat chdir fchdir chroot fchmod fchmodat fchownat fchown openat close vhangup pipe2 quotactl getdents64 lseek read write readv writev pread64 pwrite64 preadv pwritev sendfile pselect6 ppoll signalfd4 vmsplice splice tee readlinkat fstatat fstat sync fsync fdatasync sync_file_range timerfd_create timerfd_settime timerfd_gettime utimensat acct capget capset personality exit exit_group waitid set_tid_address unshare futex set_robust_list get_robust_list nanosleep getitimer setitimer kexec_load init_module delete_module timer_create timer_gettime timer_getoverrun timer_settime timer_delete clock_settime clock_gettime clock_getres clock_nanosleep syslog ptrace sched_setparam sched_setscheduler sched_getscheduler sched_getparam sched_setaffinity sched_getaffinity sched_yield sched_get_priority_max sched_get_priority_min sched_rr_get_interval restart_syscall kill tkill tgkill sigaltstack rt_sigsuspend rt_sigaction rt_sigprocmask rt_sigpending rt_sigtimedwait rt_sigqueueinfo rt_sigreturn setpriority getpriority reboot setregid setgid setreuid setuid setresuid getresuid setresgid getresgid setfsuid setfsgid times setpgid getpgid getsid setsid getgroups setgroups uname sethostname setdomainname getrlimit setrlimit getrusage umask prctl getcpu gettimeofday settimeofday adjtimex getpid getppid getuid geteuid getgid getegid gettid sysinfo mq_open mq_unlink mq_timedsend mq_timedreceive mq_notify mq_getsetattr msgget msgctl msgrcv msgsnd semget semctl semtimedop semop shmget shmctl shmat shmdt socket socketpair bind listen accept connect getsockname getpeername sendto recvfrom setsockopt getsockopt shutdown sendmsg recvmsg readahead brk munmap mremap add_key request_key keyctl clone execve mmap fadvise64 swapon swapoff mprotect msync mlock munlock mlockall munlockall mincore madvise remap_file_pages mbind get_mempolicy set_mempolicy migrate_pages move_pages rt_tgsigqueueinfo perf_event_open accept4 recvmmsg arch_specific_syscall wait4 renameat2 seccomp getrandom memfd_create bpf execveat userfaultfd membarrier mlock2 copy_file_range preadv2 pwritev2 pkey_mprotect pkey_alloc pkey_free statx io_pgetevents rseq kexec_file_load pidfd_send_signal io_uring_setup io_uring_enter io_uring_register open_tree move_mount fsopen fsconfig fsmount fspick pidfd_open clone3 close_range openat2 pidfd_getfd faccessat2 process_madvise epoll_pwait2 mount_setattr quotactl_fd landlock_create_ruleset landlock_add_rule landlock_restrict_self memfd_secret process_mrelease futex_waitv set_mempolicy_home_node cachestat fchmodat2 map_shadow_stack futex_wake futex_wait futex_requeue statmount listmount lsm_get_self_attr lsm_set_self_attr lsm_list_modules mseal /end REF_MEASUREMENT /end GROUP +/begin GROUP Events "Events" ROOT /begin SUB_GROUP async mainloop_event process_event syscall_event sendto recvfrom /end SUB_GROUP /end GROUP + +/* Conversions */ +/begin COMPU_METHOD conv.bool "" TAB_VERB "%.0" "" COMPU_TAB_REF conv.bool.table /end COMPU_METHOD +/begin COMPU_VTAB conv.bool.table "" TAB_VERB 2 0 "false" 1 "true" /end COMPU_VTAB +/begin COMPU_METHOD conv.events "" TAB_VERB "%.0 " "" COMPU_TAB_REF conv.events.table /end COMPU_METHOD +/begin COMPU_VTAB conv.events.table "" TAB_VERB 6 + 0 "async" 1 "mainloop_event" 2 "process_event" 3 "syscall_event" 4 "sendto" 5 "recvfrom" +/end COMPU_VTAB + +/begin MOD_PAR "" +EPK "_21_43_27" ADDR_EPK 0x80000000 +/begin MEMORY_SEGMENT epk "" DATA FLASH INTERN 0x80000000 9 -1 -1 -1 -1 -1 +/begin IF_DATA XCP +/begin SEGMENT 0 2 0 0 0 +/begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM +/begin PAGE 0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_DONT_CARE /end PAGE +/begin PAGE 1 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_NOT_ALLOWED /end PAGE +/end SEGMENT +/end IF_DATA +/end MEMORY_SEGMENT +/end MOD_PAR + + +/begin IF_DATA XCP +/begin PROTOCOL_LAYER + 0x104 1000 2000 0 0 0 0 0 248 1024 BYTE_ORDER_MSB_LAST ADDRESS_GRANULARITY_BYTE +OPTIONAL_CMD GET_COMM_MODE_INFO +OPTIONAL_CMD GET_ID +OPTIONAL_CMD SET_REQUEST +OPTIONAL_CMD SET_MTA +OPTIONAL_CMD UPLOAD +OPTIONAL_CMD SHORT_UPLOAD +OPTIONAL_CMD DOWNLOAD +OPTIONAL_CMD SHORT_DOWNLOAD +OPTIONAL_CMD GET_CAL_PAGE +OPTIONAL_CMD SET_CAL_PAGE +OPTIONAL_CMD COPY_CAL_PAGE +OPTIONAL_CMD GET_PAG_PROCESSOR_INFO +OPTIONAL_CMD GET_SEGMENT_INFO +OPTIONAL_CMD GET_PAGE_INFO +OPTIONAL_CMD GET_SEGMENT_MODE +OPTIONAL_CMD SET_SEGMENT_MODE +OPTIONAL_CMD BUILD_CHECKSUM +OPTIONAL_CMD USER_CMD +OPTIONAL_CMD GET_DAQ_RESOLUTION_INFO +OPTIONAL_CMD GET_DAQ_PROCESSOR_INFO +OPTIONAL_CMD GET_DAQ_EVENT_INFO +OPTIONAL_CMD FREE_DAQ +OPTIONAL_CMD ALLOC_DAQ +OPTIONAL_CMD ALLOC_ODT +OPTIONAL_CMD ALLOC_ODT_ENTRY +OPTIONAL_CMD SET_DAQ_PTR +OPTIONAL_CMD WRITE_DAQ +OPTIONAL_CMD GET_DAQ_LIST_MODE +OPTIONAL_CMD SET_DAQ_LIST_MODE +OPTIONAL_CMD START_STOP_SYNCH +OPTIONAL_CMD START_STOP_DAQ_LIST +OPTIONAL_CMD GET_DAQ_CLOCK +OPTIONAL_CMD WRITE_DAQ_MULTIPLE +OPTIONAL_CMD TIME_CORRELATION_PROPERTIES +OPTIONAL_LEVEL1_CMD GET_VERSION +/end PROTOCOL_LAYER +/begin DAQ +DYNAMIC 0 6 0 OPTIMISATION_TYPE_DEFAULT ADDRESS_EXTENSION_FREE IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE 0xF8 OVERLOAD_INDICATION_PID PRESCALER_SUPPORTED +/begin TIMESTAMP_SUPPORTED 0x1 SIZE_DWORD UNIT_1NS TIMESTAMP_FIXED /end TIMESTAMP_SUPPORTED +/begin EVENT "async" "async" 0x0 DAQ 0xFF 100 4 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "mainloop_event" "mainloop_event" 0x1 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "process_event" "process_event" 0x2 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "syscall_event" "syscall_event" 0x3 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "sendto" "sendto" 0x4 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "recvfrom" "recvfrom" 0x5 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/end DAQ +/begin XCP_ON_TCP_IP + 0x104 5555 ADDRESS "192.168.0.206" +/end XCP_ON_TCP_IP +/end IF_DATA + +/end MODULE +/end PROJECT diff --git a/examples/bpf_demo/src/main.c b/examples/bpf_demo/src/main.c index f9f90382..185d3405 100644 --- a/examples/bpf_demo/src/main.c +++ b/examples/bpf_demo/src/main.c @@ -24,14 +24,15 @@ // XCP params #define OPTION_PROJECT_NAME "bpf_demo" // Project name, used to build the A2L and BIN file name +#define OPTION_PROJECT_EPK __TIME__ // EPK version string #define OPTION_USE_TCP true // TCP or UDP #define OPTION_SERVER_PORT 5555 // Port #define OPTION_SERVER_ADDR {0, 0, 0, 0} // Bind addr, 0.0.0.0 = ANY #define OPTION_QUEUE_SIZE 1024 * 512 // Size of the measurement queue in bytes, must be a multiple of 8 #define OPTION_LOG_LEVEL 3 // Log level, 0 = no log, 1 = error, 2 = warning, 3 = info, 4 = debug -#define TO_XCP_TIMESTAMP(t) (t / 1000) // Convert to XCP timestamp in microseconds (OPTION_CLOCK_TICKS_1US) -// #define TO_XCP_TIMESTAMP(t) (t) // Convert to XCP timestamp in nanoseconds (OPTION_CLOCK_TICKS_1NS) +// #define TO_XCP_TIMESTAMP(t) (t / 1000) // Convert to XCP timestamp in microseconds (OPTION_CLOCK_TICKS_1US) +#define TO_XCP_TIMESTAMP(t) (t) // Convert to XCP timestamp in nanoseconds (OPTION_CLOCK_TICKS_1NS) //----------------------------------------------------------------------------------------------------- @@ -40,6 +41,9 @@ // syscall counters static uint32_t syscall_event_counters[MAX_SYSCALL_NR] = {0}; +// syscall events +static tXcpEventId syscall_events[MAX_SYSCALL_NR] = {0}; + // ARM64 syscall lookup table (major syscalls 0-462) - using constants for clarity static const char *syscall_names[MAX_SYSCALL_NR] = {[SYS_io_setup] = "io_setup", [SYS_io_destroy] = "io_destroy", @@ -369,7 +373,7 @@ static void print_syscall_stats(int map_fd) { uint64_t total_syscalls = 0; // Read all syscall counters from the BPF map - for (uint32_t syscall_nr = 0; syscall_nr < 463; syscall_nr++) { + for (uint32_t syscall_nr = 0; syscall_nr < MAX_SYSCALL_NR; syscall_nr++) { uint64_t count = 0; if (bpf_map_lookup_elem(map_fd, &syscall_nr, &count) == 0 && count > 0) { total_syscalls += count; @@ -408,7 +412,7 @@ static int handle_event(void *ctx, void *data, size_t data_sz) { XcpPrint(buffer); printf("%s\n", buffer); - DaqEventAt(process_event, TO_XCP_TIMESTAMP(e->timestamp)); + DaqTriggerEventAt(process_event, TO_XCP_TIMESTAMP(e->timestamp)); } @@ -417,11 +421,13 @@ static int handle_event(void *ctx, void *data, size_t data_sz) { static uint64_t syscall_last_rate_calculation_time = 0; static uint64_t syscall_count_last_second = 0; + // Extract syscall info in global variables for measurement syscall_nr = e->data.syscall.syscall_nr; syscall_pid = e->data.syscall.pid; syscall_cpu_id = e->cpu_id; syscall_time = e->timestamp; + // Counting syscalls syscall_count++; if (syscall_nr < MAX_SYSCALL_NR) { syscall_event_counters[syscall_nr]++; @@ -449,10 +455,20 @@ static int handle_event(void *ctx, void *data, size_t data_sz) { } // Optional: Print detailed syscall info (comment out for less verbose output) - const char *syscall_name = get_syscall_name(syscall_nr); - printf("Syscall: %s [%u] called %s (%u) on CPU%u\n", e->data.syscall.comm, e->data.syscall.pid, syscall_name, syscall_nr, syscall_cpu_id); + // const char *syscall_name = get_syscall_name(syscall_nr); + // XcpPrint("Syscall: %s [%u] called %s (%u) on CPU%u\n", e->data.syscall.comm, e->data.syscall.pid, syscall_name, syscall_nr, syscall_cpu_id); + + // Trigger general syscall event for each syscall + DaqTriggerEventAt(syscall_event, TO_XCP_TIMESTAMP(e->timestamp)); - DaqEventAt(syscall_event, TO_XCP_TIMESTAMP(e->timestamp)); + // Trigger individual syscall event if a specific syscall is monitored + if (syscall_nr < MAX_SYSCALL_NR) { + uint16_t event_id = syscall_events[syscall_nr]; + if (event_id != 0) { + // @@@@ TODO: Filter on PID + XcpEventExt(event_id, xcp_get_frame_addr()); + } + } } return 0; @@ -586,61 +602,69 @@ int main(int argc, char *argv[]) { } // Init XCP - XcpInit(true); + XcpInit(OPTION_PROJECT_NAME, OPTION_PROJECT_EPK, true); uint8_t addr[4] = OPTION_SERVER_ADDR; if (!XcpEthServerInit(addr, OPTION_SERVER_PORT, OPTION_USE_TCP, OPTION_QUEUE_SIZE)) { return 1; } // Enable inline A2L generation - if (!A2lInit(OPTION_PROJECT_NAME, NULL, addr, OPTION_SERVER_PORT, OPTION_USE_TCP, A2L_MODE_WRITE_ALWAYS | A2L_MODE_FINALIZE_ON_CONNECT | A2L_MODE_AUTO_GROUPS)) { + if (!A2lInit(addr, OPTION_SERVER_PORT, OPTION_USE_TCP, A2L_MODE_WRITE_ALWAYS | A2L_MODE_FINALIZE_ON_CONNECT | A2L_MODE_AUTO_GROUPS)) { return 1; } - uint32_t counter = 0; - // Create events for DAQ (Data Acquisition) - DaqCreateEvent(mainloop_event); - DaqCreateEvent(process_event); - DaqCreateEvent(syscall_event); + DaqCreateEvent(mainloop_event); // Mainloop every 100ms + DaqCreateEvent(process_event); // On each new process creation + DaqCreateEvent(syscall_event); // On each syscall - // Register statistics measurement variables (mainloop every 100ms ) - A2lSetStackAddrMode(mainloop_event); - A2lCreateMeasurement(counter, "Mainloop counter value"); // Mainloop counter + // Create global measurement variables for syscall_count and syscall_rate(mainloop_event) A2lSetAbsoluteAddrMode(mainloop_event); A2lCreateMeasurement(syscall_count, "Total tracked syscalls count"); // Total syscall count A2lCreatePhysMeasurement(syscall_rate, "Total tracked syscalls per second", "1/s", 0.0, 2000.0); // Total syscall rate - // New process PID creation event monitoring (BPF event) + // Create the process PID creation event (process_event) + // Create a global measurement variable for the new process PID A2lSetAbsoluteAddrMode(process_event); A2lCreateMeasurement(new_process_pid, "New process PID"); - // Syscall event monitoring (BPF event) + // Create a general event triggered on each syscall (syscall_event) + // Create global measurement variables for the syscall number and the PID making the syscall A2lSetAbsoluteAddrMode(syscall_event); - A2lCreateMeasurement(syscall_nr, "Current syscall number"); // Current syscall number - A2lCreateMeasurement(syscall_pid, "Syscall PID"); // PID making the syscall - for (uint32_t syscall_nr = 0; syscall_nr < 463; syscall_nr++) { // Individual measurement variables for each syscall + A2lCreateMeasurement(syscall_nr, "Current syscall number"); // Current syscall number + A2lCreateMeasurement(syscall_pid, "Syscall PID"); // PID making the syscall + + // Create additional events to monitor specific syscalls via their counters + syscall_events[SYS_sendto] = XcpCreateEvent(get_syscall_name(SYS_sendto), 0, 0); + syscall_events[SYS_recvfrom] = XcpCreateEvent(get_syscall_name(SYS_recvfrom), 0, 0); + + // Create global measurement variables for each syscall counter in the array syscall_event_counters + // Use there is a specific event ID for a syscall, use it as its fixed event, otherwise use default event 0 + for (uint32_t syscall_nr = 0; syscall_nr < MAX_SYSCALL_NR; syscall_nr++) { const char *name = get_syscall_name(syscall_nr); - if (name && strcmp(name, "unknown") != 0) { - // Using the A2L generation function directly to create variables with dynamic names - A2lCreateMeasurement_(NULL, name, A2L_TYPE_UINT32, A2lGetAddrExt_(), A2lGetAddr_((uint8_t *)&(syscall_event_counters[syscall_nr])), NULL, 0.0, 0.0, ""); + if (name) { + if (strcmp(name, "unknown") != 0) { + + // Using the A2L generation function directly to create variables with dynamic names + // If no specifc syscall event is defined, default event is 0 + uint16_t syscall_event_id = syscall_events[syscall_nr]; + A2lSetAbsoluteAddrMode(syscall_event_id); + A2lCreateMeasurement_(NULL, name, A2L_TYPE_UINT32, A2lGetAddr_((uint8_t *)&(syscall_event_counters[syscall_nr])), A2lGetAddrExt_(), NULL, 0.0, 0.0, ""); + } } } - A2lFinalize(); // Finalize A2L file now, do not wait for XCP connect + A2lFinalize(); // @@@@ TEST: Manually finalize the A2L file to make it visible without XCP tool connect // Start main loop printf("Start main loop...\n"); while (running) { - // Update counter - counter++; - // Poll BPF events ring_buffer__poll(rb, 10); // 10ms timeout // Trigger DAQ event for periodic measurements - DaqEvent(mainloop_event); + DaqTriggerEvent(mainloop_event); // Sleep for a short period sleepUs(100000); // 100ms diff --git a/examples/bpf_demo/src/process_monitor.bpf.c b/examples/bpf_demo/src/process_monitor.bpf.c index 257931e1..395451ce 100644 --- a/examples/bpf_demo/src/process_monitor.bpf.c +++ b/examples/bpf_demo/src/process_monitor.bpf.c @@ -82,26 +82,23 @@ struct syscall_enter_args { }; // Helper function to enable event generation on syscalls -static inline u32 classify_syscall(u32 syscall_nr) { - - switch (syscall_nr) { - - // Ignore some high-frequency less interesting syscalls - case SYS_clock_nanosleep: - case SYS_nanosleep: - case SYS_write: - case SYS_read: - case SYS_getrandom: - case SYS_rt_sigaction: - case SYS_rt_sigprocmask: - case SYS_ppoll: - case SYS_epoll_pwait: - return 0; - - default: - return 1; - } -} +// static inline u32 classify_syscall(u32 syscall_nr) { +// switch (syscall_nr) { +// // Ignore some high-frequency less interesting syscalls +// case SYS_clock_nanosleep: +// case SYS_nanosleep: +// case SYS_write: +// case SYS_read: +// case SYS_getrandom: +// case SYS_rt_sigaction: +// case SYS_rt_sigprocmask: +// case SYS_ppoll: +// case SYS_epoll_pwait: +// return 0; +// default: +// return 1; +// } +// } // High-frequency syscall tracepoint - now tracks ALL syscalls SEC("tp/raw_syscalls/sys_enter") @@ -127,10 +124,10 @@ int trace_syscall_enter(void *ctx) { } // Only send detailed events for interesting syscalls to reduce overhead - u32 category = classify_syscall(syscall_nr); - if (category == 0) { - return 0; // Skip sending event for uninteresting syscalls - } + // u32 category = classify_syscall(syscall_nr); + // if (category == 0) { + // return 0; // Skip sending event for uninteresting syscalls + // } e = bpf_ringbuf_reserve(&rb, sizeof(*e), 0); if (!e) diff --git a/examples/c_demo/CANape/CANape.ini b/examples/c_demo/CANape/CANape.ini index 9beb37fd..7eec8b49 100644 --- a/examples/c_demo/CANape/CANape.ini +++ b/examples/c_demo/CANape/CANape.ini @@ -1,6 +1,6 @@ [!!!!!_CONSISTENCY_CHECK_START_SECTION_!!!!!] -GUID={66F05D5A-A7F1-4248-9D4F-0E5EF7B888BE} +GUID={DC5E9D96-9D26-4EA6-B127-C3A88898B378} [FILE_INFO] Identification=CANape-Project-File @@ -14,8 +14,8 @@ PrgDate=16.06.2025 Description= CreationTime=21:03 CreationDate=07/07/2024 ; Month/Day/Year -ModificationTime=19:51 -ModificationDate=09/22/2025 ; Month/Day/Year +ModificationTime=15:49 +ModificationDate=11/07/2025 ; Month/Day/Year Protected=0 CurrentWindowsACP=1252 @@ -331,7 +331,7 @@ CREATION_FROM_MAPFILE_INDIVIDUAL=0 CREATION_FROM_MAPFILE_UPDATE_TREE=1 SN_SEPARATOR_LEFT=. @ SN_SEPARATOR_RIGHT=. -CACHE_SYNC_SHOW_SIMPLE_DIALOG=0 +CACHE_SYNC_SHOW_SIMPLE_DIALOG=1 CHECK_PROJECT_OPTIMIZATION=1 SAVE_NEW_MAPFILE_IF_NOT_FOUND=0 AXIS_TEMP_AUTOSCALE_MIN_INTERVAL_DRAW_UNITS_CNT=1 @@ -1170,7 +1170,7 @@ COUNT=1 [Module_xcp_demo] FLAGS=1 ACTIVE_STATE=0 -CALIBRATION_MODE_DIRECT=1 +CALIBRATION_MODE_DIRECT=0 RESTART_MEASUREMENT_ON_ERROR=0 COMMENT= PARAMETER_DIR= @@ -1256,7 +1256,7 @@ XCP_OPTIONAL_CMD_AVAILABLE_19=3 XCP_OPTIONAL_CMD_AVAILABLE_20=3 XCP_OPTIONAL_CMD_AVAILABLE_21=3 XCP_OPTIONAL_CMD_AVAILABLE_22=3 -XCP_OPTIONAL_CMD_AVAILABLE_23=2 +XCP_OPTIONAL_CMD_AVAILABLE_23=3 XCP_OPTIONAL_CMD_AVAILABLE_24=2 XCP_OPTIONAL_CMD_AVAILABLE_25=3 XCP_OPTIONAL_CMD_AVAILABLE_26=3 @@ -1301,9 +1301,9 @@ XCP_OPTIONAL_CMD_AUTO_LEARNING=1 XCP_OPTIONAL_SUB_CMD_AVAILABLE_0=3 XCP_OPTIONAL_SUB_CMD_AVAILABLE_1=2 XCP_OPTIONAL_SUB_CMD_AVAILABLE_2=2 -XCP_DAQ_PROPERTIES=0x15 +XCP_DAQ_PROPERTIES=0x13 XCP_DAQ_KEY_BYTE=0xC0 -XCP_DAQ_TIMESTAMP_MODE=0x3C +XCP_DAQ_TIMESTAMP_MODE=0x0C XCP_DAQ_TIMESTAMP_TICKS=1 XCP_MIN_DAQ=0 XCP_MAX_DAQ=0 @@ -1373,14 +1373,14 @@ BEG_CAL_SERVICE=0x1f1 END_CAL_SERVICE=0x2f1 TEST_CONNECTION_PERIOD=0 OVERRUN_HANDLING=0 -EVENT_COUNT=1 +EVENT_COUNT=2 EVENT_CHANNEL_0=0x0000 -EVENT_CYCLE_0=0 -EVENT_SAMPLE_UNIT_0=3 +EVENT_CYCLE_0=100 +EVENT_SAMPLE_UNIT_0=7 EVENT_MODE_0=4 EVENT_PRIO_0=0 EVENT_MAX_DAQ_LIST_0=255 -EVENT_NAME_0=mainloop +EVENT_NAME_0=async EVENT_MULTISAMPLES_0=0 IGNORE_FIX_EVENTS=0 ECU_CYCLE_TIME=0 @@ -1391,8 +1391,8 @@ DETECT_SYNC_PULSE=0 GENERATE_SYNC_PULSE=0 TIME_CORR_MULTICAST=0 DAQ_TIMEOUT=0 -DAQ_RESUME_SUPPORTED=1 -DAQ_PRESCALER_SUPPORTED=0 +DAQ_RESUME_SUPPORTED=0 +DAQ_PRESCALER_SUPPORTED=1 DAQ_SINGLE_EVENT=0 DTO_SINGLE_EXT=0 DOUBLE_AS_FLOAT=0 @@ -1407,7 +1407,7 @@ PSEUDO_CAN_ID_START=2415919104 DSP_MODE=0 DAQ_LIST_AUTODETECT=1 DAQ_COUNT=0 -DAQ_CONFIG_ID=16230 +DAQ_CONFIG_ID=32950 DAQ_START_STOP_ALL_DISABLED=0 INIT_CAL_PAGE_SEGMENTWISE=0 CALRAM_CHECK_INITIAL_PAGE=1 @@ -1507,13 +1507,13 @@ FLASH_PAGE_ADDRESS_MAPPING_ENABLED=1 MEMORY_SEGMENT_COUNT=2 MEMORY_SEGMENT_NAME_1=epk MEMORY_SEGMENT_TYPE_1=FLASH,DATA,INTERN -MEMORY_SEGMENT_SIZE_1=0x00000015 +MEMORY_SEGMENT_SIZE_1=0x00000008 MEMORY_SEGMENT_ADDR_1=0x80000000 MEMORY_SEGMENT_ADDR_EXT_1=0x00 MEMORY_SEGMENT_ATTRIBUTE_1=0x00000000 MEMORY_SEGMENT_FLASH_OFFSET_1=0x00000000 MEMORY_SEGMENT_ADDRESS_MAPPING_1= -MEMORY_SEGMENT_NAME_2=Parameters +MEMORY_SEGMENT_NAME_2=params MEMORY_SEGMENT_TYPE_2=FLASH,DATA,INTERN MEMORY_SEGMENT_SIZE_2=0x0000008C MEMORY_SEGMENT_ADDR_2=0x80010000 @@ -1523,13 +1523,13 @@ MEMORY_SEGMENT_FLASH_OFFSET_2=0x00000000 MEMORY_SEGMENT_ADDRESS_MAPPING_2= CALRAM_SECTOR_NAME_1=epk CALRAM_SECTOR_TYPE_1=FLASH,DATA,INTERN -CALRAM_SECTOR_SIZE_1=0x00000015 +CALRAM_SECTOR_SIZE_1=0x00000008 CALRAM_SECTOR_ADDR_1=0x80000000 CALRAM_SECTOR_ADDR_EXT_1=0x00 CALRAM_SECTOR_ATTRIBUTE_1=0x00000000 CALRAM_SECTOR_FLASH_OFFSET_1=0x00000000 CALRAM_SECTOR_ADDRESS_MAPPING_1= -CALRAM_SECTOR_NAME_2=Parameters +CALRAM_SECTOR_NAME_2=params CALRAM_SECTOR_TYPE_2=FLASH,DATA,INTERN CALRAM_SECTOR_SIZE_2=0x0000008C CALRAM_SECTOR_ADDR_2=0x80010000 @@ -1544,7 +1544,7 @@ TRANSPORT_LAYER_INSTANCE_NAME= PROTOCOL_TYPE=4 PACKET_CTR=0 TRANSPORT_LAYER_VERSION=260 -HOST=192.168.8.133 +HOST=192.168.0.101 PORT=5555 LOCAL_PORT=0 TRANSPORT_LAYER_PROTOCOL=1 @@ -1617,7 +1617,7 @@ EVENT_SAMPLE_UNIT_1=3 EVENT_MODE_1=4 EVENT_PRIO_1=0 EVENT_MAX_DAQ_LIST_1=255 -EVENT_NAME_1=mainloop_local +EVENT_NAME_1=mainloop EVENT_MULTISAMPLES_1=0 EVENT_MIN_CYCLE_TIME_CYCLE_1=0 EVENT_MIN_CYCLE_TIME_UNIT_1=9 @@ -2014,26 +2014,26 @@ MESSAGE_INFO=0 ECDM_DEVICE=0 [ModuleExplorer_xcp_demo] -ScreenDPIinSection=96 +ScreenDPIinSection=192 POSX=0 POSX_dpi96=0 POSY=0 POSY_dpi96=0 -SIZEX=875 +SIZEX=1750 SIZEX_dpi96=875 -SIZEY=700 +SIZEY=1400 SIZEY_dpi96=700 SHOWTOOLBAR=1 SHOWSTATUSBAR=1 SHOWGRID=0 -RIGHTPANE2HEIGHT=-1 +RIGHTPANE2HEIGHT=-2 RIGHTPANE2HEIGHT_dpi96=-1 -TREEX=225 +TREEX=450 TREEX_dpi96=225 -TREEY=634 -TREEY_dpi96=634 +TREEY=1286 +TREEY_dpi96=643 ACTIVEPANE=1 -SELECTED_TREENODE=Networks/ETH_Network_Network/xcp_demo_Device/Protocol/Transport Layer +SELECTED_TREENODE=Networks/ETH_Network_Network/xcp_demo_Device/Protocol FIRSTVISIBLE_TREENODE=Networks TREEEXPAND_COUNT=5 TREEEXPAND_0=Networks @@ -2411,19 +2411,19 @@ SEARCH_NAME= PARENT= [DlgSaveConfigsMoreLess] -ScreenDPIinSection=96 -ColWidthName=350 -ColWidthDisplay=230 +ScreenDPIinSection=192 +ColWidthName=700 +ColWidthDisplay=460 ShowMore=0 -MoreHeight=294 +MoreHeight=588 MoreHeight_dpi96=294 -WindowLeft=1483 -WindowLeft_dpi96=1483 -WindowTop=649 -WindowTop_dpi96=649 -WindowWidth=624 +WindowLeft=1176 +WindowLeft_dpi96=588 +WindowTop=720 +WindowTop_dpi96=360 +WindowWidth=1248 WindowWidth_dpi96=624 -WindowHeight=130 +WindowHeight=260 WindowHeight_dpi96=130 [VIO_SYSTEM_BEHAVIOUR] @@ -2761,204 +2761,6 @@ WindowWidth_dpi96=591 WindowHeight=615 WindowHeight_dpi96=308 -[COLOR_SCHEME_LIST] -COLOR_SCHEME0=COLOR_SCHEMEUSER_DEFINED -SCHEMES_COUNT=1 -ACTIVE=COLOR_SCHEME_H_CANAPE_CLASSIC -CURRENT_SCHEME_INDEX=0 - -[COLOR_SCHEMEUSER_DEFINED] -IS_USER_DEFINED=1 -SCHEME_NAME=[none] -ColorDisplay1=FF00 -1 8F400 -1 -ColorDisplay2=FF -1 8F4 -1 -ColorDisplay3=FFFF -1 F4F4 -1 -ColorDisplay4=FFFF00 -1 F4F400 -1 -ColorDisplay5=FF00FF -1 F400F4 -1 -ColorDisplay6=80FF -1 80F4 -1 -ColorDisplay7=FF8080 -1 F40000 -1 -ColorDisplay8=FFFFFF -1 0 -1 -ColorDisplay9=AA00 -1 AA00 -1 -ColorDisplay10=CC -1 CC -1 -ColorDisplay11=7070 -1 7070 -1 -ColorDisplay12=FFAA00 -1 FFAA00 -1 -ColorDisplay13=FF00AA -1 FF00AA -1 -ColorDisplay14=55AA -1 55AA -1 -ColorDisplay15=AA5555 -1 AA5555 -1 -ColorDisplay16=AAFFFF -1 AAFFFF -1 -ColorDisplay17=FFAA -1 FFAA -1 -ColorDisplay18=8080FF -1 8080FF -1 -ColorDisplay19=AAAA -1 AAAA -1 -ColorDisplay20=AAAA00 -1 AAAA00 -1 -ColorDisplay21=FFAAFF -1 FFAAFF -1 -ColorDisplay22=AAAAFF -1 AAAAFF -1 -ColorDisplay23=FFAAAA -1 FFAAAA -1 -ColorDisplay24=AAFFAA -1 AAFFAA -1 -ColorMarker1=FFFF00 -1 C6C600 -1 -ColorMarker2=FFFF -1 E1E1 -1 -ColorTrigger=FF00 -1 FF00 -1 -ColorEventAudio=A6620D -1 A6620D -1 -ColorEventMarker=FF -1 E7 -1 -ColorEventOther=FFFFFF -1 BABABA -1 -ColorHitMarker=FF00FF -1 FF00FF -1 -ColorGrid=8000 -1 8000 -1 -ColorBackground=0 -1 FFFFFF -1 -ColorChanged=FF0000 -1 FF0000 -1 -ColorWindowBg=C0C0C0 15 FFFFFF -1 -ColorAxis=FFFFFF -1 0 -1 -ColorAxisBackground=0 -1 FFFFFF -1 -ColorAxisSameScaled=FFFFFF -1 0 -1 -ColorAxisText=0 -1 0 -1 -ColorComments=FFFF00 -1 FFFF00 -1 -ColorCalComments=FFFF00 -1 FFFF00 -1 -ColorLegend=0 15 FFFFFF -1 -ColorLegendText=0 18 0 18 -ColorWindowFrameFocus=606060 -1 CEA27D -1 -ColorWindowFrameButtons=0 -1 0 -1 -ColorHexWinCalRam=8000 -1 8000 -1 -ColorHexWinNotCalRam=FF -1 FF -1 -ColorHexWinDbObject=80FFFF -1 80FFFF -1 -ColorHexWinInvalid=AFAFFF -1 AFAFFF -1 -ColorHexWinInvalidDb=FF -1 FF -1 -ColorHexWinSelection=FF 13 FF 13 -ColorHexWinSelText=0 14 0 14 -ColorWriteText=FFFF00 -1 FFFF00 -1 -ColorValLimitOK=FF00 -1 FF00 -1 -ColorValLimitWarn=FFFF -1 FFFF -1 -ColorValLimitError=FF -1 FF -1 -ColorActiveTitleLeft=54E3 2 54E3 2 -ColorActiveTitleRight=3D95FF 27 3D95FF 27 -ColorActiveTitleText=FFFFFF 9 FFFFFF 9 -ColorInactiveTitleLeft=7A96DF 3 7A96DF 3 -ColorInactiveTitleRight70=7A96DF 28 7A96DF 28 -ColorInactiveTitleText=D8E4F8 19 D8E4F8 19 -ColorMeaCursorTooltip=808080 -1 808080 -1 -ColorMeaCursorTooltipTxt=FFFFFF -1 FFFFFF -1 -ColorDisplayGray=999999 -1 999999 -1 -ColorDisplaySubGrid=4000 -1 4000 -1 -ColorGraphBackground=D2D2D2 -1 EEEEEE -1 -ColorInvalidSignal=F0F0F0 -1 F0F0F0 -1 -ColorLostVariable=C0C0C0 -1 C0C0C0 -1 -ColorMoveFrame=FAD5A3 -1 FAD5A3 -1 -ColorResizeMarkers=646464 -1 646464 -1 -ColorPageBackground=D8C7BC -1 D8C7BC -1 -ColorDisabledLegendText=A0A0A0 17 A0A0A0 17 -ColorBordersHighlight=FFFFFF 20 0 20 -ColorBordersShadow=A0A0A0 16 0 16 -ColorLookupTableX=FF -1 FF -1 -ColorLookupTableY=8000 -1 8000 -1 -ColorLookupTableZ=FF0000 -1 FF0000 -1 -ColorLookupTableZ4=FFFF00 -1 FFFF00 -1 -ColorLookupTableZ5=FF00FF -1 FF00FF -1 -ColorActiveCell=30FFFF -1 30FFFF -1 -ColorActiveCellText=0 -1 0 -1 -ColorMissingValues=FF -1 FF -1 -ColorBackgroundValues=FFFFFF -1 FFFFFF -1 -ColorWorkingPoint=880088 -1 880088 -1 -ColorColumnHeader=F0F0F0 30 F0F0F0 30 -ColorBackgroundMetaData=DADEE1 -1 FFFFFF -1 -ColorStatistic=FFFFFF -1 0 -1 -ColorMarker1CurveMode=F56DF3 -1 944293 -1 -ColorMarker2CurveMode=277FFF -1 2372E6 -1 - -[COMMENT_FIELD_0] -ID="Name" -MAX_LENGTH=32 -MODE=0 -VALUE_COUNT=0 -HISTORY_COUNT=0 - -[COMMENT_FIELD_1] -ID="Division" -MAX_LENGTH=32 -MODE=0 -VALUE_COUNT=0 -HISTORY_COUNT=0 - -[COMMENT_FIELD_2] -ID="Project" -MAX_LENGTH=32 -MODE=0 -VALUE_COUNT=0 -HISTORY_COUNT=0 - -[COMMENT_FIELD_3] -ID="Subject" -MAX_LENGTH=32 -MODE=0 -VALUE_COUNT=0 -HISTORY_COUNT=0 - -[COMMENT_FIELD_4] -ID="Comment" -MAX_LENGTH=-1 -MODE=12 -VALUE_COUNT=0 -HISTORY_COUNT=0 - -[DEVICE_EXPLORER_COLUMNLIST_CHANNELS] -ScreenDPIinSection=192 -ColumnCount=4 -Column_0=0, 306 -Column_0_dpi96=0, 153 -Column_1=1245185, 132 -Column_1_dpi96=1245185, 66 -Column_2=1245186, 66 -Column_2_dpi96=1245186, 33 -Column_3=1245187, 106 -Column_3_dpi96=1245187, 53 -ColumnIdSort=-1 -SortUpward=1 - -[DEVICE_EXPLORER_COLUMNLIST_DEVICES] -ScreenDPIinSection=192 -ColumnCount=10 -Column_0=34, 96 -Column_0_dpi96=34, 48 -Column_1=0, 460 -Column_1_dpi96=0, 230 -Column_2=131078, 160 -Column_2_dpi96=131078, 80 -Column_3=131103, 100 -Column_3_dpi96=131103, 50 -Column_4=131079, 100 -Column_4_dpi96=131079, 50 -Column_5=262145, 240 -Column_5_dpi96=262145, 120 -Column_6=131085, 200 -Column_6_dpi96=131085, 100 -Column_7=131080, 240 -Column_7_dpi96=131080, 120 -Column_8=131081, 160 -Column_8_dpi96=131081, 80 -Column_9=196609, 100 -Column_9_dpi96=196609, 50 -ColumnIdSort=-1 -SortUpward=1 - -[DEVICE_EXPLORER_COLUMNLIST_NETWORKS] -ScreenDPIinSection=192 -ColumnCount=6 -Column_0=34, 64 -Column_0_dpi96=34, 32 -Column_1=0, 304 -Column_1_dpi96=0, 152 -Column_2=983041, 192 -Column_2_dpi96=983041, 96 -Column_3=983042, 530 -Column_3_dpi96=983042, 265 -Column_4=983043, 252 -Column_4_dpi96=983043, 126 -Column_5=983044, 300 -Column_5_dpi96=983044, 150 -ColumnIdSort=-1 -SortUpward=1 - -[MEASUREMENT_0] -FileId=Measurement1 -MeasurementId=9e082434-ae85-4bc2-8dde-662508472b7c -LoadMeasurementSetting=3 - [MEASUREMENT_DISPLAY] ScreenDPIinSection=192 POSX=182 @@ -3115,9 +2917,207 @@ SortUpward=1 [MEASUREMENT_DISPLAY_DYNAMIC_COLUMNS] Count=0 +[DEVICE_EXPLORER_COLUMNLIST_CHANNELS] +ScreenDPIinSection=192 +ColumnCount=4 +Column_0=0, 306 +Column_0_dpi96=0, 153 +Column_1=1245185, 132 +Column_1_dpi96=1245185, 66 +Column_2=1245186, 66 +Column_2_dpi96=1245186, 33 +Column_3=1245187, 106 +Column_3_dpi96=1245187, 53 +ColumnIdSort=-1 +SortUpward=1 + +[DEVICE_EXPLORER_COLUMNLIST_DEVICES] +ScreenDPIinSection=192 +ColumnCount=10 +Column_0=34, 96 +Column_0_dpi96=34, 48 +Column_1=0, 460 +Column_1_dpi96=0, 230 +Column_2=131078, 160 +Column_2_dpi96=131078, 80 +Column_3=131103, 100 +Column_3_dpi96=131103, 50 +Column_4=131079, 100 +Column_4_dpi96=131079, 50 +Column_5=262145, 240 +Column_5_dpi96=262145, 120 +Column_6=131085, 200 +Column_6_dpi96=131085, 100 +Column_7=131080, 240 +Column_7_dpi96=131080, 120 +Column_8=131081, 160 +Column_8_dpi96=131081, 80 +Column_9=196609, 100 +Column_9_dpi96=196609, 50 +ColumnIdSort=-1 +SortUpward=1 + +[DEVICE_EXPLORER_COLUMNLIST_NETWORKS] +ScreenDPIinSection=192 +ColumnCount=6 +Column_0=34, 64 +Column_0_dpi96=34, 32 +Column_1=0, 304 +Column_1_dpi96=0, 152 +Column_2=983041, 192 +Column_2_dpi96=983041, 96 +Column_3=983042, 530 +Column_3_dpi96=983042, 265 +Column_4=983043, 252 +Column_4_dpi96=983043, 126 +Column_5=983044, 300 +Column_5_dpi96=983044, 150 +ColumnIdSort=-1 +SortUpward=1 + +[COLOR_SCHEME_LIST] +COLOR_SCHEME0=COLOR_SCHEMEUSER_DEFINED +SCHEMES_COUNT=1 +ACTIVE=COLOR_SCHEME_H_CANAPE_CLASSIC +CURRENT_SCHEME_INDEX=0 + +[COLOR_SCHEMEUSER_DEFINED] +IS_USER_DEFINED=1 +SCHEME_NAME=[none] +ColorDisplay1=FF00 -1 8F400 -1 +ColorDisplay2=FF -1 8F4 -1 +ColorDisplay3=FFFF -1 F4F4 -1 +ColorDisplay4=FFFF00 -1 F4F400 -1 +ColorDisplay5=FF00FF -1 F400F4 -1 +ColorDisplay6=80FF -1 80F4 -1 +ColorDisplay7=FF8080 -1 F40000 -1 +ColorDisplay8=FFFFFF -1 0 -1 +ColorDisplay9=AA00 -1 AA00 -1 +ColorDisplay10=CC -1 CC -1 +ColorDisplay11=7070 -1 7070 -1 +ColorDisplay12=FFAA00 -1 FFAA00 -1 +ColorDisplay13=FF00AA -1 FF00AA -1 +ColorDisplay14=55AA -1 55AA -1 +ColorDisplay15=AA5555 -1 AA5555 -1 +ColorDisplay16=AAFFFF -1 AAFFFF -1 +ColorDisplay17=FFAA -1 FFAA -1 +ColorDisplay18=8080FF -1 8080FF -1 +ColorDisplay19=AAAA -1 AAAA -1 +ColorDisplay20=AAAA00 -1 AAAA00 -1 +ColorDisplay21=FFAAFF -1 FFAAFF -1 +ColorDisplay22=AAAAFF -1 AAAAFF -1 +ColorDisplay23=FFAAAA -1 FFAAAA -1 +ColorDisplay24=AAFFAA -1 AAFFAA -1 +ColorMarker1=FFFF00 -1 C6C600 -1 +ColorMarker2=FFFF -1 E1E1 -1 +ColorTrigger=FF00 -1 FF00 -1 +ColorEventAudio=A6620D -1 A6620D -1 +ColorEventMarker=FF -1 E7 -1 +ColorEventOther=FFFFFF -1 BABABA -1 +ColorHitMarker=FF00FF -1 FF00FF -1 +ColorGrid=8000 -1 8000 -1 +ColorBackground=0 -1 FFFFFF -1 +ColorChanged=FF0000 -1 FF0000 -1 +ColorWindowBg=C0C0C0 15 FFFFFF -1 +ColorAxis=FFFFFF -1 0 -1 +ColorAxisBackground=0 -1 FFFFFF -1 +ColorAxisSameScaled=FFFFFF -1 0 -1 +ColorAxisText=0 -1 0 -1 +ColorComments=FFFF00 -1 FFFF00 -1 +ColorCalComments=FFFF00 -1 FFFF00 -1 +ColorLegend=0 15 FFFFFF -1 +ColorLegendText=0 18 0 18 +ColorWindowFrameFocus=606060 -1 CEA27D -1 +ColorWindowFrameButtons=0 -1 0 -1 +ColorHexWinCalRam=8000 -1 8000 -1 +ColorHexWinNotCalRam=FF -1 FF -1 +ColorHexWinDbObject=80FFFF -1 80FFFF -1 +ColorHexWinInvalid=AFAFFF -1 AFAFFF -1 +ColorHexWinInvalidDb=FF -1 FF -1 +ColorHexWinSelection=FF 13 FF 13 +ColorHexWinSelText=0 14 0 14 +ColorWriteText=FFFF00 -1 FFFF00 -1 +ColorValLimitOK=FF00 -1 FF00 -1 +ColorValLimitWarn=FFFF -1 FFFF -1 +ColorValLimitError=FF -1 FF -1 +ColorActiveTitleLeft=54E3 2 54E3 2 +ColorActiveTitleRight=3D95FF 27 3D95FF 27 +ColorActiveTitleText=FFFFFF 9 FFFFFF 9 +ColorInactiveTitleLeft=7A96DF 3 7A96DF 3 +ColorInactiveTitleRight70=7A96DF 28 7A96DF 28 +ColorInactiveTitleText=D8E4F8 19 D8E4F8 19 +ColorMeaCursorTooltip=808080 -1 808080 -1 +ColorMeaCursorTooltipTxt=FFFFFF -1 FFFFFF -1 +ColorDisplayGray=999999 -1 999999 -1 +ColorDisplaySubGrid=4000 -1 4000 -1 +ColorGraphBackground=D2D2D2 -1 EEEEEE -1 +ColorInvalidSignal=F0F0F0 -1 F0F0F0 -1 +ColorLostVariable=C0C0C0 -1 C0C0C0 -1 +ColorMoveFrame=FAD5A3 -1 FAD5A3 -1 +ColorResizeMarkers=646464 -1 646464 -1 +ColorPageBackground=D8C7BC -1 D8C7BC -1 +ColorDisabledLegendText=A0A0A0 17 A0A0A0 17 +ColorBordersHighlight=FFFFFF 20 0 20 +ColorBordersShadow=A0A0A0 16 0 16 +ColorLookupTableX=FF -1 FF -1 +ColorLookupTableY=8000 -1 8000 -1 +ColorLookupTableZ=FF0000 -1 FF0000 -1 +ColorLookupTableZ4=FFFF00 -1 FFFF00 -1 +ColorLookupTableZ5=FF00FF -1 FF00FF -1 +ColorActiveCell=30FFFF -1 30FFFF -1 +ColorActiveCellText=0 -1 0 -1 +ColorMissingValues=FF -1 FF -1 +ColorBackgroundValues=FFFFFF -1 FFFFFF -1 +ColorWorkingPoint=880088 -1 880088 -1 +ColorColumnHeader=F0F0F0 30 F0F0F0 30 +ColorBackgroundMetaData=DADEE1 -1 FFFFFF -1 +ColorStatistic=FFFFFF -1 0 -1 +ColorMarker1CurveMode=F56DF3 -1 944293 -1 +ColorMarker2CurveMode=277FFF -1 2372E6 -1 + +[COMMENT_FIELD_0] +ID="Name" +MAX_LENGTH=32 +MODE=0 +VALUE_COUNT=0 +HISTORY_COUNT=0 + +[COMMENT_FIELD_1] +ID="Division" +MAX_LENGTH=32 +MODE=0 +VALUE_COUNT=0 +HISTORY_COUNT=0 + +[COMMENT_FIELD_2] +ID="Project" +MAX_LENGTH=32 +MODE=0 +VALUE_COUNT=0 +HISTORY_COUNT=0 + +[COMMENT_FIELD_3] +ID="Subject" +MAX_LENGTH=32 +MODE=0 +VALUE_COUNT=0 +HISTORY_COUNT=0 + +[COMMENT_FIELD_4] +ID="Comment" +MAX_LENGTH=-1 +MODE=12 +VALUE_COUNT=0 +HISTORY_COUNT=0 + +[MEASUREMENT_0] +FileId=Measurement1 +MeasurementId=6686ca87-f541-4ff3-a39f-c9a618e295ac +LoadMeasurementSetting=3 + [SIGNSELWND_DYNAMIC_COLUMNS] Count=0 [~~~~~_CONSISTENCY_CHECK_END_SECTION_~~~~~] -GUID={66F05D5A-A7F1-4248-9D4F-0E5EF7B888BE} +GUID={DC5E9D96-9D26-4EA6-B127-C3A88898B378} diff --git a/examples/c_demo/CANape/xcp_demo.cna b/examples/c_demo/CANape/xcp_demo.cna index bd5bab76..57c9eab3 100644 --- a/examples/c_demo/CANape/xcp_demo.cna +++ b/examples/c_demo/CANape/xcp_demo.cna @@ -10,8 +10,8 @@ PrgDate=16.06.2025 Description= CreationTime=21:05 CreationDate=07/07/2024 ; Month/Day/Year -ModificationTime=19:50 -ModificationDate=09/22/2025 ; Month/Day/Year +ModificationTime=15:49 +ModificationDate=11/07/2025 ; Month/Day/Year Protected=0 CurrentWindowsACP=1252 @@ -162,7 +162,7 @@ Count=0 Name=Measurement Comment= Maximized=0 -ActiveWindow=2 +ActiveWindow=1 IsReportPage=0 TimeAxisSynchronized=0 PrintLayout=Default @@ -175,7 +175,7 @@ Count=0 Name=Calibration Values, Maps and Curves Comment= Maximized=0 -ActiveWindow=8 +ActiveWindow=10 IsReportPage=0 TimeAxisSynchronized=0 PrintLayout=Default @@ -270,8 +270,8 @@ Module=xcp_demo Name=$params_copy$params_copy.test_byte1 Disabled=0 Mode=2147483648 -Rate=0 -ModeIsDefault=1 +Rate=1 +ModeIsDefault=0 Row=0 Column=0 MeaReferenced=1 @@ -285,8 +285,8 @@ Module=xcp_demo Name=g_counter64s Disabled=1 Mode=2147483648 -Rate=0 -ModeIsDefault=1 +Rate=1 +ModeIsDefault=0 Row=0 Column=0 MeaReferenced=1 @@ -300,8 +300,8 @@ Module=xcp_demo Name=g_counter8 Disabled=0 Mode=2147483648 -Rate=0 -ModeIsDefault=1 +Rate=1 +ModeIsDefault=0 Row=0 Column=0 MeaReferenced=1 @@ -361,8 +361,8 @@ Module=xcp_demo Name=g_counter8s Disabled=0 Mode=2147483648 -Rate=0 -ModeIsDefault=1 +Rate=1 +ModeIsDefault=0 Row=0 Column=0 MeaReferenced=1 @@ -375,7 +375,7 @@ DisplayCount=0 Module=xcp_demo Name=counter16 Disabled=0 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -436,7 +436,7 @@ GUID=DISPLAY_34c46c1e-c9c4-4628-ad3a-15a9fd310132 Module=xcp_demo Name=counter16s Disabled=0 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -497,7 +497,7 @@ GUID=DISPLAY_ec4d99d7-7558-44a7-9c13-91391ff08fb6 Module=xcp_demo Name=counter32 Disabled=0 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -558,7 +558,7 @@ GUID=DISPLAY_4209ab7e-e75e-4120-bab7-b5a651a7fb3d Module=xcp_demo Name=counter32s Disabled=0 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -619,7 +619,7 @@ GUID=DISPLAY_12e26263-5254-4b33-af7d-2ba2adc875a9 Module=xcp_demo Name=counter64 Disabled=1 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -634,7 +634,7 @@ DisplayCount=0 Module=xcp_demo Name=counter64s Disabled=1 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -649,7 +649,7 @@ DisplayCount=0 Module=xcp_demo Name=counter8 Disabled=0 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -757,8 +757,8 @@ Module=xcp_demo Name=$params_copy$params_copy.test_byte2 Disabled=0 Mode=2147483648 -Rate=0 -ModeIsDefault=1 +Rate=1 +ModeIsDefault=0 Row=0 Column=0 MeaReferenced=1 @@ -771,7 +771,7 @@ DisplayCount=1 Module=xcp_demo Name=counter8s Disabled=0 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -832,7 +832,7 @@ GUID=DISPLAY_aaf36406-7e53-4ee5-97c3-f311fc0d4e12 Module=xcp_demo Name=matrix_f32 Disabled=1 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -902,7 +902,7 @@ MarkerSettingValid=1 Module=xcp_demo Name=array_f32 Disabled=1 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -1019,8 +1019,8 @@ Module=xcp_demo Name=$params_copy$params_copy.counter_max Disabled=0 Mode=2147483648 -Rate=0 -ModeIsDefault=1 +Rate=1 +ModeIsDefault=0 Row=0 Column=0 MeaReferenced=1 @@ -1080,8 +1080,8 @@ Module=xcp_demo Name=$params_copy$params_copy.delay_us Disabled=0 Mode=2147483648 -Rate=0 -ModeIsDefault=1 +Rate=1 +ModeIsDefault=0 Row=0 Column=0 MeaReferenced=1 @@ -1141,8 +1141,8 @@ Module=xcp_demo Name=g_counter16 Disabled=0 Mode=2147483648 -Rate=0 -ModeIsDefault=1 +Rate=1 +ModeIsDefault=0 Row=0 Column=0 MeaReferenced=1 @@ -1202,8 +1202,8 @@ Module=xcp_demo Name=g_counter16s Disabled=0 Mode=2147483648 -Rate=0 -ModeIsDefault=1 +Rate=1 +ModeIsDefault=0 Row=0 Column=0 MeaReferenced=1 @@ -1217,8 +1217,8 @@ Module=xcp_demo Name=g_counter32 Disabled=0 Mode=2147483648 -Rate=0 -ModeIsDefault=1 +Rate=1 +ModeIsDefault=0 Row=0 Column=0 MeaReferenced=1 @@ -1278,8 +1278,8 @@ Module=xcp_demo Name=g_counter32s Disabled=1 Mode=2147483648 -Rate=0 -ModeIsDefault=1 +Rate=1 +ModeIsDefault=0 Row=0 Column=0 MeaReferenced=1 @@ -1293,8 +1293,8 @@ Module=xcp_demo Name=g_counter64 Disabled=0 Mode=2147483648 -Rate=0 -ModeIsDefault=1 +Rate=1 +ModeIsDefault=0 Row=0 Column=0 MeaReferenced=1 @@ -1415,18 +1415,29 @@ VmdmDescription= Count=0 [Module_xcp_demo] -EVENT_COUNT=1 +EVENT_COUNT=2 EVENT_CHANNEL_0=0x0000 -EVENT_CYCLE_0=0 -EVENT_SAMPLE_UNIT_0=3 +EVENT_CHANNEL_1=0x0001 +EVENT_CYCLE_0=100 +EVENT_CYCLE_1=0 +EVENT_SAMPLE_UNIT_0=7 +EVENT_SAMPLE_UNIT_1=3 EVENT_MODE_0=4 +EVENT_MODE_1=4 EVENT_PRIO_0=0 +EVENT_PRIO_1=0 EVENT_MAX_DAQ_LIST_0=255 -EVENT_NAME_0=mainloop +EVENT_MAX_DAQ_LIST_1=255 +EVENT_NAME_0=async +EVENT_NAME_1=mainloop EVENT_MIN_CYCLE_TIME_CYCLE_0=0 +EVENT_MIN_CYCLE_TIME_CYCLE_1=0 EVENT_MIN_CYCLE_TIME_UNIT_0=9 +EVENT_MIN_CYCLE_TIME_UNIT_1=9 EVENT_MULTISAMPLES_0=0 +EVENT_MULTISAMPLES_1=0 EVENT_DPM_SUPPORTED_0=0 +EVENT_DPM_SUPPORTED_1=0 IGNORE_FIX_EVENTS=0 [OPTIONS] @@ -1434,8 +1445,8 @@ WindowTextExtended=1 WindowTextExtendedNew=1 WindowSymbols=1 GlobalCursor=0 -GlobalCursorTime=83862 -GlobalCursorTimeNs=83862599000 +GlobalCursorTime=0 +GlobalCursorTimeNs=0 MainWindowPos=1, 458, 267, 2684, 1544 ;cmd, x, y, w, h [PAR_COMMENT] @@ -1591,11 +1602,14 @@ TreeExpand_1=All\Devices\xcp_demo\xcp_demo_autodetect.a2l TreeExpand_2=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events TreeExpand_3=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Parameters TreeExpand_4=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Parameters\params -TreeExpand_5=$All\Devices -TreeExpand_6=# -TreeExpand_7=@All\Devices\xcp_demo -TreeExpand_8=$All\Devices\xcp_demo\xcp_demo_autodetect.a2l -TreeExpand_9=#All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Parameters\params\params.map +TreeExpand_5=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\params +TreeExpand_6=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\params\params +TreeExpand_7=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\mainloop +TreeExpand_8=$All\Devices +TreeExpand_9=# +TreeExpand_10=@All\Devices\xcp_demo +TreeExpand_11=$All\Devices\xcp_demo\xcp_demo_autodetect.a2l +TreeExpand_12=#All\Devices\xcp_demo\xcp_demo_autodetect.a2l TextSearchCaseSensitive=0 TextSearchUseMode=1 TextSearchSearchFullText=1 @@ -1653,31 +1667,31 @@ BoundingBoxGradient=1 CLineTransparency=75 Color=255 ColorFunction=0 -DefColWidth=40 +DefColWidth=80 CrosshairCursor=0 CursorColor=0 -DataWindowAreaHorizontalSplittingFactor=0.414346895075 +DataWindowAreaHorizontalSplittingFactor=0.41408751334 DataWindowAreaLayout=2 DisplayMask=2 ; pages 2 Distance=14 Factor=2 -FirstColWidth=50 +FirstColWidth=100 FixAxis=0 FixAxisMax=1 FixAxisMin=0 FlipX=0 FlipY=0 GridSideBarWide=0 -GridTitleHeight=5 +GridTitleHeight=10 GridX=0 GridY=0 InterpolateWorkingPoint=0 -LastFocus=SpreadSheet +LastFocus=CalBar_5325 LeftCol=1 LegendWindowSelectionMode=0 -LegendWindowSizeInPercent=0.0844155844156 -LegendWindowVerticalSizeInPixel=39 -LwColumns= +LegendWindowSizeInPercent=0.0838709677419 +LegendWindowVerticalSizeInPixel=78 +LwColumns= LwScrollPos=H:0,V:0 markerMaxX=0 markerMaxY=0 @@ -1688,7 +1702,7 @@ ObjectCount=1 Offset=1 Phi=20 Psi=4294967251 -ScreenDPI=96 +ScreenDPI=192 ShowAllCLines=0 ShowBoundingBox=1 ShowLegendWindow=1 @@ -1750,8 +1764,8 @@ WAxisLabel= XAxisLabel= YAxisLabel= AxisCaption= -Row=0 -Col=0 +Row=2 +Col=2 YAxis_ID=0 AxisTemplate= GUID=DISPLAY_eefb11c0-05f2-4993-b97b-8ca8dacb6e20 @@ -1856,7 +1870,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_6008bb0f-dd84-48ce-b4df-aae2744d1825 +GUID=DISPLAY_a266e3f1-cea8-420f-a013-598ee23f8693 [WINDOW_1_OBJECT_2] Type=2 @@ -1905,7 +1919,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_d24beb3a-bb56-400a-9aaa-d2c14984de1d +GUID=DISPLAY_32ef745e-ab6e-46f9-8bfb-c4130fca0a6a [WINDOW_1_OBJECT_3] Type=2 @@ -1954,7 +1968,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_606fd402-383f-4c8f-943b-3c853353170b +GUID=DISPLAY_2cb06783-53b7-456c-8fbc-baa4b1b2a5c2 [WINDOW_1_OBJECT_4] Type=2 @@ -2003,7 +2017,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_178ebfda-56ba-4ae0-ad97-0951f4b7329b +GUID=DISPLAY_12de2587-a4ce-4c83-8473-bf807d05f9e1 [WINDOW_2] ComponentCount=1 @@ -2025,8 +2039,8 @@ DisplayMask=1 ; pages 1 XLen=5432 XMin=0 XMinNs=0 -XMax=37407 -XMaxNs=37407452083 +XMax=141277 +XMaxNs=141277667753 Grid=1 Mark=1 YValue=2 @@ -2248,31 +2262,31 @@ BoundingBoxGradient=1 CLineTransparency=75 Color=65280 ColorFunction=0 -DefColWidth=116 +DefColWidth=232 CrosshairCursor=0 CursorColor=0 -DataWindowAreaHorizontalSplittingFactor=0.270742358079 +DataWindowAreaHorizontalSplittingFactor=0.270946681175 DataWindowAreaLayout=2 DisplayMask=2 ; pages 2 Distance=14 Factor=2 -FirstColWidth=57 +FirstColWidth=114 FixAxis=0 FixAxisMax=1 FixAxisMin=0 FlipX=0 FlipY=0 GridSideBarWide=0 -GridTitleHeight=5 +GridTitleHeight=10 GridX=0 GridY=0 InterpolateWorkingPoint=0 LastFocus=Lw LeftCol=1 LegendWindowSelectionMode=0 -LegendWindowSizeInPercent=0.0901467505241 -LegendWindowVerticalSizeInPixel=43 -LwColumns= +LegendWindowSizeInPercent=0.0895833333333 +LegendWindowVerticalSizeInPixel=86 +LwColumns= LwScrollPos=H:0,V:0 markerMaxX=0 markerMaxY=0 @@ -2283,7 +2297,7 @@ ObjectCount=1 Offset=1 Phi=20 Psi=4294967251 -ScreenDPI=96 +ScreenDPI=192 ShowAllCLines=0 ShowBoundingBox=1 ShowLegendWindow=1 @@ -2358,7 +2372,7 @@ ValueFormat=3 [WINDOW_8] ProgID= PROPERTIES_COUNT=1 -PROPERTY_1={"Version":"1.3.0.0","Configuration":{"ArrayWindowSubControlConfiguration":{"NumericGraphicCompositeWidth":504,"NumericGraphicCompositeHeight":333,"LegendCoordinatePoint":{"X":0,"Y":0},"LegendWidth":0,"LegendHeight":0,"LegendLayoutGroupSizeWidth":0,"LegendLayoutGroupSizeHeight":0,"NumericCoordinatePoint":{"X":1,"Y":24},"NumericWidth":502,"NumericHeight":308,"NumericLayoutGroupSizeWidth":502,"NumericLayoutGroupSizeHeight":308,"Intersection2DXWCoordinatePoint":{"X":0,"Y":0},"Intersection2DXWWidth":0,"Intersection2DXWHeight":0,"Intersection2DXWLayoutGroupSizeWidth":0,"Intersection2DXWLayoutGroupSizeHeight":0,"Intersection2DYWCoordinatePoint":{"X":0,"Y":0},"Intersection2DYWWidth":0,"Intersection2DYWHeight":0,"Intersection2DYWLayoutGroupSizeWidth":0,"Intersection2DYWLayoutGroupSizeHeight":0,"Graphic3DCoordinatePoint":{"X":0,"Y":0},"Graphic3DWidth":0,"Graphic3DHeight":0,"Graphic3DLayoutGroupSizeWidth":0,"Graphic3DLayoutGroupSizeHeight":0},"ShowCalibrationBar":true,"ShowHorizontalChartLines":false,"ShowVerticalChartLines":false,"NonSelectedIntersectionLineTransparency":0.100000024,"FocusedValueSymbol":"DEVICE:\"xcp_demo\":\"$params$params.map\":P","ValueObjectConfigurations":[{"Symbol":"DEVICE:\"xcp_demo\":\"$params$params.delay_us\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":1000000,"ValueAxisMinHome":0,"ValueAxisMaxHome":1000000,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":null,"CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$params$params.counter_max\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":2000,"ValueAxisMinHome":0,"ValueAxisMaxHome":2000,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":null,"CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$params$params.test_byte1\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":-128,"ValueAxisMax":127,"ValueAxisMinHome":-128,"ValueAxisMaxHome":127,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":null,"CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$params$params.test_byte2\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":-128,"ValueAxisMax":127,"ValueAxisMinHome":-128,"ValueAxisMaxHome":127,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":null,"CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$params$params.map\":P","SerializationColor":{"R":255,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[0,0],"NumericFormat":4,"AxisNumericFormats":[0,0],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":-128,"ValueAxisMax":127,"ValueAxisMinHome":-128,"ValueAxisMaxHome":127,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":null,"CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]}],"NumericGraphicControlPosition":0,"NumericGraphicControlSelectedTab":0,"GraphicControlPosition":0,"Height2DXControl":1,"Height2DYControl":1,"Height3DControl":2,"HeightNumericControl":1,"HeightChartControl":1,"HeightLegendControl":0.44999998807907104,"Width2DXControl":1,"Width2DYControl":1,"Width3DControl":2,"WidthNumericControl":2,"WidthChartControl":2,"WidthLegendControl":0.30000001192092896,"HeightValueControl":1,"WidthValueControl":1,"HeightNumericGraphicControl":1,"WidthNumericGraphicControl":1,"Height2DChartsControl":1,"Width2DChartsControl":1,"IsXAxisHeightSynchronizedBetweenCharts":true,"IsYAxisAreaWidthSynchronizedBetweenCharts":true,"SyncedXAxisHeight":NaN,"XWChartXAxisHeight":NaN,"YWChartXAxisHeight":NaN,"SyncedLeftAxisAreaWidth":NaN,"XWChartLeftAxisAreaWidth":NaN,"YWChartLeftAxisAreaWidth":NaN,"SyncedRightAxisAreaWidth":NaN,"XWChartRightAxisAreaWidth":NaN,"YWChartRightAxisAreaWidth":NaN,"LegendPosition":0,"LegendViewType":0,"LegendTableColumnAttributes":[{"TypeId":"1048594","Size":40},{"TypeId":"1048601","Size":45},{"TypeId":"31","Size":100},{"TypeId":"3","Size":250},{"TypeId":"16","Size":70},{"TypeId":"1048627","Size":100},{"TypeId":"1048631","Size":100},{"TypeId":"1048634","Size":100}],"LegendTabItemAttributes":[{"TypeId":"31","Size":100}],"FlipAxes":false,"AxisDisplayNameMode":3,"ReversedAxis":[false,false],"ShowUnits":false,"ShowObjectColor":true,"SortDescending":false,"SortAttributeId":null,"ShowWorkingPointHistory":false,"NumericViewValueObjectDisplayOption":1,"ValueColumnWidth":39,"ValueColumnWidthDouble":39,"ParameterGroup":"","ModuleName":"","GroupIsFunction":false,"NumericControlAxisAttributes":[],"NumericControlColumnAttributes":[{"TypeId":"31","Size":138}],"ChartViewValueObjectDisplayOption":1,"SerializationCameraPosition":{"X":1,"Y":1,"Z":-1},"SerializationCameraTarget":{"X":0,"Y":0.5,"Z":0},"IsValueAnnotationRotated":false,"EquidistantAxisPoints":false,"BarThickness":0.6,"WorkingPointMarker":0,"LinearWorkingPointInterpolation":true,"ShowAllIntersectionLines":false,"IsValueAxisIndependent":true,"TickLabelRotationAngle":-90,"IsTickLabelRotationEnabled":false,"IsTickLabelRightAligned":false,"ShowBoundarySurface":true,"ShowBoundarySurfaceGradient":false,"ShowCursorAsCrosshair":false,"XAxisAutoRange":true,"ValueAxisAutoRange":true,"ShowAllValueAxes":false,"DrawAxisBands":false,"CurrentColumnChartType":0,"SerializationCursorCrosshairColor":{"R":0,"G":0,"B":0,"A":255},"AlignBarToZero":true,"DefaultChartViewType":2,"AttributeColumnPositioning":1}} +PROPERTY_1={"Version":"1.3.0.0","Configuration":{"ArrayWindowSubControlConfiguration":{"NumericGraphicCompositeWidth":507,"NumericGraphicCompositeHeight":336,"LegendCoordinatePoint":{"X":0,"Y":0},"LegendWidth":0,"LegendHeight":0,"LegendLayoutGroupSizeWidth":0,"LegendLayoutGroupSizeHeight":0,"NumericCoordinatePoint":{"X":1,"Y":24},"NumericWidth":505,"NumericHeight":311,"NumericLayoutGroupSizeWidth":505,"NumericLayoutGroupSizeHeight":311,"Intersection2DXWCoordinatePoint":{"X":0,"Y":0},"Intersection2DXWWidth":0,"Intersection2DXWHeight":0,"Intersection2DXWLayoutGroupSizeWidth":0,"Intersection2DXWLayoutGroupSizeHeight":0,"Intersection2DYWCoordinatePoint":{"X":0,"Y":0},"Intersection2DYWWidth":0,"Intersection2DYWHeight":0,"Intersection2DYWLayoutGroupSizeWidth":0,"Intersection2DYWLayoutGroupSizeHeight":0,"Graphic3DCoordinatePoint":{"X":0,"Y":0},"Graphic3DWidth":0,"Graphic3DHeight":0,"Graphic3DLayoutGroupSizeWidth":0,"Graphic3DLayoutGroupSizeHeight":0},"ShowCalibrationBar":true,"ShowHorizontalChartLines":false,"ShowVerticalChartLines":false,"NonSelectedIntersectionLineTransparency":0.100000024,"FocusedValueSymbol":"DEVICE:\"xcp_demo\":\"$params$params.map\":P","ValueObjectConfigurations":[{"Symbol":"DEVICE:\"xcp_demo\":\"$params$params.delay_us\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":1000000,"ValueAxisMinHome":0,"ValueAxisMaxHome":1000000,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":null,"CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$params$params.counter_max\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":2000,"ValueAxisMinHome":0,"ValueAxisMaxHome":2000,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":null,"CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$params$params.test_byte1\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":-128,"ValueAxisMax":127,"ValueAxisMinHome":-128,"ValueAxisMaxHome":127,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":null,"CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$params$params.test_byte2\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":-128,"ValueAxisMax":127,"ValueAxisMinHome":-128,"ValueAxisMaxHome":127,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":null,"CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$params$params.map\":P","SerializationColor":{"R":255,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[0,0],"NumericFormat":4,"AxisNumericFormats":[0,0],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":-128,"ValueAxisMax":127,"ValueAxisMinHome":-128,"ValueAxisMaxHome":127,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":null,"CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]}],"NumericGraphicControlPosition":0,"NumericGraphicControlSelectedTab":0,"GraphicControlPosition":0,"Height2DXControl":1,"Height2DYControl":1,"Height3DControl":2,"HeightNumericControl":1,"HeightChartControl":1,"HeightLegendControl":0.44999998807907104,"Width2DXControl":1,"Width2DYControl":1,"Width3DControl":2,"WidthNumericControl":2,"WidthChartControl":2,"WidthLegendControl":0.30000001192092896,"HeightValueControl":1,"WidthValueControl":1,"HeightNumericGraphicControl":1,"WidthNumericGraphicControl":1,"Height2DChartsControl":1,"Width2DChartsControl":1,"IsXAxisHeightSynchronizedBetweenCharts":true,"IsYAxisAreaWidthSynchronizedBetweenCharts":true,"SyncedXAxisHeight":NaN,"XWChartXAxisHeight":NaN,"YWChartXAxisHeight":NaN,"SyncedLeftAxisAreaWidth":NaN,"XWChartLeftAxisAreaWidth":NaN,"YWChartLeftAxisAreaWidth":NaN,"SyncedRightAxisAreaWidth":NaN,"XWChartRightAxisAreaWidth":NaN,"YWChartRightAxisAreaWidth":NaN,"LegendPosition":0,"LegendViewType":0,"LegendTableColumnAttributes":[{"TypeId":"1048594","Size":40},{"TypeId":"1048601","Size":45},{"TypeId":"31","Size":100},{"TypeId":"3","Size":250},{"TypeId":"16","Size":70},{"TypeId":"1048627","Size":100},{"TypeId":"1048631","Size":100},{"TypeId":"1048634","Size":100}],"LegendTabItemAttributes":[{"TypeId":"31","Size":100}],"FlipAxes":false,"AxisDisplayNameMode":3,"ReversedAxis":[false,false],"ShowUnits":false,"ShowObjectColor":true,"SortDescending":false,"SortAttributeId":null,"ShowWorkingPointHistory":false,"NumericViewValueObjectDisplayOption":1,"ValueColumnWidth":39,"ValueColumnWidthDouble":39,"ParameterGroup":"","ModuleName":"","GroupIsFunction":false,"NumericControlAxisAttributes":[],"NumericControlColumnAttributes":[{"TypeId":"31","Size":138}],"ChartViewValueObjectDisplayOption":1,"SerializationCameraPosition":{"X":1,"Y":1,"Z":-1},"SerializationCameraTarget":{"X":0,"Y":0.5,"Z":0},"IsValueAnnotationRotated":false,"EquidistantAxisPoints":false,"BarThickness":0.6,"WorkingPointMarker":0,"LinearWorkingPointInterpolation":true,"ShowAllIntersectionLines":false,"IsValueAxisIndependent":true,"TickLabelRotationAngle":-90,"IsTickLabelRotationEnabled":false,"IsTickLabelRightAligned":false,"ShowBoundarySurface":true,"ShowBoundarySurfaceGradient":false,"ShowCursorAsCrosshair":false,"XAxisAutoRange":true,"ValueAxisAutoRange":true,"ShowAllValueAxes":false,"DrawAxisBands":false,"CurrentColumnChartType":0,"SerializationCursorCrosshairColor":{"R":0,"G":0,"B":0,"A":255},"AlignBarToZero":true,"DefaultChartViewType":2,"AttributeColumnPositioning":1}} OBJECTS_COUNT=5 OBJECT_1=DEVICE:"xcp_demo":"$params$params.delay_us":P OBJECT_2=DEVICE:"xcp_demo":"$params$params.counter_max":P @@ -2566,7 +2580,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_b94de7a0-ca9d-4ebb-afae-67687654991b +GUID=DISPLAY_5eb9f7b3-049b-4a1e-bee4-c36a476cbdab [WINDOW_8_OBJECT_2] Type=2 @@ -2615,7 +2629,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_894425e9-58bd-4003-bd80-55f71796bc41 +GUID=DISPLAY_9cebfab0-fbe2-428b-b281-1137b0b3479d [WINDOW_8_OBJECT_3] Type=2 @@ -2664,7 +2678,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_104c97a4-9ea0-418a-9b2b-9ef29a740809 +GUID=DISPLAY_9b297c46-e477-4327-8e23-aea5f9e13f74 [WINDOW_8_OBJECT_4] Type=2 @@ -2713,7 +2727,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_df0a8e8c-0802-4437-9bc1-2c4b84957dde +GUID=DISPLAY_895211ef-fd22-411d-b73e-fe4ee28ef22a [WINDOW_8_OBJECT_5] Type=2 @@ -2762,7 +2776,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_e3283f09-d4f5-4547-97ec-2bba25ee08a5 +GUID=DISPLAY_74ee4641-6064-41d1-8bb8-76ee777143a1 [WINDOW_9] Title= diff --git a/examples/c_demo/CANape/xcp_demo_autodetect.a2l b/examples/c_demo/CANape/xcp_demo_autodetect.a2l index 18c2899a..42c0cb80 100644 --- a/examples/c_demo/CANape/xcp_demo_autodetect.a2l +++ b/examples/c_demo/CANape/xcp_demo_autodetect.a2l @@ -1,7 +1,7 @@ ASAP2_VERSION 1 71 /begin PROJECT c_demo "" -/begin HEADER "" VERSION "1.0" PROJECT_NO VECTOR /end HEADER +/begin HEADER "" VERSION "1.0" PROJECT_NO XCPLITE__CASDD /end HEADER /begin MODULE c_demo "" @@ -29,40 +29,40 @@ ALIGNMENT_INT64 1 /begin STRUCTURE_COMPONENT curve C_curve 0x4C /end STRUCTURE_COMPONENT /end TYPEDEF_STRUCTURE -/* Segment relative addressing mode: calseg=Parameters */ +/* Segment relative addressing mode: calseg=params */ /begin INSTANCE params "Calibration parameters" params_t 0x80010000 /end INSTANCE -/* Absolute addressing mode: default_event=mainloop (0), addr_ext=1 */ -/begin MEASUREMENT g_counter8 "Measurement variable" UBYTE NO_COMPU_METHOD 0 0 0 255 ECU_ADDRESS 0x24080 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x0 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT g_counter16 "Measurement variable" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x24082 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x0 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT g_counter32 "Measurement variable" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x24084 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x0 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT g_counter64 "Measurement variable" A_UINT64 NO_COMPU_METHOD 0 0 0 1e+12 ECU_ADDRESS 0x24088 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x0 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT g_counter8s "Measurement variable" SBYTE NO_COMPU_METHOD 0 0 -128 127 ECU_ADDRESS 0x24090 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x0 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT g_counter16s "Measurement variable" SWORD NO_COMPU_METHOD 0 0 -32768 32767 ECU_ADDRESS 0x24092 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x0 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT g_counter32s "Measurement variable" SLONG NO_COMPU_METHOD 0 0 -2.14748e+09 2.14748e+09 ECU_ADDRESS 0x24094 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x0 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT g_counter64s "Measurement variable" A_INT64 NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x24098 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x0 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT - -/* Stack frame relative addressing mode: event=mainloop (0), addr_ext=2 */ -/begin MEASUREMENT counter8 "Measurement variable" UBYTE NO_COMPU_METHOD 0 0 0 255 ECU_ADDRESS 0xFB37 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT counter16 "Measurement variable" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0xFB34 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT counter32 "Measurement variable" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0xFB30 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT counter64 "Measurement variable" A_UINT64 NO_COMPU_METHOD 0 0 0 1e+12 ECU_ADDRESS 0xFB28 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT counter8s "Measurement variable" SBYTE NO_COMPU_METHOD 0 0 -128 127 ECU_ADDRESS 0xFB27 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT counter16s "Measurement variable" SWORD NO_COMPU_METHOD 0 0 -32768 32767 ECU_ADDRESS 0xFB24 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT counter32s "Measurement variable" SLONG NO_COMPU_METHOD 0 0 -2.14748e+09 2.14748e+09 ECU_ADDRESS 0xFB20 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT counter64s "Measurement variable" A_INT64 NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0xFB18 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin CHARACTERISTIC array_f32 "array float[8]" VAL_BLK 0xFFC0 F32 0 NO_COMPU_METHOD -1e+12 1e+12 MATRIX_DIM 8 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC -/begin CHARACTERISTIC matrix_f32 "matrix float[4][8]" VAL_BLK 0xFF40 F32 0 NO_COMPU_METHOD -1e+12 1e+12 MATRIX_DIM 8 4 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC +/* Absolute addressing mode: default_event=mainloop (1), addr_ext=1 */ +/begin MEASUREMENT g_counter8 "Measurement variable" UBYTE NO_COMPU_METHOD 0 0 0 255 ECU_ADDRESS 0x24080 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT g_counter16 "Measurement variable" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x24082 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT g_counter32 "Measurement variable" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x24084 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT g_counter64 "Measurement variable" A_UINT64 NO_COMPU_METHOD 0 0 0 1e+12 ECU_ADDRESS 0x24088 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT g_counter8s "Measurement variable" SBYTE NO_COMPU_METHOD 0 0 -128 127 ECU_ADDRESS 0x24090 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT g_counter16s "Measurement variable" SWORD NO_COMPU_METHOD 0 0 -32768 32767 ECU_ADDRESS 0x24092 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT g_counter32s "Measurement variable" SLONG NO_COMPU_METHOD 0 0 -2.14748e+09 2.14748e+09 ECU_ADDRESS 0x24094 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT g_counter64s "Measurement variable" A_INT64 NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x24098 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT + +/* Stack frame relative addressing mode: event=mainloop (1), addr_ext=2 */ +/begin MEASUREMENT counter8 "Measurement variable" UBYTE NO_COMPU_METHOD 0 0 0 255 ECU_ADDRESS 0x1FE87 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT counter16 "Measurement variable" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x1FE84 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT counter32 "Measurement variable" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x1FE80 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT counter64 "Measurement variable" A_UINT64 NO_COMPU_METHOD 0 0 0 1e+12 ECU_ADDRESS 0x1FE78 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT counter8s "Measurement variable" SBYTE NO_COMPU_METHOD 0 0 -128 127 ECU_ADDRESS 0x1FE77 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT counter16s "Measurement variable" SWORD NO_COMPU_METHOD 0 0 -32768 32767 ECU_ADDRESS 0x1FE74 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT counter32s "Measurement variable" SLONG NO_COMPU_METHOD 0 0 -2.14748e+09 2.14748e+09 ECU_ADDRESS 0x1FE70 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT counter64s "Measurement variable" A_INT64 NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x1FE68 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin CHARACTERISTIC array_f32 "array float[8]" VAL_BLK 0x1FFC0 F32 0 NO_COMPU_METHOD -1e+12 1e+12 MATRIX_DIM 8 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC +/begin CHARACTERISTIC matrix_f32 "matrix float[4][8]" VAL_BLK 0x1FF40 F32 0 NO_COMPU_METHOD -1e+12 1e+12 MATRIX_DIM 8 4 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC /begin TYPEDEF_STRUCTURE params_measurement_t "The calibration parameter struct as measurement typedef" 0x8C - /begin STRUCTURE_COMPONENT test_byte1 M_I8 0x8 /end STRUCTURE_COMPONENT - /begin STRUCTURE_COMPONENT test_byte2 M_I8 0x9 /end STRUCTURE_COMPONENT - /begin STRUCTURE_COMPONENT counter_max M_U16 0x0 /end STRUCTURE_COMPONENT - /begin STRUCTURE_COMPONENT delay_us M_U32 0x4 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT test_byte1 M_test_byte1 0x8 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT test_byte2 M_test_byte2 0x9 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT counter_max M_counter_max 0x0 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT delay_us M_delay_us 0x4 /end STRUCTURE_COMPONENT /end TYPEDEF_STRUCTURE -/* Absolute addressing mode: default_event=mainloop (0), addr_ext=1 */ -/begin INSTANCE params_copy "A copy of the current calibration parameters" params_measurement_t 0x24890 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x0 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end INSTANCE +/* Absolute addressing mode: default_event=mainloop (1), addr_ext=1 */ +/begin INSTANCE params_copy "A copy of the current calibration parameters" params_measurement_t 0x26298 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end INSTANCE /* Typedefs */ /begin RECORD_LAYOUT U8 FNC_VALUES 1 UBYTE ROW_DIR DIRECT /end RECORD_LAYOUT @@ -112,23 +112,27 @@ ALIGNMENT_INT64 1 /begin TYPEDEF_CHARACTERISTIC C_delay_us "Mainloop sleep time in us" VALUE U32 0 NO_COMPU_METHOD 0 1e+06 PHYS_UNIT "us" /end TYPEDEF_CHARACTERISTIC /begin TYPEDEF_CHARACTERISTIC C_map "Demo map" MAP I8 0 NO_COMPU_METHOD -128 127 /begin AXIS_DESCR FIX_AXIS NO_INPUT_QUANTITY NO_COMPU_METHOD 8 0 7 FIX_AXIS_PAR_DIST 0 1 8 /end AXIS_DESCR /begin AXIS_DESCR FIX_AXIS NO_INPUT_QUANTITY NO_COMPU_METHOD 8 0 7 FIX_AXIS_PAR_DIST 0 1 8 /end AXIS_DESCR /end TYPEDEF_CHARACTERISTIC /begin TYPEDEF_CHARACTERISTIC C_curve "Demo curve with fixed axis" CURVE F32 0 NO_COMPU_METHOD 0 1000 /begin AXIS_DESCR FIX_AXIS NO_INPUT_QUANTITY NO_COMPU_METHOD 8 0 7 FIX_AXIS_PAR_DIST 0 1 8 /end AXIS_DESCR PHYS_UNIT "Volt" /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_MEASUREMENT M_test_byte1 "Test byte for calibration consistency test" SBYTE NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT M_test_byte2 "Test byte for calibration consistency test" SBYTE NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT M_counter_max "Maximum counter value" UWORD NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT M_delay_us "Mainloop delay time in us" ULONG NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT /* Groups */ -/begin GROUP Parameters "Calibration Segment" /begin REF_CHARACTERISTIC params /end REF_CHARACTERISTIC /end GROUP -/begin GROUP mainloop "Measurement event group" /begin REF_MEASUREMENT g_counter8 g_counter16 g_counter32 g_counter64 g_counter8s g_counter16s g_counter32s g_counter64s counter8 counter16 counter32 counter64 counter8s counter16s counter32s counter64s array_f32 matrix_f32 params_copy /end REF_MEASUREMENT /end GROUP +/begin GROUP params "Calibration Segment" ROOT /begin REF_CHARACTERISTIC params /end REF_CHARACTERISTIC /end GROUP +/begin GROUP mainloop "Measurement event group" /begin REF_MEASUREMENT g_counter8 g_counter16 g_counter32 g_counter64 g_counter8s g_counter16s g_counter32s g_counter64s counter8 counter16 counter32 counter64 counter8s counter16s counter32s counter64s array_f32 matrix_f32 params_copy /end REF_MEASUREMENT /end GROUP /begin GROUP Events "Events" ROOT /begin SUB_GROUP mainloop /end SUB_GROUP /end GROUP /* Conversions */ /begin COMPU_METHOD conv.bool "" TAB_VERB "%.0" "" COMPU_TAB_REF conv.bool.table /end COMPU_METHOD /begin COMPU_VTAB conv.bool.table "" TAB_VERB 2 0 "false" 1 "true" /end COMPU_VTAB /begin COMPU_METHOD conv.events "" TAB_VERB "%.0 " "" COMPU_TAB_REF conv.events.table /end COMPU_METHOD -/begin COMPU_VTAB conv.events.table "" TAB_VERB 1 - 0 "mainloop" +/begin COMPU_VTAB conv.events.table "" TAB_VERB 2 + 0 "async" 1 "mainloop" /end COMPU_VTAB /begin MOD_PAR "" -EPK "_Sep_22_2025_19_01_45" ADDR_EPK 0x80000000 -/begin MEMORY_SEGMENT epk "" DATA FLASH INTERN 0x80000000 21 -1 -1 -1 -1 -1 +EPK "14_52_05" ADDR_EPK 0x80000000 +/begin MEMORY_SEGMENT epk "" DATA FLASH INTERN 0x80000000 8 -1 -1 -1 -1 -1 /begin IF_DATA XCP /begin SEGMENT 0 2 0 0 0 /begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM @@ -137,7 +141,7 @@ EPK "_Sep_22_2025_19_01_45" ADDR_EPK 0x80000000 /end SEGMENT /end IF_DATA /end MEMORY_SEGMENT -/begin MEMORY_SEGMENT Parameters "" DATA FLASH INTERN 0x80010000 0x8C -1 -1 -1 -1 -1 +/begin MEMORY_SEGMENT params "" DATA FLASH INTERN 0x80010000 140 -1 -1 -1 -1 -1 /begin IF_DATA XCP /begin SEGMENT 1 2 0 0 0 /begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM @@ -172,6 +176,7 @@ OPTIONAL_CMD BUILD_CHECKSUM OPTIONAL_CMD USER_CMD OPTIONAL_CMD GET_DAQ_RESOLUTION_INFO OPTIONAL_CMD GET_DAQ_PROCESSOR_INFO +OPTIONAL_CMD GET_DAQ_EVENT_INFO OPTIONAL_CMD FREE_DAQ OPTIONAL_CMD ALLOC_DAQ OPTIONAL_CMD ALLOC_ODT @@ -188,14 +193,13 @@ OPTIONAL_CMD TIME_CORRELATION_PROPERTIES OPTIONAL_LEVEL1_CMD GET_VERSION /end PROTOCOL_LAYER /begin DAQ -DYNAMIC 0 1 0 OPTIMISATION_TYPE_DEFAULT ADDRESS_EXTENSION_FREE IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE 0xF8 OVERLOAD_INDICATION_PID -/begin TIMESTAMP_SUPPORTED -0x1 SIZE_DWORD UNIT_1US TIMESTAMP_FIXED -/end TIMESTAMP_SUPPORTED -/begin EVENT "mainloop" "mainloop" 0x0 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +DYNAMIC 0 2 0 OPTIMISATION_TYPE_DEFAULT ADDRESS_EXTENSION_FREE IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE 0xF8 OVERLOAD_INDICATION_PID PRESCALER_SUPPORTED +/begin TIMESTAMP_SUPPORTED 0x1 SIZE_DWORD UNIT_1NS TIMESTAMP_FIXED /end TIMESTAMP_SUPPORTED +/begin EVENT "async" "async" 0x0 DAQ 0xFF 100 4 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "mainloop" "mainloop" 0x1 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT /end DAQ /begin XCP_ON_UDP_IP - 0x104 5555 ADDRESS "192.168.8.133" + 0x104 5555 ADDRESS "192.168.0.101" /end XCP_ON_UDP_IP /end IF_DATA diff --git a/examples/c_demo/src/main.c b/examples/c_demo/src/main.c index 4b648b5b..b213cae5 100644 --- a/examples/c_demo/src/main.c +++ b/examples/c_demo/src/main.c @@ -1,6 +1,7 @@ // c_demo xcplib example #include // for assert +#include // for signal handling #include // for bool #include // for uintxx_t #include // for printf @@ -13,6 +14,7 @@ // XCP parameters #define OPTION_PROJECT_NAME "c_demo" // A2L project name +#define OPTION_PROJECT_EPK __TIME__ // EPK version string #define OPTION_USE_TCP false // TCP or UDP #define OPTION_SERVER_PORT 5555 // Port #define OPTION_SERVER_ADDR {0, 0, 0, 0} // Bind addr, 0.0.0.0 = ANY @@ -34,7 +36,7 @@ typedef struct params { } params_t; const params_t params = { - .counter_max = 1000, + .counter_max = 1024, .delay_us = 1000, .test_byte1 = -1, .test_byte2 = 1, @@ -62,17 +64,23 @@ int64_t g_counter64s = 0; //----------------------------------------------------------------------------------------------------- +// Signal handler for clean shutdown +static volatile bool running = true; +static void sig_handler(int sig) { running = false; } + // Demo main int main(void) { printf("\nXCP on Ethernet C xcplib demo\n"); + signal(SIGINT, sig_handler); + signal(SIGTERM, sig_handler); // Set log level (1-error, 2-warning, 3-info, 4-show XCP commands) XcpSetLogLevel(OPTION_LOG_LEVEL); // Initialize the XCP singleton, activate XCP, must be called before starting the server // If XCP is not activated, the server will not start and all XCP instrumentation will be passive with minimal overhead - XcpInit(true); + XcpInit(OPTION_PROJECT_NAME, OPTION_PROJECT_EPK, true); // Initialize the XCP Server uint8_t addr[4] = OPTION_SERVER_ADDR; @@ -81,7 +89,7 @@ int main(void) { } // Enable A2L generation and prepare the A2L file, finalize the A2L file on XCP connect - if (!A2lInit(OPTION_PROJECT_NAME, NULL, addr, OPTION_SERVER_PORT, OPTION_USE_TCP, A2L_MODE_WRITE_ALWAYS | A2L_MODE_FINALIZE_ON_CONNECT | A2L_MODE_AUTO_GROUPS)) { + if (!A2lInit(addr, OPTION_SERVER_PORT, OPTION_USE_TCP, A2L_MODE_WRITE_ONCE | A2L_MODE_FINALIZE_ON_CONNECT | A2L_MODE_AUTO_GROUPS)) { return 1; } @@ -89,21 +97,21 @@ int main(void) { // This segment has a working page (RAM) and a reference page (FLASH), it creates a MEMORY_SEGMENT in the A2L file // It provides safe (thread safe against XCP modifications), lock-free and consistent access to the calibration parameters // It supports XCP/ECU independent page switching, checksum calculation and reinitialization (copy reference page to working page) - tXcpCalSegIndex calseg = XcpCreateCalSeg("Parameters", ¶ms, sizeof(params)); + tXcpCalSegIndex calseg = XcpCreateCalSeg("params", ¶ms, sizeof(params)); assert(calseg != XCP_UNDEFINED_CALSEG); // Ensure the calibration segment was created successfully // Create a typedef struct for the calibration parameters - A2lTypedefBegin(params_t, "Calibration parameters typedef"); - A2lTypedefParameterComponent(test_byte1, params_t, "Test byte for calibration consistency test", "", -128, 127); - A2lTypedefParameterComponent(test_byte2, params_t, "Test byte for calibration consistency test", "", -128, 127); - A2lTypedefParameterComponent(counter_max, params_t, "", "", 0, 2000); - A2lTypedefParameterComponent(delay_us, params_t, "Mainloop sleep time in us", "us", 0, 1000000); - A2lTypedefMapComponent(map, params_t, 8, 8, "Demo map", "", -128, 127); + A2lTypedefBegin(params_t, ¶ms, "Calibration parameters typedef"); + A2lTypedefParameterComponent(test_byte1, "Test byte for calibration consistency test", "", -128, 127); + A2lTypedefParameterComponent(test_byte2, "Test byte for calibration consistency test", "", -128, 127); + A2lTypedefParameterComponent(counter_max, "", "", 0, 2000); + A2lTypedefParameterComponent(delay_us, "Mainloop sleep time in us", "us", 0, 1000000); + A2lTypedefMapComponent(map, 8, 8, "Demo map", "", -128, 127); #ifdef OPTION_CANAPE_24 - A2lTypedefCurveComponentWithSharedAxis(curve, params_t, 8, "Demo curve with shared axis curve_axis", "Volt", 0, 1000.0, "curve_axis"); - A2lTypedefAxisComponent(curve_axis, params_t, 8, "Demo axis for curve", "Nm", 0, 20); + A2lTypedefCurveComponentWithSharedAxis(curve, 8, "Demo curve with shared axis curve_axis", "Volt", 0, 1000.0, "curve_axis"); + A2lTypedefAxisComponent(curve_axis, 8, "Demo axis for curve", "Nm", 0, 20); #else - A2lTypedefCurveComponent(curve, params_t, 8, "Demo curve with fixed axis", "Volt", 0, 1000.0); + A2lTypedefCurveComponent(curve, 8, "Demo curve with fixed axis", "Volt", 0, 1000.0); #endif A2lTypedefEnd(); @@ -112,7 +120,7 @@ int main(void) { A2lCreateTypedefInstance(params, params_t, "Calibration parameters"); // Alternative: Without using a typedef, create the calibration parameters directly - // A2lCreateParameter(params.counter_max, "maximum counter value", "", 0, 2000); + // A2lCreateParameter(params.counter_max, "maximum counter value", "", 0, 65535); // A2lCreateParameter(params.delay_us, "mainloop delay time in us", "us", 0, 1000000); // A2lCreateParameter(params.test_byte1, "", "", -128, 127); // A2lCreateParameter(params.test_byte2, "", "", -128, 127); @@ -120,6 +128,7 @@ int main(void) { // A2lCreateMap(params.map, 8, 8, "", "", -128, 127); // Variables on stack + uint16_t counter = 0; uint8_t counter8 = 0; uint16_t counter16 = 0; uint32_t counter32 = 0; @@ -134,6 +143,8 @@ int main(void) { // Register global measurement variables A2lSetAbsoluteAddrMode(mainloop); + A2lCreateMeasurement(counter, "Mainloop counter"); + A2lCreateMeasurement(g_counter8, "Measurement variable"); A2lCreateMeasurement(g_counter16, "Measurement variable"); A2lCreateMeasurement(g_counter32, "Measurement variable"); @@ -169,25 +180,27 @@ int main(void) { // Create a measurement typedef for the calibration parameter struct typedef params_t params_measurement_t; - A2lTypedefBegin(params_measurement_t, "The calibration parameter struct as measurement typedef"); - A2lTypedefMeasurementComponent(test_byte1, params_measurement_t); - A2lTypedefMeasurementComponent(test_byte2, params_measurement_t); - A2lTypedefMeasurementComponent(counter_max, params_measurement_t); - A2lTypedefMeasurementComponent(delay_us, params_measurement_t); - A2lTypedefEnd(); + static params_measurement_t params_copy; + { + A2lTypedefBegin(params_measurement_t, ¶ms_copy, "The calibration parameter struct as measurement typedef"); + A2lTypedefMeasurementComponent(test_byte1, "Test byte for calibration consistency test"); + A2lTypedefMeasurementComponent(test_byte2, "Test byte for calibration consistency test"); + A2lTypedefMeasurementComponent(counter_max, "Maximum counter value"); + A2lTypedefMeasurementComponent(delay_us, "Mainloop delay time in us"); + A2lTypedefEnd(); + } // Demo // Create a static measurement variable which is a copy of the calibration parameter segment to verify calibration changes and consistency - static params_measurement_t params_copy; A2lSetAbsoluteAddrMode(mainloop); A2lCreateTypedefInstance(params_copy, params_measurement_t, "A copy of the current calibration parameters"); uint32_t delay_us = 1000; - for (;;) { + while (running) { // Lock the calibration parameter segment for consistent and safe access // Calibration segment locking is completely lock-free and wait-free (no mutexes, system calls or CAS operations ) // It returns a pointer to the active page (working or reference) of the calibration segment - params_t *params = (params_t *)XcpLockCalSeg(calseg); + const params_t *params = (params_t *)XcpLockCalSeg(calseg); if (delay_us != params->delay_us) { delay_us = params->delay_us; @@ -198,9 +211,9 @@ int main(void) { } // Local variables for measurement - counter16++; - if (counter16 > params->counter_max) { - counter16 = 0; + counter++; + if (counter > params->counter_max) { + counter = 0; } // Calibration demo @@ -221,7 +234,7 @@ int main(void) { XcpUnlockCalSeg(calseg); // Trigger the measurement event for global and local variables on stack - DaqEvent(mainloop); + DaqTriggerEvent(mainloop); // Check server status if (!XcpEthServerStatus()) { @@ -229,7 +242,7 @@ int main(void) { break; } - if (counter16 == 0) { + if (counter == 0) { for (int i = 0; i < 8; i++) { array_f32[i] += i; if (array_f32[i] > 2000) { @@ -244,11 +257,12 @@ int main(void) { } } - counter8 = (uint8_t)(counter16 & 0xFF); - counter32 = (uint32_t)counter16; - counter64 = (uint64_t)counter16; + counter8 = (uint8_t)(counter & 0xFF); + counter16 = (uint16_t)counter; + counter32 = (uint32_t)counter; + counter64 = (uint64_t)counter; counter8s = (int8_t)counter8; - counter16s = (int16_t)counter16; + counter16s = (int16_t)counter; counter32s = (int32_t)counter32; counter64s = (int64_t)counter64; @@ -264,9 +278,9 @@ int main(void) { // Sleep for the specified delay parameter in microseconds sleepUs(delay_us); - A2lFinalize(); // Optional: Finalize the A2L file generation early, to write the A2L now, not when the client connects + A2lFinalize(); // @@@@ TEST: Manually finalize the A2L file to make it visible without XCP tool connect - } // for (;;) + } // while (running) // Force disconnect the XCP client XcpDisconnect(); diff --git a/examples/cpp_demo/CANape/CANape.ini b/examples/cpp_demo/CANape/CANape.ini index 5fd517a1..f4f843ef 100644 --- a/examples/cpp_demo/CANape/CANape.ini +++ b/examples/cpp_demo/CANape/CANape.ini @@ -1,6 +1,6 @@ [!!!!!_CONSISTENCY_CHECK_START_SECTION_!!!!!] -GUID={FDF34F59-33DD-4020-B561-77CD34499D78} +GUID={3CAA923F-B1A4-43DA-B7E1-4431E12D8616} [FILE_INFO] Identification=CANape-Project-File @@ -14,8 +14,8 @@ PrgDate=16.06.2025 Description= CreationTime=21:03 CreationDate=07/07/2024 ; Month/Day/Year -ModificationTime=16:14 -ModificationDate=09/26/2025 ; Month/Day/Year +ModificationTime=15:01 +ModificationDate=11/07/2025 ; Month/Day/Year Protected=0 CurrentWindowsACP=1252 @@ -331,7 +331,7 @@ CREATION_FROM_MAPFILE_INDIVIDUAL=0 CREATION_FROM_MAPFILE_UPDATE_TREE=1 SN_SEPARATOR_LEFT=. @ SN_SEPARATOR_RIGHT=. -CACHE_SYNC_SHOW_SIMPLE_DIALOG=0 +CACHE_SYNC_SHOW_SIMPLE_DIALOG=1 CHECK_PROJECT_OPTIMIZATION=1 SAVE_NEW_MAPFILE_IF_NOT_FOUND=0 AXIS_TEMP_AUTOSCALE_MIN_INTERVAL_DRAW_UNITS_CNT=1 @@ -985,20 +985,20 @@ TREEX=450 TREEX_dpi96=225 TREEY=1667 TREEY_dpi96=834 -ACTIVEPANE=0 -SELECTED_TREENODE=Devices/xcp_demo_Device/Memory Image File +ACTIVEPANE=1 +SELECTED_TREENODE=Networks/ETH_Network_Network/xcp_demo_Device/Protocol/Transport Layer FIRSTVISIBLE_TREENODE=Devices -TREEEXPAND_COUNT=2 +TREEEXPAND_COUNT=7 TREEEXPAND_0=Devices TREEEXPAND_1=Devices/xcp_demo_Device -TREEEXPAND_2=Gerte/xcp_demo_Device/Protokoll +TREEEXPAND_2=Devices/xcp_demo_Device/Protocol LAST_FOCUSED_LISTCOLUMN=0 LAST_FOCUSED_LISTINDEX=0 LAST_TOP_LISTINDEX=0 -TREEEXPAND_3=Netzwerke -TREEEXPAND_4=Netzwerke/ETH_Network_Network -TREEEXPAND_5=Netzwerke/ETH_Network_Network/xcp_demo_Device -TREEEXPAND_6=Netzwerke/ETH_Network_Network/xcp_demo_Device/Protokoll +TREEEXPAND_3=Networks +TREEEXPAND_4=Networks/ETH_Network_Network +TREEEXPAND_5=Networks/ETH_Network_Network/xcp_demo_Device +TREEEXPAND_6=Networks/ETH_Network_Network/xcp_demo_Device/Protocol [DEVICE_WIZARD] ScreenDPIinSection=192 @@ -1306,9 +1306,9 @@ XCP_OPTIONAL_CMD_AUTO_LEARNING=1 XCP_OPTIONAL_SUB_CMD_AVAILABLE_0=3 XCP_OPTIONAL_SUB_CMD_AVAILABLE_1=2 XCP_OPTIONAL_SUB_CMD_AVAILABLE_2=2 -XCP_DAQ_PROPERTIES=0x15 +XCP_DAQ_PROPERTIES=0x13 XCP_DAQ_KEY_BYTE=0xC0 -XCP_DAQ_TIMESTAMP_MODE=0x3C +XCP_DAQ_TIMESTAMP_MODE=0x0C XCP_DAQ_TIMESTAMP_TICKS=1 XCP_MIN_DAQ=0 XCP_MAX_DAQ=0 @@ -1378,14 +1378,14 @@ BEG_CAL_SERVICE=0x1f1 END_CAL_SERVICE=0x2f1 TEST_CONNECTION_PERIOD=0 OVERRUN_HANDLING=0 -EVENT_COUNT=3 +EVENT_COUNT=4 EVENT_CHANNEL_0=0x0000 -EVENT_CYCLE_0=0 -EVENT_SAMPLE_UNIT_0=3 +EVENT_CYCLE_0=100 +EVENT_SAMPLE_UNIT_0=7 EVENT_MODE_0=4 EVENT_PRIO_0=0 EVENT_MAX_DAQ_LIST_0=255 -EVENT_NAME_0=mainloop +EVENT_NAME_0=async EVENT_MULTISAMPLES_0=0 IGNORE_FIX_EVENTS=0 ECU_CYCLE_TIME=0 @@ -1396,8 +1396,8 @@ DETECT_SYNC_PULSE=0 GENERATE_SYNC_PULSE=0 TIME_CORR_MULTICAST=0 DAQ_TIMEOUT=0 -DAQ_RESUME_SUPPORTED=1 -DAQ_PRESCALER_SUPPORTED=0 +DAQ_RESUME_SUPPORTED=0 +DAQ_PRESCALER_SUPPORTED=1 DAQ_SINGLE_EVENT=0 DTO_SINGLE_EXT=0 DOUBLE_AS_FLOAT=0 @@ -1412,7 +1412,7 @@ PSEUDO_CAN_ID_START=2415919104 DSP_MODE=0 DAQ_LIST_AUTODETECT=1 DAQ_COUNT=0 -DAQ_CONFIG_ID=62310 +DAQ_CONFIG_ID=62342 DAQ_START_STOP_ALL_DISABLED=0 INIT_CAL_PAGE_SEGMENTWISE=0 CALRAM_CHECK_INITIAL_PAGE=1 @@ -1509,8 +1509,8 @@ ROM_PAGE_ID=0x1 RAM_PAGE_ID_EXT=0x0 ROM_PAGE_ID_EXT=0x0 FLASH_PAGE_ADDRESS_MAPPING_ENABLED=1 -MEMORY_SEGMENT_COUNT=3 -MEMORY_SEGMENT_NAME_1=Parameters +MEMORY_SEGMENT_COUNT=4 +MEMORY_SEGMENT_NAME_1=epk MEMORY_SEGMENT_TYPE_1=FLASH,DATA,INTERN MEMORY_SEGMENT_SIZE_1=0x00000008 MEMORY_SEGMENT_ADDR_1=0x80000000 @@ -1518,15 +1518,15 @@ MEMORY_SEGMENT_ADDR_EXT_1=0x00 MEMORY_SEGMENT_ATTRIBUTE_1=0x00000000 MEMORY_SEGMENT_FLASH_OFFSET_1=0x00000000 MEMORY_SEGMENT_ADDRESS_MAPPING_1= -MEMORY_SEGMENT_NAME_2=SigGen1 +MEMORY_SEGMENT_NAME_2=kParameters MEMORY_SEGMENT_TYPE_2=FLASH,DATA,INTERN -MEMORY_SEGMENT_SIZE_2=0x00000058 +MEMORY_SEGMENT_SIZE_2=0x00000008 MEMORY_SEGMENT_ADDR_2=0x80010000 MEMORY_SEGMENT_ADDR_EXT_2=0x00 MEMORY_SEGMENT_ATTRIBUTE_2=0x00000000 MEMORY_SEGMENT_FLASH_OFFSET_2=0x00000000 MEMORY_SEGMENT_ADDRESS_MAPPING_2= -CALRAM_SECTOR_NAME_1=Parameters +CALRAM_SECTOR_NAME_1=epk CALRAM_SECTOR_TYPE_1=FLASH,DATA,INTERN CALRAM_SECTOR_SIZE_1=0x00000008 CALRAM_SECTOR_ADDR_1=0x80000000 @@ -1534,22 +1534,22 @@ CALRAM_SECTOR_ADDR_EXT_1=0x00 CALRAM_SECTOR_ATTRIBUTE_1=0x00000000 CALRAM_SECTOR_FLASH_OFFSET_1=0x00000000 CALRAM_SECTOR_ADDRESS_MAPPING_1= -CALRAM_SECTOR_NAME_2=SigGen1 +CALRAM_SECTOR_NAME_2=kParameters CALRAM_SECTOR_TYPE_2=FLASH,DATA,INTERN -CALRAM_SECTOR_SIZE_2=0x00000058 +CALRAM_SECTOR_SIZE_2=0x00000008 CALRAM_SECTOR_ADDR_2=0x80010000 CALRAM_SECTOR_ADDR_EXT_2=0x00 CALRAM_SECTOR_ATTRIBUTE_2=0x00000000 CALRAM_SECTOR_FLASH_OFFSET_2=0x00000000 CALRAM_SECTOR_ADDRESS_MAPPING_2= -CALRAM_SECTOR_COUNT=3 +CALRAM_SECTOR_COUNT=4 FLASH_SECTOR_COUNT=0 FLASH_GROUP_COUNT=0 TRANSPORT_LAYER_INSTANCE_NAME= PROTOCOL_TYPE=4 PACKET_CTR=1 TRANSPORT_LAYER_VERSION=260 -HOST=192.168.8.133 +HOST=192.168.0.101 PORT=5555 LOCAL_PORT=9999 TRANSPORT_LAYER_PROTOCOL=1 @@ -1622,12 +1622,12 @@ EVENT_SAMPLE_UNIT_1=3 EVENT_MODE_1=4 EVENT_PRIO_1=0 EVENT_MAX_DAQ_LIST_1=255 -EVENT_NAME_1=SigGen1 +EVENT_NAME_1=mainloop EVENT_MULTISAMPLES_1=0 EVENT_MIN_CYCLE_TIME_CYCLE_1=0 EVENT_MIN_CYCLE_TIME_UNIT_1=9 EVENT_DPM_SUPPORTED_1=0 -MEMORY_SEGMENT_NAME_3=SigGen2 +MEMORY_SEGMENT_NAME_3=SigGen1 MEMORY_SEGMENT_TYPE_3=FLASH,DATA,INTERN MEMORY_SEGMENT_SIZE_3=0x00000058 MEMORY_SEGMENT_ADDR_3=0x80020000 @@ -1635,7 +1635,7 @@ MEMORY_SEGMENT_ADDR_EXT_3=0x00 MEMORY_SEGMENT_ATTRIBUTE_3=0x00000000 MEMORY_SEGMENT_FLASH_OFFSET_3=0x00000000 MEMORY_SEGMENT_ADDRESS_MAPPING_3= -CALRAM_SECTOR_NAME_3=SigGen2 +CALRAM_SECTOR_NAME_3=SigGen1 CALRAM_SECTOR_TYPE_3=FLASH,DATA,INTERN CALRAM_SECTOR_SIZE_3=0x00000058 CALRAM_SECTOR_ADDR_3=0x80020000 @@ -1665,7 +1665,7 @@ EVENT_SAMPLE_UNIT_2=3 EVENT_MODE_2=4 EVENT_PRIO_2=0 EVENT_MAX_DAQ_LIST_2=255 -EVENT_NAME_2=SigGen2 +EVENT_NAME_2=SigGen1 EVENT_MULTISAMPLES_2=0 EVENT_MIN_CYCLE_TIME_CYCLE_2=0 EVENT_MIN_CYCLE_TIME_UNIT_2=9 @@ -1677,6 +1677,17 @@ xcpEvents_THESAURUS_FILE_COUNT=0 xcpEvents_THESAURUS_ACTIVE=1 xcpEvents_THESAURUS_NAME=0 FLASH_CONFIG_DIRECTORY_XETK= +EVENT_CHANNEL_3=0x0003 +EVENT_CYCLE_3=0 +EVENT_SAMPLE_UNIT_3=3 +EVENT_MODE_3=4 +EVENT_PRIO_3=0 +EVENT_MAX_DAQ_LIST_3=255 +EVENT_NAME_3=SigGen2 +EVENT_MULTISAMPLES_3=0 +EVENT_MIN_CYCLE_TIME_CYCLE_3=0 +EVENT_MIN_CYCLE_TIME_UNIT_3=9 +EVENT_DPM_SUPPORTED_3=0 [MODULES] CREATE_SYSTEM_DEVICE=1 @@ -2436,7 +2447,7 @@ SELECT_PREVIEW_DLG_VISIBLE=0 SELECT_SORT_COLUMN_ID=31 SELECT_SORT_UPWARD=1 LAST_PAGE_NAME_DLG_VARIABLE= -LAST_PAGE_ID_DLG_VARIABLE=21007 +LAST_PAGE_ID_DLG_VARIABLE=21006 OBJECT_DIALOG_WITH=1200 OBJECT_DIALOG_WITH_dpi96=600 OBJECT_DIALOG_HEIGHT=640 @@ -2471,7 +2482,7 @@ SEARCH_COMP_ADDRESS=0 SEARCH_START_ADDRESS=0 SEARCH_END_ADDRESS=0 FILTER_COMMENT= -FILTER_NAME=Suchergebnis +FILTER_NAME=Search result SEARCH_COMMENT= SEARCH_NAME= PARENT= @@ -2838,6 +2849,22 @@ SortUpward=1 [MEASUREMENT_DISPLAY_DYNAMIC_COLUMNS] Count=0 +[PARASETEXPLORER] +LAST_SELECTED_SAVEDIALOG_FILETYPE_FILTER=CDFX files (*.cdfx)|*.cdfx| + +[Dialog_MdiCfgDlg_Typ1024] +TreeWidth=240 +TreeWidth_dpi96=120 +ScreenDPIinSection=192 +WindowLeft=1634 +WindowLeft_dpi96=817 +WindowTop=778 +WindowTop_dpi96=389 +WindowWidth=1130 +WindowWidth_dpi96=565 +WindowHeight=608 +WindowHeight_dpi96=304 + [COLOR_SCHEME_LIST] COLOR_SCHEME0=COLOR_SCHEMEUSER_DEFINED SCHEMES_COUNT=1 @@ -3033,15 +3060,12 @@ SortUpward=1 [MEASUREMENT_0] FileId=Measurement1 -MeasurementId=15038faa-21ae-432e-85cb-58bc84621ad7 +MeasurementId=a9ac2be2-61ae-48f9-8e4d-2f884bb5fef7 LoadMeasurementSetting=3 -[PARASETEXPLORER] -LAST_SELECTED_SAVEDIALOG_FILETYPE_FILTER=CDFX files (*.cdfx)|*.cdfx| - [SIGNSELWND_DYNAMIC_COLUMNS] Count=0 [~~~~~_CONSISTENCY_CHECK_END_SECTION_~~~~~] -GUID={FDF34F59-33DD-4020-B561-77CD34499D78} +GUID={3CAA923F-B1A4-43DA-B7E1-4431E12D8616} diff --git a/examples/cpp_demo/CANape/xcp_demo.cna b/examples/cpp_demo/CANape/xcp_demo.cna index 98fd67ca..cdd71c45 100644 --- a/examples/cpp_demo/CANape/xcp_demo.cna +++ b/examples/cpp_demo/CANape/xcp_demo.cna @@ -10,8 +10,8 @@ PrgDate=16.06.2025 Description= CreationTime=16:42 CreationDate=09/02/2025 ; Month/Day/Year -ModificationTime=16:14 -ModificationDate=09/26/2025 ; Month/Day/Year +ModificationTime=15:01 +ModificationDate=11/07/2025 ; Month/Day/Year Protected=0 CurrentWindowsACP=1252 @@ -33,10 +33,10 @@ DisplayCount=0 Count=0 [CALIBRATION_LIST] -Count=16 +Count=17 [CALIBRATION_OBJECT_1] -EditOffset=1 +EditOffset=10 EditFactor=2 EditFormat=2 ShowWorkingPoint=0 @@ -44,12 +44,12 @@ FollowWorkingPoint=0 OverwriteWorkingPointInputX= OverwriteWorkingPointInputY= Module=xcp_demo -Name=$Parameters$Parameters.counter_max +Name=$Parameters$Parameters.delay_us StimMode=0 IsFallback=0 [CALIBRATION_OBJECT_10] -EditOffset=10 +EditOffset=1 EditFactor=2 EditFormat=2 ShowWorkingPoint=0 @@ -57,7 +57,7 @@ FollowWorkingPoint=0 OverwriteWorkingPointInputX= OverwriteWorkingPointInputY= Module=xcp_demo -Name=$SigGen2$SigGen2.ampl +Name=$SigGen2$SigGen2.delay_us StimMode=0 IsFallback=0 @@ -70,12 +70,15 @@ FollowWorkingPoint=0 OverwriteWorkingPointInputX= OverwriteWorkingPointInputY= Module=xcp_demo -Name=$SigGen2$SigGen2.delay_us +Name=$SigGen2$$lookup$SigGen2.lookup.values +Array=1 +Rows=1 +Columns=11 StimMode=0 IsFallback=0 [CALIBRATION_OBJECT_12] -EditOffset=1 +EditOffset=10 EditFactor=2 EditFormat=2 ShowWorkingPoint=0 @@ -83,15 +86,12 @@ FollowWorkingPoint=0 OverwriteWorkingPointInputX= OverwriteWorkingPointInputY= Module=xcp_demo -Name=$SigGen2$$lookup$SigGen2.lookup.values -Array=1 -Rows=1 -Columns=11 +Name=$SigGen2$SigGen2.offset StimMode=0 IsFallback=0 [CALIBRATION_OBJECT_13] -EditOffset=10 +EditOffset=0.1 EditFactor=2 EditFormat=2 ShowWorkingPoint=0 @@ -99,12 +99,12 @@ FollowWorkingPoint=0 OverwriteWorkingPointInputX= OverwriteWorkingPointInputY= Module=xcp_demo -Name=$SigGen2$SigGen2.offset +Name=$SigGen2$SigGen2.period StimMode=0 IsFallback=0 [CALIBRATION_OBJECT_14] -EditOffset=0.1 +EditOffset=0.001 EditFactor=2 EditFormat=2 ShowWorkingPoint=0 @@ -112,12 +112,12 @@ FollowWorkingPoint=0 OverwriteWorkingPointInputX= OverwriteWorkingPointInputY= Module=xcp_demo -Name=$SigGen2$SigGen2.period +Name=$SigGen2$SigGen2.phase StimMode=0 IsFallback=0 [CALIBRATION_OBJECT_15] -EditOffset=0.001 +EditOffset=1 EditFactor=2 EditFormat=2 ShowWorkingPoint=0 @@ -125,7 +125,7 @@ FollowWorkingPoint=0 OverwriteWorkingPointInputX= OverwriteWorkingPointInputY= Module=xcp_demo -Name=$SigGen2$SigGen2.phase +Name=$SigGen2$SigGen2.signal_type StimMode=0 IsFallback=0 @@ -138,12 +138,12 @@ FollowWorkingPoint=0 OverwriteWorkingPointInputX= OverwriteWorkingPointInputY= Module=xcp_demo -Name=$SigGen2$SigGen2.signal_type +Name=$kParameters$kParameters.counter_max StimMode=0 IsFallback=0 -[CALIBRATION_OBJECT_2] -EditOffset=10 +[CALIBRATION_OBJECT_17] +EditOffset=1 EditFactor=2 EditFormat=2 ShowWorkingPoint=0 @@ -151,11 +151,11 @@ FollowWorkingPoint=0 OverwriteWorkingPointInputX= OverwriteWorkingPointInputY= Module=xcp_demo -Name=$Parameters$Parameters.delay_us +Name=$kParameters$kParameters.delay_us StimMode=0 IsFallback=0 -[CALIBRATION_OBJECT_3] +[CALIBRATION_OBJECT_2] EditOffset=1 EditFactor=2 EditFormat=2 @@ -168,7 +168,7 @@ Name=$SigGen1$SigGen1.ampl StimMode=0 IsFallback=0 -[CALIBRATION_OBJECT_4] +[CALIBRATION_OBJECT_3] EditOffset=1 EditFactor=2 EditFormat=2 @@ -181,7 +181,7 @@ Name=$SigGen1$SigGen1.delay_us StimMode=0 IsFallback=0 -[CALIBRATION_OBJECT_5] +[CALIBRATION_OBJECT_4] EditOffset=1 EditFactor=2 EditFormat=2 @@ -197,7 +197,7 @@ Columns=11 StimMode=0 IsFallback=0 -[CALIBRATION_OBJECT_6] +[CALIBRATION_OBJECT_5] EditOffset=1 EditFactor=2 EditFormat=2 @@ -210,7 +210,7 @@ Name=$SigGen1$SigGen1.offset StimMode=0 IsFallback=0 -[CALIBRATION_OBJECT_7] +[CALIBRATION_OBJECT_6] EditOffset=0.1 EditFactor=2 EditFormat=2 @@ -223,7 +223,7 @@ Name=$SigGen1$SigGen1.period StimMode=0 IsFallback=0 -[CALIBRATION_OBJECT_8] +[CALIBRATION_OBJECT_7] EditOffset=1 EditFactor=2 EditFormat=2 @@ -236,7 +236,7 @@ Name=$SigGen1$SigGen1.phase StimMode=0 IsFallback=0 -[CALIBRATION_OBJECT_9] +[CALIBRATION_OBJECT_8] EditOffset=1 EditFactor=2 EditFormat=2 @@ -249,6 +249,19 @@ Name=$SigGen1$SigGen1.signal_type StimMode=0 IsFallback=0 +[CALIBRATION_OBJECT_9] +EditOffset=10 +EditFactor=2 +EditFormat=2 +ShowWorkingPoint=0 +FollowWorkingPoint=0 +OverwriteWorkingPointInputX= +OverwriteWorkingPointInputY= +Module=xcp_demo +Name=$SigGen2$SigGen2.ampl +StimMode=0 +IsFallback=0 + [CANAPE_ENVIRONMENT] OBJECT_COUNT=0 @@ -305,7 +318,7 @@ Count=0 Name=Waveform Signal Generator Comment= Maximized=0 -ActiveWindow=8 +ActiveWindow=9 IsReportPage=0 TimeAxisSynchronized=0 PrintLayout=Default @@ -329,7 +342,7 @@ Count=0 [DISPLAY_PAGES] Count=3 -Active=0 +Active=1 [DYNAMIC_COLUMNS] Count=0 @@ -384,9 +397,9 @@ MeaCfgLabellistName= [MEASUREMENT_OBJECT_1] Module=xcp_demo -Name=loop_counter +Name=counter Disabled=0 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -401,7 +414,7 @@ DisplayCount=1 Module=xcp_demo Name=loop_histogram Disabled=1 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -470,7 +483,7 @@ GUID=DISPLAY_7f547459-ae45-4f9d-b911-c974ac78ffa2 Module=xcp_demo Name=sum Disabled=0 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -532,8 +545,8 @@ Module=xcp_demo Name=speed Disabled=0 Mode=2147483648 -Rate=0 -ModeIsDefault=1 +Rate=1 +ModeIsDefault=0 Row=0 Column=0 MeaReferenced=1 @@ -593,8 +606,8 @@ Module=xcp_demo Name=temperature Disabled=0 Mode=2147483648 -Rate=0 -ModeIsDefault=1 +Rate=1 +ModeIsDefault=0 Row=0 Column=0 MeaReferenced=1 @@ -653,7 +666,7 @@ GUID=DISPLAY_d88d8100-c003-4992-8564-1e801c2ffade Module=xcp_demo Name=SigGen1.value_ Disabled=0 -Mode=2147483649 +Mode=2147483650 Rate=0 ModeIsDefault=1 Row=0 @@ -714,7 +727,7 @@ GUID=DISPLAY_f47e3390-a853-449c-9b94-5da6535aecb7 Module=xcp_demo Name=SigGen1.time Disabled=0 -Mode=2147483649 +Mode=2147483650 Rate=0 ModeIsDefault=1 Row=0 @@ -729,7 +742,7 @@ DisplayCount=0 Module=xcp_demo Name=SigGen2.time Disabled=0 -Mode=2147483650 +Mode=2147483651 Rate=0 ModeIsDefault=1 Row=0 @@ -744,7 +757,7 @@ DisplayCount=0 Module=xcp_demo Name=SigGen2.value_ Disabled=0 -Mode=2147483650 +Mode=2147483651 Rate=0 ModeIsDefault=1 Row=0 @@ -805,7 +818,7 @@ GUID=DISPLAY_25885f58-8dd6-419e-bb85-0f20e5f56898 Module=xcp_demo Name=loop_cycletime Disabled=0 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -928,40 +941,51 @@ VmdmDescription= Count=0 [Module_xcp_demo] -EVENT_COUNT=3 +EVENT_COUNT=4 EVENT_CHANNEL_0=0x0000 EVENT_CHANNEL_1=0x0001 EVENT_CHANNEL_2=0x0002 -EVENT_CYCLE_0=0 +EVENT_CHANNEL_3=0x0003 +EVENT_CYCLE_0=100 EVENT_CYCLE_1=0 EVENT_CYCLE_2=0 -EVENT_SAMPLE_UNIT_0=3 +EVENT_CYCLE_3=0 +EVENT_SAMPLE_UNIT_0=7 EVENT_SAMPLE_UNIT_1=3 EVENT_SAMPLE_UNIT_2=3 +EVENT_SAMPLE_UNIT_3=3 EVENT_MODE_0=4 EVENT_MODE_1=4 EVENT_MODE_2=4 +EVENT_MODE_3=4 EVENT_PRIO_0=0 EVENT_PRIO_1=0 EVENT_PRIO_2=0 +EVENT_PRIO_3=0 EVENT_MAX_DAQ_LIST_0=255 EVENT_MAX_DAQ_LIST_1=255 EVENT_MAX_DAQ_LIST_2=255 -EVENT_NAME_0=mainloop -EVENT_NAME_1=SigGen1 -EVENT_NAME_2=SigGen2 +EVENT_MAX_DAQ_LIST_3=255 +EVENT_NAME_0=async +EVENT_NAME_1=mainloop +EVENT_NAME_2=SigGen1 +EVENT_NAME_3=SigGen2 EVENT_MIN_CYCLE_TIME_CYCLE_0=0 EVENT_MIN_CYCLE_TIME_CYCLE_1=0 EVENT_MIN_CYCLE_TIME_CYCLE_2=0 +EVENT_MIN_CYCLE_TIME_CYCLE_3=0 EVENT_MIN_CYCLE_TIME_UNIT_0=9 EVENT_MIN_CYCLE_TIME_UNIT_1=9 EVENT_MIN_CYCLE_TIME_UNIT_2=9 +EVENT_MIN_CYCLE_TIME_UNIT_3=9 EVENT_MULTISAMPLES_0=0 EVENT_MULTISAMPLES_1=0 EVENT_MULTISAMPLES_2=0 +EVENT_MULTISAMPLES_3=0 EVENT_DPM_SUPPORTED_0=0 EVENT_DPM_SUPPORTED_1=0 EVENT_DPM_SUPPORTED_2=0 +EVENT_DPM_SUPPORTED_3=0 IGNORE_FIX_EVENTS=0 [OPTIONS] @@ -969,8 +993,8 @@ WindowTextExtended=1 WindowTextExtendedNew=1 WindowSymbols=1 GlobalCursor=0 -GlobalCursorTime=-310 -GlobalCursorTimeNs=-310275125 +GlobalCursorTime=0 +GlobalCursorTimeNs=0 MainWindowPos=1, 664, 128, 2738, 1564 ;cmd, x, y, w, h [PAR_COMMENT] @@ -1124,12 +1148,13 @@ FilterNodeID=All\Devices\xcp_demo TreeExpand_0=@All TreeExpand_1=All\Devices\xcp_demo\xcp_demo_autodetect.a2l TreeExpand_2=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events -TreeExpand_3=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\mainloop -TreeExpand_4=$All\Devices -TreeExpand_5=# -TreeExpand_6=@All\Devices\xcp_demo -TreeExpand_7=$All\Devices\xcp_demo\xcp_demo_autodetect.a2l -TreeExpand_8=#All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\mainloop\loop_histogram +TreeExpand_3=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\kParameters +TreeExpand_4=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\kParameters\kParameters +TreeExpand_5=$All\Devices +TreeExpand_6=# +TreeExpand_7=@All\Devices\xcp_demo +TreeExpand_8=$All\Devices\xcp_demo\xcp_demo_autodetect.a2l +TreeExpand_9=#All\Devices\xcp_demo\xcp_demo_autodetect.a2l\kParameters\kParameters\kParameters.counter_max TextSearchCaseSensitive=0 TextSearchUseMode=1 TextSearchSearchFullText=1 @@ -1142,10 +1167,10 @@ Count=0 [WINDOW_1] ProgID= PROPERTIES_COUNT=1 -PROPERTY_1={"Version":"1.3.0.0","Configuration":{"ArrayWindowSubControlConfiguration":{"NumericGraphicCompositeWidth":307,"NumericGraphicCompositeHeight":98,"LegendCoordinatePoint":{"X":0,"Y":0},"LegendWidth":0,"LegendHeight":0,"LegendLayoutGroupSizeWidth":0,"LegendLayoutGroupSizeHeight":0,"NumericCoordinatePoint":{"X":1,"Y":24},"NumericWidth":305,"NumericHeight":73,"NumericLayoutGroupSizeWidth":305,"NumericLayoutGroupSizeHeight":73,"Intersection2DXWCoordinatePoint":{"X":0,"Y":0},"Intersection2DXWWidth":0,"Intersection2DXWHeight":0,"Intersection2DXWLayoutGroupSizeWidth":0,"Intersection2DXWLayoutGroupSizeHeight":0,"Intersection2DYWCoordinatePoint":{"X":0,"Y":0},"Intersection2DYWWidth":0,"Intersection2DYWHeight":0,"Intersection2DYWLayoutGroupSizeWidth":0,"Intersection2DYWLayoutGroupSizeHeight":0,"Graphic3DCoordinatePoint":{"X":0,"Y":0},"Graphic3DWidth":0,"Graphic3DHeight":0,"Graphic3DLayoutGroupSizeWidth":0,"Graphic3DLayoutGroupSizeHeight":0},"ShowCalibrationBar":true,"ShowHorizontalChartLines":false,"ShowVerticalChartLines":false,"NonSelectedIntersectionLineTransparency":0.100000024,"FocusedValueSymbol":"DEVICE:\"xcp_demo\":\"$Parameters$Parameters.counter_max\":P","ValueObjectConfigurations":[{"Symbol":"DEVICE:\"xcp_demo\":\"$Parameters$Parameters.counter_max\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":2000,"ValueAxisMinHome":0,"ValueAxisMaxHome":2000,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$Parameters$Parameters.delay_us\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":100000,"ValueAxisMinHome":0,"ValueAxisMaxHome":100000,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]}],"NumericGraphicControlPosition":0,"NumericGraphicControlSelectedTab":0,"GraphicControlPosition":0,"Height2DXControl":1,"Height2DYControl":1,"Height3DControl":2,"HeightNumericControl":1,"HeightChartControl":1,"HeightLegendControl":0.44999998807907104,"Width2DXControl":1,"Width2DYControl":1,"Width3DControl":2,"WidthNumericControl":2,"WidthChartControl":2,"WidthLegendControl":0.30000001192092896,"HeightValueControl":1,"WidthValueControl":1,"HeightNumericGraphicControl":1,"WidthNumericGraphicControl":1,"Height2DChartsControl":1,"Width2DChartsControl":1,"IsXAxisHeightSynchronizedBetweenCharts":true,"IsYAxisAreaWidthSynchronizedBetweenCharts":true,"SyncedXAxisHeight":NaN,"XWChartXAxisHeight":NaN,"YWChartXAxisHeight":NaN,"SyncedLeftAxisAreaWidth":NaN,"XWChartLeftAxisAreaWidth":NaN,"YWChartLeftAxisAreaWidth":NaN,"SyncedRightAxisAreaWidth":NaN,"XWChartRightAxisAreaWidth":NaN,"YWChartRightAxisAreaWidth":NaN,"LegendPosition":0,"LegendViewType":0,"LegendTableColumnAttributes":[{"TypeId":"1048594","Size":40},{"TypeId":"1048601","Size":45},{"TypeId":"31","Size":100},{"TypeId":"3","Size":250},{"TypeId":"16","Size":70},{"TypeId":"1048627","Size":100},{"TypeId":"1048631","Size":100},{"TypeId":"1048634","Size":100}],"LegendTabItemAttributes":[{"TypeId":"31","Size":100}],"FlipAxes":false,"AxisDisplayNameMode":3,"ReversedAxis":[false,false],"ShowUnits":false,"ShowObjectColor":false,"SortDescending":false,"SortAttributeId":null,"ShowWorkingPointHistory":false,"NumericViewValueObjectDisplayOption":1,"ValueColumnWidth":106,"ValueColumnWidthDouble":106.66666666666663,"ParameterGroup":"","ModuleName":"","GroupIsFunction":false,"NumericControlAxisAttributes":[],"NumericControlColumnAttributes":[{"TypeId":"31","Size":192}],"ChartViewValueObjectDisplayOption":1,"SerializationCameraPosition":{"X":1,"Y":1,"Z":-1},"SerializationCameraTarget":{"X":0,"Y":0.5,"Z":0},"IsValueAnnotationRotated":false,"EquidistantAxisPoints":false,"BarThickness":0.6,"WorkingPointMarker":0,"LinearWorkingPointInterpolation":true,"ShowAllIntersectionLines":false,"IsValueAxisIndependent":true,"TickLabelRotationAngle":-90,"IsTickLabelRotationEnabled":false,"IsTickLabelRightAligned":false,"ShowBoundarySurface":true,"ShowBoundarySurfaceGradient":false,"ShowCursorAsCrosshair":false,"XAxisAutoRange":true,"ValueAxisAutoRange":true,"ShowAllValueAxes":false,"DrawAxisBands":false,"CurrentColumnChartType":0,"SerializationCursorCrosshairColor":{"R":0,"G":0,"B":0,"A":255},"AlignBarToZero":true,"DefaultChartViewType":2,"AttributeColumnPositioning":1}} +PROPERTY_1={"Version":"1.3.0.0","Configuration":{"ArrayWindowSubControlConfiguration":{"NumericGraphicCompositeWidth":307,"NumericGraphicCompositeHeight":98,"LegendCoordinatePoint":{"X":0,"Y":0},"LegendWidth":0,"LegendHeight":0,"LegendLayoutGroupSizeWidth":0,"LegendLayoutGroupSizeHeight":0,"NumericCoordinatePoint":{"X":1,"Y":24},"NumericWidth":305,"NumericHeight":73,"NumericLayoutGroupSizeWidth":305,"NumericLayoutGroupSizeHeight":73,"Intersection2DXWCoordinatePoint":{"X":0,"Y":0},"Intersection2DXWWidth":0,"Intersection2DXWHeight":0,"Intersection2DXWLayoutGroupSizeWidth":0,"Intersection2DXWLayoutGroupSizeHeight":0,"Intersection2DYWCoordinatePoint":{"X":0,"Y":0},"Intersection2DYWWidth":0,"Intersection2DYWHeight":0,"Intersection2DYWLayoutGroupSizeWidth":0,"Intersection2DYWLayoutGroupSizeHeight":0,"Graphic3DCoordinatePoint":{"X":0,"Y":0},"Graphic3DWidth":0,"Graphic3DHeight":0,"Graphic3DLayoutGroupSizeWidth":0,"Graphic3DLayoutGroupSizeHeight":0},"ShowCalibrationBar":true,"ShowHorizontalChartLines":false,"ShowVerticalChartLines":false,"NonSelectedIntersectionLineTransparency":0.100000024,"FocusedValueSymbol":"DEVICE:\"xcp_demo\":\"$kParameters$kParameters.delay_us\":P","ValueObjectConfigurations":[{"Symbol":"DEVICE:\"xcp_demo\":\"$kParameters$kParameters.counter_max\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":2000,"ValueAxisMinHome":0,"ValueAxisMaxHome":0,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$kParameters$kParameters.delay_us\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":100000,"ValueAxisMinHome":0,"ValueAxisMaxHome":0,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]}],"NumericGraphicControlPosition":0,"NumericGraphicControlSelectedTab":0,"GraphicControlPosition":0,"Height2DXControl":1,"Height2DYControl":1,"Height3DControl":2,"HeightNumericControl":1,"HeightChartControl":1,"HeightLegendControl":0.44999998807907104,"Width2DXControl":1,"Width2DYControl":1,"Width3DControl":2,"WidthNumericControl":2,"WidthChartControl":2,"WidthLegendControl":0.30000001192092896,"HeightValueControl":1,"WidthValueControl":1,"HeightNumericGraphicControl":1,"WidthNumericGraphicControl":1,"Height2DChartsControl":1,"Width2DChartsControl":1,"IsXAxisHeightSynchronizedBetweenCharts":true,"IsYAxisAreaWidthSynchronizedBetweenCharts":true,"SyncedXAxisHeight":NaN,"XWChartXAxisHeight":NaN,"YWChartXAxisHeight":NaN,"SyncedLeftAxisAreaWidth":NaN,"XWChartLeftAxisAreaWidth":NaN,"YWChartLeftAxisAreaWidth":NaN,"SyncedRightAxisAreaWidth":NaN,"XWChartRightAxisAreaWidth":NaN,"YWChartRightAxisAreaWidth":NaN,"LegendPosition":0,"LegendViewType":0,"LegendTableColumnAttributes":[{"TypeId":"1048594","Size":40},{"TypeId":"1048601","Size":45},{"TypeId":"31","Size":100},{"TypeId":"3","Size":250},{"TypeId":"16","Size":70},{"TypeId":"1048627","Size":100},{"TypeId":"1048631","Size":100},{"TypeId":"1048634","Size":100}],"LegendTabItemAttributes":[{"TypeId":"31","Size":100}],"FlipAxes":false,"AxisDisplayNameMode":3,"ReversedAxis":[false,false],"ShowUnits":false,"ShowObjectColor":false,"SortDescending":false,"SortAttributeId":null,"ShowWorkingPointHistory":false,"NumericViewValueObjectDisplayOption":1,"ValueColumnWidth":106,"ValueColumnWidthDouble":106.66666666666663,"ParameterGroup":"","ModuleName":"","GroupIsFunction":false,"NumericControlAxisAttributes":[],"NumericControlColumnAttributes":[{"TypeId":"31","Size":192}],"ChartViewValueObjectDisplayOption":1,"SerializationCameraPosition":{"X":1,"Y":1,"Z":-1},"SerializationCameraTarget":{"X":0,"Y":0.5,"Z":0},"IsValueAnnotationRotated":false,"EquidistantAxisPoints":false,"BarThickness":0.6,"WorkingPointMarker":0,"LinearWorkingPointInterpolation":true,"ShowAllIntersectionLines":false,"IsValueAxisIndependent":true,"TickLabelRotationAngle":-90,"IsTickLabelRotationEnabled":false,"IsTickLabelRightAligned":false,"ShowBoundarySurface":true,"ShowBoundarySurfaceGradient":false,"ShowCursorAsCrosshair":false,"XAxisAutoRange":true,"ValueAxisAutoRange":true,"ShowAllValueAxes":false,"DrawAxisBands":false,"CurrentColumnChartType":0,"SerializationCursorCrosshairColor":{"R":0,"G":0,"B":0,"A":255},"AlignBarToZero":true,"DefaultChartViewType":2,"AttributeColumnPositioning":1}} OBJECTS_COUNT=2 -OBJECT_1=DEVICE:"xcp_demo":"$Parameters$Parameters.counter_max":P -OBJECT_2=DEVICE:"xcp_demo":"$Parameters$Parameters.delay_us":P +OBJECT_1=DEVICE:"xcp_demo":"$kParameters$kParameters.counter_max":P +OBJECT_2=DEVICE:"xcp_demo":"$kParameters$kParameters.delay_us":P ObjectCount=2 HiddenDisplayCount=0 Title=Calibration @@ -1414,14 +1439,14 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_a664f860-510c-4e46-a9b8-1c1eee700f61 +GUID=DISPLAY_c6190761-0391-42bd-a5a1-8d610ba85d39 [WINDOW_12] XLen=873321 XMin=0 XMinNs=0 -XMax=31712 -XMaxNs=31712361929 +XMax=13486 +XMaxNs=13486994684 Grid=1 Mark=1 YValue=1 @@ -1494,7 +1519,7 @@ COL_2_dpi96=16, 48 [WINDOW_1_OBJECT_1] Type=2 Module=xcp_demo -Name=$Parameters$Parameters.counter_max +Name=$kParameters$kParameters.counter_max Window=1 Index=0 Color=0 @@ -1538,12 +1563,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_b1ec91ba-d725-435f-abd7-f2dea27cc2fb +GUID=DISPLAY_97f670c8-d6bc-4c28-bdd6-852ab58cb911 [WINDOW_1_OBJECT_2] Type=2 Module=xcp_demo -Name=$Parameters$Parameters.delay_us +Name=$kParameters$kParameters.delay_us Window=1 Index=1 Color=0 @@ -1587,7 +1612,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_12677eec-de48-41f2-8b52-f997a727343e +GUID=DISPLAY_217d8753-bec9-42b9-9a86-efd4d132e052 [WINDOW_2] ComponentCount=2 @@ -1609,8 +1634,8 @@ DisplayMask=1 ; pages 1 XLen=873321 XMin=0 XMinNs=0 -XMax=31712 -XMaxNs=31712361929 +XMax=13486 +XMaxNs=13486994684 Grid=1 Mark=1 YValue=2 @@ -1790,8 +1815,8 @@ DisplayMask=2 ; pages 2 XLen=194403 XMin=0 XMinNs=0 -XMax=31712 -XMaxNs=31712367180 +XMax=13487 +XMaxNs=13487081706 Grid=1 Mark=1 YValue=1 @@ -1860,7 +1885,7 @@ COL_0_dpi96=31, 222 [WINDOW_8] ProgID= PROPERTIES_COUNT=1 -PROPERTY_1={"Version":"1.3.0.0","Configuration":{"ArrayWindowSubControlConfiguration":{"NumericGraphicCompositeWidth":219,"NumericGraphicCompositeHeight":162,"LegendCoordinatePoint":{"X":0,"Y":0},"LegendWidth":0,"LegendHeight":0,"LegendLayoutGroupSizeWidth":0,"LegendLayoutGroupSizeHeight":0,"NumericCoordinatePoint":{"X":1,"Y":24},"NumericWidth":217,"NumericHeight":137,"NumericLayoutGroupSizeWidth":217,"NumericLayoutGroupSizeHeight":137,"Intersection2DXWCoordinatePoint":{"X":0,"Y":0},"Intersection2DXWWidth":0,"Intersection2DXWHeight":0,"Intersection2DXWLayoutGroupSizeWidth":0,"Intersection2DXWLayoutGroupSizeHeight":0,"Intersection2DYWCoordinatePoint":{"X":0,"Y":0},"Intersection2DYWWidth":0,"Intersection2DYWHeight":0,"Intersection2DYWLayoutGroupSizeWidth":0,"Intersection2DYWLayoutGroupSizeHeight":0,"Graphic3DCoordinatePoint":{"X":0,"Y":0},"Graphic3DWidth":0,"Graphic3DHeight":0,"Graphic3DLayoutGroupSizeWidth":0,"Graphic3DLayoutGroupSizeHeight":0},"ShowCalibrationBar":true,"ShowHorizontalChartLines":false,"ShowVerticalChartLines":false,"NonSelectedIntersectionLineTransparency":0.100000024,"FocusedValueSymbol":"DEVICE:\"xcp_demo\":\"$SigGen1$SigGen1.ampl\":P","ValueObjectConfigurations":[{"Symbol":"DEVICE:\"xcp_demo\":\"$SigGen1$SigGen1.signal_type\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":4,"ValueAxisMinHome":0,"ValueAxisMaxHome":4,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$SigGen1$SigGen1.ampl\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":100,"ValueAxisMinHome":0,"ValueAxisMaxHome":100,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$SigGen1$SigGen1.offset\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":-100,"ValueAxisMax":100,"ValueAxisMinHome":-100,"ValueAxisMaxHome":100,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$SigGen1$SigGen1.period\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0.01,"ValueAxisMax":10,"ValueAxisMinHome":0.01,"ValueAxisMaxHome":10,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$SigGen1$SigGen1.phase\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":3.14159,"ValueAxisMinHome":0,"ValueAxisMaxHome":3.14159,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$SigGen1$SigGen1.delay_us\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":100000,"ValueAxisMinHome":0,"ValueAxisMaxHome":100000,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]}],"NumericGraphicControlPosition":0,"NumericGraphicControlSelectedTab":0,"GraphicControlPosition":0,"Height2DXControl":1,"Height2DYControl":1,"Height3DControl":2,"HeightNumericControl":1,"HeightChartControl":1,"HeightLegendControl":0.44999998807907104,"Width2DXControl":1,"Width2DYControl":1,"Width3DControl":2,"WidthNumericControl":2,"WidthChartControl":2,"WidthLegendControl":0.30000001192092896,"HeightValueControl":1,"WidthValueControl":1,"HeightNumericGraphicControl":1,"WidthNumericGraphicControl":1,"Height2DChartsControl":1,"Width2DChartsControl":1,"IsXAxisHeightSynchronizedBetweenCharts":true,"IsYAxisAreaWidthSynchronizedBetweenCharts":true,"SyncedXAxisHeight":NaN,"XWChartXAxisHeight":NaN,"YWChartXAxisHeight":NaN,"SyncedLeftAxisAreaWidth":NaN,"XWChartLeftAxisAreaWidth":NaN,"YWChartLeftAxisAreaWidth":NaN,"SyncedRightAxisAreaWidth":NaN,"XWChartRightAxisAreaWidth":NaN,"YWChartRightAxisAreaWidth":NaN,"LegendPosition":0,"LegendViewType":0,"LegendTableColumnAttributes":[{"TypeId":"1048594","Size":40},{"TypeId":"1048601","Size":45},{"TypeId":"31","Size":100},{"TypeId":"3","Size":250},{"TypeId":"16","Size":70},{"TypeId":"1048627","Size":100},{"TypeId":"1048631","Size":100},{"TypeId":"1048634","Size":100}],"LegendTabItemAttributes":[{"TypeId":"31","Size":100}],"FlipAxes":false,"AxisDisplayNameMode":3,"ReversedAxis":[false,false],"ShowUnits":false,"ShowObjectColor":true,"SortDescending":false,"SortAttributeId":null,"ShowWorkingPointHistory":false,"NumericViewValueObjectDisplayOption":1,"ValueColumnWidth":72,"ValueColumnWidthDouble":72.5,"ParameterGroup":"","ModuleName":"","GroupIsFunction":false,"NumericControlAxisAttributes":[],"NumericControlColumnAttributes":[{"TypeId":"31","Size":129.5}],"ChartViewValueObjectDisplayOption":1,"SerializationCameraPosition":{"X":1,"Y":1,"Z":-1},"SerializationCameraTarget":{"X":0,"Y":0.5,"Z":0},"IsValueAnnotationRotated":false,"EquidistantAxisPoints":false,"BarThickness":0.6,"WorkingPointMarker":0,"LinearWorkingPointInterpolation":true,"ShowAllIntersectionLines":false,"IsValueAxisIndependent":true,"TickLabelRotationAngle":-90,"IsTickLabelRotationEnabled":false,"IsTickLabelRightAligned":false,"ShowBoundarySurface":true,"ShowBoundarySurfaceGradient":false,"ShowCursorAsCrosshair":false,"XAxisAutoRange":true,"ValueAxisAutoRange":true,"ShowAllValueAxes":false,"DrawAxisBands":false,"CurrentColumnChartType":0,"SerializationCursorCrosshairColor":{"R":0,"G":0,"B":0,"A":255},"AlignBarToZero":true,"DefaultChartViewType":2,"AttributeColumnPositioning":1}} +PROPERTY_1={"Version":"1.3.0.0","Configuration":{"ArrayWindowSubControlConfiguration":{"NumericGraphicCompositeWidth":219,"NumericGraphicCompositeHeight":162,"LegendCoordinatePoint":{"X":0,"Y":0},"LegendWidth":0,"LegendHeight":0,"LegendLayoutGroupSizeWidth":0,"LegendLayoutGroupSizeHeight":0,"NumericCoordinatePoint":{"X":1,"Y":24},"NumericWidth":217,"NumericHeight":137,"NumericLayoutGroupSizeWidth":217,"NumericLayoutGroupSizeHeight":137,"Intersection2DXWCoordinatePoint":{"X":0,"Y":0},"Intersection2DXWWidth":0,"Intersection2DXWHeight":0,"Intersection2DXWLayoutGroupSizeWidth":0,"Intersection2DXWLayoutGroupSizeHeight":0,"Intersection2DYWCoordinatePoint":{"X":0,"Y":0},"Intersection2DYWWidth":0,"Intersection2DYWHeight":0,"Intersection2DYWLayoutGroupSizeWidth":0,"Intersection2DYWLayoutGroupSizeHeight":0,"Graphic3DCoordinatePoint":{"X":0,"Y":0},"Graphic3DWidth":0,"Graphic3DHeight":0,"Graphic3DLayoutGroupSizeWidth":0,"Graphic3DLayoutGroupSizeHeight":0},"ShowCalibrationBar":true,"ShowHorizontalChartLines":false,"ShowVerticalChartLines":false,"NonSelectedIntersectionLineTransparency":0.100000024,"FocusedValueSymbol":"DEVICE:\"xcp_demo\":\"$SigGen1$SigGen1.period\":P","ValueObjectConfigurations":[{"Symbol":"DEVICE:\"xcp_demo\":\"$SigGen1$SigGen1.signal_type\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":4,"ValueAxisMinHome":0,"ValueAxisMaxHome":4,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$SigGen1$SigGen1.ampl\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":100,"ValueAxisMinHome":0,"ValueAxisMaxHome":100,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$SigGen1$SigGen1.offset\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":-100,"ValueAxisMax":100,"ValueAxisMinHome":-100,"ValueAxisMaxHome":100,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$SigGen1$SigGen1.period\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0.01,"ValueAxisMax":10,"ValueAxisMinHome":0.01,"ValueAxisMaxHome":10,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$SigGen1$SigGen1.phase\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":3.14159,"ValueAxisMinHome":0,"ValueAxisMaxHome":3.14159,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$SigGen1$SigGen1.delay_us\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":100000,"ValueAxisMinHome":0,"ValueAxisMaxHome":100000,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]}],"NumericGraphicControlPosition":0,"NumericGraphicControlSelectedTab":0,"GraphicControlPosition":0,"Height2DXControl":1,"Height2DYControl":1,"Height3DControl":2,"HeightNumericControl":1,"HeightChartControl":1,"HeightLegendControl":0.44999998807907104,"Width2DXControl":1,"Width2DYControl":1,"Width3DControl":2,"WidthNumericControl":2,"WidthChartControl":2,"WidthLegendControl":0.30000001192092896,"HeightValueControl":1,"WidthValueControl":1,"HeightNumericGraphicControl":1,"WidthNumericGraphicControl":1,"Height2DChartsControl":1,"Width2DChartsControl":1,"IsXAxisHeightSynchronizedBetweenCharts":true,"IsYAxisAreaWidthSynchronizedBetweenCharts":true,"SyncedXAxisHeight":NaN,"XWChartXAxisHeight":NaN,"YWChartXAxisHeight":NaN,"SyncedLeftAxisAreaWidth":NaN,"XWChartLeftAxisAreaWidth":NaN,"YWChartLeftAxisAreaWidth":NaN,"SyncedRightAxisAreaWidth":NaN,"XWChartRightAxisAreaWidth":NaN,"YWChartRightAxisAreaWidth":NaN,"LegendPosition":0,"LegendViewType":0,"LegendTableColumnAttributes":[{"TypeId":"1048594","Size":40},{"TypeId":"1048601","Size":45},{"TypeId":"31","Size":100},{"TypeId":"3","Size":250},{"TypeId":"16","Size":70},{"TypeId":"1048627","Size":100},{"TypeId":"1048631","Size":100},{"TypeId":"1048634","Size":100}],"LegendTabItemAttributes":[{"TypeId":"31","Size":100}],"FlipAxes":false,"AxisDisplayNameMode":3,"ReversedAxis":[false,false],"ShowUnits":false,"ShowObjectColor":true,"SortDescending":false,"SortAttributeId":null,"ShowWorkingPointHistory":false,"NumericViewValueObjectDisplayOption":1,"ValueColumnWidth":87,"ValueColumnWidthDouble":87,"ParameterGroup":"","ModuleName":"","GroupIsFunction":false,"NumericControlAxisAttributes":[],"NumericControlColumnAttributes":[{"TypeId":"31","Size":125}],"ChartViewValueObjectDisplayOption":1,"SerializationCameraPosition":{"X":1,"Y":1,"Z":-1},"SerializationCameraTarget":{"X":0,"Y":0.5,"Z":0},"IsValueAnnotationRotated":false,"EquidistantAxisPoints":false,"BarThickness":0.6,"WorkingPointMarker":0,"LinearWorkingPointInterpolation":true,"ShowAllIntersectionLines":false,"IsValueAxisIndependent":true,"TickLabelRotationAngle":-90,"IsTickLabelRotationEnabled":false,"IsTickLabelRightAligned":false,"ShowBoundarySurface":true,"ShowBoundarySurfaceGradient":false,"ShowCursorAsCrosshair":false,"XAxisAutoRange":true,"ValueAxisAutoRange":true,"ShowAllValueAxes":false,"DrawAxisBands":false,"CurrentColumnChartType":0,"SerializationCursorCrosshairColor":{"R":0,"G":0,"B":0,"A":255},"AlignBarToZero":true,"DefaultChartViewType":2,"AttributeColumnPositioning":1}} OBJECTS_COUNT=6 OBJECT_1=DEVICE:"xcp_demo":"$SigGen1$SigGen1.signal_type":P OBJECT_2=DEVICE:"xcp_demo":"$SigGen1$SigGen1.ampl":P @@ -1931,7 +1956,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_c5b530b1-47d1-4d04-b5a8-d39dd8001cb9 +GUID=DISPLAY_0b71f547-44d2-4307-9354-fd50fde188d7 [WINDOW_8_OBJECT_2] Type=2 @@ -1980,7 +2005,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_fda9f046-8853-4bf7-9a4e-282077fb7a8d +GUID=DISPLAY_e48971b4-9e1b-4704-86f8-a81d758743f0 [WINDOW_8_OBJECT_3] Type=2 @@ -2029,7 +2054,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_4f6ac6ea-495b-489e-8c27-93517d54b2a7 +GUID=DISPLAY_c5467233-ba65-4c64-847e-c3601f80f528 [WINDOW_8_OBJECT_4] Type=2 @@ -2078,7 +2103,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_10200761-2b42-46e2-89d9-fac2661e72f1 +GUID=DISPLAY_d202bd76-efe3-4cb4-af93-8196348d38d2 [WINDOW_8_OBJECT_5] Type=2 @@ -2127,7 +2152,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_1f32d7db-e939-4124-8cb3-6c5dc3a9fe42 +GUID=DISPLAY_1fa4a948-95d6-404b-87b4-8a53a35d9daf [WINDOW_8_OBJECT_6] Type=2 @@ -2176,7 +2201,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_1159ccb5-51c2-40a0-b5ff-44edae7f913b +GUID=DISPLAY_e95fc922-ffc0-4d57-893e-c36d7de9c9fb [WINDOW_9] ProgID= @@ -2252,7 +2277,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_c140a198-fabc-46c2-9e32-1312e1cbfb90 +GUID=DISPLAY_8cd5c9f6-d1a8-433c-85ce-963e4ef6a72a [WINDOW_9_OBJECT_2] Type=2 @@ -2301,7 +2326,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_8a3c7c4b-6625-471a-8ddf-f26a9497799b +GUID=DISPLAY_451b09c1-6da1-4126-8e4f-c9876c7e326e [WINDOW_9_OBJECT_3] Type=2 @@ -2350,7 +2375,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_45084edb-3a3f-4eb6-b489-b655c1f391b1 +GUID=DISPLAY_3e0526da-89b3-4459-b1ce-99a6fd6473d8 [WINDOW_9_OBJECT_4] Type=2 @@ -2399,7 +2424,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_2ad8e476-e016-4e07-866c-bc1bab31c8dd +GUID=DISPLAY_d5a9f6b4-3e82-4749-b7b5-72ca1d677d3f [WINDOW_9_OBJECT_5] Type=2 @@ -2448,7 +2473,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_6335d3ed-57ed-4ccf-a96e-bf3a5136a71a +GUID=DISPLAY_21645314-9a5e-470f-8bef-007c4862b2ec [WINDOW_9_OBJECT_6] Type=2 @@ -2497,7 +2522,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_e210d6b3-c6f3-4e74-863e-6edf9063627e +GUID=DISPLAY_d41c2b6c-87a8-4d79-8bcd-18b5968dd8f0 [WINDOWS] Count=12 diff --git a/examples/cpp_demo/CANape/xcp_demo_autodetect.a2l b/examples/cpp_demo/CANape/xcp_demo_autodetect.a2l index ca52200d..29ffc64c 100644 --- a/examples/cpp_demo/CANape/xcp_demo_autodetect.a2l +++ b/examples/cpp_demo/CANape/xcp_demo_autodetect.a2l @@ -1,7 +1,7 @@ ASAP2_VERSION 1 71 /begin PROJECT cpp_demo "" -/begin HEADER "" VERSION "1.0" PROJECT_NO VECTOR /end HEADER +/begin HEADER "" VERSION "1.0" PROJECT_NO XCPLITE__CASDD /end HEADER /begin MODULE cpp_demo "" @@ -25,18 +25,18 @@ ALIGNMENT_INT64 1 /begin STRUCTURE_COMPONENT delay_us C_delay_us 0x4 /end STRUCTURE_COMPONENT /end TYPEDEF_STRUCTURE -/* Segment relative addressing mode: calseg=Parameters */ -/begin INSTANCE Parameters "Main parameters" ParametersT 0x80000000 /end INSTANCE +/* Segment relative addressing mode: calseg=kParameters */ +/begin INSTANCE kParameters "Main parameters" ParametersT 0x80010000 /end INSTANCE -/* Absolute addressing mode: default_event=mainloop (0), addr_ext=1 */ -/begin MEASUREMENT temperature "Motor temperature in °C" UBYTE conv.temperature 0 0 -50 200 ECU_ADDRESS 0x28000 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x0 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT speed "Speed in km/h" FLOAT64_IEEE NO_COMPU_METHOD 0 0 0 250 ECU_ADDRESS 0x280C0 ECU_ADDRESS_EXTENSION 1 PHYS_UNIT "km/h" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x0 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/* Absolute addressing mode: default_event=mainloop (1), addr_ext=1 */ +/begin MEASUREMENT temperature "Motor temperature in °C" UBYTE conv.temperature 0 0 -50 200 ECU_ADDRESS 0x28000 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT speed "Speed in km/h" FLOAT64_IEEE NO_COMPU_METHOD 0 0 0 250 ECU_ADDRESS 0x280C8 ECU_ADDRESS_EXTENSION 1 PHYS_UNIT "km/h" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/* Stack frame relative addressing mode: event=mainloop (0), addr_ext=2 */ -/begin MEASUREMENT loop_counter "Mainloop loop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0xFBA6 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT loop_cycletime "Mainloop cycle time" A_UINT64 conv.clock_ticks 0 0 0 0.05 ECU_ADDRESS 0xFB90 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin CHARACTERISTIC loop_histogram "Mainloop cycle time histogram" VAL_BLK 0xFBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC -/begin MEASUREMENT sum "Sum of SigGen1 and SigGen2 value" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0xFB80 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/* Stack frame relative addressing mode: event=mainloop (1), addr_ext=2 */ +/begin MEASUREMENT loop_counter "Mainloop loop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x1FBAE ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT loop_cycletime "Mainloop cycle time" A_UINT64 conv.clock_ticks 0 0 0 0.05 ECU_ADDRESS 0x1FB98 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin CHARACTERISTIC loop_histogram "Mainloop cycle time histogram" VAL_BLK 0x1FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC +/begin MEASUREMENT sum "Sum of SigGen1 and SigGen2 value" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x1FB88 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT /begin TYPEDEF_STRUCTURE LookupTableT "A2L typedef for LookupTableT" 0x2C /begin STRUCTURE_COMPONENT values C_values 0x0 /end STRUCTURE_COMPONENT @@ -53,22 +53,22 @@ ALIGNMENT_INT64 1 /end TYPEDEF_STRUCTURE /* Segment relative addressing mode: calseg=SigGen1 */ -/begin INSTANCE SigGen1 "Signal parameters for the signal generator" SignalParametersT 0x80010000 /end INSTANCE +/begin INSTANCE SigGen1 "Signal parameters for the signal generator" SignalParametersT 0x80020000 /end INSTANCE /* Segment relative addressing mode: calseg=SigGen2 */ -/begin INSTANCE SigGen2 "Signal parameters for the signal generator" SignalParametersT 0x80020000 /end INSTANCE +/begin INSTANCE SigGen2 "Signal parameters for the signal generator" SignalParametersT 0x80030000 /end INSTANCE -/* Relative addressing mode: event=SigGen1 (1), addr_ext=3 */ -/begin MEASUREMENT SigGen1.value_ "Signal generator output" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -100 100 ECU_ADDRESS 0x10018 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/* Relative addressing mode: event=SigGen1 (2), addr_ext=3 */ +/begin MEASUREMENT SigGen1.value_ "Signal generator output" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -100 100 ECU_ADDRESS 0x20018 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/* Stack frame relative addressing mode: event=SigGen1 (1), addr_ext=2 */ -/begin MEASUREMENT SigGen1.time "Signal generator time" FLOAT64_IEEE NO_COMPU_METHOD 0 0 0 3600 ECU_ADDRESS 0x1FFE0 ECU_ADDRESS_EXTENSION 2 PHYS_UNIT "s" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/* Stack frame relative addressing mode: event=SigGen1 (2), addr_ext=2 */ +/begin MEASUREMENT SigGen1.time "Signal generator time" FLOAT64_IEEE NO_COMPU_METHOD 0 0 0 3600 ECU_ADDRESS 0x2FFE0 ECU_ADDRESS_EXTENSION 2 PHYS_UNIT "s" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/* Relative addressing mode: event=SigGen2 (2), addr_ext=3 */ -/begin MEASUREMENT SigGen2.value_ "Signal generator output" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -100 100 ECU_ADDRESS 0x20018 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/* Relative addressing mode: event=SigGen2 (3), addr_ext=3 */ +/begin MEASUREMENT SigGen2.value_ "Signal generator output" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -100 100 ECU_ADDRESS 0x30018 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/* Stack frame relative addressing mode: event=SigGen2 (2), addr_ext=2 */ -/begin MEASUREMENT SigGen2.time "Signal generator time" FLOAT64_IEEE NO_COMPU_METHOD 0 0 0 3600 ECU_ADDRESS 0x2FFE0 ECU_ADDRESS_EXTENSION 2 PHYS_UNIT "s" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/* Stack frame relative addressing mode: event=SigGen2 (3), addr_ext=2 */ +/begin MEASUREMENT SigGen2.time "Signal generator time" FLOAT64_IEEE NO_COMPU_METHOD 0 0 0 3600 ECU_ADDRESS 0x3FFE0 ECU_ADDRESS_EXTENSION 2 PHYS_UNIT "s" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT /* Typedefs */ /begin RECORD_LAYOUT U8 FNC_VALUES 1 UBYTE ROW_DIR DIRECT /end RECORD_LAYOUT @@ -123,12 +123,12 @@ ALIGNMENT_INT64 1 /begin TYPEDEF_CHARACTERISTIC C_delay_us "Delay time in us" VALUE U32 0 NO_COMPU_METHOD 0 100000 PHYS_UNIT "us" /end TYPEDEF_CHARACTERISTIC /* Groups */ -/begin GROUP Parameters "Calibration Segment" /begin REF_CHARACTERISTIC Parameters /end REF_CHARACTERISTIC /end GROUP -/begin GROUP mainloop "Measurement event group" /begin REF_MEASUREMENT temperature speed loop_counter loop_cycletime loop_histogram sum /end REF_MEASUREMENT /end GROUP -/begin GROUP SigGen1 "Calibration Segment" /begin REF_CHARACTERISTIC SigGen1 /end REF_CHARACTERISTIC /end GROUP -/begin GROUP SigGen2 "Calibration Segment" /begin REF_CHARACTERISTIC SigGen2 /end REF_CHARACTERISTIC /end GROUP -/begin GROUP SigGen1 "Measurement event group" /begin REF_MEASUREMENT SigGen1.value_ SigGen1.time /end REF_MEASUREMENT /end GROUP -/begin GROUP SigGen2 "Measurement event group" /begin REF_MEASUREMENT SigGen2.value_ SigGen2.time /end REF_MEASUREMENT /end GROUP +/begin GROUP kParameters "Calibration Segment" ROOT /begin REF_CHARACTERISTIC kParameters /end REF_CHARACTERISTIC /end GROUP +/begin GROUP mainloop "Measurement event group" /begin REF_MEASUREMENT temperature speed loop_counter loop_cycletime loop_histogram sum /end REF_MEASUREMENT /end GROUP +/begin GROUP SigGen1 "Calibration Segment" ROOT /begin REF_CHARACTERISTIC SigGen1 /end REF_CHARACTERISTIC /end GROUP +/begin GROUP SigGen2 "Calibration Segment" ROOT /begin REF_CHARACTERISTIC SigGen2 /end REF_CHARACTERISTIC /end GROUP +/begin GROUP SigGen1 "Measurement event group" /begin REF_MEASUREMENT SigGen1.value_ SigGen1.time /end REF_MEASUREMENT /end GROUP +/begin GROUP SigGen2 "Measurement event group" /begin REF_MEASUREMENT SigGen2.value_ SigGen2.time /end REF_MEASUREMENT /end GROUP /begin GROUP Events "Events" ROOT /begin SUB_GROUP mainloop SigGen1 SigGen2 /end SUB_GROUP /end GROUP /* Conversions */ @@ -139,13 +139,13 @@ ALIGNMENT_INT64 1 /begin COMPU_METHOD conv.signal_type_enum "" TAB_VERB "%.0 " "" COMPU_TAB_REF conv.signal_type_enum.table /end COMPU_METHOD /begin COMPU_VTAB conv.signal_type_enum.table "" TAB_VERB 5 0 "SINE" 1 "SQUARE" 2 "TRIANGLE" 3 "SAWTOOTH" 4 "ARBITRARY" /end COMPU_VTAB /begin COMPU_METHOD conv.events "" TAB_VERB "%.0 " "" COMPU_TAB_REF conv.events.table /end COMPU_METHOD -/begin COMPU_VTAB conv.events.table "" TAB_VERB 3 - 0 "mainloop" 1 "SigGen1" 2 "SigGen2" +/begin COMPU_VTAB conv.events.table "" TAB_VERB 4 + 0 "async" 1 "mainloop" 2 "SigGen1" 3 "SigGen2" /end COMPU_VTAB /begin MOD_PAR "" -EPK "_Sep_26_2025_15_40_50" ADDR_EPK 0xFFFF0000 -/begin MEMORY_SEGMENT Parameters "" DATA FLASH INTERN 0x80000000 0x8 -1 -1 -1 -1 -1 +EPK "14_51_38" ADDR_EPK 0x80000000 +/begin MEMORY_SEGMENT epk "" DATA FLASH INTERN 0x80000000 8 -1 -1 -1 -1 -1 /begin IF_DATA XCP /begin SEGMENT 0 2 0 0 0 /begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM @@ -154,7 +154,7 @@ EPK "_Sep_26_2025_15_40_50" ADDR_EPK 0xFFFF0000 /end SEGMENT /end IF_DATA /end MEMORY_SEGMENT -/begin MEMORY_SEGMENT SigGen1 "" DATA FLASH INTERN 0x80010000 0x58 -1 -1 -1 -1 -1 +/begin MEMORY_SEGMENT kParameters "" DATA FLASH INTERN 0x80010000 8 -1 -1 -1 -1 -1 /begin IF_DATA XCP /begin SEGMENT 1 2 0 0 0 /begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM @@ -163,7 +163,7 @@ EPK "_Sep_26_2025_15_40_50" ADDR_EPK 0xFFFF0000 /end SEGMENT /end IF_DATA /end MEMORY_SEGMENT -/begin MEMORY_SEGMENT SigGen2 "" DATA FLASH INTERN 0x80020000 0x58 -1 -1 -1 -1 -1 +/begin MEMORY_SEGMENT SigGen1 "" DATA FLASH INTERN 0x80020000 88 -1 -1 -1 -1 -1 /begin IF_DATA XCP /begin SEGMENT 2 2 0 0 0 /begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM @@ -172,6 +172,15 @@ EPK "_Sep_26_2025_15_40_50" ADDR_EPK 0xFFFF0000 /end SEGMENT /end IF_DATA /end MEMORY_SEGMENT +/begin MEMORY_SEGMENT SigGen2 "" DATA FLASH INTERN 0x80030000 88 -1 -1 -1 -1 -1 +/begin IF_DATA XCP +/begin SEGMENT 3 2 0 0 0 +/begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM +/begin PAGE 0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_DONT_CARE /end PAGE +/begin PAGE 1 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_NOT_ALLOWED /end PAGE +/end SEGMENT +/end IF_DATA +/end MEMORY_SEGMENT /end MOD_PAR @@ -215,16 +224,15 @@ OPTIONAL_CMD TIME_CORRELATION_PROPERTIES OPTIONAL_LEVEL1_CMD GET_VERSION /end PROTOCOL_LAYER /begin DAQ -DYNAMIC 0 3 0 OPTIMISATION_TYPE_DEFAULT ADDRESS_EXTENSION_FREE IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE 0xF8 OVERLOAD_INDICATION_PID -/begin TIMESTAMP_SUPPORTED -0x1 SIZE_DWORD UNIT_1US TIMESTAMP_FIXED -/end TIMESTAMP_SUPPORTED -/begin EVENT "mainloop" "mainloop" 0x0 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT -/begin EVENT "SigGen1" "SigGen1" 0x1 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT -/begin EVENT "SigGen2" "SigGen2" 0x2 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +DYNAMIC 0 4 0 OPTIMISATION_TYPE_DEFAULT ADDRESS_EXTENSION_FREE IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE 0xF8 OVERLOAD_INDICATION_PID PRESCALER_SUPPORTED +/begin TIMESTAMP_SUPPORTED 0x1 SIZE_DWORD UNIT_1NS TIMESTAMP_FIXED /end TIMESTAMP_SUPPORTED +/begin EVENT "async" "async" 0x0 DAQ 0xFF 100 4 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "mainloop" "mainloop" 0x1 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "SigGen1" "SigGen1" 0x2 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "SigGen2" "SigGen2" 0x3 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT /end DAQ /begin XCP_ON_UDP_IP - 0x104 5555 ADDRESS "192.168.8.133" + 0x104 5555 ADDRESS "192.168.0.101" /end XCP_ON_UDP_IP /end IF_DATA diff --git a/examples/cpp_demo/src/lookup.cpp b/examples/cpp_demo/src/lookup.cpp index 3d318df0..68366fe6 100644 --- a/examples/cpp_demo/src/lookup.cpp +++ b/examples/cpp_demo/src/lookup.cpp @@ -25,15 +25,15 @@ void lookup_table::LookupTableT::A2lRegisterTypedef() const { if (A2lOnce()) { #ifdef CANAPE_24 // New feature in CANape 24, shared axis in typedefs - A2lTypedefBegin(LookupTableT, "A2L typedef for LookupTableT"); - A2lTypedefCurveComponentWithSharedAxis(values, LookupTableT, kLookupTableSize, "Lookup table with shared axis", "", -1.0, 1.0, "lookup_axis"); - A2lTypedefAxisComponent(lookup_axis, LookupTableT, kLookupTableSize, "Axis for lookup table in", "", -0.0, 1.0); + A2lTypedefBegin(LookupTableT, this, "A2L typedef for LookupTableT"); + A2lTypedefCurveComponentWithSharedAxis(values, kLookupTableSize, "Lookup table with shared axis", "", -1.0, 1.0, "lookup_axis"); + A2lTypedefAxisComponent(lookup_axis, kLookupTableSize, "Axis for lookup table in", "", -0.0, 1.0); A2lTypedefEnd(); #else // No support for shared axis in nested typedefs, which means, it is not possible to reference an individual axis in typedef instance // Using a fixed axis instead - A2lTypedefBegin(LookupTableT, "A2L typedef for LookupTableT"); - A2lTypedefCurveComponent(values, LookupTableT, kLookupTableSize, "Lookup table", "", -1.0, 1.0); + A2lTypedefBegin(LookupTableT, this, "A2L typedef for LookupTableT"); + A2lTypedefCurveComponent(values, kLookupTableSize, "Lookup table", "", -1.0, 1.0); A2lTypedefEnd(); #endif } diff --git a/examples/cpp_demo/src/lookup.hpp b/examples/cpp_demo/src/lookup.hpp index 2cfe1879..0b5d74a9 100644 --- a/examples/cpp_demo/src/lookup.hpp +++ b/examples/cpp_demo/src/lookup.hpp @@ -7,9 +7,9 @@ An instance of struct LookupTable creates a calibratable curve with axis points */ - -// Use a typedef, typedefs with maps or curves with shared axis require CANape 24 -// #define CANAPE_24 +// Uses a typedef +// Note: typedefs with maps or curves with shared axis require CANape 24 +// #define CANAPE_24 // Lookup table for arbitrary waveforms namespace lookup_table { diff --git a/examples/cpp_demo/src/main.cpp b/examples/cpp_demo/src/main.cpp index 85fe9ea1..042a63ad 100644 --- a/examples/cpp_demo/src/main.cpp +++ b/examples/cpp_demo/src/main.cpp @@ -1,6 +1,7 @@ // cpp_demo xcplib C++ example #include // for std::atomic +#include // for signal(), SIGINT, SIGTERM #include // for uintxx_t #include // for memset #include // for std::cout @@ -15,6 +16,7 @@ //----------------------------------------------------------------------------------------------------- // XCP parameters #define OPTION_PROJECT_NAME "cpp_demo" // A2L project name +#define OPTION_PROJECT_EPK __TIME__ // EPK version string #define OPTION_USE_TCP false // TCP or UDP #define OPTION_SERVER_PORT 5555 // Port #define OPTION_SERVER_ADDR {0, 0, 0, 0} // Bind addr, 0.0.0.0 = ANY @@ -30,7 +32,7 @@ struct ParametersT { }; // Default values -constexpr ParametersT kParameters = {.counter_max = 1000, .delay_us = 1000}; +const ParametersT kParameters = {.counter_max = 1000, .delay_us = 1000}; //----------------------------------------------------------------------------------------------------- // Demo global measurement values @@ -78,16 +80,22 @@ const signal_generator::SignalParametersT kSignalParameters2 = { //----------------------------------------------------------------------------------------------------- +// Signal handler for clean shutdown +static volatile bool running = true; +static void sig_handler(int sig) { running = false; } + int main() { std::cout << "\nXCP on Ethernet cpp_demo C++ xcplib demo\n" << std::endl; + signal(SIGINT, sig_handler); + signal(SIGTERM, sig_handler); // Set log level (1-error, 2-warning, 3-info, 4-show XCP commands) XcpSetLogLevel(OPTION_LOG_LEVEL); // Initialize the XCP singleton, activate XCP, must be called before starting the server // If XCP is not activated, the server will not start and all XCP instrumentation will be passive with minimal overhead - XcpInit(true); + XcpInit(OPTION_PROJECT_NAME, OPTION_PROJECT_EPK, true); // Initialize the XCP Server uint8_t addr[4] = OPTION_SERVER_ADDR; @@ -98,7 +106,7 @@ int main() { // Enable A2L generation // Set mode to write once to create stable A2L files, this also enables calibration segment persistence and freeze support - if (!A2lInit(OPTION_PROJECT_NAME, NULL, addr, OPTION_SERVER_PORT, OPTION_USE_TCP, A2L_MODE_WRITE_ONCE | A2L_MODE_FINALIZE_ON_CONNECT | A2L_MODE_AUTO_GROUPS)) { + if (!A2lInit(addr, OPTION_SERVER_PORT, OPTION_USE_TCP, A2L_MODE_WRITE_ONCE | A2L_MODE_FINALIZE_ON_CONNECT | A2L_MODE_AUTO_GROUPS)) { std::cerr << "Failed to initialize A2L generator" << std::endl; return 1; } @@ -107,17 +115,17 @@ int main() { // This calibration segment has a working page (RAM) and a reference page (FLASH), it creates a MEMORY_SEGMENT in the A2L file // It provides safe (thread safe against XCP modifications), lock-free and consistent access to the calibration parameters // It supports XCP/ECU independent page switching, checksum calculation and reinitialization (copy reference page to working page) - auto calseg = xcplib::CreateCalSeg("Parameters", kParameters); + auto calseg = xcplib::CreateCalSeg("kParameters", &kParameters); // Add the calibration segment description as a typedef instance to the A2L file - A2lTypedefBegin(ParametersT, "A2L Typedef for ParametersT"); - A2lTypedefParameterComponent(counter_max, ParametersT, "Maximum counter value", "", 0, 2000); - A2lTypedefParameterComponent(delay_us, ParametersT, "Mainloop delay time in us", "us", 0, 999999); + A2lTypedefBegin(ParametersT, &kParameters, "A2L Typedef for ParametersT"); + A2lTypedefParameterComponent(counter_max, "Maximum counter value", "", 0, 2000); + A2lTypedefParameterComponent(delay_us, "Mainloop delay time in us", "us", 0, 999999); A2lTypedefEnd(); calseg.CreateA2lTypedefInstance("ParametersT", "Main parameters"); // Local variables - uint16_t loop_counter = 0; + uint16_t counter = 0; uint64_t loop_time = 0; uint64_t loop_cycletime = 0; constexpr size_t kHistogramSize = 256; @@ -136,7 +144,7 @@ int main() { // Register the local measurement variables 'loop_counter', 'loop_time', 'loop_cycletime', 'loop_histogram' and 'sum' A2lSetStackAddrMode(mainloop); - A2lCreateMeasurement(loop_counter, "Mainloop loop counter"); + A2lCreateMeasurement(counter, "Mainloop loop counter"); A2lCreateLinearConversion(clock_ticks, "Conversion from clock ticks to milliseconds", "ms", 1.0 / 1000.0, 0.0); A2lCreatePhysMeasurement(loop_cycletime, "Mainloop cycle time", "conv.clock_ticks", 0.0, 0.05); A2lCreateMeasurementArray(loop_histogram, "Mainloop cycle time histogram"); @@ -148,25 +156,24 @@ int main() { // Note that the signal generator threads register measurements in the A2L file as well // This is not in conflict because the main thread has already registered its measurements above // Otherwise use A2lLock() and A2lUnlock() to avoid race conditions when registering measurements, the A2L generator macros for are not thread safe by itself - signal_generator::SignalGenerator signal_generator_1("SigGen1", kSignalParameters1); - signal_generator::SignalGenerator signal_generator_2("SigGen2", kSignalParameters2); + signal_generator::SignalGenerator signal_generator_1("SigGen1", &kSignalParameters1); + signal_generator::SignalGenerator signal_generator_2("SigGen2", &kSignalParameters2); - // Optional for testing: Force finalizing the A2L file, otherwise it will be finalized on XCP tool connect sleepUs(100000); - A2lFinalize(); + A2lFinalize(); // @@@@ TEST: Manually finalize the A2L file to make it visible without XCP tool connect // Main loop std::cout << "Starting main loop..." << std::endl; - for (;;) { + while (running) { // Access the calibration parameters 'delay' and 'counter_max' safely // Use RAII guard for automatic lock/unlock the calibration parameter segment 'calseg' { auto parameters = calseg.lock(); // Increment the local measurement variable 'loop_counter' using the calibration parameter 'counter_max' as a limit - loop_counter++; - if (loop_counter > parameters->counter_max) - loop_counter = 0; + counter++; + if (counter > parameters->counter_max) + counter = 0; } // Guard automatically unlocks here @@ -182,7 +189,7 @@ int main() { sum = channel1 + channel2; // Update some more local and global variables - if (loop_counter == 0) { + if (counter == 0) { temperature += 1; if (temperature > 150) temperature = 0; // Reset temperature to -50 °C @@ -192,10 +199,10 @@ int main() { speed = 0; // Reset speed to 0 km/h // Trigger the XCP measurement mainloop for temperature, speed, loop_counter and sum - DaqEvent(mainloop); + DaqTriggerEvent(mainloop); sleepUs(calseg.lock()->delay_us); - } // mainloop + } // while (running) // Cleanup XcpDisconnect(); diff --git a/examples/cpp_demo/src/sig_gen.cpp b/examples/cpp_demo/src/sig_gen.cpp index c7969496..f8b34891 100644 --- a/examples/cpp_demo/src/sig_gen.cpp +++ b/examples/cpp_demo/src/sig_gen.cpp @@ -24,22 +24,22 @@ constexpr double kPi = 3.14159265358979323846; constexpr double k2Pi = (kPi * 2); // Constructor - creates the signal generator with the given instance name and parameters -SignalGenerator::SignalGenerator(const char *instance_name, SignalParametersT params) : signal_parameters_(instance_name, params), instance_name_(instance_name) { +SignalGenerator::SignalGenerator(const char *instance_name, const SignalParametersT *params) : signal_parameters_(instance_name, params), instance_name_(instance_name) { // Global once A2l registration of SignalParametersT typedef if (A2lOnce()) { - params.lookup.A2lRegisterTypedef(); // Register the lookup table typedef + params->lookup.A2lRegisterTypedef(); // Register the lookup table typedef - A2lTypedefBegin(SignalParametersT, "A2L typedef for SignalParametersT"); + A2lTypedefBegin(SignalParametersT, params, "A2L typedef for SignalParametersT"); A2lCreateEnumConversion(signal_type_enum, "5 0 \"SINE\" 1 \"SQUARE\" 2 \"TRIANGLE\" 3 \"SAWTOOTH\" 4 \"ARBITRARY\""); - A2lTypedefParameterComponent(signal_type, SignalParametersT, "Signal type", "conv.signal_type_enum", 0, 4); - A2lTypedefParameterComponent(ampl, SignalParametersT, "Amplitude", "Volt", 0, 100); - A2lTypedefParameterComponent(phase, SignalParametersT, "Phase", "", 0, k2Pi); - A2lTypedefParameterComponent(offset, SignalParametersT, "Offset", "Volt", -100, 100); - A2lTypedefParameterComponent(period, SignalParametersT, "Period", "s", 0.01, 10.0); - A2lTypedefParameterComponent(delay_us, SignalParametersT, "Delay time in us", "us", 0, 100000); - A2lTypedefComponent(lookup, LookupTableT, 1, SignalParametersT); + A2lTypedefParameterComponent(signal_type, "Signal type", "conv.signal_type_enum", 0, 4); + A2lTypedefParameterComponent(ampl, "Amplitude", "Volt", 0, 100); + A2lTypedefParameterComponent(phase, "Phase", "", 0, k2Pi); + A2lTypedefParameterComponent(offset, "Offset", "Volt", -100, 100); + A2lTypedefParameterComponent(period, "Period", "s", 0.01, 10.0); + A2lTypedefParameterComponent(delay_us, "Delay time in us", "us", 0, 100000); + A2lTypedefComponent(lookup, LookupTableT, 1); A2lTypedefEnd(); } @@ -112,7 +112,7 @@ void SignalGenerator::Task() { } // XCP event by event name, event lookup is once and will be cached in a static thread local variable - DaqEventRelative_s(instance_name_, this); // Trigger with this as dynamic addressing base to make member variables accessible + DaqTriggerEventExt_s(instance_name_, this); // Trigger with this as dynamic addressing base to make member variables accessible // Sleep for delay_us microseconds // Be sure the lock is held as short as possible ! diff --git a/examples/cpp_demo/src/sig_gen.hpp b/examples/cpp_demo/src/sig_gen.hpp index 59674f7e..4d842c2a 100644 --- a/examples/cpp_demo/src/sig_gen.hpp +++ b/examples/cpp_demo/src/sig_gen.hpp @@ -53,7 +53,7 @@ class SignalGenerator { double Calculate(double time); // Calculate waveform value based on time public: - SignalGenerator(const char *instance_name, SignalParametersT params); + SignalGenerator(const char *instance_name, const SignalParametersT *params); ~SignalGenerator(); [[nodiscard]] double GetValue() const { return value_; } // Getter for the current value diff --git a/examples/hello_xcp/CANape.png b/examples/hello_xcp/CANape.png index ade36244..a0126fe0 100644 Binary files a/examples/hello_xcp/CANape.png and b/examples/hello_xcp/CANape.png differ diff --git a/examples/hello_xcp/CANape/CANape.ini b/examples/hello_xcp/CANape/CANape.ini index b0e54fc1..4b7fab09 100644 --- a/examples/hello_xcp/CANape/CANape.ini +++ b/examples/hello_xcp/CANape/CANape.ini @@ -1,6 +1,6 @@ [!!!!!_CONSISTENCY_CHECK_START_SECTION_!!!!!] -GUID={2F5508C2-5DBC-4649-A5AB-08C4AFA2B166} +GUID={E03043D9-9B1A-4749-97D0-E683F93D6E47} [FILE_INFO] Identification=CANape-Project-File @@ -14,8 +14,8 @@ PrgDate=16.06.2025 Description= CreationTime=21:03 CreationDate=07/07/2024 ; Month/Day/Year -ModificationTime=18:36 -ModificationDate=09/27/2025 ; Month/Day/Year +ModificationTime=19:43 +ModificationDate=11/16/2025 ; Month/Day/Year Protected=0 CurrentWindowsACP=1252 @@ -331,7 +331,7 @@ CREATION_FROM_MAPFILE_INDIVIDUAL=0 CREATION_FROM_MAPFILE_UPDATE_TREE=1 SN_SEPARATOR_LEFT=. @ SN_SEPARATOR_RIGHT=. -CACHE_SYNC_SHOW_SIMPLE_DIALOG=0 +CACHE_SYNC_SHOW_SIMPLE_DIALOG=1 CHECK_PROJECT_OPTIMIZATION=1 SAVE_NEW_MAPFILE_IF_NOT_FOUND=0 AXIS_TEMP_AUTOSCALE_MIN_INTERVAL_DRAW_UNITS_CNT=1 @@ -973,14 +973,14 @@ DIMENSION_LINE_COUNT=0 [DEVICE_EXPLORER] ScreenDPIinSection=192 -POSX=280 -POSX_dpi96=140 -POSY=194 -POSY_dpi96=97 -SIZEX=2860 -SIZEX_dpi96=1430 -SIZEY=1704 -SIZEY_dpi96=852 +POSX=72 +POSX_dpi96=36 +POSY=60 +POSY_dpi96=30 +SIZEX=2324 +SIZEX_dpi96=1162 +SIZEY=1448 +SIZEY_dpi96=724 SHOWTOOLBAR=1 SHOWSTATUSBAR=1 SHOWGRID=0 @@ -988,10 +988,10 @@ RIGHTPANE2HEIGHT=-2 RIGHTPANE2HEIGHT_dpi96=-1 TREEX=450 TREEX_dpi96=225 -TREEY=1513 -TREEY_dpi96=757 +TREEY=1257 +TREEY_dpi96=629 ACTIVEPANE=1 -SELECTED_TREENODE=Devices/xcp_demo_Device/Database +SELECTED_TREENODE=Networks/ETH_Network_Network/xcp_demo_Device/Protocol/Transport Layer FIRSTVISIBLE_TREENODE=Devices TREEEXPAND_COUNT=7 TREEEXPAND_0=Devices @@ -1007,9 +1007,9 @@ TREEEXPAND_6=Networks/ETH_Network_Network/xcp_demo_Device/Protocol [DEVICE_WIZARD] ScreenDPIinSection=192 -Left=97 +Left=98 Left_dpi96=49 -Top=1653 +Top=1654 Top_dpi96=827 Width=1556 Width_dpi96=778 @@ -1021,10 +1021,10 @@ ConfigurationJson={"RemoteServiceDataList":[{"DisplayName":"CANape Master","Ip": [DlgCommentWrapper] ScreenDPIinSection=192 -WindowLeft=1035 -WindowLeft_dpi96=518 -WindowTop=480 -WindowTop_dpi96=240 +WindowLeft=540 +WindowLeft_dpi96=270 +WindowTop=278 +WindowTop_dpi96=139 WindowWidth=1350 WindowWidth_dpi96=675 WindowHeight=923 @@ -1032,10 +1032,10 @@ WindowHeight_dpi96=462 [DlgMdfComment] ScreenDPIinSection=192 -WindowLeft=1048 -WindowLeft_dpi96=524 -WindowTop=538 -WindowTop_dpi96=269 +WindowLeft=553 +WindowLeft_dpi96=277 +WindowTop=336 +WindowTop_dpi96=168 WindowWidth=1324 WindowWidth_dpi96=662 WindowHeight=786 @@ -1313,7 +1313,7 @@ XCP_OPTIONAL_CMD_AUTO_LEARNING=1 XCP_OPTIONAL_SUB_CMD_AVAILABLE_0=3 XCP_OPTIONAL_SUB_CMD_AVAILABLE_1=2 XCP_OPTIONAL_SUB_CMD_AVAILABLE_2=2 -XCP_DAQ_PROPERTIES=0x15 +XCP_DAQ_PROPERTIES=0x13 XCP_DAQ_KEY_BYTE=0xC0 XCP_DAQ_TIMESTAMP_MODE=0x0C XCP_DAQ_TIMESTAMP_TICKS=1 @@ -1385,14 +1385,14 @@ BEG_CAL_SERVICE=0x1f1 END_CAL_SERVICE=0x2f1 TEST_CONNECTION_PERIOD=0 OVERRUN_HANDLING=0 -EVENT_COUNT=2 +EVENT_COUNT=3 EVENT_CHANNEL_0=0x0000 -EVENT_CYCLE_0=0 -EVENT_SAMPLE_UNIT_0=3 +EVENT_CYCLE_0=100 +EVENT_SAMPLE_UNIT_0=7 EVENT_MODE_0=4 EVENT_PRIO_0=0 EVENT_MAX_DAQ_LIST_0=255 -EVENT_NAME_0=mainloop +EVENT_NAME_0=async EVENT_MULTISAMPLES_0=0 IGNORE_FIX_EVENTS=0 ECU_CYCLE_TIME=0 @@ -1403,8 +1403,8 @@ DETECT_SYNC_PULSE=0 GENERATE_SYNC_PULSE=0 TIME_CORR_MULTICAST=0 DAQ_TIMEOUT=0 -DAQ_RESUME_SUPPORTED=1 -DAQ_PRESCALER_SUPPORTED=0 +DAQ_RESUME_SUPPORTED=0 +DAQ_PRESCALER_SUPPORTED=1 DAQ_SINGLE_EVENT=0 DTO_SINGLE_EXT=0 DOUBLE_AS_FLOAT=0 @@ -1419,7 +1419,7 @@ PSEUDO_CAN_ID_START=2415919104 DSP_MODE=0 DAQ_LIST_AUTODETECT=1 DAQ_COUNT=0 -DAQ_CONFIG_ID=32840 +DAQ_CONFIG_ID=32928 DAQ_START_STOP_ALL_DISABLED=0 INIT_CAL_PAGE_SEGMENTWISE=0 CALRAM_CHECK_INITIAL_PAGE=1 @@ -1509,23 +1509,23 @@ CHECKSUM_DLL_NAME= CHECKSUM_MAX_BLOCKSIZE=65535 ENABLE_CHECKSUM_OUTPUT=0 CHECKSUM_TYPE_MAPPING_2=2 -SELECT_CAL_PAGE=1 +SELECT_CAL_PAGE=0 INIT_CAL_PAGE=0 RAM_PAGE_ID=0x0 ROM_PAGE_ID=0x1 RAM_PAGE_ID_EXT=0x0 ROM_PAGE_ID_EXT=0x0 FLASH_PAGE_ADDRESS_MAPPING_ENABLED=1 -MEMORY_SEGMENT_COUNT=1 -MEMORY_SEGMENT_NAME_1=Parameters +MEMORY_SEGMENT_COUNT=2 +MEMORY_SEGMENT_NAME_1=epk MEMORY_SEGMENT_TYPE_1=FLASH,DATA,INTERN -MEMORY_SEGMENT_SIZE_1=0x0000000C +MEMORY_SEGMENT_SIZE_1=0x00000008 MEMORY_SEGMENT_ADDR_1=0x80000000 MEMORY_SEGMENT_ADDR_EXT_1=0x00 MEMORY_SEGMENT_ATTRIBUTE_1=0x00000000 MEMORY_SEGMENT_FLASH_OFFSET_1=0x00000000 MEMORY_SEGMENT_ADDRESS_MAPPING_1= -MEMORY_SEGMENT_NAME_2=Parameters +MEMORY_SEGMENT_NAME_2=params MEMORY_SEGMENT_TYPE_2=FLASH,DATA,INTERN MEMORY_SEGMENT_SIZE_2=0x0000000C MEMORY_SEGMENT_ADDR_2=0x80010000 @@ -1533,15 +1533,15 @@ MEMORY_SEGMENT_ADDR_EXT_2=0x00 MEMORY_SEGMENT_ATTRIBUTE_2=0x00000000 MEMORY_SEGMENT_FLASH_OFFSET_2=0x00000000 MEMORY_SEGMENT_ADDRESS_MAPPING_2= -CALRAM_SECTOR_NAME_1=Parameters +CALRAM_SECTOR_NAME_1=epk CALRAM_SECTOR_TYPE_1=FLASH,DATA,INTERN -CALRAM_SECTOR_SIZE_1=0x0000000C +CALRAM_SECTOR_SIZE_1=0x00000008 CALRAM_SECTOR_ADDR_1=0x80000000 CALRAM_SECTOR_ADDR_EXT_1=0x00 CALRAM_SECTOR_ATTRIBUTE_1=0x00000000 CALRAM_SECTOR_FLASH_OFFSET_1=0x00000000 CALRAM_SECTOR_ADDRESS_MAPPING_1= -CALRAM_SECTOR_NAME_2=Parameters +CALRAM_SECTOR_NAME_2=params CALRAM_SECTOR_TYPE_2=FLASH,DATA,INTERN CALRAM_SECTOR_SIZE_2=0x0000000C CALRAM_SECTOR_ADDR_2=0x80010000 @@ -1549,14 +1549,14 @@ CALRAM_SECTOR_ADDR_EXT_2=0x00 CALRAM_SECTOR_ATTRIBUTE_2=0x00000000 CALRAM_SECTOR_FLASH_OFFSET_2=0x00000000 CALRAM_SECTOR_ADDRESS_MAPPING_2= -CALRAM_SECTOR_COUNT=1 +CALRAM_SECTOR_COUNT=2 FLASH_SECTOR_COUNT=0 FLASH_GROUP_COUNT=0 TRANSPORT_LAYER_INSTANCE_NAME= PROTOCOL_TYPE=4 PACKET_CTR=0 TRANSPORT_LAYER_VERSION=260 -HOST=192.168.8.133 +HOST=192.168.0.101 PORT=5555 LOCAL_PORT=0 TRANSPORT_LAYER_PROTOCOL=0 @@ -1629,7 +1629,7 @@ EVENT_SAMPLE_UNIT_1=3 EVENT_MODE_1=4 EVENT_PRIO_1=0 EVENT_MAX_DAQ_LIST_1=255 -EVENT_NAME_1=calc_speed +EVENT_NAME_1=mainloop EVENT_MULTISAMPLES_1=0 EVENT_MIN_CYCLE_TIME_CYCLE_1=0 EVENT_MIN_CYCLE_TIME_UNIT_1=9 @@ -1637,6 +1637,17 @@ EVENT_DPM_SUPPORTED_1=0 FLASH_OPTIMIZATION_SECTOR_CHECKSUM=0 THESAURUS_NAME=0 MapXcpEventsByName=0 +EVENT_CHANNEL_2=0x0002 +EVENT_CYCLE_2=0 +EVENT_SAMPLE_UNIT_2=3 +EVENT_MODE_2=4 +EVENT_PRIO_2=0 +EVENT_MAX_DAQ_LIST_2=255 +EVENT_NAME_2=calc_power +EVENT_MULTISAMPLES_2=0 +EVENT_MIN_CYCLE_TIME_CYCLE_2=0 +EVENT_MIN_CYCLE_TIME_UNIT_2=9 +EVENT_DPM_SUPPORTED_2=0 [MODULES] CREATE_SYSTEM_DEVICE=1 @@ -1828,6 +1839,13 @@ DATAMAN_REDUCENAMEFORSTRUCTERBASEFILTER=0 [PARASETEXPLORER-PRE_POST_PROCESS] SHOW_PREPROCESSDIALOG=1 +LOAD_GLOBAL_FILTER=0 +FILECOUNT=0 +CHECKED_CHILDNODES_COUNT=2 +GROUPFILTERCOUNT=0 +PARENT_NODE=9909 +CHILD_NODE_0=80000000-8000000B epk +CHILD_NODE_1=80010000-8001000B params [PRINTING] ScreenDPI=192 @@ -2047,7 +2065,7 @@ TREEX_dpi96=225 TREEY=1286 TREEY_dpi96=643 ACTIVEPANE=1 -SELECTED_TREENODE=Networks/ETH_Network_Network/xcp_demo_Device/Protocol/Transport Layer +SELECTED_TREENODE=Networks/ETH_Network_Network/xcp_demo_Device/Protocol FIRSTVISIBLE_TREENODE=Networks TREEEXPAND_COUNT=5 TREEEXPAND_0=Networks @@ -2397,9 +2415,9 @@ SELECT_SORT_COLUMN_ID=31 SELECT_SORT_UPWARD=1 LAST_PAGE_NAME_DLG_VARIABLE= LAST_PAGE_ID_DLG_VARIABLE=21006 -OBJECT_DIALOG_WITH=892 +OBJECT_DIALOG_WITH=1190 OBJECT_DIALOG_WITH_dpi96=595 -OBJECT_DIALOG_HEIGHT=481 +OBJECT_DIALOG_HEIGHT=642 OBJECT_DIALOG_HEIGHT_dpi96=321 [DB_EXPLORER_SEARCH_FILTER] @@ -2426,15 +2444,15 @@ PARENT= [DlgSaveConfigsMoreLess] ScreenDPIinSection=192 -ColWidthName=700 -ColWidthDisplay=460 +ColWidthName=699 +ColWidthDisplay=459 ShowMore=0 MoreHeight=588 MoreHeight_dpi96=294 -WindowLeft=1086 -WindowLeft_dpi96=543 -WindowTop=623 -WindowTop_dpi96=312 +WindowLeft=591 +WindowLeft_dpi96=296 +WindowTop=420 +WindowTop_dpi96=210 WindowWidth=1248 WindowWidth_dpi96=624 WindowHeight=260 @@ -2613,199 +2631,6 @@ COLUMN1_dpi96=400 COLUMN2=274 COLUMN2_dpi96=183 -[DEVICE_EXPLORER_COLUMNLIST_CHANNELS] -ScreenDPIinSection=192 -ColumnCount=4 -Column_0=0, 306 -Column_0_dpi96=0, 153 -Column_1=1245185, 132 -Column_1_dpi96=1245185, 66 -Column_2=1245186, 66 -Column_2_dpi96=1245186, 33 -Column_3=1245187, 106 -Column_3_dpi96=1245187, 53 -ColumnIdSort=-1 -SortUpward=1 - -[DEVICE_EXPLORER_COLUMNLIST_DEVICES] -ScreenDPIinSection=192 -ColumnCount=10 -Column_0=34, 96 -Column_0_dpi96=34, 48 -Column_1=0, 460 -Column_1_dpi96=0, 230 -Column_2=131078, 160 -Column_2_dpi96=131078, 80 -Column_3=131103, 100 -Column_3_dpi96=131103, 50 -Column_4=131079, 100 -Column_4_dpi96=131079, 50 -Column_5=262145, 240 -Column_5_dpi96=262145, 120 -Column_6=131085, 200 -Column_6_dpi96=131085, 100 -Column_7=131080, 240 -Column_7_dpi96=131080, 120 -Column_8=131081, 160 -Column_8_dpi96=131081, 80 -Column_9=196609, 100 -Column_9_dpi96=196609, 50 -ColumnIdSort=-1 -SortUpward=1 - -[DEVICE_EXPLORER_COLUMNLIST_NETWORKS] -ScreenDPIinSection=192 -ColumnCount=6 -Column_0=34, 64 -Column_0_dpi96=34, 32 -Column_1=0, 304 -Column_1_dpi96=0, 152 -Column_2=983041, 192 -Column_2_dpi96=983041, 96 -Column_3=983042, 530 -Column_3_dpi96=983042, 265 -Column_4=983043, 252 -Column_4_dpi96=983043, 126 -Column_5=983044, 300 -Column_5_dpi96=983044, 150 -ColumnIdSort=-1 -SortUpward=1 - -[COLOR_SCHEME_LIST] -COLOR_SCHEME0=COLOR_SCHEMEUSER_DEFINED -SCHEMES_COUNT=1 -ACTIVE=COLOR_SCHEME_H_CANAPE_CLASSIC -CURRENT_SCHEME_INDEX=0 - -[COLOR_SCHEMEUSER_DEFINED] -IS_USER_DEFINED=1 -SCHEME_NAME=[none] -ColorDisplay1=FF00 -1 8F400 -1 -ColorDisplay2=FF -1 8F4 -1 -ColorDisplay3=FFFF -1 F4F4 -1 -ColorDisplay4=FFFF00 -1 F4F400 -1 -ColorDisplay5=FF00FF -1 F400F4 -1 -ColorDisplay6=80FF -1 80F4 -1 -ColorDisplay7=FF8080 -1 F40000 -1 -ColorDisplay8=FFFFFF -1 0 -1 -ColorDisplay9=AA00 -1 AA00 -1 -ColorDisplay10=CC -1 CC -1 -ColorDisplay11=7070 -1 7070 -1 -ColorDisplay12=FFAA00 -1 FFAA00 -1 -ColorDisplay13=FF00AA -1 FF00AA -1 -ColorDisplay14=55AA -1 55AA -1 -ColorDisplay15=AA5555 -1 AA5555 -1 -ColorDisplay16=AAFFFF -1 AAFFFF -1 -ColorDisplay17=FFAA -1 FFAA -1 -ColorDisplay18=8080FF -1 8080FF -1 -ColorDisplay19=AAAA -1 AAAA -1 -ColorDisplay20=AAAA00 -1 AAAA00 -1 -ColorDisplay21=FFAAFF -1 FFAAFF -1 -ColorDisplay22=AAAAFF -1 AAAAFF -1 -ColorDisplay23=FFAAAA -1 FFAAAA -1 -ColorDisplay24=AAFFAA -1 AAFFAA -1 -ColorMarker1=FFFF00 -1 C6C600 -1 -ColorMarker2=FFFF -1 E1E1 -1 -ColorTrigger=FF00 -1 FF00 -1 -ColorEventAudio=A6620D -1 A6620D -1 -ColorEventMarker=FF -1 E7 -1 -ColorEventOther=FFFFFF -1 BABABA -1 -ColorHitMarker=FF00FF -1 FF00FF -1 -ColorGrid=8000 -1 8000 -1 -ColorBackground=0 -1 FFFFFF -1 -ColorChanged=FF0000 -1 FF0000 -1 -ColorWindowBg=C0C0C0 15 FFFFFF -1 -ColorAxis=FFFFFF -1 0 -1 -ColorAxisBackground=0 -1 FFFFFF -1 -ColorAxisSameScaled=FFFFFF -1 0 -1 -ColorAxisText=0 -1 0 -1 -ColorComments=FFFF00 -1 FFFF00 -1 -ColorCalComments=FFFF00 -1 FFFF00 -1 -ColorLegend=0 15 FFFFFF -1 -ColorLegendText=0 18 0 18 -ColorWindowFrameFocus=606060 -1 CEA27D -1 -ColorWindowFrameButtons=0 -1 0 -1 -ColorHexWinCalRam=8000 -1 8000 -1 -ColorHexWinNotCalRam=FF -1 FF -1 -ColorHexWinDbObject=80FFFF -1 80FFFF -1 -ColorHexWinInvalid=AFAFFF -1 AFAFFF -1 -ColorHexWinInvalidDb=FF -1 FF -1 -ColorHexWinSelection=FF 13 FF 13 -ColorHexWinSelText=0 14 0 14 -ColorWriteText=FFFF00 -1 FFFF00 -1 -ColorValLimitOK=FF00 -1 FF00 -1 -ColorValLimitWarn=FFFF -1 FFFF -1 -ColorValLimitError=FF -1 FF -1 -ColorActiveTitleLeft=54E3 2 54E3 2 -ColorActiveTitleRight=3D95FF 27 3D95FF 27 -ColorActiveTitleText=FFFFFF 9 FFFFFF 9 -ColorInactiveTitleLeft=7A96DF 3 7A96DF 3 -ColorInactiveTitleRight70=7A96DF 28 7A96DF 28 -ColorInactiveTitleText=D8E4F8 19 D8E4F8 19 -ColorMeaCursorTooltip=808080 -1 808080 -1 -ColorMeaCursorTooltipTxt=FFFFFF -1 FFFFFF -1 -ColorDisplayGray=999999 -1 999999 -1 -ColorDisplaySubGrid=4000 -1 4000 -1 -ColorGraphBackground=D2D2D2 -1 EEEEEE -1 -ColorInvalidSignal=F0F0F0 -1 F0F0F0 -1 -ColorLostVariable=C0C0C0 -1 C0C0C0 -1 -ColorMoveFrame=FAD5A3 -1 FAD5A3 -1 -ColorResizeMarkers=646464 -1 646464 -1 -ColorPageBackground=D8C7BC -1 D8C7BC -1 -ColorDisabledLegendText=A0A0A0 17 A0A0A0 17 -ColorBordersHighlight=FFFFFF 20 0 20 -ColorBordersShadow=A0A0A0 16 0 16 -ColorLookupTableX=FF -1 FF -1 -ColorLookupTableY=8000 -1 8000 -1 -ColorLookupTableZ=FF0000 -1 FF0000 -1 -ColorLookupTableZ4=FFFF00 -1 FFFF00 -1 -ColorLookupTableZ5=FF00FF -1 FF00FF -1 -ColorActiveCell=30FFFF -1 30FFFF -1 -ColorActiveCellText=0 -1 0 -1 -ColorMissingValues=FF -1 FF -1 -ColorBackgroundValues=FFFFFF -1 FFFFFF -1 -ColorWorkingPoint=880088 -1 880088 -1 -ColorColumnHeader=F0F0F0 30 F0F0F0 30 -ColorBackgroundMetaData=DADEE1 -1 FFFFFF -1 -ColorStatistic=FFFFFF -1 0 -1 -ColorMarker1CurveMode=F56DF3 -1 944293 -1 -ColorMarker2CurveMode=277FFF -1 2372E6 -1 - -[COMMENT_FIELD_0] -ID="Name" -MAX_LENGTH=32 -MODE=0 -VALUE_COUNT=0 -HISTORY_COUNT=0 - -[COMMENT_FIELD_1] -ID="Division" -MAX_LENGTH=32 -MODE=0 -VALUE_COUNT=0 -HISTORY_COUNT=0 - -[COMMENT_FIELD_2] -ID="Project" -MAX_LENGTH=32 -MODE=0 -VALUE_COUNT=0 -HISTORY_COUNT=0 - -[COMMENT_FIELD_3] -ID="Subject" -MAX_LENGTH=32 -MODE=0 -VALUE_COUNT=0 -HISTORY_COUNT=0 - -[COMMENT_FIELD_4] -ID="Comment" -MAX_LENGTH=-1 -MODE=12 -VALUE_COUNT=0 -HISTORY_COUNT=0 - [DlgAlgorithmConfiguration] TreeWidth=170 TreeWidth_dpi96=85 @@ -2919,10 +2744,10 @@ TreeExpStatus=0 DisplayIntValuesAsHex=0 DisplayCharArrayAsString=1 -[MEASUREMENT_0] -FileId=Measurement1 -MeasurementId=c3ae1316-6cb0-422a-9d59-7fe9286e9cb8 -LoadMeasurementSetting=3 +[Module_FILE1] +DefaultReplaceFile=0 +Converter=Converter_ID +ChildFileCount=0 [MEASUREMENT_DISPLAY] ScreenDPIinSection=192 @@ -2944,7 +2769,7 @@ TREEX_dpi96=225 TREEY=1009 TREEY_dpi96=505 ACTIVEPANE=1 -SELECTED_TREENODE=Measurement signals/Functions +SELECTED_TREENODE=Measurement signals/xcp_demo FIRSTVISIBLE_TREENODE=Measurement options TREEEXPAND_COUNT=1 TREEEXPAND_0=Measurement signals @@ -3010,11 +2835,11 @@ Column_3=31, 302 Column_3_dpi96=31, 151 Column_4=65540, 380 Column_4_dpi96=65540, 190 -Column_5=98305, 271 +Column_5=98305, 272 Column_5_dpi96=98305, 136 Column_6=1, 180 Column_6_dpi96=1, 90 -ColumnIdSort=-1 +ColumnIdSort=65542 SortUpward=1 VERSION=100 @@ -3076,14 +2901,283 @@ SortUpward=1 [MEASUREMENT_DISPLAY_DYNAMIC_COLUMNS] Count=0 -[Module_FILE1] -DefaultReplaceFile=0 -Converter=Converter_ID -ChildFileCount=0 +[PARASETEXPLORER] +LASTFILTER=AllFiles +LAST_SELECTED_SAVEDIALOG_FILETYPE_FILTER=Intel HEX files(*.hex)|*.hex| +RECENTCFGS=0 +RECENTPAR0=Y:\XCPlite-RainerZ\hello_xcp_v20_23_01_52.hex +RECENTA2L0=.\xcp_demo_autodetect.a2l +RECENTPARS=1 +HIDDENFILTERRULE= + +[PARASETEXPLORER-LOADCMDS] +LOADCMD_A2L_0=.\xcp_demo_autodetect.a2l +LOADCMD_TYPEID_0=IHEX +LOADCMD_FILE_0=Y:\XCPlite-RainerZ\hello_xcp_v20_23_01_52.hex +LOADCMD_DRIVER_TYPE_0=0 +CMDCNT=1 + +[PARASETEXPLORER-MAINVIEW-COLUMNS] +ScreenDPIinSection=192 +DISPLAY_AND_SORT_COUNT=2 +DISPLAY_AND_SORT_ID_00=458815 +DISPLAY_AND_SORT_SORT_POS_00=0 +DISPLAY_AND_SORT_WIDTH_00=46 +DISPLAY_AND_SORT_WIDTH_00_dpi96=23 +DISPLAY_AND_SORT_ID_01=458780 +DISPLAY_AND_SORT_SORT_POS_01=1 +DISPLAY_AND_SORT_WIDTH_01=200 +DISPLAY_AND_SORT_WIDTH_01_dpi96=100 +DISPLAY_AND_SORT_COMPLETE_WIDTH=600 +DISPLAY_AND_SORT_COMPLETE_WIDTH_dpi96=300 +IDLIST=458815;458780; + +[PARASETEXPLORER-MAINVIEW-DATASET-COLUMNS] +ScreenDPIinSection=192 +DISPLAY_AND_SORT_COUNT=2 +DISPLAY_AND_SORT_ID_00=458780 +DISPLAY_AND_SORT_SORT_POS_00=1 +DISPLAY_AND_SORT_WIDTH_00=200 +DISPLAY_AND_SORT_WIDTH_00_dpi96=100 +DISPLAY_AND_SORT_ID_01=458779 +DISPLAY_AND_SORT_SORT_POS_01=0 +DISPLAY_AND_SORT_WIDTH_01=200 +DISPLAY_AND_SORT_WIDTH_01_dpi96=100 +DISPLAY_AND_SORT_COMPLETE_WIDTH=600 +DISPLAY_AND_SORT_COMPLETE_WIDTH_dpi96=300 +IDLIST=458780;458779; + +[PARASETEXPLORER-MAINVIEW-FIRST-COLUMN] +ScreenDPIinSection=192 +DISPLAY_AND_SORT_COUNT=4 +DISPLAY_AND_SORT_ID_00=458813 +DISPLAY_AND_SORT_SORT_POS_00=0 +DISPLAY_AND_SORT_WIDTH_00=46 +DISPLAY_AND_SORT_WIDTH_00_dpi96=23 +DISPLAY_AND_SORT_ID_01=458814 +DISPLAY_AND_SORT_SORT_POS_01=0 +DISPLAY_AND_SORT_WIDTH_01=46 +DISPLAY_AND_SORT_WIDTH_01_dpi96=23 +DISPLAY_AND_SORT_ID_02=458796 +DISPLAY_AND_SORT_SORT_POS_02=0 +DISPLAY_AND_SORT_WIDTH_02=46 +DISPLAY_AND_SORT_WIDTH_02_dpi96=23 +DISPLAY_AND_SORT_ID_03=458821 +DISPLAY_AND_SORT_SORT_POS_03=1 +DISPLAY_AND_SORT_WIDTH_03=200 +DISPLAY_AND_SORT_WIDTH_03_dpi96=100 +DISPLAY_AND_SORT_COMPLETE_WIDTH=600 +DISPLAY_AND_SORT_COMPLETE_WIDTH_dpi96=300 + +[SAVEPARASET] +MERGE_INTO_BIN=0 +CONSIDER_FLASH_OFFSET=1 + +[DEVICE_EXPLORER_COLUMNLIST_CHANNELS] +ScreenDPIinSection=192 +ColumnCount=4 +Column_0=0, 306 +Column_0_dpi96=0, 153 +Column_1=1245185, 132 +Column_1_dpi96=1245185, 66 +Column_2=1245186, 66 +Column_2_dpi96=1245186, 33 +Column_3=1245187, 106 +Column_3_dpi96=1245187, 53 +ColumnIdSort=-1 +SortUpward=1 + +[DEVICE_EXPLORER_COLUMNLIST_DEVICES] +ScreenDPIinSection=192 +ColumnCount=10 +Column_0=34, 96 +Column_0_dpi96=34, 48 +Column_1=0, 460 +Column_1_dpi96=0, 230 +Column_2=131078, 160 +Column_2_dpi96=131078, 80 +Column_3=131103, 100 +Column_3_dpi96=131103, 50 +Column_4=131079, 100 +Column_4_dpi96=131079, 50 +Column_5=262145, 240 +Column_5_dpi96=262145, 120 +Column_6=131085, 200 +Column_6_dpi96=131085, 100 +Column_7=131080, 240 +Column_7_dpi96=131080, 120 +Column_8=131081, 160 +Column_8_dpi96=131081, 80 +Column_9=196609, 100 +Column_9_dpi96=196609, 50 +ColumnIdSort=-1 +SortUpward=1 + +[DEVICE_EXPLORER_COLUMNLIST_NETWORKS] +ScreenDPIinSection=192 +ColumnCount=6 +Column_0=34, 64 +Column_0_dpi96=34, 32 +Column_1=0, 304 +Column_1_dpi96=0, 152 +Column_2=983041, 192 +Column_2_dpi96=983041, 96 +Column_3=983042, 530 +Column_3_dpi96=983042, 265 +Column_4=983043, 252 +Column_4_dpi96=983043, 126 +Column_5=983044, 300 +Column_5_dpi96=983044, 150 +ColumnIdSort=-1 +SortUpward=1 + +[COLOR_SCHEME_LIST] +COLOR_SCHEME0=COLOR_SCHEMEUSER_DEFINED +SCHEMES_COUNT=1 +ACTIVE=COLOR_SCHEME_H_CANAPE_CLASSIC +CURRENT_SCHEME_INDEX=0 + +[COLOR_SCHEMEUSER_DEFINED] +IS_USER_DEFINED=1 +SCHEME_NAME=[none] +ColorDisplay1=FF00 -1 8F400 -1 +ColorDisplay2=FF -1 8F4 -1 +ColorDisplay3=FFFF -1 F4F4 -1 +ColorDisplay4=FFFF00 -1 F4F400 -1 +ColorDisplay5=FF00FF -1 F400F4 -1 +ColorDisplay6=80FF -1 80F4 -1 +ColorDisplay7=FF8080 -1 F40000 -1 +ColorDisplay8=FFFFFF -1 0 -1 +ColorDisplay9=AA00 -1 AA00 -1 +ColorDisplay10=CC -1 CC -1 +ColorDisplay11=7070 -1 7070 -1 +ColorDisplay12=FFAA00 -1 FFAA00 -1 +ColorDisplay13=FF00AA -1 FF00AA -1 +ColorDisplay14=55AA -1 55AA -1 +ColorDisplay15=AA5555 -1 AA5555 -1 +ColorDisplay16=AAFFFF -1 AAFFFF -1 +ColorDisplay17=FFAA -1 FFAA -1 +ColorDisplay18=8080FF -1 8080FF -1 +ColorDisplay19=AAAA -1 AAAA -1 +ColorDisplay20=AAAA00 -1 AAAA00 -1 +ColorDisplay21=FFAAFF -1 FFAAFF -1 +ColorDisplay22=AAAAFF -1 AAAAFF -1 +ColorDisplay23=FFAAAA -1 FFAAAA -1 +ColorDisplay24=AAFFAA -1 AAFFAA -1 +ColorMarker1=FFFF00 -1 C6C600 -1 +ColorMarker2=FFFF -1 E1E1 -1 +ColorTrigger=FF00 -1 FF00 -1 +ColorEventAudio=A6620D -1 A6620D -1 +ColorEventMarker=FF -1 E7 -1 +ColorEventOther=FFFFFF -1 BABABA -1 +ColorHitMarker=FF00FF -1 FF00FF -1 +ColorGrid=8000 -1 8000 -1 +ColorBackground=0 -1 FFFFFF -1 +ColorChanged=FF0000 -1 FF0000 -1 +ColorWindowBg=C0C0C0 15 FFFFFF -1 +ColorAxis=FFFFFF -1 0 -1 +ColorAxisBackground=0 -1 FFFFFF -1 +ColorAxisSameScaled=FFFFFF -1 0 -1 +ColorAxisText=0 -1 0 -1 +ColorComments=FFFF00 -1 FFFF00 -1 +ColorCalComments=FFFF00 -1 FFFF00 -1 +ColorLegend=0 15 FFFFFF -1 +ColorLegendText=0 18 0 18 +ColorWindowFrameFocus=606060 -1 CEA27D -1 +ColorWindowFrameButtons=0 -1 0 -1 +ColorHexWinCalRam=8000 -1 8000 -1 +ColorHexWinNotCalRam=FF -1 FF -1 +ColorHexWinDbObject=80FFFF -1 80FFFF -1 +ColorHexWinInvalid=AFAFFF -1 AFAFFF -1 +ColorHexWinInvalidDb=FF -1 FF -1 +ColorHexWinSelection=FF 13 FF 13 +ColorHexWinSelText=0 14 0 14 +ColorWriteText=FFFF00 -1 FFFF00 -1 +ColorValLimitOK=FF00 -1 FF00 -1 +ColorValLimitWarn=FFFF -1 FFFF -1 +ColorValLimitError=FF -1 FF -1 +ColorActiveTitleLeft=54E3 2 54E3 2 +ColorActiveTitleRight=3D95FF 27 3D95FF 27 +ColorActiveTitleText=FFFFFF 9 FFFFFF 9 +ColorInactiveTitleLeft=7A96DF 3 7A96DF 3 +ColorInactiveTitleRight70=7A96DF 28 7A96DF 28 +ColorInactiveTitleText=D8E4F8 19 D8E4F8 19 +ColorMeaCursorTooltip=808080 -1 808080 -1 +ColorMeaCursorTooltipTxt=FFFFFF -1 FFFFFF -1 +ColorDisplayGray=999999 -1 999999 -1 +ColorDisplaySubGrid=4000 -1 4000 -1 +ColorGraphBackground=D2D2D2 -1 EEEEEE -1 +ColorInvalidSignal=F0F0F0 -1 F0F0F0 -1 +ColorLostVariable=C0C0C0 -1 C0C0C0 -1 +ColorMoveFrame=FAD5A3 -1 FAD5A3 -1 +ColorResizeMarkers=646464 -1 646464 -1 +ColorPageBackground=D8C7BC -1 D8C7BC -1 +ColorDisabledLegendText=A0A0A0 17 A0A0A0 17 +ColorBordersHighlight=FFFFFF 20 0 20 +ColorBordersShadow=A0A0A0 16 0 16 +ColorLookupTableX=FF -1 FF -1 +ColorLookupTableY=8000 -1 8000 -1 +ColorLookupTableZ=FF0000 -1 FF0000 -1 +ColorLookupTableZ4=FFFF00 -1 FFFF00 -1 +ColorLookupTableZ5=FF00FF -1 FF00FF -1 +ColorActiveCell=30FFFF -1 30FFFF -1 +ColorActiveCellText=0 -1 0 -1 +ColorMissingValues=FF -1 FF -1 +ColorBackgroundValues=FFFFFF -1 FFFFFF -1 +ColorWorkingPoint=880088 -1 880088 -1 +ColorColumnHeader=F0F0F0 30 F0F0F0 30 +ColorBackgroundMetaData=DADEE1 -1 FFFFFF -1 +ColorStatistic=FFFFFF -1 0 -1 +ColorMarker1CurveMode=F56DF3 -1 944293 -1 +ColorMarker2CurveMode=277FFF -1 2372E6 -1 + +[COMMENT_FIELD_0] +ID="Name" +MAX_LENGTH=32 +MODE=0 +VALUE_COUNT=0 +HISTORY_COUNT=0 + +[COMMENT_FIELD_1] +ID="Division" +MAX_LENGTH=32 +MODE=0 +VALUE_COUNT=0 +HISTORY_COUNT=0 + +[COMMENT_FIELD_2] +ID="Project" +MAX_LENGTH=32 +MODE=0 +VALUE_COUNT=0 +HISTORY_COUNT=0 + +[COMMENT_FIELD_3] +ID="Subject" +MAX_LENGTH=32 +MODE=0 +VALUE_COUNT=0 +HISTORY_COUNT=0 + +[COMMENT_FIELD_4] +ID="Comment" +MAX_LENGTH=-1 +MODE=12 +VALUE_COUNT=0 +HISTORY_COUNT=0 + +[MEASUREMENT_0] +FileId=Measurement1 +MeasurementId=10c9d85f-cc88-495b-9350-5c6cd2199ab4 +LoadMeasurementSetting=3 + +[POSTPROCESS_OPTIONS] +POSTPROC_FILE= +POSTPROC_MODE=0 [SIGNSELWND_DYNAMIC_COLUMNS] Count=0 [~~~~~_CONSISTENCY_CHECK_END_SECTION_~~~~~] -GUID={2F5508C2-5DBC-4649-A5AB-08C4AFA2B166} +GUID={E03043D9-9B1A-4749-97D0-E683F93D6E47} diff --git a/examples/hello_xcp/CANape/xcp_demo.cna b/examples/hello_xcp/CANape/xcp_demo.cna index f49dbe9d..92ade35e 100644 --- a/examples/hello_xcp/CANape/xcp_demo.cna +++ b/examples/hello_xcp/CANape/xcp_demo.cna @@ -10,8 +10,8 @@ PrgDate=16.06.2025 Description= CreationTime=21:05 CreationDate=07/07/2024 ; Month/Day/Year -ModificationTime=18:34 -ModificationDate=09/27/2025 ; Month/Day/Year +ModificationTime=20:05 +ModificationDate=10/27/2025 ; Month/Day/Year Protected=0 CurrentWindowsACP=1252 @@ -33,7 +33,7 @@ DisplayCount=0 Count=0 [CALIBRATION_LIST] -Count=3 +Count=5 [CALIBRATION_OBJECT_1] EditOffset=1 @@ -44,7 +44,7 @@ FollowWorkingPoint=0 OverwriteWorkingPointInputX= OverwriteWorkingPointInputY= Module=xcp_demo -Name=params.acceleration +Name=inside_temperature StimMode=0 IsFallback=0 @@ -57,11 +57,24 @@ FollowWorkingPoint=0 OverwriteWorkingPointInputX= OverwriteWorkingPointInputY= Module=xcp_demo -Name=params.counter_max +Name=outside_temperature StimMode=0 IsFallback=0 [CALIBRATION_OBJECT_3] +EditOffset=1 +EditFactor=2 +EditFormat=2 +ShowWorkingPoint=0 +FollowWorkingPoint=0 +OverwriteWorkingPointInputX= +OverwriteWorkingPointInputY= +Module=xcp_demo +Name=params.counter_max +StimMode=0 +IsFallback=0 + +[CALIBRATION_OBJECT_4] EditOffset=25 EditFactor=2 EditFormat=2 @@ -74,6 +87,19 @@ Name=params.delay_us StimMode=0 IsFallback=0 +[CALIBRATION_OBJECT_5] +EditOffset=0.1 +EditFactor=2 +EditFormat=2 +ShowWorkingPoint=0 +FollowWorkingPoint=0 +OverwriteWorkingPointInputX= +OverwriteWorkingPointInputY= +Module=xcp_demo +Name=params.flow_rate +StimMode=0 +IsFallback=0 + [CANAPE_ENVIRONMENT] OBJECT_COUNT=0 @@ -117,7 +143,7 @@ Count=0 Name=Measurement and Calibration Demo Comment= Maximized=0 -ActiveWindow=7 +ActiveWindow=1 IsReportPage=0 TimeAxisSynchronized=0 PrintLayout=Default @@ -130,7 +156,7 @@ Count=0 Name=Trace Comment= Maximized=0 -ActiveWindow=4 +ActiveWindow=5 IsReportPage=0 TimeAxisSynchronized=0 PrintLayout=Default @@ -177,7 +203,7 @@ COUNT=5 5=} [FUNCTION_OBJECT_1] -Number=6 +Number=7 Unit= Components=0 TimeSeriesSaveMode=0 @@ -216,9 +242,9 @@ ColorFunction=0 ColorFunctionScope=1 LineTyp=2 YMinHome=0 -YMaxHome=0.001 +YMaxHome=0.0015 YMin=0 -YMax=0.001 +YMax=0.0015 XOffsetNS=0 XOffset=0 ValueFormat=3 @@ -254,9 +280,9 @@ AxisTemplate= GUID=DISPLAY_c01d273d-0a2c-4eb3-bdd7-5a04fab797c7 [FUNCTION_OBJECT_1_INPUTSIG_1] -Name=loop_counter +Name=counter SymbolName=x -LinkedObjectIdentifier=DEVICE:"xcp_demo":"loop_counter":M +LinkedObjectIdentifier=DEVICE:"xcp_demo":"counter":M FormatPhy=1 IsOutput=0 ObjectType=8 @@ -288,16 +314,16 @@ SubConfigsCount=0 Count=0 [MEASUREMENT_LIST] -Count=5 +Count=6 OfflineFileName=xcp_demo.mf4 OfflineFileCount=1 MeaCfgLabellistName= [MEASUREMENT_OBJECT_1] Module=xcp_demo -Name=loop_counter +Name=counter Disabled=0 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -306,7 +332,7 @@ MeaReferenced=1 ArchivBy_1=Recorder1 IsFallback=0 HasManagedDisplay=0 -DisplayCount=1 +DisplayCount=2 [MEASUREMENT_OBJECT_1_DISPLAY_1] Window=3 @@ -354,11 +380,57 @@ YAxis_ID=0 AxisTemplate= GUID=DISPLAY_7f547459-ae45-4f9d-b911-c974ac78ffa2 +[MEASUREMENT_OBJECT_1_DISPLAY_2] +Window=6 +Index=5 +Color=65280 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_fdde2a26-4c75-4c20-a3b3-39a57a97c161 + [MEASUREMENT_OBJECT_2] Module=xcp_demo -Name=speed +Name=heat_energy Disabled=0 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -370,17 +442,17 @@ HasManagedDisplay=0 DisplayCount=1 [MEASUREMENT_OBJECT_2_DISPLAY_1] -Window=3 -Index=2 -Color=255 +Window=6 +Index=0 +Color=65280 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 LineTyp=2 YMinHome=0 -YMaxHome=250 +YMaxHome=100 YMin=0 -YMax=250 +YMax=100 XOffsetNS=0 XOffset=0 ValueFormat=3 @@ -394,10 +466,10 @@ InvalidValueDrawMode=3 LineWidth=1 Precision=-2 Digits=6 -Enabled=0 -StoredFocused=0 +Enabled=1 +StoredFocused=1 SublMask=1 -MeaSublMask=3 +MeaSublMask=0 LockScaling=0 RightAxis=0 MapMode=2 @@ -413,13 +485,13 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_736d4f73-7414-49b0-906a-5af6cba84d9e +GUID=DISPLAY_79317913-f95a-4e40-8fdb-9f5150d86ed0 [MEASUREMENT_OBJECT_3] Module=xcp_demo -Name=temperature +Name=inside_temperature Disabled=0 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -431,17 +503,17 @@ HasManagedDisplay=0 DisplayCount=1 [MEASUREMENT_OBJECT_3_DISPLAY_1] -Window=3 -Index=1 -Color=65535 +Window=6 +Index=4 +Color=255 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 LineTyp=2 -YMinHome=-50 -YMaxHome=200 -YMin=-50 -YMax=200 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 XOffsetNS=0 XOffset=0 ValueFormat=3 @@ -455,10 +527,10 @@ InvalidValueDrawMode=3 LineWidth=1 Precision=-2 Digits=6 -Enabled=0 +Enabled=1 StoredFocused=0 SublMask=1 -MeaSublMask=3 +MeaSublMask=0 LockScaling=0 RightAxis=0 MapMode=2 @@ -474,11 +546,11 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_d88d8100-c003-4992-8564-1e801c2ffade +GUID=DISPLAY_3924e264-34a8-4495-97bd-f4c513c8fbaf [MEASUREMENT_OBJECT_4] Module=xcp_demo -Name=calc_speed.current_speed +Name=outside_temperature Disabled=0 Mode=2147483649 Rate=0 @@ -493,8 +565,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_4_DISPLAY_1] Window=6 -Index=1 -Color=65280 +Index=3 +Color=65535 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -506,7 +578,7 @@ YMax=100 XOffsetNS=0 XOffset=0 ValueFormat=3 -BitMask=1 +BitMask=255 ShowYAxis=1 Width=10 LineStyle=1 @@ -535,13 +607,13 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_306e6c3d-0bfd-4d97-9a97-3dab2ea8a743 +GUID=DISPLAY_0c726b8c-ed48-4ecc-a224-d9332e707b18 [MEASUREMENT_OBJECT_5] Module=xcp_demo -Name=calc_speed.new_speed +Name=calc_power.diff_temp Disabled=0 -Mode=2147483649 +Mode=2147483650 Rate=0 ModeIsDefault=1 Row=0 @@ -554,8 +626,8 @@ DisplayCount=1 [MEASUREMENT_OBJECT_5_DISPLAY_1] Window=6 -Index=0 -Color=255 +Index=2 +Color=16776960 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -578,7 +650,68 @@ LineWidth=1 Precision=-2 Digits=6 Enabled=1 -StoredFocused=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_5c0f6e3a-6fb6-41f8-b8a4-d777e1715ca8 + +[MEASUREMENT_OBJECT_6] +Module=xcp_demo +Name=calc_power.heat_power +Disabled=0 +Mode=2147483650 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder1 +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_6_DISPLAY_1] +Window=6 +Index=1 +Color=16711935 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 SublMask=1 MeaSublMask=0 LockScaling=0 @@ -596,7 +729,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_48afdce5-1df5-49fe-b6a1-7dd3466250a2 +GUID=DISPLAY_bca994bc-3936-474c-9092-05d06e379c2a [MEASUREMENT_OPTIONS] RemainingRecordingTime=5000 @@ -664,39 +797,50 @@ VmdmDescription= Count=0 [Module_xcp_demo] -EVENT_COUNT=2 +EVENT_COUNT=3 EVENT_CHANNEL_0=0x0000 EVENT_CHANNEL_1=0x0001 -EVENT_CYCLE_0=0 +EVENT_CHANNEL_2=0x0002 +EVENT_CYCLE_0=100 EVENT_CYCLE_1=0 -EVENT_SAMPLE_UNIT_0=3 +EVENT_CYCLE_2=0 +EVENT_SAMPLE_UNIT_0=7 EVENT_SAMPLE_UNIT_1=3 +EVENT_SAMPLE_UNIT_2=3 EVENT_MODE_0=4 EVENT_MODE_1=4 +EVENT_MODE_2=4 EVENT_PRIO_0=0 EVENT_PRIO_1=0 +EVENT_PRIO_2=0 EVENT_MAX_DAQ_LIST_0=255 EVENT_MAX_DAQ_LIST_1=255 -EVENT_NAME_0=mainloop -EVENT_NAME_1=calc_speed +EVENT_MAX_DAQ_LIST_2=255 +EVENT_NAME_0=async +EVENT_NAME_1=mainloop +EVENT_NAME_2=calc_power EVENT_MIN_CYCLE_TIME_CYCLE_0=0 EVENT_MIN_CYCLE_TIME_CYCLE_1=0 +EVENT_MIN_CYCLE_TIME_CYCLE_2=0 EVENT_MIN_CYCLE_TIME_UNIT_0=9 EVENT_MIN_CYCLE_TIME_UNIT_1=9 +EVENT_MIN_CYCLE_TIME_UNIT_2=9 EVENT_MULTISAMPLES_0=0 EVENT_MULTISAMPLES_1=0 +EVENT_MULTISAMPLES_2=0 EVENT_DPM_SUPPORTED_0=0 EVENT_DPM_SUPPORTED_1=0 +EVENT_DPM_SUPPORTED_2=0 IGNORE_FIX_EVENTS=0 [OPTIONS] WindowTextExtended=1 WindowTextExtendedNew=1 WindowSymbols=1 -GlobalCursor=1 +GlobalCursor=0 GlobalCursorTime=0 GlobalCursorTimeNs=0 -MainWindowPos=1, 511, 197, 2399, 1489 ;cmd, x, y, w, h +MainWindowPos=1, 12, 0, 2406, 1478 ;cmd, x, y, w, h [PAR_COMMENT] 1="Name","" @@ -845,27 +989,32 @@ Count=0 [SIGNSELWND] FocusID=2004 ActiveTab=0 -FilterNodeID=All\Measurement list +FilterNodeID=All\Devices\xcp_demo TreeExpand_0=@All TreeExpand_1=All\Devices TreeExpand_2=All\Devices\xcp_demo TreeExpand_3=All\Devices\xcp_demo\xcp_demo_autodetect.a2l TreeExpand_4=All\Devices\xcp_demo\Unknown variables TreeExpand_5=All\Devices\xcp_demo\Unknown variables\calc_speed -TreeExpand_6=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events -TreeExpand_7=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\mainloop -TreeExpand_8=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Parameters -TreeExpand_9=All\Measurement list\All signals -TreeExpand_10=All\Measurement list\All signals\Dt -TreeExpand_11=All\Measurement list\All signals\Dt\System information -TreeExpand_12=$All\Devices -TreeExpand_13=#All\Devices -TreeExpand_14=@All\Devices\xcp_demo -TreeExpand_15=$All\Devices\xcp_demo\xcp_demo_autodetect.a2l -TreeExpand_16=#All\Devices\xcp_demo\xcp_demo_autodetect.a2l -TreeExpand_17=@All\Measurement list -TreeExpand_18=$All\Measurement list\All signals -TreeExpand_19=#All\Measurement list\All signals\Dt +TreeExpand_6=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\mainloop +TreeExpand_7=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Parameters +TreeExpand_8=All\Measurement list\All signals +TreeExpand_9=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\calc_speed +TreeExpand_10=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Software structure\params +TreeExpand_11=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Parameters\params +TreeExpand_12=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\params +TreeExpand_13=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events +TreeExpand_14=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\params\params +TreeExpand_15=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\calc_power +TreeExpand_16=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Software structure +TreeExpand_17=$All\Devices +TreeExpand_18=#All\Devices +TreeExpand_19=@All\Devices\xcp_demo +TreeExpand_20=$All\Devices\xcp_demo\xcp_demo_autodetect.a2l +TreeExpand_21=#All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\mainloop\heat_energy +TreeExpand_22=@All\Measurement list +TreeExpand_23=$All\Measurement list\All signals +TreeExpand_24=#All\Measurement list\All signals\Dt TextSearchCaseSensitive=0 TextSearchUseMode=1 TextSearchSearchFullText=1 @@ -878,11 +1027,11 @@ Count=0 [WINDOW_1] ProgID= PROPERTIES_COUNT=1 -PROPERTY_1={"Version":"1.3.0.0","Configuration":{"ArrayWindowSubControlConfiguration":{"NumericGraphicCompositeWidth":308,"NumericGraphicCompositeHeight":154,"LegendCoordinatePoint":{"X":0,"Y":0},"LegendWidth":0,"LegendHeight":0,"LegendLayoutGroupSizeWidth":0,"LegendLayoutGroupSizeHeight":0,"NumericCoordinatePoint":{"X":1,"Y":24},"NumericWidth":306,"NumericHeight":129,"NumericLayoutGroupSizeWidth":306,"NumericLayoutGroupSizeHeight":129,"Intersection2DXWCoordinatePoint":{"X":0,"Y":0},"Intersection2DXWWidth":0,"Intersection2DXWHeight":0,"Intersection2DXWLayoutGroupSizeWidth":0,"Intersection2DXWLayoutGroupSizeHeight":0,"Intersection2DYWCoordinatePoint":{"X":0,"Y":0},"Intersection2DYWWidth":0,"Intersection2DYWHeight":0,"Intersection2DYWLayoutGroupSizeWidth":0,"Intersection2DYWLayoutGroupSizeHeight":0,"Graphic3DCoordinatePoint":{"X":0,"Y":0},"Graphic3DWidth":0,"Graphic3DHeight":0,"Graphic3DLayoutGroupSizeWidth":0,"Graphic3DLayoutGroupSizeHeight":0},"ShowCalibrationBar":true,"ShowHorizontalChartLines":false,"ShowVerticalChartLines":false,"NonSelectedIntersectionLineTransparency":0.100000024,"FocusedValueSymbol":"DEVICE:\"xcp_demo\":\"params.delay_us\":P","ValueObjectConfigurations":[{"Symbol":"DEVICE:\"xcp_demo\":\"params.counter_max\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":2000,"ValueAxisMinHome":0,"ValueAxisMaxHome":2000,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"params.delay_us\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":999999,"ValueAxisMinHome":0,"ValueAxisMaxHome":999999,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"params.acceleration\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":-10,"ValueAxisMax":10,"ValueAxisMinHome":-10,"ValueAxisMaxHome":10,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":null,"CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]}],"NumericGraphicControlPosition":0,"NumericGraphicControlSelectedTab":0,"GraphicControlPosition":0,"Height2DXControl":1,"Height2DYControl":1,"Height3DControl":2,"HeightNumericControl":1,"HeightChartControl":1,"HeightLegendControl":0.44999998807907104,"Width2DXControl":1,"Width2DYControl":1,"Width3DControl":2,"WidthNumericControl":2,"WidthChartControl":2,"WidthLegendControl":0.30000001192092896,"HeightValueControl":1,"WidthValueControl":1,"HeightNumericGraphicControl":1,"WidthNumericGraphicControl":1,"Height2DChartsControl":1,"Width2DChartsControl":1,"IsXAxisHeightSynchronizedBetweenCharts":true,"IsYAxisAreaWidthSynchronizedBetweenCharts":true,"SyncedXAxisHeight":NaN,"XWChartXAxisHeight":NaN,"YWChartXAxisHeight":NaN,"SyncedLeftAxisAreaWidth":NaN,"XWChartLeftAxisAreaWidth":NaN,"YWChartLeftAxisAreaWidth":NaN,"SyncedRightAxisAreaWidth":NaN,"XWChartRightAxisAreaWidth":NaN,"YWChartRightAxisAreaWidth":NaN,"LegendPosition":0,"LegendViewType":0,"LegendTableColumnAttributes":[{"TypeId":"1048594","Size":40},{"TypeId":"1048601","Size":45},{"TypeId":"31","Size":100},{"TypeId":"3","Size":250},{"TypeId":"16","Size":70},{"TypeId":"1048627","Size":100},{"TypeId":"1048631","Size":100},{"TypeId":"1048634","Size":100}],"LegendTabItemAttributes":[{"TypeId":"31","Size":100}],"FlipAxes":false,"AxisDisplayNameMode":3,"ReversedAxis":[false,false],"ShowUnits":false,"ShowObjectColor":false,"SortDescending":false,"SortAttributeId":null,"ShowWorkingPointHistory":false,"NumericViewValueObjectDisplayOption":1,"ValueColumnWidth":106,"ValueColumnWidthDouble":106.66666666666663,"ParameterGroup":"","ModuleName":"","GroupIsFunction":false,"NumericControlAxisAttributes":[],"NumericControlColumnAttributes":[{"TypeId":"31","Size":192}],"ChartViewValueObjectDisplayOption":1,"SerializationCameraPosition":{"X":1,"Y":1,"Z":-1},"SerializationCameraTarget":{"X":0,"Y":0.5,"Z":0},"IsValueAnnotationRotated":false,"EquidistantAxisPoints":false,"BarThickness":0.6,"WorkingPointMarker":0,"LinearWorkingPointInterpolation":true,"ShowAllIntersectionLines":false,"IsValueAxisIndependent":true,"TickLabelRotationAngle":-90,"IsTickLabelRotationEnabled":false,"IsTickLabelRightAligned":false,"ShowBoundarySurface":true,"ShowBoundarySurfaceGradient":false,"ShowCursorAsCrosshair":false,"XAxisAutoRange":true,"ValueAxisAutoRange":true,"ShowAllValueAxes":false,"DrawAxisBands":false,"CurrentColumnChartType":0,"SerializationCursorCrosshairColor":{"R":0,"G":0,"B":0,"A":255},"AlignBarToZero":true,"DefaultChartViewType":2,"AttributeColumnPositioning":1}} +PROPERTY_1={"Version":"1.3.0.0","Configuration":{"ArrayWindowSubControlConfiguration":{"NumericGraphicCompositeWidth":315,"NumericGraphicCompositeHeight":98,"LegendCoordinatePoint":{"X":0,"Y":0},"LegendWidth":0,"LegendHeight":0,"LegendLayoutGroupSizeWidth":0,"LegendLayoutGroupSizeHeight":0,"NumericCoordinatePoint":{"X":1,"Y":24},"NumericWidth":313,"NumericHeight":73,"NumericLayoutGroupSizeWidth":313,"NumericLayoutGroupSizeHeight":73,"Intersection2DXWCoordinatePoint":{"X":0,"Y":0},"Intersection2DXWWidth":0,"Intersection2DXWHeight":0,"Intersection2DXWLayoutGroupSizeWidth":0,"Intersection2DXWLayoutGroupSizeHeight":0,"Intersection2DYWCoordinatePoint":{"X":0,"Y":0},"Intersection2DYWWidth":0,"Intersection2DYWHeight":0,"Intersection2DYWLayoutGroupSizeWidth":0,"Intersection2DYWLayoutGroupSizeHeight":0,"Graphic3DCoordinatePoint":{"X":0,"Y":0},"Graphic3DWidth":0,"Graphic3DHeight":0,"Graphic3DLayoutGroupSizeWidth":0,"Graphic3DLayoutGroupSizeHeight":0},"ShowCalibrationBar":true,"ShowHorizontalChartLines":false,"ShowVerticalChartLines":false,"NonSelectedIntersectionLineTransparency":0.100000024,"FocusedValueSymbol":"DEVICE:\"xcp_demo\":\"params.counter_max\":P","ValueObjectConfigurations":[{"Symbol":"DEVICE:\"xcp_demo\":\"params.counter_max\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":2000,"ValueAxisMinHome":0,"ValueAxisMaxHome":2000,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"params.delay_us\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":999999,"ValueAxisMinHome":0,"ValueAxisMaxHome":999999,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"params.flow_rate\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":2,"ValueAxisMinHome":0,"ValueAxisMaxHome":2,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]}],"NumericGraphicControlPosition":0,"NumericGraphicControlSelectedTab":0,"GraphicControlPosition":0,"Height2DXControl":1,"Height2DYControl":1,"Height3DControl":2,"HeightNumericControl":1,"HeightChartControl":1,"HeightLegendControl":0.44999998807907104,"Width2DXControl":1,"Width2DYControl":1,"Width3DControl":2,"WidthNumericControl":2,"WidthChartControl":2,"WidthLegendControl":0.30000001192092896,"HeightValueControl":1,"WidthValueControl":1,"HeightNumericGraphicControl":1,"WidthNumericGraphicControl":1,"Height2DChartsControl":1,"Width2DChartsControl":1,"IsXAxisHeightSynchronizedBetweenCharts":true,"IsYAxisAreaWidthSynchronizedBetweenCharts":true,"SyncedXAxisHeight":NaN,"XWChartXAxisHeight":NaN,"YWChartXAxisHeight":NaN,"SyncedLeftAxisAreaWidth":NaN,"XWChartLeftAxisAreaWidth":NaN,"YWChartLeftAxisAreaWidth":NaN,"SyncedRightAxisAreaWidth":NaN,"XWChartRightAxisAreaWidth":NaN,"YWChartRightAxisAreaWidth":NaN,"LegendPosition":0,"LegendViewType":0,"LegendTableColumnAttributes":[{"TypeId":"1048594","Size":40},{"TypeId":"1048601","Size":45},{"TypeId":"31","Size":100},{"TypeId":"3","Size":250},{"TypeId":"16","Size":70},{"TypeId":"1048627","Size":100},{"TypeId":"1048631","Size":100},{"TypeId":"1048634","Size":100}],"LegendTabItemAttributes":[{"TypeId":"31","Size":100}],"FlipAxes":false,"AxisDisplayNameMode":3,"ReversedAxis":[false,false],"ShowUnits":false,"ShowObjectColor":false,"SortDescending":false,"SortAttributeId":null,"ShowWorkingPointHistory":false,"NumericViewValueObjectDisplayOption":1,"ValueColumnWidth":141,"ValueColumnWidthDouble":141.5,"ParameterGroup":"","ModuleName":"","GroupIsFunction":false,"NumericControlAxisAttributes":[],"NumericControlColumnAttributes":[{"TypeId":"31","Size":146.5}],"ChartViewValueObjectDisplayOption":1,"SerializationCameraPosition":{"X":1,"Y":1,"Z":-1},"SerializationCameraTarget":{"X":0,"Y":0.5,"Z":0},"IsValueAnnotationRotated":false,"EquidistantAxisPoints":false,"BarThickness":0.6,"WorkingPointMarker":0,"LinearWorkingPointInterpolation":true,"ShowAllIntersectionLines":false,"IsValueAxisIndependent":true,"TickLabelRotationAngle":-90,"IsTickLabelRotationEnabled":false,"IsTickLabelRightAligned":false,"ShowBoundarySurface":true,"ShowBoundarySurfaceGradient":false,"ShowCursorAsCrosshair":false,"XAxisAutoRange":true,"ValueAxisAutoRange":true,"ShowAllValueAxes":false,"DrawAxisBands":false,"CurrentColumnChartType":0,"SerializationCursorCrosshairColor":{"R":0,"G":0,"B":0,"A":255},"AlignBarToZero":true,"DefaultChartViewType":2,"AttributeColumnPositioning":1}} OBJECTS_COUNT=3 OBJECT_1=DEVICE:"xcp_demo":"params.counter_max":P OBJECT_2=DEVICE:"xcp_demo":"params.delay_us":P -OBJECT_3=DEVICE:"xcp_demo":"params.acceleration":P +OBJECT_3=DEVICE:"xcp_demo":"params.flow_rate":P ObjectCount=3 HiddenDisplayCount=0 Title=Calibration @@ -891,10 +1040,10 @@ Comment=Calibration Number=1 GUID=WINDOW_b925684c-7ba1-48ce-918f-0609cbee10b4 ScreenDPIinSection=192 -Position=0, 28, 26, 622, 314 ;cmd, x, y, w, h -Position_dpi96=0, 14, 13, 311, 157 ;cmd, x, y, w, h -Position_Page01=0, 28, 26, 622, 314 ;cmd, x, y, w, h -Position_Page01_dpi96=0, 14, 13, 311, 157 ;cmd, x, y, w, h +Position=0, 14, 14, 636, 202 ;cmd, x, y, w, h +Position_dpi96=0, 7, 7, 318, 101 ;cmd, x, y, w, h +Position_Page01=0, 14, 14, 636, 202 ;cmd, x, y, w, h +Position_Page01_dpi96=0, 7, 7, 318, 101 ;cmd, x, y, w, h FloatingWindow=0 ShowSignalComments=1 DisplayMask=1 ; pages 1 @@ -946,7 +1095,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_5f0d1ab0-857a-4fe2-9263-a0acd0c989da +GUID=DISPLAY_266d5562-367a-4758-919c-75f1e7754d80 [WINDOW_1_OBJECT_2] Type=2 @@ -995,12 +1144,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_8cad45b9-a767-451c-9b85-c6e35d763baf +GUID=DISPLAY_a77bfab1-fceb-45d7-b7a7-0b25099df3dc [WINDOW_1_OBJECT_3] Type=2 Module=xcp_demo -Name=params.acceleration +Name=params.flow_rate Window=1 Index=2 Color=0 @@ -1008,10 +1157,10 @@ ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 LineTyp=2 -YMinHome=-10 -YMaxHome=10 -YMin=-10 -YMax=10 +YMinHome=0 +YMaxHome=2 +YMin=0 +YMax=2 XOffsetNS=0 XOffset=0 ValueFormat=3 @@ -1044,7 +1193,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_a2b0a207-5a90-4d5c-bbf0-5e17dae713e1 +GUID=DISPLAY_18c007d2-5a1c-4710-9cf6-33ed2b0caea4 [WINDOW_2] ComponentCount=2 @@ -1054,10 +1203,10 @@ Comment=Multi view window Number=2 GUID=WINDOW_3f306d17-7bdd-464f-bbd8-ead5b31ddbd8 ScreenDPIinSection=192 -Position=0, 28, 362, 1786, 676 ;cmd, x, y, w, h -Position_dpi96=0, 14, 181, 893, 338 ;cmd, x, y, w, h -Position_Page01=0, 28, 362, 1786, 676 ;cmd, x, y, w, h -Position_Page01_dpi96=0, 14, 181, 893, 338 ;cmd, x, y, w, h +Position=0, 14, 416, 1800, 662 ;cmd, x, y, w, h +Position_dpi96=0, 7, 208, 900, 331 ;cmd, x, y, w, h +Position_Page01=0, 14, 416, 1800, 662 ;cmd, x, y, w, h +Position_Page01_dpi96=0, 7, 208, 900, 331 ;cmd, x, y, w, h FloatingWindow=0 ShowSignalComments=1 DisplayMask=1 ; pages 1 @@ -1066,8 +1215,8 @@ DisplayMask=1 ; pages 1 XLen=71955 XMin=0 XMinNs=0 -XMax=70685 -XMaxNs=70685736745 +XMax=10948 +XMaxNs=10948628367 Grid=1 Mark=1 YValue=1 @@ -1090,7 +1239,7 @@ YAxisWidth_dpi96=87 RightYAxisWidth=0 RightYAxisWidth_dpi96=0 ObjectMode=1 -DisplayMode=1 +DisplayMode=2 ShowSignalMode=0 AxisScrollPos2=0 LegendScrollPos=0 @@ -1130,11 +1279,11 @@ DisplayMask=1 ; pages 1 [WINDOW_3_LEG_COLUMNS] ScreenDPIinSection=192 COUNT=3 -COL_0=31, 214 -COL_0_dpi96=31, 107 -COL_1=1048578, 161 +COL_0=31, 212 +COL_0_dpi96=31, 106 +COL_1=1048578, 162 COL_1_dpi96=1048578, 81 -COL_2=16, 65 +COL_2=16, 66 COL_2_dpi96=16, 33 [WINDOW_4] @@ -1157,10 +1306,10 @@ Comment=Write Window Number=4 GUID=WINDOW_446152b9-0c82-4710-9a56-52baa89295ac ScreenDPIinSection=192 -Position=0, 24, 26, 1804, 966 ;cmd, x, y, w, h -Position_dpi96=0, 12, 13, 902, 483 ;cmd, x, y, w, h -Position_Page02=0, 24, 26, 1804, 966 ;cmd, x, y, w, h -Position_Page02_dpi96=0, 12, 13, 902, 483 ;cmd, x, y, w, h +Position=0, 22, 26, 1804, 964 ;cmd, x, y, w, h +Position_dpi96=0, 11, 13, 902, 482 ;cmd, x, y, w, h +Position_Page02=0, 22, 26, 1804, 964 ;cmd, x, y, w, h +Position_Page02_dpi96=0, 11, 13, 902, 482 ;cmd, x, y, w, h FloatingWindow=0 ShowSignalComments=1 DisplayMask=2 ; pages 2 @@ -1170,14 +1319,14 @@ ProgID=CNPTRACE.TraceCtrl.1 PROPERTIES_COUNT=22 PROPERTY_1=DeviceItems={"CaptureEvents":"1","ShowEvents":"0","NodeCount":"1","Node0":{"DeviceName":"xcp_demo","CaptureEvents":"1","ShowEvents":"1","NodeCount":"3","Node0":{"Channel":"2","DisplayColor":{"Color":"0","UseColor":"false"},"CaptureEvents":"1","ShowEvents":"1","NodeCount":"0"},"Node1":{"Channel":"3","DisplayColor":{"Color":"0","UseColor":"false"},"CaptureEvents":"0","ShowEvents":"0","NodeCount":"0"},"Node2":{"Channel":"4","DisplayColor":{"Color":"0","UseColor":"false"},"CaptureEvents":"1","ShowEvents":"1","NodeCount":"0"}}} PROPERTY_2=NetworkItems={"Items":"0"} -PROPERTY_3=ColumnConfigs={"ConfigCount":"1","Config0":{"Layout":"1","Name":"hello_xcp","Column0":{"Width":"212","Position":"0","Name":"Time","IsDefaultName":"1"},"Column3":{"Width":"84","Position":"1","Name":"Name","IsDefaultName":"1"},"Column6":{"Width":"92","Position":"2","Name":"Length","IsDefaultName":"1"},"Column52":{"Width":"2400","Position":"3","Name":"Protocol Interpretation","IsDefaultName":"1"}},"Active":"6","ActiveLayout":"25"} +PROPERTY_3=ColumnConfigs={"ConfigCount":"1","Config0":{"Layout":"1","Name":"hello_xcp","Column0":{"Width":"213","Position":"0","Name":"Time","IsDefaultName":"1"},"Column3":{"Width":"85","Position":"1","Name":"Name","IsDefaultName":"1"},"Column6":{"Width":"93","Position":"2","Name":"Length","IsDefaultName":"1"},"Column52":{"Width":"2400","Position":"3","Name":"Protocol Interpretation","IsDefaultName":"1"}},"Active":"0","ActiveLayout":"1"} PROPERTY_4=PinningEvents={"EventCount":"0"} PROPERTY_5=ExpandedEvents={"EventCount":"0"} PROPERTY_6=AnalysisGroups={"GroupCount":"1","Group0":{"Enabled":"1","Expanded":"1","Name":"Filtergruppe 0","FilterCount":"2","Filter0":{"Stop":"1","Enabled":"1","ConditionCount":"0"},"Filter1":{"Stop":"0","Enabled":"0","ConditionCount":"0"}}} PROPERTY_7=AnalysisDataChangeFilter=0 PROPERTY_8=SequenceFilters={"IsEnabled":"1","FilterCount":"0"} PROPERTY_9=SearchPatterns={"EventCount":"0"} -PROPERTY_10=ExplorerConfig={"VSplitPos":"272","VSplitExpanded":"true","HSplitPos":"580","HSplitExpanded":"false","ActiveExplorerView":"1","ActiveSearchType":"0"} +PROPERTY_10=ExplorerConfig={"VSplitPos":"272","VSplitExpanded":"true","HSplitPos":"581","HSplitExpanded":"false","ActiveExplorerView":"1","ActiveSearchType":"0"} PROPERTY_11=ContinuousMode=1 PROPERTY_12=AbsoluteTimeMode=0 PROPERTY_13=HighPrioritySBClient=0 @@ -1194,6 +1343,11 @@ OBJECTS_COUNT=0 ObjectCount=0 HiddenDisplayCount=0 TraceChannelCount=2 +ColumnCount=4 +Column_0=0, 213 +Column_1=4, 85 +Column_2=2, 93 +Column_3=513, 2400 DeltaTimeEnabled=1 Title=Trace-Fenster {DISPLAYED_FILENAME} Type=16384 @@ -1201,10 +1355,10 @@ Comment=ActiveX Window Number=5 GUID=WINDOW_9327afe1-ff92-4071-9bed-dc42be1f63ed ScreenDPIinSection=192 -Position=0, 84, 118, 1792, 922 ;cmd, x, y, w, h -Position_dpi96=0, 42, 59, 896, 461 ;cmd, x, y, w, h -Position_Page02=0, 84, 118, 1792, 922 ;cmd, x, y, w, h -Position_Page02_dpi96=0, 42, 59, 896, 461 ;cmd, x, y, w, h +Position=0, 82, 116, 1792, 922 ;cmd, x, y, w, h +Position_dpi96=0, 41, 58, 896, 461 ;cmd, x, y, w, h +Position_Page02=0, 82, 116, 1792, 922 ;cmd, x, y, w, h +Position_Page02_dpi96=0, 41, 58, 896, 461 ;cmd, x, y, w, h FloatingWindow=0 ShowSignalComments=1 DisplayMask=2 ; pages 2 @@ -1244,10 +1398,10 @@ Comment=Numeric Window Number=6 GUID=WINDOW_6e12274b-72ef-428d-bcb6-79a467ea4e38 ScreenDPIinSection=192 -Position=0, 680, 26, 1134, 174 ;cmd, x, y, w, h -Position_dpi96=0, 340, 13, 567, 87 ;cmd, x, y, w, h -Position_Page01=0, 680, 26, 1134, 174 ;cmd, x, y, w, h -Position_Page01_dpi96=0, 340, 13, 567, 87 ;cmd, x, y, w, h +Position=0, 680, 14, 1132, 382 ;cmd, x, y, w, h +Position_dpi96=0, 340, 7, 566, 191 ;cmd, x, y, w, h +Position_Page01=0, 680, 14, 1132, 382 ;cmd, x, y, w, h +Position_Page01_dpi96=0, 340, 7, 566, 191 ;cmd, x, y, w, h FloatingWindow=0 ShowSignalComments=1 LEGEND_HSCROLL_POS=0 @@ -1264,8 +1418,8 @@ COL_0_dpi96=31, 172 XLen=71955 XMin=0 XMinNs=0 -XMax=70685 -XMaxNs=70685736745 +XMax=10948 +XMaxNs=10948628367 Grid=1 Mark=1 YValue=1 @@ -1311,9 +1465,9 @@ Comment=Graphic Window Number=7 GUID=WINDOW_f9778c8b-a829-4556-ab25-448ea2d47b1d ScreenDPIinSection=192 -Position=0, 25, 25, 1000, 400 ;cmd, x, y, w, h +Position=0, 26, 26, 1000, 400 ;cmd, x, y, w, h Position_dpi96=0, 13, 13, 500, 200 ;cmd, x, y, w, h -Position_Page01=0, 25, 25, 1000, 400 ;cmd, x, y, w, h +Position_Page01=0, 26, 26, 1000, 400 ;cmd, x, y, w, h Position_Page01_dpi96=0, 13, 13, 500, 200 ;cmd, x, y, w, h FloatingWindow=0 JointIndex=2 @@ -1328,15 +1482,136 @@ DisplayMask=1 ; pages 1 [WINDOW_7_LEG_COLUMNS] ScreenDPIinSection=192 COUNT=3 -COL_0=31, 214 -COL_0_dpi96=31, 107 -COL_1=1048578, 161 +COL_0=31, 212 +COL_0_dpi96=31, 106 +COL_1=1048578, 162 COL_1_dpi96=1048578, 81 -COL_2=16, 65 +COL_2=16, 66 COL_2_dpi96=16, 33 +[WINDOW_8] +ProgID= +PROPERTIES_COUNT=1 +PROPERTY_1={"Version":"1.3.0.0","Configuration":{"ArrayWindowSubControlConfiguration":{"NumericGraphicCompositeWidth":315,"NumericGraphicCompositeHeight":82,"LegendCoordinatePoint":{"X":0,"Y":0},"LegendWidth":0,"LegendHeight":0,"LegendLayoutGroupSizeWidth":0,"LegendLayoutGroupSizeHeight":0,"NumericCoordinatePoint":{"X":1,"Y":24},"NumericWidth":313,"NumericHeight":57,"NumericLayoutGroupSizeWidth":313,"NumericLayoutGroupSizeHeight":57,"Intersection2DXWCoordinatePoint":{"X":0,"Y":0},"Intersection2DXWWidth":0,"Intersection2DXWHeight":0,"Intersection2DXWLayoutGroupSizeWidth":0,"Intersection2DXWLayoutGroupSizeHeight":0,"Intersection2DYWCoordinatePoint":{"X":0,"Y":0},"Intersection2DYWWidth":0,"Intersection2DYWHeight":0,"Intersection2DYWLayoutGroupSizeWidth":0,"Intersection2DYWLayoutGroupSizeHeight":0,"Graphic3DCoordinatePoint":{"X":0,"Y":0},"Graphic3DWidth":0,"Graphic3DHeight":0,"Graphic3DLayoutGroupSizeWidth":0,"Graphic3DLayoutGroupSizeHeight":0},"ShowCalibrationBar":true,"ShowHorizontalChartLines":false,"ShowVerticalChartLines":false,"NonSelectedIntersectionLineTransparency":0.100000024,"FocusedValueSymbol":"DEVICE:\"xcp_demo\":\"outside_temperature\":P","ValueObjectConfigurations":[{"Symbol":"DEVICE:\"xcp_demo\":\"outside_temperature\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":-20,"ValueAxisMax":50,"ValueAxisMinHome":-20,"ValueAxisMaxHome":50,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"inside_temperature\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":40,"ValueAxisMinHome":0,"ValueAxisMaxHome":40,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]}],"NumericGraphicControlPosition":0,"NumericGraphicControlSelectedTab":0,"GraphicControlPosition":0,"Height2DXControl":1,"Height2DYControl":1,"Height3DControl":2,"HeightNumericControl":1,"HeightChartControl":1,"HeightLegendControl":0.44999998807907104,"Width2DXControl":1,"Width2DYControl":1,"Width3DControl":2,"WidthNumericControl":2,"WidthChartControl":2,"WidthLegendControl":0.30000001192092896,"HeightValueControl":1,"WidthValueControl":1,"HeightNumericGraphicControl":1,"WidthNumericGraphicControl":1,"Height2DChartsControl":1,"Width2DChartsControl":1,"IsXAxisHeightSynchronizedBetweenCharts":true,"IsYAxisAreaWidthSynchronizedBetweenCharts":true,"SyncedXAxisHeight":NaN,"XWChartXAxisHeight":NaN,"YWChartXAxisHeight":NaN,"SyncedLeftAxisAreaWidth":NaN,"XWChartLeftAxisAreaWidth":NaN,"YWChartLeftAxisAreaWidth":NaN,"SyncedRightAxisAreaWidth":NaN,"XWChartRightAxisAreaWidth":NaN,"YWChartRightAxisAreaWidth":NaN,"LegendPosition":0,"LegendViewType":0,"LegendTableColumnAttributes":[{"TypeId":"1048594","Size":40},{"TypeId":"1048601","Size":45},{"TypeId":"31","Size":100},{"TypeId":"3","Size":250},{"TypeId":"16","Size":70},{"TypeId":"1048627","Size":100},{"TypeId":"1048631","Size":100},{"TypeId":"1048634","Size":100}],"LegendTabItemAttributes":[{"TypeId":"31","Size":100}],"FlipAxes":false,"AxisDisplayNameMode":3,"ReversedAxis":[false,false],"ShowUnits":false,"ShowObjectColor":true,"SortDescending":false,"SortAttributeId":null,"ShowWorkingPointHistory":false,"NumericViewValueObjectDisplayOption":1,"ValueColumnWidth":144,"ValueColumnWidthDouble":144.5,"ParameterGroup":"","ModuleName":"","GroupIsFunction":false,"NumericControlAxisAttributes":[],"NumericControlColumnAttributes":[{"TypeId":"31","Size":143}],"ChartViewValueObjectDisplayOption":1,"SerializationCameraPosition":{"X":1,"Y":1,"Z":-1},"SerializationCameraTarget":{"X":0,"Y":0.5,"Z":0},"IsValueAnnotationRotated":false,"EquidistantAxisPoints":false,"BarThickness":0.6,"WorkingPointMarker":0,"LinearWorkingPointInterpolation":true,"ShowAllIntersectionLines":false,"IsValueAxisIndependent":true,"TickLabelRotationAngle":-90,"IsTickLabelRotationEnabled":false,"IsTickLabelRightAligned":false,"ShowBoundarySurface":true,"ShowBoundarySurfaceGradient":false,"ShowCursorAsCrosshair":false,"XAxisAutoRange":true,"ValueAxisAutoRange":true,"ShowAllValueAxes":false,"DrawAxisBands":false,"CurrentColumnChartType":0,"SerializationCursorCrosshairColor":{"R":0,"G":0,"B":0,"A":255},"AlignBarToZero":true,"DefaultChartViewType":2,"AttributeColumnPositioning":1}} +OBJECTS_COUNT=2 +OBJECT_1=DEVICE:"xcp_demo":"outside_temperature":P +OBJECT_2=DEVICE:"xcp_demo":"inside_temperature":P +ObjectCount=2 +HiddenDisplayCount=0 +Title=Parameters +Type=137438953472 +Comment=Parameters +Number=8 +GUID=WINDOW_04795e7d-c614-4392-9c83-208ff533572d +ScreenDPIinSection=192 +Position=0, 14, 226, 636, 170 ;cmd, x, y, w, h +Position_dpi96=0, 7, 113, 318, 85 ;cmd, x, y, w, h +Position_Page01=0, 14, 226, 636, 170 ;cmd, x, y, w, h +Position_Page01_dpi96=0, 7, 113, 318, 85 ;cmd, x, y, w, h +FloatingWindow=0 +ShowSignalComments=1 +DisplayMask=1 ; pages 1 + +[WINDOW_8_OBJECT_1] +Type=2 +Module=xcp_demo +Name=outside_temperature +Window=8 +Index=0 +Color=0 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=-20 +YMaxHome=50 +YMin=-20 +YMax=50 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_19008b01-3a4e-43bc-9b5e-3e01a2d6dc1c + +[WINDOW_8_OBJECT_2] +Type=2 +Module=xcp_demo +Name=inside_temperature +Window=8 +Index=1 +Color=0 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=40 +YMin=0 +YMax=40 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_f39e9ab5-14b3-4d61-b969-518a936a695d + [WINDOWS] -Count=7 +Count=8 [Y_COMMON_AXIS_LIST] Count=0 diff --git a/examples/hello_xcp/CANape/xcp_demo_autodetect.a2l b/examples/hello_xcp/CANape/xcp_demo_autodetect.a2l index 99588400..b4f3dbf2 100644 --- a/examples/hello_xcp/CANape/xcp_demo_autodetect.a2l +++ b/examples/hello_xcp/CANape/xcp_demo_autodetect.a2l @@ -1,7 +1,7 @@ ASAP2_VERSION 1 71 /begin PROJECT hello_xcp "" -/begin HEADER "" VERSION "1.0" PROJECT_NO XCPlite /end HEADER +/begin HEADER "" VERSION "1.0" PROJECT_NO XCPLITE__CASDD /end HEADER /begin MODULE hello_xcp "" @@ -20,21 +20,25 @@ ALIGNMENT_INT64 1 -/* Segment relative addressing mode: calseg=Parameters */ -/begin CHARACTERISTIC params.counter_max "Maximum counter value" VALUE 0x80000000 U16 0 NO_COMPU_METHOD 0 2000 /end CHARACTERISTIC -/begin CHARACTERISTIC params.delay_us "Mainloop delay time in us" VALUE 0x80000004 U32 0 NO_COMPU_METHOD 0 999999 PHYS_UNIT "us" /end CHARACTERISTIC -/begin CHARACTERISTIC params.acceleration "Acceleration" VALUE 0x80000008 F32 0 NO_COMPU_METHOD -10 10 PHYS_UNIT "m/(s*s)" /end CHARACTERISTIC +/* Segment relative addressing mode: calseg=params */ +/begin CHARACTERISTIC params.counter_max "Maximum counter value" VALUE 0x80010000 U16 0 NO_COMPU_METHOD 0 65535 /end CHARACTERISTIC +/begin CHARACTERISTIC params.delay_us "Mainloop delay time in us" VALUE 0x80010004 U32 0 NO_COMPU_METHOD 0 999999 PHYS_UNIT "us" /end CHARACTERISTIC +/begin CHARACTERISTIC params.flow_rate "Flow rate" VALUE 0x80010008 F32 0 NO_COMPU_METHOD 0 2 PHYS_UNIT "m3/h" /end CHARACTERISTIC -/* Absolute addressing mode: default_event=mainloop (0), addr_ext=1 */ -/begin MEASUREMENT temperature "Motor temperature in °C" UBYTE conv.temperature 0 0 -55 200 ECU_ADDRESS 0x24002 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x0 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT speed "Speed in km/h" FLOAT32_IEEE NO_COMPU_METHOD 0 0 0 250 ECU_ADDRESS 0x240A8 ECU_ADDRESS_EXTENSION 1 PHYS_UNIT "km/h" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x0 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/* Absolute addressing mode: default_event=mainloop (1), addr_ext=1 */ +/begin MEASUREMENT outside_temperature "Temperature in °C read from outside sensor" UBYTE conv.temperature 0 0 -20 50 ECU_ADDRESS 0x24002 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT inside_temperature "Temperature in °C read from inside sensor" UBYTE conv.temperature 0 0 0 40 ECU_ADDRESS 0x24003 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT heat_energy "Accumulated heat energy in kWh" FLOAT64_IEEE NO_COMPU_METHOD 0 0 0 10000 ECU_ADDRESS 0x240C0 ECU_ADDRESS_EXTENSION 1 PHYS_UNIT "kWh" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_counter "Global free running counter" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x240C8 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/* Stack frame relative addressing mode: event=mainloop (0), addr_ext=2 */ -/begin MEASUREMENT loop_counter "Loop counter, local measurement variable on stack" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0xFFCE ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/* Stack frame relative addressing mode: event=mainloop (1), addr_ext=2 */ +/begin MEASUREMENT counter "Mainloop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x1FFF6 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/* Stack frame relative addressing mode: event=calc_speed (1), addr_ext=2 */ -/begin MEASUREMENT calc_speed.current_speed "Parameter current_speed in function calculate_speed" FLOAT32_IEEE NO_COMPU_METHOD 0 0 0 250 ECU_ADDRESS 0x1FFD4 ECU_ADDRESS_EXTENSION 2 PHYS_UNIT "km/h" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT calc_speed.new_speed "Loop counter, local measurement variable on stack" FLOAT32_IEEE NO_COMPU_METHOD 0 0 0 250 ECU_ADDRESS 0x1FFD0 ECU_ADDRESS_EXTENSION 2 PHYS_UNIT "km/h" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/* Stack frame relative addressing mode: event=calc_power (2), addr_ext=2 */ +/begin MEASUREMENT calc_power.t1 "Parameter t1 in function calc_power" UBYTE conv.temperature 0 0 -55 200 ECU_ADDRESS 0x2FFFF ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT calc_power.t2 "Parameter t2 in function calc_power" UBYTE conv.temperature 0 0 -55 200 ECU_ADDRESS 0x2FFFE ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT calc_power.diff_temp "Local variable diff temperature in function calc_power" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -100 100 ECU_ADDRESS 0x2FFF0 ECU_ADDRESS_EXTENSION 2 PHYS_UNIT "K" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT calc_power.heat_power "Local variable calculated heat power in function calc_power" FLOAT64_IEEE NO_COMPU_METHOD 0 0 0 10 ECU_ADDRESS 0x2FFE8 ECU_ADDRESS_EXTENSION 2 PHYS_UNIT "W" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT /* Typedefs */ /begin RECORD_LAYOUT U8 FNC_VALUES 1 UBYTE ROW_DIR DIRECT /end RECORD_LAYOUT @@ -80,28 +84,35 @@ ALIGNMENT_INT64 1 /* Groups */ -/begin GROUP Parameters "Calibration Segment" /begin REF_CHARACTERISTIC params.counter_max params.delay_us params.acceleration /end REF_CHARACTERISTIC /end GROUP -/begin GROUP mainloop "Measurement event group" /begin REF_MEASUREMENT temperature speed loop_counter /end REF_MEASUREMENT /end GROUP -/begin GROUP calc_speed "Measurement event group" /begin REF_MEASUREMENT calc_speed.current_speed calc_speed.new_speed /end REF_MEASUREMENT /end GROUP -/begin GROUP Events "Events" ROOT /begin SUB_GROUP mainloop calc_speed /end SUB_GROUP /end GROUP +/begin GROUP params "Calibration Segment" ROOT /begin REF_CHARACTERISTIC params.counter_max params.delay_us params.flow_rate /end REF_CHARACTERISTIC /end GROUP +/begin GROUP mainloop "Measurement event group" /begin REF_MEASUREMENT outside_temperature inside_temperature heat_energy global_counter counter /end REF_MEASUREMENT /end GROUP +/begin GROUP calc_power "Measurement event group" /begin REF_MEASUREMENT calc_power.t1 calc_power.t2 calc_power.diff_temp calc_power.heat_power /end REF_MEASUREMENT /end GROUP +/begin GROUP Events "Events" ROOT /begin SUB_GROUP mainloop calc_power /end SUB_GROUP /end GROUP /* Conversions */ /begin COMPU_METHOD conv.bool "" TAB_VERB "%.0" "" COMPU_TAB_REF conv.bool.table /end COMPU_METHOD /begin COMPU_VTAB conv.bool.table "" TAB_VERB 2 0 "false" 1 "true" /end COMPU_VTAB -/begin COMPU_METHOD conv.temperature "Temperature in °C from unsigned byte" LINEAR "%6.3" "°C" COEFFS_LINEAR 1 -55 /end COMPU_METHOD +/begin COMPU_METHOD conv.temperature "Temperature in °C from unsigned byte" LINEAR "%6.3" "C" COEFFS_LINEAR 1 -55 /end COMPU_METHOD /begin COMPU_METHOD conv.events "" TAB_VERB "%.0 " "" COMPU_TAB_REF conv.events.table /end COMPU_METHOD -/begin COMPU_VTAB conv.events.table "" TAB_VERB 2 - 0 "mainloop" 1 "calc_speed" +/begin COMPU_VTAB conv.events.table "" TAB_VERB 3 + 0 "async" 1 "mainloop" 2 "calc_power" /end COMPU_VTAB /begin MOD_PAR "" -EPK "_Sep_27_2025_18_16_54" ADDR_EPK 0xFFFF0000 -/begin MEMORY_SEGMENT Parameters "" DATA FLASH INTERN 0x80000000 0xC -1 -1 -1 -1 -1 +EPK "17_35_51" ADDR_EPK 0x80000000 +/begin MEMORY_SEGMENT epk "" DATA FLASH INTERN 0x80000000 8 -1 -1 -1 -1 -1 /begin IF_DATA XCP -/begin SEGMENT 0 2 0 0 0 +/begin SEGMENT 0 1 0 0 0 /begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM -/begin PAGE 0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_DONT_CARE /end PAGE -/begin PAGE 1 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_NOT_ALLOWED /end PAGE +/begin PAGE 0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_WITH_ECU_ONLY XCP_WRITE_ACCESS_WITH_ECU_ONLY /end PAGE +/end SEGMENT +/end IF_DATA +/end MEMORY_SEGMENT +/begin MEMORY_SEGMENT params "" DATA FLASH INTERN 0x80010000 12 -1 -1 -1 -1 -1 +/begin IF_DATA XCP +/begin SEGMENT 1 1 0 0 0 +/begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM +/begin PAGE 0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_WITH_ECU_ONLY XCP_WRITE_ACCESS_WITH_ECU_ONLY /end PAGE /end SEGMENT /end IF_DATA /end MEMORY_SEGMENT @@ -119,9 +130,6 @@ OPTIONAL_CMD UPLOAD OPTIONAL_CMD SHORT_UPLOAD OPTIONAL_CMD DOWNLOAD OPTIONAL_CMD SHORT_DOWNLOAD -OPTIONAL_CMD GET_CAL_PAGE -OPTIONAL_CMD SET_CAL_PAGE -OPTIONAL_CMD COPY_CAL_PAGE OPTIONAL_CMD GET_PAG_PROCESSOR_INFO OPTIONAL_CMD GET_SEGMENT_INFO OPTIONAL_CMD GET_PAGE_INFO @@ -148,15 +156,14 @@ OPTIONAL_CMD TIME_CORRELATION_PROPERTIES OPTIONAL_LEVEL1_CMD GET_VERSION /end PROTOCOL_LAYER /begin DAQ -DYNAMIC 0 2 0 OPTIMISATION_TYPE_DEFAULT ADDRESS_EXTENSION_FREE IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE 0xF8 OVERLOAD_INDICATION_PID -/begin TIMESTAMP_SUPPORTED -0x1 SIZE_DWORD UNIT_1NS TIMESTAMP_FIXED -/end TIMESTAMP_SUPPORTED -/begin EVENT "mainloop" "mainloop" 0x0 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT -/begin EVENT "calc_speed" "calc_speed" 0x1 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +DYNAMIC 0 3 0 OPTIMISATION_TYPE_DEFAULT ADDRESS_EXTENSION_FREE IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE 0xF8 OVERLOAD_INDICATION_PID PRESCALER_SUPPORTED +/begin TIMESTAMP_SUPPORTED 0x1 SIZE_DWORD UNIT_1NS TIMESTAMP_FIXED /end TIMESTAMP_SUPPORTED +/begin EVENT "async" "async" 0x0 DAQ 0xFF 100 4 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "mainloop" "mainloop" 0x1 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "calc_power" "calc_pow" 0x2 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT /end DAQ /begin XCP_ON_TCP_IP - 0x104 5555 ADDRESS "192.168.8.133" + 0x104 5555 ADDRESS "192.168.0.101" /end XCP_ON_TCP_IP /end IF_DATA diff --git a/examples/hello_xcp/src/main.c b/examples/hello_xcp/src/main.c index c779e142..3389c0af 100644 --- a/examples/hello_xcp/src/main.c +++ b/examples/hello_xcp/src/main.c @@ -14,6 +14,7 @@ // XCP params #define OPTION_PROJECT_NAME "hello_xcp" // Project name, used to build the A2L and BIN file name +#define OPTION_PROJECT_EPK __TIME__ // EPK version string #define OPTION_USE_TCP true // TCP or UDP #define OPTION_SERVER_PORT 5555 // Port #define OPTION_SERVER_ADDR {0, 0, 0, 0} // Bind addr, 0.0.0.0 = ANY @@ -27,11 +28,11 @@ typedef struct params { uint16_t counter_max; // Maximum value for the counter uint32_t delay_us; // Sleep time in microseconds for the main loop - float acceleration; // Acceleration in m/s^2 + float flow_rate; // Flow rate in m3/h } parameters_t; // Default values (reference page, "FLASH") for the calibration parameters -const parameters_t params = {.counter_max = 1024, .delay_us = 1000, .acceleration = 0.01f}; +const parameters_t params = {.counter_max = 1024, .delay_us = 1000, .flow_rate = 0.300f}; // A global calibration segment handle for the calibration parameters // A calibration segment has a working page ("RAM") and a reference page ("FLASH"), it is described by a MEMORY_SEGMENT in the A2L file @@ -42,42 +43,53 @@ tXcpCalSegIndex calseg = XCP_UNDEFINED_CALSEG; //----------------------------------------------------------------------------------------------------- // Demo global measurement values -uint8_t temperature = 50; // Temperature in Deg Celcius as Byte, 0 is -55 °C, 255 is +200 °C -float speed = 0.0f; // Speed in km/h +// Temperatures are in Deg Celcius as Byte, 0 is -55 °C, 255 is +200 °C +uint8_t outside_temperature = -5 + 55; +uint8_t inside_temperature = 20 + 55; +// Heat Energy in kW +double heat_energy = 0.0f; +// A global counter limited by the calibration parameter counter_max +uint32_t global_counter = 0; + +//----------------------------------------------------------------------------------------------------- +// Read sensor values + +// Simulate reading temperature sensors +#define read_outside_sensor() (outside_temperature) +#define read_inside_sensor() (inside_temperature) //----------------------------------------------------------------------------------------------------- // Demo function with XCP instrumentation -float calc_speed(float current_speed) { +// Calculate heat power from temperature difference and flow rate calibration parameter +// Temperatures are in uint8_t in Deg Celsius offset by -55 °C, conversion rule identifier is "conv.temperature" +float calc_power(uint8_t t1, uint8_t t2) { - float new_speed = 0.0f; + double diff_temp = (double)t2 - (double)t1; // Diff temperature in Kelvin + double heat_power = diff_temp * 10.0f; // Heat power in kW - // XCP: Create a measurement event and once register local measurement variables for current_speed and new_speed - DaqCreateEvent(calc_speed); + // XCP: Create a measurement event and once register local measurement variables + DaqCreateEvent(calc_power); A2lOnce() { - A2lSetStackAddrMode(calc_speed); // Set stack relative addressing mode with fixed event speed - A2lCreatePhysMeasurementInstance("calc_speed", current_speed, "Parameter current_speed in function calculate_speed", "km/h", 0, 250.0); - A2lCreatePhysMeasurementInstance("calc_speed", new_speed, "Loop counter, local measurement variable on stack", "km/h", 0, 250.0); + A2lSetStackAddrMode(calc_power); // Set stack relative addressing mode with fixed event calc_power + A2lCreatePhysMeasurementInstance("calc_power", t1, "Parameter t1 in function calc_power", "conv.temperature", -55.0, 200.0); + A2lCreatePhysMeasurementInstance("calc_power", t2, "Parameter t2 in function calc_power", "conv.temperature", -55.0, 200.0); + A2lCreatePhysMeasurementInstance("calc_power", diff_temp, "Local variable diff temperature in function calc_power", "K", -100.0, 100.0); + A2lCreatePhysMeasurementInstance("calc_power", heat_power, "Local variable calculated heat power in function calc_power", "W", 0.0, 10.0); } // XCP: Lock access to calibration parameters - parameters_t *params = (parameters_t *)XcpLockCalSeg(calseg); - - // Calculate new speed based on acceleration and sample rate - new_speed = (float)(current_speed + params->acceleration * params->delay_us * 3.6 / 1000000.0); // km/h - if (new_speed < 0.0f) { - new_speed = 0.0f; - } else if (new_speed > 250.0f) { - new_speed = 250.0f; // Limit speed to 250 km/h - } + const parameters_t *params = (parameters_t *)XcpLockCalSeg(calseg); + + heat_power = diff_temp * params->flow_rate * 1000.0 * 1.16; // in kWh, 1.16Wh per K per liter - calculate heat power using the flow rate calibration parameter // XCP: Unlock the calibration segment XcpUnlockCalSeg(calseg); - // XCP: Trigger the measurement event "calc_speed" - DaqEvent(calc_speed); + // XCP: Trigger the measurement event "calc_power" + DaqTriggerEvent(calc_power); - return new_speed; + return (float)heat_power; } //----------------------------------------------------------------------------------------------------- @@ -97,7 +109,7 @@ int main(void) { // XCP: Initialize the XCP singleton, activate XCP, must be called before starting the server // If XCP is not activated, the server will not start and all XCP instrumentation will be passive with minimal overhead - XcpInit(true); + XcpInit(OPTION_PROJECT_NAME, OPTION_PROJECT_EPK, true /* activate */); // XCP: Initialize the XCP Server uint8_t addr[4] = OPTION_SERVER_ADDR; @@ -105,41 +117,54 @@ int main(void) { return 1; } - // XCP: Enable inline A2L generation + // XCP: Enable runtime A2L generation for data declaration as code // In WRITE_ONCE mode: // If the A2l file aready exists, check if software version (EPK) still matches and load calibration values from the binary persistence file (.bin) // If not, create a new A2L file (.a2l) and binary persistence file (.bin) with default calibration values // In WRITE_ALWAYS mode: - // Recreate the A2L file on each application start, calibration values will be initialized to default + // Recreate the A2L file on each application start, calibration values will always be initialized to default // Binary persistence is not supported // Finalize the A2L file on XCP connect // Optionally create A2L groups for calibration segments and events - if (!A2lInit(OPTION_PROJECT_NAME, NULL /* EPK */, addr, OPTION_SERVER_PORT, OPTION_USE_TCP, A2L_MODE_WRITE_ONCE | A2L_MODE_FINALIZE_ON_CONNECT | A2L_MODE_AUTO_GROUPS)) { + if (!A2lInit(addr, OPTION_SERVER_PORT, OPTION_USE_TCP, A2L_MODE_WRITE_ONCE | A2L_MODE_FINALIZE_ON_CONNECT | A2L_MODE_AUTO_GROUPS)) { return 1; } // XCP: Create a calibration segment named 'Parameters' for the calibration parameter struct instance 'params' as reference page - calseg = XcpCreateCalSeg("Parameters", ¶ms, sizeof(params)); + calseg = XcpCreateCalSeg("params", ¶ms, sizeof(params)); - // XCP: Register the calibration parameters in the calibration segment + // XCP: Option1: Register the individual calibration parameters in the calibration segment A2lSetSegmentAddrMode(calseg, params); - A2lCreateParameter(params.counter_max, "Maximum counter value", "", 0, 2000); + A2lCreateParameter(params.counter_max, "Maximum counter value", "", 0, 65535); A2lCreateParameter(params.delay_us, "Mainloop delay time in us", "us", 0, 999999); - A2lCreateParameter(params.acceleration, "Acceleration", "m/(s*s)", -10, 10); + A2lCreateParameter(params.flow_rate, "Flow rate", "m3/h", 0.0, 2.0); + + // XCP: Option2: Register the calibration segment as a typedef instance + // { + // A2lTypedefBegin(parameters_t, ¶ms, "Calibration parameters typedef"); + // A2lTypedefParameterComponent(counter_max, "Maximum counter value", "", 0, 2000); + // A2lTypedefParameterComponent(delay_us, "Mainloop delay time in us", "us", 0, 999999); + // A2lTypedefParameterComponent(flow_rate, "Flow rate", "m3/h", 0.0, 2.0); + // A2lTypedefEnd(); + // A2lSetSegmentAddrMode(calseg, params); + // A2lCreateTypedefInstance(params, parameters_t, "Calibration parameters"); + // } // XCP: Create a measurement event named "mainloop" DaqCreateEvent(mainloop); - // XCP: Register global measurement variables (temperature, speed) + // XCP: Register global measurement variables on event "mainloop" A2lSetAbsoluteAddrMode(mainloop); - A2lCreateLinearConversion(temperature, "Temperature in °C from unsigned byte", "°C", 1.0, -55.0); - A2lCreatePhysMeasurement(temperature, "Motor temperature in °C", "conv.temperature", -55.0, 200.0); - A2lCreatePhysMeasurement(speed, "Speed in km/h", "km/h", 0, 250.0); - - // XCP: Register a local measurement variable (loop_counter) - uint16_t loop_counter = 0; + A2lCreateLinearConversion(temperature, "Temperature in °C from unsigned byte", "C", 1.0, -55.0); + A2lCreatePhysMeasurement(outside_temperature, "Temperature in °C read from outside sensor", "conv.temperature", -20, 50); + A2lCreatePhysMeasurement(inside_temperature, "Temperature in °C read from inside sensor", "conv.temperature", 0, 40); + A2lCreatePhysMeasurement(heat_energy, "Accumulated heat energy in kWh", "kWh", 0.0, 10000.0); + A2lCreateMeasurement(global_counter, "Global free running counter"); + + // XCP: Register local measurement variables on event "mainloop" + uint16_t counter = 0; A2lSetStackAddrMode(mainloop); // Set stack relative addressing mode with fixed event mainloop - A2lCreateMeasurement(loop_counter, "Loop counter, local measurement variable on stack"); + A2lCreateMeasurement(counter, "Mainloop counter"); // Mainloop printf("Start main loop...\n"); @@ -147,30 +172,34 @@ int main(void) { // XCP: Lock the calibration parameter segment for consistent and safe access // Calibration segment locking is wait-free, locks may be recursive // Returns a pointer to the active page (working or reference) of the calibration segment - parameters_t *params = (parameters_t *)XcpLockCalSeg(calseg); + const parameters_t *params = (parameters_t *)XcpLockCalSeg(calseg); uint32_t delay_us = params->delay_us; // Get the delay calibration parameter in microseconds // Local variables - loop_counter++; - if (loop_counter > params->counter_max) { // Get the counter_max calibration value and reset loop_counter - loop_counter = 0; + counter++; + if (counter > params->counter_max) { // Get the counter_max calibration value and reset counter + printf("%u: params.counter_max = %u\n", counter, params->counter_max); + counter = 0; } - // Global measurement variables - temperature = 50 + 21; - speed = calc_speed(speed); // Demo function to calculate a new speed based on the current speed and acceleration + // Global variables + global_counter++; + inside_temperature = read_inside_sensor(); + outside_temperature = read_outside_sensor(); + double heat_power = calc_power(outside_temperature, inside_temperature); // Demo function to calculate heat power in W + heat_energy += heat_power / 1000.0 * (double)delay_us / 3600e6; // Integrate heat energy in kWh in a global measurement variable, kWh = W/1000 * us/ 3600e6 // XCP: Unlock the calibration segment XcpUnlockCalSeg(calseg); // XCP: Trigger the measurement event "mainloop" - DaqEvent(mainloop); + DaqTriggerEvent(mainloop); // Sleep for the specified delay parameter in microseconds, don't sleep with the XCP lock held to give the XCP client a chance to update params sleepUs(delay_us); - A2lFinalize(); // @@@@ Test: Manually finalize the A2L file to make it visible without XCP tool connect + A2lFinalize(); // @@@@ TEST: Manually finalize the A2L file to make it visible without XCP tool connect } // for (;;) diff --git a/examples/hello_xcp_cpp/CANape/CANape.ini b/examples/hello_xcp_cpp/CANape/CANape.ini index 23a5ed8e..ba19fe60 100644 --- a/examples/hello_xcp_cpp/CANape/CANape.ini +++ b/examples/hello_xcp_cpp/CANape/CANape.ini @@ -6,7 +6,7 @@ ;------------------------------------------------------------------------------- [!!!!!_CONSISTENCY_CHECK_START_SECTION_!!!!!] -GUID={DB14524D-6C12-4948-818C-AA0A6F1AA08B} +GUID={B38AF758-4D05-410D-95DD-2163C621DDA3} [FILE_INFO] Identification=CANape-Project-File @@ -20,8 +20,8 @@ PrgDate=16.06.2025 Description= CreationTime=20:47 CreationDate=08/28/2025 ; Month/Day/Year -ModificationTime=19:48 -ModificationDate=09/22/2025 ; Month/Day/Year +ModificationTime=14:54 +ModificationDate=11/07/2025 ; Month/Day/Year Protected=0 CurrentWindowsACP=1252 @@ -986,7 +986,7 @@ TREEX_dpi96=225 TREEY=1209 TREEY_dpi96=605 ACTIVEPANE=1 -SELECTED_TREENODE=Devices/hello_xcp_cpp_Device/Protocol +SELECTED_TREENODE=Devices/hello_xcp_cpp_Device/Protocol/Event List FIRSTVISIBLE_TREENODE=Devices TREEEXPAND_COUNT=7 TREEEXPAND_0=Devices @@ -1016,10 +1016,10 @@ ConfigurationJson={"RemoteServiceDataList":[{"DisplayName":"CANape Master","Ip": [DlgCommentWrapper] ScreenDPIinSection=192 -WindowLeft=855 -WindowLeft_dpi96=428 -WindowTop=683 -WindowTop_dpi96=342 +WindowLeft=921 +WindowLeft_dpi96=461 +WindowTop=453 +WindowTop_dpi96=227 WindowWidth=1350 WindowWidth_dpi96=675 WindowHeight=923 @@ -1027,10 +1027,10 @@ WindowHeight_dpi96=462 [DlgMdfComment] ScreenDPIinSection=192 -WindowLeft=868 -WindowLeft_dpi96=434 -WindowTop=741 -WindowTop_dpi96=371 +WindowLeft=934 +WindowLeft_dpi96=467 +WindowTop=511 +WindowTop_dpi96=256 WindowWidth=1324 WindowWidth_dpi96=662 WindowHeight=786 @@ -1252,7 +1252,7 @@ XCP_OPTIONAL_CMD_AVAILABLE_19=3 XCP_OPTIONAL_CMD_AVAILABLE_20=3 XCP_OPTIONAL_CMD_AVAILABLE_21=3 XCP_OPTIONAL_CMD_AVAILABLE_22=3 -XCP_OPTIONAL_CMD_AVAILABLE_23=2 +XCP_OPTIONAL_CMD_AVAILABLE_23=3 XCP_OPTIONAL_CMD_AVAILABLE_24=2 XCP_OPTIONAL_CMD_AVAILABLE_25=3 XCP_OPTIONAL_CMD_AVAILABLE_26=3 @@ -1297,9 +1297,9 @@ XCP_OPTIONAL_CMD_AUTO_LEARNING=1 XCP_OPTIONAL_SUB_CMD_AVAILABLE_0=3 XCP_OPTIONAL_SUB_CMD_AVAILABLE_1=2 XCP_OPTIONAL_SUB_CMD_AVAILABLE_2=2 -XCP_DAQ_PROPERTIES=0x15 +XCP_DAQ_PROPERTIES=0x13 XCP_DAQ_KEY_BYTE=0xC0 -XCP_DAQ_TIMESTAMP_MODE=0x3C +XCP_DAQ_TIMESTAMP_MODE=0x0C XCP_DAQ_TIMESTAMP_TICKS=1 XCP_MIN_DAQ=0 XCP_MAX_DAQ=0 @@ -1369,14 +1369,14 @@ BEG_CAL_SERVICE=0x0 END_CAL_SERVICE=0x0 TEST_CONNECTION_PERIOD=0 OVERRUN_HANDLING=0 -EVENT_COUNT=1 +EVENT_COUNT=4 EVENT_CHANNEL_0=0x0000 -EVENT_CYCLE_0=0 -EVENT_SAMPLE_UNIT_0=3 +EVENT_CYCLE_0=100 +EVENT_SAMPLE_UNIT_0=7 EVENT_MODE_0=4 EVENT_PRIO_0=0 EVENT_MAX_DAQ_LIST_0=255 -EVENT_NAME_0=avg_calc +EVENT_NAME_0=async EVENT_MULTISAMPLES_0=0 IGNORE_FIX_EVENTS=0 ECU_CYCLE_TIME=0 @@ -1387,8 +1387,8 @@ DETECT_SYNC_PULSE=0 GENERATE_SYNC_PULSE=0 TIME_CORR_MULTICAST=0 DAQ_TIMEOUT=0 -DAQ_RESUME_SUPPORTED=1 -DAQ_PRESCALER_SUPPORTED=0 +DAQ_RESUME_SUPPORTED=0 +DAQ_PRESCALER_SUPPORTED=1 DAQ_SINGLE_EVENT=0 DTO_SINGLE_EXT=0 DOUBLE_AS_FLOAT=0 @@ -1403,7 +1403,7 @@ PSEUDO_CAN_ID_START=2415919104 DSP_MODE=0 DAQ_LIST_AUTODETECT=1 DAQ_COUNT=0 -DAQ_CONFIG_ID=65472 +DAQ_CONFIG_ID=3416 DAQ_START_STOP_ALL_DISABLED=0 INIT_CAL_PAGE_SEGMENTWISE=0 CALRAM_CHECK_INITIAL_PAGE=1 @@ -1507,7 +1507,7 @@ RUNTIME_CALRAM_ONLY=0 MEMORY_SEGMENT_COUNT=2 MEMORY_SEGMENT_NAME_1=epk MEMORY_SEGMENT_TYPE_1=FLASH,DATA,INTERN -MEMORY_SEGMENT_SIZE_1=0x00000015 +MEMORY_SEGMENT_SIZE_1=0x00000008 MEMORY_SEGMENT_ADDR_1=0x80000000 MEMORY_SEGMENT_ADDR_EXT_1=0x00 MEMORY_SEGMENT_ATTRIBUTE_1=0x00000000 @@ -1523,7 +1523,7 @@ MEMORY_SEGMENT_FLASH_OFFSET_2=0x00000000 MEMORY_SEGMENT_ADDRESS_MAPPING_2= CALRAM_SECTOR_NAME_1=epk CALRAM_SECTOR_TYPE_1=FLASH,DATA,INTERN -CALRAM_SECTOR_SIZE_1=0x00000015 +CALRAM_SECTOR_SIZE_1=0x00000008 CALRAM_SECTOR_ADDR_1=0x80000000 CALRAM_SECTOR_ADDR_EXT_1=0x00 CALRAM_SECTOR_ATTRIBUTE_1=0x00000000 @@ -1545,7 +1545,7 @@ PROTOCOL_TYPE=4 PACKET_CTR=0 TRANSPORT_LAYER_VERSION=260 HOST_NAME= -HOST=192.168.8.133 +HOST=192.168.0.101 PORT=5555 LOCAL_PORT=0 TRANSPORT_LAYER_PROTOCOL=0 @@ -1604,26 +1604,59 @@ VLAN_CONFIG_COUNT=0 Databases_COUNT=0 CHANNELX=255 USE_ASAP2_DATABASE=1 +EVENT_CHANNEL_1=0x0001 +EVENT_CYCLE_1=0 +EVENT_SAMPLE_UNIT_1=3 +EVENT_MODE_1=4 +EVENT_PRIO_1=0 +EVENT_MAX_DAQ_LIST_1=255 +EVENT_NAME_1=average128 +EVENT_MULTISAMPLES_1=0 +EVENT_MIN_CYCLE_TIME_CYCLE_1=0 +EVENT_MIN_CYCLE_TIME_UNIT_1=9 +EVENT_DPM_SUPPORTED_1=0 +EVENT_CHANNEL_2=0x0002 +EVENT_CHANNEL_3=0x0003 +EVENT_CYCLE_2=0 +EVENT_CYCLE_3=0 +EVENT_SAMPLE_UNIT_2=3 +EVENT_SAMPLE_UNIT_3=3 +EVENT_MODE_2=4 +EVENT_MODE_3=4 +EVENT_PRIO_2=0 +EVENT_PRIO_3=0 +EVENT_MAX_DAQ_LIST_2=255 +EVENT_MAX_DAQ_LIST_3=255 +EVENT_NAME_2=avg_calc1 +EVENT_NAME_3=mainloop +EVENT_MULTISAMPLES_2=0 +EVENT_MULTISAMPLES_3=0 +EVENT_MIN_CYCLE_TIME_CYCLE_2=0 +EVENT_MIN_CYCLE_TIME_CYCLE_3=0 +EVENT_MIN_CYCLE_TIME_UNIT_2=9 +EVENT_MIN_CYCLE_TIME_UNIT_3=9 +EVENT_DPM_SUPPORTED_2=0 +EVENT_DPM_SUPPORTED_3=0 [ModuleExplorer_hello_xcp_cpp] -ScreenDPIinSection=96 +ScreenDPIinSection=192 POSX=0 POSX_dpi96=0 POSY=0 POSY_dpi96=0 -SIZEX=875 +SIZEX=1750 SIZEX_dpi96=875 -SIZEY=700 +SIZEY=1400 SIZEY_dpi96=700 SHOWTOOLBAR=1 SHOWSTATUSBAR=1 SHOWGRID=0 -RIGHTPANE2HEIGHT=-1 +RIGHTPANE2HEIGHT=-2 RIGHTPANE2HEIGHT_dpi96=-1 -TREEX=225 +TREEX=450 TREEX_dpi96=225 -TREEY=634 -TREEY_dpi96=634 +TREEY=1286 +TREEY_dpi96=643 ACTIVEPANE=1 SELECTED_TREENODE=Networks/hello_xcp_cpp_Network/hello_xcp_cpp_Device/Protocol FIRSTVISIBLE_TREENODE=Networks @@ -1882,7 +1915,7 @@ PSET_LIST_TreeColumnCount=0 MDF_LIST_TreeColumnCount=0 FUNC_DEF_LIST_TreeColumnCount=0 MDF_VIRT_LIST_TreeColumnCount=0 -MEA_LIST_TreeColumnCount=0 +MEA_LIST_TreeColumnCount=1 DATAMINING_LIST_TreeColumnCount=0 CONFIGS_LIST_TreeColumnCount=0 WIN_TEMPL_LIST_TreeColumnCount=0 @@ -1902,7 +1935,7 @@ PSET_LIST_ListColumnCount=0 MDF_LIST_ListColumnCount=0 FUNC_DEF_LIST_ListColumnCount=0 MDF_VIRT_LIST_ListColumnCount=0 -MEA_LIST_ListColumnCount=0 +MEA_LIST_ListColumnCount=4 DATAMINING_LIST_ListColumnCount=0 CONFIGS_LIST_ListColumnCount=0 WIN_TEMPL_LIST_ListColumnCount=0 @@ -1919,6 +1952,16 @@ DEVICE_LIST_ListColumn_2=31, 460 DEVICE_LIST_ListColumn_2_dpi96=31, 230 DEVICE_LIST_ListColumn_3=3, 500 DEVICE_LIST_ListColumn_3_dpi96=3, 250 +MEA_LIST_TreeColumn_0=0, 460 +MEA_LIST_TreeColumn_0_dpi96=0, 230 +MEA_LIST_ListColumn_0=29, 88 +MEA_LIST_ListColumn_0_dpi96=29, 44 +MEA_LIST_ListColumn_1=196608, 120 +MEA_LIST_ListColumn_1_dpi96=196608, 60 +MEA_LIST_ListColumn_2=31, 460 +MEA_LIST_ListColumn_2_dpi96=31, 230 +MEA_LIST_ListColumn_3=3, 500 +MEA_LIST_ListColumn_3_dpi96=3, 250 [SYSTEM_INFORMATION_DEVICE] PdhEnabled=0 @@ -1987,170 +2030,15 @@ ColWidthDisplay=462 ShowMore=0 MoreHeight=566 MoreHeight_dpi96=283 -WindowLeft=681 -WindowLeft_dpi96=341 -WindowTop=499 -WindowTop_dpi96=250 -WindowWidth=1241 +WindowLeft=975 +WindowLeft_dpi96=488 +WindowTop=595 +WindowTop_dpi96=298 +WindowWidth=1242 WindowWidth_dpi96=621 WindowHeight=260 WindowHeight_dpi96=130 -[MEASUREMENT_DISPLAY] -ScreenDPIinSection=192 -POSX=0 -POSX_dpi96=0 -POSY=0 -POSY_dpi96=0 -SIZEX=1620 -SIZEX_dpi96=810 -SIZEY=1200 -SIZEY_dpi96=600 -SHOWTOOLBAR=1 -SHOWSTATUSBAR=1 -SHOWGRID=0 -RIGHTPANE2HEIGHT=304 -RIGHTPANE2HEIGHT_dpi96=152 -TREEX=450 -TREEX_dpi96=225 -TREEY=1009 -TREEY_dpi96=505 -ACTIVEPANE=1 -SELECTED_TREENODE=Recorder list/Recorder -FIRSTVISIBLE_TREENODE=Measurement options -TREEEXPAND_COUNT=2 -TREEEXPAND_0=Measurement signals -TREEEXPAND_1=Recorder list -LAST_FOCUSED_LISTCOLUMN=0 -LAST_FOCUSED_LISTINDEX=1 -LAST_TOP_LISTINDEX=0 -DAQLISTS=2 -STATUSBAR_BYTES=1 -DIALOGFILEEXTEXPORT=vsf -LABELLISTMEAMODE=0 -LABELLISTBUSSIGNALMODE=0 -TEXT_SEARCH= -VXIIColumnsAdded=0 -SHOWONLYACTIVE=0 - -[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS] -ScreenDPIinSection=192 -ColumnCount=0 -ColumnIdSort=-1 -SortUpward=1 - -[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS_CUSTOM] -ScreenDPIinSection=192 -ColumnCount=0 -ColumnIdSort=-1 -SortUpward=1 - -[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS_KEY] -ScreenDPIinSection=192 -ColumnCount=0 -ColumnIdSort=-1 -SortUpward=1 - -[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS_SYSTEM] -ScreenDPIinSection=192 -ColumnCount=0 -ColumnIdSort=196608 -SortUpward=1 - -[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS_SYSTEM_DEVICE] -ScreenDPIinSection=192 -ColumnCount=0 -ColumnIdSort=-1 -SortUpward=1 - -[MEASUREMENT_DISPLAY_COLUMNLIST_KNOWN_DYNAMIC_COLUMNS_NORMAL] -ScreenDPIinSection=192 -ColumnCount=0 -ColumnIdSort=-1 -SortUpward=1 -VERSION=100 - -[MEASUREMENT_DISPLAY_COLUMNLIST_NORMAL] -ScreenDPIinSection=192 -ColumnCount=8 -Column_0=65542, 100 -Column_0_dpi96=65542, 50 -Column_1=29, 88 -Column_1_dpi96=29, 44 -Column_2=34, 96 -Column_2_dpi96=34, 48 -Column_3=31, 460 -Column_3_dpi96=31, 230 -Column_4=65540, 160 -Column_4_dpi96=65540, 80 -Column_5=65541, 120 -Column_5_dpi96=65541, 60 -Column_6=65597, 200 -Column_6_dpi96=65597, 100 -Column_7=98305, 160 -Column_7_dpi96=98305, 80 -ColumnIdSort=-1 -SortUpward=1 -VERSION=100 - -[MEASUREMENT_DISPLAY_COLUMNLIST_RECORDER] -ScreenDPIinSection=192 -ColumnCount=0 -ColumnIdSort=-1 -SortUpward=1 -VERSION=100 - -[MEASUREMENT_DISPLAY_COLUMNLIST_RECORDER_BUSLOGGING] -ScreenDPIinSection=192 -ColumnCount=0 -ColumnIdSort=-1 -SortUpward=1 - -[MEASUREMENT_DISPLAY_COLUMNLIST_RECORDERS] -ScreenDPIinSection=192 -ColumnCount=6 -Column_0=327711, 400 -Column_0_dpi96=327711, 200 -Column_1=327684, 120 -Column_1_dpi96=327684, 60 -Column_2=327709, 300 -Column_2_dpi96=327709, 150 -Column_3=327695, 130 -Column_3_dpi96=327695, 65 -Column_4=327681, 400 -Column_4_dpi96=327681, 200 -Column_5=327683, 400 -Column_5_dpi96=327683, 200 -ColumnIdSort=-1 -SortUpward=1 - -[MEASUREMENT_DISPLAY_COLUMNLIST_SOUNDS] -ScreenDPIinSection=192 -ColumnCount=0 -ColumnIdSort=-1 -SortUpward=1 - -[MEASUREMENT_DISPLAY_COLUMNLIST_TARA_ACTIVE_SIGNALS] -ScreenDPIinSection=192 -ColumnCount=0 -ColumnIdSort=-1 -SortUpward=1 - -[MEASUREMENT_DISPLAY_COLUMNLIST_TARA_ALL_SIGNALS] -ScreenDPIinSection=192 -ColumnCount=0 -ColumnIdSort=-1 -SortUpward=1 - -[MEASUREMENT_DISPLAY_COLUMNLIST_VIO] -ScreenDPIinSection=192 -ColumnCount=0 -ColumnIdSort=-1 -SortUpward=1 - -[MEASUREMENT_DISPLAY_DYNAMIC_COLUMNS] -Count=0 - [VN::FlexRay1] NAME=VN::FlexRay 1 RX_QUEUE_SIZE=4096 @@ -2170,6 +2058,64 @@ TL_PARAM_VALUE_5=A TL_PARAM_NAME_6=RETRY_SYNC TL_PARAM_VALUE_6=-1 +[DEVICE_EXPLORER_COLUMNLIST_CHANNELS] +ScreenDPIinSection=192 +ColumnCount=4 +Column_0=0, 306 +Column_0_dpi96=0, 153 +Column_1=1245185, 132 +Column_1_dpi96=1245185, 66 +Column_2=1245186, 66 +Column_2_dpi96=1245186, 33 +Column_3=1245187, 106 +Column_3_dpi96=1245187, 53 +ColumnIdSort=-1 +SortUpward=1 + +[DEVICE_EXPLORER_COLUMNLIST_DEVICES] +ScreenDPIinSection=192 +ColumnCount=10 +Column_0=34, 96 +Column_0_dpi96=34, 48 +Column_1=0, 460 +Column_1_dpi96=0, 230 +Column_2=131078, 160 +Column_2_dpi96=131078, 80 +Column_3=131103, 100 +Column_3_dpi96=131103, 50 +Column_4=131079, 100 +Column_4_dpi96=131079, 50 +Column_5=262145, 240 +Column_5_dpi96=262145, 120 +Column_6=131085, 200 +Column_6_dpi96=131085, 100 +Column_7=131080, 240 +Column_7_dpi96=131080, 120 +Column_8=131081, 160 +Column_8_dpi96=131081, 80 +Column_9=196609, 100 +Column_9_dpi96=196609, 50 +ColumnIdSort=-1 +SortUpward=1 + +[DEVICE_EXPLORER_COLUMNLIST_NETWORKS] +ScreenDPIinSection=192 +ColumnCount=6 +Column_0=34, 64 +Column_0_dpi96=34, 32 +Column_1=0, 304 +Column_1_dpi96=0, 152 +Column_2=983041, 192 +Column_2_dpi96=983041, 96 +Column_3=983042, 530 +Column_3_dpi96=983042, 265 +Column_4=983043, 252 +Column_4_dpi96=983043, 126 +Column_5=983044, 300 +Column_5_dpi96=983044, 150 +ColumnIdSort=-1 +SortUpward=1 + [COLOR_SCHEME_LIST] COLOR_SCHEME0=COLOR_SCHEMEUSER_DEFINED SCHEMES_COUNT=1 @@ -2305,72 +2251,547 @@ MODE=12 VALUE_COUNT=0 HISTORY_COUNT=0 -[DEVICE_EXPLORER_COLUMNLIST_CHANNELS] +[DB_EXPLORER] +LAST_PAGE_NAME_DLG_VARIABLE= +LAST_PAGE_ID_DLG_VARIABLE=21006 +OBJECT_DIALOG_WITH=1190 +OBJECT_DIALOG_WITH_dpi96=595 +OBJECT_DIALOG_HEIGHT=614 +OBJECT_DIALOG_HEIGHT_dpi96=307 ScreenDPIinSection=192 -ColumnCount=4 -Column_0=0, 306 -Column_0_dpi96=0, 153 -Column_1=1245185, 132 -Column_1_dpi96=1245185, 66 -Column_2=1245186, 66 -Column_2_dpi96=1245186, 33 -Column_3=1245187, 106 -Column_3_dpi96=1245187, 53 +SELECT_X=200 +SELECT_X_dpi96=100 +SELECT_Y=100 +SELECT_Y_dpi96=50 +SELECT_W=1280 +SELECT_W_dpi96=640 +SELECT_H=800 +SELECT_H_dpi96=400 +EDITOR_COL_COUNT=7 +EDITOR_COL_1=29, 88 +EDITOR_COL_1_dpi96=29, 44 +EDITOR_COL_2=31, 460 +EDITOR_COL_2_dpi96=31, 230 +EDITOR_COL_3=1, 180 +EDITOR_COL_3_dpi96=1, 90 +EDITOR_COL_4=2, 170 +EDITOR_COL_4_dpi96=2, 85 +EDITOR_COL_5=3, 500 +EDITOR_COL_5_dpi96=3, 250 +EDITOR_COL_6=6, 240 +EDITOR_COL_6_dpi96=6, 120 +EDITOR_COL_7=7, 240 +EDITOR_COL_7_dpi96=7, 120 +EDITOR_SORT_COL=31 +EDITOR_SORT_UPW=1 +SELECT_COL_COUNT=4 +SELECT_COL_1=29, 88 +SELECT_COL_1_dpi96=29, 44 +SELECT_COL_2=31, 460 +SELECT_COL_2_dpi96=31, 230 +SELECT_COL_3=16, 140 +SELECT_COL_3_dpi96=16, 70 +SELECT_COL_4=3, 500 +SELECT_COL_4_dpi96=3, 250 +SELECT_SORT_COL=31 +SELECT_SORT_UPW=1 +SEARCH_COL_COUNT=7 +SEARCH_COL_1=29, 88 +SEARCH_COL_1_dpi96=29, 44 +SEARCH_COL_2=31, 460 +SEARCH_COL_2_dpi96=31, 230 +SEARCH_COL_3=91, 300 +SEARCH_COL_3_dpi96=91, 150 +SEARCH_COL_4=19, 240 +SEARCH_COL_4_dpi96=19, 120 +SEARCH_COL_5=1, 180 +SEARCH_COL_5_dpi96=1, 90 +SEARCH_COL_6=2, 170 +SEARCH_COL_6_dpi96=2, 85 +SEARCH_COL_7=3, 500 +SEARCH_COL_7_dpi96=3, 250 +SEARCH_SORT_COL=31 +SEARCH_SORT_UPW=1 +CAN_SELECT_COL_COUNT=9 +CAN_SELECT_COL_1=29, 88 +CAN_SELECT_COL_1_dpi96=29, 44 +CAN_SELECT_COL_2=31, 460 +CAN_SELECT_COL_2_dpi96=31, 230 +CAN_SELECT_COL_3=28, 140 +CAN_SELECT_COL_3_dpi96=28, 70 +CAN_SELECT_COL_4=16, 140 +CAN_SELECT_COL_4_dpi96=16, 70 +CAN_SELECT_COL_5=64, 400 +CAN_SELECT_COL_5_dpi96=64, 200 +CAN_SELECT_COL_6=4, 240 +CAN_SELECT_COL_6_dpi96=4, 120 +CAN_SELECT_COL_7=17, 140 +CAN_SELECT_COL_7_dpi96=17, 70 +CAN_SELECT_COL_8=18, 100 +CAN_SELECT_COL_8_dpi96=18, 50 +CAN_SELECT_COL_9=3, 500 +CAN_SELECT_COL_9_dpi96=3, 250 +CAN_SELECT_SORT_COL=31 +CAN_SELECT_SORT_UPW=1 +CAN_SEARCH_COL_COUNT=9 +CAN_SEARCH_COL_1=29, 88 +CAN_SEARCH_COL_1_dpi96=29, 44 +CAN_SEARCH_COL_2=31, 460 +CAN_SEARCH_COL_2_dpi96=31, 230 +CAN_SEARCH_COL_3=28, 140 +CAN_SEARCH_COL_3_dpi96=28, 70 +CAN_SEARCH_COL_4=16, 140 +CAN_SEARCH_COL_4_dpi96=16, 70 +CAN_SEARCH_COL_5=64, 400 +CAN_SEARCH_COL_5_dpi96=64, 200 +CAN_SEARCH_COL_6=4, 240 +CAN_SEARCH_COL_6_dpi96=4, 120 +CAN_SEARCH_COL_7=17, 140 +CAN_SEARCH_COL_7_dpi96=17, 70 +CAN_SEARCH_COL_8=18, 100 +CAN_SEARCH_COL_8_dpi96=18, 50 +CAN_SEARCH_COL_9=3, 500 +CAN_SEARCH_COL_9_dpi96=3, 250 +CAN_SEARCH_SORT_COL=31 +CAN_SEARCH_SORT_UPW=1 +LIN_SELECT_COL_COUNT=9 +LIN_SELECT_COL_1=29, 88 +LIN_SELECT_COL_1_dpi96=29, 44 +LIN_SELECT_COL_2=31, 460 +LIN_SELECT_COL_2_dpi96=31, 230 +LIN_SELECT_COL_3=28, 140 +LIN_SELECT_COL_3_dpi96=28, 70 +LIN_SELECT_COL_4=16, 140 +LIN_SELECT_COL_4_dpi96=16, 70 +LIN_SELECT_COL_5=64, 400 +LIN_SELECT_COL_5_dpi96=64, 200 +LIN_SELECT_COL_6=4, 240 +LIN_SELECT_COL_6_dpi96=4, 120 +LIN_SELECT_COL_7=17, 140 +LIN_SELECT_COL_7_dpi96=17, 70 +LIN_SELECT_COL_8=18, 100 +LIN_SELECT_COL_8_dpi96=18, 50 +LIN_SELECT_COL_9=3, 500 +LIN_SELECT_COL_9_dpi96=3, 250 +LIN_SELECT_SORT_COL=31 +LIN_SELECT_SORT_UPW=1 +LIN_SEARCH_COL_COUNT=9 +LIN_SEARCH_COL_1=29, 88 +LIN_SEARCH_COL_1_dpi96=29, 44 +LIN_SEARCH_COL_2=31, 460 +LIN_SEARCH_COL_2_dpi96=31, 230 +LIN_SEARCH_COL_3=28, 140 +LIN_SEARCH_COL_3_dpi96=28, 70 +LIN_SEARCH_COL_4=16, 140 +LIN_SEARCH_COL_4_dpi96=16, 70 +LIN_SEARCH_COL_5=64, 400 +LIN_SEARCH_COL_5_dpi96=64, 200 +LIN_SEARCH_COL_6=4, 240 +LIN_SEARCH_COL_6_dpi96=4, 120 +LIN_SEARCH_COL_7=17, 140 +LIN_SEARCH_COL_7_dpi96=17, 70 +LIN_SEARCH_COL_8=18, 100 +LIN_SEARCH_COL_8_dpi96=18, 50 +LIN_SEARCH_COL_9=3, 500 +LIN_SEARCH_COL_9_dpi96=3, 250 +LIN_SEARCH_SORT_COL=31 +LIN_SEARCH_SORT_UPW=1 +MDF_SELECT_COL_COUNT=8 +MDF_SELECT_COL_1=29, 88 +MDF_SELECT_COL_1_dpi96=29, 44 +MDF_SELECT_COL_2=31, 460 +MDF_SELECT_COL_2_dpi96=31, 230 +MDF_SELECT_COL_3=28, 140 +MDF_SELECT_COL_3_dpi96=28, 70 +MDF_SELECT_COL_4=16, 140 +MDF_SELECT_COL_4_dpi96=16, 70 +MDF_SELECT_COL_5=64, 400 +MDF_SELECT_COL_5_dpi96=64, 200 +MDF_SELECT_COL_6=4, 240 +MDF_SELECT_COL_6_dpi96=4, 120 +MDF_SELECT_COL_7=20, 180 +MDF_SELECT_COL_7_dpi96=20, 90 +MDF_SELECT_COL_8=3, 500 +MDF_SELECT_COL_8_dpi96=3, 250 +MDF_SELECT_SORT_COL=31 +MDF_SELECT_SORT_UPW=1 +MDF_SEARCH_COL_COUNT=8 +MDF_SEARCH_COL_1=29, 88 +MDF_SEARCH_COL_1_dpi96=29, 44 +MDF_SEARCH_COL_2=31, 460 +MDF_SEARCH_COL_2_dpi96=31, 230 +MDF_SEARCH_COL_3=28, 140 +MDF_SEARCH_COL_3_dpi96=28, 70 +MDF_SEARCH_COL_4=16, 140 +MDF_SEARCH_COL_4_dpi96=16, 70 +MDF_SEARCH_COL_5=64, 400 +MDF_SEARCH_COL_5_dpi96=64, 200 +MDF_SEARCH_COL_6=4, 240 +MDF_SEARCH_COL_6_dpi96=4, 120 +MDF_SEARCH_COL_7=20, 180 +MDF_SEARCH_COL_7_dpi96=20, 90 +MDF_SEARCH_COL_8=3, 500 +MDF_SEARCH_COL_8_dpi96=3, 250 +MDF_SEARCH_SORT_COL=31 +MDF_SEARCH_SORT_UPW=1 +WRITE_COL_COUNT=2 +WRITE_COL_1=21, 76 +WRITE_COL_1_dpi96=21, 38 +WRITE_COL_2=23, 1200 +WRITE_COL_2_dpi96=23, 600 +WRITE_SORT_COL=31 +WRITE_SORT_UPW=1 +CONVERSION_COL_COUNT=7 +CONVERSION_COL_1=29, 88 +CONVERSION_COL_1_dpi96=29, 44 +CONVERSION_COL_2=31, 460 +CONVERSION_COL_2_dpi96=31, 230 +CONVERSION_COL_3=3, 500 +CONVERSION_COL_3_dpi96=3, 250 +CONVERSION_COL_4=26, 240 +CONVERSION_COL_4_dpi96=26, 120 +CONVERSION_COL_5=16, 140 +CONVERSION_COL_5_dpi96=16, 70 +CONVERSION_COL_6=15, 180 +CONVERSION_COL_6_dpi96=15, 90 +CONVERSION_COL_7=68, 180 +CONVERSION_COL_7_dpi96=68, 90 +CONVERSION_SORT_COL=31 +CONVERSION_SORT_UPW=1 +RECORD_LAYOUT_COL_COUNT=2 +RECORD_LAYOUT_COL_1=29, 88 +RECORD_LAYOUT_COL_1_dpi96=29, 44 +RECORD_LAYOUT_COL_2=31, 460 +RECORD_LAYOUT_COL_2_dpi96=31, 230 +RECORD_LAYOUT_SORT_COL=31 +RECORD_LAYOUT_SORT_UPW=1 +VARIANT_CRITERION_COL_COUNT=4 +VARIANT_CRITERION_COL_1=29, 88 +VARIANT_CRITERION_COL_1_dpi96=29, 44 +VARIANT_CRITERION_COL_2=31, 460 +VARIANT_CRITERION_COL_2_dpi96=31, 230 +VARIANT_CRITERION_COL_3=25, 400 +VARIANT_CRITERION_COL_3_dpi96=25, 200 +VARIANT_CRITERION_COL_4=30, 400 +VARIANT_CRITERION_COL_4_dpi96=30, 200 +VARIANT_CRITERION_SORT_COL=31 +VARIANT_CRITERION_SORT_UPW=1 +SYSTEM_CONSTANT_COL_COUNT=3 +SYSTEM_CONSTANT_COL_1=29, 88 +SYSTEM_CONSTANT_COL_1_dpi96=29, 44 +SYSTEM_CONSTANT_COL_2=31, 460 +SYSTEM_CONSTANT_COL_2_dpi96=31, 230 +SYSTEM_CONSTANT_COL_3=24, 240 +SYSTEM_CONSTANT_COL_3_dpi96=24, 120 +SYSTEM_CONSTANT_SORT_COL=31 +SYSTEM_CONSTANT_SORT_UPW=1 +DEFAULT_COL_COUNT=3 +DEFAULT_COL_1=29, 88 +DEFAULT_COL_1_dpi96=29, 44 +DEFAULT_COL_2=31, 460 +DEFAULT_COL_2_dpi96=31, 230 +DEFAULT_COL_3=3, 500 +DEFAULT_COL_3_dpi96=3, 250 +DEFAULT_SORT_COL=31 +DEFAULT_SORT_UPW=1 +CAN_SIGNAL_COL_COUNT=9 +CAN_SIGNAL_COL_1=29, 88 +CAN_SIGNAL_COL_1_dpi96=29, 44 +CAN_SIGNAL_COL_2=31, 460 +CAN_SIGNAL_COL_2_dpi96=31, 230 +CAN_SIGNAL_COL_3=28, 140 +CAN_SIGNAL_COL_3_dpi96=28, 70 +CAN_SIGNAL_COL_4=16, 140 +CAN_SIGNAL_COL_4_dpi96=16, 70 +CAN_SIGNAL_COL_5=64, 400 +CAN_SIGNAL_COL_5_dpi96=64, 200 +CAN_SIGNAL_COL_6=4, 240 +CAN_SIGNAL_COL_6_dpi96=4, 120 +CAN_SIGNAL_COL_7=17, 140 +CAN_SIGNAL_COL_7_dpi96=17, 70 +CAN_SIGNAL_COL_8=18, 100 +CAN_SIGNAL_COL_8_dpi96=18, 50 +CAN_SIGNAL_COL_9=3, 500 +CAN_SIGNAL_COL_9_dpi96=3, 250 +CAN_SIGNAL_SORT_COL=31 +CAN_SIGNAL_SORT_UPW=1 +CA_MESSAGE_COL_COUNT=7 +CA_MESSAGE_COL_1=29, 88 +CA_MESSAGE_COL_1_dpi96=29, 44 +CA_MESSAGE_COL_2=31, 460 +CA_MESSAGE_COL_2_dpi96=31, 230 +CA_MESSAGE_COL_3=3, 500 +CA_MESSAGE_COL_3_dpi96=3, 250 +CA_MESSAGE_COL_4=64, 400 +CA_MESSAGE_COL_4_dpi96=64, 200 +CA_MESSAGE_COL_5=4, 240 +CA_MESSAGE_COL_5_dpi96=4, 120 +CA_MESSAGE_COL_6=17, 140 +CA_MESSAGE_COL_6_dpi96=17, 70 +CA_MESSAGE_COL_7=18, 100 +CA_MESSAGE_COL_7_dpi96=18, 50 +CA_MESSAGE_SORT_COL=31 +CA_MESSAGE_SORT_UPW=1 +MEMORY_SEGMENT_COL_COUNT=4 +MEMORY_SEGMENT_COL_1=29, 88 +MEMORY_SEGMENT_COL_1_dpi96=29, 44 +MEMORY_SEGMENT_COL_2=31, 460 +MEMORY_SEGMENT_COL_2_dpi96=31, 230 +MEMORY_SEGMENT_COL_3=3, 500 +MEMORY_SEGMENT_COL_3_dpi96=3, 250 +MEMORY_SEGMENT_COL_4=1, 180 +MEMORY_SEGMENT_COL_4_dpi96=1, 90 +MEMORY_SEGMENT_SORT_COL=31 +MEMORY_SEGMENT_SORT_UPW=1 +CAL_PARAM_GROUP_COL_COUNT=4 +CAL_PARAM_GROUP_COL_1=29, 88 +CAL_PARAM_GROUP_COL_1_dpi96=29, 44 +CAL_PARAM_GROUP_COL_2=31, 460 +CAL_PARAM_GROUP_COL_2_dpi96=31, 230 +CAL_PARAM_GROUP_COL_3=1376257, 200 +CAL_PARAM_GROUP_COL_3_dpi96=1376257, 100 +CAL_PARAM_GROUP_COL_4=1376260, 200 +CAL_PARAM_GROUP_COL_4_dpi96=1376260, 100 +CAL_PARAM_GROUP_SORT_COL=31 +CAL_PARAM_GROUP_SORT_UPW=1 +TABLE_COL_COUNT=4 +TABLE_COL_1=29, 88 +TABLE_COL_1_dpi96=29, 44 +TABLE_COL_2=31, 460 +TABLE_COL_2_dpi96=31, 230 +TABLE_COL_3=3, 500 +TABLE_COL_3_dpi96=3, 250 +TABLE_COL_4=26, 240 +TABLE_COL_4_dpi96=26, 120 +TABLE_SORT_COL=31 +TABLE_SORT_UPW=1 +FILTER_COL_COUNT=3 +FILTER_COL_1=29, 88 +FILTER_COL_1_dpi96=29, 44 +FILTER_COL_2=31, 460 +FILTER_COL_2_dpi96=31, 230 +FILTER_COL_3=3, 500 +FILTER_COL_3_dpi96=3, 250 +FILTER_SORT_COL=31 +FILTER_SORT_UPW=1 +SELECT_SHOW_TOOLTIPS=1 +SELECT_SHOW_DISPLAY_NAMES=0 +SELECT_EXPAND_TREEVIEW_ITEM=2000 +SELECT_TV_W=300 +SELECT_TV_W_dpi96=150 +SELECT_DLG_H=600 +SELECT_DLG_H_dpi96=300 +SELECT_PREVIEW_DLG_VISIBLE=0 +SELECT_SORT_COLUMN_ID=31 +SELECT_SORT_UPWARD=1 + +[DB_EXPLORER_SEARCH_FILTER] +SEARCH_CASE_SENSITIVE=0 +SEARCH_FULL_TEXT=1 +SEARCH_USE_MODE=1 +SEARCH_INCLUDE_SUB_GROUPS=1 +SEARCH_VARTYPE_MEASURE=255 +SEARCH_REFTYPE_MEA_LOC=255 +SEARCH_VARTYPE_VIRTUAL=1 +SEARCH_VARTYPE_REAL=1 +SEARCH_ACCESS=0 +SEARCH_ERRORTYPE=0 +SEARCH_DATAYPE_MASK=0 +SEARCH_DATAYPE=0 +SEARCH_COMP_ADDRESS=0 +SEARCH_START_ADDRESS=0 +SEARCH_END_ADDRESS=0 +FILTER_COMMENT= +FILTER_NAME=Search result +SEARCH_COMMENT= +SEARCH_NAME= +PARENT= + +[MEASUREMENT_0] +FileId=Measurement1 +MeasurementId=4af29b36-9434-4969-a900-9a32ad086c93 +LoadMeasurementSetting=3 + +[MEASUREMENT_DISPLAY] +ScreenDPIinSection=192 +POSX=548 +POSX_dpi96=274 +POSY=332 +POSY_dpi96=166 +SIZEX=2208 +SIZEX_dpi96=1104 +SIZEY=1500 +SIZEY_dpi96=750 +SHOWTOOLBAR=1 +SHOWSTATUSBAR=1 +SHOWGRID=0 +RIGHTPANE2HEIGHT=304 +RIGHTPANE2HEIGHT_dpi96=152 +TREEX=450 +TREEX_dpi96=225 +TREEY=1309 +TREEY_dpi96=655 +ACTIVEPANE=0 +SELECTED_TREENODE=Measurement signals/hello_xcp_cpp +FIRSTVISIBLE_TREENODE=Measurement options +TREEEXPAND_COUNT=3 +TREEEXPAND_0=Measurement signals +TREEEXPAND_1=Measurement signals/hello_xcp_cpp +TREEEXPAND_2=Recorder list +LAST_FOCUSED_LISTCOLUMN=0 +LAST_FOCUSED_LISTINDEX=0 +LAST_TOP_LISTINDEX=0 +DAQLISTS=2 +STATUSBAR_BYTES=1 +DIALOGFILEEXTEXPORT=vsf +LABELLISTMEAMODE=0 +LABELLISTBUSSIGNALMODE=0 +TEXT_SEARCH= +VXIIColumnsAdded=0 +SHOWONLYACTIVE=0 + +[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS] +ScreenDPIinSection=192 +ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[DEVICE_EXPLORER_COLUMNLIST_DEVICES] +[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS_CUSTOM] ScreenDPIinSection=192 -ColumnCount=10 -Column_0=34, 96 -Column_0_dpi96=34, 48 -Column_1=0, 460 -Column_1_dpi96=0, 230 -Column_2=131078, 160 -Column_2_dpi96=131078, 80 -Column_3=131103, 100 -Column_3_dpi96=131103, 50 -Column_4=131079, 100 -Column_4_dpi96=131079, 50 -Column_5=262145, 240 -Column_5_dpi96=262145, 120 -Column_6=131085, 200 -Column_6_dpi96=131085, 100 -Column_7=131080, 240 -Column_7_dpi96=131080, 120 -Column_8=131081, 160 -Column_8_dpi96=131081, 80 -Column_9=196609, 100 -Column_9_dpi96=196609, 50 +ColumnCount=0 ColumnIdSort=-1 SortUpward=1 -[DEVICE_EXPLORER_COLUMNLIST_NETWORKS] +[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS_KEY] +ScreenDPIinSection=192 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS_SYSTEM] +ScreenDPIinSection=192 +ColumnCount=0 +ColumnIdSort=196608 +SortUpward=1 + +[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS_SYSTEM_DEVICE] +ScreenDPIinSection=192 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_COLUMNLIST_KNOWN_DYNAMIC_COLUMNS_NORMAL] +ScreenDPIinSection=192 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 +VERSION=100 + +[MEASUREMENT_DISPLAY_COLUMNLIST_NORMAL] +ScreenDPIinSection=192 +ColumnCount=8 +Column_0=65542, 100 +Column_0_dpi96=65542, 50 +Column_1=29, 88 +Column_1_dpi96=29, 44 +Column_2=34, 96 +Column_2_dpi96=34, 48 +Column_3=31, 272 +Column_3_dpi96=31, 136 +Column_4=65540, 392 +Column_4_dpi96=65540, 196 +Column_5=65541, 120 +Column_5_dpi96=65541, 60 +Column_6=65597, 200 +Column_6_dpi96=65597, 100 +Column_7=98305, 160 +Column_7_dpi96=98305, 80 +ColumnIdSort=-1 +SortUpward=1 +VERSION=100 + +[MEASUREMENT_DISPLAY_COLUMNLIST_RECORDER] +ScreenDPIinSection=192 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 +VERSION=100 + +[MEASUREMENT_DISPLAY_COLUMNLIST_RECORDER_BUSLOGGING] +ScreenDPIinSection=192 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_COLUMNLIST_RECORDERS] ScreenDPIinSection=192 ColumnCount=6 -Column_0=34, 64 -Column_0_dpi96=34, 32 -Column_1=0, 304 -Column_1_dpi96=0, 152 -Column_2=983041, 192 -Column_2_dpi96=983041, 96 -Column_3=983042, 530 -Column_3_dpi96=983042, 265 -Column_4=983043, 252 -Column_4_dpi96=983043, 126 -Column_5=983044, 300 -Column_5_dpi96=983044, 150 +Column_0=327711, 400 +Column_0_dpi96=327711, 200 +Column_1=327684, 120 +Column_1_dpi96=327684, 60 +Column_2=327709, 300 +Column_2_dpi96=327709, 150 +Column_3=327695, 130 +Column_3_dpi96=327695, 65 +Column_4=327681, 400 +Column_4_dpi96=327681, 200 +Column_5=327683, 400 +Column_5_dpi96=327683, 200 ColumnIdSort=-1 SortUpward=1 -[MEASUREMENT_0] -FileId=Measurement1 -MeasurementId=97c38cb3-ece6-4082-9643-c1f68fe690f1 -LoadMeasurementSetting=3 +[MEASUREMENT_DISPLAY_COLUMNLIST_SOUNDS] +ScreenDPIinSection=192 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_COLUMNLIST_TARA_ACTIVE_SIGNALS] +ScreenDPIinSection=192 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_COLUMNLIST_TARA_ALL_SIGNALS] +ScreenDPIinSection=192 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_COLUMNLIST_VIO] +ScreenDPIinSection=192 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_DYNAMIC_COLUMNS] +Count=0 + +[SelectComponentDialog] +Columns=3 +ColumnId_0=31 +ColumnWidth_0=460 +ColumnWidth_0_dpi96=230 +ColumnId_1=3 +ColumnWidth_1=500 +ColumnWidth_1_dpi96=250 +ColumnId_2=2 +ColumnWidth_2=170 +ColumnWidth_2_dpi96=85 +ScreenDPIinSection=192 +WindowLeft=940 +WindowLeft_dpi96=470 +WindowTop=604 +WindowTop_dpi96=302 +WindowWidth=1181 +WindowWidth_dpi96=591 +WindowHeight=615 +WindowHeight_dpi96=308 [SIGNSELWND_DYNAMIC_COLUMNS] Count=0 [~~~~~_CONSISTENCY_CHECK_END_SECTION_~~~~~] -GUID={DB14524D-6C12-4948-818C-AA0A6F1AA08B} +GUID={B38AF758-4D05-410D-95DD-2163C621DDA3} diff --git a/examples/hello_xcp_cpp/CANape/hello_xcp_cpp.cna b/examples/hello_xcp_cpp/CANape/hello_xcp_cpp.cna index 57eb8cf2..21fc914e 100644 --- a/examples/hello_xcp_cpp/CANape/hello_xcp_cpp.cna +++ b/examples/hello_xcp_cpp/CANape/hello_xcp_cpp.cna @@ -1,17 +1,17 @@ [FILE_INFO] Identification=CANape-Configuration-File FileName=hello_xcp_cpp.cna -FileNameAbsolute=D:\git\XCPlite-RainerZ\examples\hello_xcp_cpp\CANape\hello_xcp_cpp.cna -WorkingDirectory=D:\git\XCPlite-RainerZ\examples\hello_xcp_cpp\CANape +FileNameAbsolute=Y:\XCPlite-RainerZ\examples\hello_xcp_cpp\CANape\hello_xcp_cpp.cna +WorkingDirectory=Y:\XCPlite-RainerZ\examples\hello_xcp_cpp\CANape ProjectId=07e9-0008-001c-0014-002b-0032-0000 FileVersion=2200 -PrgVersion=Version 23.0.21.55 HF1 -PrgDate=11.08.2025 +PrgVersion=Version 23.0.20.3237 +PrgDate=16.06.2025 Description= CreationTime=20:50 CreationDate=08/28/2025 ; Month/Day/Year -ModificationTime=15:14 -ModificationDate=09/02/2025 ; Month/Day/Year +ModificationTime=14:12 +ModificationDate=11/07/2025 ; Month/Day/Year Protected=0 CurrentWindowsACP=1252 @@ -104,7 +104,7 @@ Count=0 Name= Comment= Maximized=0 -ActiveWindow=5 +ActiveWindow=6 IsReportPage=0 TimeAxisSynchronized=0 PrintLayout=Default @@ -163,7 +163,7 @@ SubConfigsCount=0 Count=0 [MEASUREMENT_LIST] -Count=2 +Count=3 OfflineFileName=hello_xcp_cpp.mf4 OfflineFileCount=1 MeaCfgLabellistName= @@ -172,7 +172,7 @@ MeaCfgLabellistName= Module=hello_xcp_cpp Name=input Disabled=0 -Mode=2147483648 +Mode=2147483650 Rate=0 ModeIsDefault=1 Row=0 @@ -191,10 +191,10 @@ ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 LineTyp=2 -YMinHome=-2 -YMaxHome=2 -YMin=-2 -YMax=2 +YMinHome=0 +YMaxHome=5 +YMin=0 +YMax=5 XOffsetNS=0 XOffset=0 ValueFormat=3 @@ -233,7 +233,7 @@ GUID=DISPLAY_07dcd29c-7736-499e-8513-401b1f15d018 Module=hello_xcp_cpp Name=average Disabled=0 -Mode=2147483648 +Mode=2147483650 Rate=0 ModeIsDefault=1 Row=0 @@ -252,10 +252,10 @@ ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 LineTyp=2 -YMinHome=-2 -YMaxHome=2 -YMin=-2 -YMax=2 +YMinHome=0 +YMaxHome=5 +YMin=0 +YMax=5 XOffsetNS=0 XOffset=0 ValueFormat=3 @@ -290,6 +290,175 @@ YAxis_ID=0 AxisTemplate= GUID=DISPLAY_43381eef-5906-4aae-aa7f-3a9c1db97407 +[MEASUREMENT_OBJECT_3] +Components=3 +Module=hello_xcp_cpp +Name=$average128$ +Disabled=0 +Mode=2147483649 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=0 + +[MEASUREMENT_OBJECT_3_CO1] +Name=$average128$average128.current_index_ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_3_CO1_DISPLAY_1] +Window=6 +Index=2 +Color=65280 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_630a5803-26d9-461d-a9eb-62dfd2432304 + +[MEASUREMENT_OBJECT_3_CO2] +Name=$average128$average128.sample_count_ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_3_CO2_DISPLAY_1] +Window=6 +Index=1 +Color=255 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_16f941ae-7ee7-4b85-ba04-1fd07405f7e5 + +[MEASUREMENT_OBJECT_3_CO3] +Name=$average128$average128.sum_ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_3_CO3_DISPLAY_1] +Window=6 +Index=0 +Color=65535 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=1 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_a4ff1de0-1c6d-4725-bd99-29fea42239c6 + [MEASUREMENT_OPTIONS] RemainingRecordingTime=5000 StopMeasurementOnRecorderStopped=0 @@ -356,18 +525,51 @@ VmdmDescription= Count=0 [Module_hello_xcp_cpp] -EVENT_COUNT=1 +EVENT_COUNT=4 EVENT_CHANNEL_0=0x0000 -EVENT_CYCLE_0=0 -EVENT_SAMPLE_UNIT_0=3 +EVENT_CHANNEL_1=0x0001 +EVENT_CHANNEL_2=0x0002 +EVENT_CHANNEL_3=0x0003 +EVENT_CYCLE_0=100 +EVENT_CYCLE_1=0 +EVENT_CYCLE_2=0 +EVENT_CYCLE_3=0 +EVENT_SAMPLE_UNIT_0=7 +EVENT_SAMPLE_UNIT_1=3 +EVENT_SAMPLE_UNIT_2=3 +EVENT_SAMPLE_UNIT_3=3 EVENT_MODE_0=4 +EVENT_MODE_1=4 +EVENT_MODE_2=4 +EVENT_MODE_3=4 EVENT_PRIO_0=0 +EVENT_PRIO_1=0 +EVENT_PRIO_2=0 +EVENT_PRIO_3=0 EVENT_MAX_DAQ_LIST_0=255 -EVENT_NAME_0=avg_calc +EVENT_MAX_DAQ_LIST_1=255 +EVENT_MAX_DAQ_LIST_2=255 +EVENT_MAX_DAQ_LIST_3=255 +EVENT_NAME_0=async +EVENT_NAME_1=average128 +EVENT_NAME_2=avg_calc1 +EVENT_NAME_3=mainloop EVENT_MIN_CYCLE_TIME_CYCLE_0=0 +EVENT_MIN_CYCLE_TIME_CYCLE_1=0 +EVENT_MIN_CYCLE_TIME_CYCLE_2=0 +EVENT_MIN_CYCLE_TIME_CYCLE_3=0 EVENT_MIN_CYCLE_TIME_UNIT_0=9 +EVENT_MIN_CYCLE_TIME_UNIT_1=9 +EVENT_MIN_CYCLE_TIME_UNIT_2=9 +EVENT_MIN_CYCLE_TIME_UNIT_3=9 EVENT_MULTISAMPLES_0=0 +EVENT_MULTISAMPLES_1=0 +EVENT_MULTISAMPLES_2=0 +EVENT_MULTISAMPLES_3=0 EVENT_DPM_SUPPORTED_0=0 +EVENT_DPM_SUPPORTED_1=0 +EVENT_DPM_SUPPORTED_2=0 +EVENT_DPM_SUPPORTED_3=0 IGNORE_FIX_EVENTS=0 [OPTIONS] @@ -375,9 +577,9 @@ WindowTextExtended=1 WindowTextExtendedNew=1 WindowSymbols=1 GlobalCursor=0 -GlobalCursorTime=1630 -GlobalCursorTimeNs=1630312900 -MainWindowPos=1, 484, 48, 1244, 792 ;cmd, x, y, w, h +GlobalCursorTime=0 +GlobalCursorTimeNs=0 +MainWindowPos=1, 287, 120, 2618, 1588 ;cmd, x, y, w, h [PAR_COMMENT] 1="Name","" @@ -400,7 +602,7 @@ ScriptName= ScriptName= [PRINTING] -ScreenDPI=96 +ScreenDPI=192 [PROFILE_MDF_OBJECT_1] Unit= @@ -526,19 +728,28 @@ Count=0 [SIGNSELWND] FocusID=2004 ActiveTab=0 -FilterNodeID=All\Devices\hello_xcp_cpp +FilterNodeID=All\Measurement list TreeExpand_0=@All TreeExpand_1=All\Devices\hello_xcp_cpp\hello_xcp_cpp_autodetect.a2l TreeExpand_2=All\Devices\hello_xcp_cpp\hello_xcp_cpp_autodetect.a2l\Events TreeExpand_3=All\Devices\hello_xcp_cpp\hello_xcp_cpp_autodetect.a2l\Parameters TreeExpand_4=All\Devices\hello_xcp_cpp\hello_xcp_cpp_autodetect.a2l\Software structure -TreeExpand_5=All\Devices\hello_xcp_cpp\hello_xcp_cpp_autodetect.a2l\Events\avg_calc -TreeExpand_6=All\Devices\hello_xcp_cpp\hello_xcp_cpp_autodetect.a2l\Parameters\Parameters -TreeExpand_7=$All\Devices -TreeExpand_8=# -TreeExpand_9=@All\Devices\hello_xcp_cpp -TreeExpand_10=$All\Devices\hello_xcp_cpp\hello_xcp_cpp_autodetect.a2l -TreeExpand_11=#All\Devices\hello_xcp_cpp\hello_xcp_cpp_autodetect.a2l +TreeExpand_5=All\Devices\hello_xcp_cpp\hello_xcp_cpp_autodetect.a2l\Software structure\Parameters +TreeExpand_6=All\Devices\hello_xcp_cpp\hello_xcp_cpp_autodetect.a2l\Events\average128 +TreeExpand_7=All\Devices\hello_xcp_cpp\hello_xcp_cpp_autodetect.a2l\Events\average128\average128 +TreeExpand_8=All\Devices\hello_xcp_cpp\hello_xcp_cpp_autodetect.a2l\Events\avg_calc1 +TreeExpand_9=All\Devices\hello_xcp_cpp\hello_xcp_cpp_autodetect.a2l\Events\mainloop +TreeExpand_10=All\Devices\hello_xcp_cpp\hello_xcp_cpp_autodetect.a2l\Parameters\Parameters +TreeExpand_11=All\Devices\hello_xcp_cpp\hello_xcp_cpp_autodetect.a2l\Software structure\average128 +TreeExpand_12=All\Measurement list\All signals +TreeExpand_13=$All\Devices +TreeExpand_14=# +TreeExpand_15=@All\Devices\hello_xcp_cpp +TreeExpand_16=$All\Devices\hello_xcp_cpp\hello_xcp_cpp_autodetect.a2l\Events\average128\average128 +TreeExpand_17=#All\Devices\hello_xcp_cpp\hello_xcp_cpp_autodetect.a2l\Software structure\Parameters\Parameters.max +TreeExpand_18=@All\Measurement list +TreeExpand_19=$All\Measurement list\All signals +TreeExpand_20=#All\Measurement list\All signals\average128 TextSearchCaseSensitive=0 TextSearchUseMode=1 TextSearchSearchFullText=1 @@ -555,10 +766,10 @@ Type=65536 Comment=Multi view window Number=1 GUID=WINDOW_390f5558-2744-45e3-8c70-88ba522738e7 -ScreenDPIinSection=96 -Position=0, 9, 5, 773, 402 ;cmd, x, y, w, h +ScreenDPIinSection=192 +Position=0, 18, 10, 1546, 804 ;cmd, x, y, w, h Position_dpi96=0, 9, 5, 773, 402 ;cmd, x, y, w, h -Position_Page01=0, 9, 5, 773, 402 ;cmd, x, y, w, h +Position_Page01=0, 18, 10, 1546, 804 ;cmd, x, y, w, h Position_Page01_dpi96=0, 9, 5, 773, 402 ;cmd, x, y, w, h FloatingWindow=0 ShowSignalComments=1 @@ -568,16 +779,16 @@ DisplayMask=1 ; pages 1 XLen=18374 XMin=0 XMinNs=0 -XMax=1077 -XMaxNs=1077255952 +XMax=37342 +XMaxNs=37342239545 Grid=1 Mark=1 YValue=1 ShowLegend=2 ShowLegendHeader=1 -LegendPixWidth=150 +LegendPixWidth=300 LegendPixWidth_dpi96=150 -LegendPixHeight=98 +LegendPixHeight=196 LegendPixHeight_dpi96=98 LegendPos=2 Optimize=1 @@ -587,7 +798,7 @@ XYModeIndexP1=-1 DisplayModeAuto=0 XStart=0 AbsoluteTimeMode=0 -YAxisWidth=50 +YAxisWidth=100 YAxisWidth_dpi96=50 RightYAxisWidth=0 RightYAxisWidth_dpi96=0 @@ -614,7 +825,7 @@ Type=1 Comment=Graphic Window Number=2 GUID=WINDOW_4a256e26-24fd-4ad7-9ca2-1e2376673ce9 -ScreenDPIinSection=96 +ScreenDPIinSection=192 Position=0, 0, 0, 0, 0 ;cmd, x, y, w, h Position_dpi96=0, 0, 0, 0, 0 ;cmd, x, y, w, h Position_Page01=0, 0, 0, 0, 0 ;cmd, x, y, w, h @@ -630,27 +841,27 @@ TimeAxisTemplate= DisplayMask=1 ; pages 1 [WINDOW_2_LEG_COLUMNS] -ScreenDPIinSection=96 +ScreenDPIinSection=192 COUNT=2 -COL_0=31, 81 +COL_0=31, 162 COL_0_dpi96=31, 81 -COL_1=1048578, 62 +COL_1=1048578, 124 COL_1_dpi96=1048578, 62 [WINDOW_3] XLen=18374 XMin=0 XMinNs=0 -XMax=1077 -XMaxNs=1077255952 +XMax=37342 +XMaxNs=37342239545 Grid=1 Mark=1 YValue=1 ShowLegend=2 ShowLegendHeader=1 -LegendPixWidth=150 +LegendPixWidth=300 LegendPixWidth_dpi96=150 -LegendPixHeight=98 +LegendPixHeight=196 LegendPixHeight_dpi96=98 LegendPos=2 Optimize=1 @@ -660,7 +871,7 @@ XYModeIndexP1=-1 DisplayModeAuto=0 XStart=0 AbsoluteTimeMode=0 -YAxisWidth=50 +YAxisWidth=100 YAxisWidth_dpi96=50 RightYAxisWidth=0 RightYAxisWidth_dpi96=0 @@ -687,10 +898,10 @@ Type=1 Comment=Graphic Window Number=3 GUID=WINDOW_54ea6e00-e9e3-4c51-986f-64c4f8405317 -ScreenDPIinSection=96 -Position=0, 13, 13, 500, 200 ;cmd, x, y, w, h +ScreenDPIinSection=192 +Position=0, 26, 26, 1000, 400 ;cmd, x, y, w, h Position_dpi96=0, 13, 13, 500, 200 ;cmd, x, y, w, h -Position_Page01=0, 13, 13, 500, 200 ;cmd, x, y, w, h +Position_Page01=0, 26, 26, 1000, 400 ;cmd, x, y, w, h Position_Page01_dpi96=0, 13, 13, 500, 200 ;cmd, x, y, w, h FloatingWindow=0 JointIndex=1 @@ -703,11 +914,11 @@ TimeAxisTemplate= DisplayMask=1 ; pages 1 [WINDOW_3_LEG_COLUMNS] -ScreenDPIinSection=96 +ScreenDPIinSection=192 COUNT=2 -COL_0=31, 81 +COL_0=31, 162 COL_0_dpi96=31, 81 -COL_1=1048578, 62 +COL_1=1048578, 124 COL_1_dpi96=1048578, 62 [WINDOW_4] @@ -718,21 +929,21 @@ ClearStart=1 AbsoluteTimeEnabled=0 ShowGridLines=0 ColumnCount=3 -Column_0=21, 40 +Column_0=21, 80 Column_0_dpi96=21, 40 -Column_1=22, 90 +Column_1=22, 180 Column_1_dpi96=22, 90 -Column_2=23, 823 +Column_2=23, 1646 Column_2_dpi96=23, 823 Title=Write Type=128 Comment=Write Window Number=4 GUID=WINDOW_4b378aed-ba54-4c60-b2c5-e5e38f0209f3 -ScreenDPIinSection=96 -Position=0, 9, 415, 949, 156 ;cmd, x, y, w, h +ScreenDPIinSection=192 +Position=0, 18, 830, 1898, 312 ;cmd, x, y, w, h Position_dpi96=0, 9, 415, 949, 156 ;cmd, x, y, w, h -Position_Page01=0, 9, 415, 949, 156 ;cmd, x, y, w, h +Position_Page01=0, 18, 830, 1898, 312 ;cmd, x, y, w, h Position_Page01_dpi96=0, 9, 415, 949, 156 ;cmd, x, y, w, h FloatingWindow=0 ShowSignalComments=1 @@ -741,7 +952,7 @@ DisplayMask=1 ; pages 1 [WINDOW_5] ProgID= PROPERTIES_COUNT=1 -PROPERTY_1={"Version":"1.3.0.0","Configuration":{"ArrayWindowSubControlConfiguration":{"NumericGraphicCompositeWidth":171,"NumericGraphicCompositeHeight":113,"LegendCoordinatePoint":{"X":0,"Y":0},"LegendWidth":0,"LegendHeight":0,"LegendLayoutGroupSizeWidth":0,"LegendLayoutGroupSizeHeight":0,"NumericCoordinatePoint":{"X":1,"Y":24},"NumericWidth":169,"NumericHeight":88,"NumericLayoutGroupSizeWidth":169,"NumericLayoutGroupSizeHeight":88,"Intersection2DXWCoordinatePoint":{"X":0,"Y":0},"Intersection2DXWWidth":0,"Intersection2DXWHeight":0,"Intersection2DXWLayoutGroupSizeWidth":0,"Intersection2DXWLayoutGroupSizeHeight":0,"Intersection2DYWCoordinatePoint":{"X":0,"Y":0},"Intersection2DYWWidth":0,"Intersection2DYWHeight":0,"Intersection2DYWLayoutGroupSizeWidth":0,"Intersection2DYWLayoutGroupSizeHeight":0,"Graphic3DCoordinatePoint":{"X":0,"Y":0},"Graphic3DWidth":0,"Graphic3DHeight":0,"Graphic3DLayoutGroupSizeWidth":0,"Graphic3DLayoutGroupSizeHeight":0},"ShowCalibrationBar":true,"ShowHorizontalChartLines":false,"ShowVerticalChartLines":false,"NonSelectedIntersectionLineTransparency":0.100000024,"FocusedValueSymbol":"DEVICE:\"hello_xcp_cpp\":\"$Parameters$Parameters.max\":P","ValueObjectConfigurations":[{"Symbol":"DEVICE:\"hello_xcp_cpp\":\"$Parameters$Parameters.max\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":-100,"ValueAxisMax":100,"ValueAxisMinHome":-100,"ValueAxisMaxHome":100,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"hello_xcp_cpp\":\"$Parameters$Parameters.min\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":-100,"ValueAxisMax":100,"ValueAxisMinHome":-100,"ValueAxisMaxHome":100,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]}],"NumericGraphicControlPosition":0,"NumericGraphicControlSelectedTab":0,"GraphicControlPosition":0,"Height2DXControl":1,"Height2DYControl":1,"Height3DControl":2,"HeightNumericControl":1,"HeightChartControl":1,"HeightLegendControl":0.44999998807907104,"Width2DXControl":1,"Width2DYControl":1,"Width3DControl":2,"WidthNumericControl":2,"WidthChartControl":2,"WidthLegendControl":0.30000001192092896,"HeightValueControl":1,"WidthValueControl":1,"HeightNumericGraphicControl":1,"WidthNumericGraphicControl":1,"Height2DChartsControl":1,"Width2DChartsControl":1,"IsXAxisHeightSynchronizedBetweenCharts":true,"IsYAxisAreaWidthSynchronizedBetweenCharts":true,"SyncedXAxisHeight":NaN,"XWChartXAxisHeight":NaN,"YWChartXAxisHeight":NaN,"SyncedLeftAxisAreaWidth":NaN,"XWChartLeftAxisAreaWidth":NaN,"YWChartLeftAxisAreaWidth":NaN,"SyncedRightAxisAreaWidth":NaN,"XWChartRightAxisAreaWidth":NaN,"YWChartRightAxisAreaWidth":NaN,"LegendPosition":0,"LegendViewType":0,"LegendTableColumnAttributes":[{"TypeId":"1048594","Size":40},{"TypeId":"1048601","Size":45},{"TypeId":"31","Size":100},{"TypeId":"3","Size":250},{"TypeId":"16","Size":70},{"TypeId":"1048627","Size":100},{"TypeId":"1048631","Size":100},{"TypeId":"1048634","Size":100}],"LegendTabItemAttributes":[{"TypeId":"31","Size":100}],"FlipAxes":false,"AxisDisplayNameMode":3,"ReversedAxis":[false,false],"ShowUnits":false,"ShowObjectColor":true,"SortDescending":false,"SortAttributeId":null,"ShowWorkingPointHistory":false,"NumericViewValueObjectDisplayOption":1,"ValueColumnWidth":77,"ValueColumnWidthDouble":77,"ParameterGroup":"","ModuleName":"","GroupIsFunction":false,"NumericControlAxisAttributes":[],"NumericControlColumnAttributes":[{"TypeId":"31","Size":74}],"ChartViewValueObjectDisplayOption":1,"SerializationCameraPosition":{"X":1,"Y":1,"Z":-1},"SerializationCameraTarget":{"X":0,"Y":0.5,"Z":0},"IsValueAnnotationRotated":false,"EquidistantAxisPoints":false,"BarThickness":0.6,"WorkingPointMarker":0,"LinearWorkingPointInterpolation":true,"ShowAllIntersectionLines":false,"IsValueAxisIndependent":true,"TickLabelRotationAngle":-90,"IsTickLabelRotationEnabled":false,"IsTickLabelRightAligned":false,"ShowBoundarySurface":true,"ShowBoundarySurfaceGradient":false,"ShowCursorAsCrosshair":false,"XAxisAutoRange":true,"ValueAxisAutoRange":true,"ShowAllValueAxes":false,"DrawAxisBands":false,"CurrentColumnChartType":0,"SerializationCursorCrosshairColor":{"R":0,"G":0,"B":0,"A":255},"AlignBarToZero":true,"DefaultChartViewType":2,"AttributeColumnPositioning":1}} +PROPERTY_1={"Version":"1.3.0.0","Configuration":{"ArrayWindowSubControlConfiguration":{"NumericGraphicCompositeWidth":270,"NumericGraphicCompositeHeight":144.5,"LegendCoordinatePoint":{"X":0,"Y":0},"LegendWidth":0,"LegendHeight":0,"LegendLayoutGroupSizeWidth":0,"LegendLayoutGroupSizeHeight":0,"NumericCoordinatePoint":{"X":1,"Y":24},"NumericWidth":268,"NumericHeight":119.5,"NumericLayoutGroupSizeWidth":268,"NumericLayoutGroupSizeHeight":119.5,"Intersection2DXWCoordinatePoint":{"X":0,"Y":0},"Intersection2DXWWidth":0,"Intersection2DXWHeight":0,"Intersection2DXWLayoutGroupSizeWidth":0,"Intersection2DXWLayoutGroupSizeHeight":0,"Intersection2DYWCoordinatePoint":{"X":0,"Y":0},"Intersection2DYWWidth":0,"Intersection2DYWHeight":0,"Intersection2DYWLayoutGroupSizeWidth":0,"Intersection2DYWLayoutGroupSizeHeight":0,"Graphic3DCoordinatePoint":{"X":0,"Y":0},"Graphic3DWidth":0,"Graphic3DHeight":0,"Graphic3DLayoutGroupSizeWidth":0,"Graphic3DLayoutGroupSizeHeight":0},"ShowCalibrationBar":true,"ShowHorizontalChartLines":false,"ShowVerticalChartLines":false,"NonSelectedIntersectionLineTransparency":0.100000024,"FocusedValueSymbol":"DEVICE:\"hello_xcp_cpp\":\"$Parameters$Parameters.min\":P","ValueObjectConfigurations":[{"Symbol":"DEVICE:\"hello_xcp_cpp\":\"$Parameters$Parameters.max\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":-100,"ValueAxisMax":100,"ValueAxisMinHome":-100,"ValueAxisMaxHome":100,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"hello_xcp_cpp\":\"$Parameters$Parameters.min\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":-100,"ValueAxisMax":100,"ValueAxisMinHome":-100,"ValueAxisMaxHome":100,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]}],"NumericGraphicControlPosition":0,"NumericGraphicControlSelectedTab":0,"GraphicControlPosition":0,"Height2DXControl":1,"Height2DYControl":1,"Height3DControl":2,"HeightNumericControl":1,"HeightChartControl":1,"HeightLegendControl":0.44999998807907104,"Width2DXControl":1,"Width2DYControl":1,"Width3DControl":2,"WidthNumericControl":2,"WidthChartControl":2,"WidthLegendControl":0.30000001192092896,"HeightValueControl":1,"WidthValueControl":1,"HeightNumericGraphicControl":1,"WidthNumericGraphicControl":1,"Height2DChartsControl":1,"Width2DChartsControl":1,"IsXAxisHeightSynchronizedBetweenCharts":true,"IsYAxisAreaWidthSynchronizedBetweenCharts":true,"SyncedXAxisHeight":NaN,"XWChartXAxisHeight":NaN,"YWChartXAxisHeight":NaN,"SyncedLeftAxisAreaWidth":NaN,"XWChartLeftAxisAreaWidth":NaN,"YWChartLeftAxisAreaWidth":NaN,"SyncedRightAxisAreaWidth":NaN,"XWChartRightAxisAreaWidth":NaN,"YWChartRightAxisAreaWidth":NaN,"LegendPosition":0,"LegendViewType":0,"LegendTableColumnAttributes":[{"TypeId":"1048594","Size":40},{"TypeId":"1048601","Size":45},{"TypeId":"31","Size":100},{"TypeId":"3","Size":250},{"TypeId":"16","Size":70},{"TypeId":"1048627","Size":100},{"TypeId":"1048631","Size":100},{"TypeId":"1048634","Size":100}],"LegendTabItemAttributes":[{"TypeId":"31","Size":100}],"FlipAxes":false,"AxisDisplayNameMode":3,"ReversedAxis":[false,false],"ShowUnits":false,"ShowObjectColor":true,"SortDescending":false,"SortAttributeId":null,"ShowWorkingPointHistory":false,"NumericViewValueObjectDisplayOption":1,"ValueColumnWidth":101,"ValueColumnWidthDouble":101,"ParameterGroup":"","ModuleName":"","GroupIsFunction":false,"NumericControlAxisAttributes":[],"NumericControlColumnAttributes":[{"TypeId":"31","Size":89.5}],"ChartViewValueObjectDisplayOption":1,"SerializationCameraPosition":{"X":1,"Y":1,"Z":-1},"SerializationCameraTarget":{"X":0,"Y":0.5,"Z":0},"IsValueAnnotationRotated":false,"EquidistantAxisPoints":false,"BarThickness":0.6,"WorkingPointMarker":0,"LinearWorkingPointInterpolation":true,"ShowAllIntersectionLines":false,"IsValueAxisIndependent":true,"TickLabelRotationAngle":-90,"IsTickLabelRotationEnabled":false,"IsTickLabelRightAligned":false,"ShowBoundarySurface":true,"ShowBoundarySurfaceGradient":false,"ShowCursorAsCrosshair":false,"XAxisAutoRange":true,"ValueAxisAutoRange":true,"ShowAllValueAxes":false,"DrawAxisBands":false,"CurrentColumnChartType":0,"SerializationCursorCrosshairColor":{"R":0,"G":0,"B":0,"A":255},"AlignBarToZero":true,"DefaultChartViewType":2,"AttributeColumnPositioning":1}} OBJECTS_COUNT=2 OBJECT_1=DEVICE:"hello_xcp_cpp":"$Parameters$Parameters.max":P OBJECT_2=DEVICE:"hello_xcp_cpp":"$Parameters$Parameters.min":P @@ -752,11 +963,11 @@ Type=137438953472 Comment=Parameters Number=5 GUID=WINDOW_9f594130-cb21-49b7-bf2e-e1fb30f481e8 -ScreenDPIinSection=96 -Position=0, 789, 5, 177, 136 ;cmd, x, y, w, h -Position_dpi96=0, 789, 5, 177, 136 ;cmd, x, y, w, h -Position_Page01=0, 789, 5, 177, 136 ;cmd, x, y, w, h -Position_Page01_dpi96=0, 789, 5, 177, 136 ;cmd, x, y, w, h +ScreenDPIinSection=192 +Position=0, 1578, 10, 546, 295 ;cmd, x, y, w, h +Position_dpi96=0, 789, 5, 273, 148 ;cmd, x, y, w, h +Position_Page01=0, 1578, 10, 546, 295 ;cmd, x, y, w, h +Position_Page01_dpi96=0, 789, 5, 273, 148 ;cmd, x, y, w, h FloatingWindow=0 ShowSignalComments=1 DisplayMask=1 ; pages 1 @@ -808,7 +1019,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_db3cd8fc-2336-4e7f-b7f3-8be970d9e787 +GUID=DISPLAY_f3227aef-6574-479c-aff8-fe43aad53538 [WINDOW_5_OBJECT_2] Type=2 @@ -857,10 +1068,49 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_0a3e6a4f-1038-44b1-93d1-0dc16f23b143 +GUID=DISPLAY_7b2da89e-2bc6-4730-8608-f929df504496 + +[WINDOW_6] +ScaleFont=1 +ShowLegend=1 +ShowLegendHeader=0 +LegendPixWidth=223 +LegendPixWidth_dpi96=112 +GridStyle=0 +DisplayColors=1 +LegendFont=0 +Alignment=0 +DotLineProp=0.3 +ShowActivity=0 +ExceedLimitWarning=0 +OnlyHighlightOnViolation=1 +LegendScrollPos=0 +DotLinePos=91 +ObjectCount=0 +Title=Numeric {DISPLAYED_FILENAME} +Type=4 +Comment=Numeric Window +Number=6 +GUID=WINDOW_f2f85429-42b1-4bbe-9e21-7651e216bbb5 +ScreenDPIinSection=192 +Position=0, 1578, 323, 546, 200 ;cmd, x, y, w, h +Position_dpi96=0, 789, 162, 273, 100 ;cmd, x, y, w, h +Position_Page01=0, 1578, 323, 546, 200 ;cmd, x, y, w, h +Position_Page01_dpi96=0, 789, 162, 273, 100 ;cmd, x, y, w, h +FloatingWindow=0 +ShowSignalComments=1 +LEGEND_HSCROLL_POS=0 +LEGEND_SHARED_COLUMNS=1 +DisplayMask=1 ; pages 1 + +[WINDOW_6_LEG_COLUMNS] +ScreenDPIinSection=192 +COUNT=1 +COL_0=31, 223 +COL_0_dpi96=31, 112 [WINDOWS] -Count=5 +Count=6 [Y_COMMON_AXIS_LIST] Count=0 diff --git a/examples/hello_xcp_cpp/CANape/hello_xcp_cpp_autodetect.a2l b/examples/hello_xcp_cpp/CANape/hello_xcp_cpp_autodetect.a2l index 29edc50f..2f594fed 100644 --- a/examples/hello_xcp_cpp/CANape/hello_xcp_cpp_autodetect.a2l +++ b/examples/hello_xcp_cpp/CANape/hello_xcp_cpp_autodetect.a2l @@ -1,7 +1,7 @@ ASAP2_VERSION 1 71 /begin PROJECT hello_xcp_cpp "" -/begin HEADER "" VERSION "1.0" PROJECT_NO VECTOR /end HEADER +/begin HEADER "" VERSION "1.0" PROJECT_NO XCPLITE__CASDD /end HEADER /begin MODULE hello_xcp_cpp "" @@ -20,7 +20,7 @@ ALIGNMENT_INT64 1 -/begin TYPEDEF_STRUCTURE ParametersT "A2L Typedef for ParametersT" 0x10 +/begin TYPEDEF_STRUCTURE ParametersT "Typedef for ParametersT" 0x10 /begin STRUCTURE_COMPONENT min C_min 0x0 /end STRUCTURE_COMPONENT /begin STRUCTURE_COMPONENT max C_max 0x8 /end STRUCTURE_COMPONENT /end TYPEDEF_STRUCTURE @@ -28,14 +28,25 @@ ALIGNMENT_INT64 1 /* Segment relative addressing mode: calseg=Parameters */ /begin INSTANCE Parameters "Random number generator parameters" ParametersT 0x80010000 /end INSTANCE -/* Relative addressing mode: event=avg_calc (0), addr_ext=3 */ -/begin MEASUREMENT current_index_ "Current position in ring buffer" A_UINT64 NO_COMPU_METHOD 0 0 0 1e+12 ECU_ADDRESS 0x400 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT sample_count_ "Number of samples collected" A_UINT64 NO_COMPU_METHOD 0 0 0 1e+12 ECU_ADDRESS 0x408 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT sum_ "Running sum of all samples" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x410 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin TYPEDEF_STRUCTURE FloatingAverage "Typedef for FloatingAverage<128>" 0x418 + /begin STRUCTURE_COMPONENT current_index_ M_current_index_ 0x0 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT sample_count_ M_sample_count_ 0x8 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT sum_ M_sum_ 0x10 /end STRUCTURE_COMPONENT +/end TYPEDEF_STRUCTURE + +/* Relative addressing mode: event=average128 (1), addr_ext=3 */ +/begin INSTANCE average128 "Instance average128 of FloatingAverage<128>" FloatingAverage 0x10000 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end INSTANCE + +/* Auto addressing mode: event=avg_calc1 (2) */ +/begin MEASUREMENT input "Input value for floating average" FLOAT64_IEEE NO_COMPU_METHOD 0 0 0 1000 ECU_ADDRESS 0x2FFB8 ECU_ADDRESS_EXTENSION 2 PHYS_UNIT "V" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT average "Current calculated average" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x2FFB0 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT current_index_ "Current position in ring buffer" A_UINT64 NO_COMPU_METHOD 0 0 0 1e+12 ECU_ADDRESS 0x20000 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT sample_count_ "Number of samples collected" A_UINT64 NO_COMPU_METHOD 0 0 0 1e+12 ECU_ADDRESS 0x20008 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT sum_ "Running sum of all samples" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x20010 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/* Stack frame relative addressing mode: event=avg_calc (0), addr_ext=2 */ -/begin MEASUREMENT input "Input value for floating average" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0xFFC8 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT average "Current calculated average" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0xFFC0 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/* Stack frame relative addressing mode: event=mainloop (3), addr_ext=2 */ +/begin MEASUREMENT voltage "Input voltage" FLOAT64_IEEE NO_COMPU_METHOD 0 0 0 1000 ECU_ADDRESS 0x3FF70 ECU_ADDRESS_EXTENSION 2 PHYS_UNIT "V" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT average_voltage "Calculated voltage floating average" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x3FF68 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT /* Typedefs */ /begin RECORD_LAYOUT U8 FNC_VALUES 1 UBYTE ROW_DIR DIRECT /end RECORD_LAYOUT @@ -81,23 +92,28 @@ ALIGNMENT_INT64 1 /begin TYPEDEF_CHARACTERISTIC C_min "Minimum random number value" VALUE F64 0 NO_COMPU_METHOD -100 100 /end TYPEDEF_CHARACTERISTIC /begin TYPEDEF_CHARACTERISTIC C_max "Maximum random number value" VALUE F64 0 NO_COMPU_METHOD -100 100 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_MEASUREMENT M_current_index_ "Current position in the ring buffer" A_UINT64 NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT M_sample_count_ "Number of samples collected so far" A_UINT64 NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT M_sum_ "Running sum of all samples" FLOAT64_IEEE NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT /* Groups */ -/begin GROUP Parameters "Calibration Segment" /begin REF_CHARACTERISTIC Parameters /end REF_CHARACTERISTIC /end GROUP -/begin GROUP avg_calc "Measurement event group" /begin REF_MEASUREMENT current_index_ sample_count_ sum_ input average /end REF_MEASUREMENT /end GROUP -/begin GROUP Events "Events" ROOT /begin SUB_GROUP avg_calc /end SUB_GROUP /end GROUP +/begin GROUP Parameters "Calibration Segment" ROOT /begin REF_CHARACTERISTIC Parameters /end REF_CHARACTERISTIC /end GROUP +/begin GROUP average128 "Measurement event group" /begin REF_MEASUREMENT average128 /end REF_MEASUREMENT /end GROUP +/begin GROUP avg_calc1 "Measurement event group" /begin REF_MEASUREMENT input average current_index_ sample_count_ sum_ /end REF_MEASUREMENT /end GROUP +/begin GROUP mainloop "Measurement event group" /begin REF_MEASUREMENT voltage average_voltage /end REF_MEASUREMENT /end GROUP +/begin GROUP Events "Events" ROOT /begin SUB_GROUP average128 avg_calc1 mainloop /end SUB_GROUP /end GROUP /* Conversions */ /begin COMPU_METHOD conv.bool "" TAB_VERB "%.0" "" COMPU_TAB_REF conv.bool.table /end COMPU_METHOD /begin COMPU_VTAB conv.bool.table "" TAB_VERB 2 0 "false" 1 "true" /end COMPU_VTAB /begin COMPU_METHOD conv.events "" TAB_VERB "%.0 " "" COMPU_TAB_REF conv.events.table /end COMPU_METHOD -/begin COMPU_VTAB conv.events.table "" TAB_VERB 1 - 0 "avg_calc" +/begin COMPU_VTAB conv.events.table "" TAB_VERB 4 + 0 "async" 1 "average128" 2 "avg_calc1" 3 "mainloop" /end COMPU_VTAB /begin MOD_PAR "" -EPK "_Sep_22_2025_19_01_45" ADDR_EPK 0x80000000 -/begin MEMORY_SEGMENT epk "" DATA FLASH INTERN 0x80000000 21 -1 -1 -1 -1 -1 +EPK "14_51_37" ADDR_EPK 0x80000000 +/begin MEMORY_SEGMENT epk "" DATA FLASH INTERN 0x80000000 8 -1 -1 -1 -1 -1 /begin IF_DATA XCP /begin SEGMENT 0 2 0 0 0 /begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM @@ -106,7 +122,7 @@ EPK "_Sep_22_2025_19_01_45" ADDR_EPK 0x80000000 /end SEGMENT /end IF_DATA /end MEMORY_SEGMENT -/begin MEMORY_SEGMENT Parameters "" DATA FLASH INTERN 0x80010000 0x10 -1 -1 -1 -1 -1 +/begin MEMORY_SEGMENT Parameters "" DATA FLASH INTERN 0x80010000 16 -1 -1 -1 -1 -1 /begin IF_DATA XCP /begin SEGMENT 1 2 0 0 0 /begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM @@ -141,6 +157,7 @@ OPTIONAL_CMD BUILD_CHECKSUM OPTIONAL_CMD USER_CMD OPTIONAL_CMD GET_DAQ_RESOLUTION_INFO OPTIONAL_CMD GET_DAQ_PROCESSOR_INFO +OPTIONAL_CMD GET_DAQ_EVENT_INFO OPTIONAL_CMD FREE_DAQ OPTIONAL_CMD ALLOC_DAQ OPTIONAL_CMD ALLOC_ODT @@ -157,14 +174,15 @@ OPTIONAL_CMD TIME_CORRELATION_PROPERTIES OPTIONAL_LEVEL1_CMD GET_VERSION /end PROTOCOL_LAYER /begin DAQ -DYNAMIC 0 1 0 OPTIMISATION_TYPE_DEFAULT ADDRESS_EXTENSION_FREE IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE 0xF8 OVERLOAD_INDICATION_PID -/begin TIMESTAMP_SUPPORTED -0x1 SIZE_DWORD UNIT_1US TIMESTAMP_FIXED -/end TIMESTAMP_SUPPORTED -/begin EVENT "avg_calc" "avg_calc" 0x0 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +DYNAMIC 0 4 0 OPTIMISATION_TYPE_DEFAULT ADDRESS_EXTENSION_FREE IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE 0xF8 OVERLOAD_INDICATION_PID PRESCALER_SUPPORTED +/begin TIMESTAMP_SUPPORTED 0x1 SIZE_DWORD UNIT_1NS TIMESTAMP_FIXED /end TIMESTAMP_SUPPORTED +/begin EVENT "async" "async" 0x0 DAQ 0xFF 100 4 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "average128" "average128" 0x1 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "avg_calc1" "avg_calc1" 0x2 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "mainloop" "mainloop" 0x3 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT /end DAQ /begin XCP_ON_TCP_IP - 0x104 5555 ADDRESS "192.168.8.133" + 0x104 5555 ADDRESS "192.168.0.101" /end XCP_ON_TCP_IP /end IF_DATA diff --git a/examples/hello_xcp_cpp/src/main.cpp b/examples/hello_xcp_cpp/src/main.cpp index 4980a6e0..a238676c 100644 --- a/examples/hello_xcp_cpp/src/main.cpp +++ b/examples/hello_xcp_cpp/src/main.cpp @@ -13,6 +13,7 @@ //----------------------------------------------------------------------------------------------------- // XCP parameters #define OPTION_PROJECT_NAME "hello_xcp_cpp" // A2L project name +#define OPTION_PROJECT_EPK __TIME__ // EPK version string #define OPTION_USE_TCP true // TCP or UDP, use TCP #define OPTION_SERVER_PORT 5555 // Port #define OPTION_SERVER_ADDR {0, 0, 0, 0} // Bind addr, 0.0.0.0 = ANY @@ -20,17 +21,17 @@ #define OPTION_LOG_LEVEL 3 // Log level, 0 = no log, 1 = error, 2 = warning, 3 = info, 4 = debug //----------------------------------------------------------------------------------------------------- -// Floating average calculation class +// Demo floating average calculation class namespace floating_average { template class FloatingAverage { private: - std::array samples_; // Ring buffer for storing samples size_t current_index_; // Current position in the ring buffer size_t sample_count_; // Number of samples collected so far double sum_; // Running sum of all samples + std::array samples_; // Ring buffer for storing samples public: FloatingAverage(); @@ -40,16 +41,13 @@ template class FloatingAverage { template FloatingAverage::FloatingAverage() : samples_{}, current_index_(0), sample_count_(0), sum_(0.0) { - // Create a measurement event "avg_calc" for this member function - DaqCreateEvent(avg_calc); - + // Optional: Create a typedef for the FloatingAverage class in the A2L file if (A2lOnce()) { - // Register member variables for XCP measurement - // Using 'this' as the base address for relative mode - A2lSetRelativeAddrMode(avg_calc, this); - A2lCreateMeasurement(current_index_, "Current position in ring buffer"); - A2lCreateMeasurement(sample_count_, "Number of samples collected"); - A2lCreateMeasurement(sum_, "Running sum of all samples"); + A2lTypedefBegin(FloatingAverage, this, "Typedef for FloatingAverage<%u>", N); + A2lTypedefMeasurementComponent(current_index_, "Current position in the ring buffer"); + A2lTypedefMeasurementComponent(sample_count_, "Number of samples collected so far"); + A2lTypedefMeasurementComponent(sum_, "Running sum of all samples"); + A2lTypedefEnd(); } std::cout << "FloatingAverage<" << N << "> instance created" << std::endl; @@ -60,16 +58,6 @@ template double FloatingAverage::calculate(double input) { double average; // Current calculated average - if (A2lOnce()) { - - // Register local variables and parameters of this function - // Note: This forces the compiler to spill function parameters from registers to stack to make them accessible by XCP, it causes minimal runtime impact, but does not create - // undefined behaviour - A2lSetStackAddrMode(avg_calc); - A2lCreateMeasurement(input, "Input value for floating average"); - A2lCreateMeasurement(average, "Current calculated average"); - } - // Calculate the floating average over N samples if (sample_count_ >= N) { sum_ -= samples_[current_index_]; @@ -81,9 +69,15 @@ template double FloatingAverage::calculate(double input) { average = sum_ / static_cast(sample_count_); current_index_ = (current_index_ + 1) % N; - // Trigger XCP measurement event "avg_calc" - // Use relative addressing and provide this to make member variables accessible - DaqEventRelative(avg_calc, this); + // Create event 'avg_calc', register individual local or member variables and trigger the event + XcpDaqEventExt(avg_calc1, this, // + (input, "Input value for floating average", "V", 0.0, 1000.0), // + (average, "Current calculated average"), // + (current_index_, "Current position in ring buffer"), // + (sample_count_, "Number of samples collected"), // + (sum_, "Running sum of all samples") + + ); return average; } @@ -91,15 +85,16 @@ template double FloatingAverage::calculate(double input) { } // namespace floating_average //----------------------------------------------------------------------------------------------------- -// Calibration parameters for the random number generator +// Demo random number generator with calibration parameters +// Calibration parameters for the random number generator struct ParametersT { double min; // Minimum random number value double max; // Maximum random number value }; // Default parameter values -constexpr ParametersT kParameters = {.min = -1.0, .max = 1.0}; +const ParametersT kParameters = {.min = 2.0, .max = 3.0}; // A calibration segment wrapper for the parameters std::optional> gCalSeg; @@ -109,9 +104,8 @@ double random_number() { static unsigned int seed = 12345; seed = seed * 1103515245 + 12345; - // Lock access to calibration parameters RAII guard + // Lock access to calibration parameters with RAII guard "params" auto params = gCalSeg->lock(); - double random = params->min + ((seed / 65536) % 32768) / 32768.0 * (params->max - params->min); return random; }; @@ -121,7 +115,7 @@ double random_number() { // Signal handler for graceful exit on Ctrl+C std::atomic gRun{true}; void signal_handler(int signal) { - if (signal == SIGINT) { + if (signal == SIGINT || signal == SIGTERM) { gRun = false; } } @@ -129,6 +123,7 @@ void signal_handler(int signal) { int main() { std::signal(SIGINT, signal_handler); + std::signal(SIGTERM, signal_handler); std::cout << "\nXCP on Ethernet demo - simple C++ example\n" << std::endl; @@ -136,7 +131,7 @@ int main() { XcpSetLogLevel(OPTION_LOG_LEVEL); // Initialize the XCP singleton, activate XCP - XcpInit(true); + XcpInit(OPTION_PROJECT_NAME, OPTION_PROJECT_EPK, true /* activate */); // Initialize the XCP Server uint8_t addr[4] = OPTION_SERVER_ADDR; @@ -145,8 +140,8 @@ int main() { return 1; } - // Enable A2L generation - if (!A2lInit(OPTION_PROJECT_NAME, NULL, addr, OPTION_SERVER_PORT, OPTION_USE_TCP, A2L_MODE_WRITE_ALWAYS | A2L_MODE_FINALIZE_ON_CONNECT | A2L_MODE_AUTO_GROUPS)) { + // Enable runtime A2L generation for data declaration as code + if (!A2lInit(addr, OPTION_SERVER_PORT, OPTION_USE_TCP, A2L_MODE_WRITE_ONCE | A2L_MODE_FINALIZE_ON_CONNECT | A2L_MODE_AUTO_GROUPS)) { std::cerr << "Failed to initialize A2L generator" << std::endl; return 1; } @@ -155,27 +150,49 @@ int main() { // This calibration segment has a working page (RAM) and a reference page (FLASH), it creates a MEMORY_SEGMENT in the A2L file // It provides safe (thread safe against XCP modifications), lock-free and consistent access to the calibration parameters // It supports XCP/ECU independent page switching, checksum calculation and reinitialization (copy reference page to working page) - gCalSeg.emplace("Parameters", kParameters); + gCalSeg.emplace("Parameters", &kParameters); - // Add the calibration segment description as a typedef and an instance to the A2L file - A2lTypedefBegin(ParametersT, "A2L Typedef for ParametersT"); - A2lTypedefParameterComponent(min, ParametersT, "Minimum random number value", "", -100.0, 100.0); - A2lTypedefParameterComponent(max, ParametersT, "Maximum random number value", "", -100.0, 100.0); + // Register the calibration segment description as a typedef and an instance in the A2L file + A2lTypedefBegin(ParametersT, &kParameters, "Typedef for ParametersT"); + A2lTypedefParameterComponent(min, "Minimum random number value", "", -100.0, 100.0); + A2lTypedefParameterComponent(max, "Maximum random number value", "", -100.0, 100.0); A2lTypedefEnd(); gCalSeg->CreateA2lTypedefInstance("ParametersT", "Random number generator parameters"); - // Create a FloatingAverage calculator instance with 128 samples - floating_average::FloatingAverage<128> average; + // Create a FloatingAverage calculator instance with a 128 samples ring buffer + // May be allocated on stack or heap, both can be measured via XCP + // on stack + // floating_average::FloatingAverage<128> average128; + // on heap + auto average128 = new floating_average::FloatingAverage<128>(); + + // Optional: Register the complete FloatingAverage instance on heap as measurement with event average128 + DaqCreateEvent(average); + A2lSetRelativeAddrMode(average, average128); + A2lCreateTypedefReference(average128, FloatingAverage, "Instance average128 of FloatingAverage<128>"); // Main loop - std::cout << "Demo class instance created. Starting main loop... (Press Ctrl+C to exit)" << std::endl; + std::cout << "Starting main loop... (Press Ctrl+C to exit)" << std::endl; + uint16_t counter = 0; while (gRun) { - double current_average = average.calculate(random_number()); + counter++; + double voltage = random_number(); + double average_voltage = average128->calculate(voltage); - sleepUs(1000); + // Once create event "mainloop" and register measurements for the local variables 'voltage' and 'average_voltage' via event 'mainloop' + // Trigger the event "mainloop" to measure the local variables + XcpDaqEvent(mainloop, // + (counter, "Mainloop counter"), // + (voltage, "Input voltage", "V", 0.0, 1000.0), // + (average_voltage, "Calculated voltage floating average") // + ); + + // Optional: Trigger the event "average128" to measure the 'FloatingAverage' heap instance 'average128' + DaqTriggerEventExt(average, average128); - A2lFinalize(); // @@@@ Test: Manually finalize the A2L file to make it visible without XCP tool connect + sleepUs(1000); + A2lFinalize(); // @@@@ TEST: Manually finalize the A2L file to make it visible without XCP tool connect } // Cleanup diff --git a/examples/multi_thread_demo/CANape/CANape.ini b/examples/multi_thread_demo/CANape/CANape.ini index 8d9f45e5..9475e2bd 100644 --- a/examples/multi_thread_demo/CANape/CANape.ini +++ b/examples/multi_thread_demo/CANape/CANape.ini @@ -1,6 +1,6 @@ [!!!!!_CONSISTENCY_CHECK_START_SECTION_!!!!!] -GUID={A8F4AA53-6CCE-473B-8A10-B3E3F42AEB82} +GUID={928E89E6-DFA7-4650-BFC9-0678A52BF658} [FILE_INFO] Identification=CANape-Project-File @@ -14,8 +14,8 @@ PrgDate=16.06.2025 Description= CreationTime=21:03 CreationDate=07/07/2024 ; Month/Day/Year -ModificationTime=19:53 -ModificationDate=09/22/2025 ; Month/Day/Year +ModificationTime=15:56 +ModificationDate=11/07/2025 ; Month/Day/Year Protected=0 CurrentWindowsACP=1252 @@ -331,7 +331,7 @@ CREATION_FROM_MAPFILE_INDIVIDUAL=0 CREATION_FROM_MAPFILE_UPDATE_TREE=1 SN_SEPARATOR_LEFT=. @ SN_SEPARATOR_RIGHT=. -CACHE_SYNC_SHOW_SIMPLE_DIALOG=0 +CACHE_SYNC_SHOW_SIMPLE_DIALOG=1 CHECK_PROJECT_OPTIMIZATION=1 SAVE_NEW_MAPFILE_IF_NOT_FOUND=0 AXIS_TEMP_AUTOSCALE_MIN_INTERVAL_DRAW_UNITS_CNT=1 @@ -1262,7 +1262,7 @@ XCP_OPTIONAL_CMD_AVAILABLE_19=3 XCP_OPTIONAL_CMD_AVAILABLE_20=3 XCP_OPTIONAL_CMD_AVAILABLE_21=3 XCP_OPTIONAL_CMD_AVAILABLE_22=3 -XCP_OPTIONAL_CMD_AVAILABLE_23=2 +XCP_OPTIONAL_CMD_AVAILABLE_23=3 XCP_OPTIONAL_CMD_AVAILABLE_24=2 XCP_OPTIONAL_CMD_AVAILABLE_25=3 XCP_OPTIONAL_CMD_AVAILABLE_26=3 @@ -1307,9 +1307,9 @@ XCP_OPTIONAL_CMD_AUTO_LEARNING=1 XCP_OPTIONAL_SUB_CMD_AVAILABLE_0=3 XCP_OPTIONAL_SUB_CMD_AVAILABLE_1=2 XCP_OPTIONAL_SUB_CMD_AVAILABLE_2=2 -XCP_DAQ_PROPERTIES=0x15 +XCP_DAQ_PROPERTIES=0x13 XCP_DAQ_KEY_BYTE=0xC0 -XCP_DAQ_TIMESTAMP_MODE=0x3C +XCP_DAQ_TIMESTAMP_MODE=0x0C XCP_DAQ_TIMESTAMP_TICKS=1 XCP_MIN_DAQ=0 XCP_MAX_DAQ=0 @@ -1379,14 +1379,14 @@ BEG_CAL_SERVICE=0x1f1 END_CAL_SERVICE=0x2f1 TEST_CONNECTION_PERIOD=0 OVERRUN_HANDLING=0 -EVENT_COUNT=18 +EVENT_COUNT=19 EVENT_CHANNEL_0=0x0000 -EVENT_CYCLE_0=0 -EVENT_SAMPLE_UNIT_0=3 +EVENT_CYCLE_0=100 +EVENT_SAMPLE_UNIT_0=7 EVENT_MODE_0=4 EVENT_PRIO_0=0 EVENT_MAX_DAQ_LIST_0=255 -EVENT_NAME_0=task_1 +EVENT_NAME_0=async EVENT_MULTISAMPLES_0=0 IGNORE_FIX_EVENTS=0 ECU_CYCLE_TIME=0 @@ -1397,8 +1397,8 @@ DETECT_SYNC_PULSE=0 GENERATE_SYNC_PULSE=0 TIME_CORR_MULTICAST=0 DAQ_TIMEOUT=0 -DAQ_RESUME_SUPPORTED=1 -DAQ_PRESCALER_SUPPORTED=0 +DAQ_RESUME_SUPPORTED=0 +DAQ_PRESCALER_SUPPORTED=1 DAQ_SINGLE_EVENT=0 DTO_SINGLE_EXT=0 DOUBLE_AS_FLOAT=0 @@ -1413,7 +1413,7 @@ PSEUDO_CAN_ID_START=2415919104 DSP_MODE=0 DAQ_LIST_AUTODETECT=1 DAQ_COUNT=0 -DAQ_CONFIG_ID=51414 +DAQ_CONFIG_ID=51470 DAQ_START_STOP_ALL_DISABLED=0 INIT_CAL_PAGE_SEGMENTWISE=0 CALRAM_CHECK_INITIAL_PAGE=1 @@ -1513,13 +1513,13 @@ FLASH_PAGE_ADDRESS_MAPPING_ENABLED=1 MEMORY_SEGMENT_COUNT=2 MEMORY_SEGMENT_NAME_1=epk MEMORY_SEGMENT_TYPE_1=FLASH,DATA,INTERN -MEMORY_SEGMENT_SIZE_1=0x00000015 +MEMORY_SEGMENT_SIZE_1=0x00000008 MEMORY_SEGMENT_ADDR_1=0x80000000 MEMORY_SEGMENT_ADDR_EXT_1=0x00 MEMORY_SEGMENT_ATTRIBUTE_1=0x00000000 MEMORY_SEGMENT_FLASH_OFFSET_1=0x00000000 MEMORY_SEGMENT_ADDRESS_MAPPING_1= -MEMORY_SEGMENT_NAME_2=Parameters +MEMORY_SEGMENT_NAME_2=params MEMORY_SEGMENT_TYPE_2=FLASH,DATA,INTERN MEMORY_SEGMENT_SIZE_2=0x00000038 MEMORY_SEGMENT_ADDR_2=0x80010000 @@ -1529,13 +1529,13 @@ MEMORY_SEGMENT_FLASH_OFFSET_2=0x00000000 MEMORY_SEGMENT_ADDRESS_MAPPING_2= CALRAM_SECTOR_NAME_1=epk CALRAM_SECTOR_TYPE_1=FLASH,DATA,INTERN -CALRAM_SECTOR_SIZE_1=0x00000015 +CALRAM_SECTOR_SIZE_1=0x00000008 CALRAM_SECTOR_ADDR_1=0x80000000 CALRAM_SECTOR_ADDR_EXT_1=0x00 CALRAM_SECTOR_ATTRIBUTE_1=0x00000000 CALRAM_SECTOR_FLASH_OFFSET_1=0x00000000 CALRAM_SECTOR_ADDRESS_MAPPING_1= -CALRAM_SECTOR_NAME_2=Parameters +CALRAM_SECTOR_NAME_2=params CALRAM_SECTOR_TYPE_2=FLASH,DATA,INTERN CALRAM_SECTOR_SIZE_2=0x00000038 CALRAM_SECTOR_ADDR_2=0x80010000 @@ -1550,7 +1550,7 @@ TRANSPORT_LAYER_INSTANCE_NAME= PROTOCOL_TYPE=4 PACKET_CTR=0 TRANSPORT_LAYER_VERSION=260 -HOST=192.168.8.133 +HOST=192.168.0.101 PORT=5555 LOCAL_PORT=0 TRANSPORT_LAYER_PROTOCOL=1 @@ -1623,7 +1623,7 @@ EVENT_SAMPLE_UNIT_1=3 EVENT_MODE_1=4 EVENT_PRIO_1=0 EVENT_MAX_DAQ_LIST_1=255 -EVENT_NAME_1=task_2 +EVENT_NAME_1=task_1 EVENT_MULTISAMPLES_1=0 EVENT_MIN_CYCLE_TIME_CYCLE_1=0 EVENT_MIN_CYCLE_TIME_UNIT_1=9 @@ -1676,14 +1676,14 @@ EVENT_MAX_DAQ_LIST_6=255 EVENT_MAX_DAQ_LIST_7=255 EVENT_MAX_DAQ_LIST_8=255 EVENT_MAX_DAQ_LIST_9=255 -EVENT_NAME_2=task_3 -EVENT_NAME_3=task_4 -EVENT_NAME_4=task_5 -EVENT_NAME_5=task_6 -EVENT_NAME_6=task_7 -EVENT_NAME_7=task_8 -EVENT_NAME_8=ctx_4 -EVENT_NAME_9=ctx_1 +EVENT_NAME_2=task_2 +EVENT_NAME_3=task_3 +EVENT_NAME_4=task_4 +EVENT_NAME_5=task_5 +EVENT_NAME_6=ctx_1 +EVENT_NAME_7=task_6 +EVENT_NAME_8=task_7 +EVENT_NAME_9=task_8 EVENT_MULTISAMPLES_2=0 EVENT_MULTISAMPLES_3=0 EVENT_MULTISAMPLES_4=0 @@ -1758,13 +1758,13 @@ EVENT_MAX_DAQ_LIST_13=255 EVENT_MAX_DAQ_LIST_14=255 EVENT_MAX_DAQ_LIST_15=255 EVENT_MAX_DAQ_LIST_16=255 -EVENT_NAME_10=ctx_2 +EVENT_NAME_10=ctx_3 EVENT_NAME_11=clip -EVENT_NAME_12=ctx_7 -EVENT_NAME_13=ctx_8 -EVENT_NAME_14=filter -EVENT_NAME_15=ctx_5 -EVENT_NAME_16=ctx_3 +EVENT_NAME_12=ctx_5 +EVENT_NAME_13=ctx_6 +EVENT_NAME_14=ctx_2 +EVENT_NAME_15=ctx_4 +EVENT_NAME_16=ctx_7 EVENT_MULTISAMPLES_10=0 EVENT_MULTISAMPLES_11=0 EVENT_MULTISAMPLES_12=0 @@ -1805,8 +1805,8 @@ EVENT_PRIO_17=0 EVENT_PRIO_18=0 EVENT_MAX_DAQ_LIST_17=255 EVENT_MAX_DAQ_LIST_18=255 -EVENT_NAME_17=ctx_6 -EVENT_NAME_18=func_c +EVENT_NAME_17=ctx_8 +EVENT_NAME_18=filter EVENT_MULTISAMPLES_17=0 EVENT_MULTISAMPLES_18=0 EVENT_MIN_CYCLE_TIME_CYCLE_17=0 @@ -2224,33 +2224,33 @@ MESSAGE_INFO=0 ECDM_DEVICE=0 [ModuleExplorer_xcp_demo] -ScreenDPIinSection=96 +ScreenDPIinSection=192 POSX=0 POSX_dpi96=0 POSY=0 POSY_dpi96=0 -SIZEX=875 +SIZEX=1750 SIZEX_dpi96=875 -SIZEY=700 +SIZEY=1400 SIZEY_dpi96=700 SHOWTOOLBAR=1 SHOWSTATUSBAR=1 SHOWGRID=0 -RIGHTPANE2HEIGHT=-1 +RIGHTPANE2HEIGHT=-2 RIGHTPANE2HEIGHT_dpi96=-1 -TREEX=225 +TREEX=450 TREEX_dpi96=225 -TREEY=634 -TREEY_dpi96=634 +TREEY=1286 +TREEY_dpi96=643 ACTIVEPANE=1 -SELECTED_TREENODE=Netzwerke/ETH_Network_Network/xcp_demo_Device/Protokoll -FIRSTVISIBLE_TREENODE=Netzwerke +SELECTED_TREENODE=Networks/ETH_Network_Network/xcp_demo_Device/Protocol/Transport Layer +FIRSTVISIBLE_TREENODE=Networks TREEEXPAND_COUNT=5 -TREEEXPAND_0=Netzwerke -TREEEXPAND_1=Netzwerke/ETH_Network_Network -TREEEXPAND_2=Netzwerke/ETH_Network_Network/xcp_demo_Device -TREEEXPAND_3=Netzwerke/ETH_Network_Network/xcp_demo_Device/Protokoll -TREEEXPAND_4=Kanle +TREEEXPAND_0=Networks +TREEEXPAND_1=Networks/ETH_Network_Network +TREEEXPAND_2=Networks/ETH_Network_Network/xcp_demo_Device +TREEEXPAND_3=Networks/ETH_Network_Network/xcp_demo_Device/Protocol +TREEEXPAND_4=Channels LAST_FOCUSED_LISTCOLUMN=0 LAST_FOCUSED_LISTINDEX=0 LAST_TOP_LISTINDEX=0 @@ -3209,6 +3209,64 @@ SortUpward=1 [MEASUREMENT_DISPLAY_DYNAMIC_COLUMNS] Count=0 +[DEVICE_EXPLORER_COLUMNLIST_CHANNELS] +ScreenDPIinSection=192 +ColumnCount=4 +Column_0=0, 306 +Column_0_dpi96=0, 153 +Column_1=1245185, 132 +Column_1_dpi96=1245185, 66 +Column_2=1245186, 66 +Column_2_dpi96=1245186, 33 +Column_3=1245187, 106 +Column_3_dpi96=1245187, 53 +ColumnIdSort=-1 +SortUpward=1 + +[DEVICE_EXPLORER_COLUMNLIST_DEVICES] +ScreenDPIinSection=192 +ColumnCount=10 +Column_0=34, 96 +Column_0_dpi96=34, 48 +Column_1=0, 460 +Column_1_dpi96=0, 230 +Column_2=131078, 160 +Column_2_dpi96=131078, 80 +Column_3=131103, 100 +Column_3_dpi96=131103, 50 +Column_4=131079, 100 +Column_4_dpi96=131079, 50 +Column_5=262145, 240 +Column_5_dpi96=262145, 120 +Column_6=131085, 200 +Column_6_dpi96=131085, 100 +Column_7=131080, 240 +Column_7_dpi96=131080, 120 +Column_8=131081, 160 +Column_8_dpi96=131081, 80 +Column_9=196609, 100 +Column_9_dpi96=196609, 50 +ColumnIdSort=-1 +SortUpward=1 + +[DEVICE_EXPLORER_COLUMNLIST_NETWORKS] +ScreenDPIinSection=192 +ColumnCount=6 +Column_0=34, 64 +Column_0_dpi96=34, 32 +Column_1=0, 304 +Column_1_dpi96=0, 152 +Column_2=983041, 192 +Column_2_dpi96=983041, 96 +Column_3=983042, 530 +Column_3_dpi96=983042, 265 +Column_4=983043, 252 +Column_4_dpi96=983043, 126 +Column_5=983044, 300 +Column_5_dpi96=983044, 150 +ColumnIdSort=-1 +SortUpward=1 + [COLOR_SCHEME_LIST] COLOR_SCHEME0=COLOR_SCHEMEUSER_DEFINED SCHEMES_COUNT=1 @@ -3344,67 +3402,9 @@ MODE=12 VALUE_COUNT=0 HISTORY_COUNT=0 -[DEVICE_EXPLORER_COLUMNLIST_CHANNELS] -ScreenDPIinSection=192 -ColumnCount=4 -Column_0=0, 306 -Column_0_dpi96=0, 153 -Column_1=1245185, 132 -Column_1_dpi96=1245185, 66 -Column_2=1245186, 66 -Column_2_dpi96=1245186, 33 -Column_3=1245187, 106 -Column_3_dpi96=1245187, 53 -ColumnIdSort=-1 -SortUpward=1 - -[DEVICE_EXPLORER_COLUMNLIST_DEVICES] -ScreenDPIinSection=192 -ColumnCount=10 -Column_0=34, 96 -Column_0_dpi96=34, 48 -Column_1=0, 460 -Column_1_dpi96=0, 230 -Column_2=131078, 160 -Column_2_dpi96=131078, 80 -Column_3=131103, 100 -Column_3_dpi96=131103, 50 -Column_4=131079, 100 -Column_4_dpi96=131079, 50 -Column_5=262145, 240 -Column_5_dpi96=262145, 120 -Column_6=131085, 200 -Column_6_dpi96=131085, 100 -Column_7=131080, 240 -Column_7_dpi96=131080, 120 -Column_8=131081, 160 -Column_8_dpi96=131081, 80 -Column_9=196609, 100 -Column_9_dpi96=196609, 50 -ColumnIdSort=-1 -SortUpward=1 - -[DEVICE_EXPLORER_COLUMNLIST_NETWORKS] -ScreenDPIinSection=192 -ColumnCount=6 -Column_0=34, 64 -Column_0_dpi96=34, 32 -Column_1=0, 304 -Column_1_dpi96=0, 152 -Column_2=983041, 192 -Column_2_dpi96=983041, 96 -Column_3=983042, 530 -Column_3_dpi96=983042, 265 -Column_4=983043, 252 -Column_4_dpi96=983043, 126 -Column_5=983044, 300 -Column_5_dpi96=983044, 150 -ColumnIdSort=-1 -SortUpward=1 - [MEASUREMENT_0] FileId=Measurement1 -MeasurementId=0e46af22-7757-479f-bf44-9a84069fe857 +MeasurementId=3b78161b-dfdd-4ab8-aafa-f3366ab5e8b3 LoadMeasurementSetting=3 [SIGNAL_COLOR_FUNCTION_LIST_1] @@ -3501,5 +3501,5 @@ Comment= Count=0 [~~~~~_CONSISTENCY_CHECK_END_SECTION_~~~~~] -GUID={A8F4AA53-6CCE-473B-8A10-B3E3F42AEB82} +GUID={928E89E6-DFA7-4650-BFC9-0678A52BF658} diff --git a/examples/multi_thread_demo/CANape/xcp_demo.cna b/examples/multi_thread_demo/CANape/xcp_demo.cna index de064f73..73d51934 100644 --- a/examples/multi_thread_demo/CANape/xcp_demo.cna +++ b/examples/multi_thread_demo/CANape/xcp_demo.cna @@ -10,8 +10,8 @@ PrgDate=16.06.2025 Description= CreationTime=12:42 CreationDate=09/02/2025 ; Month/Day/Year -ModificationTime=19:52 -ModificationDate=09/22/2025 ; Month/Day/Year +ModificationTime=15:56 +ModificationDate=11/07/2025 ; Month/Day/Year Protected=0 CurrentWindowsACP=1252 @@ -381,7 +381,7 @@ MeaCfgLabellistName= Module=xcp_demo Name=task_1.channel1 Disabled=0 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -396,7 +396,7 @@ DisplayCount=1 Module=xcp_demo Name=task_7.counter Disabled=1 -Mode=2147483654 +Mode=2147483656 Rate=0 ModeIsDefault=1 Row=0 @@ -411,7 +411,7 @@ DisplayCount=0 Module=xcp_demo Name=task_8.counter Disabled=1 -Mode=2147483655 +Mode=2147483657 Rate=0 ModeIsDefault=1 Row=0 @@ -426,7 +426,7 @@ DisplayCount=0 Module=xcp_demo Name=$ctx_1$ctx_1.span_id Disabled=0 -Mode=2147483657 +Mode=2147483654 Rate=0 ModeIsDefault=1 Row=0 @@ -534,7 +534,7 @@ GUID=DISPLAY_4e3cded0-56b0-492e-be1a-3f69e8cb7781 Module=xcp_demo Name=$ctx_1$ctx_1.level Disabled=0 -Mode=2147483657 +Mode=2147483654 Rate=0 ModeIsDefault=1 Row=0 @@ -656,7 +656,7 @@ GUID=DISPLAY_8913d366-32a4-449c-b709-ac8ba65ad0a0 Module=xcp_demo Name=filtered_input Disabled=0 -Mode=2147483662 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -717,7 +717,7 @@ GUID=DISPLAY_9aa29a9a-79b3-4a9b-935f-07e9325c9190 Module=xcp_demo Name=filter.span_dt Disabled=0 -Mode=2147483662 +Mode=2147483666 Rate=0 ModeIsDefault=1 Row=0 @@ -778,7 +778,7 @@ GUID=DISPLAY_53144636-11f3-4e02-94bd-33ec6b620c14 Module=xcp_demo Name=task_1.array Disabled=0 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -801,7 +801,7 @@ DisplayCount=0 Module=xcp_demo Name=task_2.array Disabled=0 -Mode=2147483649 +Mode=2147483650 Rate=0 ModeIsDefault=1 Row=0 @@ -824,7 +824,7 @@ DisplayCount=0 Module=xcp_demo Name=task_3.array Disabled=0 -Mode=2147483650 +Mode=2147483651 Rate=0 ModeIsDefault=1 Row=0 @@ -893,7 +893,7 @@ GUID=DISPLAY_a4f5f8d7-8ba0-4386-9e76-f3711d881a40 Module=xcp_demo Name=task_1.channel2 Disabled=0 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -908,7 +908,7 @@ DisplayCount=1 Module=xcp_demo Name=task_4.array Disabled=1 -Mode=2147483651 +Mode=2147483652 Rate=0 ModeIsDefault=1 Row=0 @@ -931,7 +931,7 @@ DisplayCount=0 Module=xcp_demo Name=task_5.array Disabled=1 -Mode=2147483652 +Mode=2147483653 Rate=0 ModeIsDefault=1 Row=0 @@ -954,7 +954,7 @@ DisplayCount=0 Module=xcp_demo Name=task_6.array Disabled=1 -Mode=2147483653 +Mode=2147483655 Rate=0 ModeIsDefault=1 Row=0 @@ -977,7 +977,7 @@ DisplayCount=0 Module=xcp_demo Name=task_7.array Disabled=1 -Mode=2147483654 +Mode=2147483656 Rate=0 ModeIsDefault=1 Row=0 @@ -1000,7 +1000,7 @@ DisplayCount=0 Module=xcp_demo Name=task_8.array Disabled=1 -Mode=2147483655 +Mode=2147483657 Rate=0 ModeIsDefault=1 Row=0 @@ -1069,7 +1069,7 @@ GUID=DISPLAY_eea26a1a-ae7d-44cc-aa2e-bf3e72735a74 Module=xcp_demo Name=task_1.channel3 Disabled=0 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -1130,7 +1130,7 @@ GUID=DISPLAY_ae24ddd8-5e0d-4ecc-968a-353b317cb026 Module=xcp_demo Name=task_1.counter Disabled=0 -Mode=2147483648 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 @@ -1191,7 +1191,7 @@ GUID=DISPLAY_515e6f76-2179-4c9c-a8d1-41992789e3d9 Module=xcp_demo Name=task_2.counter Disabled=0 -Mode=2147483649 +Mode=2147483650 Rate=0 ModeIsDefault=1 Row=0 @@ -1252,7 +1252,7 @@ GUID=DISPLAY_a125138b-ab1a-44a1-b0d9-276a36313138 Module=xcp_demo Name=task_3.counter Disabled=0 -Mode=2147483650 +Mode=2147483651 Rate=0 ModeIsDefault=1 Row=0 @@ -1313,7 +1313,7 @@ GUID=DISPLAY_a74504ed-25c7-4e71-a48e-fff1d58b5ef9 Module=xcp_demo Name=task_4.counter Disabled=0 -Mode=2147483651 +Mode=2147483652 Rate=0 ModeIsDefault=1 Row=0 @@ -1374,7 +1374,7 @@ GUID=DISPLAY_4d53bd9f-9fb8-4489-9326-9434d7453991 Module=xcp_demo Name=task_5.counter Disabled=1 -Mode=2147483652 +Mode=2147483653 Rate=0 ModeIsDefault=1 Row=0 @@ -1389,7 +1389,7 @@ DisplayCount=0 Module=xcp_demo Name=task_6.counter Disabled=1 -Mode=2147483653 +Mode=2147483655 Rate=0 ModeIsDefault=1 Row=0 @@ -1466,7 +1466,7 @@ VmdmDescription= Count=0 [Module_xcp_demo] -EVENT_COUNT=18 +EVENT_COUNT=19 EVENT_CHANNEL_0=0x0000 EVENT_CHANNEL_1=0x0001 EVENT_CHANNEL_2=0x0002 @@ -1485,7 +1485,8 @@ EVENT_CHANNEL_14=0x000E EVENT_CHANNEL_15=0x000F EVENT_CHANNEL_16=0x0010 EVENT_CHANNEL_17=0x0011 -EVENT_CYCLE_0=0 +EVENT_CHANNEL_18=0x0012 +EVENT_CYCLE_0=100 EVENT_CYCLE_1=0 EVENT_CYCLE_2=0 EVENT_CYCLE_3=0 @@ -1503,7 +1504,8 @@ EVENT_CYCLE_14=0 EVENT_CYCLE_15=0 EVENT_CYCLE_16=0 EVENT_CYCLE_17=0 -EVENT_SAMPLE_UNIT_0=3 +EVENT_CYCLE_18=0 +EVENT_SAMPLE_UNIT_0=7 EVENT_SAMPLE_UNIT_1=3 EVENT_SAMPLE_UNIT_2=3 EVENT_SAMPLE_UNIT_3=3 @@ -1521,6 +1523,7 @@ EVENT_SAMPLE_UNIT_14=3 EVENT_SAMPLE_UNIT_15=3 EVENT_SAMPLE_UNIT_16=3 EVENT_SAMPLE_UNIT_17=3 +EVENT_SAMPLE_UNIT_18=3 EVENT_MODE_0=4 EVENT_MODE_1=4 EVENT_MODE_2=4 @@ -1539,6 +1542,7 @@ EVENT_MODE_14=4 EVENT_MODE_15=4 EVENT_MODE_16=4 EVENT_MODE_17=4 +EVENT_MODE_18=4 EVENT_PRIO_0=0 EVENT_PRIO_1=0 EVENT_PRIO_2=0 @@ -1557,6 +1561,7 @@ EVENT_PRIO_14=0 EVENT_PRIO_15=0 EVENT_PRIO_16=0 EVENT_PRIO_17=0 +EVENT_PRIO_18=0 EVENT_MAX_DAQ_LIST_0=255 EVENT_MAX_DAQ_LIST_1=255 EVENT_MAX_DAQ_LIST_2=255 @@ -1575,24 +1580,26 @@ EVENT_MAX_DAQ_LIST_14=255 EVENT_MAX_DAQ_LIST_15=255 EVENT_MAX_DAQ_LIST_16=255 EVENT_MAX_DAQ_LIST_17=255 -EVENT_NAME_0=task_1 -EVENT_NAME_1=task_2 -EVENT_NAME_2=task_3 -EVENT_NAME_3=task_4 -EVENT_NAME_4=task_5 -EVENT_NAME_5=task_6 -EVENT_NAME_6=task_7 -EVENT_NAME_7=task_8 -EVENT_NAME_8=ctx_4 -EVENT_NAME_9=ctx_1 -EVENT_NAME_10=ctx_2 +EVENT_MAX_DAQ_LIST_18=255 +EVENT_NAME_0=async +EVENT_NAME_1=task_1 +EVENT_NAME_2=task_2 +EVENT_NAME_3=task_3 +EVENT_NAME_4=task_4 +EVENT_NAME_5=task_5 +EVENT_NAME_6=ctx_1 +EVENT_NAME_7=task_6 +EVENT_NAME_8=task_7 +EVENT_NAME_9=task_8 +EVENT_NAME_10=ctx_3 EVENT_NAME_11=clip -EVENT_NAME_12=ctx_7 -EVENT_NAME_13=ctx_8 -EVENT_NAME_14=filter -EVENT_NAME_15=ctx_5 -EVENT_NAME_16=ctx_3 -EVENT_NAME_17=ctx_6 +EVENT_NAME_12=ctx_5 +EVENT_NAME_13=ctx_6 +EVENT_NAME_14=ctx_2 +EVENT_NAME_15=ctx_4 +EVENT_NAME_16=ctx_7 +EVENT_NAME_17=ctx_8 +EVENT_NAME_18=filter EVENT_MIN_CYCLE_TIME_CYCLE_0=0 EVENT_MIN_CYCLE_TIME_CYCLE_1=0 EVENT_MIN_CYCLE_TIME_CYCLE_2=0 @@ -1611,6 +1618,7 @@ EVENT_MIN_CYCLE_TIME_CYCLE_14=0 EVENT_MIN_CYCLE_TIME_CYCLE_15=0 EVENT_MIN_CYCLE_TIME_CYCLE_16=0 EVENT_MIN_CYCLE_TIME_CYCLE_17=0 +EVENT_MIN_CYCLE_TIME_CYCLE_18=0 EVENT_MIN_CYCLE_TIME_UNIT_0=9 EVENT_MIN_CYCLE_TIME_UNIT_1=9 EVENT_MIN_CYCLE_TIME_UNIT_2=9 @@ -1629,6 +1637,7 @@ EVENT_MIN_CYCLE_TIME_UNIT_14=9 EVENT_MIN_CYCLE_TIME_UNIT_15=9 EVENT_MIN_CYCLE_TIME_UNIT_16=9 EVENT_MIN_CYCLE_TIME_UNIT_17=9 +EVENT_MIN_CYCLE_TIME_UNIT_18=9 EVENT_MULTISAMPLES_0=0 EVENT_MULTISAMPLES_1=0 EVENT_MULTISAMPLES_2=0 @@ -1647,6 +1656,7 @@ EVENT_MULTISAMPLES_14=0 EVENT_MULTISAMPLES_15=0 EVENT_MULTISAMPLES_16=0 EVENT_MULTISAMPLES_17=0 +EVENT_MULTISAMPLES_18=0 EVENT_DPM_SUPPORTED_0=0 EVENT_DPM_SUPPORTED_1=0 EVENT_DPM_SUPPORTED_2=0 @@ -1665,6 +1675,7 @@ EVENT_DPM_SUPPORTED_14=0 EVENT_DPM_SUPPORTED_15=0 EVENT_DPM_SUPPORTED_16=0 EVENT_DPM_SUPPORTED_17=0 +EVENT_DPM_SUPPORTED_18=0 IGNORE_FIX_EVENTS=0 [OPTIONS] @@ -1672,11 +1683,11 @@ WindowTextExtended=1 WindowTextExtendedNew=1 WindowSymbols=1 GlobalCursor=1 -GlobalCursorTime=15764 -GlobalCursorTimeNs=15764900458 +GlobalCursorTime=6120 +GlobalCursorTimeNs=6120116166 GlobalTimeAxis=1 -GlobalTimeAxisStartTime=6146047538 -GlobalTimeAxisEndTime=6147968221 +GlobalTimeAxisStartTime=0 +GlobalTimeAxisEndTime=14094876792 MainWindowPos=1, 387, 520, 2826, 1464 ;cmd, x, y, w, h [PAR_COMMENT] @@ -1895,10 +1906,10 @@ DisplayMask=1 ; pages 1 [WINDOW_10] XLen=56512 -XMin=6146 -XMinNs=6146047538 -XMax=6147 -XMaxNs=6147968221 +XMin=0 +XMinNs=0 +XMax=14094 +XMaxNs=14094876792 Grid=1 Mark=0 YValue=1 @@ -1932,7 +1943,7 @@ YAxisDynScaleEnabled=0 YAxisDynScaleEnlarge=25 TimeStickToZero=0 XYModeRedrawEnabled=0 -MARKER_TIME_1=15764900458 +MARKER_TIME_1=6120116166 MARKER_TIME_2=1565459359 OscilloscopeEnabled=0 OsciEventCount=0 @@ -2007,8 +2018,8 @@ COL_0_dpi96=31, 90 XLen=16194 XMin=0 XMinNs=0 -XMax=16554 -XMaxNs=16554195480 +XMax=14094 +XMaxNs=14094876792 Grid=1 Mark=1 YValue=1 @@ -2042,7 +2053,7 @@ YAxisDynScaleEnabled=0 YAxisDynScaleEnlarge=25 TimeStickToZero=0 XYModeRedrawEnabled=0 -MARKER_TIME_1=29219534083 +MARKER_TIME_1=6120116166 MARKER_TIME_2=15000000000 OscilloscopeEnabled=0 OsciEventCount=0 @@ -2121,7 +2132,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_9f8314c4-8ef0-4f62-8e68-51d40c4bb536 +GUID=DISPLAY_6e098209-72d1-4dad-beb2-f24f30389fa1 [WINDOW_1_OBJECT_2] Type=2 @@ -2170,7 +2181,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_9758f144-5d26-4e96-aec2-a08e096f3091 +GUID=DISPLAY_a8e36f54-07b0-4b7d-a7da-467638abc151 [WINDOW_1_OBJECT_3] Type=2 @@ -2219,7 +2230,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_d330de8c-7dde-435a-afbc-5e33177ba50c +GUID=DISPLAY_bfabe87a-0c62-44ee-b09d-67f340a32690 [WINDOW_1_OBJECT_4] Type=2 @@ -2268,7 +2279,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_5ca61743-fd02-4e7b-af3b-e64169aa7ccd +GUID=DISPLAY_ed83e608-72d0-442e-8681-d2f0e56b3010 [WINDOW_1_OBJECT_5] Type=2 @@ -2317,7 +2328,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_3e178d17-542d-4b2d-bc13-23ad707a9465 +GUID=DISPLAY_03e0a616-ba1d-41a8-9831-d01b59c7de50 [WINDOW_1_OBJECT_6] Type=2 @@ -2366,7 +2377,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_f89707e9-3b13-4a4d-a105-6c6124307131 +GUID=DISPLAY_e0de9887-a60d-407e-b7ca-9fceea25d6bd [WINDOW_1_OBJECT_7] Type=2 @@ -2415,7 +2426,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_0f0f2d39-98c4-4988-b708-b271909bc446 +GUID=DISPLAY_c09d7aa5-7ad3-480e-8671-e33c7061d72b [WINDOW_1_OBJECT_8] Type=2 @@ -2464,7 +2475,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_83f863cb-960d-4847-8974-41b2ae812997 +GUID=DISPLAY_3d599b39-5080-4efe-b8ce-6a817bbead96 [WINDOW_2] ComponentCount=2 @@ -2486,8 +2497,8 @@ DisplayMask=1 ; pages 1 XLen=16194 XMin=0 XMinNs=0 -XMax=16554 -XMaxNs=16554195480 +XMax=14094 +XMaxNs=14094876792 Grid=1 Mark=1 YValue=2 @@ -2521,7 +2532,7 @@ YAxisDynScaleEnabled=0 YAxisDynScaleEnlarge=25 TimeStickToZero=0 XYModeRedrawEnabled=0 -MARKER_TIME_1=29219534083 +MARKER_TIME_1=6120116166 MARKER_TIME_2=1565459359 OscilloscopeEnabled=0 OsciEventCount=0 @@ -2700,10 +2711,10 @@ DisplayMask=2 ; pages 2 [WINDOW_8] XLen=77785 -XMin=6146 -XMinNs=6146047538 -XMax=6147 -XMaxNs=6147968221 +XMin=0 +XMinNs=0 +XMax=14094 +XMaxNs=14094876792 Grid=1 Mark=1 YValue=2 @@ -2737,7 +2748,7 @@ YAxisDynScaleEnabled=0 YAxisDynScaleEnlarge=25 TimeStickToZero=0 XYModeRedrawEnabled=0 -MARKER_TIME_1=15764900458 +MARKER_TIME_1=6120116166 MARKER_TIME_2=1565459359 OscilloscopeEnabled=0 OsciEventCount=0 diff --git a/examples/multi_thread_demo/CANape/xcp_demo_autodetect.a2l b/examples/multi_thread_demo/CANape/xcp_demo_autodetect.a2l index e97f7c7f..25ca20dc 100644 --- a/examples/multi_thread_demo/CANape/xcp_demo_autodetect.a2l +++ b/examples/multi_thread_demo/CANape/xcp_demo_autodetect.a2l @@ -1,7 +1,7 @@ ASAP2_VERSION 1 71 /begin PROJECT multi_thread_demo "" -/begin HEADER "" VERSION "1.0" PROJECT_NO VECTOR /end HEADER +/begin HEADER "" VERSION "1.0" PROJECT_NO XCPLITE__CASDD /end HEADER /begin MODULE multi_thread_demo "" @@ -20,7 +20,7 @@ ALIGNMENT_INT64 1 -/* Segment relative addressing mode: calseg=Parameters */ +/* Segment relative addressing mode: calseg=params */ /begin CHARACTERISTIC params.counter_max "Max counter value, wrap around" VALUE 0x80010000 U16 0 NO_COMPU_METHOD 0 10000 /end CHARACTERISTIC /begin CHARACTERISTIC params.ampl "Amplitude" VALUE 0x80010008 F64 0 NO_COMPU_METHOD 0 100 PHYS_UNIT "Volt" /end CHARACTERISTIC /begin CHARACTERISTIC params.period "Period" VALUE 0x80010010 F64 0 NO_COMPU_METHOD 0.1 10 PHYS_UNIT "s" /end CHARACTERISTIC @@ -30,108 +30,99 @@ ALIGNMENT_INT64 1 /begin CHARACTERISTIC params.delay_us "task delay time in us" VALUE 0x80010030 U32 0 NO_COMPU_METHOD 0 1e+06 PHYS_UNIT "us" /end CHARACTERISTIC /begin CHARACTERISTIC params.run "stop task" VALUE 0x80010034 U8 0 NO_COMPU_METHOD 0 1 /end CHARACTERISTIC -/* Stack frame relative addressing mode: event=task (0), addr_ext=2 */ -/begin MEASUREMENT task_1.counter "task loop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0xFB9E ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_1.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0xFB88 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_1.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0xFB80 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_1.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0xFB78 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin CHARACTERISTIC task_1.array "task array (to increase measurement workload)" VAL_BLK 0xFBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC - -/* Stack frame relative addressing mode: event=task (3), addr_ext=2 */ -/begin MEASUREMENT task_4.counter "task loop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x3FB9E ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_4.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x3FB88 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_4.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x3FB80 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_4.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x3FB78 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin CHARACTERISTIC task_4.array "task array (to increase measurement workload)" VAL_BLK 0x3FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC - -/* Relative addressing mode: event=ctx_4 (8), addr_ext=3 */ -/begin INSTANCE ctx_4 "Thread local context" tXcpContext 0x80000 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x8 /end DAQ_EVENT /end IF_DATA /end INSTANCE +/* Stack frame relative addressing mode: event=task_1 (1), addr_ext=2 */ +/begin MEASUREMENT task_1.counter "task loop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x1FB9E ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_1.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x1FB88 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_1.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x1FB80 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_1.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x1FB78 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin CHARACTERISTIC task_1.array "task array (to increase measurement workload)" VAL_BLK 0x1FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC /begin TYPEDEF_STRUCTURE tXcpContext "A2L typedef for tXcpContext" 0x2C /begin STRUCTURE_COMPONENT span_id M_span_id 0x24 /end STRUCTURE_COMPONENT - /begin STRUCTURE_COMPONENT level M_U32 0x28 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT level M_level 0x28 /end STRUCTURE_COMPONENT /end TYPEDEF_STRUCTURE -/* Stack frame relative addressing mode: event=task (1), addr_ext=2 */ -/begin MEASUREMENT task_2.counter "task loop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x1FB9E ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_2.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x1FB88 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_2.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x1FB80 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_2.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x1FB78 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin CHARACTERISTIC task_2.array "task array (to increase measurement workload)" VAL_BLK 0x1FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC - -/* Relative addressing mode: event=ctx_2 (10), addr_ext=3 */ -/begin INSTANCE ctx_2 "Thread local context" tXcpContext 0xA0000 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0xA /end DAQ_EVENT /end IF_DATA /end INSTANCE - -/* Stack frame relative addressing mode: event=clip (11), addr_ext=2 */ -/begin MEASUREMENT clip.span_dt "Span runtime" A_UINT64 NO_COMPU_METHOD 0 0 0 0.1 ECU_ADDRESS 0xBFFC0 ECU_ADDRESS_EXTENSION 2 PHYS_UNIT "ns" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0xB /end DAQ_EVENT /end IF_DATA /end MEASUREMENT - -/* Stack frame relative addressing mode: event=task (6), addr_ext=2 */ -/begin MEASUREMENT task_7.counter "task loop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x6FB9E ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x6 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_7.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x6FB88 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x6 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_7.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x6FB80 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x6 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_7.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x6FB78 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x6 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin CHARACTERISTIC task_7.array "task array (to increase measurement workload)" VAL_BLK 0x6FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x6 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC - -/* Stack frame relative addressing mode: event=task (7), addr_ext=2 */ -/begin MEASUREMENT task_8.counter "task loop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x7FB9E ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x7 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_8.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x7FB88 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x7 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_8.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x7FB80 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x7 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_8.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x7FB78 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x7 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin CHARACTERISTIC task_8.array "task array (to increase measurement workload)" VAL_BLK 0x7FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x7 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC +/* Stack frame relative addressing mode: event=task_3 (3), addr_ext=2 */ +/begin MEASUREMENT task_3.counter "task loop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x3FB9E ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_3.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x3FB88 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_3.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x3FB80 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_3.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x3FB78 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin CHARACTERISTIC task_3.array "task array (to increase measurement workload)" VAL_BLK 0x3FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC -/* Relative addressing mode: event=ctx_8 (13), addr_ext=3 */ -/begin INSTANCE ctx_8 "Thread local context" tXcpContext 0xD0000 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0xD /end DAQ_EVENT /end IF_DATA /end INSTANCE +/* Relative addressing mode: event=ctx_3 (10), addr_ext=3 */ +/begin INSTANCE ctx_3 "Thread local context" tXcpContext 0xA0000 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0xA /end DAQ_EVENT /end IF_DATA /end INSTANCE /* Stack frame relative addressing mode: event=clip (11), addr_ext=2 */ /begin MEASUREMENT clip.span_dt "Span runtime" A_UINT64 NO_COMPU_METHOD 0 0 0 0.1 ECU_ADDRESS 0xBFFC0 ECU_ADDRESS_EXTENSION 2 PHYS_UNIT "ns" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0xB /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/* Relative addressing mode: event=ctx_1 (9), addr_ext=3 */ -/begin INSTANCE ctx_1 "Thread local context" tXcpContext 0x90000 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x9 /end DAQ_EVENT /end IF_DATA /end INSTANCE - -/* Stack frame relative addressing mode: event=task (4), addr_ext=2 */ -/begin MEASUREMENT task_5.counter "task loop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x4FB9E ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x4 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_5.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x4FB88 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x4 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_5.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x4FB80 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x4 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_5.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x4FB78 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x4 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin CHARACTERISTIC task_5.array "task array (to increase measurement workload)" VAL_BLK 0x4FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x4 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC - -/* Stack frame relative addressing mode: event=filter (14), addr_ext=2 */ -/begin MEASUREMENT filter.span_dt "Span runtime" A_UINT64 NO_COMPU_METHOD 0 0 0 0.1 ECU_ADDRESS 0xEFFB0 ECU_ADDRESS_EXTENSION 2 PHYS_UNIT "ns" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0xE /end DAQ_EVENT /end IF_DATA /end MEASUREMENT - -/* Stack frame relative addressing mode: event=filter (14), addr_ext=2 */ -/begin MEASUREMENT filter.span_dt "Span runtime" A_UINT64 NO_COMPU_METHOD 0 0 0 0.1 ECU_ADDRESS 0xEFFB0 ECU_ADDRESS_EXTENSION 2 PHYS_UNIT "ns" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0xE /end DAQ_EVENT /end IF_DATA /end MEASUREMENT - -/* Relative addressing mode: event=ctx_7 (12), addr_ext=3 */ -/begin INSTANCE ctx_7 "Thread local context" tXcpContext 0xC0000 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0xC /end DAQ_EVENT /end IF_DATA /end INSTANCE - -/* Stack frame relative addressing mode: event=task (2), addr_ext=2 */ -/begin MEASUREMENT task_3.counter "task loop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x2FB9E ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_3.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x2FB88 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_3.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x2FB80 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_3.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x2FB78 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin CHARACTERISTIC task_3.array "task array (to increase measurement workload)" VAL_BLK 0x2FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC - -/* Stack frame relative addressing mode: event=filter (14), addr_ext=2 */ -/begin MEASUREMENT filter.span_dt "Span runtime" A_UINT64 NO_COMPU_METHOD 0 0 0 0.1 ECU_ADDRESS 0xEFFB0 ECU_ADDRESS_EXTENSION 2 PHYS_UNIT "ns" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0xE /end DAQ_EVENT /end IF_DATA /end MEASUREMENT - -/* Stack frame relative addressing mode: event=task (5), addr_ext=2 */ -/begin MEASUREMENT task_6.counter "task loop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x5FB9E ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x5 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_6.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x5FB88 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x5 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_6.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x5FB80 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x5 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin MEASUREMENT task_6.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x5FB78 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x5 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin CHARACTERISTIC task_6.array "task array (to increase measurement workload)" VAL_BLK 0x5FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x5 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC - -/* Stack frame relative addressing mode: event=filter (14), addr_ext=2 */ -/begin MEASUREMENT filtered_input "Filter result" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0xEFFC8 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0xE /end DAQ_EVENT /end IF_DATA /end MEASUREMENT - -/* Relative addressing mode: event=ctx_5 (15), addr_ext=3 */ -/begin INSTANCE ctx_5 "Thread local context" tXcpContext 0xF0000 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0xF /end DAQ_EVENT /end IF_DATA /end INSTANCE - -/* Relative addressing mode: event=ctx_3 (16), addr_ext=3 */ -/begin INSTANCE ctx_3 "Thread local context" tXcpContext 0x100000 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x10 /end DAQ_EVENT /end IF_DATA /end INSTANCE - -/* Relative addressing mode: event=ctx_6 (17), addr_ext=3 */ -/begin INSTANCE ctx_6 "Thread local context" tXcpContext 0x110000 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x11 /end DAQ_EVENT /end IF_DATA /end INSTANCE +/* Stack frame relative addressing mode: event=task_5 (5), addr_ext=2 */ +/begin MEASUREMENT task_5.counter "task loop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x5FB9E ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x5 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_5.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x5FB88 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x5 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_5.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x5FB80 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x5 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_5.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x5FB78 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x5 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin CHARACTERISTIC task_5.array "task array (to increase measurement workload)" VAL_BLK 0x5FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x5 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC + +/* Relative addressing mode: event=ctx_5 (12), addr_ext=3 */ +/begin INSTANCE ctx_5 "Thread local context" tXcpContext 0xC0000 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0xC /end DAQ_EVENT /end IF_DATA /end INSTANCE + +/* Relative addressing mode: event=ctx_1 (6), addr_ext=3 */ +/begin INSTANCE ctx_1 "Thread local context" tXcpContext 0x60000 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x6 /end DAQ_EVENT /end IF_DATA /end INSTANCE + +/* Stack frame relative addressing mode: event=task_6 (7), addr_ext=2 */ +/begin MEASUREMENT task_6.counter "task loop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x7FB9E ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x7 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_6.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x7FB88 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x7 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_6.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x7FB80 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x7 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_6.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x7FB78 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x7 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin CHARACTERISTIC task_6.array "task array (to increase measurement workload)" VAL_BLK 0x7FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x7 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC + +/* Relative addressing mode: event=ctx_6 (13), addr_ext=3 */ +/begin INSTANCE ctx_6 "Thread local context" tXcpContext 0xD0000 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0xD /end DAQ_EVENT /end IF_DATA /end INSTANCE + +/* Stack frame relative addressing mode: event=task_2 (2), addr_ext=2 */ +/begin MEASUREMENT task_2.counter "task loop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x2FB9E ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_2.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x2FB88 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_2.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x2FB80 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_2.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x2FB78 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin CHARACTERISTIC task_2.array "task array (to increase measurement workload)" VAL_BLK 0x2FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC + +/* Relative addressing mode: event=ctx_2 (14), addr_ext=3 */ +/begin INSTANCE ctx_2 "Thread local context" tXcpContext 0xE0000 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0xE /end DAQ_EVENT /end IF_DATA /end INSTANCE + +/* Stack frame relative addressing mode: event=task_4 (4), addr_ext=2 */ +/begin MEASUREMENT task_4.counter "task loop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x4FB9E ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x4 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_4.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x4FB88 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x4 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_4.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x4FB80 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x4 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_4.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x4FB78 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x4 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin CHARACTERISTIC task_4.array "task array (to increase measurement workload)" VAL_BLK 0x4FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x4 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC + +/* Relative addressing mode: event=ctx_4 (15), addr_ext=3 */ +/begin INSTANCE ctx_4 "Thread local context" tXcpContext 0xF0000 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0xF /end DAQ_EVENT /end IF_DATA /end INSTANCE + +/* Stack frame relative addressing mode: event=task_7 (8), addr_ext=2 */ +/begin MEASUREMENT task_7.counter "task loop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x8FB9E ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x8 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_7.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x8FB88 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x8 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_7.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x8FB80 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x8 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_7.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x8FB78 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x8 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin CHARACTERISTIC task_7.array "task array (to increase measurement workload)" VAL_BLK 0x8FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x8 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC + +/* Stack frame relative addressing mode: event=task_8 (9), addr_ext=2 */ +/begin MEASUREMENT task_8.counter "task loop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x9FB9E ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x9 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_8.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x9FB88 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x9 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_8.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x9FB80 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x9 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_8.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x9FB78 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x9 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin CHARACTERISTIC task_8.array "task array (to increase measurement workload)" VAL_BLK 0x9FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x9 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC + +/* Stack frame relative addressing mode: event=filter (18), addr_ext=2 */ +/begin MEASUREMENT filter.span_dt "Span runtime" A_UINT64 NO_COMPU_METHOD 0 0 0 0.1 ECU_ADDRESS 0x12FFB0 ECU_ADDRESS_EXTENSION 2 PHYS_UNIT "ns" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x12 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT + +/* Stack frame relative addressing mode: event=task_1 (1), addr_ext=2 */ +/begin MEASUREMENT filtered_input "Filter result" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x1FFC8 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT + +/* Relative addressing mode: event=ctx_7 (16), addr_ext=3 */ +/begin INSTANCE ctx_7 "Thread local context" tXcpContext 0x100000 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x10 /end DAQ_EVENT /end IF_DATA /end INSTANCE + +/* Relative addressing mode: event=ctx_8 (17), addr_ext=3 */ +/begin INSTANCE ctx_8 "Thread local context" tXcpContext 0x110000 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x11 /end DAQ_EVENT /end IF_DATA /end INSTANCE /* Typedefs */ /begin RECORD_LAYOUT U8 FNC_VALUES 1 UBYTE ROW_DIR DIRECT /end RECORD_LAYOUT @@ -176,44 +167,42 @@ ALIGNMENT_INT64 1 /begin TYPEDEF_CHARACTERISTIC C_F64 "" VALUE F64 0 NO_COMPU_METHOD -1e+12 1e+12 /end TYPEDEF_CHARACTERISTIC /begin TYPEDEF_MEASUREMENT M_span_id "function span id" UWORD conv.events 0 0 0 32 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT M_level "function span nesting level" ULONG NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT /* Groups */ -/begin GROUP Parameters "Calibration Segment" /begin REF_CHARACTERISTIC params.counter_max params.ampl params.period params.filter params.clip_max params.clip_min params.delay_us params.run /end REF_CHARACTERISTIC /end GROUP -/begin GROUP task_1 "Measurement event group" /begin REF_MEASUREMENT task_1.counter task_1.channel1 task_1.channel2 task_1.channel3 task_1.array /end REF_MEASUREMENT /end GROUP -/begin GROUP task_4 "Measurement event group" /begin REF_MEASUREMENT task_4.counter task_4.channel1 task_4.channel2 task_4.channel3 task_4.array /end REF_MEASUREMENT /end GROUP -/begin GROUP ctx_4 "Measurement event group" /begin REF_MEASUREMENT ctx_4 /end REF_MEASUREMENT /end GROUP -/begin GROUP task_2 "Measurement event group" /begin REF_MEASUREMENT task_2.counter task_2.channel1 task_2.channel2 task_2.channel3 task_2.array /end REF_MEASUREMENT /end GROUP -/begin GROUP ctx_2 "Measurement event group" /begin REF_MEASUREMENT ctx_2 /end REF_MEASUREMENT /end GROUP -/begin GROUP clip "Measurement event group" /begin REF_MEASUREMENT clip.span_dt /end REF_MEASUREMENT /end GROUP -/begin GROUP task_7 "Measurement event group" /begin REF_MEASUREMENT task_7.counter task_7.channel1 task_7.channel2 task_7.channel3 task_7.array /end REF_MEASUREMENT /end GROUP -/begin GROUP task_8 "Measurement event group" /begin REF_MEASUREMENT task_8.counter task_8.channel1 task_8.channel2 task_8.channel3 task_8.array /end REF_MEASUREMENT /end GROUP -/begin GROUP ctx_8 "Measurement event group" /begin REF_MEASUREMENT ctx_8 /end REF_MEASUREMENT /end GROUP -/begin GROUP clip "Measurement event group" /begin REF_MEASUREMENT clip.span_dt /end REF_MEASUREMENT /end GROUP -/begin GROUP ctx_1 "Measurement event group" /begin REF_MEASUREMENT ctx_1 /end REF_MEASUREMENT /end GROUP -/begin GROUP task_5 "Measurement event group" /begin REF_MEASUREMENT task_5.counter task_5.channel1 task_5.channel2 task_5.channel3 task_5.array /end REF_MEASUREMENT /end GROUP -/begin GROUP filter "Measurement event group" /begin REF_MEASUREMENT filter.span_dt /end REF_MEASUREMENT /end GROUP -/begin GROUP filter "Measurement event group" /begin REF_MEASUREMENT filter.span_dt /end REF_MEASUREMENT /end GROUP -/begin GROUP ctx_7 "Measurement event group" /begin REF_MEASUREMENT ctx_7 /end REF_MEASUREMENT /end GROUP -/begin GROUP task_3 "Measurement event group" /begin REF_MEASUREMENT task_3.counter task_3.channel1 task_3.channel2 task_3.channel3 task_3.array /end REF_MEASUREMENT /end GROUP -/begin GROUP filter "Measurement event group" /begin REF_MEASUREMENT filter.span_dt /end REF_MEASUREMENT /end GROUP -/begin GROUP task_6 "Measurement event group" /begin REF_MEASUREMENT task_6.counter task_6.channel1 task_6.channel2 task_6.channel3 task_6.array /end REF_MEASUREMENT /end GROUP -/begin GROUP filter "Measurement event group" /begin REF_MEASUREMENT filtered_input /end REF_MEASUREMENT /end GROUP -/begin GROUP ctx_5 "Measurement event group" /begin REF_MEASUREMENT ctx_5 /end REF_MEASUREMENT /end GROUP -/begin GROUP ctx_3 "Measurement event group" /begin REF_MEASUREMENT ctx_3 /end REF_MEASUREMENT /end GROUP -/begin GROUP ctx_6 "Measurement event group" /begin REF_MEASUREMENT ctx_6 /end REF_MEASUREMENT /end GROUP -/begin GROUP Events "Events" ROOT /begin SUB_GROUP task ctx_4 ctx_1 ctx_2 clip ctx_7 ctx_8 filter ctx_5 ctx_3 ctx_6 /end SUB_GROUP /end GROUP +/begin GROUP params "Calibration Segment" ROOT /begin REF_CHARACTERISTIC params.counter_max params.ampl params.period params.filter params.clip_max params.clip_min params.delay_us params.run /end REF_CHARACTERISTIC /end GROUP +/begin GROUP task_1 "Measurement event group" /begin REF_MEASUREMENT task_1.counter task_1.channel1 task_1.channel2 task_1.channel3 task_1.array /end REF_MEASUREMENT /end GROUP +/begin GROUP task_3 "Measurement event group" /begin REF_MEASUREMENT task_3.counter task_3.channel1 task_3.channel2 task_3.channel3 task_3.array /end REF_MEASUREMENT /end GROUP +/begin GROUP ctx_3 "Measurement event group" /begin REF_MEASUREMENT ctx_3 /end REF_MEASUREMENT /end GROUP +/begin GROUP clip "Measurement event group" /begin REF_MEASUREMENT clip.span_dt /end REF_MEASUREMENT /end GROUP +/begin GROUP task_5 "Measurement event group" /begin REF_MEASUREMENT task_5.counter task_5.channel1 task_5.channel2 task_5.channel3 task_5.array /end REF_MEASUREMENT /end GROUP +/begin GROUP ctx_5 "Measurement event group" /begin REF_MEASUREMENT ctx_5 /end REF_MEASUREMENT /end GROUP +/begin GROUP ctx_1 "Measurement event group" /begin REF_MEASUREMENT ctx_1 /end REF_MEASUREMENT /end GROUP +/begin GROUP task_6 "Measurement event group" /begin REF_MEASUREMENT task_6.counter task_6.channel1 task_6.channel2 task_6.channel3 task_6.array /end REF_MEASUREMENT /end GROUP +/begin GROUP ctx_6 "Measurement event group" /begin REF_MEASUREMENT ctx_6 /end REF_MEASUREMENT /end GROUP +/begin GROUP task_2 "Measurement event group" /begin REF_MEASUREMENT task_2.counter task_2.channel1 task_2.channel2 task_2.channel3 task_2.array /end REF_MEASUREMENT /end GROUP +/begin GROUP ctx_2 "Measurement event group" /begin REF_MEASUREMENT ctx_2 /end REF_MEASUREMENT /end GROUP +/begin GROUP task_4 "Measurement event group" /begin REF_MEASUREMENT task_4.counter task_4.channel1 task_4.channel2 task_4.channel3 task_4.array /end REF_MEASUREMENT /end GROUP +/begin GROUP ctx_4 "Measurement event group" /begin REF_MEASUREMENT ctx_4 /end REF_MEASUREMENT /end GROUP +/begin GROUP task_7 "Measurement event group" /begin REF_MEASUREMENT task_7.counter task_7.channel1 task_7.channel2 task_7.channel3 task_7.array /end REF_MEASUREMENT /end GROUP +/begin GROUP task_8 "Measurement event group" /begin REF_MEASUREMENT task_8.counter task_8.channel1 task_8.channel2 task_8.channel3 task_8.array /end REF_MEASUREMENT /end GROUP +/begin GROUP filter "Measurement event group" /begin REF_MEASUREMENT filter.span_dt /end REF_MEASUREMENT /end GROUP +/begin GROUP task_1 "Measurement event group" /begin REF_MEASUREMENT filtered_input /end REF_MEASUREMENT /end GROUP +/begin GROUP ctx_7 "Measurement event group" /begin REF_MEASUREMENT ctx_7 /end REF_MEASUREMENT /end GROUP +/begin GROUP ctx_8 "Measurement event group" /begin REF_MEASUREMENT ctx_8 /end REF_MEASUREMENT /end GROUP +/begin GROUP Events "Events" ROOT /begin SUB_GROUP task_1 task_2 task_3 task_4 task_5 ctx_1 task_6 task_7 task_8 ctx_3 clip ctx_5 ctx_6 ctx_2 ctx_4 ctx_7 ctx_8 filter /end SUB_GROUP /end GROUP /* Conversions */ /begin COMPU_METHOD conv.bool "" TAB_VERB "%.0" "" COMPU_TAB_REF conv.bool.table /end COMPU_METHOD /begin COMPU_VTAB conv.bool.table "" TAB_VERB 2 0 "false" 1 "true" /end COMPU_VTAB /begin COMPU_METHOD conv.events "" TAB_VERB "%.0 " "" COMPU_TAB_REF conv.events.table /end COMPU_METHOD -/begin COMPU_VTAB conv.events.table "" TAB_VERB 18 - 0 "task" 1 "task" 2 "task" 3 "task" 4 "task" 5 "task" 6 "task" 7 "task" 8 "ctx_4" 9 "ctx_1" 10 "ctx_2" 11 "clip" 12 "ctx_7" 13 "ctx_8" 14 "filter" 15 "ctx_5" 16 "ctx_3" 17 "ctx_6" +/begin COMPU_VTAB conv.events.table "" TAB_VERB 19 + 0 "async" 1 "task_1" 2 "task_2" 3 "task_3" 4 "task_4" 5 "task_5" 6 "ctx_1" 7 "task_6" 8 "task_7" 9 "task_8" 10 "ctx_3" 11 "clip" 12 "ctx_5" 13 "ctx_6" 14 "ctx_2" 15 "ctx_4" 16 "ctx_7" 17 "ctx_8" 18 "filter" /end COMPU_VTAB /begin MOD_PAR "" -EPK "_Sep_22_2025_19_01_45" ADDR_EPK 0x80000000 -/begin MEMORY_SEGMENT epk "" DATA FLASH INTERN 0x80000000 21 -1 -1 -1 -1 -1 +EPK "14_51_40" ADDR_EPK 0x80000000 +/begin MEMORY_SEGMENT epk "" DATA FLASH INTERN 0x80000000 8 -1 -1 -1 -1 -1 /begin IF_DATA XCP /begin SEGMENT 0 2 0 0 0 /begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM @@ -222,7 +211,7 @@ EPK "_Sep_22_2025_19_01_45" ADDR_EPK 0x80000000 /end SEGMENT /end IF_DATA /end MEMORY_SEGMENT -/begin MEMORY_SEGMENT Parameters "" DATA FLASH INTERN 0x80010000 0x38 -1 -1 -1 -1 -1 +/begin MEMORY_SEGMENT params "" DATA FLASH INTERN 0x80010000 56 -1 -1 -1 -1 -1 /begin IF_DATA XCP /begin SEGMENT 1 2 0 0 0 /begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM @@ -257,6 +246,7 @@ OPTIONAL_CMD BUILD_CHECKSUM OPTIONAL_CMD USER_CMD OPTIONAL_CMD GET_DAQ_RESOLUTION_INFO OPTIONAL_CMD GET_DAQ_PROCESSOR_INFO +OPTIONAL_CMD GET_DAQ_EVENT_INFO OPTIONAL_CMD FREE_DAQ OPTIONAL_CMD ALLOC_DAQ OPTIONAL_CMD ALLOC_ODT @@ -273,31 +263,30 @@ OPTIONAL_CMD TIME_CORRELATION_PROPERTIES OPTIONAL_LEVEL1_CMD GET_VERSION /end PROTOCOL_LAYER /begin DAQ -DYNAMIC 0 18 0 OPTIMISATION_TYPE_DEFAULT ADDRESS_EXTENSION_FREE IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE 0xF8 OVERLOAD_INDICATION_PID -/begin TIMESTAMP_SUPPORTED -0x1 SIZE_DWORD UNIT_1US TIMESTAMP_FIXED -/end TIMESTAMP_SUPPORTED -/begin EVENT "task_1" "task_1" 0x0 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT -/begin EVENT "task_2" "task_2" 0x1 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT -/begin EVENT "task_3" "task_3" 0x2 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT -/begin EVENT "task_4" "task_4" 0x3 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT -/begin EVENT "task_5" "task_5" 0x4 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT -/begin EVENT "task_6" "task_6" 0x5 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT -/begin EVENT "task_7" "task_7" 0x6 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT -/begin EVENT "task_8" "task_8" 0x7 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT -/begin EVENT "ctx_4" "ctx_4" 0x8 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT -/begin EVENT "ctx_1" "ctx_1" 0x9 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT -/begin EVENT "ctx_2" "ctx_2" 0xA DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +DYNAMIC 0 19 0 OPTIMISATION_TYPE_DEFAULT ADDRESS_EXTENSION_FREE IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE 0xF8 OVERLOAD_INDICATION_PID PRESCALER_SUPPORTED +/begin TIMESTAMP_SUPPORTED 0x1 SIZE_DWORD UNIT_1NS TIMESTAMP_FIXED /end TIMESTAMP_SUPPORTED +/begin EVENT "async" "async" 0x0 DAQ 0xFF 100 4 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "task_1" "task_1" 0x1 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "task_2" "task_2" 0x2 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "task_3" "task_3" 0x3 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "task_4" "task_4" 0x4 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "task_5" "task_5" 0x5 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "ctx_1" "ctx_1" 0x6 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "task_6" "task_6" 0x7 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "task_7" "task_7" 0x8 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "task_8" "task_8" 0x9 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "ctx_3" "ctx_3" 0xA DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT /begin EVENT "clip" "clip" 0xB DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT -/begin EVENT "ctx_7" "ctx_7" 0xC DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT -/begin EVENT "ctx_8" "ctx_8" 0xD DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT -/begin EVENT "filter" "filter" 0xE DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT -/begin EVENT "ctx_5" "ctx_5" 0xF DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT -/begin EVENT "ctx_3" "ctx_3" 0x10 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT -/begin EVENT "ctx_6" "ctx_6" 0x11 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "ctx_5" "ctx_5" 0xC DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "ctx_6" "ctx_6" 0xD DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "ctx_2" "ctx_2" 0xE DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "ctx_4" "ctx_4" 0xF DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "ctx_7" "ctx_7" 0x10 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "ctx_8" "ctx_8" 0x11 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "filter" "filter" 0x12 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT /end DAQ /begin XCP_ON_UDP_IP - 0x104 5555 ADDRESS "192.168.8.133" + 0x104 5555 ADDRESS "192.168.0.101" /end XCP_ON_UDP_IP /end IF_DATA diff --git a/examples/multi_thread_demo/src/main.c b/examples/multi_thread_demo/src/main.c index edd24c37..1532383f 100644 --- a/examples/multi_thread_demo/src/main.c +++ b/examples/multi_thread_demo/src/main.c @@ -1,7 +1,11 @@ // multi_thread_demo xcplib example -#include // for assert -#include // for M_PI, sin +#include // for assert +#include // for M_PI, sin +#include // for signal handling +#ifndef _WIN32 +#include // for atomic_ +#endif #include // for bool #include // for uintxx_t #include // for printf @@ -10,6 +14,13 @@ #include "a2l.h" // for xcplib A2l generation #include "xcplib.h" // for xcplib application programming interface +// Internal xcplib includes to simplify multi platform support +#include "main_cfg.h" +#include "platform.h" // for THREAD +#ifdef OPTION_ENABLE_DBG_METRICS +#include "dbg_print.h" // for statistics: XcpDaqEventCount, gXcpTxPacketCount, gXcpRxPacketCount +#endif + //----------------------------------------------------------------------------------------------------- #ifndef M_PI @@ -19,31 +30,24 @@ #define M_2PI (M_PI * 2) #endif -// Threads -#if defined(_WIN32) // Windows -#include -typedef HANDLE THREAD; -#define create_thread(h, t) *h = CreateThread(0, 0, t, NULL, 0, NULL) -#define join_thread(h) WaitForSingleObject(h, INFINITE); -#else -#include -typedef pthread_t THREAD; -#define create_thread(h, t) pthread_create(h, NULL, t, NULL) -#define join_thread(h) pthread_join(h, NULL) -#endif - //----------------------------------------------------------------------------------------------------- #define XCP_MAX_EVENT_NAME 15 -#define THREAD_COUNT 8 // Number of threads to create -#define THREAD_DELAY_US 10000 // Delay in microseconds for the thread loops -#define MAX_THREAD_NAME_LENGTH 32 // Maximum length of thread name +#define THREAD_COUNT 8 // Number of threads to create +#define THREAD_DELAY_US 1000 // Delay in microseconds for the thread loops +#define MAX_THREAD_NAME_LENGTH 32 // Maximum length of thread name + +#ifndef _WIN32 #define EXPERIMENTAL_THREAD_CONTEXT // Enable demonstration of tracking thread context and span of the clip and filter function +#define FILTER_SLEEP_US 100 // Simulated work in filter function +#define CLIP_SLEEP_US 50 // Simulated work in clip function +#endif //----------------------------------------------------------------------------------------------------- // XCP parameters #define OPTION_PROJECT_NAME "multi_thread_demo" // A2L project name +#define OPTION_PROJECT_EPK __TIME__ // EPK version string #define OPTION_USE_TCP false // TCP or UDP #define OPTION_SERVER_PORT 5555 // Port #define OPTION_SERVER_ADDR {0, 0, 0, 0} // Bind addr, 0.0.0.0 = ANY @@ -65,7 +69,7 @@ typedef struct params { } params_t; // Default parameters -static const params_t params = {.counter_max = 1000, .ampl = 100.0, .period = 3.0, .filter = 0.07, .clip_max = 80.0, .clip_min = -100.0, .delay_us = THREAD_DELAY_US, .run = true}; +static const params_t params = {.counter_max = 1024, .ampl = 100.0, .period = 3.0, .filter = 0.07, .clip_max = 80.0, .clip_min = -100.0, .delay_us = THREAD_DELAY_US, .run = true}; // Global calibration segment handle static tXcpCalSegIndex calseg = XCP_UNDEFINED_CALSEG; @@ -96,8 +100,9 @@ static inline const char *XcpGetContextName(void) { return gXcpContext.name; } #define BeginSpan(name) \ uint64_t span_t1 = ApplXcpGetClock64(); \ uint64_t span_dt; \ - static tXcpEventId span_id = XCP_UNDEFINED_EVENT_ID; \ - if (span_id == XCP_UNDEFINED_EVENT_ID) { \ + static _Atomic tXcpEventId span_id = XCP_UNDEFINED_EVENT_ID; \ + tXcpEventId old_span_id = XCP_UNDEFINED_EVENT_ID; \ + if (atomic_compare_exchange_strong_explicit(&span_id, &old_span_id, 1, memory_order_relaxed, memory_order_relaxed)) { \ A2lLock(); \ span_id = XcpCreateEvent(name, 0, 0); \ A2lSetStackAddrMode_i(span_id); \ @@ -108,8 +113,7 @@ static inline const char *XcpGetContextName(void) { return gXcpContext.name; } tXcpEventId previous_span_id = ctx->span_id; \ ctx->span_id = span_id; \ ctx->level++; \ - const uint8_t *span_base[4] = {NULL, ApplXcpGetBaseAddr(), get_stack_frame_pointer(), (const uint8_t *)ctx}; \ - XcpEventExt_At(ctx->id, span_base, span_t1); + XcpEventExtAt_Var(ctx->id, span_t1, 2, xcp_get_frame_addr(), (const uint8_t *)ctx); // End span // Trigger the span event and the context event on exit @@ -117,10 +121,10 @@ static inline const char *XcpGetContextName(void) { return gXcpContext.name; } #define EndSpan() \ uint64_t span_t2 = ApplXcpGetClock64(); \ span_dt = span_t2 - span_t1; \ - XcpEventExt_At(ctx->span_id, span_base, span_t2); \ + XcpEventExtAt_Var(ctx->span_id, span_t2, 2, xcp_get_frame_addr(), (const uint8_t *)ctx); \ ctx->span_id = previous_span_id; \ ctx->level--; \ - XcpEventExt_At(ctx->id, span_base, span_t2); + XcpEventExtAt_Var(ctx->id, span_t2, 2, xcp_get_frame_addr(), (const uint8_t *)ctx); // Create a named context // Create the context event (name is 'context_name'_'context_index') @@ -136,9 +140,9 @@ static uint16_t XcpCreateContext(const char *context_name, uint16_t context_inde // Uses the predefined enum conversion rule for the event names A2lOnce() { A2lLock(); - A2lTypedefBegin(tXcpContext, "A2L typedef for tXcpContext"); - A2lTypedefPhysMeasurementComponent(span_id, tXcpContext, "function span id", "conv.events", 0, 32); - A2lTypedefMeasurementComponent(level, tXcpContext); + A2lTypedefBegin(tXcpContext, &gXcpContext, "A2L typedef for tXcpContext"); + A2lTypedefPhysMeasurementComponent(span_id, "function span id", "conv.events", 0, 32); + A2lTypedefMeasurementComponent(level, "function span nesting level"); A2lTypedefEnd(); A2lUnlock(); } @@ -171,13 +175,17 @@ static uint16_t XcpCreateContext(const char *context_name, uint16_t context_inde // Clip a value to a range defined in the calibration segment double clip(double input) { +#ifdef EXPERIMENTAL_THREAD_CONTEXT // Instrumentation: Begin span for clip function BeginSpan("clip"); +#endif - // Simulate some more expensive work - sleepUs(50); +// Simulate some more expensive work +#ifdef CLIP_SLEEP_US + sleepUs(CLIP_SLEEP_US); +#endif - params_t *params = (params_t *)XcpLockCalSeg(calseg); + const params_t *params = (params_t *)XcpLockCalSeg(calseg); // Clip the input value to a range defined in the calibration segment double output = input; @@ -189,19 +197,23 @@ double clip(double input) { XcpUnlockCalSeg(calseg); +#ifdef EXPERIMENTAL_THREAD_CONTEXT // Instrumentation: End span for filter function EndSpan(); +#endif return output; } // Filter function that applies a simple low-pass filter to the input signal +// Demonstrates observation of function called in different threads and contexts double filter(double input) { double filtered_input = 0; double clipped_output = 0; static THREAD_LOCAL double last = 0.0; // Thread-local state for the filter, simplified example, one filter instance per thread +#ifdef EXPERIMENTAL_THREAD_CONTEXT // Instrumentation: Begin span for filter function BeginSpan("filter"); @@ -212,11 +224,13 @@ double filter(double input) { A2lCreateMeasurement(filtered_input, "Filter result"); A2lUnlock(); } +#endif +// Simulate some more expensive work +#ifdef FILTER_SLEEP_US + sleepUs(FILTER_SLEEP_US); +#endif - // Simulate some more expensive work - sleepUs(100); - - params_t *params = (params_t *)XcpLockCalSeg(calseg); + const params_t *params = (params_t *)XcpLockCalSeg(calseg); // Filter the input signal using a simple low-pass filter filtered_input = input * params->filter + last * (1.0 - params->filter); @@ -227,15 +241,25 @@ double filter(double input) { // Clip the filter output clipped_output = clip(filtered_input); +#ifdef EXPERIMENTAL_THREAD_CONTEXT // Instrumentation: End span for filter function EndSpan(); +#endif return clipped_output; } +//----------------------------------------------------------------------------------------------------- + +// Signal handler for clean shutdown +static volatile bool gRun = true; +static void sig_handler(int sig) { gRun = false; } + +//----------------------------------------------------------------------------------------------------- + // Task function that runs in a separate thread // Calculates a sine wave, square wave, and sawtooth wave signal -#ifdef _WIN32 +#ifdef _WIN32 // Windows 32 or 64 bit DWORD WINAPI task(LPVOID p) #else void *task(void *p) @@ -257,7 +281,8 @@ void *task(void *p) // Instrumentation: Events and measurement variables // Register task local variables counter and channelx with stack addressing mode - tXcpEventId task_event_id = DaqCreateEventInstance_s("task"); + DaqCreateEventInstance(task); + tXcpEventId task_event_id = DaqGetEventInstanceId(task); // Build the task name from the event index uint16_t task_index = XcpGetEventIndex(task_event_id); // Get the event index of this event instance @@ -267,7 +292,7 @@ void *task(void *p) // Create measurement variables for this task instance A2lLock(); A2lSetStackAddrMode_i(task_event_id); - A2lCreateMeasurementInstance(task_name, counter, "task loop counter"); + A2lCreateMeasurementInstance(task_name, counter, "Mainloop counter"); A2lCreateMeasurementInstance(task_name, channel1, "task sine wave signal"); A2lCreateMeasurementInstance(task_name, channel2, "task square wave signal"); A2lCreateMeasurementInstance(task_name, channel3, "task sawtooth signal"); @@ -280,10 +305,10 @@ void *task(void *p) XcpCreateContext("ctx", task_index); #endif - while (run) { + while (run && gRun) { { - params_t *params = (params_t *)XcpLockCalSeg(calseg); + const params_t *params = (params_t *)XcpLockCalSeg(calseg); counter++; if (counter > params->counter_max) { @@ -292,10 +317,9 @@ void *task(void *p) time = (double)(clockGetUs() - start_time) / 1000000; // Calculate elapsed time in seconds double normalized_time = M_2PI * fmod(time, params->period) / params->period; // Normalize time ([0.0..M_2PI[ to the period - - channel1 = params->ampl * sin(normalized_time); // Sine wave - channel2 = params->ampl * ((normalized_time < M_PI) ? 1.0 : -1.0); // Square wave - channel3 = params->ampl * (normalized_time - M_PI) / M_PI; // Sawtooth wave + channel1 = params->ampl * sin(normalized_time); // Sine wave + channel2 = params->ampl * ((normalized_time < M_PI) ? 1.0 : -1.0); // Square wave + channel3 = params->ampl * (normalized_time - M_PI) / M_PI; // Sawtooth wave // Sleep time delay_us = params->delay_us; @@ -312,7 +336,7 @@ void *task(void *p) channel3 = clip(channel3); // Sawtooth // Instrumentation: Measurement event - DaqEvent_i(task_event_id); + DaqTriggerEvent_i(task_event_id); // Sleep for the specified delay parameter in microseconds, defines the approximate sampling rate sleepUs(delay_us); @@ -321,17 +345,21 @@ void *task(void *p) return 0; // Exit the thread } +//----------------------------------------------------------------------------------------------------- + // Demo main int main(void) { printf("\nXCP on Ethernet multi thread xcplib demo\n"); + signal(SIGINT, sig_handler); + signal(SIGTERM, sig_handler); // Set log level (1-error, 2-warning, 3-info, 4-show XCP commands) XcpSetLogLevel(OPTION_LOG_LEVEL); // Initialize the XCP singleton, activate XCP, must be called before starting the server // If XCP is not activated, the server will not start and all XCP instrumentation will be passive with minimal overhead - XcpInit(true); + XcpInit(OPTION_PROJECT_NAME, OPTION_PROJECT_EPK, true); // Initialize the XCP Server uint8_t addr[4] = OPTION_SERVER_ADDR; @@ -340,7 +368,9 @@ int main(void) { } // Enable A2L generation and prepare the A2L file, finalize the A2L file on XCP connect, auto grouping - if (!A2lInit(OPTION_PROJECT_NAME, NULL, addr, OPTION_SERVER_PORT, OPTION_USE_TCP, A2L_MODE_WRITE_ALWAYS | A2L_MODE_FINALIZE_ON_CONNECT | A2L_MODE_AUTO_GROUPS)) { + // In this demo, with A2L_MODE_WRITE_ALWAYS, the A2L file is unstable, because the thread creation order is undeterministic + // It is still ok to use A2L_MODE_WRITE_ONCE, the A2l file content is equivalent, as the events numbers associated to the thread don't have an individual identity + if (!A2lInit(addr, OPTION_SERVER_PORT, OPTION_USE_TCP, A2L_MODE_WRITE_ONCE | A2L_MODE_FINALIZE_ON_CONNECT | A2L_MODE_AUTO_GROUPS)) { return 1; } @@ -348,12 +378,12 @@ int main(void) { // This segment has a working page (RAM) and a reference page (FLASH), it creates a MEMORY_SEGMENT in the A2L file // It provides safe (thread safe against XCP modifications), lock-free and consistent access to the calibration parameters // It supports XCP/ECU independant page switching, checksum calculation and reinitialization (copy reference page to working page) - calseg = XcpCreateCalSeg("Parameters", ¶ms, sizeof(params)); + calseg = XcpCreateCalSeg("params", ¶ms, sizeof(params)); assert(calseg != XCP_UNDEFINED_CALSEG); // Ensure the calibration segment was created successfully // Register calibration parameters in the calibration segment A2lSetSegmentAddrMode(calseg, params); - A2lCreateParameter(params.counter_max, "Max counter value, wrap around", "", 0, 10000.0); + A2lCreateParameter(params.counter_max, "Max counter value, wrap around", "", 0.0, 65535.0); A2lCreateParameter(params.ampl, "Amplitude", "Volt", 0, 100.0); A2lCreateParameter(params.period, "Period", "s", 0.1, 10.0); A2lCreateParameter(params.filter, "Filter coefficient", "", 0.0, 1.0); @@ -369,15 +399,26 @@ int main(void) { create_thread(&t[i], task); } - // Optional: Finalize the A2L file generation early, to write the A2L now, not when the client connects sleepUs(200000); - A2lFinalize(); + A2lFinalize(); // @@@@ TEST: Manually finalize the A2L file to make it visible without XCP tool connect + // Wait for signal to stop + while (gRun) { + sleepUs(100000); // 100ms + } + + // Wait for all threads to finish for (int i = 0; i < THREAD_COUNT; i++) { if (t[i]) join_thread(t[i]); } +#ifdef OPTION_ENABLE_DBG_METRICS + printf(" Total DAQ events: %u\n", gXcpDaqEventCount); + printf(" Total TX packets: %u\n", gXcpTxPacketCount); + printf(" Total RX packets: %u\n", gXcpRxPacketCount); +#endif + // Force disconnect the XCP client XcpDisconnect(); diff --git a/examples/no_a2l_demo/CANape/CANape.ini b/examples/no_a2l_demo/CANape/CANape.ini new file mode 100644 index 00000000..51bb5297 --- /dev/null +++ b/examples/no_a2l_demo/CANape/CANape.ini @@ -0,0 +1,3113 @@ +;------------------------------------------------------------------------------- +; +; DEFAULT.INI +; Template for new CANape/vSignalyzer/vMeasure exp projects +; +;------------------------------------------------------------------------------- + +[!!!!!_CONSISTENCY_CHECK_START_SECTION_!!!!!] +GUID={9DAA6890-BF7E-488B-BDB6-8C27815EE897} + +[FILE_INFO] +Identification=CANape-Project-File +FileVersion=2200 +FileName=CANape.ini +FileNameAbsolute=Y:\XCPlite-RainerZ\examples\no_a2l_demo\CANape\CANape.ini +WorkingDirectory=Y:\XCPlite-RainerZ\examples\no_a2l_demo\CANape +ProjectId=07e9-000a-0002-000b-0018-002f-0000 +PrgVersion=Version 23.0.20.3237 +PrgDate=16.06.2025 +Description= +CreationTime=11:26 +CreationDate=10/02/2025 ; Month/Day/Year +ModificationTime=12:16 +ModificationDate=10/26/2025 ; Month/Day/Year +Protected=0 +CurrentWindowsACP=1252 + +[CANAPE] + +; Activate FlexRay dual channel support, needed for the FIBEX import. +FlexRayDualChannelMode=1 +ImportPrimitiveArraysAsValueBlocks=1 +ImportPduArraysAsCurve=1 +HideTopLevelAutosarStruct=0 +USE_HW_MAPPING_ASSISTANT=0 +ImportSomeIpMultidimensionalArrays=1 +EnableXlNicSupport=0 +TimeMaster=--- +PulseMaster=--- +GLOBAL_MEASUREMENT_FILE=0 +FILTER_FROM_FILE=1 +KEY_SNAP_IN=1 +ASYNCRON_REDRAW=2 +BLOCK_BUFFER_DRAWING=1 +ASYNCRON_REDRAW_USE_THREAD_POOL=1 +ASYNCRON_REDRAW_THREAD_PRIO=-1 +DATA_REDUCTION_WARNING=1 +DATA_REDUCT_ZERO_WARNING=1 +FREE_MEMORY_LIMIT=20 +FREE_MEMORY_LIMIT_RECORDER=15 +FREE_MEMORY_WITHOUT_LIMIT_CHECK_GB=4 +FREE_MEMORY_LIMIT_OFFLINE_CALCULATION=10 +MIN_DISK_SPACE=1024 +MDF_FORMAT=420 +MDF_DATATYPE_MOTOROLA=1 +MDF_TIME_FORMAT=DOUBLE +MDF_UINT32_TIME_BASE=10 +MDF_CREATE_ARRAY_SIGNALS=1 +MDF_CREATE_ELEMENTS_FOR_ARRAYS=1 +MDF_ONE_GROUP_FOR_ARRAYS=1 +MDF_REPLACE_SPACES=1 +MDF_FIND_SIGNAL_WITHOUT_SOURCE=1 +MDF_FIND_SIGNAL_WITH_NETWORK_NODE=0 +MDF_REMOVE_INCA_SOURCE_INFO=1 +MDF_ADD_INCA_SOURCE_INFO_TO_COMMENT=1 +MDF_CREATE_CEBLOCK_FROM_INCA_SOURCE_INFO=1 +MDF_CUT_WRITE_WINDOW_SIGNAL_TO_TRIGGER_RANGE=0 +MDF_TIME_CHANNEL_NAME=t +MDF_TIME_CHANNEL_SOURCE_POSTFIX=0 +MDF_GLOBAL_TIME_OFFSET=1 +MDF_STORE_TRG_OBJECTS_IN_SAME_GRP=1 +FIND_FILE_SIGNAL_FUZZY=1 +MEASUREMENT_LOOP_CLASSIFICATION=0 +MDF_SORTED_WRITE_MAX_TIME_PER_BLOCK=120 +MDF_SORTED_WRITE_BUFFER_SIZE=33554432 +MDF_ASYNC_WRITE_BUFFER_SIZE64=1048576 +MDF_ASYNC_WRITE_BUFFER_COUNT64=32 +MDF_ASYNC_WRITE_BUFFER_COMMIT=0 +BLF_ASYNC_WRITE_BUFFER_SIZE=65536 +BLF_ASYNC_WRITE_BUFFER_COUNT=8 +BLF_ASYNC_WRITE_BUFFER_COMMIT=1 +MDF_SAMPLE_REDUCTION_CREATE=2 +MDF_SAMPLE_REDUCTION_COMPRESS=0 +MF4_SIGNAL_DESCRIPTION_CREATE=2 +MF4_BUS_SORTING_APPLY=1 +MF4_SIGNAL_DESCRIPTION_INFO=1 +MF4_BUS_SORTING_INFO=1 +MF4_LOAD_HORIZONTAL_MEASUREMENT=0 +MF4_LOAD_VERTICAL_MEASUREMENT=0 +MF4_ASK_USER_LOAD_MEASUREMENT=1 +MDF_FILE_TIME_ZONE_OFFSET_HR=0 +MDF_FILE_TIME_ZONE_OFFSET_MIN=0 +MDF_FILE_TIME_ZONE_OFFSET_SIGN=0 +MDF_FILE_TIME_ZONE_OFFSET=14 +MDF_FILE_TIME_ZONE_SETTING=0 +MDF_FILE_TIME_ZONE_OFFSET_SETTING=0 +MDF_FILE_TIME_ZONE_OFFSET_ACTIVE=0 +MDF_SPLIT_READING_LARGE_RECORDS=1024 +GO_THROUGH_ACTIVE_BOOKMARKS_ONLY=1 +DISABLE_MULTI_SAMPLE_PROCESSING=0 +OPTIMIZE_MULTI_SAMPLE_THRESHOLD=10000 +MULTI_SAMPLE_SAVE_ALL=0 +GRAPHIC_QUALITY_MODE=0 +REDUCE_ARRAY_SAMPLE_THRESHOLD_NS=1000000 +REDUCED_ARRAY_SAMPLE_RATE_NS=50000000 +ICON_BUTTON_TRANSPARENCY=150 +MDF_WAIT_FOR_VALID_VALUES_TIMEOUT_MS=10000 +MDF_WRITE_INVAL_BITS=1 +MDF_WRITE_LINKER_MAP_REF=1 +MDF_WRITE_MODEL_LINK_NAME=1 +MDF_REPEAT_SINGLE_EVENT_SIGNAL_VALUES=0 +MDF_LOAD_HIDDEN_VTAB_BEHIND_LIN=1 +MDF_CALCULATE_MIN_MAX=1 +MDF_Update_MIN_MAX=1 +MDF_POLLING_IN_SEPARATE_GROUPS=0 +MDF_POLLING_IN_SEPARATE_GROUPS_MF4=1 +MDF_DATA_BLOCK_CACHING=1 +MDF_DATA_BLOCK_CACHING_ONLY_FOR_SEEK=0 +DATABASE_USE_MACROS_IN_VTABR=1 +IMPORT_CANDB_USE_SIGNAL_LONG_NAME=1 +IMPORT_CANDB_REPLACE_SPACES_IN_NAMES=1 +MDF_USE_LINEAR_CONV_IN_VTABR=1 +IMPORT_CANDB_PREVER_FACTOROFFSET=1 +POSSIBLE_TIME_CHANNEL_NAMES=t,T,Time,time +ADOPT_LIMITS_TO_DATATYPE=1 +TexTableFromShortTable=0 +MakePdusUnique=0 +LegacyAutosarArrayImport=0 +SomeIpEnableBlobMeasurement=0 +SomeIpMeasureAsComponent=0 +ONE_BIT_MAP_ENTRIES_ARE_UNSIGNED=0 +SHOW_MARKER_AT_GLOBAL_POSITION=0 +CREATE_LOST_VARIABLES=1 +ASSIGN_LOST_DEVICES=1 +EXCLUDE_ENVIRONMENT_FROM_PICK=1 +MIN_CALIBRATION_OFFSET=1 +SAVE_ONLY_REF_CAL_OBJECTS=1 +VALUEHISTORY=3 +MAXUNDO=10 +ALWAYS_MEASURE_ENTIRE_ARRAY=0 +USE_OPTIMIZED_SIGNAL_EVENT_DETECTION=1 +XFIT_CHANNEL=1 +XFIT_FILELIST=0 +SHOW_GRAPH_WINDOW_STRINGS=0 +OFFLINE_FILE_SYMBOL_IF_SAVED=0 +TIME_LIMIT_FOR_MDF4_PROPOSAL=15 +FATAL_FUNCTION_ERROR_HANDLING=0 +ASYNCRON_MODIFY_REPEAT_COUNT=5 +ASYNCRON_MODIFY_WAIT_TIME=50 +CONNECT_RETRY_LIMIT=0 +ACTIVITY_STYLE=1 +ACTIVITY_FLATLINE_LENGTH=3 +VALUE_LIMIT_BKCOLOR_LEFT_INTENSITY=70 +VALUE_LIMIT_BKCOLOR_RIGHT_INTENSITY=10 +TOOLTIP_INITIAL_TIME=300 +TOOLTIP_AUTOPOP_TIME=20000 +TOOLTIP_RESHOW_TIME=100 +GRAPH_MARKER_RECT_SIZE=16 +GRAPH_MARKER_RECT_SIZE_dpi96=8 +GRAPH_MARKER_RECT_LINE_SIZE=2 +GRAPH_MARKER_HORIZONTAL_LINE=1 +BASE_DIR=. +SAVE_LAST_MDF_DIRECTORY=1 +SAVE_LAST_CFG_DIRECTORY=1 +SAVE_LAST_SCR_DIRECTORY=1 +SAVE_LAST_REPORT_DIRECTORY=1 +SAVE_LAST_PAR_DIRECTORY=1 +NO_START_FILES=3 +SHOW_GRAPH_X_SCROLLBAR=1 +SHOW_AXIS_SCROLLBAR=1 +SHOW_LEGENDTEXT_COLOR=0 +SHOW_SLIM_LEGEND=0 +SHOW_VALUE_IN_LEGEND_HEADLINE=1 +SHOW_DISABLED_SIGNALS=1 +PROTECT_READONLY_CONFIGS=1 +IGNORE_INVALID_FOR_DISPLAY_FROM_FILE=0 +MAX_VALID_VALUE_SEARCH_STEPS=100 +AUTO_SAVE_CONFIGURATION=0 +SHOW_SYMBOL_EXPLORER=1 +PRINT_TIME_FORMAT=0 +PRINT_DATE_FORMAT=0 +EXPORT_WINDOW_TITLE=1 +SAVE_MDF_SIGNAL_COMMENTS_AUTOMATIC=0 +PUT_SIGNAL_COMMENT_IN_FOREGROUND=1 +POSITION_MARKER_BY_MOUSE_CLICK=1 +XY_MODE_LIMIT_4_POSITION_MARKER=10000 +XY_MODE_CURSOR_DRAG_NEIGHBOR_COUNT=5 +USE_VARIABLE_ZOOM_MODE=1 +VARIABLE_ZOOM_MODE_DELTA_XY=15 +VARIABLE_ZOOM_MODE_DELTA_XorY=40 +GRAPHIC_DISPLAY_NOT_LEFT_OF_MIN_TIME=0 +ZOOM_MARKERS_X=1 +SPACE_BETWEEN_MDI_CHILDS=0 +CHILD_MAGNETIC_SNAP_RANGE=7 +CHILD_MAGNETIC_MODE=2 +DISPLAY_PAGE_TAB_MULTILINE=1 +MEASUREMENT_COMMENT_LENGTH=256 +TRANSPARENCY_GRAPHIC_MIN_MAX_DISPLAY=30 +TRANSPARENCY_OFFSET_PRINT_GRAPHIC_MIN_MAX=-50 +TRANSPARENCY_GRAPHIC_MIN_MAX_ALPHA_CHANNEL=153 +DRAW_CALCULATED_SIGNALS_FULL=1 +GRAPHIC_DISPLAY_TRIGGER_LINES=1 +GRAPHIC_DISPLAY_MARKER_LINES=1 +GRAPHIC_DISPLAY_OTHER_LINES=1 +GRAPHIC_DISPLAY_HIT_LINES=1 +GRAPHIC_HIT_COLOR_STYLE=1 +WINDOW_HEADER_OFF=0 +USER_FONT_FOR_WINDOW_TITLE=0 +WINDOW_HEADER_POSITION=0 +BINFORMAT_REPRESENTATION=0 +TIME_DISPLAY_ROUND_FACTOR_NS=1000 +GLOBAL_ECU_CALIBRATION_OFFSET=1 +DATABASE_CACHE_COUNT=2 +LAYOUT_AXIS_COUNT_AFTER_VALUES=0 +USE_ADDRESS_MAPPING=0 +ADDRESS_OVERLAPPING_WITHOUT_READ_ONLY=0 +SUPPRESS_PARTIAL_DATABASES=0 +ASK_FOR_SAVING_WRITE_PROTECTED_DB=1 +ALLOW_PHYS_ADJUST_WITHOUT_INVERSE_FORMULA=0 +WIN32_EVENT=32 +ADVANCED_REALTIME_X=0 +IGNORE_OVERFLOW=0 +TIME_SYNC2=1 +DRAW_STATE_DISPLAY_CROSS_THRESHOLD=0 +DIRECTX_GRAPHEDIT=0 +SignalWrapper_0="GNNSPositionData", 0x80129029, "LatitudeHigh", "GPS_y" +SignalWrapper_1="GNNSPositionData", 0x80129029, "LongitudeHigh", "GPS_x" +SignalWrapper_2="GNNSPositionData", 0x80129029, "AltitudeHigh", "GPS_z" +SignalWrapper_3="DirectionData", 0x80130577, "CourseOverGround", "GPS_course" +SignalWrapper_4="DirectionData", 0x80130577, "SpeedOverGround", "GPS_speed" +SCRIPT_THREAD_TIMEOUT=200 +DISABLE_AUTOSCRIPTS_IN_ASAP3MODE=1 +CONFIG_LOAD_WARNING_LIMIT=100 +SWAP_DECREASING_COMMON_AXES=0 +DISPLAY_PRECISION=1 +INTERPRETE_PRECISION=0 +REMOVE_TRAILING_ZEROS=1 +DATABASE_DEFAULT_MAX_DIGITS=10 +EXPONENTIAL_SWITCH=1 +SIGNIFICANT_DIGITS_FLOAT=6 +SIGNIFICANT_DIGITS_DOUBLE=6 +DISPLAY_EXPONENTIAL=0 +IGNORE_DATABASE_PRECISION_SAVING=0 +USE_FOCUSED_MODULE=0 +USER_FUNCTION_ARG_STACKSIZE=128 +USER_FUNCTION_EVAL_GLOBAL_INSTANCES=0 +ENABLE_SCRIPT_THREAD=1 +SCRIPT_THREAD_PRIO=-1 +MAXDRAGDROPELEMENTSCOUNT=100 +MAX_COUNT_TOOLTIP_IN_OUT_ARGUMENTS=10 +PROCESS_PRIORITY_CLASS=128 +USE_ARRAY_SIZE_FOR_VALUE_BLOCKS=0 +PDF_EXPORT_DPI=300 +PDF_EXPORT_AUTHOR={USER} +PDF_EXPORT_TITLE= +PDF_EXPORT_SUBJECT= +PDF_EXPORT_KEYWORDS= +PDF_EXPORT_BOOKMARKS=1 +PDF_EXPORT_PROTECT=0 +PRINT_FIT_TO_PAGE_MAX_FACTOR=100 +DELETE_ADDRESS_OFFSETS_CHANGED=0 +DELETE_ADDRESS_OFFSETS_ALL=0 +UPDATE_DIMENSIONS=0 +UPDATE_ONLY_WITH_SYMBOL_LINK=1 +UPDATE_ON_MODIFIED_MAPFILE=0 +CUT_VIRTUAL_SIGNALS_TO_MIN_MAX=0 +GLOBAL_CURSOR_PLAY_RATE=200 +GLOBAL_CURSOR_PLAY_VELOCITY=1 +WORKINGPOINT_HISTORY_MAXIMUM_SIZE=3 +MESCURSOR_TOOLTIP_MAX_WIDTH=40 +MESCURSOR_TOOLTIP_TRANSPARENCY=15 +MESCURSOR_TOOLTIP_STICKTOSNAPRECT=0 +MESCURSOR_TOOLTIP_OFFSETFROMCURSOR=30 +MESCURSOR_TOOLTIP_MAXIMAGESIZE=100 +SHOW_MINOR_AXIS_STEPS=1 +DEFAULT_SCRIPT_EXTENSION=.cns +DOTNET_SCRIPT_EDITOR= +UPDATE_DATATYPE_ALWAYS=0 +UPDATE_LIMITS_ON_DATATYPE_CHANGE=2 +UPDATE_VERBAL_TABLES_FOR_ENUMS=1 +CDD_IMPORT_ARRAYS=0 +COMPU_TAB_USE_DEFAULT_VALUE=2 +COMPU_TAB_USE_TABLE_VALUE=0 +ENABLE_CLICK_DISPLAY_SELECTION=1 +ENABLE_SCROLLING_WITH_MARKER=1 +MARKER_SCROLL_RANGE_PIXELS=25 +MARKER_SCROLL_START_TIMER_MS=100 +MARKER_SCROLL_CYCLE_TIMER_MS=1000 +MARKER_MIN_SCROLL_VELOCITY=0 +MARKER_MAX_SCROLL_VELOCITY=10 +MOUSE_WHEEL_ZOOM_FACTOR=1.25 +MOUSE_WHEEL_ZOOM_FACTOR_FAST=2 +MOUSE_WHEEL_ZOOM_ACCELERATION=1 +MOUSE_WHEEL_ZOOM_ACCEL_THRESHOLD_MS=200 +MAIL_DEFAULT_ORIGINATOR_ADDRESS= +MAIL_DEFAULT_RECIP_TO_ADDRESSES= +MAIL_DEFAULT_RECIP_CC_ADDRESSES= +MAIL_DEFAULT_RECIP_BCC_ADDRESSES= +MAIL_DEFAULT_SUBJECT=Mail created by CANape +MAIL_DEFAULT_NOTE_TEXT= +MAIL_MAX_SEND_PER_HOUR=60 +VIRTUAL_SIGNAL_DSP_NAME_FORMAT=%F%(%P%) +RESTART_MEASUREMENT_CYCLE_TIME_MS=1000 +ILINKRT_LISTENER_PORT=5555 +ILINKRT_ENABLE_LOGGING=0 +ILINKRT_DAQ_PORT_BINDING=0 +MAX_FILENAME_HISTORY_COUNT=7 +RESTART_MEASUREMENT_CREATE_COMMENT=1 +DONT_START_MEASUREMENT_WITH_EVENTS_THAT_NEVER_OCCUR=1 +OPTIMIZE_MEALIST_AT_MEASTART=1 +POLLING_FOR_LIVE_VIEW_ECU=1 +POLLING_LIVE_VIEW_ENABLED=1 +MEASUREMENT_THREAD_COUNT=0 +LOGARITHMIC_AXIS_YMAX_LIMIT=1e+18 +LOGARITHMIC_AXIS_YMIN_LIMIT=1e-06 +DIM_FACTOR_PRINTING_COLORS=0.1 +TAB_CONTROL_DRAG_CURSOR_TIME=500 +MDI_CHILD_DRAG_CURSOR_TIME=500 +AUTOMATIC_ENABLE_DROPPED_SIGNALS=1 +ALLOW_SIGNAL_MODIFICATION=1 +MEA_DATA_FILTER_MAX_VALUE_COUNT=100000 +TRACE_TIMESTAMP_PRECISION=6 +TRACE_FLOAT_PRECISION=6 +TEMPORARY_IMPORT_CONFIG_FUNCTIONS=0 +TEMPORARY_IMPORT_CONFIG_VARIABLES=0 +UTC_OFFSET_ADJUSTMENT=1 +SN_SHORTENING_ACTIVE=0 +SN_SHORTEN_ALWAYS=0 +SN_SHORTEN_IN_BLOCKS=0 +SN_NUMBER_FIX_PARTS_LEFT=1 +SN_NUMBER_FIX_PARTS_RIGHT=1 +SN_PREFERED_SIDE=0 +SN_DISPLAY_LEFT_SIDE=1 +SN_DISPLAY_RIGHT_SIDE=1 +SHOW_DISPLAY_NAME=0 +SHOW_VARIANT_BEFORE_NAME=0 +STRUCTURE_CREATION_NEW_GROUP=1 +STRUCTURE_CREATION_FUNCTION_GROUP=0 +STRUCTURE_CREATION_EXISTING_GROUP=0 +CREATION_FROM_MAPFILE_MEASUREMENT=1 +CREATION_FROM_MAPFILE_PARAMETER=0 +CREATION_FROM_MAPFILE_INDIVIDUAL=0 +CREATION_FROM_MAPFILE_UPDATE_TREE=1 +SN_SEPARATOR_LEFT=. @ +SN_SEPARATOR_RIGHT=. +CACHE_SYNC_SHOW_SIMPLE_DIALOG=0 +CHECK_PROJECT_OPTIMIZATION=1 +SAVE_NEW_MAPFILE_IF_NOT_FOUND=0 +AXIS_TEMP_AUTOSCALE_MIN_INTERVAL_DRAW_UNITS_CNT=1 +AXIS_TEMP_AUTOSCALE_MIN_INTERVAL_DRAW_UNIT=0 +THESAURUS_ACTIVE=1 +THESAURUS_FILE_COUNT=0 +WINDOW_MOVE_FRAME_ALPHA=79 +WINDOW_MOVE_FRAME_WIDTH=5 +ADD_RECORDER_LINK_TO_MEASUREMENT_CONFIG=1 +DELETE_UNUSED_DATABASES=1 +IGNORE_MAP_REFERENCES_FOR_STRUCTURE_TREE=0 +SYMBOL_EXPLORER_SHOW_AOS_INSTANCES=0 +ASAP2_STRICT_IDENTIFIERS=0 +ASAP2_INVALID_IDENTIFIERSATBEGINWITHDIGIT=0 +ASAP2_INVALID_IDENTIFIERS=-|+/: +ASAP2_INVALID_IDENTIFIERSATBEGIN= +ASAP2_IGNORE_AML=0 +ASAP2_ALLOW_NESTED_COMMENTS=0 +PLAUSIBILITY_CHECK_BEFORE_SAVE_DB=0 +ASAP2_OPTIMIZE_RATIONAL_COMPU_METHODE=1 +ASAP2_CHECK_FOR_DUPLICATES=1 +OPTIMIZE_ASAP2_FORMAT=0 +OPTIMIZE_ASAP2_PHYS_UNIT=0 +OPTIMIZE_ASAP2_EXTENDED_LIMITS=0 +OPTIMIZE_ASAP2_ADDRESS_EXTENSION=0 +OPTIMIZE_ASAP2_DEPOSIT=0 +OPTIMIZE_ASAP2_DISPLAY_IDENTIFIER=0 +OPTIMIZE_ASAP2_ALIGNMENT=0 +OPTIMIZE_ASAP2_DISPLAY_SETTINGS=0 +OPTIMIZE_ASAP2_IF_DATA_ADDRESS=0 +OPTIMIZE_ASAP2_BYTE_ORDER=0 +OPTIMIZE_ASAP2_SYMBOL_LINK=0 +HIDE_MAP_WINDOW_CONTENT_IN_ASAP2_STUDIO=0 +ASAP2_DISABLE_MBCS_LEADING_BYTE_CHECK=0 +ASAP2_DEFAULT_ENCODING= +AUTOMATIC_LOADING_TARA_RESULTS=1 +IgnoreDeviceNotSyncedError=0 +SHOW_MIGRATION_DIALOG_PARAMETER_WINDOW=1 +IMAGE_ANONYMIZATION=0 +TID=1 +MAP_MAX_ARRAY=16 +OLD_EXPAND_SYNTAX=0 +ENABLE_POINTER=1 +ENABLE_ENUM=1 +ENABLE_MULTIDIMARRAY=1 +CONVERT_DOUBLETOFLOAT=0 +SIMPLE_ARRAY_VIEW=0 +COMPATIBLE_MODE=0 +REMOVE_UNDERLINE_PREFIX=0 +COFF_ADDRESS_MODE=8 +COFF_FORMAT_MODE=0 +ELF_SCOPE_PREFIX_FOR_STATIC_VARIABLES=0 +ELF_TRY_RESOLVE_FORWARD_DECLARATIONS=0 +ADD_ARRAY_BASE_ADDRESS_FOR_EACH_DIMENSION=0 +ELF_WRITE_VOID_PTR_AS_INT=0 +ELF_DEMANGLE_SYMTAB_NAMES=1 +ELF_SYMTAB_SEARCH_MODE=0 +ELF_ERROR_ON_AMBIGUOUS=0 +ELF_USE_OLD_VERSION=0 +ELF_USE_CPP_EXTENSION_DWARF2=0 +ELF_ARRAY_INDEX_FORM=0 +ELF_DOUBLE_AS_FLOAT=0 +ELF_ENUM_AS_INT=1 +ELF_UNDERLINE_PREFIX=0 +ELF_UNDERLINE_PREFIX_PREFIX=0 +ELF_NO_DOT_AFTER_ARRAYITEM=0 +ELF_WRITE_PTR_AS_INT=0 +COMPUNIT_NAME_AS_PREFIX=0 +COMPUNIT_NAME_AS_PREFIX_ALL=0 +FUNCTION_NAME_AS_PREFIX=0 +INVERTED_BIT_FIELDS=0 +INVERTED_BIT_FIELDS_INTEL=0 +ELF_BITFIELD_BYTESIZE_FROM_BASETYPE=0 +INVERTED_BIT_FIELDS_MIRROR=0 +INCREMENT_BIT_FIELDS_ADDRESS=1 +INCREMENT_BIT_FIELDS_ADDRESS_DISABLED=0 +ELF_FILE_READ_BUFFER_SIZE=0 +ELF_FORCE_SYMBOL_TABLE=0 +ELF_MAP_VERSION_FLAG=0 +ELF_SCOPE_SEPARATOR=._. +ELF_ADD_INHERITED_CLASSNAME_PREFIX=1 +ELF_SKIP_UNEXPECTED_TAGS=1 +ELF_ENABLE_ARRAY_DOT_DOT=0 +ELF_IGNORE_GLOBAL_PADDING=0 +ELF_NO_BASE_ADDRESS_DATATYPE=0 +ELF_NO_ARRAY_BASEADDR_DATATYPE=0 +ELF_ADD_BASE_CLASSNAME_PREFIX=1 +ELF_IGNORE_LEADING_UNDERSCORE=0 +ELF_LOG_FILE=0 +ELF_SKIP_NONVAR_TYPEDEF_DWARF2=1 +ELF_SKIP_NULL_RANGE_ARRAYS=0 +ELF_NO_BASE_ADDRESS=0 +ELF_REPLACE_CLASSNAME_SCOPESEPARATOR=0 +ELF_TRY_RESOLVE_MEMADDR_FROM_SYMBOLTABLE=0 +ELF_NO_EM00014972=0 +ELF_NO_EM00031543=0 +ELF_TRY_READ_CORRUPTED_COMPILE_UNITS=0 +COFF_DWARF_ADDRESS_MODE=16 +ELF_REPLACE_ANGLEBRACKETS=1 +ELF_REPLACE_DOT_CHARACTER=0 +ARRAY_INDEX_INSQUARE=0 +CALC_ARRAY_ITEM_SIZE=1 +ELF_TRY_RESOLVE_VARADDR_FROM_SYMBOLTABLE=0 +ELF_IGNORE_B_MEMBERS_DWARF2=0 +ELF_FORCE_DEBUG_SECTION_VERSION=0 +ELF_CHECK_TYPE_ENDLESS_RECURSION=0 +ELF_FOLLOW_REDIRECTION_REFERENCES=0 +ELF_BOOL_AS_UNSIGNED=0 +ELF_ADDRESS_MODE=0 +GHS_REMOVE_UNDERLINES=0 +GHS_INCLUDE_RODATA=0 +MAP_FIX_TASKING_TYPE_ERROR=1 +MAP_ARRAY_LEADING_ZERO=1 +MAP_IGNORE_LEADING_UNDERSCORE=1 +MAP_IGNORE_INSTRUCTION_ADDRESS=1 +MAP_CASE_SENSITIVE_LINKER=1 +MAP_BIT_SIZE_OF_INTEGER=0 +MAP_BYTE_SIZE_OF_ENUMERATION=-1 +MAP_DIRECT_BIT_BASE_ADDR=64768 +MAP_DIRECT_BIT_BYTE_OFFSET_MASK=65528 +MAP_DIRECT_BIT_BIT_OFFSET_MASK=7 +IGNORE_COMPILER_GLOBAL_VARIABLES=0 +OMF_ARRAY_INDEX_FORM=0 +OMF_LOG_FILE=0 +OMF_MCI_IN_ADDR=1 +PDB_ARRAY_INDEX_FORM=-1 +PDB_UNDERLINE_PREFIX=0 +PDB_REMOVE_LEADING_UNDERSCORE=0 +PDB_MAX_TYPE_IN_DETAIL=10 +PDB_WRITE_PTR_AS_INT=0 +PDB_RESOLVE_BITFIELD_ADDRESS=0 +UBROF_POINTER_AS_VARIABLE=1 +UBROF_WRITE_BUFFER_SIZE=32767 +UBROF_ARRAY_INDEX_FORM=0 +UBROF_NO_DOT_AFTER_ARRAY=0 +UBROF_SKIP_DUPLICATED_ADDRESSES=1 +UBROF_MAKE_LOGFILE=0 +UBROF_INVERTED_BIT_FIELDS=0 +UBROF_INCREMENT_BIT_FIELDS_ADDRESS=1 +UBROF_SCOPE_SEPARATOR=._. + +[WRITEWINDOW] + +; Flag to configure the type of displayed messages. The flag is +; a bit mask, multiple flags can be combined. E.g. a value of 0xFF +; shows all messages. A value of 0x00 (zero) disables the write +; window, it can't be opened then. +; 0x01 Enables Clear message (should be set always) +; 0x02 Show messages from functions +; 0x04 Show warning messages +; 0x08 Show error messages +; 0x10 Show trigger messages (if a trigger is fired) +; 0x20 Show command messages (with a hand symbol) +; 0x1000 Suppress CASL runtime errors (ATTENTION: When true CASL runtime errors are suppressed, so that the errors are displayed with the default flags to not change the behaviour of existing projects.) +; As default all messages are shown +SHOW_MESSAGES=255 +LOG=0 +LOGFILE=WriteWindow_log.TXT +LOG_OVERWRITE=0 +SHOW_FOR_ERRORS=1 +SHOW_FOR_MEA_ERRORS=0 +SHOW_LAST_LINE=1 +BUFFERSIZE=100000 +TIME_PRECISION=3 + +[DEFAULT_PRINT_LAYOUT] +Name=Default +Comment= +HeaderPos=1 +FooterPos=1 +HeaderHeight=25.61 +FooterHeight=8.68 +ShowWindowTitle=1 +PreviewSignals=0 +FitToPageMode=1 +FitPercentage=100 +ShowFrame=1 +HeaderFrame=1 +FooterFrame=1 +HeaderSpace=1.91 +FooterSpace=1.91 +PaperOrientation=2 +PaperSize=0 +PaperLength=210 +PaperWidth=297 +PaperMarginL=9.95 +PaperMarginT=9.95 +PaperMarginR=9.95 +PaperMarginB=9.95 +Unit=0 +DefaultForWindows=0 +ShowPageFrame=1 +ShowWindowFrame=1 +ShowDisabledSignals=1 +ShowDisplayIndex=0 + +[USER_PRINT_LAYOUT] +Count=1 + +[USER_PRINT_LAYOUT_0] +Name=A4 Portrait +Comment= +HeaderPos=1 +FooterPos=1 +HeaderHeight=50.59 +FooterHeight=13.23 +ShowWindowTitle=1 +PreviewSignals=0 +FitToPageMode=1 +FitPercentage=100 +ShowFrame=1 +HeaderFrame=1 +FooterFrame=1 +HeaderSpace=2 +FooterSpace=2 +PaperOrientation=1 +PaperSize=9 +PaperLength=297 +PaperWidth=210 +PaperMarginL=10 +PaperMarginT=10 +PaperMarginR=10 +PaperMarginB=10 +Unit=0 +DefaultForWindows=0 +ShowPageFrame=1 +ShowWindowFrame=1 +ShowDisabledSignals=1 +ShowDisplayIndex=0 +[PROJECT] +UNIQUE_PROJECT_ID=81f3c833-9f32-4a53-a24b-1e02b4692bb2 +PROJECT_ID_DATABASE=07e9-000a-0002-000b-0018-002f-0000 +UserFilterCount=0 +[ADAS] +PreferMeasurementConfigWhenDisplayed=1 +GroupFilesByMeasurement=1 + +[ADDON] +SUB_MENU=0 + +[ASAP2_IMPORT] +MAP_DOUBLE_TO_FLOAT=0 + +[AUDIO_COMMENT_DEVICE] +Device_Name= + +[BoaParams] +URIs_COUNT=0 +CanAssignment_COUNT=0 +FlxAssignment_COUNT=0 + +[BOOKMARKS] +ACTIVE_BOOKMARK_TYPE=0 +ACTIVE_BOOKMARK_GROUP= +ACTIVE_BOOKMARK_ID=-2 +ACTIVE_BOOKMARK_IDENTIFIER_STR= + +[BREAKPOINTS] +COUNT=0 + +[CANAPE_ENVIRONMENT] +OBJECT_COUNT=0 +COMMENT= +DRIVER=12 +PROTECT_DATABASE=0 +DATAFILE_NAME=CANape_Environment.HEX +CALRAMAUTOSEGMENTS=1 +CALRAMREADONLY=1 + +[COLORS] +CUSTOM0=8FF00 +CUSTOM1=8FF +CUSTOM2=FFFF +CUSTOM3=FFFF00 +CUSTOM4=FF00FF +CUSTOM5=80FF +CUSTOM6=FF0000 +CUSTOM7=FFFFFF +CUSTOM8=8FF80 +CUSTOM9=808FF +CUSTOM10=8FFFF +CUSTOM11=FFFF80 +CUSTOM12=FF80FF +CUSTOM13=8080FF +CUSTOM14=FF8080 +CUSTOM15=FFFFFF +ColorDisplay1=FF00 +ColorDisplay2=FF +ColorDisplay3=FFFF +ColorDisplay4=FFFF00 +ColorDisplay5=FF00FF +ColorDisplay6=80FF +ColorDisplay7=FF8080 +ColorDisplay8=FFFFFF +ColorMarker1=FFFF00 +ColorMarker2=FFFF +ColorTrigger=FF00 +ColorEventAudio=A6620D +ColorEventMarker=FF +ColorEventOther=FFFFFF +ColorHitMarker=FF00FF +ColorGrid=8000 +ColorBackground=0 +ColorChanged=FF0000 +ColorWindowBg=F0F0F0 +ColorAxis=FFFFFF +ColorAxisBackground=0 +ColorAxisSameScaled=FFFFFF +ColorAxisText=0 +ColorComments=FFFF00 +ColorCalComments=FFFF00 +ColorLegend=F0F0F0 +ColorLegendText=0 +ColorWindowFrameFocus=606060 +ColorWindowFrameButtons=0 +ColorHexWinCalRam=8000 +ColorHexWinNotCalRam=FF +ColorHexWinDbObject=80FFFF +ColorHexWinInvalid=AFAFFF +ColorHexWinInvalidDb=FF +ColorHexWinSelection=D77800 +ColorHexWinSelText=FFFFFF +ColorWriteText=FFFF00 +ColorValLimitOK=FF00 +ColorValLimitWarn=FFFF +ColorValLimitError=FF +ColorActiveTitleLeft=D1B499 +ColorActiveTitleRight=EAD1B9 +ColorActiveTitleText=0 +ColorInactiveTitleLeft=DBCDBF +ColorInactiveTitleRight70=F2E4D7 +ColorInactiveTitleText=0 +ColorMeaCursorTooltip=808080 +ColorMeaCursorTooltipTxt=FFFFFF +ColorDisplayGray=999999 +ColorDisplaySubGrid=4000 +ColorGraphBackground=D2D2D2 +ColorInvalidSignal=F0F0F0 +ColorLostVariable=C0C0C0 +ColorMoveFrame=FAD5A3 +ColorResizeMarkers=646464 +ColorPageBackground=D8C7BC +ColorDisabledLegendText=6D6D6D +ColorBordersHighlight=FFFFFF +ColorBordersShadow=A0A0A0 +ColorLookupTableX=FF +ColorLookupTableY=8000 +ColorLookupTableZ=FF0000 +ColorLookupTableZ4=FFFF00 +ColorLookupTableZ5=FF00FF +ColorActiveCell=30FFFF +ColorActiveCellText=FF +ColorMissingValues=FFFFFF +ColorBackgroundValues=880088 +ColorWorkingPoint=F0F0F0 +ColorColumnHeader=FFFFFF +ColorBackgroundMetaData=DADEE1 +ColorStatistic=0 +ColorMarker1CurveMode=F56DF3 +ColorMarker2CurveMode=277FFF + +[COMMENT_FIELDS] +ScreenDPIinSection=192 +Count=5 +MaxHistoryEntries=5 + +[CONFIG] +LAST=no_a2l_demo.cna +LAST1=no_a2l_demo.cna + +[CONVERTER] +LAST_MDF=1 +CONVERTER_OVERWRITE_TARGET=0 + +[CUSTOM_AXIS_TEMPLATE_LIST] +COUNT=0 + +[CUSTOM_PLACESBAR] +ENABLED=1 +NO_PB=0 +USE_CSIDL_0=1 +CSIDL_0=129 +DIRECTORY_0= +USE_CSIDL_1=1 +CSIDL_1=128 +DIRECTORY_1= +USE_CSIDL_2=1 +CSIDL_2=5 +DIRECTORY_2= +USE_CSIDL_3=1 +CSIDL_3=17 +DIRECTORY_3= +USE_CSIDL_4=1 +CSIDL_4=18 +DIRECTORY_4= + +[CUSTOM_PLACESBAR_CONFIG] +ENABLED=1 +NO_PB=0 +USE_CSIDL_0=1 +CSIDL_0=129 +DIRECTORY_0= +USE_CSIDL_1=1 +CSIDL_1=128 +DIRECTORY_1= +USE_CSIDL_2=1 +CSIDL_2=5 +DIRECTORY_2= +USE_CSIDL_3=1 +CSIDL_3=17 +DIRECTORY_3= +USE_CSIDL_4=1 +CSIDL_4=18 +DIRECTORY_4= + +[CUSTOM_PLACESBAR_MEASURE] +ENABLED=1 +NO_PB=0 +USE_CSIDL_0=1 +CSIDL_0=129 +DIRECTORY_0= +USE_CSIDL_1=1 +CSIDL_1=128 +DIRECTORY_1= +USE_CSIDL_2=1 +CSIDL_2=5 +DIRECTORY_2= +USE_CSIDL_3=1 +CSIDL_3=17 +DIRECTORY_3= +USE_CSIDL_4=1 +CSIDL_4=18 +DIRECTORY_4= + +[CUSTOM_PLACESBAR_PARAM] +ENABLED=1 +NO_PB=0 +USE_CSIDL_0=1 +CSIDL_0=129 +DIRECTORY_0= +USE_CSIDL_1=1 +CSIDL_1=128 +DIRECTORY_1= +USE_CSIDL_2=1 +CSIDL_2=5 +DIRECTORY_2= +USE_CSIDL_3=1 +CSIDL_3=17 +DIRECTORY_3= +USE_CSIDL_4=1 +CSIDL_4=18 +DIRECTORY_4= + +[CUSTOM_PLACESBAR_REPORT] +ENABLED=1 +NO_PB=0 +USE_CSIDL_0=1 +CSIDL_0=129 +DIRECTORY_0= +USE_CSIDL_1=1 +CSIDL_1=128 +DIRECTORY_1= +USE_CSIDL_2=1 +CSIDL_2=5 +DIRECTORY_2= +USE_CSIDL_3=1 +CSIDL_3=17 +DIRECTORY_3= +USE_CSIDL_4=1 +CSIDL_4=18 +DIRECTORY_4= + +[CUSTOM_PLACESBAR_SCRIPT] +ENABLED=1 +NO_PB=0 +USE_CSIDL_0=1 +CSIDL_0=129 +DIRECTORY_0= +USE_CSIDL_1=1 +CSIDL_1=128 +DIRECTORY_1= +USE_CSIDL_2=1 +CSIDL_2=5 +DIRECTORY_2= +USE_CSIDL_3=1 +CSIDL_3=17 +DIRECTORY_3= +USE_CSIDL_4=1 +CSIDL_4=18 +DIRECTORY_4= + +[CUSTOM_TIME_AXIS_TEMPLATE_LIST] +COUNT=0 + +[DEFAULT_DISPLAY] +SAME_DEFAULT_COLOR=1 +GLOBAL_DEFAULT_COLOR_INDEX=1 +USE_UNIQUE_COLOR=1 + +[DEFAULT_PRINT_LAYOUT_FooterElements] +Count=0 + +[DEFAULT_PRINT_LAYOUT_FOR_WINDOWS] +Name=SingleWindow +Comment= +DefaultForWindows=1 +HeaderPos=1 +FooterPos=0 +HeaderHeight=20 +FooterHeight=0 +ShowWindowTitle=0 +FitToPageMode=1 +FitPercentage=100 +ShowPageFrame=1 +ShowWindowFrame=1 +ShowDisabledSignals=1 +ShowDisplayIndex=0 +HeaderFrame=1 +FooterFrame=1 +HeaderSpace=2 +FooterSpace=2 +PaperOrientation=2 +PaperSize=9 +PaperLength=210 +PaperWidth=297 +PaperMarginL=10 +PaperMarginT=10 +PaperMarginR=10 +PaperMarginB=10 +Unit=0 + +[DEFAULT_PRINT_LAYOUT_FOR_WINDOWS_FooterElements] +Count=0 + +[DEFAULT_PRINT_LAYOUT_FOR_WINDOWS_HeaderElements] +Count=3 + +[DEFAULT_PRINT_LAYOUT_FOR_WINDOWS_HeaderElements_0] +Active=1 +PositionTop=4 +PositionTop_dpi96=2 +PositionLeft=4 +PositionLeft_dpi96=2 +Width=810 +Width_dpi96=405 +Height=74 +Height_dpi96=37 +AutoSize=0 +BorderActive=0 +BorderWidth=1 +BorderColor=0 +BorderLineStyle=1 +BorderCornerStyle=1 +BgColor=#FFFFFF +BgTransparent=0 +GUID=DISPLAY_ELEMENT_587fad08-1d97-4d94-8cfc-e4f8aaf9056c +Type=1 +TextCOUNT=1 +Text1={\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil\fcharset0 Arial;}{\f1\fswiss\fcharset0 Arial;}}\viewkind4\uc1\pard\b\fs16 Measurement file 1: \{FILENAME \{DISPLAYED_FILEID\}\}\par Name: \{NAME \{DISPLAYED_FILEID\}\} Division: \{DIVISION \{DISPLAYED_FILEID\}\}\par Project: \{PROJECT \{DISPLAYED_FILEID\}\} Measurement object: \{SUBJECT \{DISPLAYED_FILEID\}\}\par Comment: \{COMMENT \{DISPLAYED_FILEID\}\}\f1\fs20\par +WordWrap=1 +ShowFlag=0 +FlagPosTop=0 +FlagPosTop_dpi96=0 +FlagPosLeft=0 +FlagPosLeft_dpi96=0 +TextMargin=3 +VerticalAlignment=1 + +[DEFAULT_PRINT_LAYOUT_FOR_WINDOWS_HeaderElements_1] +Active=1 +PositionTop=4 +PositionTop_dpi96=2 +PositionLeft=890 +PositionLeft_dpi96=445 +Width=152 +Width_dpi96=76 +Height=74 +Height_dpi96=37 +AutoSize=0 +BorderActive=0 +BorderWidth=1 +BorderColor=0 +BorderLineStyle=1 +BorderCornerStyle=1 +BgColor=#FFFFFF +BgTransparent=0 +GUID=DISPLAY_ELEMENT_bf2dbfcf-7287-432c-af6e-4bedf99d827c +Type=1 +TextCOUNT=1 +Text1={\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil\fcharset0 Arial;}{\f1\fswiss\fcharset0 Arial;}}\viewkind4\uc1\pard\qr\b\fs16 \{DATE\} \{TIME\}\par\f1\fs20\par\par\f0\fs16 Page \{PAGE\} \f1\fs20\par} +WordWrap=1 +ShowFlag=0 +FlagPosTop=0 +FlagPosTop_dpi96=0 +FlagPosLeft=0 +FlagPosLeft_dpi96=0 +TextMargin=3 +VerticalAlignment=1 + +[DEFAULT_PRINT_LAYOUT_FOR_WINDOWS_HeaderElements_2] +Type=3 +ArrowLineWidth=1 +ArrowLineColor=0 +ArrowLineStyle=1 +ArrowHeadStart=0 +ArrowHeadEnd=0 +StartPointX=888 +StartPointX_dpi96=444 +StartPointY=0 +StartPointY_dpi96=0 +EndPointX=888 +EndPointX_dpi96=444 +EndPointY=74 +EndPointY_dpi96=37 +Active=1 +PositionTop=0 +PositionTop_dpi96=0 +PositionLeft=888 +PositionLeft_dpi96=444 +Width=0 +Width_dpi96=0 +Height=74 +Height_dpi96=37 +AutoSize=0 +BorderActive=0 +BorderWidth=1 +BorderColor=16777215 +BorderLineStyle=1 +BorderCornerStyle=1 +BgColor=#FFFFFF +BgTransparent=1 +GUID=DISPLAY_ELEMENT_5ae003ee-7b08-4367-86f6-8a4195f3ef8f + +[DEFAULT_PRINT_LAYOUT_HeaderElements] +Count=0 + +[DEFAULT_TIME_AXIS_TEMPLATE] +NAME= +UNITS= +SIGNAL_NAMES= +COMMENT= +SCALING_MODE=0 +GRID_MODE=1 +AUTO_ASSIGN=0 +MIN=0 +MAX=100 +DIVISION=10 +DIVISION2=5 +FIXSCALE_DRAW_UNITS_CNT=1 +FIXSCALE_DRAW_UNIT=0 +AXIS_LINE_COLORING_MODE=9 +AXIS_LINE_COLOR_FUNCTION= +AXIS_LINE_FIXED_COLOR=0 +AXIS_LINE2_COLORING_MODE=10 +AXIS_LINE2_COLOR_FUNCTION= +AXIS_LINE2_FIXED_COLOR=0 +AXIS_TEXT_COLORING_MODE=11 +AXIS_TEXT_COLOR_FUNCTION= +AXIS_TEXT_FIXED_COLOR=0 +DISPLAY_BKG_COLORING_MODE=0 +DISPLAY_BKG_COLOR_FUNCTION= +DISPLAY_BKG_FIXED_COLOR=0 +GRID_LINE_COLORING_MODE=15 +GRID_LINE_COLOR_FUNCTION= +GRID_LINE_FIXED_COLOR=0 +GRID_LINE2_COLORING_MODE=24 +GRID_LINE2_COLOR_FUNCTION= +GRID_LINE2_FIXED_COLOR=0 +AXIS_TEXT_FONT_MODE=0 +AXIS_LINE_STYLE=0 +AXIS_LINE_WIDTH=2 +AXIS_LINE2_STYLE=0 +AXIS_LINE2_WIDTH=1 +GRID_LINE_STYLE=2 +GRID_LINE_WIDTH=1 +GRID_LINE2_STYLE=2 +GRID_LINE2_WIDTH=1 +DIMENSION_LINE_COUNT=0 + +[DEFAULT_Y_AXIS_TEMPLATE] +NAME= +UNITS= +SIGNAL_NAMES= +COMMENT= +SCALING_MODE=0 +GRID_MODE=2 +AUTO_ASSIGN=0 +MIN=0 +MAX=100 +DIVISION=10 +DIVISION2=5 +FIXSCALE_DRAW_UNITS_CNT=1 +FIXSCALE_DRAW_UNIT=0 +AXIS_LINE_COLORING_MODE=13 +AXIS_LINE_COLOR_FUNCTION= +AXIS_LINE_FIXED_COLOR=0 +AXIS_LINE2_COLORING_MODE=13 +AXIS_LINE2_COLOR_FUNCTION= +AXIS_LINE2_FIXED_COLOR=0 +AXIS_TEXT_COLORING_MODE=13 +AXIS_TEXT_COLOR_FUNCTION= +AXIS_TEXT_FIXED_COLOR=0 +DISPLAY_BKG_COLORING_MODE=0 +DISPLAY_BKG_COLOR_FUNCTION= +DISPLAY_BKG_FIXED_COLOR=0 +GRID_LINE_COLORING_MODE=15 +GRID_LINE_COLOR_FUNCTION= +GRID_LINE_FIXED_COLOR=0 +GRID_LINE2_COLORING_MODE=24 +GRID_LINE2_COLOR_FUNCTION= +GRID_LINE2_FIXED_COLOR=0 +AXIS_TEXT_FONT_MODE=0 +AXIS_LINE_STYLE=0 +AXIS_LINE_WIDTH=2 +AXIS_LINE2_STYLE=0 +AXIS_LINE2_WIDTH=1 +GRID_LINE_STYLE=2 +GRID_LINE_WIDTH=1 +GRID_LINE2_STYLE=2 +GRID_LINE2_WIDTH=1 +DIMENSION_LINE_COUNT=0 + +[DEVICE_EXPLORER] +ScreenDPIinSection=192 +POSX=320 +POSX_dpi96=160 +POSY=140 +POSY_dpi96=70 +SIZEX=2410 +SIZEX_dpi96=1205 +SIZEY=1460 +SIZEY_dpi96=730 +SHOWTOOLBAR=1 +SHOWSTATUSBAR=1 +SHOWGRID=0 +RIGHTPANE2HEIGHT=-2 +RIGHTPANE2HEIGHT_dpi96=-1 +TREEX=450 +TREEX_dpi96=225 +TREEY=1269 +TREEY_dpi96=635 +ACTIVEPANE=0 +SELECTED_TREENODE=Devices/no_a2l_demo_Device/Memory Segments +FIRSTVISIBLE_TREENODE=Devices +TREEEXPAND_COUNT=7 +TREEEXPAND_0=Devices +TREEEXPAND_1=Devices/no_a2l_demo_Device +TREEEXPAND_2=Devices/no_a2l_demo_Device/Protocol +LAST_FOCUSED_LISTCOLUMN=0 +LAST_FOCUSED_LISTINDEX=0 +LAST_TOP_LISTINDEX=0 +TREEEXPAND_3=Networks +TREEEXPAND_4=Networks/ETH_Network_Network +TREEEXPAND_5=Networks/ETH_Network_Network/no_a2l_demo_Device +TREEEXPAND_6=Networks/ETH_Network_Network/no_a2l_demo_Device/Protocol + +[DEVICE_WIZARD] +ScreenDPIinSection=192 +Left=1007 +Left_dpi96=504 +Top=2563 +Top_dpi96=1282 +Width=1556 +Width_dpi96=778 +Height=1138 +Height_dpi96=569 + +[DISTRIBUTED_HIGH_PERFORMANCE_RECORDING] +ConfigurationJson={"RemoteServiceDataList":[{"DisplayName":"CANape Master","Ip":"127.0.0.1","ComputerName":"CANape Master","Platform":"Windows_x86_64","DeviceDataList":[]}],"UiModel":{"Column1Width":170,"Column2Width":170,"Column3Width":170}} + +[DlgSaveConfigs] +ScreenDPIinSection=192 +ColWidthName=700 +ColWidthDisplay=462 +WindowLeft=1208 +WindowLeft_dpi96=604 +WindowTop=739 +WindowTop_dpi96=370 +WindowWidth=1241 +WindowWidth_dpi96=621 +WindowHeight=637 +WindowHeight_dpi96=319 + +[EthRouter::FlexRay1] +IP_ADDRESS=127.0.0.0 +TCP_PORT=10510 +BusId=0 +Version=0 +EthProtocol=undefined + +[EVENT_COLOR_TABLE] +IS_ENABLED=1 +IS_ENABLED_0=1 +CUSTOM_TEXT_COLOR_0=0 +SYSTEM_TEXT_COLOR_0=8 +CUSTOM_BACK_COLOR_0=16777215 +SYSTEM_BACK_COLOR_0=5 +IS_ENABLED_1=1 +CUSTOM_TEXT_COLOR_1=0 +SYSTEM_TEXT_COLOR_1=8 +CUSTOM_BACK_COLOR_1=16777215 +SYSTEM_BACK_COLOR_1=5 +IS_ENABLED_2=1 +CUSTOM_TEXT_COLOR_2=192 +SYSTEM_TEXT_COLOR_2=4294967295 +CUSTOM_BACK_COLOR_2=16777215 +SYSTEM_BACK_COLOR_2=5 +IS_ENABLED_3=1 +CUSTOM_TEXT_COLOR_3=0 +SYSTEM_TEXT_COLOR_3=8 +CUSTOM_BACK_COLOR_3=16777215 +SYSTEM_BACK_COLOR_3=5 +IS_ENABLED_4=1 +CUSTOM_TEXT_COLOR_4=0 +SYSTEM_TEXT_COLOR_4=8 +CUSTOM_BACK_COLOR_4=16777215 +SYSTEM_BACK_COLOR_4=5 +IS_ENABLED_5=1 +CUSTOM_TEXT_COLOR_5=0 +SYSTEM_TEXT_COLOR_5=8 +CUSTOM_BACK_COLOR_5=16777215 +SYSTEM_BACK_COLOR_5=5 +IS_ENABLED_6=1 +CUSTOM_TEXT_COLOR_6=0 +SYSTEM_TEXT_COLOR_6=8 +CUSTOM_BACK_COLOR_6=16777215 +SYSTEM_BACK_COLOR_6=5 +IS_ENABLED_7=1 +CUSTOM_TEXT_COLOR_7=0 +SYSTEM_TEXT_COLOR_7=8 +CUSTOM_BACK_COLOR_7=16777215 +SYSTEM_BACK_COLOR_7=5 +IS_ENABLED_8=1 +CUSTOM_TEXT_COLOR_8=0 +SYSTEM_TEXT_COLOR_8=8 +CUSTOM_BACK_COLOR_8=16777215 +SYSTEM_BACK_COLOR_8=5 +IS_ENABLED_9=1 +CUSTOM_TEXT_COLOR_9=0 +SYSTEM_TEXT_COLOR_9=8 +CUSTOM_BACK_COLOR_9=16777215 +SYSTEM_BACK_COLOR_9=5 +IS_ENABLED_10=1 +CUSTOM_TEXT_COLOR_10=0 +SYSTEM_TEXT_COLOR_10=8 +CUSTOM_BACK_COLOR_10=16777215 +SYSTEM_BACK_COLOR_10=5 +IS_ENABLED_11=1 +CUSTOM_TEXT_COLOR_11=0 +SYSTEM_TEXT_COLOR_11=8 +CUSTOM_BACK_COLOR_11=16777215 +SYSTEM_BACK_COLOR_11=5 +IS_ENABLED_12=1 +CUSTOM_TEXT_COLOR_12=0 +SYSTEM_TEXT_COLOR_12=8 +CUSTOM_BACK_COLOR_12=16777215 +SYSTEM_BACK_COLOR_12=5 +IS_ENABLED_13=1 +CUSTOM_TEXT_COLOR_13=192 +SYSTEM_TEXT_COLOR_13=4294967295 +CUSTOM_BACK_COLOR_13=16777215 +SYSTEM_BACK_COLOR_13=5 +IS_ENABLED_14=1 +CUSTOM_TEXT_COLOR_14=192 +SYSTEM_TEXT_COLOR_14=4294967295 +CUSTOM_BACK_COLOR_14=16777215 +SYSTEM_BACK_COLOR_14=5 +IS_ENABLED_15=1 +CUSTOM_TEXT_COLOR_15=0 +SYSTEM_TEXT_COLOR_15=8 +CUSTOM_BACK_COLOR_15=16777215 +SYSTEM_BACK_COLOR_15=5 +IS_ENABLED_16=1 +CUSTOM_TEXT_COLOR_16=0 +SYSTEM_TEXT_COLOR_16=8 +CUSTOM_BACK_COLOR_16=16777215 +SYSTEM_BACK_COLOR_16=5 +NODE_IS_ENABLED_0=1 +NODE_IS_ENABLED_1=1 +NODE_IS_ENABLED_2=1 +NODE_IS_ENABLED_3=1 +NODE_IS_ENABLED_4=1 + +[EVENT_COMPARE] +DARKEN=45 +TOOLTIP_VALUE_COUNT=4 +TOOLTIP_VALUE_COMPARE=1 + +[FONT] +HEIGHT=-24 + +[FUNCTION_DLL_ADDON] +COUNT=0 + +[FUNCTIONS] +COUNT=0 + +[MDF_FILE_COLLECTIONS] +COUNT=0 + +[MDF_FILES] +COUNT=0 + +[MEASUREMENTS] +COUNT=1 + +[Module_no_a2l_demo] +FLAGS=1 +ACTIVE_STATE=0 +CALIBRATION_MODE_DIRECT=1 +RESTART_MEASUREMENT_ON_ERROR=0 +MEASUREMENT_MODE_PRIORITY=0 +COMMENT= +PARAMETER_DIR= +DATABASE_DIR= +DRIVER=13 +DETECT_DATABASE=0 +USE_DATABASENAME_FROM_ECU=0 +DATABASE_NAME=no_a2l_demo.a2l +LOAD_LAST_DATABASE=1 +PROTECT_DATABASE=0 +DATAFILE_DIR= +DATAFILE_NAME=no_a2l_demo.HEX +CALRAM_NAME_DB=0 +AUTOSAVE_DATAFILE=0 +CALRAMAUTOSEGMENTS=0 +MAP_READ_IF_NEWER=0 +MAPFILE_DIR= +MAP_USAGE=0 +MAP_COUNTER=1 +MAP_COUNT=0 +CONFIG_TOOL= +CONFIG_OPTIONS= +SAVE_ORIGINAL_IF_DATA=0 +SPECIFIC_FILTER_TYPE=0 +SPECIFIC_FILTER_COUNT=0 +SPECIFIC_FILTER_USE_IN_CDM=1 +SPECIFIC_FILTER_USE4ALL_COLUMNS_INCDM=0 +ECDM_DEVICE=0 +DRIVER_MODE=13 +XCP_FREEZE_SUPPORTED=1 +DATABASE_NETWORK= +ONLINE_CALIBRATION_ACTIVE=1 +AUTO_CREATE_MEASUREMENT_OBJECTS=0 +THESAURUS_FILE_COUNT=0 +THESAURUS_ACTIVE=0 +UserFilterCount=0 +ModuleExtensionDll= +ModuleExtensionCompany= +ReadOnlyDatabase=1 +IdentifyBySignalNameOnly=0 +NETWORK=3 +NETCHANNEL=[ETH::WSK:] +MAPPED_CHANNEL_INFO= +NETDEVICE=EthAdapter +SUPPRESS_EVENT_DETECTION=0 +FORCE_SW_SYNC_IF_NECESSARY=0 +CONNECT_MODE=0x00 +CONNECT_MODE_FOR_FLASH=0xFFFFFFFF +XCP_MAXCTO=248 +XCP_MAXDTO=1024 +XCP_COMM_MODE_BASIC=0x80 +XCP_MAX_DLC_REQUIRED=0 +XCP_MAX_DLC=8 +XCP_USE_TOOL_SETTINGS=0 +XCP_COMM_MODE_OPTIONAL=0x00 +XCP_QUEUE_SIZE=0 +XCP_MAX_BS=0 +XCP_MIN_TS=0 +XCP_MAX_BS_PGM=0 +XCP_MIN_ST_PGM=0 +XCP_MAXCTO_PGM=8 +XCP_COMM_MODE_PGM=0x00 +XCP_OPTIONAL_CMD_AVAILABLE_0=2 +XCP_OPTIONAL_CMD_AVAILABLE_1=2 +XCP_OPTIONAL_CMD_AVAILABLE_2=2 +XCP_OPTIONAL_CMD_AVAILABLE_3=2 +XCP_OPTIONAL_CMD_AVAILABLE_4=2 +XCP_OPTIONAL_CMD_AVAILABLE_5=2 +XCP_OPTIONAL_CMD_AVAILABLE_6=3 +XCP_OPTIONAL_CMD_AVAILABLE_7=3 +XCP_OPTIONAL_CMD_AVAILABLE_8=2 +XCP_OPTIONAL_CMD_AVAILABLE_9=2 +XCP_OPTIONAL_CMD_AVAILABLE_10=2 +XCP_OPTIONAL_CMD_AVAILABLE_11=2 +XCP_OPTIONAL_CMD_AVAILABLE_12=2 +XCP_OPTIONAL_CMD_AVAILABLE_13=2 +XCP_OPTIONAL_CMD_AVAILABLE_14=2 +XCP_OPTIONAL_CMD_AVAILABLE_15=2 +XCP_OPTIONAL_CMD_AVAILABLE_16=2 +XCP_OPTIONAL_CMD_AVAILABLE_17=2 +XCP_OPTIONAL_CMD_AVAILABLE_18=2 +XCP_OPTIONAL_CMD_AVAILABLE_19=3 +XCP_OPTIONAL_CMD_AVAILABLE_20=3 +XCP_OPTIONAL_CMD_AVAILABLE_21=3 +XCP_OPTIONAL_CMD_AVAILABLE_22=3 +XCP_OPTIONAL_CMD_AVAILABLE_23=3 +XCP_OPTIONAL_CMD_AVAILABLE_24=2 +XCP_OPTIONAL_CMD_AVAILABLE_25=3 +XCP_OPTIONAL_CMD_AVAILABLE_26=3 +XCP_OPTIONAL_CMD_AVAILABLE_27=2 +XCP_OPTIONAL_CMD_AVAILABLE_28=3 +XCP_OPTIONAL_CMD_AVAILABLE_29=3 +XCP_OPTIONAL_CMD_AVAILABLE_30=3 +XCP_OPTIONAL_CMD_AVAILABLE_31=3 +XCP_OPTIONAL_CMD_AVAILABLE_32=3 +XCP_OPTIONAL_CMD_AVAILABLE_33=3 +XCP_OPTIONAL_CMD_AVAILABLE_34=3 +XCP_OPTIONAL_CMD_AVAILABLE_35=3 +XCP_OPTIONAL_CMD_AVAILABLE_36=3 +XCP_OPTIONAL_CMD_AVAILABLE_37=2 +XCP_OPTIONAL_CMD_AVAILABLE_38=2 +XCP_OPTIONAL_CMD_AVAILABLE_39=2 +XCP_OPTIONAL_CMD_AVAILABLE_40=2 +XCP_OPTIONAL_CMD_AVAILABLE_41=2 +XCP_OPTIONAL_CMD_AVAILABLE_42=3 +XCP_OPTIONAL_CMD_AVAILABLE_43=3 +XCP_OPTIONAL_CMD_AVAILABLE_44=2 +XCP_OPTIONAL_CMD_AVAILABLE_45=3 +XCP_OPTIONAL_CMD_AVAILABLE_46=2 +XCP_OPTIONAL_CMD_AVAILABLE_47=2 +XCP_OPTIONAL_CMD_AVAILABLE_48=3 +XCP_OPTIONAL_CMD_AVAILABLE_49=3 +XCP_OPTIONAL_CMD_AVAILABLE_50=2 +XCP_OPTIONAL_CMD_AVAILABLE_51=3 +XCP_OPTIONAL_CMD_AVAILABLE_52=3 +XCP_OPTIONAL_CMD_AVAILABLE_53=3 +XCP_OPTIONAL_CMD_AVAILABLE_54=3 +XCP_OPTIONAL_CMD_AVAILABLE_55=2 +XCP_OPTIONAL_CMD_AVAILABLE_56=2 +XCP_OPTIONAL_CMD_AVAILABLE_57=3 +XCP_OPTIONAL_CMD_AVAILABLE_58=3 +XCP_OPTIONAL_CMD_AVAILABLE_59=3 +XCP_OPTIONAL_CMD_AVAILABLE_60=2 +XCP_OPTIONAL_CMD_AVAILABLE_61=2 +XCP_OPTIONAL_CMD_AVAILABLE_62=2 +XCP_OPTIONAL_CMD_AVAILABLE_63=2 +XCP_OPTIONAL_CMD_AUTO_LEARNING=1 +XCP_OPTIONAL_SUB_CMD_AVAILABLE_0=3 +XCP_OPTIONAL_SUB_CMD_AVAILABLE_1=2 +XCP_OPTIONAL_SUB_CMD_AVAILABLE_2=2 +XCP_DAQ_PROPERTIES=0x13 +XCP_DAQ_KEY_BYTE=0xC0 +XCP_DAQ_TIMESTAMP_MODE=0x0C +XCP_DAQ_TIMESTAMP_TICKS=1 +XCP_MIN_DAQ=0 +XCP_MAX_DAQ=0 +XCP_MAX_DAQ_ODTENTRY_SIZE=248 +XCP_MAX_STI_ODTENTRY_SIZE=248 +XCP_DAQ_GRANULARITY=1 +XCP_STI_GRANULARITY=1 +DAQ_USERDEF_WRITE_MULTIPLE_SUPPORTED=0 +LOGGER_CONFIG_RAW_MODE=0 +XCP_PRIMARY_DRIVER= +USE_ASAP_TIMEOUTS=0 +PROGRAM_START_TIMEOUT=0 +PROGRAM_CLEAR_TIMEOUT=0 +PROGRAM_TIMEOUT=0 +USER_DEF_CONNECT_TIMEOUT=0 +RETRY_DELAY=0 +XCP_USE_COMPLEM_CHANNEL=1 +XCP_LOGICAL_CHANNEL=0 +XCP_SLAVE_ID=0 +DISABLE_FASTPOLLING=0 +XCP_DAQ_SKIP_PREPARE_SELECTED=0 +TEST=0 +IGNORE_DTO_EM=0 +CCP_VERSION=304 +INCA=0 +CRO_ID=0x00000667 +DTO_ID=0x000007E1 +SLAVE_ADDR=0x0039 +FLOAT_FORMAT=0 +MOTOROLA=0 +SEED_KEY=0 +SEED_KEY_NAME_PGM= +SEED_KEY_NAME_DAQ= +SEED_KEY_NAME_CAL= +ENABLE_PERMANENT_SEED_KEY_CHECK=0 +SET_SESSION_STATUS=0 +CHECKSUM_TIMEOUT=2000 +GET_CAL_PAGE=0 +INIT_CAL_PAGE_ALWAYS=0 +DOS_ID=0 +TIMEOUT=1000 +INIT_TIMEOUT=2000 +INIT_RETRY_DELAY=0 +INIT_RETRIES=0 +MAX_RETRIES=3 +TIMEOUT_RETRY=0 +BUSY_RETRY=1 +BUSY_TIMEOUT=15000 +RETRY_CTR=0 +IGNORE_CTR_FAULTS=0 +CHECK_OVERFLOW=0 +LOAD_GRANULARITY=212 +LOAD_CHECKSUM=1 +READBACK_DISABLED=0 +IFDATA_QUERY=0 +DEC_ADDR_EXT=0 +POLLING_DISABLED=0 +SHORT_UPLOAD_DISABLED=0 +DNLOAD_MAX_DISABLED=0 +PROGRAM_MAX_DISABLED=0 +TEST_DISABLED=0 +OPTIMIZED_MAPS_DISABLED=0 +DOWNLOAD_MAPS_DISABLED=0 +DAQ_CONSTRUCTION_LEGACY_MODE=0 +CCP101_RESTART_DAQ=0 +BEG_CAL_SERVICE=0x1f1 +END_CAL_SERVICE=0x2f1 +TEST_CONNECTION_PERIOD=0 +OVERRUN_HANDLING=0 +EVENT_COUNT=4 +IGNORE_FIX_EVENTS=0 +ECU_CYCLE_TIME=0 +DEFAULT_EVENT_CHANNEL=-1 +ECU_TIMESTAMP=1 +DAQ_TIMESYNC_NEW=1 +DETECT_SYNC_PULSE=0 +GENERATE_SYNC_PULSE=0 +TIME_CORR_MULTICAST=0 +DAQ_TIMEOUT=0 +DAQ_RESUME_SUPPORTED=0 +DAQ_PRESCALER_SUPPORTED=1 +DAQ_SINGLE_EVENT=0 +DTO_SINGLE_EXT=0 +DOUBLE_AS_FLOAT=0 +ODT_ENTRY_ADDRESS_OPT_DISABLED=0 +FLOAT32_AS_FLOAT16=0 +DAQ_SIGNAL_SORT_MODE=0 +DTO_BYTE_MODE=1 +CONSISTENCY_MODE=2 +SUPPRESS_CONSISTENCY_CHECK=0 +CANDB_CCP_CONF=0 +PSEUDO_CAN_ID_START=2415919104 +DSP_MODE=0 +DAQ_LIST_AUTODETECT=1 +DAQ_COUNT=0 +DAQ_CONFIG_ID=6234 +DAQ_START_STOP_ALL_DISABLED=0 +INIT_CAL_PAGE_SEGMENTWISE=0 +CALRAM_CHECK_INITIAL_PAGE=1 +CALRAM_INITIAL_PAGE=0 +CALRAM_FORCE_INITIAL_PAGE_SWITCH=0 +DIAG_SERVICE=0 +CMD_CLEAR_MEMORY=0 +CMD_PROGRAM=0 +CMD_ACTION_SERVICE=0 +CMD_MOVE_MEMORY=0 +CMD_SELECT_CAL_PAGE=0 +BCP_EXTENSION_ENABLED=0 +RESOURCE_PROTECTION_STATUS=0 +UPDATE_A2L_OBJECTS_FROM_ECU=0 +SHORT_DOWNLOAD_DISABLED=1 +MODIFY_BITS_DISABLED=1 +BLOCK_MEASUREMENT=1 +GLOBAL_DOWNLOAD_WITH_BEGIN_END=0 +LOCAL_DOWNLOAD_WITH_BEGIN_END=0 +LOCAL_UPLOAD_WITH_BEGIN_END=0 +AUTODETECT_DATABASE_DLL_NAME= +FORCE_DEFAULT_EVENT=0 +TIMESTAMP_TICK_MODE=1 +DAQ_COUNTER_HANDLING=1 +DAQ_SUPPRESS_STIM_TIMESTAMPS=0 +DAQ_CALCULATE_FIRST_PIDS_WHEN_OFFLINE=1 +BLOCK_DOWNLOAD_MODE=0 +STOP_DAQ_ON_CONNECT=1 +CALRAM_WRITE_OPT=1 +CALRAM_OFFLINE=1 +CALRAM_FLASH_OFFSET=0x00000000 +CALRAM_CACHE=1 +CALRAM_DEF_ACTION_READONLY=0 +CALRAM_DEF_ACTION_TEMPREADONLY=0 +CALRAM_DEF_ACTION_WRITABLE=0 +CALRAM_EXECUTE_DEF_ACTION=0 +CALRAM_DO_BACKUP_ON_UPLOAD=0 +CALRAM_USE_ALT_FILE_ON_DOWNLOAD=0 +CALRAM_IMPORT_CODE_SEGMENTS=0 +CALRAM_ALT_FILE= +CALRAM_BACKUP_FILE= +CALRAM_MERGE_TO_HEXFILE=0 +CHECK_EPROM_IDENTIFIER=0 +CHECK_CODE_CHECKSUM=0 +FLASH_SKIP_FF=0 +FLASH_DEFAULT_CONTENT=255 +FLASH_OPTIMIZATION=0 +FLASH_CLEAR_TIMEOUT=10000 +FLASH_START_TIMEOUT=10000 +FLASH_RECONNECT=0 +FLASH_RECONNECT_DELAY=2000 +FLASH_SIGN_ADDR=0x00000000 +FLASH_SIGN_SIZE=0 +FLASH_SIGN_ENABLED=0 +FLASH_VFLASH_PROJECT_DIR= +FLASH_VFLASH_PROJECT_FILE= +FLASH_VFLASH_SAVEABLE_IDENTIFIER= +FLASH_VFLASH_DEACTIVATE_NETWORK=1 +FLASH_KERNEL_FILE_NAME=Direct +FLASH_KERNEL_VERSION=(unknown) +FLASH_KERNEL_TYPE=0 +FLASH_KERNEL_FILE_ADDR=0 +FLASH_KERNEL_SIZE=0 +FLASH_KERNEL_RAM_ADDR=0 +FLASH_KERNEL_RAM_START=0 +FLASH_KERNEL_USE_SECTORS=1 +FLASH_PROGRAM_VERIFY=0 +FLASH_PROGRAM_VERIFY_EXTERNAL=1 +PROGRAM_VERIFY_TYPE=0 +PROGRAM_VERIFY_TYPE_USERDEF=256 +PROGRAM_VERIFY_VALUE=0 +DISCONNECT_AFTER_FLASHING=1 +FLASH_PROGRAM_RESET_DISABLED=0 +FLASH_DISABLE_PAGE_SWITCHING=0 +FLASH_DELETE_WHOLE_GROUP=0 +CALPAGE_XCP_INITIAL_PAGE=0 +SET_CALPAGE_SEPARATLY=1 +CALPAGE_SINGLE_SEGMENT_SWITCHING=0 +MEMORY_SEGMENTS_V8_COMPATIBILITY_MODE=0 +FLASH_TOOL=Protocol +FLASH_EXTERNAL_CONVERTER= +FLASH_GRANULARITY=212 +CHECKSUM_TYPE=12 +CHECKSUM_TYPE_INCA=0x0 +CHECKSUM_ENABLED=1 +CHECKSUM_DLL_NAME= +CHECKSUM_MAX_BLOCKSIZE=65535 +ENABLE_CHECKSUM_OUTPUT=0 +CHECKSUM_TYPE_MAPPING_2=2 +SELECT_CAL_PAGE=1 +INIT_CAL_PAGE=0 +RAM_PAGE_ID=0x0 +ROM_PAGE_ID=0x1 +RAM_PAGE_ID_EXT=0x0 +ROM_PAGE_ID_EXT=0x0 +FLASH_PAGE_ADDRESS_MAPPING_ENABLED=1 +RUNTIME_CALRAM_ONLY=0 +MEMORY_SEGMENT_COUNT=2 +CALRAM_SECTOR_COUNT=2 +FLASH_SECTOR_COUNT=0 +FLASH_GROUP_COUNT=0 +TRANSPORT_LAYER_INSTANCE_NAME= +PROTOCOL_TYPE=4 +PACKET_CTR=0 +TRANSPORT_LAYER_VERSION=260 +HOST_NAME= +HOST=192.168.0.206 +PORT=5555 +LOCAL_PORT=0 +TRANSPORT_LAYER_PROTOCOL=0 +MAX_BUS_LOAD=95 +MAX_BIT_RATE=100 +TCP_TIMEOUT=0 +XCP_REMOTE_CLIENT_ASSEMBLY_NAME= +XCP_REMOTE_CLIENT_NAME= +XCP_REMOTE_CLIENT_SETTINGS= +XCP_RX_QUEUE_SIZE=10485760 +USE_DTO_CHANNEL=0 +DTO_HOST=192.168.0.2 +DTO_PORT=5500 +DTO_TRANSPORT_LAYER_PROTOCOL=0 +InterfaceIp=192.168.0.2 +SubnetMask=255.255.255.0 +ChannelMode=0 +PreferedIp= +PreferedMask=255.255.255.0 +MulticastNetworks=0.0.0.0 +DelayedAck=0 +LoadLibraryFlags=0 +InterfaceMac= +MacSelection=0 +DhcpV4Enabled=0 +RetransmitStartTime=4 +RetransmitMaxTime=64 +MaxRetries=5 +PerformAppVerify=1 +AppVerificationTime=100 +ServerPort=67 +ClientPort=68 +AutoIpEnabled=0 +AutoIpProbeWait=1 +AutoIpProbeNum=3 +AutoIpProbeMin=1 +AutoIpProbeMax=2 +AutoIpAnnounceWait=2 +AutoIpAnnounceNum=2 +AutoIpAnnounceInterval=2 +AutoIpMaxConflicts=10 +AutoIpRateLimitInterval=60 +AutoIpDefendInterval=10 +DhcpV6Enabled=0 +DhcpV6SolMaxDelay=1 +DhcpV6SolTimeout=1 +DhcpV6MaxRT=120 +DhcpV6ReqTimeout=1 +DhcpV6ReqMaxRT=30 +DhcpV6ReqMaxRC=10 +DhcpV6RenTimeout=10 +DhcpV6RenMaxRT=600 +DhcpV6RebTimeout=10 +DhcpV6RebMaxRT=600 +VLAN_CONFIG_COUNT=0 +Databases_COUNT=0 +CHANNELX=255 +USE_ASAP2_DATABASE=1 +SEGMENTS_SHOWN_IN_SETTINGS=0 +EVENT_CHANNEL_0=0x0000 +EVENT_CHANNEL_1=0x0001 +EVENT_CYCLE_0=100 +EVENT_CYCLE_1=0 +EVENT_SAMPLE_UNIT_0=7 +EVENT_SAMPLE_UNIT_1=3 +EVENT_MODE_0=4 +EVENT_MODE_1=4 +EVENT_PRIO_0=0 +EVENT_PRIO_1=0 +EVENT_MAX_DAQ_LIST_0=255 +EVENT_MAX_DAQ_LIST_1=255 +EVENT_NAME_0=async +EVENT_NAME_1=mainloop +EVENT_MULTISAMPLES_0=0 +EVENT_MULTISAMPLES_1=0 +EVENT_MIN_CYCLE_TIME_CYCLE_0=0 +EVENT_MIN_CYCLE_TIME_CYCLE_1=0 +EVENT_MIN_CYCLE_TIME_UNIT_0=9 +EVENT_MIN_CYCLE_TIME_UNIT_1=9 +EVENT_DPM_SUPPORTED_0=0 +EVENT_DPM_SUPPORTED_1=0 +MAP_FORMAT1=131 +MAP_ADDR_EXT1=0 +MAP_TEMPLATE1=no_a2l_demo +MAP_LOCAL_PATH_TEMPLATE1= +MAP_EXT1=.out +MAP_TIME1=1759954171 +MAP_FORMAT=131 +MAP_EXT=.out +EVENT_CHANNEL_2=0x0002 +EVENT_CYCLE_2=0 +EVENT_SAMPLE_UNIT_2=3 +EVENT_MODE_2=4 +EVENT_PRIO_2=0 +EVENT_MAX_DAQ_LIST_2=255 +EVENT_NAME_2=task +EVENT_MULTISAMPLES_2=0 +EVENT_MIN_CYCLE_TIME_CYCLE_2=0 +EVENT_MIN_CYCLE_TIME_UNIT_2=9 +EVENT_DPM_SUPPORTED_2=0 +MEMORY_SEGMENT_NAME_1=epk +MEMORY_SEGMENT_TYPE_1=FLASH,DATA,INTERN +MEMORY_SEGMENT_SIZE_1=0x00000014 +MEMORY_SEGMENT_ADDR_1=0x80000000 +MEMORY_SEGMENT_ADDR_EXT_1=0x00 +MEMORY_SEGMENT_ATTRIBUTE_1=0x00000000 +MEMORY_SEGMENT_FLASH_OFFSET_1=0x00000000 +MEMORY_SEGMENT_ADDRESS_MAPPING_1= +CALRAM_SECTOR_NAME_1=epk +CALRAM_SECTOR_TYPE_1=FLASH,DATA,INTERN +CALRAM_SECTOR_SIZE_1=0x00000014 +CALRAM_SECTOR_ADDR_1=0x80000000 +CALRAM_SECTOR_ADDR_EXT_1=0x00 +CALRAM_SECTOR_ATTRIBUTE_1=0x00000000 +CALRAM_SECTOR_FLASH_OFFSET_1=0x00000000 +CALRAM_SECTOR_ADDRESS_MAPPING_1= +EVENT_CHANNEL_3=0x0003 +EVENT_CYCLE_3=0 +EVENT_SAMPLE_UNIT_3=3 +EVENT_MODE_3=4 +EVENT_PRIO_3=0 +EVENT_MAX_DAQ_LIST_3=255 +EVENT_NAME_3=foo +EVENT_MULTISAMPLES_3=0 +EVENT_MIN_CYCLE_TIME_CYCLE_3=0 +EVENT_MIN_CYCLE_TIME_UNIT_3=9 +EVENT_DPM_SUPPORTED_3=0 +MEMORY_SEGMENT_NAME_2=params +MEMORY_SEGMENT_TYPE_2=FLASH,DATA,INTERN +MEMORY_SEGMENT_SIZE_2=0x00000038 +MEMORY_SEGMENT_ADDR_2=0x80010000 +MEMORY_SEGMENT_ADDR_EXT_2=0x00 +MEMORY_SEGMENT_ATTRIBUTE_2=0x00000000 +MEMORY_SEGMENT_FLASH_OFFSET_2=0x00000000 +MEMORY_SEGMENT_ADDRESS_MAPPING_2= +CALRAM_SECTOR_NAME_2=params +CALRAM_SECTOR_TYPE_2=FLASH,DATA,INTERN +CALRAM_SECTOR_SIZE_2=0x00000038 +CALRAM_SECTOR_ADDR_2=0x80010000 +CALRAM_SECTOR_ADDR_EXT_2=0x00 +CALRAM_SECTOR_ATTRIBUTE_2=0x00000000 +CALRAM_SECTOR_FLASH_OFFSET_2=0x00000000 +CALRAM_SECTOR_ADDRESS_MAPPING_2= + +[MODULES] +COUNT=1 +1=32770, "no_a2l_demo" + +[NETWORK_0] +NETWORK=11 +NETCHANNEL=[ETH::WSK:] +MAPPED_CHANNEL_INFO= +NETDEVICE=EthAdapter +ChannelConfiguration= +Name=ETH_Network +UsePreconfiguredChannelNr=0 +Active=1 +SecurityActive=0 +SecurityProfileId=0 +TlsActive=0 +TlsProfileId=0 +LocalMulticastPort=5558 +InterfaceIp=192.168.0.2 +SubnetMask=255.255.255.0 +ChannelMode=0 +PreferedIp= +PreferedMask=255.255.255.0 +MulticastNetworks=0.0.0.0 +DelayedAck=0 +LoadLibraryFlags=0 +InterfaceMac= +MacSelection=0 +DhcpV4Enabled=0 +RetransmitStartTime=4 +RetransmitMaxTime=64 +MaxRetries=5 +PerformAppVerify=1 +AppVerificationTime=100 +ServerPort=67 +ClientPort=68 +AutoIpEnabled=0 +AutoIpProbeWait=1 +AutoIpProbeNum=3 +AutoIpProbeMin=1 +AutoIpProbeMax=2 +AutoIpAnnounceWait=2 +AutoIpAnnounceNum=2 +AutoIpAnnounceInterval=2 +AutoIpMaxConflicts=10 +AutoIpRateLimitInterval=60 +AutoIpDefendInterval=10 +DhcpV6Enabled=0 +DhcpV6SolMaxDelay=1 +DhcpV6SolTimeout=1 +DhcpV6MaxRT=120 +DhcpV6ReqTimeout=1 +DhcpV6ReqMaxRT=30 +DhcpV6ReqMaxRC=10 +DhcpV6RenTimeout=10 +DhcpV6RenMaxRT=600 +DhcpV6RebTimeout=10 +DhcpV6RebMaxRT=600 +VLAN_CONFIG_COUNT=0 +Databases_COUNT=0 +DeviceCount=1 +Device_0=no_a2l_demo + +[NETWORKS] +Count=1 + +[no_a2l_demo_ECDMVariants] +ECDM_DEVICE=0 + +[PARAMETERCLASSIFICATION] +PARAMETER_CLASSIFICATION_ATTRIBUTE_00= +PARAMETER_CLASSIFICATION_ATTRIBUTE_01= +PARAMETER_CLASSIFICATION_ATTRIBUTE_02= +PARAMETER_CLASSIFICATION_ATTRIBUTE_03= +PARAMETER_CLASSIFICATION_ATTRIBUTE_04= +PARAMETER_CLASSIFICATION_ATTRIBUTE_05= +PARAMETER_CLASSIFICATION_ATTRIBUTE_06= +PARAMETER_CLASSIFICATION_ATTRIBUTE_07= +PARAMETER_CLASSIFICATION_ATTRIBUTE_08= +PARAMETER_CLASSIFICATION_ATTRIBUTE_09= +PARAMETER_CLASSIFICATION_COLOR_00=0 +PARAMETER_CLASSIFICATION_COLOR_01=0 +PARAMETER_CLASSIFICATION_COLOR_02=0 +PARAMETER_CLASSIFICATION_COLOR_03=0 +PARAMETER_CLASSIFICATION_COLOR_04=0 +PARAMETER_CLASSIFICATION_COLOR_05=0 +PARAMETER_CLASSIFICATION_COLOR_06=0 +PARAMETER_CLASSIFICATION_COLOR_07=0 +PARAMETER_CLASSIFICATION_COLOR_08=0 +PARAMETER_CLASSIFICATION_COLOR_09=0 + +[PARASETEXPLORER-OPTIONS] +EDIT_SINGLE_INTERPOLATION=0 +EDIT_SINGLE_INTERPOLATION_WARN_ERR=0 +EDIT_READ_ONLY=0 +EDIT_ALLOW_CHANGE_AXIS_VALUE=2 +EDIT_READ_ONLY_WARN_ERR=0 +EDIT_IGNORE_MONOTONY=0 +EDIT_NO_DEPENDENT_QUANTIZATION=0 +COMPARISON_TYPE=1 +COMPARE_PHYSWITHQUANTISATION=0 +COMPARE_ASCIIONLYUNTILZEROINHEXCOMPARE=0 +CALCULATEVALUEGROUPS=0 +COMPARISON_EXCLUDE_FROM_COMPARE=0 +LOAD_PARASET_AT_FIRST_POSITION=0 +LOAD_PARASET_FORCESELECTA2LFORDROPFILES=0 +SELECT_DATABASE_FOR_NEW_PARASET=0 +LOAD_PARASET_FORCESELECTA2L_FORALLFILES=0 +LOAD_PARASET_PROVE_EPK=0 +LOAD_PARASET_ALLVARIANTSASCOLUMN=0 +COMPARISON_TYPEEX_CNT=0 +COPY_READ_ONLY=0 +COPY_READ_ONLY_WARN_ERR=1 +COPY_DIFFERENT_UNITS=1 +COPY_DIFFERENT_UNITS_WARN_ERR=0 +COPY_NUMERIC_TO_VERBAL=0 +COPY_NUMERIC_TO_VERBAL_WARN_ERR=1 +COPY_SAME_GROUP_SST=0 +COPY_SAME_GROUP_SST_WARN_ERR=0 +HOW_TO_COPY_SST=0 +HOW_TO_COPY_SST_WARN_ERR=0 +HOW_TO_COPY_FWB=0 +HOW_TO_COPY_FWB_WARN_ERR=0 +HOW_TO_COPY_AXIS_POINTS=0 +HOW_TO_COPY_AXIS_POINTS_WARN_ERR=0 +HOW_TO_COPY_MAXSIZE=0 +HOW_TO_COPY_MAXSIZE_WARN_ERR=0 +HOW_TO_COPY_MISSING_AXIS=0 +HOW_TO_COPY_MISSING_AXIS_WARN_ERR=1 +LOAD_PARASET_MAXSIZE=0 +EDITMODE_STDLIMIT_BEHAVIOUR=0 +COPY_STD_LIMIT=2 +COPY_STD_LIMIT_WARN_ERR=1 +COPY_EXT_LIMIT=0 +COPY_EXT_LIMIT_WARN_ERR=1 +COPY_DTYP_LIMIT=0 +COPY_DTYP_LIMIT_WARN_ERR=1 +COPY_MONOTONY=0 +COPY_MONOTONY_WARN_ERR=1 +COPY_DEFAULT_MONOTONY_CHECK=0 +COPY_DEFAULT_MONOTONY_AXIS=0 +COPY_STD_EXT_LIMIT_HARMONIZED=1 +COPY_ASCII_PADDBYTESWITHZERO=1 +DEFAULTFORMAT_FORNEW=VPAR +DEFAULTEXTENSION_FORNEW=.PAR +COLOR_DEFCOLOR1=16711680 +COLOR_DEFCOLOR2=32768 +COLOR_DEFCOLOR3=255 +COLOR_DEFCOLOR4=8388672 +COLOR_DEFCOLOR5=8388608 +COLOR_DEFCOLOR6=32896 +COLOR_DEFCOLOR7=0 +COLOR_DEFCOLOR8=33023 +COLOR_DIFFCOLOR1=15527167 +COLOR_DIFFCOLOR2=16772332 +COLOR_DIFFCOLOR3=15532012 +COLOR_DIFFCOLOR4=16777092 +COLOR_DIFFCOLOR5=16760799 +COLOR_DIFFCOLOR6=12574719 +COLOR_DIFFCOLOR7=14671871 +COLOR_DIFFCOLOR8=12566527 +COLOR_MASTERSET=14811135 +COLOR_NUMVALUE=16777215 +COLOR_NUMXAXIS=16777215 +COLOR_NUMYAXIS=16777215 +COLOR_NUMFOCUSCELL=65535 +COLOR_HITCOLLECTION=33023 +COLOR_NUMDIFFVALUE=16711680 +CALIBRATIONSTATE_WITHBACKGROUNDCOLOR=0 +COLOR_DIFFVALFORTEXT=0 +EXTENDED_LOGGING=1 +LOGGINGVALUECHANGES=0 +OPEN_LOGGING=0 +HANDLE_VARCODDEDOBJECTS=1 +HANDLEVARIANTBASEDFILTER=1 +SHOWDEFREFPARAMETERS=0 +SHOW_FNC_AFFILIATION_ALL_PSETS=1 +DELETE_FILTERTREE_CHECKS=0 +SORT_STRINGS_MORE_HUMAN_READABLE=0 +FORCE_STANDARDAXIS_AND_COMMONAXIS_FLOATINGPOINTVALUES_IN_DECIMALFORMAT=0 +WORKWITHSYMBOLS=-1 +IGNORE_MEASUREMENT=0 +COMPARISON_SEMANTIC_FOR_LOOKUP_TABLES=0 +COMPARISON_PRECISION_FOR_SEMANTIC_COMPARISON=0 + +[PARASETEXPLORER-PRE_POST_PROCESS] +SHOW_PREPROCESSDIALOG=1 + +[PRINTING] +ScreenDPI=192 + +[PROJECT_SETTINGS_FILES] +COUNT=0 + +[PSET_FILES] +COUNT=0 + +[QUALITY-DATA-OPTIONS] +ScreenDPIinSection=192 +COMPLETED_AS_READ_ONLY=0 +COPY_COMPLETED_AS_READ_ONLY=0 +COPY_QUALITY_DATA=0 +CHANGED_FROM_LAST=0 +SD_FIELD_ORDER=0 +PREDEFINED_ENTRY_00=--- +PREDEFINED_ENTRY_01=changed +PREDEFINED_ENTRY_COUNT=2 +SD_FIELD_ENTRY_1= +SD_FIELD_ENTRY_2= +SD_FIELD_ENTRY_3= +SD_FIELD_ENTRY_4= +SD_FIELD_ENTRY_5= +SD_FIELD_ENTRY_6= +SD_FIELD_ENTRY_7= +SD_FIELD_ENTRY_8= +SD_FIELD_ENTRY_9= +SD_FIELD_ENTRY_10= + +[RIBBON] +ISMINIMIZED=0 + +[SCRIPT_FOLDER_LIST] +IS_CWD_EXPANDED=1 +COUNT=0 +LAST_FOCUSED=0 + +[SIGNAL_COLOR_FUNCTION_LIST] +Count=0 + +[SIGNAL_COMPARE] +LINE_WIDTH=1 +LINE_STYLE=-1 +LINE_TYPE=-1 +MARKER_TYPE=-1 +DARKEN=30 +CREATE_COMMON_Y_AXIS=1 + +[SIGNSELWND] +Version=100 +ScreenDPIinSection=192 +ALL_LIST_TreeColumnCount=0 +DEVICE_LIST_TreeColumnCount=1 +PSET_LIST_TreeColumnCount=0 +MDF_LIST_TreeColumnCount=0 +FUNC_DEF_LIST_TreeColumnCount=0 +MDF_VIRT_LIST_TreeColumnCount=0 +MEA_LIST_TreeColumnCount=1 +MEA_LIST_TreeColumn_0=0, 460 +MEA_LIST_TreeColumn_0_dpi96=0, 230 +DATAMINING_LIST_TreeColumnCount=0 +CONFIGS_LIST_TreeColumnCount=0 +WIN_TEMPL_LIST_TreeColumnCount=0 +RECYCLE_BIN_LIST_TreeColumnCount=0 +VIO_LIST_TreeColumnCount=0 +ALL_LIST_ListColumnCount=0 +DEVICE_LIST_ListColumnCount=4 +PSET_LIST_ListColumnCount=0 +MDF_LIST_ListColumnCount=0 +FUNC_DEF_LIST_ListColumnCount=0 +MDF_VIRT_LIST_ListColumnCount=0 +MEA_LIST_ListColumnCount=4 +MEA_LIST_ListColumn_0=29, 88 +MEA_LIST_ListColumn_0_dpi96=29, 44 +MEA_LIST_ListColumn_1=196608, 120 +MEA_LIST_ListColumn_1_dpi96=196608, 60 +MEA_LIST_ListColumn_2=31, 460 +MEA_LIST_ListColumn_2_dpi96=31, 230 +MEA_LIST_ListColumn_3=3, 500 +MEA_LIST_ListColumn_3_dpi96=3, 250 +DATAMINING_LIST_ListColumnCount=0 +CONFIGS_LIST_ListColumnCount=0 +WIN_TEMPL_LIST_ListColumnCount=0 +RECYCLE_BIN_LIST_ListColumnCount=0 +VIO_LIST_ListColumnCount=0 +KnownDynamicColumnCount=0 +DEVICE_LIST_TreeColumn_0=0, 660 +DEVICE_LIST_TreeColumn_0_dpi96=0, 330 +DEVICE_LIST_ListColumn_0=29, 88 +DEVICE_LIST_ListColumn_0_dpi96=29, 44 +DEVICE_LIST_ListColumn_1=196608, 120 +DEVICE_LIST_ListColumn_1_dpi96=196608, 60 +DEVICE_LIST_ListColumn_2=31, 460 +DEVICE_LIST_ListColumn_2_dpi96=31, 230 +DEVICE_LIST_ListColumn_3=3, 500 +DEVICE_LIST_ListColumn_3_dpi96=3, 250 + +[SYSTEM_INFORMATION_DEVICE] +PdhEnabled=0 +PdhAllObjects=1 +PdhObjectList=0 +Smart_UPS_Configuration= + +[TASKLIST] +COUNT=0 + +[TimeManagement] +MasterClock=0 +MasterClockXtssUtc=0 +DumpDomainInfo=0 +SyncRetriesOnStart=30 + +[TRACEWINDOW] +LOGBUFFERSIZE=131071 + +[USER_PRINT_LAYOUT_0_FooterElements] +Count=0 + +[USER_PRINT_LAYOUT_0_HeaderElements] +Count=0 + +[VIEW_ITEM_DIALOG] +ScreenDPIinSection=192 +POSX=0 +POSX_dpi96=0 +POSY=0 +POSY_dpi96=0 +SIZEX=1750 +SIZEX_dpi96=875 +SIZEY=1400 +SIZEY_dpi96=700 +SHOWTOOLBAR=1 +SHOWSTATUSBAR=1 +SHOWGRID=0 +RIGHTPANE2HEIGHT=-1 +RIGHTPANE2HEIGHT_dpi96=-1 +TREEX=450 +TREEX_dpi96=225 +TREEY=1286 +TREEY_dpi96=643 +ACTIVEPANE=1 +SELECTED_TREENODE=General +FIRSTVISIBLE_TREENODE=General +TREEEXPAND_COUNT=0 +LAST_FOCUSED_LISTCOLUMN=0 +LAST_FOCUSED_LISTINDEX=0 +LAST_TOP_LISTINDEX=0 + +[VIEW_ITEM_EXPLORER] +ScreenDPIinSection=192 +POSX=641 +POSX_dpi96=321 +POSY=322 +POSY_dpi96=161 +SIZEX=1750 +SIZEX_dpi96=875 +SIZEY=1400 +SIZEY_dpi96=700 +SHOWTOOLBAR=1 +SHOWSTATUSBAR=1 +SHOWGRID=0 +RIGHTPANE2HEIGHT=-2 +RIGHTPANE2HEIGHT_dpi96=-1 +TREEX=450 +TREEX_dpi96=225 +TREEY=1286 +TREEY_dpi96=643 +ACTIVEPANE=1 +SELECTED_TREENODE=Protocol +FIRSTVISIBLE_TREENODE=Device +TREEEXPAND_COUNT=1 +LAST_FOCUSED_LISTCOLUMN=0 +LAST_FOCUSED_LISTINDEX=0 +LAST_TOP_LISTINDEX=0 +TREEEXPAND_0=Protocol + +[VIO_SYSTEM_BEHAVIOUR] +AutoCreateDetectedHardware=1 +CardMissingOption=1 + +[VN8900DeviceManager] +MESSAGE_ERROR=1 +MESSAGE_WARNING=0 +MESSAGE_INFO=0 + +[DB_EXPLORER] +LAST_PAGE_NAME_DLG_VARIABLE= +LAST_PAGE_ID_DLG_VARIABLE=21048 +OBJECT_DIALOG_WITH=1190 +OBJECT_DIALOG_WITH_dpi96=595 +OBJECT_DIALOG_HEIGHT=614 +OBJECT_DIALOG_HEIGHT_dpi96=307 +ScreenDPIinSection=192 +SELECT_X=1207 +SELECT_X_dpi96=604 +SELECT_Y=624 +SELECT_Y_dpi96=312 +SELECT_W=1844 +SELECT_W_dpi96=922 +SELECT_H=1212 +SELECT_H_dpi96=606 +EDITOR_COL_COUNT=7 +EDITOR_COL_1=29, 88 +EDITOR_COL_1_dpi96=29, 44 +EDITOR_COL_2=31, 460 +EDITOR_COL_2_dpi96=31, 230 +EDITOR_COL_3=1, 180 +EDITOR_COL_3_dpi96=1, 90 +EDITOR_COL_4=2, 170 +EDITOR_COL_4_dpi96=2, 85 +EDITOR_COL_5=3, 500 +EDITOR_COL_5_dpi96=3, 250 +EDITOR_COL_6=6, 240 +EDITOR_COL_6_dpi96=6, 120 +EDITOR_COL_7=7, 240 +EDITOR_COL_7_dpi96=7, 120 +EDITOR_SORT_COL=31 +EDITOR_SORT_UPW=1 +SELECT_COL_COUNT=4 +SELECT_COL_1=29, 88 +SELECT_COL_1_dpi96=29, 44 +SELECT_COL_2=31, 460 +SELECT_COL_2_dpi96=31, 230 +SELECT_COL_3=16, 140 +SELECT_COL_3_dpi96=16, 70 +SELECT_COL_4=3, 500 +SELECT_COL_4_dpi96=3, 250 +SELECT_SORT_COL=31 +SELECT_SORT_UPW=1 +SEARCH_COL_COUNT=7 +SEARCH_COL_1=29, 88 +SEARCH_COL_1_dpi96=29, 44 +SEARCH_COL_2=31, 460 +SEARCH_COL_2_dpi96=31, 230 +SEARCH_COL_3=91, 300 +SEARCH_COL_3_dpi96=91, 150 +SEARCH_COL_4=19, 240 +SEARCH_COL_4_dpi96=19, 120 +SEARCH_COL_5=1, 180 +SEARCH_COL_5_dpi96=1, 90 +SEARCH_COL_6=2, 170 +SEARCH_COL_6_dpi96=2, 85 +SEARCH_COL_7=3, 500 +SEARCH_COL_7_dpi96=3, 250 +SEARCH_SORT_COL=31 +SEARCH_SORT_UPW=1 +CAN_SELECT_COL_COUNT=9 +CAN_SELECT_COL_1=29, 88 +CAN_SELECT_COL_1_dpi96=29, 44 +CAN_SELECT_COL_2=31, 460 +CAN_SELECT_COL_2_dpi96=31, 230 +CAN_SELECT_COL_3=28, 140 +CAN_SELECT_COL_3_dpi96=28, 70 +CAN_SELECT_COL_4=16, 140 +CAN_SELECT_COL_4_dpi96=16, 70 +CAN_SELECT_COL_5=64, 400 +CAN_SELECT_COL_5_dpi96=64, 200 +CAN_SELECT_COL_6=4, 240 +CAN_SELECT_COL_6_dpi96=4, 120 +CAN_SELECT_COL_7=17, 140 +CAN_SELECT_COL_7_dpi96=17, 70 +CAN_SELECT_COL_8=18, 100 +CAN_SELECT_COL_8_dpi96=18, 50 +CAN_SELECT_COL_9=3, 500 +CAN_SELECT_COL_9_dpi96=3, 250 +CAN_SELECT_SORT_COL=31 +CAN_SELECT_SORT_UPW=1 +CAN_SEARCH_COL_COUNT=9 +CAN_SEARCH_COL_1=29, 88 +CAN_SEARCH_COL_1_dpi96=29, 44 +CAN_SEARCH_COL_2=31, 460 +CAN_SEARCH_COL_2_dpi96=31, 230 +CAN_SEARCH_COL_3=28, 140 +CAN_SEARCH_COL_3_dpi96=28, 70 +CAN_SEARCH_COL_4=16, 140 +CAN_SEARCH_COL_4_dpi96=16, 70 +CAN_SEARCH_COL_5=64, 400 +CAN_SEARCH_COL_5_dpi96=64, 200 +CAN_SEARCH_COL_6=4, 240 +CAN_SEARCH_COL_6_dpi96=4, 120 +CAN_SEARCH_COL_7=17, 140 +CAN_SEARCH_COL_7_dpi96=17, 70 +CAN_SEARCH_COL_8=18, 100 +CAN_SEARCH_COL_8_dpi96=18, 50 +CAN_SEARCH_COL_9=3, 500 +CAN_SEARCH_COL_9_dpi96=3, 250 +CAN_SEARCH_SORT_COL=31 +CAN_SEARCH_SORT_UPW=1 +LIN_SELECT_COL_COUNT=9 +LIN_SELECT_COL_1=29, 88 +LIN_SELECT_COL_1_dpi96=29, 44 +LIN_SELECT_COL_2=31, 460 +LIN_SELECT_COL_2_dpi96=31, 230 +LIN_SELECT_COL_3=28, 140 +LIN_SELECT_COL_3_dpi96=28, 70 +LIN_SELECT_COL_4=16, 140 +LIN_SELECT_COL_4_dpi96=16, 70 +LIN_SELECT_COL_5=64, 400 +LIN_SELECT_COL_5_dpi96=64, 200 +LIN_SELECT_COL_6=4, 240 +LIN_SELECT_COL_6_dpi96=4, 120 +LIN_SELECT_COL_7=17, 140 +LIN_SELECT_COL_7_dpi96=17, 70 +LIN_SELECT_COL_8=18, 100 +LIN_SELECT_COL_8_dpi96=18, 50 +LIN_SELECT_COL_9=3, 500 +LIN_SELECT_COL_9_dpi96=3, 250 +LIN_SELECT_SORT_COL=31 +LIN_SELECT_SORT_UPW=1 +LIN_SEARCH_COL_COUNT=9 +LIN_SEARCH_COL_1=29, 88 +LIN_SEARCH_COL_1_dpi96=29, 44 +LIN_SEARCH_COL_2=31, 460 +LIN_SEARCH_COL_2_dpi96=31, 230 +LIN_SEARCH_COL_3=28, 140 +LIN_SEARCH_COL_3_dpi96=28, 70 +LIN_SEARCH_COL_4=16, 140 +LIN_SEARCH_COL_4_dpi96=16, 70 +LIN_SEARCH_COL_5=64, 400 +LIN_SEARCH_COL_5_dpi96=64, 200 +LIN_SEARCH_COL_6=4, 240 +LIN_SEARCH_COL_6_dpi96=4, 120 +LIN_SEARCH_COL_7=17, 140 +LIN_SEARCH_COL_7_dpi96=17, 70 +LIN_SEARCH_COL_8=18, 100 +LIN_SEARCH_COL_8_dpi96=18, 50 +LIN_SEARCH_COL_9=3, 500 +LIN_SEARCH_COL_9_dpi96=3, 250 +LIN_SEARCH_SORT_COL=31 +LIN_SEARCH_SORT_UPW=1 +MDF_SELECT_COL_COUNT=8 +MDF_SELECT_COL_1=29, 88 +MDF_SELECT_COL_1_dpi96=29, 44 +MDF_SELECT_COL_2=31, 460 +MDF_SELECT_COL_2_dpi96=31, 230 +MDF_SELECT_COL_3=28, 140 +MDF_SELECT_COL_3_dpi96=28, 70 +MDF_SELECT_COL_4=16, 140 +MDF_SELECT_COL_4_dpi96=16, 70 +MDF_SELECT_COL_5=64, 400 +MDF_SELECT_COL_5_dpi96=64, 200 +MDF_SELECT_COL_6=4, 240 +MDF_SELECT_COL_6_dpi96=4, 120 +MDF_SELECT_COL_7=20, 180 +MDF_SELECT_COL_7_dpi96=20, 90 +MDF_SELECT_COL_8=3, 500 +MDF_SELECT_COL_8_dpi96=3, 250 +MDF_SELECT_SORT_COL=31 +MDF_SELECT_SORT_UPW=1 +MDF_SEARCH_COL_COUNT=8 +MDF_SEARCH_COL_1=29, 88 +MDF_SEARCH_COL_1_dpi96=29, 44 +MDF_SEARCH_COL_2=31, 460 +MDF_SEARCH_COL_2_dpi96=31, 230 +MDF_SEARCH_COL_3=28, 140 +MDF_SEARCH_COL_3_dpi96=28, 70 +MDF_SEARCH_COL_4=16, 140 +MDF_SEARCH_COL_4_dpi96=16, 70 +MDF_SEARCH_COL_5=64, 400 +MDF_SEARCH_COL_5_dpi96=64, 200 +MDF_SEARCH_COL_6=4, 240 +MDF_SEARCH_COL_6_dpi96=4, 120 +MDF_SEARCH_COL_7=20, 180 +MDF_SEARCH_COL_7_dpi96=20, 90 +MDF_SEARCH_COL_8=3, 500 +MDF_SEARCH_COL_8_dpi96=3, 250 +MDF_SEARCH_SORT_COL=31 +MDF_SEARCH_SORT_UPW=1 +WRITE_COL_COUNT=2 +WRITE_COL_1=21, 76 +WRITE_COL_1_dpi96=21, 38 +WRITE_COL_2=23, 1200 +WRITE_COL_2_dpi96=23, 600 +WRITE_SORT_COL=31 +WRITE_SORT_UPW=1 +CONVERSION_COL_COUNT=7 +CONVERSION_COL_1=29, 88 +CONVERSION_COL_1_dpi96=29, 44 +CONVERSION_COL_2=31, 460 +CONVERSION_COL_2_dpi96=31, 230 +CONVERSION_COL_3=3, 500 +CONVERSION_COL_3_dpi96=3, 250 +CONVERSION_COL_4=26, 240 +CONVERSION_COL_4_dpi96=26, 120 +CONVERSION_COL_5=16, 140 +CONVERSION_COL_5_dpi96=16, 70 +CONVERSION_COL_6=15, 180 +CONVERSION_COL_6_dpi96=15, 90 +CONVERSION_COL_7=68, 180 +CONVERSION_COL_7_dpi96=68, 90 +CONVERSION_SORT_COL=31 +CONVERSION_SORT_UPW=1 +RECORD_LAYOUT_COL_COUNT=2 +RECORD_LAYOUT_COL_1=29, 88 +RECORD_LAYOUT_COL_1_dpi96=29, 44 +RECORD_LAYOUT_COL_2=31, 460 +RECORD_LAYOUT_COL_2_dpi96=31, 230 +RECORD_LAYOUT_SORT_COL=31 +RECORD_LAYOUT_SORT_UPW=1 +VARIANT_CRITERION_COL_COUNT=4 +VARIANT_CRITERION_COL_1=29, 88 +VARIANT_CRITERION_COL_1_dpi96=29, 44 +VARIANT_CRITERION_COL_2=31, 460 +VARIANT_CRITERION_COL_2_dpi96=31, 230 +VARIANT_CRITERION_COL_3=25, 400 +VARIANT_CRITERION_COL_3_dpi96=25, 200 +VARIANT_CRITERION_COL_4=30, 400 +VARIANT_CRITERION_COL_4_dpi96=30, 200 +VARIANT_CRITERION_SORT_COL=31 +VARIANT_CRITERION_SORT_UPW=1 +SYSTEM_CONSTANT_COL_COUNT=3 +SYSTEM_CONSTANT_COL_1=29, 88 +SYSTEM_CONSTANT_COL_1_dpi96=29, 44 +SYSTEM_CONSTANT_COL_2=31, 460 +SYSTEM_CONSTANT_COL_2_dpi96=31, 230 +SYSTEM_CONSTANT_COL_3=24, 240 +SYSTEM_CONSTANT_COL_3_dpi96=24, 120 +SYSTEM_CONSTANT_SORT_COL=31 +SYSTEM_CONSTANT_SORT_UPW=1 +DEFAULT_COL_COUNT=3 +DEFAULT_COL_1=29, 88 +DEFAULT_COL_1_dpi96=29, 44 +DEFAULT_COL_2=31, 460 +DEFAULT_COL_2_dpi96=31, 230 +DEFAULT_COL_3=3, 500 +DEFAULT_COL_3_dpi96=3, 250 +DEFAULT_SORT_COL=31 +DEFAULT_SORT_UPW=1 +CAN_SIGNAL_COL_COUNT=9 +CAN_SIGNAL_COL_1=29, 88 +CAN_SIGNAL_COL_1_dpi96=29, 44 +CAN_SIGNAL_COL_2=31, 460 +CAN_SIGNAL_COL_2_dpi96=31, 230 +CAN_SIGNAL_COL_3=28, 140 +CAN_SIGNAL_COL_3_dpi96=28, 70 +CAN_SIGNAL_COL_4=16, 140 +CAN_SIGNAL_COL_4_dpi96=16, 70 +CAN_SIGNAL_COL_5=64, 400 +CAN_SIGNAL_COL_5_dpi96=64, 200 +CAN_SIGNAL_COL_6=4, 240 +CAN_SIGNAL_COL_6_dpi96=4, 120 +CAN_SIGNAL_COL_7=17, 140 +CAN_SIGNAL_COL_7_dpi96=17, 70 +CAN_SIGNAL_COL_8=18, 100 +CAN_SIGNAL_COL_8_dpi96=18, 50 +CAN_SIGNAL_COL_9=3, 500 +CAN_SIGNAL_COL_9_dpi96=3, 250 +CAN_SIGNAL_SORT_COL=31 +CAN_SIGNAL_SORT_UPW=1 +CA_MESSAGE_COL_COUNT=7 +CA_MESSAGE_COL_1=29, 88 +CA_MESSAGE_COL_1_dpi96=29, 44 +CA_MESSAGE_COL_2=31, 460 +CA_MESSAGE_COL_2_dpi96=31, 230 +CA_MESSAGE_COL_3=3, 500 +CA_MESSAGE_COL_3_dpi96=3, 250 +CA_MESSAGE_COL_4=64, 400 +CA_MESSAGE_COL_4_dpi96=64, 200 +CA_MESSAGE_COL_5=4, 240 +CA_MESSAGE_COL_5_dpi96=4, 120 +CA_MESSAGE_COL_6=17, 140 +CA_MESSAGE_COL_6_dpi96=17, 70 +CA_MESSAGE_COL_7=18, 100 +CA_MESSAGE_COL_7_dpi96=18, 50 +CA_MESSAGE_SORT_COL=31 +CA_MESSAGE_SORT_UPW=1 +MEMORY_SEGMENT_COL_COUNT=4 +MEMORY_SEGMENT_COL_1=29, 88 +MEMORY_SEGMENT_COL_1_dpi96=29, 44 +MEMORY_SEGMENT_COL_2=31, 460 +MEMORY_SEGMENT_COL_2_dpi96=31, 230 +MEMORY_SEGMENT_COL_3=3, 500 +MEMORY_SEGMENT_COL_3_dpi96=3, 250 +MEMORY_SEGMENT_COL_4=1, 180 +MEMORY_SEGMENT_COL_4_dpi96=1, 90 +MEMORY_SEGMENT_SORT_COL=31 +MEMORY_SEGMENT_SORT_UPW=1 +CAL_PARAM_GROUP_COL_COUNT=4 +CAL_PARAM_GROUP_COL_1=29, 88 +CAL_PARAM_GROUP_COL_1_dpi96=29, 44 +CAL_PARAM_GROUP_COL_2=31, 460 +CAL_PARAM_GROUP_COL_2_dpi96=31, 230 +CAL_PARAM_GROUP_COL_3=1376257, 200 +CAL_PARAM_GROUP_COL_3_dpi96=1376257, 100 +CAL_PARAM_GROUP_COL_4=1376260, 200 +CAL_PARAM_GROUP_COL_4_dpi96=1376260, 100 +CAL_PARAM_GROUP_SORT_COL=31 +CAL_PARAM_GROUP_SORT_UPW=1 +TABLE_COL_COUNT=4 +TABLE_COL_1=29, 88 +TABLE_COL_1_dpi96=29, 44 +TABLE_COL_2=31, 460 +TABLE_COL_2_dpi96=31, 230 +TABLE_COL_3=3, 500 +TABLE_COL_3_dpi96=3, 250 +TABLE_COL_4=26, 240 +TABLE_COL_4_dpi96=26, 120 +TABLE_SORT_COL=31 +TABLE_SORT_UPW=1 +FILTER_COL_COUNT=3 +FILTER_COL_1=29, 88 +FILTER_COL_1_dpi96=29, 44 +FILTER_COL_2=31, 460 +FILTER_COL_2_dpi96=31, 230 +FILTER_COL_3=3, 500 +FILTER_COL_3_dpi96=3, 250 +FILTER_SORT_COL=31 +FILTER_SORT_UPW=1 +SELECT_SHOW_TOOLTIPS=1 +SELECT_SHOW_DISPLAY_NAMES=0 +SELECT_EXPAND_TREEVIEW_ITEM=2000 +SELECT_TV_W=594 +SELECT_TV_W_dpi96=297 +SELECT_DLG_H=600 +SELECT_DLG_H_dpi96=300 +SELECT_PREVIEW_DLG_VISIBLE=0 +SELECT_SORT_COLUMN_ID=31 +SELECT_SORT_UPWARD=1 + +[DlgCommentWrapper] +ScreenDPIinSection=192 +WindowLeft=1014 +WindowLeft_dpi96=507 +WindowTop=524 +WindowTop_dpi96=262 +WindowWidth=1350 +WindowWidth_dpi96=675 +WindowHeight=923 +WindowHeight_dpi96=462 + +[DlgMdfComment] +ScreenDPIinSection=192 +WindowLeft=1027 +WindowLeft_dpi96=514 +WindowTop=582 +WindowTop_dpi96=291 +WindowWidth=1324 +WindowWidth_dpi96=662 +WindowHeight=786 +WindowHeight_dpi96=393 + +[DlgSaveConfigsMoreLess] +ScreenDPIinSection=192 +ColWidthName=700 +ColWidthDisplay=462 +ShowMore=0 +MoreHeight=566 +MoreHeight_dpi96=283 +WindowLeft=1070 +WindowLeft_dpi96=535 +WindowTop=646 +WindowTop_dpi96=323 +WindowWidth=1242 +WindowWidth_dpi96=621 +WindowHeight=260 +WindowHeight_dpi96=130 + +[DB_EXPLORER_SEARCH_FILTER] +SEARCH_CASE_SENSITIVE=0 +SEARCH_FULL_TEXT=1 +SEARCH_USE_MODE=1 +SEARCH_INCLUDE_SUB_GROUPS=1 +SEARCH_VARTYPE_MEASURE=255 +SEARCH_REFTYPE_MEA_LOC=255 +SEARCH_VARTYPE_VIRTUAL=1 +SEARCH_VARTYPE_REAL=1 +SEARCH_ACCESS=0 +SEARCH_ERRORTYPE=0 +SEARCH_DATAYPE_MASK=0 +SEARCH_DATAYPE=0 +SEARCH_COMP_ADDRESS=0 +SEARCH_START_ADDRESS=0 +SEARCH_END_ADDRESS=0 +FILTER_COMMENT= +FILTER_NAME=Search result +SEARCH_COMMENT= +SEARCH_NAME= +PARENT= + +[Dialog_MdiCfgDlg_Typ1] +LastOpenedDlgType=1 +TreeWidth=240 +TreeWidth_dpi96=120 +ScreenDPIinSection=192 +WindowLeft=464 +WindowLeft_dpi96=232 +WindowTop=494 +WindowTop_dpi96=247 +WindowWidth=2384 +WindowWidth_dpi96=1192 +WindowHeight=934 +WindowHeight_dpi96=467 + +[Dialog_MdiCfgDlg_Typ2097152] +LastOpenedDlgType=0 +TreeWidth=240 +TreeWidth_dpi96=120 +ScreenDPIinSection=192 +WindowLeft=1292 +WindowLeft_dpi96=646 +WindowTop=832 +WindowTop_dpi96=416 +WindowWidth=1430 +WindowWidth_dpi96=715 +WindowHeight=521 +WindowHeight_dpi96=261 + +[Dialog_MdiCfgDlg_Typ262144] +LastOpenedDlgType=8 +TreeWidth=240 +TreeWidth_dpi96=120 +ScreenDPIinSection=192 +WindowLeft=1292 +WindowLeft_dpi96=646 +WindowTop=832 +WindowTop_dpi96=416 +WindowWidth=1430 +WindowWidth_dpi96=715 +WindowHeight=608 +WindowHeight_dpi96=304 + +[InsertArrayRowColDialog] +ScreenDPIinSection=192 +WindowLeft=1401 +WindowLeft_dpi96=701 +WindowTop=908 +WindowTop_dpi96=454 +WindowWidth=797 +WindowWidth_dpi96=399 +WindowHeight=358 +WindowHeight_dpi96=179 + +[MEASUREMENT_DISPLAY_SELECT] +ScreenDPIinSection=192 +POSX=0 +POSX_dpi96=0 +POSY=0 +POSY_dpi96=0 +SIZEX=1620 +SIZEX_dpi96=810 +SIZEY=1200 +SIZEY_dpi96=600 +SHOWTOOLBAR=1 +SHOWSTATUSBAR=1 +SHOWGRID=0 +RIGHTPANE2HEIGHT=304 +RIGHTPANE2HEIGHT_dpi96=152 +TREEX=450 +TREEX_dpi96=225 +TREEY=1009 +TREEY_dpi96=505 +ACTIVEPANE=0 +SELECTED_TREENODE=Measurement signals +FIRSTVISIBLE_TREENODE=Measurement options +TREEEXPAND_COUNT=1 +TREEEXPAND_0=Measurement signals +LAST_FOCUSED_LISTCOLUMN=0 +LAST_FOCUSED_LISTINDEX=5 +LAST_TOP_LISTINDEX=0 +DAQLISTS=2 +STATUSBAR_BYTES=1 +DIALOGFILEEXTEXPORT=vsf +LABELLISTMEAMODE=0 +LABELLISTBUSSIGNALMODE=0 +TEXT_SEARCH= +VXIIColumnsAdded=0 + +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_EVENTS] +ScreenDPIinSection=192 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_EVENTS_CUSTOM] +ScreenDPIinSection=192 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_EVENTS_KEY] +ScreenDPIinSection=192 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_EVENTS_SYSTEM] +ScreenDPIinSection=192 +ColumnCount=0 +ColumnIdSort=196608 +SortUpward=1 + +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_EVENTS_SYSTEM_DEVICE] +ScreenDPIinSection=192 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_KNOWN_DYNAMIC_COLUMNS_NORMAL] +ScreenDPIinSection=192 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 +VERSION=100 + +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_NORMAL] +ScreenDPIinSection=192 +ColumnCount=8 +Column_0=65542, 100 +Column_0_dpi96=65542, 50 +Column_1=29, 88 +Column_1_dpi96=29, 44 +Column_2=34, 96 +Column_2_dpi96=34, 48 +Column_3=31, 460 +Column_3_dpi96=31, 230 +Column_4=65540, 160 +Column_4_dpi96=65540, 80 +Column_5=65541, 120 +Column_5_dpi96=65541, 60 +Column_6=65597, 200 +Column_6_dpi96=65597, 100 +Column_7=98305, 160 +Column_7_dpi96=98305, 80 +ColumnIdSort=-1 +SortUpward=1 +VERSION=100 + +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_RECORDER] +ScreenDPIinSection=192 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 +VERSION=100 + +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_RECORDER_BUSLOGGING] +ScreenDPIinSection=192 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_RECORDERS] +ScreenDPIinSection=192 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_SOUNDS] +ScreenDPIinSection=192 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_TARA_ACTIVE_SIGNALS] +ScreenDPIinSection=192 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_TARA_ALL_SIGNALS] +ScreenDPIinSection=192 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_SELECT_COLUMNLIST_VIO] +ScreenDPIinSection=192 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_SELECT_DYNAMIC_COLUMNS] +Count=0 + +[VDISPLAYIITLCTRL] +COLUMNS_TYP262144_CONTEXT1= +COLUMNS_TYP262144_CONTEXT1_dpi96= +COLUMNS_TYP262144_CONTEXT1_ScreenDPI=192 +COLUMNS_TYP1_CONTEXT1= +COLUMNS_TYP1_CONTEXT1_dpi96= +COLUMNS_TYP1_CONTEXT1_ScreenDPI=192 +COLUMNS_TYP2097152_CONTEXT1= +COLUMNS_TYP2097152_CONTEXT1_dpi96= +COLUMNS_TYP2097152_CONTEXT1_ScreenDPI=192 +COLUMNS_TYP1_CONTEXT4= +COLUMNS_TYP1_CONTEXT4_dpi96= +COLUMNS_TYP1_CONTEXT4_ScreenDPI=192 + +[DLG_AXIS_GROUP] +ScreenDPIinSection=192 +COLUMN_WIDTH_PREVIEW=200 +COLUMN_WIDTH_PREVIEW_dpi96=100 +COLUMN_WIDTH_NAME=696 +COLUMN_WIDTH_NAME_dpi96=348 + +[ModuleExplorer_no_a2l_demo] +ScreenDPIinSection=192 +POSX=0 +POSX_dpi96=0 +POSY=0 +POSY_dpi96=0 +SIZEX=1750 +SIZEX_dpi96=875 +SIZEY=1400 +SIZEY_dpi96=700 +SHOWTOOLBAR=1 +SHOWSTATUSBAR=1 +SHOWGRID=0 +RIGHTPANE2HEIGHT=-2 +RIGHTPANE2HEIGHT_dpi96=-1 +TREEX=450 +TREEX_dpi96=225 +TREEY=1286 +TREEY_dpi96=643 +ACTIVEPANE=1 +SELECTED_TREENODE=Networks/ETH_Network_Network/no_a2l_demo_Device/Protocol +FIRSTVISIBLE_TREENODE=Networks +TREEEXPAND_COUNT=5 +TREEEXPAND_0=Networks +TREEEXPAND_1=Networks/ETH_Network_Network +TREEEXPAND_2=Networks/ETH_Network_Network/no_a2l_demo_Device +TREEEXPAND_3=Networks/ETH_Network_Network/no_a2l_demo_Device/Protocol +TREEEXPAND_4=Channels +LAST_FOCUSED_LISTCOLUMN=0 +LAST_FOCUSED_LISTINDEX=0 +LAST_TOP_LISTINDEX=0 + +[MEASUREMENT_DISPLAY] +ScreenDPIinSection=96 +POSX=0 +POSX_dpi96=0 +POSY=0 +POSY_dpi96=0 +SIZEX=1165 +SIZEX_dpi96=1165 +SIZEY=600 +SIZEY_dpi96=600 +SHOWTOOLBAR=1 +SHOWSTATUSBAR=1 +SHOWGRID=0 +RIGHTPANE2HEIGHT=148 +RIGHTPANE2HEIGHT_dpi96=148 +TREEX=225 +TREEX_dpi96=225 +TREEY=495 +TREEY_dpi96=495 +ACTIVEPANE=1 +SELECTED_TREENODE=Measurement signals +FIRSTVISIBLE_TREENODE=Measurement options +TREEEXPAND_COUNT=2 +TREEEXPAND_0=Measurement signals +TREEEXPAND_1=Recorder list +LAST_FOCUSED_LISTCOLUMN=0 +LAST_FOCUSED_LISTINDEX=11 +LAST_TOP_LISTINDEX=0 +DAQLISTS=2 +STATUSBAR_BYTES=1 +DIALOGFILEEXTEXPORT=vsf +LABELLISTMEAMODE=0 +LABELLISTBUSSIGNALMODE=0 +TEXT_SEARCH= +VXIIColumnsAdded=0 +SHOWONLYACTIVE=0 + +[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS] +ScreenDPIinSection=96 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS_CUSTOM] +ScreenDPIinSection=96 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS_KEY] +ScreenDPIinSection=96 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS_SYSTEM] +ScreenDPIinSection=96 +ColumnCount=0 +ColumnIdSort=196608 +SortUpward=1 + +[MEASUREMENT_DISPLAY_COLUMNLIST_EVENTS_SYSTEM_DEVICE] +ScreenDPIinSection=96 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_COLUMNLIST_KNOWN_DYNAMIC_COLUMNS_NORMAL] +ScreenDPIinSection=96 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 +VERSION=100 + +[MEASUREMENT_DISPLAY_COLUMNLIST_NORMAL] +ScreenDPIinSection=96 +ColumnCount=9 +Column_0=65542, 50 +Column_0_dpi96=65542, 50 +Column_1=29, 44 +Column_1_dpi96=29, 44 +Column_2=34, 48 +Column_2_dpi96=34, 48 +Column_3=31, 222 +Column_3_dpi96=31, 222 +Column_4=65540, 130 +Column_4_dpi96=65540, 130 +Column_5=65541, 60 +Column_5_dpi96=65541, 60 +Column_6=65597, 100 +Column_6_dpi96=65597, 100 +Column_7=98305, 80 +Column_7_dpi96=98305, 80 +Column_8=1, 90 +Column_8_dpi96=1, 90 +ColumnIdSort=65542 +SortUpward=1 +VERSION=100 + +[MEASUREMENT_DISPLAY_COLUMNLIST_RECORDER] +ScreenDPIinSection=96 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 +VERSION=100 + +[MEASUREMENT_DISPLAY_COLUMNLIST_RECORDER_BUSLOGGING] +ScreenDPIinSection=96 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_COLUMNLIST_RECORDERS] +ScreenDPIinSection=96 +ColumnCount=6 +Column_0=327711, 200 +Column_0_dpi96=327711, 200 +Column_1=327684, 60 +Column_1_dpi96=327684, 60 +Column_2=327709, 150 +Column_2_dpi96=327709, 150 +Column_3=327695, 65 +Column_3_dpi96=327695, 65 +Column_4=327681, 200 +Column_4_dpi96=327681, 200 +Column_5=327683, 200 +Column_5_dpi96=327683, 200 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_COLUMNLIST_SOUNDS] +ScreenDPIinSection=96 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_COLUMNLIST_TARA_ACTIVE_SIGNALS] +ScreenDPIinSection=96 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_COLUMNLIST_TARA_ALL_SIGNALS] +ScreenDPIinSection=96 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_COLUMNLIST_VIO] +ScreenDPIinSection=96 +ColumnCount=0 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_DISPLAY_DYNAMIC_COLUMNS] +Count=0 + +[COLOR_SCHEME_LIST] +COLOR_SCHEME0=COLOR_SCHEMEUSER_DEFINED +SCHEMES_COUNT=1 +ACTIVE=COLOR_SCHEME_H_CANAPE_CLASSIC +CURRENT_SCHEME_INDEX=0 + +[COLOR_SCHEMEUSER_DEFINED] +IS_USER_DEFINED=1 +SCHEME_NAME=[none] +ColorDisplay1=FF00 -1 8F400 -1 +ColorDisplay2=FF -1 8F4 -1 +ColorDisplay3=FFFF -1 F4F4 -1 +ColorDisplay4=FFFF00 -1 F4F400 -1 +ColorDisplay5=FF00FF -1 F400F4 -1 +ColorDisplay6=80FF -1 80F4 -1 +ColorDisplay7=FF8080 -1 F40000 -1 +ColorDisplay8=FFFFFF -1 0 -1 +ColorDisplay9=AA00 -1 AA00 -1 +ColorDisplay10=CC -1 CC -1 +ColorDisplay11=7070 -1 7070 -1 +ColorDisplay12=FFAA00 -1 FFAA00 -1 +ColorDisplay13=FF00AA -1 FF00AA -1 +ColorDisplay14=55AA -1 55AA -1 +ColorDisplay15=AA5555 -1 AA5555 -1 +ColorDisplay16=AAFFFF -1 AAFFFF -1 +ColorDisplay17=FFAA -1 FFAA -1 +ColorDisplay18=8080FF -1 8080FF -1 +ColorDisplay19=AAAA -1 AAAA -1 +ColorDisplay20=AAAA00 -1 AAAA00 -1 +ColorDisplay21=FFAAFF -1 FFAAFF -1 +ColorDisplay22=AAAAFF -1 AAAAFF -1 +ColorDisplay23=FFAAAA -1 FFAAAA -1 +ColorDisplay24=AAFFAA -1 AAFFAA -1 +ColorMarker1=FFFF00 -1 C6C600 -1 +ColorMarker2=FFFF -1 E1E1 -1 +ColorTrigger=FF00 -1 FF00 -1 +ColorEventAudio=A6620D -1 A6620D -1 +ColorEventMarker=FF -1 E7 -1 +ColorEventOther=FFFFFF -1 BABABA -1 +ColorHitMarker=FF00FF -1 FF00FF -1 +ColorGrid=8000 -1 8000 -1 +ColorBackground=0 -1 FFFFFF -1 +ColorChanged=FF0000 -1 FF0000 -1 +ColorWindowBg=C0C0C0 15 FFFFFF -1 +ColorAxis=FFFFFF -1 0 -1 +ColorAxisBackground=0 -1 FFFFFF -1 +ColorAxisSameScaled=FFFFFF -1 0 -1 +ColorAxisText=0 -1 0 -1 +ColorComments=FFFF00 -1 FFFF00 -1 +ColorCalComments=FFFF00 -1 FFFF00 -1 +ColorLegend=0 15 FFFFFF -1 +ColorLegendText=0 18 0 18 +ColorWindowFrameFocus=606060 -1 CEA27D -1 +ColorWindowFrameButtons=0 -1 0 -1 +ColorHexWinCalRam=8000 -1 8000 -1 +ColorHexWinNotCalRam=FF -1 FF -1 +ColorHexWinDbObject=80FFFF -1 80FFFF -1 +ColorHexWinInvalid=AFAFFF -1 AFAFFF -1 +ColorHexWinInvalidDb=FF -1 FF -1 +ColorHexWinSelection=FF 13 FF 13 +ColorHexWinSelText=0 14 0 14 +ColorWriteText=FFFF00 -1 FFFF00 -1 +ColorValLimitOK=FF00 -1 FF00 -1 +ColorValLimitWarn=FFFF -1 FFFF -1 +ColorValLimitError=FF -1 FF -1 +ColorActiveTitleLeft=54E3 2 54E3 2 +ColorActiveTitleRight=3D95FF 27 3D95FF 27 +ColorActiveTitleText=FFFFFF 9 FFFFFF 9 +ColorInactiveTitleLeft=7A96DF 3 7A96DF 3 +ColorInactiveTitleRight70=7A96DF 28 7A96DF 28 +ColorInactiveTitleText=D8E4F8 19 D8E4F8 19 +ColorMeaCursorTooltip=808080 -1 808080 -1 +ColorMeaCursorTooltipTxt=FFFFFF -1 FFFFFF -1 +ColorDisplayGray=999999 -1 999999 -1 +ColorDisplaySubGrid=4000 -1 4000 -1 +ColorGraphBackground=D2D2D2 -1 EEEEEE -1 +ColorInvalidSignal=F0F0F0 -1 F0F0F0 -1 +ColorLostVariable=C0C0C0 -1 C0C0C0 -1 +ColorMoveFrame=FAD5A3 -1 FAD5A3 -1 +ColorResizeMarkers=646464 -1 646464 -1 +ColorPageBackground=D8C7BC -1 D8C7BC -1 +ColorDisabledLegendText=A0A0A0 17 A0A0A0 17 +ColorBordersHighlight=FFFFFF 20 0 20 +ColorBordersShadow=A0A0A0 16 0 16 +ColorLookupTableX=FF -1 FF -1 +ColorLookupTableY=8000 -1 8000 -1 +ColorLookupTableZ=FF0000 -1 FF0000 -1 +ColorLookupTableZ4=FFFF00 -1 FFFF00 -1 +ColorLookupTableZ5=FF00FF -1 FF00FF -1 +ColorActiveCell=30FFFF -1 30FFFF -1 +ColorActiveCellText=0 -1 0 -1 +ColorMissingValues=FF -1 FF -1 +ColorBackgroundValues=FFFFFF -1 FFFFFF -1 +ColorWorkingPoint=880088 -1 880088 -1 +ColorColumnHeader=F0F0F0 30 F0F0F0 30 +ColorBackgroundMetaData=DADEE1 -1 FFFFFF -1 +ColorStatistic=FFFFFF -1 0 -1 +ColorMarker1CurveMode=F56DF3 -1 944293 -1 +ColorMarker2CurveMode=277FFF -1 2372E6 -1 + +[COMMENT_FIELD_0] +ID="Name" +MAX_LENGTH=32 +MODE=0 +VALUE_COUNT=0 +HISTORY_COUNT=0 + +[COMMENT_FIELD_1] +ID="Division" +MAX_LENGTH=32 +MODE=0 +VALUE_COUNT=0 +HISTORY_COUNT=0 + +[COMMENT_FIELD_2] +ID="Project" +MAX_LENGTH=32 +MODE=0 +VALUE_COUNT=0 +HISTORY_COUNT=0 + +[COMMENT_FIELD_3] +ID="Subject" +MAX_LENGTH=32 +MODE=0 +VALUE_COUNT=0 +HISTORY_COUNT=0 + +[COMMENT_FIELD_4] +ID="Comment" +MAX_LENGTH=-1 +MODE=12 +VALUE_COUNT=0 +HISTORY_COUNT=0 + +[DEVICE_EXPLORER_COLUMNLIST_CHANNELS] +ScreenDPIinSection=192 +ColumnCount=4 +Column_0=0, 306 +Column_0_dpi96=0, 153 +Column_1=1245185, 132 +Column_1_dpi96=1245185, 66 +Column_2=1245186, 66 +Column_2_dpi96=1245186, 33 +Column_3=1245187, 106 +Column_3_dpi96=1245187, 53 +ColumnIdSort=-1 +SortUpward=1 + +[DEVICE_EXPLORER_COLUMNLIST_DEVICES] +ScreenDPIinSection=192 +ColumnCount=10 +Column_0=34, 96 +Column_0_dpi96=34, 48 +Column_1=0, 460 +Column_1_dpi96=0, 230 +Column_2=131078, 160 +Column_2_dpi96=131078, 80 +Column_3=131103, 100 +Column_3_dpi96=131103, 50 +Column_4=131079, 100 +Column_4_dpi96=131079, 50 +Column_5=262145, 240 +Column_5_dpi96=262145, 120 +Column_6=131085, 200 +Column_6_dpi96=131085, 100 +Column_7=131080, 240 +Column_7_dpi96=131080, 120 +Column_8=131081, 160 +Column_8_dpi96=131081, 80 +Column_9=196609, 100 +Column_9_dpi96=196609, 50 +ColumnIdSort=-1 +SortUpward=1 + +[DEVICE_EXPLORER_COLUMNLIST_NETWORKS] +ScreenDPIinSection=192 +ColumnCount=6 +Column_0=34, 64 +Column_0_dpi96=34, 32 +Column_1=0, 304 +Column_1_dpi96=0, 152 +Column_2=983041, 192 +Column_2_dpi96=983041, 96 +Column_3=983042, 530 +Column_3_dpi96=983042, 265 +Column_4=983043, 252 +Column_4_dpi96=983043, 126 +Column_5=983044, 300 +Column_5_dpi96=983044, 150 +ColumnIdSort=-1 +SortUpward=1 + +[MEASUREMENT_0] +FileId=Measurement1 +MeasurementId=0b0e233f-7db0-4a8b-a0a3-839827cddec1 +LoadMeasurementSetting=3 + +[SIGNSELWND_DYNAMIC_COLUMNS] +Count=0 + +[~~~~~_CONSISTENCY_CHECK_END_SECTION_~~~~~] +GUID={9DAA6890-BF7E-488B-BDB6-8C27815EE897} + diff --git a/examples/no_a2l_demo/CANape/CanapeCmd.ini b/examples/no_a2l_demo/CANape/CanapeCmd.ini new file mode 100644 index 00000000..146b2196 --- /dev/null +++ b/examples/no_a2l_demo/CANape/CanapeCmd.ini @@ -0,0 +1,6375 @@ +[GLOBAL] +COMMAND_COUNT=0 +COMMAND_HISTORY=0 +COMMAND_DESCRIPTION=0 +MENU_ICON_WIDTH=32 +MENU_ICON_WIDTH_dpi96=16 +MENU_ICON_HEIGHT=32 +MENU_ICON_HEIGHT_dpi96=16 +COUNT=1273 + +[Command_0] +CmdId=ACTIVEX@FAULTMEMORY.FaultMemoryCtrl.1#ID_POPUP_CLEAR_DTC +VKey=0 +Key=0 + +[Command_1] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_IMPORT +VKey=0 +Key=0 + +[Command_2] +CmdId=ACTIVEX@OBD.OBDCtrl.1#ID_POPUP_OPTIONS +VKey=0 +Key=0 + +[Command_3] +CmdId=ACTIVEX@VARIANTCODING.VariantCodingCtrl.1#ID_POPUP_IMPORT +VKey=0 +Key=0 + +[Command_4] +CmdId=CM_SYMB_EXPL_DS_DECOMPRESS +VKey=0 +Key=0 + +[Command_5] +CmdId=CM_CREATE_AX_WINDOW_20 +VKey=0 +Key=0 + +[Command_6] +CmdId=CM_OPEN_PANEL_WINDOW_CONTAINER_8 +VKey=0 +Key=0 + +[Command_7] +CmdId=CM_CREATE_ADAS_EXPLORER_WINDOW +VKey=0 +Key=0 + +[Command_8] +CmdId=CM_MEASUREMENT_LIVEVIEW_DSP +VKey=0 +Key=0 + +[Command_9] +CmdId=CM_PRINT +VKey=0 +Key=0 + +[Command_10] +CmdId=CM_SYMB_EXPL_AddDsFromDevice +VKey=0 +Key=0 + +[Command_11] +CmdId=CM_MACRO_LICENSENAME +VKey=0 +Key=0 + +[Command_12] +CmdId=CM_DM_LAYOUT_MODIFY_PANE_HIDDEN +VKey=0 +Key=0 + +[Command_13] +CmdId=CM_SymbolExplorer_Search_Value +VKey=0 +Key=0 + +[Command_14] +CmdId=CM_TIME_XLEN_EDIT +VKey=0 +Key=0 + +[Command_15] +CmdId=CM_MDICHILD_4 +VKey=0 +Key=0 + +[Command_16] +CmdId=CM_HELP_DEMOS +VKey=0 +Key=0 + +[Command_17] +CmdId=CM_SETUPWND_DEL_MODULES +VKey=0 +Key=0 + +[Command_18] +CmdId=CM_DropMeasurement +VKey=0 +Key=0 + +[Command_19] +CmdId=CM_RECEIVE_FILE +VKey=0 +Key=0 + +[Command_20] +CmdId=CM_MEASUREMENT_STOP_REC_ALL +VKey=0 +Key=0 + +[Command_21] +CmdId=CM_CREATE_DISP_EL_TEXTBOX +VKey=0 +Key=0 + +[Command_22] +CmdId=CM_DropGeneralMeasurementWnd +VKey=0 +Key=0 + +[Command_23] +CmdId=CM_CONVERTER_IMPORT_1 +VKey=0 +Key=0 + +[Command_24] +CmdId=CM_MARKER10_RIGHT +VKey=27 +Key=39 + +[Command_25] +CmdId=CM_PARAMETERLAST3 +VKey=0 +Key=0 + +[Command_26] +CmdId=CM_CALIBRATION_RAM_FREEZE +VKey=0 +Key=0 + +[Command_27] +CmdId=CM_WRITE_SHOW_TIME +VKey=0 +Key=0 + +[Command_28] +CmdId=CM_SELECT_ALL +VKey=0 +Key=0 + +[Command_29] +CmdId=CM_NEW_DEVICE +VKey=0 +Key=0 + +[Command_30] +CmdId=CM_DEVEXP_APPLY_ALL_CHANGES +VKey=0 +Key=0 + +[Command_31] +CmdId=CM_BAR_HOR_BOTTOM +VKey=0 +Key=0 + +[Command_32] +CmdId=CM_COPY_PAGE +VKey=0 +Key=0 + +[Command_33] +CmdId=CM_CONFIGLAST4 +VKey=0 +Key=0 + +[Command_34] +CmdId=CM_NEW_DEVICE_FROM_PROJECT +VKey=0 +Key=0 + +[Command_35] +CmdId=CM_DS_DEVICE_3 +VKey=0 +Key=0 + +[Command_36] +CmdId=ACTIVEX@CNPTRACE.TraceCtrl.1#ID_REGTEST_CMD_NAV_PREV +VKey=0 +Key=0 + +[Command_37] +CmdId=CM_OMIT_INDEX_IN_TREE +VKey=11 +Key=88 + +[Command_38] +CmdId=CM_LEGEND_SHOW_LIFE_VALUES +VKey=0 +Key=0 + +[Command_39] +CmdId=CM_DE_COMMENT_VERTICAL_TOP +VKey=3 +Key=0 + +[Command_40] +CmdId=CM_SHOW_SELECTED_PARAMETERS_CDMSTUDIO +VKey=0 +Key=0 + +[Command_41] +CmdId=CM_CALIBRATION_UNDO_5 +VKey=0 +Key=0 + +[Command_42] +CmdId=CM_MACRO_USER_DEFINED_FIELD+8 +VKey=0 +Key=0 + +[Command_43] +CmdId=CM_USERMENU18 +VKey=0 +Key=0 + +[Command_44] +CmdId=CM_CALIB_RAM +VKey=0 +Key=0 + +[Command_45] +CmdId=CM_REMOVE_ALLDISP +VKey=0 +Key=0 + +[Command_46] +CmdId=ACTIVEX@MATLAB.MatlabCtrl.50#ID_ZOOM100 +VKey=3 +Key=79 + +[Command_47] +CmdId=CM_SETUP_AXIS_SCALING_PAGE +VKey=3 +Key=0 + +[Command_48] +CmdId=ACTIVEX@FAULTMEMORY.FaultMemoryCtrl.1#ID_POPUP_CYCLIC_UPDATE_OFF +VKey=0 +Key=0 + +[Command_49] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_SHOW_PARAM_TYPE +VKey=0 +Key=0 + +[Command_50] +CmdId=ACTIVEX@OBD.OBDCtrl.1#ID_POPUP_START_NETWORK_SCAN +VKey=0 +Key=0 + +[Command_51] +CmdId=CM_PAGE_END +VKey=3 +Key=35 + +[Command_52] +CmdId=CM_CALIBRATION_DIRECT_2 +VKey=0 +Key=0 + +[Command_53] +CmdId=CM_DM_SAVEANDMERGE +VKey=0 +Key=0 + +[Command_54] +CmdId=CM_COPY_LEGEND_TO_CLIPBOARD +VKey=0 +Key=0 + +[Command_55] +CmdId=CM_CALIBRATION_LOAD_PARAMS +VKey=0 +Key=0 + +[Command_56] +CmdId=CM_MACRO_WRITEWINDOW +VKey=0 +Key=0 + +[Command_57] +CmdId=CM_HEXWIN_EDIT +VKey=11 +Key=69 + +[Command_58] +CmdId=CM_DM_SAVEANDFLASH +VKey=0 +Key=0 + +[Command_59] +CmdId=CM_MEASUREMENT_START_TARA +VKey=0 +Key=0 + +[Command_60] +CmdId=CM_CREATE_AX_WINDOW_1 +VKey=0 +Key=0 + +[Command_61] +CmdId=CM_2DAUS +VKey=0 +Key=0 + +[Command_62] +CmdId=CM_DEZOOM +VKey=3 +Key=68 + +[Command_63] +CmdId=CM_VIEW_WORKINGPOINT_INPUT +VKey=0 +Key=0 + +[Command_64] +CmdId=CM_DM_NEXT_PROCFILE +VKey=0 +Key=0 + +[Command_65] +CmdId=CM_DATAMANAGEMENT +VKey=7 +Key=117 + +[Command_66] +CmdId=CM_MEASUREMENT_STOP_REC_10 +VKey=0 +Key=0 + +[Command_67] +CmdId=CM_ROTATE_VIEW_DOWN +VKey=11 +Key=40 + +[Command_68] +CmdId=CM_OPTIONS_DISPLAY_OTHEREVENT_LINES +VKey=0 +Key=0 + +[Command_69] +CmdId=CM_CALIBRATION_ONLINE_5 +VKey=0 +Key=0 + +[Command_70] +CmdId=CM_ACTIVITY_DISPLAY +VKey=3 +Key=65 + +[Command_71] +CmdId=CM_MEASUREMENT_START_REC_1 +VKey=0 +Key=0 + +[Command_72] +CmdId=CM_DropMatlabWnd +VKey=0 +Key=0 + +[Command_73] +CmdId=CM_CONVERTER_EXPORT_9 +VKey=0 +Key=0 + +[Command_74] +CmdId=CM_LEGEND_NAME +VKey=0 +Key=0 + +[Command_75] +CmdId=CM_PROJECTLAST4 +VKey=0 +Key=0 + +[Command_76] +CmdId=CM_PAGE_6 +VKey=19 +Key=54 + +[Command_77] +CmdId=CM_EXTEND_DOWN +VKey=7 +Key=40 + +[Command_78] +CmdId=CM_ShowSnapshotModified +VKey=0 +Key=0 + +[Command_79] +CmdId=CM_FILESIGNALLISTDLG_EDIT +VKey=19 +Key=13 + +[Command_80] +CmdId=CM_SHIFT_RIGHT_TEXT +VKey=3 +Key=39 + +[Command_81] +CmdId=CM_DE_COMMENT_CENTER +VKey=3 +Key=0 + +[Command_82] +CmdId=CM_DropNumberWnd +VKey=0 +Key=0 + +[Command_83] +CmdId=CM_USERMENU28 +VKey=0 +Key=0 + +[Command_84] +CmdId=CM_OPEN_LOGGER_CONFIG +VKey=0 +Key=0 + +[Command_85] +CmdId=CM_CALIB_RAM_9 +VKey=0 +Key=0 + +[Command_86] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_OPEN_TESTER_PRESENT_OFF +VKey=0 +Key=0 + +[Command_87] +CmdId=ACTIVEX@CNPTRACE.TraceCtrl.1#ID_HIDE_FADED_EVENTS +VKey=17 +Key=0 + +[Command_88] +CmdId=CM_SEARCH_VALUE +VKey=0 +Key=0 + +[Command_89] +CmdId=CM_DEFAULT_COLUMNS +VKey=0 +Key=0 + +[Command_90] +CmdId=CM_CALIBRATION_UPDATE +VKey=3 +Key=122 + +[Command_91] +CmdId=CM_FLIP_X_AXIS_VALUES +VKey=0 +Key=0 + +[Command_92] +CmdId=CM_MACRO_WEEKOFYEAR +VKey=0 +Key=0 + +[Command_93] +CmdId=CM_DIAGNOSE +VKey=0 +Key=0 + +[Command_94] +CmdId=CM_CALIB_ONLINE_4 +VKey=0 +Key=0 + +[Command_95] +CmdId=CM_DropCnaAdd +VKey=0 +Key=0 + +[Command_96] +CmdId=CM_CAL_METHOD_TOGGLE_CALIBRATEABLE +VKey=0 +Key=0 + +[Command_97] +CmdId=CM_MEASUREMENT_FIRE_TRIGGER +VKey=3 +Key=0 + +[Command_98] +CmdId=CM_PROJ_CHANGE_ACCEPT_1 +VKey=0 +Key=0 + +[Command_99] +CmdId=CM_CREATE_AX_WINDOW_11 +VKey=0 +Key=0 + +[Command_100] +CmdId=CM_DockBar_DockedHide +VKey=0 +Key=0 + +[Command_101] +CmdId=CM_SYMB_EXPL_SAVE_RESTORED_MDF_FILE +VKey=0 +Key=0 + +[Command_102] +CmdId=CM_MODE_XY +VKey=3 +Key=90 + +[Command_103] +CmdId=CM_SETUPWND_HIDE_ALL_COMMENTS +VKey=0 +Key=0 + +[Command_104] +CmdId=CM_SYMB_EXPL_OPEN_MDF_ATTACHMENT +VKey=0 +Key=0 + +[Command_105] +CmdId=CM_MACRO_PAGE_NUMBER +VKey=0 +Key=0 + +[Command_106] +CmdId=CM_FORMAT_BIN +VKey=11 +Key=66 + +[Command_107] +CmdId=CM_CALHISTORY_SNAPSHOT_NR2 +VKey=0 +Key=0 + +[Command_108] +CmdId=CM_NEW_VIRT_MATLAB_BASED_CHANNEL +VKey=0 +Key=0 + +[Command_109] +CmdId=CM_EXPORT_PDF +VKey=0 +Key=0 + +[Command_110] +CmdId=CM_CREATE_VAL_WINDOW +VKey=0 +Key=0 + +[Command_111] +CmdId=CM_NEW_STIMULATION_SIGNAL +VKey=0 +Key=0 + +[Command_112] +CmdId=CM_PLAY_PAUSE +VKey=0 +Key=0 + +[Command_113] +CmdId=CM_DropParameter +VKey=0 +Key=0 + +[Command_114] +CmdId=CM_ALIGNMENT_RIGHT +VKey=0 +Key=0 + +[Command_115] +CmdId=CM_MEASUREMENT_START_REC_11 +VKey=0 +Key=0 + +[Command_116] +CmdId=CM_MEA_DATA_FILTER_ENABLE_ALL +VKey=0 +Key=0 + +[Command_117] +CmdId=CM_DropPanelWnd +VKey=0 +Key=0 + +[Command_118] +CmdId=CM_LEGEND_LN_SCALING +VKey=0 +Key=0 + +[Command_119] +CmdId=CM_CALIBRATION_RAM_3 +VKey=0 +Key=0 + +[Command_120] +CmdId=CM_COMMON_AXIS_SET_6 +VKey=0 +Key=0 + +[Command_121] +CmdId=CM_LEGEND_FOCUS_NEXT +VKey=0 +Key=0 + +[Command_122] +CmdId=CM_BROWSER_GO_FORWARD +VKey=19 +Key=39 + +[Command_123] +CmdId=CM_MEASURELAST4 +VKey=0 +Key=0 + +[Command_124] +CmdId=CM_SORT_BY_ADDRESS +VKey=0 +Key=0 + +[Command_125] +CmdId=CM_HEXWIN_CHECKSUM +VKey=0 +Key=0 + +[Command_126] +CmdId=CM_CONVERTER_SETUP_10 +VKey=0 +Key=0 + +[Command_127] +CmdId=CM_SETUPWND_DATABASE_EDIT +VKey=0 +Key=0 + +[Command_128] +CmdId=CM_DELETE_SIGNAL +VKey=0 +Key=0 + +[Command_129] +CmdId=CM_FLOATING_WINDOW +VKey=0 +Key=0 + +[Command_130] +CmdId=CM_DropDataWnd +VKey=0 +Key=0 + +[Command_131] +CmdId=CM_ASAP3 +VKey=0 +Key=0 + +[Command_132] +CmdId=CM_CALIB_FLASH_7 +VKey=0 +Key=0 + +[Command_133] +CmdId=ACTIVEX@MATLAB.MatlabCtrl.50#ID_RESET_DISPLAY_VALUES +VKey=3 +Key=82 + +[Command_134] +CmdId=CM_CLOSEWINDOW +VKey=0 +Key=0 + +[Command_135] +CmdId=ACTIVEX@CNPTRACE.TraceCtrl.1#ID_VIEW_GLOBAL_HIGHLIGHTING +VKey=4 +Key=0 + +[Command_136] +CmdId=CM_ENABLE_XOFFSET_MODE +VKey=0 +Key=0 + +[Command_137] +CmdId=CM_CALIBRATION_ACTIVE_6 +VKey=0 +Key=0 + +[Command_138] +CmdId=CM_CALIBRATION_UPDATE_9 +VKey=0 +Key=0 + +[Command_139] +CmdId=CM_MACRO_INI+9 +VKey=0 +Key=0 + +[Command_140] +CmdId=CM_USERMENU9 +VKey=0 +Key=0 + +[Command_141] +CmdId=CM_CALIB_OFFLINE_2 +VKey=0 +Key=0 + +[Command_142] +CmdId=CM_AXIS_TEMPLATE_NEW +VKey=3 +Key=0 + +[Command_143] +CmdId=ACTIVEX@FAULTMEMORY.FaultMemoryCtrl.1#ID_POPUP_CLEAR_ALL_DTC +VKey=0 +Key=0 + +[Command_144] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_CLEAR +VKey=0 +Key=0 + +[Command_145] +CmdId=ACTIVEX@OBD.OBDCtrl.1#ID_POPUP_IMPORT +VKey=0 +Key=0 + +[Command_146] +CmdId=ACTIVEX@VARIANTCODING.VariantCodingCtrl.1#ID_POPUP_OPTIONS +VKey=0 +Key=0 + +[Command_147] +CmdId=CM_DEZOOMX +VKey=0 +Key=0 + +[Command_148] +CmdId=CM_CREATE_AX_WINDOW_21 +VKey=0 +Key=0 + +[Command_149] +CmdId=CM_OPEN_PANEL_WINDOW_CONTAINER_9 +VKey=0 +Key=0 + +[Command_150] +CmdId=CM_CREATE_GENERAL_PARA_WINDOW +VKey=0 +Key=0 + +[Command_151] +CmdId=CM_PRINTERSETUP +VKey=0 +Key=0 + +[Command_152] +CmdId=CM_SYMB_EXPL_ECDM +VKey=0 +Key=0 + +[Command_153] +CmdId=CM_MACRO_LICENSENO +VKey=0 +Key=0 + +[Command_154] +CmdId=CM_DM_LAYOUT_MODIFY_PANE_LEFT +VKey=0 +Key=0 + +[Command_155] +CmdId=CM_SymbolExplorer_Configure +VKey=7 +Key=115 + +[Command_156] +CmdId=CM_ZOOM_IN +VKey=0 +Key=0 + +[Command_157] +CmdId=CM_MDICHILD_5 +VKey=0 +Key=0 + +[Command_158] +CmdId=CM_NEXT_BOOKMARK +VKey=15 +Key=78 + +[Command_159] +CmdId=CM_SEND_FILE +VKey=0 +Key=0 + +[Command_160] +CmdId=CM_MEASUREMENT_STOP_REC_1 +VKey=0 +Key=0 + +[Command_161] +CmdId=CM_CREATE_DISP_EL_GRAPHIC +VKey=0 +Key=0 + +[Command_162] +CmdId=CM_CONVERTER_IMPORT_2 +VKey=0 +Key=0 + +[Command_163] +CmdId=CM_MARKER20_LEFT +VKey=23 +Key=37 + +[Command_164] +CmdId=CM_PARAMETERLAST4 +VKey=0 +Key=0 + +[Command_165] +CmdId=CM_WRITE_CLEAR_START +VKey=0 +Key=0 + +[Command_166] +CmdId=CM_CUSTOMIZE +VKey=0 +Key=0 + +[Command_167] +CmdId=ACTIVEX@MATLAB.MatlabCtrl.50#ID_CHANGE_FOCUS_EXPLORER_PATH +VKey=11 +Key=9 + +[Command_168] +CmdId=CM_DEVEXP_REVERT_ALL_CHANGES +VKey=0 +Key=0 + +[Command_169] +CmdId=CM_BAR_VER_ZERO +VKey=0 +Key=0 + +[Command_170] +CmdId=CM_PREVIEW_MODE +VKey=0 +Key=0 + +[Command_171] +CmdId=CM_CONFIGLAST5 +VKey=0 +Key=0 + +[Command_172] +CmdId=CM_CALIBRATION_UNDO_PARAM +VKey=0 +Key=0 + +[Command_173] +CmdId=CM_DS_DEVICE_4 +VKey=0 +Key=0 + +[Command_174] +CmdId=ACTIVEX@CNPTRACE.TraceCtrl.1#ID_REGTEST_CMD_NAV_NEXT +VKey=0 +Key=0 + +[Command_175] +CmdId=CM_CALIBRATION_SAVE_PARAMSBIN +VKey=0 +Key=0 + +[Command_176] +CmdId=CM_DE_COMMENT_VERTICAL_MIDDLE +VKey=3 +Key=0 + +[Command_177] +CmdId=CM_SHOW_SELECTED_PARAMETER_CDMSTUDIO +VKey=0 +Key=0 + +[Command_178] +CmdId=CM_CALIBRATION_UNDO_6 +VKey=0 +Key=0 + +[Command_179] +CmdId=CM_MACRO_USER_DEFINED_FIELD+9 +VKey=0 +Key=0 + +[Command_180] +CmdId=CM_USERMENU19 +VKey=0 +Key=0 + +[Command_181] +CmdId=CM_CALIB_RAM_0 +VKey=0 +Key=0 + +[Command_182] +CmdId=CM_DELETE_SELSIG +VKey=0 +Key=0 + +[Command_183] +CmdId=ACTIVEX@MATLAB.MatlabCtrl.50#ID_ZOOMFIT +VKey=3 +Key=70 + +[Command_184] +CmdId=CM_OPEN_LOGGER_PROJECT +VKey=0 +Key=0 + +[Command_185] +CmdId=ACTIVEX@FAULTMEMORY.FaultMemoryCtrl.1#ID_POPUP_DTC_LOGGING_ON +VKey=0 +Key=0 + +[Command_186] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_SELECTALL +VKey=9 +Key=65 + +[Command_187] +CmdId=ACTIVEX@OBD.OBDCtrl.1#ID_POPUP_CREATE_REPORT +VKey=0 +Key=0 + +[Command_188] +CmdId=CM_PAGE_LEFT +VKey=19 +Key=37 + +[Command_189] +CmdId=CM_CALIBRATION_DIRECT_3 +VKey=0 +Key=0 + +[Command_190] +CmdId=CM_CALIBRATION_SAVE_PARAMS +VKey=0 +Key=0 + +[Command_191] +CmdId=CM_MACRO_CONFIGURATION +VKey=0 +Key=0 + +[Command_192] +CmdId=CM_HEXWIN_GOTO_ADDRESS +VKey=0 +Key=0 + +[Command_193] +CmdId=CM_CREATE_AX_WINDOW_2 +VKey=0 +Key=0 + +[Command_194] +CmdId=CM_SYMB_EXPL_SELECT_MM_FILE +VKey=0 +Key=0 + +[Command_195] +CmdId=CM_SAVE_WINDOW_DEFAULT +VKey=0 +Key=0 + +[Command_196] +CmdId=CM_NEW_EXISTING_VIRTUAL +VKey=0 +Key=0 + +[Command_197] +CmdId=CM_FLASH_ODX +VKey=0 +Key=0 + +[Command_198] +CmdId=CM_DM_PREV_PROCFILE +VKey=0 +Key=0 + +[Command_199] +CmdId=CM_MEASUREMENT_STOP_REC_11 +VKey=0 +Key=0 + +[Command_200] +CmdId=CM_MACRO_USER +VKey=0 +Key=0 + +[Command_201] +CmdId=CM_ROTATE_VIEW_UP +VKey=11 +Key=38 + +[Command_202] +CmdId=CM_MEASUREMENT_START +VKey=3 +Key=120 + +[Command_203] +CmdId=CM_DE_OPEN_EDITOR +VKey=3 +Key=0 + +[Command_204] +CmdId=CM_CALIBRATION_ONLINE_6 +VKey=0 +Key=0 + +[Command_205] +CmdId=CM_MEASUREMENT_START_REC_2 +VKey=0 +Key=0 + +[Command_206] +CmdId=CM_CONVERTER_EXPORT_10 +VKey=0 +Key=0 + +[Command_207] +CmdId=CM_LEGEND_FULL +VKey=0 +Key=0 + +[Command_208] +CmdId=CM_PRINT_COMPONENT_WINDOW +VKey=0 +Key=0 + +[Command_209] +CmdId=CM_PROJECTLAST5 +VKey=0 +Key=0 + +[Command_210] +CmdId=CM_DropGroupCalWnd +VKey=0 +Key=0 + +[Command_211] +CmdId=CM_PAGE_7 +VKey=19 +Key=55 + +[Command_212] +CmdId=CM_EXTEND_HOME +VKey=7 +Key=36 + +[Command_213] +CmdId=CM_ShowSnapshotModifiedUpTo +VKey=0 +Key=0 + +[Command_214] +CmdId=CM_CONVERTER_SETUP_1 +VKey=0 +Key=0 + +[Command_215] +CmdId=CM_FILESIGNALLISTDLG_FILEID +VKey=0 +Key=0 + +[Command_216] +CmdId=CM_SHIFT_UP_TEXT +VKey=3 +Key=38 + +[Command_217] +CmdId=CM_DE_PROPERTIES +VKey=3 +Key=0 + +[Command_218] +CmdId=CM_SYMB_EXPL_DownloadDsIntoFlash +VKey=0 +Key=0 + +[Command_219] +CmdId=CM_HEXWIN_SHOW_HEX +VKey=0 +Key=0 + +[Command_220] +CmdId=CM_USERMENU29 +VKey=0 +Key=0 + +[Command_221] +CmdId=CM_SHOW_LEGEND +VKey=0 +Key=0 + +[Command_222] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_VSG_VIEW +VKey=0 +Key=0 + +[Command_223] +CmdId=ACTIVEX@CNPTRACE.TraceCtrl.1#ID_PAUSE_RESUME +VKey=17 +Key=0 + +[Command_224] +CmdId=CM_MARKER1_UP +VKey=11 +Key=38 + +[Command_225] +CmdId=CM_CALIBRATION_UPDATE_0 +VKey=0 +Key=0 + +[Command_226] +CmdId=CM_FLIP_Y_AXIS_VALUES +VKey=0 +Key=0 + +[Command_227] +CmdId=CM_MACRO_INI +VKey=0 +Key=0 + +[Command_228] +CmdId=CM_EXECUTE_SCRIPT +VKey=0 +Key=0 + +[Command_229] +CmdId=CM_CALIB_ONLINE_5 +VKey=0 +Key=0 + +[Command_230] +CmdId=CM_DropCnaLoadPartial +VKey=0 +Key=0 + +[Command_231] +CmdId=CM_ROUND +VKey=3 +Key=82 + +[Command_232] +CmdId=CM_PROJ_CHANGE_ACCEPT_2 +VKey=0 +Key=0 + +[Command_233] +CmdId=CM_CREATE_AX_WINDOW_12 +VKey=0 +Key=0 + +[Command_234] +CmdId=CM_OPEN_PANEL_WINDOW_CONTAINER_0 +VKey=0 +Key=0 + +[Command_235] +CmdId=CM_DockBar_DockedShow +VKey=0 +Key=0 + +[Command_236] +CmdId=CM_CREATE_ADAS_SCENE_WINDOW +VKey=0 +Key=0 + +[Command_237] +CmdId=CM_FILESIGNALLISTDLG_OFFLINE_DSP +VKey=0 +Key=0 + +[Command_238] +CmdId=CM_MODE_O +VKey=3 +Key=79 + +[Command_239] +CmdId=CM_CREATE_STATECHART_WINDOW +VKey=0 +Key=0 + +[Command_240] +CmdId=CM_SYMB_EXPL_SAVE_MDF_ATTACHMENT +VKey=0 +Key=0 + +[Command_241] +CmdId=CM_MACRO_DATE +VKey=0 +Key=0 + +[Command_242] +CmdId=CM_CALHISTORY_SNAPSHOT_NR3 +VKey=0 +Key=0 + +[Command_243] +CmdId=CM_NEW_VIRT_ALGEBRAIC_BASED_CHANNEL +VKey=0 +Key=0 + +[Command_244] +CmdId=CM_SymbolExplorer_Search +VKey=0 +Key=0 + +[Command_245] +CmdId=CM_CONFIGURE_PDF +VKey=0 +Key=0 + +[Command_246] +CmdId=CM_PLAY_END +VKey=7 +Key=176 + +[Command_247] +CmdId=CM_ALIGNMENT_DOT +VKey=3 +Key=68 + +[Command_248] +CmdId=CM_MEASUREMENT_START_REC_12 +VKey=0 +Key=0 + +[Command_249] +CmdId=CM_MEA_DATA_FILTER_REMOVE_ALL +VKey=0 +Key=0 + +[Command_250] +CmdId=CM_LEGEND_LN_VALUE +VKey=0 +Key=0 + +[Command_251] +CmdId=CM_CALIBRATION_RAM_4 +VKey=0 +Key=0 + +[Command_252] +CmdId=CM_COMMON_AXIS_SET_7 +VKey=0 +Key=0 + +[Command_253] +CmdId=CM_LEGEND_SELECT +VKey=11 +Key=32 + +[Command_254] +CmdId=CM_MEASURELAST5 +VKey=0 +Key=0 + +[Command_255] +CmdId=CM_SHIFT_LEFT_HEX +VKey=3 +Key=37 + +[Command_256] +CmdId=CM_DEVEXP_NEW_FLX_NETWORK +VKey=0 +Key=0 + +[Command_257] +CmdId=CM_PREVIEW_MODE_ALL_PAGES +VKey=0 +Key=0 + +[Command_258] +CmdId=CM_TOGGLE_YAXIS_NEXT +VKey=3 +Key=86 + +[Command_259] +CmdId=CM_CALIB_FLASH_8 +VKey=0 +Key=0 + +[Command_260] +CmdId=ACTIVEX@CNPTRACE.TraceCtrl.1#ID_REGTEST_CMD_PAGEUP +VKey=0 +Key=0 + +[Command_261] +CmdId=CM_DISABLE_XOFFSET_MODE +VKey=0 +Key=0 + +[Command_262] +CmdId=CM_CALIBRATION_ACTIVE_7 +VKey=0 +Key=0 + +[Command_263] +CmdId=CM_CALIBRATION_UPDATE_EXT +VKey=0 +Key=0 + +[Command_264] +CmdId=CM_MACRO_USER_DEFINED_FIELD +VKey=0 +Key=0 + +[Command_265] +CmdId=CM_USERMENU10 +VKey=0 +Key=0 + +[Command_266] +CmdId=CM_CALIB_OFFLINE_3 +VKey=0 +Key=0 + +[Command_267] +CmdId=CM_AXIS_TEMPLATE_0 +VKey=3 +Key=0 + +[Command_268] +CmdId=ACTIVEX@FAULTMEMORY.FaultMemoryCtrl.1#ID_POPUP_REFRESH +VKey=0 +Key=0 + +[Command_269] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_START_RECORD +VKey=0 +Key=0 + +[Command_270] +CmdId=ACTIVEX@OBD.OBDCtrl.1#ID_POPUP_UNCHECK_ALL_PIDS +VKey=0 +Key=0 + +[Command_271] +CmdId=ACTIVEX@VARIANTCODING.VariantCodingCtrl.1#ID_POPUP_OPEN_CONFIGURATION +VKey=0 +Key=0 + +[Command_272] +CmdId=CM_ENZOOMX +VKey=0 +Key=0 + +[Command_273] +CmdId=CM_CREATE_AX_WINDOW_22 +VKey=0 +Key=0 + +[Command_274] +CmdId=CM_HELP_ABOUT +VKey=0 +Key=0 + +[Command_275] +CmdId=CM_SYMB_EXPL_CheckDatasetsFolder +VKey=0 +Key=0 + +[Command_276] +CmdId=CM_MACRO_SIGNAL +VKey=0 +Key=0 + +[Command_277] +CmdId=CM_DM_LOADANDFLASH +VKey=0 +Key=0 + +[Command_278] +CmdId=CM_DM_LAYOUT_MODIFY_PANE_RIGHT +VKey=0 +Key=0 + +[Command_279] +CmdId=CM_SymbolExplorer_Close +VKey=0 +Key=0 + +[Command_280] +CmdId=CM_ZOOM_OUT +VKey=0 +Key=0 + +[Command_281] +CmdId=CM_MDICHILD_6 +VKey=0 +Key=0 + +[Command_282] +CmdId=CM_MEASURE_POINT +VKey=3 +Key=190 + +[Command_283] +CmdId=CM_PREV_BOOKMARK +VKey=15 +Key=80 + +[Command_284] +CmdId=CM_MEASUREMENT_SAVE +VKey=0 +Key=0 + +[Command_285] +CmdId=CM_MEASUREMENT_STOP_REC_2 +VKey=0 +Key=0 + +[Command_286] +CmdId=CM_CREATE_DISP_EL_LABEL +VKey=0 +Key=0 + +[Command_287] +CmdId=CM_DropADASVideoWnd +VKey=0 +Key=0 + +[Command_288] +CmdId=CM_CONVERTER_IMPORT_3 +VKey=0 +Key=0 + +[Command_289] +CmdId=CM_F12 +VKey=3 +Key=123 + +[Command_290] +CmdId=CM_MARKER20_RIGHT +VKey=23 +Key=39 + +[Command_291] +CmdId=CM_PARAMETERLAST5 +VKey=0 +Key=0 + +[Command_292] +CmdId=CM_CREATE_SET_WINDOW +VKey=0 +Key=0 + +[Command_293] +CmdId=CM_CALIBRATION_INITSELECTOR +VKey=0 +Key=0 + +[Command_294] +CmdId=CM_CONVERTER_EXPORT_1 +VKey=0 +Key=0 + +[Command_295] +CmdId=CM_MODULELIST +VKey=0 +Key=0 + +[Command_296] +CmdId=CM_BAR_HOR_ZERO +VKey=0 +Key=0 + +[Command_297] +CmdId=CM_PDF_FOR_CURRENT_PAGE +VKey=0 +Key=0 + +[Command_298] +CmdId=CM_CONFIGLAST6 +VKey=0 +Key=0 + +[Command_299] +CmdId=CM_PAGE +VKey=0 +Key=0 + +[Command_300] +CmdId=CM_MARKER_BOTH1_LEFT +VKey=15 +Key=37 + +[Command_301] +CmdId=CM_DS_DEVICE_5 +VKey=0 +Key=0 + +[Command_302] +CmdId=CM_FIT_COLUMNS +VKey=0 +Key=0 + +[Command_303] +CmdId=ACTIVEX@CNPTRACE.TraceCtrl.1#ID_REGTEST_CMD_EXPAND_ALL +VKey=0 +Key=0 + +[Command_304] +CmdId=CM_TABLE_VIEW +VKey=11 +Key=84 + +[Command_305] +CmdId=CM_CREATE_DATA_WINDOW +VKey=0 +Key=0 + +[Command_306] +CmdId=CM_DE_COMMENT_VERTICAL_BOTTOM +VKey=3 +Key=0 + +[Command_307] +CmdId=CM_COMPARE_MDF +VKey=0 +Key=0 + +[Command_308] +CmdId=CM_CALIBRATION_UNDO_7 +VKey=0 +Key=0 + +[Command_309] +CmdId=CM_USERMENU20 +VKey=0 +Key=0 + +[Command_310] +CmdId=CM_CALIB_RAM_1 +VKey=0 +Key=0 + +[Command_311] +CmdId=CM_DELETE_ALLSIG +VKey=0 +Key=0 + +[Command_312] +CmdId=ACTIVEX@FAULTMEMORY.FaultMemoryCtrl.1#ID_POPUP_DTC_LOGGING_OFF +VKey=0 +Key=0 + +[Command_313] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_UPDATE_PARAMS +VKey=9 +Key=73 + +[Command_314] +CmdId=CM_PAGE_RIGHT +VKey=19 +Key=39 + +[Command_315] +CmdId=CM_CALIBRATION_DIRECT_4 +VKey=0 +Key=0 + +[Command_316] +CmdId=CM_MACRO_DAYOFWEEKSTR +VKey=0 +Key=0 + +[Command_317] +CmdId=CM_SHOW_MEA_STRING_AS_TEXT +VKey=15 +Key=67 + +[Command_318] +CmdId=CM_MACRO_DAYOFWEEK +VKey=0 +Key=0 + +[Command_319] +CmdId=CM_HEXWIN_GOTO_OBJECT +VKey=0 +Key=0 + +[Command_320] +CmdId=CM_CREATE_AX_WINDOW_3 +VKey=0 +Key=0 + +[Command_321] +CmdId=CM_XGRID +VKey=0 +Key=0 + +[Command_322] +CmdId=CM_SYMB_EXPL_MDF_EXPORT_FILE +VKey=0 +Key=0 + +[Command_323] +CmdId=CM_TIME_FIT +VKey=7 +Key=84 + +[Command_324] +CmdId=CM_MODULE_SETTINGS +VKey=0 +Key=0 + +[Command_325] +CmdId=CM_SYMB_EXPL_CAL_FILE_OPEN +VKey=0 +Key=0 + +[Command_326] +CmdId=CM_PAGE_PRINT_VIEW +VKey=0 +Key=0 + +[Command_327] +CmdId=CM_MEASUREMENT_STOP_REC_12 +VKey=0 +Key=0 + +[Command_328] +CmdId=CM_MACRO_CONFIGDIR +VKey=0 +Key=0 + +[Command_329] +CmdId=CM_UNZOOM_VIEW +VKey=11 +Key=189 + +[Command_330] +CmdId=CM_MEASUREMENT_STOP +VKey=3 +Key=27 + +[Command_331] +CmdId=CM_CALIBRATION_ONLINE_7 +VKey=0 +Key=0 + +[Command_332] +CmdId=CM_FIT_TRIGGER +VKey=0 +Key=0 + +[Command_333] +CmdId=CM_MEASUREMENT_START_REC_3 +VKey=0 +Key=0 + +[Command_334] +CmdId=CM_DropMultimediaWnd +VKey=0 +Key=0 + +[Command_335] +CmdId=CM_GOTO_WP +VKey=3 +Key=87 + +[Command_336] +CmdId=CM_COMMON_AXIS_NEW +VKey=0 +Key=0 + +[Command_337] +CmdId=CM_EXPORT_COMPONENT_WINDOW +VKey=0 +Key=0 + +[Command_338] +CmdId=CM_PROJECTLAST6 +VKey=0 +Key=0 + +[Command_339] +CmdId=CM_PAGE_8 +VKey=19 +Key=56 + +[Command_340] +CmdId=CM_EXTEND_END +VKey=7 +Key=35 + +[Command_341] +CmdId=CM_ShowSnapshotComplete +VKey=0 +Key=0 + +[Command_342] +CmdId=CM_CONVERTER_SETUP_2 +VKey=0 +Key=0 + +[Command_343] +CmdId=CM_FILESIGNALLISTDLG_HELP +VKey=0 +Key=0 + +[Command_344] +CmdId=CM_SHIFT_DOWN_TEXT +VKey=3 +Key=40 + +[Command_345] +CmdId=CM_DE_MOVE_FRONT +VKey=3 +Key=0 + +[Command_346] +CmdId=CM_MDF_REPLACEFILE +VKey=0 +Key=0 + +[Command_347] +CmdId=CM_DropTextWnd +VKey=0 +Key=0 + +[Command_348] +CmdId=CM_USERMENU30 +VKey=0 +Key=0 + +[Command_349] +CmdId=CM_TXT_FIT_LEGEND +VKey=0 +Key=0 + +[Command_350] +CmdId=CM_CALIB_FLASH +VKey=0 +Key=0 + +[Command_351] +CmdId=CM_ENABLE_EVENT_COMPARE +VKey=0 +Key=0 + +[Command_352] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_CLASS_VIEW +VKey=0 +Key=0 + +[Command_353] +CmdId=ACTIVEX@CNPTRACE.TraceCtrl.1#ID_TOGGLE_TIME_MODE +VKey=17 +Key=0 + +[Command_354] +CmdId=CM_MARKER1_DOWN +VKey=11 +Key=40 + +[Command_355] +CmdId=CM_CALIBRATION_ACTIVE_ALL +VKey=0 +Key=0 + +[Command_356] +CmdId=CM_CALIBRATION_UPDATE_1 +VKey=0 +Key=0 + +[Command_357] +CmdId=CM_MACRO_INI+1 +VKey=0 +Key=0 + +[Command_358] +CmdId=CM_USERMENU1 +VKey=0 +Key=0 + +[Command_359] +CmdId=CM_CALIB_ONLINE_6 +VKey=0 +Key=0 + +[Command_360] +CmdId=CM_CREATE_AX_WINDOW_24 +VKey=0 +Key=0 + +[Command_361] +CmdId=CM_SYMB_EXPL_ALL_OFFSET_ADJUSTMENT +VKey=0 +Key=0 + +[Command_362] +CmdId=CM_VERMODE +VKey=0 +Key=0 + +[Command_363] +CmdId=CM_PROJ_CHANGE_ACCEPT_3 +VKey=0 +Key=0 + +[Command_364] +CmdId=CM_DEVICE_DATASET_ADMIN_ON +VKey=0 +Key=0 + +[Command_365] +CmdId=CM_CREATE_AX_WINDOW_13 +VKey=0 +Key=0 + +[Command_366] +CmdId=CM_OPEN_PANEL_WINDOW_CONTAINER_1 +VKey=0 +Key=0 + +[Command_367] +CmdId=CM_CREATE_ADAS_VIDEO_WINDOW +VKey=0 +Key=0 + +[Command_368] +CmdId=CM_FILESIGNALLISTDLG_ONLINE_DSP +VKey=0 +Key=0 + +[Command_369] +CmdId=CM_MODE_A +VKey=3 +Key=65 + +[Command_370] +CmdId=CM_WRITE_COPY_WITH_TITLES +VKey=0 +Key=0 + +[Command_371] +CmdId=CM_SYMB_EXPL_OPEN_FOLDER_MDF_ATTACHMENT +VKey=0 +Key=0 + +[Command_372] +CmdId=CM_MACRO_TIME +VKey=0 +Key=0 + +[Command_373] +CmdId=CM_CALHISTORY_SNAPSHOT_NR4 +VKey=0 +Key=0 + +[Command_374] +CmdId=CM_LEGEND_LN_VAL4 +VKey=0 +Key=0 + +[Command_375] +CmdId=CM_CREATE_CAL_WINDOW +VKey=0 +Key=0 + +[Command_376] +CmdId=CM_SETUPWND_SHOW_ALL_COMMENTS +VKey=0 +Key=0 + +[Command_377] +CmdId=CM_LEGEND_SELECT_ALL +VKey=11 +Key=65 + +[Command_378] +CmdId=CM_MEASUREMENT_START_REC_13 +VKey=0 +Key=0 + +[Command_379] +CmdId=CM_DropDiagnosticWnd +VKey=0 +Key=0 + +[Command_380] +CmdId=CM_LEGEND_LN_MINMAX +VKey=0 +Key=0 + +[Command_381] +CmdId=CM_CALIBRATION_RAM_5 +VKey=0 +Key=0 + +[Command_382] +CmdId=CM_COMMON_AXIS_SET_8 +VKey=0 +Key=0 + +[Command_383] +CmdId=CM_CREATE_DIG_WINDOW +VKey=0 +Key=0 + +[Command_384] +CmdId=CM_SYMB_EXPL_REPLACE_MEASUREMENT +VKey=0 +Key=0 + +[Command_385] +CmdId=CM_MEASURELAST6 +VKey=0 +Key=0 + +[Command_386] +CmdId=CM_SHIFT_TO_BOTTOM +VKey=11 +Key=40 + +[Command_387] +CmdId=CM_SYMB_EXPL_SETUPWND_MODULE_SETTINGS +VKey=0 +Key=0 + +[Command_388] +CmdId=CM_SHIFT_RIGHT_HEX +VKey=3 +Key=39 + +[Command_389] +CmdId=CM_SETUPWND_DATABASE_EXPORT +VKey=0 +Key=0 + +[Command_390] +CmdId=CM_DEVEXP_DEL_NETWORK +VKey=0 +Key=0 + +[Command_391] +CmdId=CM_PREVIEW_MODE_DISPLAY_PAGES +VKey=0 +Key=0 + +[Command_392] +CmdId=CM_CALIB_FLASH_9 +VKey=0 +Key=0 + +[Command_393] +CmdId=ACTIVEX@CNPTRACE.TraceCtrl.1#ID_REGTEST_CMD_PAGEDOWN +VKey=0 +Key=0 + +[Command_394] +CmdId=CM_RESET_XOFFSET +VKey=0 +Key=0 + +[Command_395] +CmdId=CM_WORKING_POINT_ON_ALL +VKey=0 +Key=0 + +[Command_396] +CmdId=CM_CALIBRATION_ACTIVE_8 +VKey=0 +Key=0 + +[Command_397] +CmdId=CM_MACRO_USER_DEFINED_FIELD+1 +VKey=0 +Key=0 + +[Command_398] +CmdId=CM_USERMENU11 +VKey=0 +Key=0 + +[Command_399] +CmdId=CM_CALIB_OFFLINE_4 +VKey=0 +Key=0 + +[Command_400] +CmdId=CM_AXIS_TEMPLATE_1 +VKey=3 +Key=0 + +[Command_401] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_END_RECORD +VKey=0 +Key=0 + +[Command_402] +CmdId=ACTIVEX@OBD.OBDCtrl.1#ID_POPUP_CHECK_ALL_PIDS +VKey=0 +Key=0 + +[Command_403] +CmdId=ACTIVEX@VARIANTCODING.VariantCodingCtrl.1#ID_POPUP_SAVE_CONFIGURATION +VKey=0 +Key=0 + +[Command_404] +CmdId=CM_NEW +VKey=3 +Key=119 + +[Command_405] +CmdId=CM_CREATE_AX_WINDOW_23 +VKey=0 +Key=0 + +[Command_406] +CmdId=CM_SYMB_EXPL_UPDATE_MEASUREMENT +VKey=0 +Key=0 + +[Command_407] +CmdId=CM_MACRO_EVAL +VKey=0 +Key=0 + +[Command_408] +CmdId=CM_DM_LAYOUT_MODIFY_PANE_TOP +VKey=0 +Key=0 + +[Command_409] +CmdId=CM_SPREADSHEET_TOGGLE_UNIT +VKey=11 +Key=73 + +[Command_410] +CmdId=CM_SymbolExplorer_ChangeModule +VKey=0 +Key=0 + +[Command_411] +CmdId=CM_VIEW_SIGNAL_COMMENT +VKey=0 +Key=0 + +[Command_412] +CmdId=CM_MDICHILD_7 +VKey=0 +Key=0 + +[Command_413] +CmdId=CM_MEASURE_DIFF +VKey=3 +Key=188 + +[Command_414] +CmdId=CM_DIGITAL_AUTOMATIC +VKey=0 +Key=0 + +[Command_415] +CmdId=CM_OPTIONS_VX +VKey=0 +Key=0 + +[Command_416] +CmdId=CM_MEASUREMENT_STOP_REC_3 +VKey=0 +Key=0 + +[Command_417] +CmdId=CM_CREATE_DISP_EL_ARROW +VKey=0 +Key=0 + +[Command_418] +CmdId=CM_CONVERTER_IMPORT_4 +VKey=0 +Key=0 + +[Command_419] +CmdId=CM_CONFIGSAVEAS +VKey=0 +Key=0 + +[Command_420] +CmdId=CM_CALIBRATION_ONLINE_ALL +VKey=7 +Key=120 + +[Command_421] +CmdId=CM_COMMON_AXIS_CONFIG +VKey=0 +Key=0 + +[Command_422] +CmdId=CM_WIRE_MODEL +VKey=0 +Key=0 + +[Command_423] +CmdId=CM_PARAMETERLAST6 +VKey=0 +Key=0 + +[Command_424] +CmdId=CM_CONVERTER_EXPORT_2 +VKey=0 +Key=0 + +[Command_425] +CmdId=CM_VIEW_FORMAT +VKey=0 +Key=0 + +[Command_426] +CmdId=CM_PDF_FOR_CURRENT_VIEW +VKey=0 +Key=0 + +[Command_427] +CmdId=CM_CONFIGLAST7 +VKey=0 +Key=0 + +[Command_428] +CmdId=CM_MARKER_BOTH10_LEFT +VKey=31 +Key=37 + +[Command_429] +CmdId=CM_DS_DEVICE_6 +VKey=0 +Key=0 + +[Command_430] +CmdId=ACTIVEX@CNPTRACE.TraceCtrl.1#ID_REGTEST_QRY_JOBCNT +VKey=0 +Key=0 + +[Command_431] +CmdId=CM_MOVE_SIGNAL_UP +VKey=19 +Key=38 + +[Command_432] +CmdId=CM_DE_DUPLICATE +VKey=3 +Key=0 + +[Command_433] +CmdId=CM_CALIBRATION_UNDO_8 +VKey=0 +Key=0 + +[Command_434] +CmdId=CM_USERMENU21 +VKey=0 +Key=0 + +[Command_435] +CmdId=CM_MODIFY_RESET2ORIGIN +VKey=0 +Key=0 + +[Command_436] +CmdId=CM_CALIB_RAM_2 +VKey=0 +Key=0 + +[Command_437] +CmdId=ACTIVEX@FAULTMEMORY.FaultMemoryCtrl.1#ID_POPUP_SHOW_DTC_DETAILS +VKey=0 +Key=0 + +[Command_438] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_OPTIONS +VKey=0 +Key=0 + +[Command_439] +CmdId=CM_CALIBRATION_DIRECT_5 +VKey=0 +Key=0 + +[Command_440] +CmdId=CM_ENABLE_3D_BOUNDINGBOX +VKey=0 +Key=0 + +[Command_441] +CmdId=CM_MACRO_LAST_PARAMETER_FILE +VKey=0 +Key=0 + +[Command_442] +CmdId=CM_OPTIONS_HMA +VKey=0 +Key=0 + +[Command_443] +CmdId=CM_SAVE_ALL_PARAMETERS_OF_PAGE +VKey=0 +Key=0 + +[Command_444] +CmdId=CM_CREATE_DIAGNOSTIC_CONSOLE_WINDOW +VKey=0 +Key=0 + +[Command_445] +CmdId=CM_MACRO_YEAR +VKey=0 +Key=0 + +[Command_446] +CmdId=CM_HEXWIN_DB_OBJECT_0 +VKey=0 +Key=0 + +[Command_447] +CmdId=CM_CREATE_AX_WINDOW_4 +VKey=0 +Key=0 + +[Command_448] +CmdId=CM_SYMB_EXPL_REMOVE_MDF_ATTACHMENT +VKey=0 +Key=0 + +[Command_449] +CmdId=CM_YGRID +VKey=0 +Key=0 + +[Command_450] +CmdId=CM_PREV_HEX +VKey=7 +Key=9 + +[Command_451] +CmdId=CM_CHECK_MEALIST_FOR_OPTIMIZATION +VKey=0 +Key=0 + +[Command_452] +CmdId=CM_SHIFT_LEFT +VKey=3 +Key=37 + +[Command_453] +CmdId=CM_CREATE_TRACE_WINDOW +VKey=0 +Key=0 + +[Command_454] +CmdId=CM_SYMB_EXPL_CAL_FILE_CDM_STUDIO +VKey=0 +Key=0 + +[Command_455] +CmdId=CM_PAGE_NORMAL_VIEW +VKey=0 +Key=0 + +[Command_456] +CmdId=CM_MEASUREMENT_STOP_REC_13 +VKey=0 +Key=0 + +[Command_457] +CmdId=CM_ZOOM_VIEW +VKey=11 +Key=187 + +[Command_458] +CmdId=CM_CALIBRATION_ONLINE_8 +VKey=0 +Key=0 + +[Command_459] +CmdId=CM_PLAY_PLAY +VKey=3 +Key=179 + +[Command_460] +CmdId=CM_MEASUREMENT_START_REC_4 +VKey=0 +Key=0 + +[Command_461] +CmdId=CM_EXPORT_WINDOW +VKey=0 +Key=0 + +[Command_462] +CmdId=CM_NEW_2D +VKey=0 +Key=0 + +[Command_463] +CmdId=CM_LEGEND_TOP +VKey=0 +Key=0 + +[Command_464] +CmdId=CM_SUPPORTASSISTANT +VKey=0 +Key=0 + +[Command_465] +CmdId=CM_PROJECTLAST7 +VKey=0 +Key=0 + +[Command_466] +CmdId=CM_DropNumberCalMapWnd +VKey=0 +Key=0 + +[Command_467] +CmdId=CM_PAGE_9 +VKey=19 +Key=57 + +[Command_468] +CmdId=CM_EXTEND_PGUP +VKey=7 +Key=33 + +[Command_469] +CmdId=CM_SnapshotProperties +VKey=0 +Key=0 + +[Command_470] +CmdId=CM_CONVERTER_SETUP_3 +VKey=0 +Key=0 + +[Command_471] +CmdId=CM_FILESIGNALLISTDLG_UPDATEFILE +VKey=0 +Key=0 + +[Command_472] +CmdId=CM_NEW_CAL +VKey=0 +Key=0 + +[Command_473] +CmdId=CM_DE_MOVE_BACK +VKey=3 +Key=0 + +[Command_474] +CmdId=CM_EXCEED_LIMIT_WARNING_STEADY +VKey=0 +Key=0 + +[Command_475] +CmdId=CM_USERMENU31 +VKey=0 +Key=0 + +[Command_476] +CmdId=CM_TXT_FIT_TEXT +VKey=0 +Key=0 + +[Command_477] +CmdId=CM_CALIB_FLASH_0 +VKey=0 +Key=0 + +[Command_478] +CmdId=CM_GRAPH_STATISTIC +VKey=0 +Key=0 + +[Command_479] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_SCRIPT_GENERATOR +VKey=0 +Key=0 + +[Command_480] +CmdId=ACTIVEX@CNPTRACE.TraceCtrl.1#ID_TOGGLE_DISPLAY_MODE +VKey=17 +Key=0 + +[Command_481] +CmdId=CM_MARKER2_UP +VKey=7 +Key=38 + +[Command_482] +CmdId=CM_CALIBRATION_ACTIVE_NONE +VKey=0 +Key=0 + +[Command_483] +CmdId=CM_CALIBRATION_UPDATE_2 +VKey=0 +Key=0 + +[Command_484] +CmdId=CM_MACRO_INI+2 +VKey=0 +Key=0 + +[Command_485] +CmdId=CM_USERMENU2 +VKey=0 +Key=0 + +[Command_486] +CmdId=CM_CALIB_ONLINE_7 +VKey=0 +Key=0 + +[Command_487] +CmdId=CM_DropCnaReplace +VKey=0 +Key=0 + +[Command_488] +CmdId=CM_CHECK_PROJECT_FOR_OPTIMIZATION +VKey=0 +Key=0 + +[Command_489] +CmdId=CM_HORMODE +VKey=0 +Key=0 + +[Command_490] +CmdId=CM_PROJ_CHANGE_ACCEPT_4 +VKey=0 +Key=0 + +[Command_491] +CmdId=CM_CREATE_AX_WINDOW_14 +VKey=0 +Key=0 + +[Command_492] +CmdId=CM_OPEN_PANEL_WINDOW_CONTAINER_2 +VKey=0 +Key=0 + +[Command_493] +CmdId=CM_DockBar_Close +VKey=11 +Key=115 + +[Command_494] +CmdId=CM_YAXIS_RIGHT +VKey=3 +Key=0 + +[Command_495] +CmdId=CM_NEXT +VKey=3 +Key=9 + +[Command_496] +CmdId=CM_MACRO_FILENAME +VKey=0 +Key=0 + +[Command_497] +CmdId=CM_XFIT_DIFF_MARKER +VKey=7 +Key=70 + +[Command_498] +CmdId=CM_CALHISTORY_SNAPSHOT_NR5 +VKey=0 +Key=0 + +[Command_499] +CmdId=CM_DEVEXP_DEVICE_UP +VKey=0 +Key=0 + +[Command_500] +CmdId=CM_SymbolExplorer_Property +VKey=19 +Key=13 + +[Command_501] +CmdId=CM_DATABASE_EXPORT_CONFIG +VKey=0 +Key=0 + +[Command_502] +CmdId=CM_CREATE_ARR_WINDOW +VKey=0 +Key=0 + +[Command_503] +CmdId=CM_SETUPWND_COMMENT +VKey=0 +Key=0 + +[Command_504] +CmdId=CM_VIEW_WORKINGPOINT_HISTORY +VKey=0 +Key=0 + +[Command_505] +CmdId=CM_LEGEND_INVERT_SELECTION +VKey=11 +Key=84 + +[Command_506] +CmdId=CM_CREATE_DIAGNOSTIC_WINDOW +VKey=0 +Key=0 + +[Command_507] +CmdId=CM_MEASUREMENT_START_REC_14 +VKey=0 +Key=0 + +[Command_508] +CmdId=CM_CALIBRATION_RAM_6 +VKey=0 +Key=0 + +[Command_509] +CmdId=CM_COMMON_AXIS_SET_9 +VKey=0 +Key=0 + +[Command_510] +CmdId=CM_GLOBAL_MEA_EDIT_COMMENT +VKey=11 +Key=77 + +[Command_511] +CmdId=CM_FORMAT_ASCII +VKey=0 +Key=0 + +[Command_512] +CmdId=CM_MEASURELAST7 +VKey=0 +Key=0 + +[Command_513] +CmdId=CM_SHIFT_UP_HEX +VKey=3 +Key=38 + +[Command_514] +CmdId=CM_SETUPWND_DATABASE_ACT +VKey=0 +Key=0 + +[Command_515] +CmdId=CM_DEVEXP_APPLY_CHANGES +VKey=0 +Key=0 + +[Command_516] +CmdId=CM_SET_HOME +VKey=3 +Key=75 + +[Command_517] +CmdId=CM_PREVIEW_MODE_REPORT_PAGES +VKey=0 +Key=0 + +[Command_518] +CmdId=CM_FOLLOW_WP +VKey=0 +Key=0 + +[Command_519] +CmdId=CM_HELP_CONTENTS +VKey=11 +Key=112 + +[Command_520] +CmdId=ACTIVEX@CNPTRACE.TraceCtrl.1#ID_REGTEST_CMD_HOME +VKey=0 +Key=0 + +[Command_521] +CmdId=CM_WORKING_POINT_OFF_ALL +VKey=0 +Key=0 + +[Command_522] +CmdId=CM_CALIBRATION_ACTIVE_9 +VKey=0 +Key=0 + +[Command_523] +CmdId=CM_CALIBRATION_UNDO +VKey=0 +Key=0 + +[Command_524] +CmdId=CM_MACRO_USER_DEFINED_FIELD+2 +VKey=0 +Key=0 + +[Command_525] +CmdId=CM_USERMENU12 +VKey=0 +Key=0 + +[Command_526] +CmdId=CM_CALIB_OFFLINE_5 +VKey=0 +Key=0 + +[Command_527] +CmdId=ACTIVEX@MATLAB.MatlabCtrl.50#ID_BACK +VKey=3 +Key=8 + +[Command_528] +CmdId=CM_AXIS_TEMPLATE_2 +VKey=3 +Key=0 + +[Command_529] +CmdId=ACTIVEX@FAULTMEMORY.FaultMemoryCtrl.1#ID_POPUP_CLIPBOARD +VKey=9 +Key=67 + +[Command_530] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_EXECUTE_MACRO +VKey=0 +Key=0 + +[Command_531] +CmdId=ACTIVEX@OBD.OBDCtrl.1#ID_POPUP_CHECK_ALL_SUPPORTED_PIDS +VKey=0 +Key=0 + +[Command_532] +CmdId=ACTIVEX@VARIANTCODING.VariantCodingCtrl.1#ID_POPUP_GO_ONLINE +VKey=0 +Key=0 + +[Command_533] +CmdId=CM_MDF_FILEOPEN +VKey=0 +Key=0 + +[Command_534] +CmdId=CM_CALHISTORY_START +VKey=0 +Key=0 + +[Command_535] +CmdId=CM_CREATE_GENERAL_MEAS_WINDOW +VKey=0 +Key=0 + +[Command_536] +CmdId=CM_MACRO_SCRIPT +VKey=0 +Key=0 + +[Command_537] +CmdId=CM_DM_LAYOUT_MODIFY_PANE_BOTTOM +VKey=0 +Key=0 + +[Command_538] +CmdId=CM_SYMB_EXPL_EDIT_BUSLOG_DB +VKey=0 +Key=0 + +[Command_539] +CmdId=CM_MACRO_PAGE_NAME +VKey=0 +Key=0 + +[Command_540] +CmdId=CM_SymbolExplorer_RenameSignal +VKey=19 +Key=113 + +[Command_541] +CmdId=CM_OPTIONS_PAGE_TIMEAXIS +VKey=27 +Key=83 + +[Command_542] +CmdId=CM_MDICHILD_8 +VKey=0 +Key=0 + +[Command_543] +CmdId=CM_DIGITAL_FIXED +VKey=0 +Key=0 + +[Command_544] +CmdId=CM_SYMB_EXPL_FUNCTION_CODE +VKey=0 +Key=0 + +[Command_545] +CmdId=CM_MOVE_CURVE_DOWN +VKey=15 +Key=40 + +[Command_546] +CmdId=CM_MEASUREMENT_STOP_REC_4 +VKey=0 +Key=0 + +[Command_547] +CmdId=CM_SEARCH_OBJECT +VKey=0 +Key=0 + +[Command_548] +CmdId=CM_CONVERTER_IMPORT_5 +VKey=0 +Key=0 + +[Command_549] +CmdId=CM_CONFIGSAVE +VKey=3 +Key=113 + +[Command_550] +CmdId=CM_CALIBRATION_ONLINE_ALL_OFF +VKey=15 +Key=120 + +[Command_551] +CmdId=CM_3D_COLOR +VKey=0 +Key=0 + +[Command_552] +CmdId=CM_PARAMETERLAST7 +VKey=0 +Key=0 + +[Command_553] +CmdId=ACTIVEX@MATLAB.MatlabCtrl.50#ID_OPEN_NEW_WINDOW +VKey=11 +Key=78 + +[Command_554] +CmdId=CM_CONVERTER_EXPORT_3 +VKey=0 +Key=0 + +[Command_555] +CmdId=CM_GRAPH_COMPONENT_ADD_GRA +VKey=0 +Key=0 + +[Command_556] +CmdId=CM_VIEW_COMMENT +VKey=0 +Key=0 + +[Command_557] +CmdId=CM_CONFIGLAST8 +VKey=0 +Key=0 + +[Command_558] +CmdId=CM_DISPLAY_PAGES +VKey=0 +Key=0 + +[Command_559] +CmdId=CM_MARKER_BOTH1_RIGHT +VKey=15 +Key=39 + +[Command_560] +CmdId=CM_DS_DEVICE_7 +VKey=0 +Key=0 + +[Command_561] +CmdId=CM_CREATE_SIGNAL_COMMENT +VKey=11 +Key=73 + +[Command_562] +CmdId=CM_FILESIGNALLISTDLG_OPENFILE +VKey=3 +Key=45 + +[Command_563] +CmdId=CM_PROJECDIRTOPEN +VKey=0 +Key=0 + +[Command_564] +CmdId=CM_MOVE_SIGNAL_DOWN +VKey=19 +Key=40 + +[Command_565] +CmdId=CM_DE_COMMENT_UNDERLINED +VKey=3 +Key=0 + +[Command_566] +CmdId=CM_PAGE_NEW_DISPLAY_PAGE +VKey=0 +Key=0 + +[Command_567] +CmdId=CM_CALIBRATION_UNDO_9 +VKey=0 +Key=0 + +[Command_568] +CmdId=CM_DropGraphicWnd +VKey=0 +Key=0 + +[Command_569] +CmdId=CM_USERMENU22 +VKey=0 +Key=0 + +[Command_570] +CmdId=CM_CALIB_RAM_3 +VKey=0 +Key=0 + +[Command_571] +CmdId=CM_DELETE_CTRL +VKey=11 +Key=46 + +[Command_572] +CmdId=ACTIVEX@FAULTMEMORY.FaultMemoryCtrl.1#ID_POPUP_HIDE_DTC_DETAILS +VKey=0 +Key=0 + +[Command_573] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_SHOW_PARAM_POSITION +VKey=0 +Key=0 + +[Command_574] +CmdId=CM_EDIT_VIRTUAL_FORMULA +VKey=0 +Key=0 + +[Command_575] +CmdId=CM_CALIBRATION_DIRECT_6 +VKey=0 +Key=0 + +[Command_576] +CmdId=CM_DISABLE_3D_BOUNDINGBOX +VKey=0 +Key=0 + +[Command_577] +CmdId=CM_OPTIONS_CAN +VKey=0 +Key=0 + +[Command_578] +CmdId=CM_SYMB_EXPL_UTC_OFFSET_ADJUSTMENT +VKey=0 +Key=0 + +[Command_579] +CmdId=CM_CREATE_PARFILE_FROM_MDF +VKey=0 +Key=0 + +[Command_580] +CmdId=CM_CALIBRATION_INVALIDATE +VKey=7 +Key=122 + +[Command_581] +CmdId=CM_MACRO_YEAR2 +VKey=0 +Key=0 + +[Command_582] +CmdId=CM_HEXWIN_CALWIN_0 +VKey=0 +Key=0 + +[Command_583] +CmdId=CM_CREATE_AX_WINDOW_5 +VKey=0 +Key=0 + +[Command_584] +CmdId=CM_SYMB_EXPL_ADD_MDF_ATTACHMENT +VKey=0 +Key=0 + +[Command_585] +CmdId=CM_MACRO_SIGNAL_AT_COMMENT_POS +VKey=0 +Key=0 + +[Command_586] +CmdId=kButtonNew +VKey=0 +Key=0 + +[Command_587] +CmdId=CM_SYMB_EXPL_MDF_UPDATE_ALL +VKey=0 +Key=0 + +[Command_588] +CmdId=CM_SHIFT_RIGHT +VKey=3 +Key=39 + +[Command_589] +CmdId=CM_SYMB_EXPL_CAL_FILE_CLOSE +VKey=0 +Key=0 + +[Command_590] +CmdId=CM_MEASUREMENT_STOP_REC_14 +VKey=0 +Key=0 + +[Command_591] +CmdId=CM_TIME_XMIN_EDIT +VKey=0 +Key=0 + +[Command_592] +CmdId=CM_IMPORT_PARAMSET +VKey=0 +Key=0 + +[Command_593] +CmdId=CM_CALIBRATION_ONLINE_9 +VKey=0 +Key=0 + +[Command_594] +CmdId=CM_PLAY_STOP +VKey=3 +Key=178 + +[Command_595] +CmdId=CM_MEASUREMENT_START_REC_5 +VKey=0 +Key=0 + +[Command_596] +CmdId=CM_ACT_DATASET_ACTION +VKey=0 +Key=0 + +[Command_597] +CmdId=CM_DropGPSWnd +VKey=0 +Key=0 + +[Command_598] +CmdId=CM_PAGE_MULTILINE +VKey=0 +Key=0 + +[Command_599] +CmdId=CM_DELETE_2D +VKey=0 +Key=0 + +[Command_600] +CmdId=CM_COMMON_AXIS_SET_0 +VKey=0 +Key=0 + +[Command_601] +CmdId=CM_LEGEND_LEFT +VKey=0 +Key=0 + +[Command_602] +CmdId=CM_PROJECTLAST8 +VKey=0 +Key=0 + +[Command_603] +CmdId=CM_PAGE_10 +VKey=19 +Key=48 + +[Command_604] +CmdId=CM_EXTEND_PGDN +VKey=7 +Key=34 + +[Command_605] +CmdId=CM_CONVERTER_SETUP_4 +VKey=0 +Key=0 + +[Command_606] +CmdId=CM_FILESIGNALLISTDLG_FILEDURABLE +VKey=0 +Key=0 + +[Command_607] +CmdId=CM_DE_ENABLE +VKey=3 +Key=0 + +[Command_608] +CmdId=CM_ONLY_HIGHTLIGHT_VIOLATIONS +VKey=0 +Key=0 + +[Command_609] +CmdId=CM_SYMB_EXPL_AddDataset2 +VKey=0 +Key=0 + +[Command_610] +CmdId=CM_DropNumberMapWnd +VKey=0 +Key=0 + +[Command_611] +CmdId=CM_USERMENU32 +VKey=0 +Key=0 + +[Command_612] +CmdId=CM_OPENPANELEDITORDOTNET +VKey=0 +Key=0 + +[Command_613] +CmdId=CM_CALIB_FLASH_1 +VKey=0 +Key=0 + +[Command_614] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_SEARCH_SERVICES +VKey=9 +Key=70 + +[Command_615] +CmdId=ACTIVEX@CNPTRACE.TraceCtrl.1#ID_TOGGLE_ANALYSIS_FILTER +VKey=17 +Key=0 + +[Command_616] +CmdId=CM_MARKER2_DOWN +VKey=7 +Key=40 + +[Command_617] +CmdId=CM_CALIBRATION_ACTIVE_0 +VKey=0 +Key=0 + +[Command_618] +CmdId=CM_CALIBRATION_UPDATE_3 +VKey=0 +Key=0 + +[Command_619] +CmdId=CM_SYMB_EXPL_OpenDsContainingFolder +VKey=0 +Key=0 + +[Command_620] +CmdId=CM_MACRO_INI+3 +VKey=0 +Key=0 + +[Command_621] +CmdId=CM_USERMENU3 +VKey=0 +Key=0 + +[Command_622] +CmdId=CM_CALIB_ONLINE_8 +VKey=0 +Key=0 + +[Command_623] +CmdId=CM_DATABASE_EXPORT +VKey=0 +Key=0 + +[Command_624] +CmdId=CM_PROJ_CHANGE_ACCEPT_5 +VKey=0 +Key=0 + +[Command_625] +CmdId=CM_CREATE_AX_WINDOW_15 +VKey=0 +Key=0 + +[Command_626] +CmdId=CM_OPEN_PANEL_WINDOW_CONTAINER_3 +VKey=0 +Key=0 + +[Command_627] +CmdId=CM_YAXIS_EDIT_LABEL +VKey=3 +Key=0 + +[Command_628] +CmdId=CM_PREV +VKey=7 +Key=9 + +[Command_629] +CmdId=CM_SYMB_EXPL_ShowDS +VKey=0 +Key=0 + +[Command_630] +CmdId=CM_MACRO_NAME +VKey=0 +Key=0 + +[Command_631] +CmdId=CM_FIT_CALCULATE +VKey=11 +Key=70 + +[Command_632] +CmdId=CM_CALHISTORY_SNAPSHOT_NR6 +VKey=0 +Key=0 + +[Command_633] +CmdId=CM_DEVEXP_DEVICE_DOWN +VKey=0 +Key=0 + +[Command_634] +CmdId=CM_SymbolExplorer_Save +VKey=0 +Key=0 + +[Command_635] +CmdId=CM_CREATE_TXT_WINDOW +VKey=0 +Key=0 + +[Command_636] +CmdId=CM_SETUPWND_COMMENT_VISIBLE +VKey=0 +Key=0 + +[Command_637] +CmdId=CM_HEXWIN_SELECT_VARIABLE +VKey=0 +Key=0 + +[Command_638] +CmdId=CM_Open_UPSCONFIG +VKey=0 +Key=0 + +[Command_639] +CmdId=CM_DUP_COL +VKey=0 +Key=0 + +[Command_640] +CmdId=CM_OPEN_DIAGNOSTIC_VIEW_CONFIG +VKey=0 +Key=0 + +[Command_641] +CmdId=CM_MEASUREMENT_START_REC_15 +VKey=0 +Key=0 + +[Command_642] +CmdId=CM_REVERSE_INDEX_IN_COLUMNS +VKey=0 +Key=0 + +[Command_643] +CmdId=CM_DropFaultMemWnd +VKey=0 +Key=0 + +[Command_644] +CmdId=CM_CALIBRATION_RAM_7 +VKey=0 +Key=0 + +[Command_645] +CmdId=CM_SHOW_SELECTED_SIGNALS +VKey=3 +Key=189 + +[Command_646] +CmdId=CM_MEASURELAST8 +VKey=0 +Key=0 + +[Command_647] +CmdId=CM_CREATE_WRT_WINDOW +VKey=0 +Key=0 + +[Command_648] +CmdId=CM_NEXT_HEX +VKey=3 +Key=9 + +[Command_649] +CmdId=CM_SHIFT_DOWN_HEX +VKey=3 +Key=40 + +[Command_650] +CmdId=CM_DEVEXP_REVERT_CHANGES +VKey=0 +Key=0 + +[Command_651] +CmdId=CM_MDF_FILELOAD +VKey=0 +Key=0 + +[Command_652] +CmdId=CM_PRINT_VIEW +VKey=0 +Key=0 + +[Command_653] +CmdId=CM_LOGGERDEVICESELECTION +VKey=0 +Key=0 + +[Command_654] +CmdId=CM_SIGNAL_YAXIS_RIGHT +VKey=3 +Key=0 + +[Command_655] +CmdId=CM_FLASH_ACTIVE_DATASET +VKey=0 +Key=0 + +[Command_656] +CmdId=CM_DS_DEVICE_EXT +VKey=0 +Key=0 + +[Command_657] +CmdId=CM_RAM_FREEZE +VKey=0 +Key=0 + +[Command_658] +CmdId=CM_MEASUREMENT_LIST +VKey=3 +Key=115 + +[Command_659] +CmdId=ACTIVEX@CNPTRACE.TraceCtrl.1#ID_REGTEST_CMD_END +VKey=0 +Key=0 + +[Command_660] +CmdId=CM_MEASUREMENT_START_RESUME +VKey=19 +Key=120 + +[Command_661] +CmdId=CM_CALIBRATION_ACTIVE_10 +VKey=0 +Key=0 + +[Command_662] +CmdId=CM_CALIBRATION_UNDO_0 +VKey=0 +Key=0 + +[Command_663] +CmdId=CM_MACRO_USER_DEFINED_FIELD+3 +VKey=0 +Key=0 + +[Command_664] +CmdId=CM_USERMENU13 +VKey=0 +Key=0 + +[Command_665] +CmdId=CM_CALIB_OFFLINE_6 +VKey=0 +Key=0 + +[Command_666] +CmdId=CM_AXIS_TEMPLATE_3 +VKey=3 +Key=0 + +[Command_667] +CmdId=ACTIVEX@FAULTMEMORY.FaultMemoryCtrl.1#ID_POPUP_SELECTALL +VKey=9 +Key=65 + +[Command_668] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_SAVE_MACRO +VKey=0 +Key=0 + +[Command_669] +CmdId=ACTIVEX@OBD.OBDCtrl.1#ID_POPUP_SELECTALL +VKey=9 +Key=65 + +[Command_670] +CmdId=ACTIVEX@VARIANTCODING.VariantCodingCtrl.1#ID_POPUP_GO_OFFLINE +VKey=0 +Key=0 + +[Command_671] +CmdId=CM_MDF_UPDATE +VKey=0 +Key=0 + +[Command_672] +CmdId=CM_CALIBRATION_DIRECT +VKey=0 +Key=0 + +[Command_673] +CmdId=CM_CALHISTORY_STOP +VKey=0 +Key=0 + +[Command_674] +CmdId=CM_SIGNAL_USE_AS_X_AXIS +VKey=3 +Key=0 + +[Command_675] +CmdId=CM_SYMB_EXPL_ADDEDIT_BUSLOG_DB +VKey=0 +Key=0 + +[Command_676] +CmdId=CM_MACRO_FILETIME +VKey=0 +Key=0 + +[Command_677] +CmdId=CM_AUTOZOOM +VKey=0 +Key=0 + +[Command_678] +CmdId=CM_MDICHILD_9 +VKey=0 +Key=0 + +[Command_679] +CmdId=CM_GRID +VKey=3 +Key=71 + +[Command_680] +CmdId=CM_EXIT +VKey=19 +Key=88 + +[Command_681] +CmdId=CM_CREATE_GRPCAL_WINDOW +VKey=0 +Key=0 + +[Command_682] +CmdId=CM_MEASUREMENT_STOP_REC_5 +VKey=0 +Key=0 + +[Command_683] +CmdId=CM_HELP_ON_HELP +VKey=0 +Key=0 + +[Command_684] +CmdId=CM_MACRO_USER_DEFINED_FIELD_DEFAULT +VKey=0 +Key=0 + +[Command_685] +CmdId=CM_ENABLE_LEGEND +VKey=3 +Key=32 + +[Command_686] +CmdId=CM_CONVERTER_IMPORT_6 +VKey=0 +Key=0 + +[Command_687] +CmdId=CM_CALIBRATION_ONLINE_0 +VKey=0 +Key=0 + +[Command_688] +CmdId=CM_PARAMETERLAST8 +VKey=0 +Key=0 + +[Command_689] +CmdId=CM_DEVICE_DATASET_ADMIN_OFF +VKey=0 +Key=0 + +[Command_690] +CmdId=CM_HIGHLIGH_IN_SYM_EXPLORER +VKey=11 +Key=75 + +[Command_691] +CmdId=CM_CONVERTER_EXPORT_4 +VKey=0 +Key=0 + +[Command_692] +CmdId=CM_GRAPH_COMPONENT_ADD_DIG +VKey=0 +Key=0 + +[Command_693] +CmdId=CM_VIEW_WORKINGPOINT +VKey=0 +Key=0 + +[Command_694] +CmdId=CM_CONFIGLAST9 +VKey=0 +Key=0 + +[Command_695] +CmdId=CM_PAGE_1 +VKey=19 +Key=49 + +[Command_696] +CmdId=CM_MARKER_BOTH10_RIGHT +VKey=31 +Key=39 + +[Command_697] +CmdId=CM_DS_DEVICE_8 +VKey=0 +Key=0 + +[Command_698] +CmdId=CM_EDIT_SIGNAL_COMMENT +VKey=0 +Key=0 + +[Command_699] +CmdId=CM_FILESIGNALLISTDLG_REPLACEFILE +VKey=19 +Key=82 + +[Command_700] +CmdId=CM_SHIFT_SINGLE_UP +VKey=7 +Key=38 + +[Command_701] +CmdId=CM_DE_COMMENT_TEXTCOLOR +VKey=3 +Key=0 + +[Command_702] +CmdId=CM_CALIBRATION_UNDO_EXT +VKey=0 +Key=0 + +[Command_703] +CmdId=CM_USERMENU23 +VKey=0 +Key=0 + +[Command_704] +CmdId=CM_MODIFY_RESET2ORIGIN_ALL +VKey=11 +Key=122 + +[Command_705] +CmdId=CM_CALIB_RAM_4 +VKey=0 +Key=0 + +[Command_706] +CmdId=CM_DELETE_SHIFT +VKey=7 +Key=46 + +[Command_707] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_GO_ONLINE +VKey=0 +Key=0 + +[Command_708] +CmdId=CM_ADJUST_TO_CONTENT +VKey=0 +Key=0 + +[Command_709] +CmdId=CM_CALIBRATION_DIRECT_7 +VKey=0 +Key=0 + +[Command_710] +CmdId=CM_MACRO_MEASUREMENTSTART +VKey=0 +Key=0 + +[Command_711] +CmdId=CM_CREATE_FAULT_MEMORY_WINDOW +VKey=0 +Key=0 + +[Command_712] +CmdId=CM_CREATE_HEX_WINDOW +VKey=0 +Key=0 + +[Command_713] +CmdId=CM_MACRO_MONTH +VKey=0 +Key=0 + +[Command_714] +CmdId=CM_CREATE_AX_WINDOW_6 +VKey=0 +Key=0 + +[Command_715] +CmdId=CM_SYMB_EXPL_SHOW_DS_REF +VKey=0 +Key=0 + +[Command_716] +CmdId=CM_TOGGLE_LEGEND_VIEW +VKey=11 +Key=76 + +[Command_717] +CmdId=kButtonModify +VKey=0 +Key=0 + +[Command_718] +CmdId=CM_SET_AXIS_INTERPOLATION_MODE +VKey=0 +Key=0 + +[Command_719] +CmdId=CM_SYMB_EXPL_MDF_UPDATE_FILE +VKey=0 +Key=0 + +[Command_720] +CmdId=CM_SHIFT_UP +VKey=3 +Key=38 + +[Command_721] +CmdId=CM_SYMB_EXPL_CAL_FILE_SAVE_AS +VKey=0 +Key=0 + +[Command_722] +CmdId=CM_GRID_TEXT +VKey=3 +Key=71 + +[Command_723] +CmdId=CM_MEASUREMENT_STOP_REC_15 +VKey=0 +Key=0 + +[Command_724] +CmdId=CM_SymbolExplorer_Paste +VKey=0 +Key=0 + +[Command_725] +CmdId=CM_TIME_XMAX_EDIT +VKey=0 +Key=0 + +[Command_726] +CmdId=CM_CALIBRATION_SAVE_CALWND +VKey=0 +Key=0 + +[Command_727] +CmdId=CM_INSERT_MEA_SIGNAL +VKey=3 +Key=45 + +[Command_728] +CmdId=CM_CALIBRATION_ONLINE_10 +VKey=0 +Key=0 + +[Command_729] +CmdId=CM_DropMdfVirtual +VKey=0 +Key=0 + +[Command_730] +CmdId=CM_FIT_ABOVE +VKey=3 +Key=66 + +[Command_731] +CmdId=CM_MEASUREMENT_START_REC_6 +VKey=0 +Key=0 + +[Command_732] +CmdId=CM_ACTIVE_DATASET +VKey=0 +Key=0 + +[Command_733] +CmdId=CM_SAVE_SIGNALS +VKey=0 +Key=0 + +[Command_734] +CmdId=CM_COMMON_AXIS_SET_1 +VKey=0 +Key=0 + +[Command_735] +CmdId=CM_LEGEND_BOTTOM +VKey=0 +Key=0 + +[Command_736] +CmdId=CM_BROWSER_SET_NAVIGATE_HOME_FILE +VKey=19 +Key=79 + +[Command_737] +CmdId=CM_PROJECTLAST9 +VKey=0 +Key=0 + +[Command_738] +CmdId=CM_HEXWIN_COPY +VKey=11 +Key=67 + +[Command_739] +CmdId=CM_CONVERTER_SETUP_5 +VKey=0 +Key=0 + +[Command_740] +CmdId=CM_DE_REMOVE +VKey=3 +Key=0 + +[Command_741] +CmdId=CM_SYMB_EXPL_OFFLINE_MDF_FILE +VKey=0 +Key=0 + +[Command_742] +CmdId=CM_PAGE_RIGHT_TEXT +VKey=19 +Key=39 + +[Command_743] +CmdId=CM_CALIB_FLASH_2 +VKey=0 +Key=0 + +[Command_744] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_ADD_USER_DEF_TELEGRAM +VKey=0 +Key=0 + +[Command_745] +CmdId=CM_TOGGLE_SCALE_FONT +VKey=3 +Key=70 + +[Command_746] +CmdId=CM_CALIBRATION_ACTIVE_1 +VKey=0 +Key=0 + +[Command_747] +CmdId=CM_CALIBRATION_UPDATE_4 +VKey=0 +Key=0 + +[Command_748] +CmdId=CM_SYMB_EXPL_SaveReferenceFile +VKey=0 +Key=0 + +[Command_749] +CmdId=CM_MACRO_INI+4 +VKey=0 +Key=0 + +[Command_750] +CmdId=CM_USERMENU4 +VKey=0 +Key=0 + +[Command_751] +CmdId=CM_CALIB_ONLINE_9 +VKey=0 +Key=0 + +[Command_752] +CmdId=CM_SET_AS_PULSEMASTER +VKey=0 +Key=0 + +[Command_753] +CmdId=CM_HEX_FILE_SAVE +VKey=0 +Key=0 + +[Command_754] +CmdId=CM_SHOW_UNSEL_SIGNALS_GRAY +VKey=7 +Key=189 + +[Command_755] +CmdId=CM_PROJ_CHANGE_ACCEPT_6 +VKey=0 +Key=0 + +[Command_756] +CmdId=CM_CREATE_AX_WINDOW_16 +VKey=0 +Key=0 + +[Command_757] +CmdId=CM_OPEN_PANEL_WINDOW_CONTAINER_4 +VKey=0 +Key=0 + +[Command_758] +CmdId=CM_DropDllBypassing +VKey=0 +Key=0 + +[Command_759] +CmdId=CM_YAXIS_LOCK_SCALE +VKey=3 +Key=0 + +[Command_760] +CmdId=CM_SHOW_DISPLAY_NAME +VKey=0 +Key=0 + +[Command_761] +CmdId=CM_SYMB_EXPL_AddDsFromDs +VKey=0 +Key=0 + +[Command_762] +CmdId=CM_MACRO_DIVISION +VKey=0 +Key=0 + +[Command_763] +CmdId=CM_FIT_ABOVE_CALCULATE +VKey=11 +Key=66 + +[Command_764] +CmdId=CM_CALHISTORY_SNAPSHOT_NR7 +VKey=0 +Key=0 + +[Command_765] +CmdId=CM_SHOW_DISABLED_SIGNALS +VKey=0 +Key=0 + +[Command_766] +CmdId=CM_MDICHILD_FIRST +VKey=0 +Key=0 + +[Command_767] +CmdId=CM_HEXWIN_SELECT_DEVICE +VKey=0 +Key=0 + +[Command_768] +CmdId=CM_DUP_ROW +VKey=0 +Key=0 + +[Command_769] +CmdId=CM_MEASUREMENT_START_REC_16 +VKey=0 +Key=0 + +[Command_770] +CmdId=CM_SYMB_EXPL_ResetDS +VKey=0 +Key=0 + +[Command_771] +CmdId=CM_BAR_AUTOMATIC +VKey=0 +Key=0 + +[Command_772] +CmdId=CM_CALIBRATION_RAM_8 +VKey=0 +Key=0 + +[Command_773] +CmdId=CM_MEASURELAST9 +VKey=0 +Key=0 + +[Command_774] +CmdId=CM_SETUPWND_MODULE_SETTINGS +VKey=0 +Key=0 + +[Command_775] +CmdId=CM_DEVEXP_ACTIVATE_NETWORK +VKey=0 +Key=0 + +[Command_776] +CmdId=CM_MIRROR +VKey=0 +Key=0 + +[Command_777] +CmdId=CM_PRINT_PAGE +VKey=0 +Key=0 + +[Command_778] +CmdId=CM_SHIFT_SINGLE_1_UP +VKey=23 +Key=38 + +[Command_779] +CmdId=CM_DS_DEVICE +VKey=0 +Key=0 + +[Command_780] +CmdId=CM_CHANGE_AREA_BY_LAPLACIAN_SMOOTHING +VKey=0 +Key=0 + +[Command_781] +CmdId=ACTIVEX@MATLAB.MatlabCtrl.50#ID_ADD_SUBSYSTEM_SIGNALS +VKey=3 +Key=107 + +[Command_782] +CmdId=CM_SHOWCHILDTOOLS +VKey=0 +Key=0 + +[Command_783] +CmdId=ACTIVEX@CNPTRACE.TraceCtrl.1#ID_REGTEST_CMD_SELECT_ALL +VKey=0 +Key=0 + +[Command_784] +CmdId=CM_ZOOM_REDO +VKey=7 +Key=8 + +[Command_785] +CmdId=CM_CALIBRATION_ACTIVE_EXT +VKey=0 +Key=0 + +[Command_786] +CmdId=CM_CALIBRATION_UNDO_1 +VKey=0 +Key=0 + +[Command_787] +CmdId=CM_MACRO_USER_DEFINED_FIELD+4 +VKey=0 +Key=0 + +[Command_788] +CmdId=CM_USERMENU14 +VKey=0 +Key=0 + +[Command_789] +CmdId=CM_CALIB_OFFLINE_7 +VKey=0 +Key=0 + +[Command_790] +CmdId=CM_AXIS_TEMPLATE_4 +VKey=3 +Key=0 + +[Command_791] +CmdId=ACTIVEX@FAULTMEMORY.FaultMemoryCtrl.1#ID_POPUP_OPTIONS +VKey=0 +Key=0 + +[Command_792] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_CLIPBOARD +VKey=9 +Key=67 + +[Command_793] +CmdId=ACTIVEX@OBD.OBDCtrl.1#ID_POPUP_CLIPBOARD +VKey=9 +Key=67 + +[Command_794] +CmdId=ACTIVEX@VARIANTCODING.VariantCodingCtrl.1#ID_POPUP_LOAD_SINGLE_STRING_VCS +VKey=0 +Key=0 + +[Command_795] +CmdId=CM_NEW_MDF +VKey=3 +Key=118 + +[Command_796] +CmdId=CM_CALIBRATION_DIRECT_ALL +VKey=0 +Key=0 + +[Command_797] +CmdId=CM_CALHISTORY_SNAPSHOT2 +VKey=0 +Key=0 + +[Command_798] +CmdId=CM_SIGNAL_USE_AS_X_AXIS_IN_GROUP +VKey=3 +Key=0 + +[Command_799] +CmdId=CM_DATABASE_EDIT +VKey=3 +Key=117 + +[Command_800] +CmdId=CM_MODIFY_VALSET2ORIGIN_ALL +VKey=15 +Key=122 + +[Command_801] +CmdId=CM_OPTIONS_GLOBAL_TIMEAXIS +VKey=0 +Key=0 + +[Command_802] +CmdId=CM_WINDOW_DLG +VKey=0 +Key=0 + +[Command_803] +CmdId=CM_MARK +VKey=3 +Key=77 + +[Command_804] +CmdId=CM_NEW_DEVICE_FROM_DATABASE +VKey=0 +Key=0 + +[Command_805] +CmdId=CM_NEWSTYLE_LEGEND_FONT +VKey=3 +Key=66 + +[Command_806] +CmdId=CM_MEASUREMENT_STOP_REC_6 +VKey=0 +Key=0 + +[Command_807] +CmdId=CM_TOGGLE_BOUNDINGBOX_GRADIENT +VKey=0 +Key=0 + +[Command_808] +CmdId=CM_CONVERTER_IMPORT_7 +VKey=0 +Key=0 + +[Command_809] +CmdId=CM_CONFIGNEW +VKey=0 +Key=0 + +[Command_810] +CmdId=CM_CALIBRATION_ONLINE_1 +VKey=0 +Key=0 + +[Command_811] +CmdId=CM_CREATE_DYNAMIC_CAL_WINDOW +VKey=0 +Key=0 + +[Command_812] +CmdId=CM_PARAMETERLAST9 +VKey=0 +Key=0 + +[Command_813] +CmdId=CM_DropTraceWnd +VKey=0 +Key=0 + +[Command_814] +CmdId=CM_CONVERTER_EXPORT_5 +VKey=0 +Key=0 + +[Command_815] +CmdId=CM_GRAPH_COMPONENT_REMOVE +VKey=0 +Key=0 + +[Command_816] +CmdId=CM_CONFIG_PROTECT +VKey=0 +Key=0 + +[Command_817] +CmdId=CM_PRINT_CONFIG +VKey=0 +Key=0 + +[Command_818] +CmdId=CM_CONFIGLAST10 +VKey=0 +Key=0 + +[Command_819] +CmdId=CM_PAGE_2 +VKey=19 +Key=50 + +[Command_820] +CmdId=CM_DS_DEVICE_9 +VKey=0 +Key=0 + +[Command_821] +CmdId=CM_DELETE_SIGNAL_COMMENT +VKey=0 +Key=0 + +[Command_822] +CmdId=CM_FILESIGNALLISTDLG_CLOSEFILE +VKey=0 +Key=0 + +[Command_823] +CmdId=CM_SHIFT_SINGLE_DOWN +VKey=7 +Key=40 + +[Command_824] +CmdId=CM_DE_COMMENT_FONT +VKey=3 +Key=0 + +[Command_825] +CmdId=CM_PROJECTSAVE +VKey=0 +Key=0 + +[Command_826] +CmdId=CM_DropDigitalWnd +VKey=0 +Key=0 + +[Command_827] +CmdId=CM_USERMENU24 +VKey=0 +Key=0 + +[Command_828] +CmdId=CM_CALIB_RAM_5 +VKey=0 +Key=0 + +[Command_829] +CmdId=CM_DELETE_CTRL_SHIFT +VKey=15 +Key=46 + +[Command_830] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_GO_OFFLINE +VKey=0 +Key=0 + +[Command_831] +CmdId=CM_MARKER1_LEFT +VKey=11 +Key=37 + +[Command_832] +CmdId=CM_CALIBRATION_DIRECT_8 +VKey=0 +Key=0 + +[Command_833] +CmdId=CM_ENZOOM +VKey=3 +Key=69 + +[Command_834] +CmdId=CM_CALIB_ONLINE_0 +VKey=0 +Key=0 + +[Command_835] +CmdId=CM_DATAMANAGEMENTFORPSET +VKey=0 +Key=0 + +[Command_836] +CmdId=CM_MEASUREMENT_SHOW_COMMENT +VKey=0 +Key=0 + +[Command_837] +CmdId=CM_SET_CALIB_FILTER +VKey=0 +Key=0 + +[Command_838] +CmdId=CM_PROJ_CHANGE_ACCEPT_ALL +VKey=0 +Key=0 + +[Command_839] +CmdId=CM_MACRO_DAY +VKey=0 +Key=0 + +[Command_840] +CmdId=CM_HEXWIN_FILL +VKey=11 +Key=70 + +[Command_841] +CmdId=CM_CREATE_AX_WINDOW_7 +VKey=0 +Key=0 + +[Command_842] +CmdId=CM_DockBar_Docked +VKey=0 +Key=0 + +[Command_843] +CmdId=CM_TOGGLE_VALUE_MODIFICATION_VIEW +VKey=11 +Key=69 + +[Command_844] +CmdId=CM_VN_STANDALONE_MODE_CONFIGURATION +VKey=0 +Key=0 + +[Command_845] +CmdId=CM_SYMB_EXPL_NO_OFFSET_ADJUSTMENT +VKey=0 +Key=0 + +[Command_846] +CmdId=CM_SHIFT_DOWN +VKey=3 +Key=40 + +[Command_847] +CmdId=CM_SHOW_SIGNAL_COMMENT +VKey=0 +Key=0 + +[Command_848] +CmdId=CM_SYMB_EXPL_CAL_FILE_SAVE +VKey=0 +Key=0 + +[Command_849] +CmdId=CM_MEASUREMENT_STOP_REC_16 +VKey=0 +Key=0 + +[Command_850] +CmdId=CM_MEA_CURSOR_POS_EDIT +VKey=0 +Key=0 + +[Command_851] +CmdId=CM_CALIBRATION_ONLINE_EXT +VKey=0 +Key=0 + +[Command_852] +CmdId=CM_PLAY_START +VKey=7 +Key=177 + +[Command_853] +CmdId=CM_DropMeaFunction +VKey=0 +Key=0 + +[Command_854] +CmdId=CM_OPEN_LOCAL_PROJECT_ON_LOGGER +VKey=0 +Key=0 + +[Command_855] +CmdId=CM_MEASUREMENT_START_REC_7 +VKey=0 +Key=0 + +[Command_856] +CmdId=CM_DownloadDsReferenceIntoFlash +VKey=0 +Key=0 + +[Command_857] +CmdId=CM_CONFIGURE_LEGEND +VKey=3 +Key=76 + +[Command_858] +CmdId=CM_COMMON_AXIS_SET_2 +VKey=0 +Key=0 + +[Command_859] +CmdId=CM_LEGEND_RIGHT +VKey=0 +Key=0 + +[Command_860] +CmdId=CM_BROWSER_SET_NAVIGATE_HOME_URL +VKey=19 +Key=76 + +[Command_861] +CmdId=CM_PROJECTLAST10 +VKey=0 +Key=0 + +[Command_862] +CmdId=CM_PAGE_EDIT +VKey=0 +Key=0 + +[Command_863] +CmdId=CM_HEXWIN_PASTE +VKey=11 +Key=86 + +[Command_864] +CmdId=CM_CHANGE_AREA_BY_INTERPOLATION_WITH_FKT_VALUES +VKey=0 +Key=0 + +[Command_865] +CmdId=CM_CONVERTER_SETUP_6 +VKey=0 +Key=0 + +[Command_866] +CmdId=CM_LOAD_PARAMSET +VKey=0 +Key=0 + +[Command_867] +CmdId=CM_DE_COMMENT_COPY +VKey=11 +Key=67 + +[Command_868] +CmdId=CM_SYMB_EXPL_ONLINE_MDF_FILE +VKey=0 +Key=0 + +[Command_869] +CmdId=CM_MARKER1_LEFT_END +VKey=11 +Key=36 + +[Command_870] +CmdId=CM_CALIB_FLASH_3 +VKey=0 +Key=0 + +[Command_871] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_DELETE_USER_DEF_TELEGRAM +VKey=0 +Key=0 + +[Command_872] +CmdId=CM_CALIBRATION_ACTIVE_2 +VKey=0 +Key=0 + +[Command_873] +CmdId=CM_CALIBRATION_UPDATE_5 +VKey=0 +Key=0 + +[Command_874] +CmdId=CM_MACRO_INI+5 +VKey=0 +Key=0 + +[Command_875] +CmdId=CM_USERMENU5 +VKey=0 +Key=0 + +[Command_876] +CmdId=CM_HEX_FILE_SAVEAS +VKey=0 +Key=0 + +[Command_877] +CmdId=CM_PARAM_EXPL +VKey=0 +Key=0 + +[Command_878] +CmdId=CM_PROJ_CHANGE_ACCEPT_7 +VKey=0 +Key=0 + +[Command_879] +CmdId=CM_CREATE_AX_WINDOW_17 +VKey=0 +Key=0 + +[Command_880] +CmdId=CM_OPEN_PANEL_WINDOW_CONTAINER_5 +VKey=0 +Key=0 + +[Command_881] +CmdId=CM_DropDllMatlab +VKey=0 +Key=0 + +[Command_882] +CmdId=CM_YAXIS_HIDE +VKey=3 +Key=0 + +[Command_883] +CmdId=CM_SETUP_TIME +VKey=3 +Key=84 + +[Command_884] +CmdId=CM_SYMB_EXPL_AddDataset +VKey=0 +Key=0 + +[Command_885] +CmdId=CM_MACRO_PROJECT +VKey=0 +Key=0 + +[Command_886] +CmdId=CM_CHANGE_COLOR +VKey=0 +Key=0 + +[Command_887] +CmdId=CM_CALHISTORY_SNAPSHOT_NR8 +VKey=0 +Key=0 + +[Command_888] +CmdId=CM_SYMB_EXPL_SAVE_CONV_TEMPLATE +VKey=0 +Key=0 + +[Command_889] +CmdId=CM_MACRO_PAGE_COUNT +VKey=0 +Key=0 + +[Command_890] +CmdId=CM_SymbolExplorer_PrintSymbolInTree +VKey=0 +Key=0 + +[Command_891] +CmdId=CM_COPY_SIGNALS +VKey=0 +Key=0 + +[Command_892] +CmdId=CM_MDICHILD_1 +VKey=0 +Key=0 + +[Command_893] +CmdId=CM_OPTIONS +VKey=0 +Key=0 + +[Command_894] +CmdId=CM_SETUPWND_FIT_OR_SCROLL +VKey=0 +Key=0 + +[Command_895] +CmdId=CM_DEL_COL +VKey=0 +Key=0 + +[Command_896] +CmdId=CM_TIME_FIT_CALCULATE +VKey=15 +Key=84 + +[Command_897] +CmdId=CM_LEGEND_ADJPOINT +VKey=3 +Key=0 + +[Command_898] +CmdId=CM_CALIBRATION_RAM_9 +VKey=0 +Key=0 + +[Command_899] +CmdId=CM_MEASURELAST10 +VKey=0 +Key=0 + +[Command_900] +CmdId=CM_INFO_CONTACT +VKey=0 +Key=0 + +[Command_901] +CmdId=CM_WRITE_CLEAR +VKey=0 +Key=0 + +[Command_902] +CmdId=CM_UNDO +VKey=19 +Key=8 + +[Command_903] +CmdId=CM_NEXT_S +VKey=3 +Key=9 + +[Command_904] +CmdId=CM_DEVEXP_LOAD_DEVICE +VKey=0 +Key=0 + +[Command_905] +CmdId=CM_VIEW_DB +VKey=19 +Key=13 + +[Command_906] +CmdId=CM_EXPORT_PAGE +VKey=0 +Key=0 + +[Command_907] +CmdId=CM_CONFIGLAST1 +VKey=0 +Key=0 + +[Command_908] +CmdId=CM_SHIFT_SINGLE_1_DOWN +VKey=23 +Key=40 + +[Command_909] +CmdId=CM_DS_DEVICE_0 +VKey=0 +Key=0 + +[Command_910] +CmdId=ACTIVEX@MATLAB.MatlabCtrl.50#ID_REMOVE_SUBSYSTEM_SIGNALS +VKey=3 +Key=109 + +[Command_911] +CmdId=ACTIVEX@CNPTRACE.TraceCtrl.1#ID_REGTEST_CMD_EXPAND_SEL +VKey=0 +Key=0 + +[Command_912] +CmdId=CM_OPTIONS_GLOBAL_CURSOR +VKey=0 +Key=0 + +[Command_913] +CmdId=CM_CALIBRATION_UNDO_2 +VKey=0 +Key=0 + +[Command_914] +CmdId=CM_MACRO_USER_DEFINED_FIELD+5 +VKey=0 +Key=0 + +[Command_915] +CmdId=CM_USERMENU15 +VKey=0 +Key=0 + +[Command_916] +CmdId=CM_CALIB_OFFLINE_8 +VKey=0 +Key=0 + +[Command_917] +CmdId=CM_AXIS_TEMPLATE_LAST +VKey=3 +Key=0 + +[Command_918] +CmdId=ACTIVEX@FAULTMEMORY.FaultMemoryCtrl.1#ID_POPUP_TESTER_PRESENT_ON +VKey=0 +Key=0 + +[Command_919] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_DELETE_MACRO +VKey=0 +Key=0 + +[Command_920] +CmdId=ACTIVEX@OBD.OBDCtrl.1#ID_POPUP_CLEAR +VKey=0 +Key=0 + +[Command_921] +CmdId=ACTIVEX@VARIANTCODING.VariantCodingCtrl.1#ID_POPUP_SAVE_SINGLE_STRING_VCS +VKey=0 +Key=0 + +[Command_922] +CmdId=CM_PAGE_UP +VKey=3 +Key=33 + +[Command_923] +CmdId=CM_CALIBRATION_DIRECT_NONE +VKey=0 +Key=0 + +[Command_924] +CmdId=CM_CALHISTORY_SHOW +VKey=0 +Key=0 + +[Command_925] +CmdId=CM_CREATE_VARIANT_CODING_WINDOW +VKey=0 +Key=0 + +[Command_926] +CmdId=CM_DATABASE_ACT +VKey=0 +Key=0 + +[Command_927] +CmdId=CM_HEXWIN_2BYTE_ADDRESS +VKey=0 +Key=0 + +[Command_928] +CmdId=CM_DB_TOGGLE_COLUMN_DEFAULT +VKey=0 +Key=0 + +[Command_929] +CmdId=CM_HOME +VKey=3 +Key=72 + +[Command_930] +CmdId=CM_DEVICE_GO_ONLINE +VKey=0 +Key=0 + +[Command_931] +CmdId=CM_PLAY_INSERT_INTO_TOOLBAR +VKey=0 +Key=0 + +[Command_932] +CmdId=CM_SYMB_EXPL_LOAD_MDF_FILE +VKey=0 +Key=0 + +[Command_933] +CmdId=CM_MEASUREMENT_STOP_REC_7 +VKey=0 +Key=0 + +[Command_934] +CmdId=CM_TEMPLATES_ADD +VKey=0 +Key=0 + +[Command_935] +CmdId=CM_CONVERTER_IMPORT_8 +VKey=0 +Key=0 + +[Command_936] +CmdId=CM_CONFIGRESTORE +VKey=0 +Key=0 + +[Command_937] +CmdId=CM_CALIBRATION_ONLINE_2 +VKey=0 +Key=0 + +[Command_938] +CmdId=CM_NEWSTYLE_ACTIVE +VKey=3 +Key=71 + +[Command_939] +CmdId=CM_PARAMETERLAST10 +VKey=0 +Key=0 + +[Command_940] +CmdId=CM_CONVERTER_EXPORT_6 +VKey=0 +Key=0 + +[Command_941] +CmdId=CM_GRAPH_COMPONENT_UP +VKey=0 +Key=0 + +[Command_942] +CmdId=CM_PDF_FOR_CURRENT_CONFIG +VKey=0 +Key=0 + +[Command_943] +CmdId=CM_PROJECTLAST1 +VKey=0 +Key=0 + +[Command_944] +CmdId=CM_PAGE_3 +VKey=19 +Key=51 + +[Command_945] +CmdId=CM_EXTEND_LEFT +VKey=7 +Key=37 + +[Command_946] +CmdId=CM_DS_Properties +VKey=0 +Key=0 + +[Command_947] +CmdId=CM_SAVE_SIGNAL_COMMENTS +VKey=0 +Key=0 + +[Command_948] +CmdId=CM_FILESIGNALLISTDLG_CLOSE +VKey=0 +Key=0 + +[Command_949] +CmdId=CM_TOGGLE_TIMEAXIS +VKey=3 +Key=86 + +[Command_950] +CmdId=CM_DE_COMMENT_LIST +VKey=3 +Key=0 + +[Command_951] +CmdId=CM_USERMENU25 +VKey=0 +Key=0 + +[Command_952] +CmdId=CM_CALIB_RAM_6 +VKey=0 +Key=0 + +[Command_953] +CmdId=CM_FILESIGNALLISTDLG_DELETESIG +VKey=0 +Key=0 + +[Command_954] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_OPEN_CALIBRATIONWINDOW +VKey=0 +Key=0 + +[Command_955] +CmdId=CM_MARKER1_RIGHT +VKey=11 +Key=39 + +[Command_956] +CmdId=CM_DM_ACTIVECELLOBJECTWITHGRID +VKey=0 +Key=0 + +[Command_957] +CmdId=CM_CALIBRATION_DIRECT_9 +VKey=0 +Key=0 + +[Command_958] +CmdId=CM_ZOOM_UNDO +VKey=3 +Key=8 + +[Command_959] +CmdId=CM_MACRO_DATESTR +VKey=0 +Key=0 + +[Command_960] +CmdId=CM_CALIB_ONLINE_1 +VKey=0 +Key=0 + +[Command_961] +CmdId=CM_SET_AS_TIMEMASTER +VKey=0 +Key=0 + +[Command_962] +CmdId=CM_PROJ_CHANGE_MORE +VKey=0 +Key=0 + +[Command_963] +CmdId=CM_MACRO_HOUR +VKey=0 +Key=0 + +[Command_964] +CmdId=CM_CREATE_ARR_MEASURE_WINDOW +VKey=0 +Key=0 + +[Command_965] +CmdId=CM_CREATE_AX_WINDOW_8 +VKey=0 +Key=0 + +[Command_966] +CmdId=CM_TOGGLE_GRAFIC_VIEW +VKey=11 +Key=71 + +[Command_967] +CmdId=CM_NEW_STATISTIC_COLUMN +VKey=0 +Key=0 + +[Command_968] +CmdId=CM_SYMB_EXPL_REPLACE_MDF_FILE +VKey=0 +Key=0 + +[Command_969] +CmdId=CM_CREATE_DOT_NET_WINDOW +VKey=0 +Key=0 + +[Command_970] +CmdId=CM_FORMAT_PHY +VKey=11 +Key=80 + +[Command_971] +CmdId=CM_CALHISTORY_SNAPSHOT_ALL +VKey=0 +Key=0 + +[Command_972] +CmdId=CM_SymbolExplorer_PasteIn +VKey=0 +Key=0 + +[Command_973] +CmdId=CM_DIF_CURSOR_POS_EDIT +VKey=0 +Key=0 + +[Command_974] +CmdId=CM_NEW_ALGEBRAIC_MEA_SIGNAL +VKey=0 +Key=0 + +[Command_975] +CmdId=CM_MEASUREMENT_START_DSP +VKey=0 +Key=0 + +[Command_976] +CmdId=CM_PLAY_FF +VKey=3 +Key=176 + +[Command_977] +CmdId=CM_MEASUREMENT_START_REC_8 +VKey=0 +Key=0 + +[Command_978] +CmdId=CM_SaveWorkingFile +VKey=0 +Key=0 + +[Command_979] +CmdId=CM_CALIBRATION_RAM_0 +VKey=7 +Key=123 + +[Command_980] +CmdId=CM_COMMON_AXIS_SET_3 +VKey=0 +Key=0 + +[Command_981] +CmdId=CM_LEGEND_EXTN +VKey=0 +Key=0 + +[Command_982] +CmdId=CM_BROWSER_NAVIGATE_HOME +VKey=19 +Key=72 + +[Command_983] +CmdId=CM_MEASURELAST1 +VKey=0 +Key=0 + +[Command_984] +CmdId=CM_DropDynamikCalWnd +VKey=0 +Key=0 + +[Command_985] +CmdId=CM_PAGE_DELETE +VKey=0 +Key=0 + +[Command_986] +CmdId=CM_HEXWIN_SAVE_FILE +VKey=7 +Key=83 + +[Command_987] +CmdId=CM_CONVERTER_SETUP_7 +VKey=0 +Key=0 + +[Command_988] +CmdId=CM_SAVE_PARAM_SET +VKey=0 +Key=0 + +[Command_989] +CmdId=CM_DE_COMMENT_PASTE +VKey=11 +Key=86 + +[Command_990] +CmdId=CM_NEW_DEVICE_FROM_TEAMSERVICES +VKey=0 +Key=0 + +[Command_991] +CmdId=CM_MARKER2_LEFT_END +VKey=7 +Key=36 + +[Command_992] +CmdId=CM_CALIB_FLASH_4 +VKey=0 +Key=0 + +[Command_993] +CmdId=CM_CHANGE_AREA_BY_INTERPOLATION_WITHOUT_FKT_VALUES +VKey=0 +Key=0 + +[Command_994] +CmdId=ACTIVEX@MATLAB.MatlabCtrl.50#ID_EXTENDED_TOOLTIP +VKey=3 +Key=84 + +[Command_995] +CmdId=CM_PROJECTNEW +VKey=0 +Key=0 + +[Command_996] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_CONFIG_USER_DEF_TELEGRAM +VKey=0 +Key=0 + +[Command_997] +CmdId=ACTIVEX@CNPTRACE.TraceCtrl.1#ID_TOGGLE_LOGGING +VKey=17 +Key=0 + +[Command_998] +CmdId=CM_SHOW_SEARCH_BAR +VKey=11 +Key=72 + +[Command_999] +CmdId=CM_GOTO_LOCATION +VKey=0 +Key=0 + +[Command_1000] +CmdId=CM_CASCADECHILDREN_NEW +VKey=0 +Key=0 + +[Command_1001] +CmdId=CM_CALIBRATION_ACTIVE_3 +VKey=0 +Key=0 + +[Command_1002] +CmdId=CM_CALIBRATION_UPDATE_6 +VKey=0 +Key=0 + +[Command_1003] +CmdId=CM_MACRO_INI+6 +VKey=0 +Key=0 + +[Command_1004] +CmdId=CM_USERMENU6 +VKey=0 +Key=0 + +[Command_1005] +CmdId=CM_PROJ_CHANGE_ACCEPT_8 +VKey=0 +Key=0 + +[Command_1006] +CmdId=CM_CREATE_AX_WINDOW_18 +VKey=0 +Key=0 + +[Command_1007] +CmdId=CM_OPEN_PANEL_WINDOW_CONTAINER_6 +VKey=0 +Key=0 + +[Command_1008] +CmdId=CM_DropDllVirtualMatlab +VKey=0 +Key=0 + +[Command_1009] +CmdId=CM_YAXIS_GO_TO_DISPLAY +VKey=3 +Key=0 + +[Command_1010] +CmdId=CM_SETUP +VKey=11 +Key=83 + +[Command_1011] +CmdId=CM_SYMB_EXPL_DeleteDataset +VKey=0 +Key=0 + +[Command_1012] +CmdId=CM_MACRO_SUBJECT +VKey=0 +Key=0 + +[Command_1013] +CmdId=CM_FUNCTION_COMPOSER +VKey=0 +Key=0 + +[Command_1014] +CmdId=CM_CALHISTORY_SNAPSHOT_NR9 +VKey=0 +Key=0 + +[Command_1015] +CmdId=CM_SYMB_EXPL_GROUP_DATASETS +VKey=0 +Key=0 + +[Command_1016] +CmdId=CM_MDICHILD_2 +VKey=0 +Key=0 + +[Command_1017] +CmdId=CM_CONFIGURATIONS_MANAGER +VKey=0 +Key=0 + +[Command_1018] +CmdId=CM_SETUPWND_FONT_BLOCK +VKey=0 +Key=0 + +[Command_1019] +CmdId=CM_SET_BESTFIT_MODE_FOR_COLUMNS +VKey=0 +Key=0 + +[Command_1020] +CmdId=CM_DEL_ROW +VKey=0 +Key=0 + +[Command_1021] +CmdId=CM_CALIBRATION_RAM_10 +VKey=0 +Key=0 + +[Command_1022] +CmdId=CM_PARAMETERLAST1 +VKey=0 +Key=0 + +[Command_1023] +CmdId=CM_INITIALIZE_CALIBRATION_RAM +VKey=0 +Key=0 + +[Command_1024] +CmdId=CM_TXT_ABSOLUTE_TIME +VKey=0 +Key=0 + +[Command_1025] +CmdId=CM_REDO +VKey=23 +Key=8 + +[Command_1026] +CmdId=CM_PREV_S +VKey=7 +Key=9 + +[Command_1027] +CmdId=CM_SETUPWND_DATAMANAGEMENT +VKey=0 +Key=0 + +[Command_1028] +CmdId=kButtonIdentify +VKey=0 +Key=0 + +[Command_1029] +CmdId=CM_DE_COMMENT_BOLD +VKey=3 +Key=0 + +[Command_1030] +CmdId=CM_CONFIGLAST2 +VKey=0 +Key=0 + +[Command_1031] +CmdId=CM_DS_DEVICE_1 +VKey=0 +Key=0 + +[Command_1032] +CmdId=CM_CREATE_DOCKEDSIGNALSELWND +VKey=11 +Key=13 + +[Command_1033] +CmdId=ACTIVEX@CNPTRACE.TraceCtrl.1#ID_REGTEST_CMD_DUMP_SEL +VKey=0 +Key=0 + +[Command_1034] +CmdId=CM_OMIT_INDEX_IN_TREE_ALL +VKey=0 +Key=0 + +[Command_1035] +CmdId=CM_SHOWMAINTOOLS +VKey=0 +Key=0 + +[Command_1036] +CmdId=CM_FILTER_SIGNAL +VKey=0 +Key=0 + +[Command_1037] +CmdId=CM_CALIBRATION_UNDO_3 +VKey=0 +Key=0 + +[Command_1038] +CmdId=CM_MACRO_USER_DEFINED_FIELD+6 +VKey=0 +Key=0 + +[Command_1039] +CmdId=CM_USERMENU16 +VKey=0 +Key=0 + +[Command_1040] +CmdId=CM_CALIB_OFFLINE_9 +VKey=0 +Key=0 + +[Command_1041] +CmdId=ACTIVEX@PANELDOTNET.PanelDotNetCtrl.70#ID_EDIT_PANEL +VKey=17 +Key=80 + +[Command_1042] +CmdId=ACTIVEX@MATLAB.MatlabCtrl.50#ID_ZOOMIN +VKey=3 +Key=69 + +[Command_1043] +CmdId=CM_AXIS_TEMPLATE_SELECT +VKey=3 +Key=0 + +[Command_1044] +CmdId=ACTIVEX@FAULTMEMORY.FaultMemoryCtrl.1#ID_POPUP_TESTER_PRESENT_OFF +VKey=0 +Key=0 + +[Command_1045] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_SHOW_PARAM_COMMENT +VKey=0 +Key=0 + +[Command_1046] +CmdId=ACTIVEX@OBD.OBDCtrl.1#ID_POPUP_SHOW_TRACE +VKey=0 +Key=0 + +[Command_1047] +CmdId=CM_PAGE_DOWN +VKey=3 +Key=34 + +[Command_1048] +CmdId=CM_CALIBRATION_DIRECT_0 +VKey=0 +Key=0 + +[Command_1049] +CmdId=CM_CREATE_FUNCTION_WINDOW +VKey=0 +Key=0 + +[Command_1050] +CmdId=CM_PROJECTOPEN +VKey=0 +Key=0 + +[Command_1051] +CmdId=CM_MACRO_DIRECTORY +VKey=0 +Key=0 + +[Command_1052] +CmdId=CM_HEXWIN_SHOW_ASCII +VKey=0 +Key=0 + +[Command_1053] +CmdId=CM_2DUNTEN +VKey=0 +Key=0 + +[Command_1054] +CmdId=CM_CREATE_NEW_PANEL_WINDOW +VKey=0 +Key=0 + +[Command_1055] +CmdId=CM_DEZOOMY +VKey=0 +Key=0 + +[Command_1056] +CmdId=CM_DATAWINDOW_SEARCH +VKey=11 +Key=70 + +[Command_1057] +CmdId=CM_COPYPROJECTDIRPATH +VKey=0 +Key=0 + +[Command_1058] +CmdId=CM_MODULE_ACTIVATE +VKey=0 +Key=0 + +[Command_1059] +CmdId=CM_MEASUREMENT_STOP_REC_8 +VKey=0 +Key=0 + +[Command_1060] +CmdId=CM_ROTATE_VIEW_LEFT +VKey=11 +Key=37 + +[Command_1061] +CmdId=CM_CONVERTER_IMPORT_9 +VKey=0 +Key=0 + +[Command_1062] +CmdId=CM_CONFIGPARTOPEN +VKey=0 +Key=0 + +[Command_1063] +CmdId=CM_CALIBRATION_ONLINE_3 +VKey=0 +Key=0 + +[Command_1064] +CmdId=CM_NEWSTYLE_COLOR +VKey=3 +Key=67 + +[Command_1065] +CmdId=CM_SHOW_PROJECT_MANAGER +VKey=0 +Key=0 + +[Command_1066] +CmdId=CM_MEASUREMENT_START_REC +VKey=0 +Key=0 + +[Command_1067] +CmdId=CM_DropDeviceWnd +VKey=0 +Key=0 + +[Command_1068] +CmdId=CM_CONVERTER_EXPORT_7 +VKey=0 +Key=0 + +[Command_1069] +CmdId=CM_GRAPH_COMPONENT_DOWN +VKey=0 +Key=0 + +[Command_1070] +CmdId=CM_PROJECTLAST2 +VKey=0 +Key=0 + +[Command_1071] +CmdId=CM_PAGE_4 +VKey=19 +Key=52 + +[Command_1072] +CmdId=CM_EXTEND_RIGHT +VKey=7 +Key=39 + +[Command_1073] +CmdId=CM_SYMB_EXPL_DuplicateDataset +VKey=0 +Key=0 + +[Command_1074] +CmdId=CM_FILESIGNALLISTDLG_DBVIEW +VKey=3 +Key=117 + +[Command_1075] +CmdId=CM_HEX_FILE_CLOSE +VKey=0 +Key=0 + +[Command_1076] +CmdId=CM_DE_COMMENT_LEFT +VKey=3 +Key=0 + +[Command_1077] +CmdId=CM_SAVE_SELECTED_PARAMETERS +VKey=0 +Key=0 + +[Command_1078] +CmdId=CM_DropBarWnd +VKey=0 +Key=0 + +[Command_1079] +CmdId=CM_USERMENU26 +VKey=0 +Key=0 + +[Command_1080] +CmdId=CM_CALIB_RAM_7 +VKey=0 +Key=0 + +[Command_1081] +CmdId=CM_FILESIGNALLISTDLG_DELETE +VKey=3 +Key=46 + +[Command_1082] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_SHOW_PARAM_UNIT +VKey=0 +Key=0 + +[Command_1083] +CmdId=CM_MARKER2_LEFT +VKey=7 +Key=37 + +[Command_1084] +CmdId=CM_CALIBRATION_DIRECT_EXT +VKey=0 +Key=0 + +[Command_1085] +CmdId=CM_MACRO_SECOND +VKey=0 +Key=0 + +[Command_1086] +CmdId=CM_TOGGLE_YAXIS +VKey=0 +Key=0 + +[Command_1087] +CmdId=CM_MODIFY_UNDO +VKey=19 +Key=8 + +[Command_1088] +CmdId=CM_CALIB_ONLINE_2 +VKey=0 +Key=0 + +[Command_1089] +CmdId=CM_MEASUREMENT_COMMENT +VKey=19 +Key=67 + +[Command_1090] +CmdId=CM_MACRO_MINUTE +VKey=0 +Key=0 + +[Command_1091] +CmdId=CM_CREATE_AX_WINDOW_9 +VKey=0 +Key=0 + +[Command_1092] +CmdId=CM_DockBar_Floated +VKey=0 +Key=0 + +[Command_1093] +CmdId=CM_TOGGLE_NUMERIC_VIEW +VKey=11 +Key=85 + +[Command_1094] +CmdId=CM_OPTIONS_DISPLAY_TRIGGER_LINES +VKey=0 +Key=0 + +[Command_1095] +CmdId=CM_SYMB_EXPL_SELECT_DEV_4_LOSTDEV +VKey=0 +Key=0 + +[Command_1096] +CmdId=CM_MODE_X +VKey=3 +Key=88 + +[Command_1097] +CmdId=CM_HEXWIN_SHOW_DECIMAL +VKey=0 +Key=0 + +[Command_1098] +CmdId=CM_FILESIGNALLISTDLG_DEFREPLACEFILE +VKey=0 +Key=0 + +[Command_1099] +CmdId=CM_FORMAT_HEX +VKey=11 +Key=72 + +[Command_1100] +CmdId=CM_CALHISTORY_SNAPSHOT_NR0 +VKey=0 +Key=0 + +[Command_1101] +CmdId=CM_MACRO_DISPLAYED_FILEID +VKey=0 +Key=0 + +[Command_1102] +CmdId=CM_GRAPH_FIT +VKey=0 +Key=0 + +[Command_1103] +CmdId=CM_CREATE_GRA_WINDOW +VKey=0 +Key=0 + +[Command_1104] +CmdId=CM_ORDER_TEST_LICENSE +VKey=0 +Key=0 + +[Command_1105] +CmdId=CM_SHOW_MEA_CONFIG_FOR_SIGNAL +VKey=7 +Key=115 + +[Command_1106] +CmdId=CM_PLAY_FR +VKey=3 +Key=177 + +[Command_1107] +CmdId=CM_MEASUREMENT_START_REC_9 +VKey=0 +Key=0 + +[Command_1108] +CmdId=CM_MEA_DATA_FILTER_DISABLE_ALL +VKey=0 +Key=0 + +[Command_1109] +CmdId=CM_LEGEND_LN_COMMENT +VKey=0 +Key=0 + +[Command_1110] +CmdId=CM_CALIBRATION_RAM_1 +VKey=0 +Key=0 + +[Command_1111] +CmdId=CM_COMMON_AXIS_SET_4 +VKey=0 +Key=0 + +[Command_1112] +CmdId=CM_PAGE_LEFT_TEXT +VKey=19 +Key=37 + +[Command_1113] +CmdId=CM_BROWSER_REFRESH +VKey=19 +Key=116 + +[Command_1114] +CmdId=CM_MEASURELAST2 +VKey=0 +Key=0 + +[Command_1115] +CmdId=CM_HEXWIN_LOAD_FILE +VKey=11 +Key=76 + +[Command_1116] +CmdId=CM_CONVERTER_SETUP_8 +VKey=0 +Key=0 + +[Command_1117] +CmdId=CM_FIT_TO_PAGE +VKey=11 +Key=113 + +[Command_1118] +CmdId=CM_DEVEXP_NEW_CAN_NETWORK +VKey=0 +Key=0 + +[Command_1119] +CmdId=CM_CHANGE_COLFUNC +VKey=0 +Key=0 + +[Command_1120] +CmdId=CM_DropHexWnd +VKey=0 +Key=0 + +[Command_1121] +CmdId=CM_MARKER1_RIGHT_END +VKey=11 +Key=35 + +[Command_1122] +CmdId=CM_CALIB_FLASH_5 +VKey=0 +Key=0 + +[Command_1123] +CmdId=CM_PROJECTSAVEAS +VKey=0 +Key=0 + +[Command_1124] +CmdId=ACTIVEX@CNPTRACE.TraceCtrl.1#ID_TOGGLE_CLEAR_START +VKey=4 +Key=0 + +[Command_1125] +CmdId=CM_GRAPH_TYPE +VKey=0 +Key=0 + +[Command_1126] +CmdId=CM_SHIFT_TO_TOP +VKey=11 +Key=38 + +[Command_1127] +CmdId=CM_CALIBRATION_ACTIVE_4 +VKey=0 +Key=0 + +[Command_1128] +CmdId=CM_CALIBRATION_UPDATE_7 +VKey=0 +Key=0 + +[Command_1129] +CmdId=CM_MACRO_INI+7 +VKey=0 +Key=0 + +[Command_1130] +CmdId=CM_USERMENU7 +VKey=0 +Key=0 + +[Command_1131] +CmdId=CM_CALIB_OFFLINE_0 +VKey=0 +Key=0 + +[Command_1132] +CmdId=CM_DATAMINING +VKey=0 +Key=0 + +[Command_1133] +CmdId=CM_HEX_FILE_LOAD +VKey=0 +Key=0 + +[Command_1134] +CmdId=CM_INSERT_DISPLAY +VKey=3 +Key=45 + +[Command_1135] +CmdId=CM_PROJ_CHANGE_ACCEPT_9 +VKey=0 +Key=0 + +[Command_1136] +CmdId=CM_CALHISTORY_SHOW_CURR_BASELINE_DIFF +VKey=0 +Key=0 + +[Command_1137] +CmdId=CM_CREATE_AX_WINDOW_19 +VKey=0 +Key=0 + +[Command_1138] +CmdId=CM_OPEN_PANEL_WINDOW_CONTAINER_7 +VKey=0 +Key=0 + +[Command_1139] +CmdId=CM_RELMODE +VKey=0 +Key=0 + +[Command_1140] +CmdId=CM_SYMB_EXPL_ActivateDataset +VKey=0 +Key=0 + +[Command_1141] +CmdId=CM_MACRO_COMMENT +VKey=0 +Key=0 + +[Command_1142] +CmdId=CM_SYMB_EXPL_DS_COMPRESS +VKey=0 +Key=0 + +[Command_1143] +CmdId=CM_SymbolExplorer_Delete +VKey=0 +Key=0 + +[Command_1144] +CmdId=CM_3D_VIEW +VKey=0 +Key=0 + +[Command_1145] +CmdId=CM_MDICHILD_3 +VKey=0 +Key=0 + +[Command_1146] +CmdId=CM_PRINT_PREVIEW_DESKTOP +VKey=0 +Key=0 + +[Command_1147] +CmdId=CM_SETUPWND_FONT_COMMENT +VKey=0 +Key=0 + +[Command_1148] +CmdId=CM_MOVE_CURVE_UP +VKey=15 +Key=38 + +[Command_1149] +CmdId=CM_UPDATE_DEPENDENT_PARAMETERS +VKey=0 +Key=0 + +[Command_1150] +CmdId=CM_MEASUREMENT_STOP_REC +VKey=0 +Key=0 + +[Command_1151] +CmdId=CM_DropGeneralParameterWnd +VKey=0 +Key=0 + +[Command_1152] +CmdId=CM_CALIBRATION_RAM_EXT +VKey=0 +Key=0 + +[Command_1153] +CmdId=CM_MARKER10_LEFT +VKey=27 +Key=37 + +[Command_1154] +CmdId=CM_PARAMETERLAST2 +VKey=0 +Key=0 + +[Command_1155] +CmdId=CM_PLAY_DECREASE +VKey=11 +Key=109 + +[Command_1156] +CmdId=CM_MEASUREMENT_ONLINE_DSP +VKey=0 +Key=0 + +[Command_1157] +CmdId=CM_PASTE_CLIPBOARD +VKey=11 +Key=86 + +[Command_1158] +CmdId=CM_DEVEXP_NETWORK_SETTINGS +VKey=0 +Key=0 + +[Command_1159] +CmdId=CM_BAR_VER_BOTTOM +VKey=0 +Key=0 + +[Command_1160] +CmdId=CM_DE_COMMENT_ITALIC +VKey=3 +Key=0 + +[Command_1161] +CmdId=CM_CONFIGLAST3 +VKey=0 +Key=0 + +[Command_1162] +CmdId=CM_CALIBRATION_UPDATE_PARAM +VKey=0 +Key=0 + +[Command_1163] +CmdId=CM_NEW_OBD_DEVICE +VKey=0 +Key=0 + +[Command_1164] +CmdId=CM_DS_DEVICE_2 +VKey=0 +Key=0 + +[Command_1165] +CmdId=ACTIVEX@CNPTRACE.TraceCtrl.1#ID_REGTEST_CMD_DUMP_SEL_APPEND +VKey=0 +Key=0 + +[Command_1166] +CmdId=CM_OMIT_INDEX_IN_TREE_NONE +VKey=0 +Key=0 + +[Command_1167] +CmdId=CM_BAR_FIXED +VKey=0 +Key=0 + +[Command_1168] +CmdId=CM_CONFIG_CALIBRATION_QUALITY_DATA +VKey=0 +Key=0 + +[Command_1169] +CmdId=CM_CALIBRATION_UNDO_4 +VKey=0 +Key=0 + +[Command_1170] +CmdId=CM_MACRO_USER_DEFINED_FIELD+7 +VKey=0 +Key=0 + +[Command_1171] +CmdId=CM_USERMENU17 +VKey=0 +Key=0 + +[Command_1172] +CmdId=ACTIVEX@PANELDOTNET.PanelDotNetCtrl.70#ID_ASSIGN_DATA +VKey=17 +Key=81 + +[Command_1173] +CmdId=CM_REMOVE_SELDISP +VKey=0 +Key=0 + +[Command_1174] +CmdId=ACTIVEX@MATLAB.MatlabCtrl.50#ID_ZOOMOUT +VKey=3 +Key=68 + +[Command_1175] +CmdId=CM_AXIS_TEMPLATE_CONFIG +VKey=3 +Key=0 + +[Command_1176] +CmdId=ACTIVEX@FAULTMEMORY.FaultMemoryCtrl.1#ID_POPUP_CYCLIC_UPDATE_ON +VKey=0 +Key=0 + +[Command_1177] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_SHOW_PARAM_IDENTIFIER +VKey=0 +Key=0 + +[Command_1178] +CmdId=ACTIVEX@OBD.OBDCtrl.1#ID_POPUP_CLOSE_TRACE +VKey=0 +Key=0 + +[Command_1179] +CmdId=CM_PAGE_HOME +VKey=3 +Key=36 + +[Command_1180] +CmdId=CM_CALIBRATION_DIRECT_1 +VKey=0 +Key=0 + +[Command_1181] +CmdId=CM_CALHISTORY_SNAPSHOT +VKey=0 +Key=0 + +[Command_1182] +CmdId=CM_CREATE_WEBVIEW_WINDOW +VKey=0 +Key=0 + +[Command_1183] +CmdId=CM_TARA_START +VKey=0 +Key=0 + +[Command_1184] +CmdId=CM_2DRECHTS +VKey=0 +Key=0 + +[Command_1185] +CmdId=CM_IMPORT_PANEL_WINDOW_CONTAINER +VKey=0 +Key=0 + +[Command_1186] +CmdId=CM_ENZOOMY +VKey=0 +Key=0 + +[Command_1187] +CmdId=CM_AUTOTEST +VKey=19 +Key=123 + +[Command_1188] +CmdId=CM_SYMB_EXPL_SELECT_VAR_4_LOSTVAR +VKey=0 +Key=0 + +[Command_1189] +CmdId=CM_CONFIGURATIONS_MANAGER_CONTEXTMENU +VKey=0 +Key=0 + +[Command_1190] +CmdId=CM_MEASUREMENT_STOP_REC_9 +VKey=0 +Key=0 + +[Command_1191] +CmdId=CM_ROTATE_VIEW_RIGHT +VKey=11 +Key=39 + +[Command_1192] +CmdId=CM_OPTIONS_DISPLAY_MARKER_LINES +VKey=0 +Key=0 + +[Command_1193] +CmdId=CM_CONVERTER_IMPORT_10 +VKey=0 +Key=0 + +[Command_1194] +CmdId=CM_COPY_CLIPBOARD +VKey=11 +Key=67 + +[Command_1195] +CmdId=CM_CALIBRATION_ONLINE_4 +VKey=0 +Key=0 + +[Command_1196] +CmdId=CM_MEASUREMENT_OFFLINE_DSP +VKey=0 +Key=0 + +[Command_1197] +CmdId=CM_MEASUREMENT_START_REC_ALL +VKey=0 +Key=0 + +[Command_1198] +CmdId=CM_CONVERTER_EXPORT_8 +VKey=0 +Key=0 + +[Command_1199] +CmdId=CM_LEGEND_NOT +VKey=0 +Key=0 + +[Command_1200] +CmdId=CM_PROJECTLAST3 +VKey=0 +Key=0 + +[Command_1201] +CmdId=CM_DropCalWnd +VKey=0 +Key=0 + +[Command_1202] +CmdId=CM_PAGE_5 +VKey=19 +Key=53 + +[Command_1203] +CmdId=CM_EXTEND_UP +VKey=7 +Key=38 + +[Command_1204] +CmdId=CM_LoadSnapshotInCANape +VKey=0 +Key=0 + +[Command_1205] +CmdId=CM_FILESIGNALLISTDLG_COMMENT +VKey=19 +Key=67 + +[Command_1206] +CmdId=CM_SHIFT_LEFT_TEXT +VKey=3 +Key=37 + +[Command_1207] +CmdId=CM_DE_COMMENT_RIGHT +VKey=3 +Key=0 + +[Command_1208] +CmdId=CM_USERMENU27 +VKey=0 +Key=0 + +[Command_1209] +CmdId=CM_OPEN_VMDM_CONSOLE +VKey=0 +Key=0 + +[Command_1210] +CmdId=CM_CALIB_RAM_8 +VKey=0 +Key=0 + +[Command_1211] +CmdId=CM_CREATE_GLOBAL_COMMENT +VKey=11 +Key=71 + +[Command_1212] +CmdId=ACTIVEX@DIAGNOSE.DiagnoseCtrl.1#ID_POPUP_OPEN_TESTER_PRESENT_ON +VKey=0 +Key=0 + +[Command_1213] +CmdId=ACTIVEX@CNPTRACE.TraceCtrl.1#ID_CLEAR_CONTENT +VKey=17 +Key=0 + +[Command_1214] +CmdId=CM_MARKER2_RIGHT +VKey=7 +Key=39 + +[Command_1215] +CmdId=CM_CONFIG_COLUMNS +VKey=0 +Key=0 + +[Command_1216] +CmdId=CM_FIT +VKey=3 +Key=70 + +[Command_1217] +CmdId=CM_MACRO_PROJECTNAME +VKey=0 +Key=0 + +[Command_1218] +CmdId=CM_MULTI_YAXIS +VKey=0 +Key=0 + +[Command_1219] +CmdId=CM_MODIFY_REDO +VKey=23 +Key=8 + +[Command_1220] +CmdId=CM_CALIB_ONLINE_3 +VKey=0 +Key=0 + +[Command_1221] +CmdId=CM_DropCnaLoad +VKey=0 +Key=0 + +[Command_1222] +CmdId=CM_CHANGE_DIM +VKey=0 +Key=0 + +[Command_1223] +CmdId=CM_EDIT_COLUMNS +VKey=0 +Key=0 + +[Command_1224] +CmdId=CM_MEASUREMENT_PAUSE +VKey=3 +Key=121 + +[Command_1225] +CmdId=CM_PROJ_CHANGE_ACCEPT_0 +VKey=0 +Key=0 + +[Command_1226] +CmdId=CM_CREATE_AX_WINDOW_10 +VKey=0 +Key=0 + +[Command_1227] +CmdId=CM_CREATE_ADAS_GPS_WINDOW +VKey=0 +Key=0 + +[Command_1228] +CmdId=CM_OPTIONS_DISPLAY_HIT_LINES +VKey=0 +Key=0 + +[Command_1229] +CmdId=CM_FILESIGNALLISTDLG_SAVE_RESTORED +VKey=0 +Key=0 + +[Command_1230] +CmdId=CM_MODE_Y +VKey=3 +Key=89 + +[Command_1231] +CmdId=CM_WRITE_ABSOLUTE_TIME +VKey=0 +Key=0 + +[Command_1232] +CmdId=CM_DEVEXP_NEW_KLINE_NETWORK +VKey=0 +Key=0 + +[Command_1233] +CmdId=CM_FORMAT_DEC +VKey=11 +Key=68 + +[Command_1234] +CmdId=CM_CALHISTORY_SNAPSHOT_NR1 +VKey=0 +Key=0 + +[Command_1235] +CmdId=CM_NEW_VIRT_CASL_BASED_CHANNEL +VKey=0 +Key=0 + +[Command_1236] +CmdId=CM_MACRO_DISPLAYED_FILENAME +VKey=0 +Key=0 + +[Command_1237] +CmdId=CM_SymbolExplorer_PasteInNewWnd +VKey=0 +Key=0 + +[Command_1238] +CmdId=CM_DELETE +VKey=3 +Key=46 + +[Command_1239] +CmdId=CM_CREATE_BAR_WINDOW +VKey=0 +Key=0 + +[Command_1240] +CmdId=CM_NEW_FUNCTION_MEA_SIGNAL +VKey=0 +Key=0 + +[Command_1241] +CmdId=CM_PLAY_REPEAT +VKey=7 +Key=179 + +[Command_1242] +CmdId=CM_DEVEXP_NEW_ETH_NETWORK +VKey=0 +Key=0 + +[Command_1243] +CmdId=CM_ALIGNMENT_LEFT +VKey=0 +Key=0 + +[Command_1244] +CmdId=CM_MEASUREMENT_START_REC_10 +VKey=0 +Key=0 + +[Command_1245] +CmdId=CM_NEW_DEVICE_WITH_NETWORK +VKey=0 +Key=0 + +[Command_1246] +CmdId=CM_LEGEND_LN_ORIGIN +VKey=0 +Key=0 + +[Command_1247] +CmdId=CM_CALIBRATION_RAM_2 +VKey=0 +Key=0 + +[Command_1248] +CmdId=CM_COMMON_AXIS_SET_5 +VKey=0 +Key=0 + +[Command_1249] +CmdId=CM_LEGEND_FOCUS_PREV +VKey=0 +Key=0 + +[Command_1250] +CmdId=CM_BROWSER_GO_BACK +VKey=19 +Key=37 + +[Command_1251] +CmdId=CM_MEASURELAST3 +VKey=0 +Key=0 + +[Command_1252] +CmdId=CM_DropDefaultWnd +VKey=0 +Key=0 + +[Command_1253] +CmdId=CM_SORT_BY_NAME +VKey=0 +Key=0 + +[Command_1254] +CmdId=CM_HEXWIN_COMPARE_FILE +VKey=0 +Key=0 + +[Command_1255] +CmdId=CM_CONVERTER_SETUP_9 +VKey=0 +Key=0 + +[Command_1256] +CmdId=CM_DEVEXP_NEW_LIN_NETWORK +VKey=0 +Key=0 + +[Command_1257] +CmdId=CM_INSERT_SIGNAL +VKey=3 +Key=119 + +[Command_1258] +CmdId=CM_PRINT_WINDOW +VKey=0 +Key=0 + +[Command_1259] +CmdId=CM_PROJECT_IMPORT +VKey=0 +Key=0 + +[Command_1260] +CmdId=CM_MDI_WINDOW +VKey=0 +Key=0 + +[Command_1261] +CmdId=CM_MARKER2_RIGHT_END +VKey=7 +Key=35 + +[Command_1262] +CmdId=CM_CALIB_FLASH_6 +VKey=0 +Key=0 + +[Command_1263] +CmdId=ACTIVEX@MATLAB.MatlabCtrl.50#ID_DISPLAY_VALUES +VKey=3 +Key=86 + +[Command_1264] +CmdId=CM_CONFIGOPEN +VKey=3 +Key=114 + +[Command_1265] +CmdId=ACTIVEX@CNPTRACE.TraceCtrl.1#ID_TOOGLE_ONLY_MEASUREMENT +VKey=4 +Key=0 + +[Command_1266] +CmdId=CM_EXCEED_LIMIT_WARNING +VKey=0 +Key=0 + +[Command_1267] +CmdId=CM_OPTIONS_TASK_MANAGER +VKey=0 +Key=0 + +[Command_1268] +CmdId=CM_CALIBRATION_ACTIVE_5 +VKey=0 +Key=0 + +[Command_1269] +CmdId=CM_CALIBRATION_UPDATE_8 +VKey=0 +Key=0 + +[Command_1270] +CmdId=CM_MACRO_INI+8 +VKey=0 +Key=0 + +[Command_1271] +CmdId=CM_USERMENU8 +VKey=0 +Key=0 + +[Command_1272] +CmdId=CM_CALIB_OFFLINE_1 +VKey=0 +Key=0 + diff --git a/examples/no_a2l_demo/CANape/XCP_104.aml b/examples/no_a2l_demo/CANape/XCP_104.aml new file mode 100644 index 00000000..1aa8cf84 --- /dev/null +++ b/examples/no_a2l_demo/CANape/XCP_104.aml @@ -0,0 +1,1329 @@ +/begin A2ML + +/***********************************************************/ +/* */ +/* ASAP2 meta language for XCP protocol layer V1.4 */ +/* */ +/* File version description */ +/* --------------------------------------------------- */ +/* 1.4.0 initial version */ +/* 1.4.1 taggedstruct member */ +/* OPTIMISATION_TYPE_ODT_STRICT was added */ +/* */ +/* Datatypes: */ +/* */ +/* A2ML description */ +/* --------------------------------------------------- */ +/* uchar unsigned 8 Bit */ +/* char signed 8 Bit */ +/* uint unsigned integer 16 Bit */ +/* int signed integer 16 Bit */ +/* ulong unsigned integer 32 Bit */ +/* long signed integer 32 Bit */ +/* int64 signed integer 64 Bit */ +/* uint64 unsigned integer 64 Bit */ +/* float float point 32 Bit IEEE 754 */ +/* double float point 64 Bit IEEE 754 */ +/* */ +/***********************************************************/ + +/*************** start of PROTOCOL_LAYER *******************/ + +struct Protocol_Layer { /* At MODULE */ + + uint; /* XCP protocol layer version */ + /* "1.4" = 0x0104 */ + + uint; /* T1 [ms] */ + uint; /* T2 [ms] */ + uint; /* T3 [ms] */ + uint; /* T4 [ms] */ + uint; /* T5 [ms] */ + uint; /* T6 [ms] */ + uint; /* T7 [ms] */ + + uchar; /* MAX_CTO */ + uint; /* MAX_DTO default for DAQ and STIM */ + + enum { /* BYTE_ORDER */ + "BYTE_ORDER_MSB_LAST" = 0, + "BYTE_ORDER_MSB_FIRST" = 1 + }; + + enum { /* ADDRESS_GRANULARITY */ + "ADDRESS_GRANULARITY_BYTE" = 1, + "ADDRESS_GRANULARITY_WORD" = 2, + "ADDRESS_GRANULARITY_DWORD" = 4 + }; + + taggedstruct { /* optional */ + + ("OPTIONAL_CMD" enum { /* XCP-Code of optional level 0 commands */ + /* supported by the slave */ + "GET_COMM_MODE_INFO" = 0xFB, + "GET_ID" = 0xFA, + "SET_REQUEST" = 0xF9, + "GET_SEED" = 0xF8, + "UNLOCK" = 0xF7, + "SET_MTA" = 0xF6, + "UPLOAD" = 0xF5, + "SHORT_UPLOAD" = 0xF4, + "BUILD_CHECKSUM" = 0xF3, + "TRANSPORT_LAYER_CMD" = 0xF2, + "USER_CMD" = 0xF1, + "DOWNLOAD" = 0xF0, + "DOWNLOAD_NEXT" = 0xEF, + "DOWNLOAD_MAX" = 0xEE, + "SHORT_DOWNLOAD" = 0xED, + "MODIFY_BITS" = 0xEC, + "SET_CAL_PAGE" = 0xEB, + "GET_CAL_PAGE" = 0xEA, + "GET_PAG_PROCESSOR_INFO" = 0xE9, + "GET_SEGMENT_INFO" = 0xE8, + "GET_PAGE_INFO" = 0xE7, + "SET_SEGMENT_MODE" = 0xE6, + "GET_SEGMENT_MODE" = 0xE5, + "COPY_CAL_PAGE" = 0xE4, + "CLEAR_DAQ_LIST" = 0xE3, + "SET_DAQ_PTR" = 0xE2, + "WRITE_DAQ" = 0xE1, + "SET_DAQ_LIST_MODE" = 0xE0, + "GET_DAQ_LIST_MODE" = 0xDF, + "START_STOP_DAQ_LIST" = 0xDE, + "START_STOP_SYNCH" = 0xDD, + "GET_DAQ_CLOCK" = 0xDC, + "READ_DAQ" = 0xDB, + "GET_DAQ_PROCESSOR_INFO" = 0xDA, + "GET_DAQ_RESOLUTION_INFO" = 0xD9, + "GET_DAQ_LIST_INFO" = 0xD8, + "GET_DAQ_EVENT_INFO" = 0xD7, + "FREE_DAQ" = 0xD6, + "ALLOC_DAQ" = 0xD5, + "ALLOC_ODT" = 0xD4, + "ALLOC_ODT_ENTRY" = 0xD3, + "PROGRAM_START" = 0xD2, + "PROGRAM_CLEAR" = 0xD1, + "PROGRAM" = 0xD0, + "PROGRAM_RESET" = 0xCF, + "GET_PGM_PROCESSOR_INFO" = 0xCE, + "GET_SECTOR_INFO" = 0xCD, + "PROGRAM_PREPARE" = 0xCC, + "PROGRAM_FORMAT" = 0xCB, + "PROGRAM_NEXT" = 0xCA, + "PROGRAM_MAX" = 0xC9, + "PROGRAM_VERIFY" = 0xC8, + "WRITE_DAQ_MULTIPLE" = 0xC7, + "TIME_CORRELATION_PROPERTIES" = 0xC6, + "DTO_CTR_PROPERTIES" = 0xC5 + /* do not use 0xC0 command code here, it is reserved as command extension code */ + })*; + + ("OPTIONAL_LEVEL1_CMD" enum { /* XCP-Code of optional level 1 commands, starting with level 0 0xC0 as first byte */ + "GET_VERSION" = 0x00, + "SET_DAQ_PACKED_MODE" = 0x01, + "GET_DAQ_PACKED_MODE" = 0x02, + "SW_DBG_COMMAND_SPACE" = 0xFC, + "POD_COMMAND_SPACE" = 0xFD + /* 0xFE shall not be used */ + /* 0xFF reserved for optional level 2 command space extension */ + })*; + + "COMMUNICATION_MODE_SUPPORTED" taggedunion { /* optional modes supported */ + "BLOCK" taggedstruct { + "SLAVE"; /* Slave Block Mode supported */ + "MASTER" struct { /* Master Block Mode supported */ + uchar; /* MAX_BS */ + uchar; /* MIN_ST */ + }; + }; + "INTERLEAVED" uchar; /* QUEUE_SIZE */ + }; + + "SEED_AND_KEY_EXTERNAL_FUNCTION" char[256]; /* Name of the Seed&Key function */ + /* including file extension */ + /* without path */ + "MAX_DTO_STIM" uint; /* overrules MAX_DTO see above for STIM use case */ + + block "ECU_STATES" taggedstruct{ + + (block "STATE" struct{ + uchar; /* STATE_NUMBER */ + char[100]; /* STATE_NAME */ + taggedstruct { + "ECU_SWITCHED_TO_DEFAULT_PAGE"; + }; + enum { /* CAL/PAG RESOURCE */ + "NOT_ACTIVE" = 0, + "ACTIVE" = 1, + "GETTER_ONLY" = 2 /* Setter methods not allowed */ + }; + enum { /* DAQ RESOURCE */ + "NOT_ACTIVE" = 0, + "ACTIVE" = 1 + }; + enum { /* STIM RESOURCE */ + "NOT_ACTIVE" = 0, + "ACTIVE" = 1 + }; + enum { /* PGM RESOURCE */ + "NOT_ACTIVE" = 0, + "ACTIVE" = 1 + }; + + taggedstruct { + + (block "MEMORY_ACCESS" struct{ /* CAL/PAG AVAILABLE */ + uchar; /* SEGMENT_NUMBER */ + uchar; /* PAGE_NUMBER */ + enum { + "READ_ACCESS_NOT_ALLOWED" = 0, + "READ_ACCESS_ALLOWED" = 1 + }; + enum { + "WRITE_ACCESS_NOT_ALLOWED" = 0, + "WRITE_ACCESS_ALLOWED" = 1 + }; + })*; + + }; + + })*; + + }; + + }; + +}; + +/***************** end of PROTOCOL_LAYER *******************/ + + + +/********************* start of DAQ ************************/ + +struct Daq { /* DAQ supported, at MODULE */ + enum { /* DAQ_CONFIG_TYPE */ + "STATIC" = 0, + "DYNAMIC" = 1 + }; + + uint; /* MAX_DAQ */ + uint; /* MAX_EVENT_CHANNEL */ + uchar; /* MIN_DAQ */ + + enum { /* OPTIMISATION_TYPE */ + "OPTIMISATION_TYPE_DEFAULT" = 0, + "OPTIMISATION_TYPE_ODT_TYPE_16" = 1, + "OPTIMISATION_TYPE_ODT_TYPE_32" = 2, + "OPTIMISATION_TYPE_ODT_TYPE_64" = 3, + "OPTIMISATION_TYPE_ODT_TYPE_ALIGNMENT" = 4, + "OPTIMISATION_TYPE_MAX_ENTRY_SIZE" = 5 + }; + + enum { /* ADDRESS_EXTENSION */ + "ADDRESS_EXTENSION_FREE" = 0, + "ADDRESS_EXTENSION_ODT" = 1, + "ADDRESS_EXTENSION_DAQ" = 3 + }; + + enum { /* IDENTIFICATION_FIELD */ + "IDENTIFICATION_FIELD_TYPE_ABSOLUTE" = 0, + "IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE" = 1, + "IDENTIFICATION_FIELD_TYPE_RELATIVE_WORD" = 2, + "IDENTIFICATION_FIELD_TYPE_RELATIVE_WORD_ALIGNED" = 3 + }; + + enum { /* GRANULARITY_ODT_ENTRY_SIZE_DAQ */ + "GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE" = 1, + "GRANULARITY_ODT_ENTRY_SIZE_DAQ_WORD" = 2, + "GRANULARITY_ODT_ENTRY_SIZE_DAQ_DWORD" = 4, + "GRANULARITY_ODT_ENTRY_SIZE_DAQ_DLONG" = 8 + }; + + uchar; /* MAX_ODT_ENTRY_SIZE_DAQ */ + + enum { /* OVERLOAD_INDICATION */ + "NO_OVERLOAD_INDICATION" = 0, + "OVERLOAD_INDICATION_PID" = 1, + "OVERLOAD_INDICATION_EVENT" = 2 + }; + + taggedstruct { /* optional */ + "DAQ_ALTERNATING_SUPPORTED" uint; /* Display_Event_Channel_Number */ + "PRESCALER_SUPPORTED"; + "RESUME_SUPPORTED"; + "STORE_DAQ_SUPPORTED"; + "DTO_CTR_FIELD_SUPPORTED"; + "OPTIMISATION_TYPE_ODT_STRICT"; /* strict mode shall only be used in combination with */ + /* OPTIMISATION_TYPE_ODT_TYPE_16 */ + /* OPTIMISATION_TYPE_ODT_TYPE_32 */ + /* OPTIMISATION_TYPE_ODT_TYPE_64 */ + + block "STIM" struct { /* STIM supported */ + + enum { /* GRANULARITY_ODT_ENTRY_SIZE_STIM */ + "GRANULARITY_ODT_ENTRY_SIZE_STIM_BYTE" = 1, + "GRANULARITY_ODT_ENTRY_SIZE_STIM_WORD" = 2, + "GRANULARITY_ODT_ENTRY_SIZE_STIM_DWORD" = 4, + "GRANULARITY_ODT_ENTRY_SIZE_STIM_DLONG" = 8 + }; + + uchar; /* MAX_ODT_ENTRY_SIZE_STIM */ + + taggedstruct { /* bitwise stimulation */ + "BIT_STIM_SUPPORTED"; + "MIN_ST_STIM" uchar; /* separation time between DTOs */ + /* time in units of 100 microseconds */ + }; + }; + + block "TIMESTAMP_SUPPORTED" struct { + uint; /* TIMESTAMP_TICKS */ + enum { /* TIMESTAMP_SIZE */ + "NO_TIME_STAMP" = 0, + "SIZE_BYTE" = 1, + "SIZE_WORD" = 2, + "SIZE_DWORD" = 4 + }; + enum { /* RESOLUTION OF TIMESTAMP */ + "UNIT_1NS" = 0, + "UNIT_10NS" = 1, + "UNIT_100NS" = 2, + "UNIT_1US" = 3, + "UNIT_10US" = 4, + "UNIT_100US" = 5, + "UNIT_1MS" = 6, + "UNIT_10MS" = 7, + "UNIT_100MS" = 8, + "UNIT_1S" = 9, + "UNIT_1PS" = 10, + "UNIT_10PS" = 11, + "UNIT_100PS" = 12 + }; + taggedstruct { + "TIMESTAMP_FIXED"; + }; + }; + + "PID_OFF_SUPPORTED"; + + /* Configuration Limits */ + "MAX_DAQ_TOTAL" uint; + "MAX_ODT_TOTAL" uint; + "MAX_ODT_DAQ_TOTAL" uint; + "MAX_ODT_STIM_TOTAL" uint; + "MAX_ODT_ENTRIES_TOTAL" uint; + "MAX_ODT_ENTRIES_DAQ_TOTAL" uint; + "MAX_ODT_ENTRIES_STIM_TOTAL" uint; + + "CPU_LOAD_MAX_TOTAL" float; + "CORE_LOAD_MAX_TOTAL" float; /* max load of all cores */ + + (block "CORE_LOAD_MAX" struct { + uint; /* CORE_NR: core reference number */ + float; /* CORE_LOAD_MAX: max load of core(CORE_NR) */ + })*; + + block "DAQ_MEMORY_CONSUMPTION" struct { + ulong; /* DAQ_MEMORY_LIMIT: in Elements[AG] */ + uint; /* DAQ_SIZE: number of elements[AG] per DAQ list */ + uint; /* ODT_SIZE: number of elements[AG] per ODT */ + uint; /* ODT_ENTRY_SIZE: number of elements[AG] per ODT_entry */ + uint; /* ODT_DAQ_BUFFER_ELEMENT_SIZE: number of */ + /* payload elements[AG]*factor = sizeof(send buffer)[AG] */ + uint; /* ODT_STIM_BUFFER_ELEMENT_SIZE: number of */ + /* payload elements[AG]*factor = sizeof(receive buffer)[AG] */ + taggedstruct { + block "BUFFER_RESERVE" struct { /* default for all EVENTs */ + uchar; /* ODT_DAQ_BUFFER_ELEMENT_RESERVE in % of */ + /* ODT_DAQ_BUFFER_ELEMENT_SIZE */ + uchar; /* ODT_STIM_BUFFER_ELEMENT_RESERVE in % of */ + /* ODT_STIM_BUFFER_ELEMENT_SIZE */ + }; + }; + }; + +/******************* start of DAQ_LIST *********************/ + + (block "DAQ_LIST" struct { /* DAQ_LIST */ + /* multiple possible */ + uint; /* DAQ_LIST_NUMBER */ + taggedstruct { /* optional */ + "DAQ_LIST_TYPE" enum { + "DAQ" = 1, /* DIRECTION = DAQ only */ + "STIM" = 2, /* DIRECTION = STIM only */ + "DAQ_STIM" = 3 /* both directions possible */ + /* but not simultaneously */ + }; + + "MAX_ODT" uchar; /* MAX_ODT */ + "MAX_ODT_ENTRIES" uchar; /* MAX_ODT_ENTRIES */ + + "FIRST_PID" uchar; /* FIRST_PID for this DAQ_LIST */ + "EVENT_FIXED" uint; /* this DAQ_LIST always */ + /* in this event */ + "DAQ_PACKED_MODE_SUPPORTED"; /* supports DAQ packed mode */ + + block "PREDEFINED" taggedstruct { /* predefined */ + /* not configurable DAQ_LIST */ + (block "ODT" struct { + uchar; /* ODT number */ + taggedstruct { + ("ODT_ENTRY" struct { + uchar; /* ODT_ENTRY number */ + ulong; /* address of element */ + uchar; /* address extension of element */ + uchar; /* size of element [AG] */ + uchar; /* BIT_OFFSET */ + })*; + }; /* end of ODT_ENTRY */ + })*; /* end of ODT */ + }; /* end of PREDEFINED */ + }; + })*; + +/******************* end of DAQ_LIST ***********************/ + +/******************* start of EVENT ************************/ + + (block "EVENT" struct { /* EVENT */ + /* multiple possible */ + char[101]; /* EVENT_CHANNEL_NAME */ + char[9]; /* EVENT_CHANNEL_SHORT_NAME */ + uint; /* EVENT_CHANNEL_NUMBER */ + + enum { + "DAQ" = 1, /* only DAQ_LISTs */ + /* with DIRECTION = DAQ */ + "STIM" = 2, /* only DAQ_LISTs */ + /* with DIRECTION = STIM */ + "DAQ_STIM" = 3 /* both kind of DAQ_LISTs */ + }; + + uchar; /* MAX_DAQ_LIST */ + uchar; /* EVENT_CHANNEL_TIME_CYCLE */ + uchar; /* EVENT_CHANNEL_TIME_UNIT */ + uchar; /* EVENT_CHANNEL_PRIORITY */ + taggedstruct { /* optional */ + + "COMPLEMENTARY_BYPASS_EVENT_CHANNEL_NUMBER" uint; /* for compatibility reasons */ + /* not to be considered, if 1.3 Bypassing features are implemented */ + "CONSISTENCY" enum { + "DAQ" = 0, + "EVENT" = 1, + "ODT" = 2, + "NONE" = 3 + }; + + "EVENT_COUNTER_PRESENT"; + "RELATED_EVENT_CHANNEL_NUMBER" uint; + "RELATED_EVENT_CHANNEL_NUMBER_FIXED"; /* RELATED_EVENT_CHANNEL_NUMBER can not be modified. */ + "DTO_CTR_DAQ_MODE" enum { /* When inserting the DTO CTR field: */ + "INSERT_COUNTER" = 0, /* - use CTR of the related event channel */ + "INSERT_STIM_COUNTER_COPY" = 1 /* - use STIM CTR CPY of the related event channel */ + }; + "DTO_CTR_DAQ_MODE_FIXED"; /* DTO_CTR_DAQ_MODE properties can not be modified. */ + "DTO_CTR_STIM_MODE" enum { /* When receiving DTOs with CTR field: */ + "DO_NOT_CHECK_COUNTER" = 0, /* - do not check CTR */ + "CHECK_COUNTER" = 1 /* - check CTR */ + }; + "DTO_CTR_STIM_MODE_FIXED"; /* DTO_CTR_STIM_MODE properties can not be modified */ + "STIM_DTO_CTR_COPY_PRESENT"; /* DTO CTR can be saved for later reference */ + + block "DAQ_PACKED_MODE" struct { /* DAQ packed mode, applies for all associated DAQ lists */ + enum { /* El. A,B,C,D, 3 samples */ + "ELEMENT_GROUPED" = 1, /* A0A1A2B0B1B2C0C1C2D0D1D2 */ + "EVENT_GROUPED" = 2 /* A0B0C0D0A1B1C1D1A2B2C2D2 */ + }; + + enum { /* timestamp mode */ + "STS_LAST" = 0, /* single timestamp of last sample */ + "STS_FIRST" = 1 /* single timestamp of first sample */ + }; + + enum { /* usage */ + "OPTIONAL" = 0, /* optional, EVENT allows also non-packed mode */ + "MANDATORY" = 1 /* mandatory, only packed mode allowed */ + }; + + uint; /* DAQ packed mode sample count */ + taggedstruct { + ("ALT_SAMPLE_COUNT" uint)*; /* other valid sample count values (optional) */ + }; + }; + + block "MIN_CYCLE_TIME" struct { /* Configuration with 0-0 not allowed */ + uchar; /* EVENT_CHANNEL_TIME_CYCLE */ + uchar; /* EVENT_CHANNEL_TIME_UNIT */ + }; + block "BUFFER_RESERVE_EVENT" struct { + /* overrules default BUFFER_RESERVE for this EVENT */ + uchar; /* ODT_DAQ_BUFFER_ELEMENT_RESERVE in % of ODT_DAQ_BUFFER_ELEMENT_SIZE */ + uchar; /* ODT_STIM_BUFFER_ELEMENT_RESERVE in % of ODT_STIM_BUFFER_ELEMENT_SIZE */ + }; + + "CPU_LOAD_MAX" float; + + block "CPU_LOAD_CONSUMPTION_DAQ" struct { + float; /* DAQ_FACTOR */ + float; /* ODT_FACTOR */ + float; /* ODT_ENTRY_FACTOR */ + taggedstruct { + (block "ODT_ENTRY_SIZE_FACTOR_TABLE" struct{ + uint; /* SIZE */ + float; /* SIZE_FACTOR */ + })*; + block "CORE_LOAD_EP" struct { + uint; /* CORE_NR: core reference number */ + float; /* CORE_LOAD_EP_MAX: max load of this event part */ + }; + }; + }; + + block "CPU_LOAD_CONSUMPTION_STIM" struct { + float; /* DAQ_FACTOR */ + float; /* ODT_FACTOR */ + float; /* ODT_ENTRY_FACTOR */ + taggedstruct { + (block "ODT_ENTRY_SIZE_FACTOR_TABLE" struct{ + uint; /* SIZE */ + float; /* SIZE_FACTOR */ + })*; + block "CORE_LOAD_EP" struct { + uint; /* CORE_NR: core reference number */ + float; /* CORE_LOAD_EP_MAX: max load of this event part */ + }; + }; + }; + + block "CPU_LOAD_CONSUMPTION_QUEUE" struct { + /* default for DAQ and STIM QUEUE */ + float; /* ODT_FACTOR */ + float; /* ODT_ELEMENT_LOAD: length in elements[AG] */ + taggedstruct { + block "CORE_LOAD_EP" struct { + uint; /* CORE_NR: core reference number */ + float; /* CORE_LOAD_EP_MAX: max load of this event part */ + }; + }; + }; + + block "CPU_LOAD_CONSUMPTION_QUEUE_STIM" struct { + /* overrules CPU_LOAD_CONSUMPTION_QUEUE for STIM QUEUE */ + float; /* ODT_FACTOR */ + float; /* ODT_ELEMENT_LOAD: length in elements[AG] */ + taggedstruct { + block "CORE_LOAD_EP" struct { + uint; /* CORE_NR: core reference number */ + float; /* CORE_LOAD_EP_MAX: max load of this event part */ + }; + }; + }; + }; + })*; + +/********************* end of EVENT ************************/ + + }; /* end of optional at DAQ */ + +}; + +/********************* end of DAQ **************************/ + + +/***************** start of DAQ_EVENT **********************/ + +taggedunion Daq_Event { /* at MEASUREMENT */ + "FIXED_EVENT_LIST" taggedstruct { + ("EVENT" uint)*; + }; + "VARIABLE" taggedstruct { + block "AVAILABLE_EVENT_LIST" taggedstruct { + ("EVENT" uint)*; + }; + block "DEFAULT_EVENT_LIST" taggedstruct { + ("EVENT" uint)*; + }; + block "CONSISTENCY_EVENT_LIST" taggedstruct { + ("EVENT" uint)*; + }; + }; +}; + +/******************** end of DAQ_EVENT *********************/ + + +/********************** start of PAG ***********************/ + +struct Pag { /* PAG supported, at MODULE */ + uchar; /* MAX_SEGMENTS */ + taggedstruct { /* optional */ + "FREEZE_SUPPORTED"; + }; + +}; + +/*********************** end of PAG ************************/ + + +/********************** start of PGM ***********************/ + +struct Pgm { /* PGM supported, at MODULE */ + + enum { + "PGM_MODE_ABSOLUTE" = 1, + "PGM_MODE_FUNCTIONAL" = 2, + "PGM_MODE_ABSOLUTE_AND_FUNCTIONAL" = 3 + }; + uchar; /* MAX_SECTORS */ + uchar; /* MAX_CTO_PGM */ + + taggedstruct { /* optional */ + (block "SECTOR" struct { /* SECTOR */ + /* multiple possible */ + char[101]; /* SECTOR_NAME */ + uchar; /* SECTOR_NUMBER */ + ulong; /* Address */ + ulong; /* Length */ + uchar; /* CLEAR_SEQUENCE_NUMBER */ + uchar; /* PROGRAM_SEQUENCE_NUMBER */ + uchar; /* PROGRAM_METHOD */ + })*; /* end of SECTOR */ + + "COMMUNICATION_MODE_SUPPORTED" taggedunion { /* optional modes supported */ + "BLOCK" taggedstruct { + "SLAVE"; /* Slave Block Mode supported */ + "MASTER" struct { /* Master Block Mode supported */ + uchar; /* MAX_BS_PGM */ + uchar; /* MIN_ST_PGM */ + }; + }; + "INTERLEAVED" uchar; /* QUEUE_SIZE_PGM */ + }; + }; +}; + +/*********************** end of PGM ************************/ + + +/******************** start of SEGMENT *********************/ + +struct Segment { /* at MEMORY_SEGMENT */ + uchar; /* SEGMENT_NUMBER */ + uchar; /* number of pages */ + uchar; /* ADDRESS_EXTENSION */ + uchar; /* COMPRESSION_METHOD */ + uchar; /* ENCRYPTION_METHOD */ + + taggedstruct { /* optional */ + block "CHECKSUM" struct { + enum { /* checksum type */ + "XCP_ADD_11" = 1, + "XCP_ADD_12" = 2, + "XCP_ADD_14" = 3, + "XCP_ADD_22" = 4, + "XCP_ADD_24" = 5, + "XCP_ADD_44" = 6, + "XCP_CRC_16" = 7, + "XCP_CRC_16_CITT" = 8, + "XCP_CRC_32" = 9, + "XCP_USER_DEFINED" = 255 + }; + + taggedstruct { + "MAX_BLOCK_SIZE" ulong; /* maximum block size */ + /* for checksum calculation */ + "EXTERNAL_FUNCTION" char[256]; /* Name of the Checksum function */ + /* including file extension */ + /* without path */ + "MTA_BLOCK_SIZE_ALIGN" uint; /* required alignment of MTA and block size */ + }; + }; + + "DEFAULT_PAGE_NUMBER" uchar; /* Number of the default page */ + + (block "PAGE" struct { /* PAGES for this SEGMENT */ + /* multiple possible */ + uchar; /* PAGE_NUMBER */ + + enum { /* ECU_ACCESS_TYPE */ + "ECU_ACCESS_NOT_ALLOWED" = 0, + "ECU_ACCESS_WITHOUT_XCP_ONLY" = 1, + "ECU_ACCESS_WITH_XCP_ONLY" = 2, + "ECU_ACCESS_DONT_CARE" = 3 + }; + + enum { /* XCP_READ_ACCESS_TYPE */ + "XCP_READ_ACCESS_NOT_ALLOWED" = 0, + "XCP_READ_ACCESS_WITHOUT_ECU_ONLY" = 1, + "XCP_READ_ACCESS_WITH_ECU_ONLY" = 2, + "XCP_READ_ACCESS_DONT_CARE" = 3 + }; + + enum { /* XCP_WRITE_ACCESS_TYPE */ + "XCP_WRITE_ACCESS_NOT_ALLOWED" = 0, + "XCP_WRITE_ACCESS_WITHOUT_ECU_ONLY" = 1, + "XCP_WRITE_ACCESS_WITH_ECU_ONLY" = 2, + "XCP_WRITE_ACCESS_DONT_CARE" = 3 + }; + taggedstruct { + "INIT_SEGMENT" uchar; /* references segment that initialises this page */ + }; + + })*; /* end of PAGE */ + + (block "ADDRESS_MAPPING" struct { /* multiple possible */ + ulong; /* source address */ + ulong; /* destination address */ + ulong; /* length */ + })*; + + "PGM_VERIFY" ulong; /* verification value for PGM */ + }; /* end of optional */ + +}; + +/********************** end of SEGMENT *********************/ + + +/***************** start of TIME_CORRELATION ***************/ +taggedstruct Time_Correlation { + +/***********************************************************/ +/* XCP_SLAVE_CLOCK and ECU_CLOCK need not */ +/* necessarily be the same clock, i.e. in case of */ +/* an external XCP Slave, these clocks might differ */ +/***********************************************************/ + + "DAQ_TIMESTAMPS_RELATE_TO" enum { + "XCP_SLAVE_CLOCK" = 0, + "ECU_CLOCK" = 1 + }; + + (block "CLOCK" struct { + char; /* globally unique clock identifier (UUID/EUI), 1st octet (most significant byte) */ + char; /* globally unique clock identifier (UUID/EUI), 2nd octet */ + char; /* globally unique clock identifier (UUID/EUI), 3rd octet */ + char; /* globally unique clock identifier (UUID/EUI), 4th octet */ + char; /* globally unique clock identifier (UUID/EUI), 5th octet */ + char; /* globally unique clock identifier (UUID/EUI), 6th octet */ + char; /* globally unique clock identifier (UUID/EUI), 7th octet */ + char; /* globally unique clock identifier (UUID/EUI), 8th octet (least significant byte) */ + + enum { /* clock enumerator */ + "XCP_SLAVE_CLOCK" = 0, + "ECU_CLOCK" = 1, + "XCP_SLAVE_GRANDMASTER_CLOCK" = 2, /* related to XCP_SLAVE_CLOCK */ + "ECU_GRANDMASTER_CLOCK" = 3 /* related to ECU_CLOCK in case of an external slave */ + }; + enum { /* readability */ + "RANDOMLY_READABLE" = 0, + "LIMITED_READABLE" = 1, + "NOT_READABLE" = 2 + }; + enum { /* synchronization features */ + "SYN_UNSUPPORTED" = 0, /* clock neither supports synchronization */ + /* nor syntonization */ + "SYNCHRONIZATION_ONLY" = 1, /* clock only supports synchronization to */ + /* external grandmaster clock */ + "SYNTONIZATION_ONLY" = 2, /* clock only supports syntonization to */ + /* external grandmaster clock */ + "SYN_ALL" = 3 /* clock supports synchronization as well */ + /* as syntonization to external grandmaster clock */ + }; + uchar; /* clock quality, stratum level */ + + taggedstruct { + block "TIMESTAMP_CHARACTERIZATION" struct { + uint; /* TIMESTAMP_TICKS */ + enum { /* RESOLUTION OF TIMESTAMP */ + "UNIT_1NS" = 0, + "UNIT_10NS" = 1, + "UNIT_100NS" = 2, + "UNIT_1US" = 3, + "UNIT_10US" = 4, + "UNIT_100US" = 5, + "UNIT_1MS" = 6, + "UNIT_10MS" = 7, + "UNIT_100MS" = 8, + "UNIT_1S" = 9, + "UNIT_1PS" = 10, + "UNIT_10PS" = 11, + "UNIT_100PS" = 12 + }; + enum { /* NATIVE TIMESTAMP SIZE */ + "SIZE_FOUR_BYTE" = 4, + "SIZE_EIGHT_BYTE" = 8 + }; + }; + }; + + uint64; /* MAX_TIMESTAMP_VALUE_BEFORE_WRAP_AROUND */ + enum { /* epoch */ + "ATOMIC_TIME" = 0, /* TAI */ + "UNIVERSAL_COORDINATED_TIME" = 1, /* UTC */ + "ARBITRARY" = 2 /* unknown */ + }; + })*; +}; +/***************** end of TIME_CORRELATION ****************/ +/***************** start of Common Parameters **************/ + +taggedstruct Common_Parameters { + + block "PROTOCOL_LAYER" struct Protocol_Layer; + block "TIME_CORRELATION" taggedstruct Time_Correlation; + + block "SEGMENT" struct Segment; + + block "DAQ" struct Daq; + block "PAG" struct Pag; + block "PGM" struct Pgm; + + block "DAQ_EVENT" taggedunion Daq_Event; + +}; + +/****************** end of Common Parameters ***************/ + +/************************ start of CAN *********************/ + +struct CAN_Parameters { /* At MODULE */ + uint; /* XCP on CAN version */ + /* "1.4" = 0x0104 */ + taggedstruct { /* optional */ + "CAN_ID_BROADCAST" ulong; /* Auto detection CAN-ID */ + /* master -> slaves */ + /* Bit31= 1: extended identifier */ + /* Bit30= 1: CAN-FD identifier */ + "CAN_ID_MASTER" ulong; /* CMD/STIM CAN-ID */ + /* master -> slave */ + /* Bit31= 1: extended identifier */ + /* Bit30= 1: CAN-FD identifier */ + "CAN_ID_MASTER_INCREMENTAL"; /* master uses range of CAN-IDs */ + /* start of range = CAN_ID_MASTER */ + /* end of range = CAN_ID_MASTER+MAX_BS(_PGM)-1 */ + "CAN_ID_SLAVE" ulong; /* RES/ERR/EV/SERV/DAQ CAN-ID */ + /* slave -> master */ + /* Bit31= 1: extended identifier */ + /* Bit30= 1: CAN-FD identifier */ + "CAN_ID_GET_DAQ_CLOCK_MULTICAST" ulong; /* Only to be used for GET_DAQ_CLOCK_MULTICAST */ + /* master -> slaves */ + /* Bit31= 1: extended identifier */ + /* Bit30= 1: CAN-FD identifier */ + "BAUDRATE" ulong; /* BAUDRATE [Hz] */ + "SAMPLE_POINT" uchar; /* sample point */ + /* [% complete bit time] */ + "SAMPLE_RATE" enum { + "SINGLE" = 1, /* 1 sample per bit */ + "TRIPLE" = 3 /* 3 samples per bit */ + }; + "BTL_CYCLES" uchar; /* BTL_CYCLES */ + /* [slots per bit time] */ + "SJW" uchar; /* length synchr. segment */ + /* [BTL_CYCLES] */ + "SYNC_EDGE" enum { + "SINGLE" = 1, /* on falling edge only */ + "DUAL" = 2 /* on falling and rising edge */ + }; + "MAX_DLC_REQUIRED"; /* master to slave frames */ + /* always to have DLC = MAX_DLC = 8 */ + + (block "DAQ_LIST_CAN_ID" struct { /* At IF_DATA DAQ */ + uint; /* reference to DAQ_LIST_NUMBER */ + taggedstruct { /* exclusive tags */ + /* either VARIABLE or FIXED */ + "VARIABLE"; + "FIXED" ulong; /* this DAQ_LIST always */ + /* on this CAN_ID */ + }; + + })*; + (block "EVENT_CAN_ID_LIST" struct { /* At IF_DATA DAQ */ + uint; /* reference to EVENT_NUMBER */ + taggedstruct { /* exclusive tags */ + ("FIXED" ulong)*; /* this Event always on this ID */ + }; + })*; + + "MAX_BUS_LOAD" ulong; /* maximum available bus */ + /* load in percent */ + + "MEASUREMENT_SPLIT_ALLOWED"; /* Supports splitting of measurements to increase payload for MAX_DTO <= 8 */ + + block "CAN_FD" struct { /* The CAN_FD block definition indicates the use of CAN-FD frames */ + taggedstruct { + + "MAX_DLC" uint; /* 8, 12, 16, 20, 24, 32, 48 or 64 */ + "CAN_FD_DATA_TRANSFER_BAUDRATE" ulong; /* BAUDRATE [Hz] */ + + "SAMPLE_POINT" uchar; /* sample point receiver */ + /* [% complete bit time] */ + + "BTL_CYCLES" uchar; /* BTL_CYCLES */ + /* [slots per bit time] */ + "SJW" uchar; /* length synchr. segment */ + /* [BTL_CYCLES] */ + "SYNC_EDGE" enum { + "SINGLE" = 1, /* on falling edge only */ + "DUAL" = 2 /* on falling and rising edge */ + }; + + "MAX_DLC_REQUIRED"; /* master to slave frames */ + /* always to have DLC = MAX_DLC_for CAN-FD */ + + "SECONDARY_SAMPLE_POINT" uchar; /* sender sample point */ + /* [% complete bit time] */ + "TRANSCEIVER_DELAY_COMPENSATION" enum { + "OFF" = 0, + "ON" = 1 + }; + }; + }; + }; + + taggedstruct { + ("OPTIONAL_TL_SUBCMD" enum { /* XCP-Code of optional transport layer */ + /* specific subcommand supported by the slave */ + "GET_SLAVE_ID" = 0xFF, + "GET_DAQ_ID" = 0xFE, + "SET_DAQ_ID" = 0xFD, + "GET_DAQ_CLOCK_MULTICAST" = 0xFA + })*; + }; +}; + +/************************* end of CAN **********************/ + +/********************** start of SxI ***********************/ + +struct SxI_Parameters { /* At MODULE */ + uint; /* XCP on SxI version */ + /* "1.4" = 0x0104 */ + ulong; /* BAUDRATE [Hz] */ + taggedstruct { /* exclusive tags */ + "ASYNCH_FULL_DUPLEX_MODE" struct { + enum { + "PARITY_NONE" = 0, + "PARITY_ODD" = 1, + "PARITY_EVEN" = 2 + }; + enum { + "ONE_STOP_BIT" = 1, + "TWO_STOP_BITS" = 2 + }; + taggedstruct { + block "FRAMING" struct { + uchar; /* SYNC */ + uchar; /* ESC */ + }; + }; + }; + "SYNCH_FULL_DUPLEX_MODE_BYTE"; + "SYNCH_FULL_DUPLEX_MODE_WORD"; + "SYNCH_FULL_DUPLEX_MODE_DWORD"; + "SYNCH_MASTER_SLAVE_MODE_BYTE"; + "SYNCH_MASTER_SLAVE_MODE_WORD"; + "SYNCH_MASTER_SLAVE_MODE_DWORD"; + }; + enum { + "HEADER_LEN_BYTE" = 0, + "HEADER_LEN_CTR_BYTE" = 1, + "HEADER_LEN_FILL_BYTE" = 2, + "HEADER_LEN_WORD" = 3, + "HEADER_LEN_CTR_WORD" = 4, + "HEADER_LEN_FILL_WORD" = 5 + }; + enum { + "NO_CHECKSUM" = 0, + "CHECKSUM_BYTE" = 1, + "CHECKSUM_WORD" = 2 + }; + +}; + +/*************************** end of SxI ********************/ + + +/************************ start of TCP_IP ******************/ + +struct TCP_IP_Parameters { + + uint; /* XCP on TCP_IP version */ + /* "1.4" = 0x0104 */ + uint; /* PORT */ + + taggedunion { + "HOST_NAME" char[256]; + "ADDRESS" char[15]; + "IPV6" char[39]; + }; + taggedstruct{ + "MAX_BUS_LOAD" ulong; /* maximum available bus */ + /* load in percent */ + "MAX_BIT_RATE" ulong; /* Network speed which is */ + /* the base for MAX_BUS_LOAD in Mbit */ + }; + + taggedstruct{ + "PACKET_ALIGNMENT" enum { + "PACKET_ALIGNMENT_8" = 0, /* This is the default if the keyword is missing */ + "PACKET_ALIGNMENT_16" = 1, + "PACKET_ALIGNMENT_32" = 2 + }; + }; + + taggedstruct{ + ("OPTIONAL_TL_SUBCMD" enum { /* XCP-Code of optional transport layer */ + /* specific subcommand supported by the slave */ + "GET_SLAVE_ID" = 0xFF, + "GET_SLAVE_ID_EXTENDED" = 0xFD, + "SET_SLAVE_IP_ADDRESS" = 0xFC, + "GET_DAQ_CLOCK_MULTICAST" = 0xFA + })*; + }; +}; + +/************************* end of TCP_IP *******************/ + +/************************ start of UDP_IP ******************/ + +struct UDP_IP_Parameters { + + uint; /* XCP on UDP_IP version */ + /* "1.4" = 0x0104 */ + uint; /* PORT */ + + taggedunion { + "HOST_NAME" char[256]; + "ADDRESS" char[15]; + "IPV6" char[39]; + }; + taggedstruct{ + "MAX_BUS_LOAD" ulong; /* maximum available bus */ + /* load in percent */ + "MAX_BIT_RATE" ulong; /* Network speed which is */ + /* the base for MAX_BUS_LOAD in Mbit */ + }; + + taggedstruct{ + "PACKET_ALIGNMENT" enum { + "PACKET_ALIGNMENT_8" = 0, /* This is the default if the keyword is missing */ + "PACKET_ALIGNMENT_16" = 1, + "PACKET_ALIGNMENT_32" = 2 + }; + }; + + taggedstruct{ + ("OPTIONAL_TL_SUBCMD" enum { /* XCP-Code of optional transport layer */ + /* specific subcommand supported by the slave */ + "GET_SLAVE_ID" = 0xFF, + "GET_SLAVE_ID_EXTENDED" = 0xFD, + "SET_SLAVE_IP_ADDRESS" = 0xFC, + "GET_DAQ_CLOCK_MULTICAST" = 0xFA + })*; + }; +}; + +/*************************** end of UDP_IP *****************/ + +/************************ start of USB *********************/ + +struct ep_parameters { + uchar; /* ENDPOINT_NUMBER, not endpoint address */ + enum { + "BULK_TRANSFER" = 2, /* Numbers according to USB spec. */ + "INTERRUPT_TRANSFER" = 3 + }; + uint; /* wMaxPacketSize: Maximum packet */ + /* size of endpoint in bytes */ + uchar; /* bInterval: polling of endpoint */ + enum { /* Packing of XCP Messages */ + "MESSAGE_PACKING_SINGLE" = 0, /* Single per USB data packet */ + "MESSAGE_PACKING_MULTIPLE" = 1, /* Multiple per USB data packet */ + "MESSAGE_PACKING_STREAMING" = 2 /* No restriction by packet sizes */ + }; + enum { /* Alignment mandatory for all */ + "ALIGNMENT_8_BIT" = 0, /* packing types */ + "ALIGNMENT_16_BIT"= 1, + "ALIGNMENT_32_BIT"= 2, + "ALIGNMENT_64_BIT"= 3 + }; + taggedstruct { /* Optional */ + "RECOMMENDED_HOST_BUFSIZE" uint; /* Recommended size for the host */ + /* buffer size. The size is defined */ + /* as multiple of wMaxPacketSize. */ + }; +}; /* end of ep_parameters */ + +struct USB_Parameters { + uint; /* XCP on USB version */ + /* 1.4 = 0x0104 */ + uint; /* Vendor ID */ + uint; /* Product ID */ + uchar; /* Number of interface */ + enum { + "HEADER_LEN_BYTE" = 0, + "HEADER_LEN_CTR_BYTE" = 1, + "HEADER_LEN_FILL_BYTE" = 2, + "HEADER_LEN_WORD" = 3, + "HEADER_LEN_CTR_WORD" = 4, + "HEADER_LEN_FILL_WORD" = 5 + }; + taggedunion { /* OUT-EP for CMD and */ + /* STIM (if not specified otherwise) */ + block "OUT_EP_CMD_STIM" struct ep_parameters; + }; + taggedunion { /* IN-EP for RES/ERR, */ + /* DAQ (if not specified otherwise) and */ + /* EV/SERV (if not specified otherwise) */ + block "IN_EP_RESERR_DAQ_EVSERV" struct ep_parameters; + }; + /* Begin of optional */ + taggedstruct { /* Optional */ + "ALTERNATE_SETTING_NO" uchar; /* Number of alternate setting */ + /* String Descriptor of XCP */ + /* interface */ + "INTERFACE_STRING_DESCRIPTOR" char [101]; + /* multiple OUT-EP's for STIM */ + (block "OUT_EP_ONLY_STIM" struct ep_parameters)*; + /* multiple IN-EP's for DAQ */ + (block "IN_EP_ONLY_DAQ" struct ep_parameters)*; + /* only one IN-EP for EV/SERV */ + block "IN_EP_ONLY_EVSERV" struct ep_parameters; + (block "DAQ_LIST_USB_ENDPOINT" struct { + uint; /* reference to DAQ_LIST_NUMBER */ + taggedstruct { /* only mentioned if not VARIABLE */ + "FIXED_IN" uchar; /* this DAQ list always */ + /* ENDPOINT_NUMBER, not endpoint address */ + "FIXED_OUT" uchar; /* this STIM list always */ + /* ENDPOINT_NUMBER, not endpoint address */ + }; + })*; /* end of DAQ_LIST_USB_ENDPOINT */ + }; + + taggedstruct { + ("OPTIONAL_TL_SUBCMD" enum { /* XCP-Code of optional transport layer */ + /* specific subcommand supported by the slave */ + "GET_DAQ_EP" = 0xFF, + "SET_DAQ_EP" = 0xFE + })*; + + }; /* end of optional */ +}; + +/************************* end of USB **********************/ + +/************************ start of FLX *********************/ + +enum packet_assignment_type { + "NOT_ALLOWED", + "FIXED", + "VARIABLE_INITIALISED", + "VARIABLE" +}; /* end of packet_assignment_type */ + +struct buffer { + + uchar; /* FLX_BUF */ + + taggedstruct { + + "MAX_FLX_LEN_BUF" taggedunion { + "FIXED" uchar; /* constant value */ + "VARIABLE" uchar; /* initial value */ + }; /* end of MAX_FLX_LEN_BUF */ + + block "LPDU_ID" taggedstruct { + + "FLX_SLOT_ID" taggedunion { + "FIXED" uint; + "VARIABLE" taggedstruct{ + "INITIAL_VALUE" uint; + }; + }; /* end of FLX_SLOT_ID */ + + "OFFSET" taggedunion { + "FIXED" uchar; + "VARIABLE" taggedstruct{ + "INITIAL_VALUE" uchar; + }; + }; /* end of OFFSET */ + + "CYCLE_REPETITION" taggedunion { + "FIXED" uchar; + "VARIABLE" taggedstruct{ + "INITIAL_VALUE" uchar; + }; + }; /* end of CYCLE_REPETITION */ + + "CHANNEL" taggedunion { + "FIXED" enum { + "A" = 0, + "B" = 1 + }; + "VARIABLE" taggedstruct{ + "INITIAL_VALUE" enum { + "A" = 0, + "B" = 1 + }; + }; + }; /* end of CHANNEL */ + + }; /* end of LPDU_ID */ + + block "XCP_PACKET" taggedstruct { + + "CMD" enum packet_assignment_type; + "RES_ERR" enum packet_assignment_type; + "EV_SERV" enum packet_assignment_type; + "DAQ" enum packet_assignment_type; + "STIM" enum packet_assignment_type; + "MULTICAST" enum packet_assignment_type; + + }; /* end of XCP_PACKET */ + }; + +}; /* end of buffer */ + +struct FLX_Parameters { + + uint; /* XCP on FlexRay version */ + /* "1.4" = 0x0104 */ + + uint; /* T1_FLX [ms] */ + + char[256]; /* FIBEX-file including CHI information */ + /* including extension */ + /* without path */ + + char[256]; /* Cluster-ID */ + + uchar; /* NAX */ + + enum { + "HEADER_NAX" = 0, + "HEADER_NAX_FILL" = 1, + "HEADER_NAX_CTR" = 2, + "HEADER_NAX_FILL3" = 3, + "HEADER_NAX_CTR_FILL2" = 4, + "HEADER_NAX_LEN" = 5, + "HEADER_NAX_CTR_LEN" = 6, + "HEADER_NAX_FILL2_LEN" = 7, + "HEADER_NAX_CTR_FILL_LEN" = 8 + }; + + + enum { + "PACKET_ALIGNMENT_8" = 0, + "PACKET_ALIGNMENT_16" = 1, + "PACKET_ALIGNMENT_32" = 2 + }; + + taggedunion { + block "INITIAL_CMD_BUFFER" struct buffer; + }; + + taggedunion { + block "INITIAL_RES_ERR_BUFFER" struct buffer; + }; + + taggedstruct { + (block "POOL_BUFFER" struct buffer)*; + }; + + taggedstruct { + ("OPTIONAL_TL_SUBCMD" enum { /* XCP-Code of optional transport layer */ + /* specific subcommand supported by the slave */ + "FLX_ASSIGN" = 0xFF, + "FLX_ACTIVATE" = 0xFE, + "FLX_DEACTIVATE" = 0xFD, + "GET_DAQ_FLX_BUF" = 0xFC, + "SET_DAQ_FLX_BUF" = 0xFB, + "GET_DAQ_CLOCK_MULTICAST" = 0xFA + })*; + }; +}; + +block "IF_DATA" taggedunion if_data { +"XCP" struct { + taggedstruct Common_Parameters; /* default parameters */ + taggedstruct { + block "XCP_ON_CAN" struct { + struct CAN_Parameters; /* specific for CAN */ + taggedstruct Common_Parameters; /* overruling of default */ + }; + block "XCP_ON_SxI" struct { + struct SxI_Parameters; /* specific for SxI */ + taggedstruct Common_Parameters; /* overruling of default */ + }; + block "XCP_ON_TCP_IP" struct { + struct TCP_IP_Parameters; /* specific for TCP_IP */ + taggedstruct Common_Parameters; /* overruling of default */ + }; + block "XCP_ON_UDP_IP" struct { + struct UDP_IP_Parameters; /* specific for UDP */ + taggedstruct Common_Parameters; /* overruling of default */ + }; + block "XCP_ON_USB" struct { + struct USB_Parameters; /* specific for USB */ + taggedstruct Common_Parameters; /* overruling of default */ + }; + block "XCP_ON_FLX" struct { + struct FLX_Parameters; /* specific for FlexRay */ + taggedstruct Common_Parameters; /* overruling of default */ + }; + }; /* transport layer parameters*/ +}; + +"XCPplus" struct { + uint; /* XCP plus AML structure version */ + taggedstruct Common_Parameters; /* default parameters */ + taggedstruct { + (block "XCP_ON_CAN" struct { + struct CAN_Parameters; /* specific for CAN */ + taggedstruct Common_Parameters; /* overruling of default */ + taggedstruct { + "TRANSPORT_LAYER_INSTANCE" char[101]; /* name of the transport layer instance */ + }; + })*; + (block "XCP_ON_SxI" struct { + struct SxI_Parameters; /* specific for SxI */ + taggedstruct Common_Parameters; /* overruling of default */ + taggedstruct { + "TRANSPORT_LAYER_INSTANCE" char[101]; /* name of the transport layer instance */ + }; + })*; + (block "XCP_ON_TCP_IP" struct { + struct TCP_IP_Parameters; /* specific for TCP_IP */ + taggedstruct Common_Parameters; /* overruling of default */ + taggedstruct { + "TRANSPORT_LAYER_INSTANCE" char[101]; /* name of the transport layer instance */ + }; + })*; + (block "XCP_ON_UDP_IP" struct { + struct UDP_IP_Parameters; /* specific for UDP */ + taggedstruct Common_Parameters; /* overruling of default */ + taggedstruct { + "TRANSPORT_LAYER_INSTANCE" char[101]; /* name of the transport layer instance */ + }; + })*; + (block "XCP_ON_USB" struct { + struct USB_Parameters; /* specific for USB */ + taggedstruct Common_Parameters; /* overruling of default */ + taggedstruct { + "TRANSPORT_LAYER_INSTANCE" char[101]; /* name of the transport layer instance */ + }; + })*; + (block "XCP_ON_FLX" struct { + struct FLX_Parameters; /* specific for FlexRay */ + taggedstruct Common_Parameters; /* overruling of default */ + taggedstruct { + "TRANSPORT_LAYER_INSTANCE" char[101]; /* name of the transport layer instance */ + }; + })*; + }; /* transport layer specific parameters */ +}; +}; + +/end A2ML diff --git a/examples/no_a2l_demo/CANape/no_a2l_demo.A2L b/examples/no_a2l_demo/CANape/no_a2l_demo.A2L new file mode 100644 index 00000000..cc80cdf9 --- /dev/null +++ b/examples/no_a2l_demo/CANape/no_a2l_demo.A2L @@ -0,0 +1,260 @@ + +/* Created by xcp_client with target XCP event/segment and ELF/DWARF variable and type information, online mode - 2025-10-26 07:26:43 */ +ASAP2_VERSION 1 71 +/begin PROJECT no_a2l_demo "" +/begin HEADER "" VERSION "1.0" PROJECT_NO XCPLITE__CASDD /end HEADER + +/begin MODULE no_a2l_demo "" + + /include "XCP_104.aml" + + /begin MOD_COMMON "" + BYTE_ORDER MSB_LAST + ALIGNMENT_BYTE 1 + ALIGNMENT_WORD 1 + ALIGNMENT_LONG 1 + ALIGNMENT_FLOAT16_IEEE 1 + ALIGNMENT_FLOAT32_IEEE 1 + ALIGNMENT_FLOAT64_IEEE 1 + ALIGNMENT_INT64 1 + /end MOD_COMMON + + /* Predefined conversion rule for bool */ + /begin COMPU_METHOD BOOL "" + TAB_VERB "%.0" "" COMPU_TAB_REF BOOL.table + /end COMPU_METHOD + /begin COMPU_VTAB BOOL.table "" TAB_VERB 2 + 0 "false" 1 "true" + /end COMPU_VTAB + + /* Predefined conversion rule identity with no phys unit and zero decimal places */ + /begin COMPU_METHOD IDENTITY "" + IDENTICAL "%.0" "" + /end COMPU_METHOD + + /* Predefined characteristic record layouts for standard types */ + /begin RECORD_LAYOUT BOOL FNC_VALUES 1 UBYTE ROW_DIR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT U8 FNC_VALUES 1 UBYTE ROW_DIR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT U16 FNC_VALUES 1 UWORD ROW_DIR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT U32 FNC_VALUES 1 ULONG ROW_DIR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT U64 FNC_VALUES 1 A_UINT64 ROW_DIR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT I8 FNC_VALUES 1 SBYTE ROW_DIR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT I16 FNC_VALUES 1 SWORD ROW_DIR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT I32 FNC_VALUES 1 SLONG ROW_DIR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT I64 FNC_VALUES 1 A_INT64 ROW_DIR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT F32 FNC_VALUES 1 FLOAT32_IEEE ROW_DIR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT F64 FNC_VALUES 1 FLOAT64_IEEE ROW_DIR DIRECT /end RECORD_LAYOUT + + /* Predefined axis record layouts for standard types */ + /begin RECORD_LAYOUT A_U8 AXIS_PTS_X 1 UBYTE INDEX_INCR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT A_U16 AXIS_PTS_X 1 UWORD INDEX_INCR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT A_U32 AXIS_PTS_X 1 ULONG INDEX_INCR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT A_U64 AXIS_PTS_X 1 A_UINT64 INDEX_INCR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT A_I8 AXIS_PTS_X 1 SBYTE INDEX_INCR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT A_I16 AXIS_PTS_X 1 SWORD INDEX_INCR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT A_I32 AXIS_PTS_X 1 SLONG INDEX_INCR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT A_I64 AXIS_PTS_X 1 A_INT64 INDEX_INCR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT A_F32 AXIS_PTS_X 1 FLOAT32_IEEE INDEX_INCR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT A_F64 AXIS_PTS_X 1 FLOAT64_IEEE INDEX_INCR DIRECT /end RECORD_LAYOUT + + /* Predefined measurement and characteristic typedefs for standard types */ + /begin TYPEDEF_MEASUREMENT M_BOOL "" UBYTE BOOL 0 0 0 1 /end TYPEDEF_MEASUREMENT + /begin TYPEDEF_MEASUREMENT M_U8 "" UBYTE NO_COMPU_METHOD 0 0 0 255 /end TYPEDEF_MEASUREMENT + /begin TYPEDEF_MEASUREMENT M_U16 "" UWORD NO_COMPU_METHOD 0 0 0 65535 /end TYPEDEF_MEASUREMENT + /begin TYPEDEF_MEASUREMENT M_U32 "" ULONG NO_COMPU_METHOD 0 0 0 4294967295 /end TYPEDEF_MEASUREMENT + /begin TYPEDEF_MEASUREMENT M_U64 "" A_UINT64 NO_COMPU_METHOD 0 0 0 1e12 /end TYPEDEF_MEASUREMENT + /begin TYPEDEF_MEASUREMENT M_I8 "" SBYTE NO_COMPU_METHOD 0 0 -128 127 /end TYPEDEF_MEASUREMENT + /begin TYPEDEF_MEASUREMENT M_I16 "" SWORD NO_COMPU_METHOD 0 0 -32768 32767 /end TYPEDEF_MEASUREMENT + /begin TYPEDEF_MEASUREMENT M_I32 "" SLONG NO_COMPU_METHOD 0 0 -2147483648 2147483647 /end TYPEDEF_MEASUREMENT + /begin TYPEDEF_MEASUREMENT M_I64 "" A_INT64 NO_COMPU_METHOD 0 0 -1e12 1e12 /end TYPEDEF_MEASUREMENT + /begin TYPEDEF_MEASUREMENT M_F32 "" FLOAT32_IEEE NO_COMPU_METHOD 0 0 -1e12 1e12 /end TYPEDEF_MEASUREMENT + /begin TYPEDEF_MEASUREMENT M_F64 "" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e12 1e12 /end TYPEDEF_MEASUREMENT + /begin TYPEDEF_CHARACTERISTIC C_BOOL "" VALUE U8 0 BOOL 0 1 /end TYPEDEF_CHARACTERISTIC + /begin TYPEDEF_CHARACTERISTIC C_U8 "" VALUE U8 0 NO_COMPU_METHOD 0 255 /end TYPEDEF_CHARACTERISTIC + /begin TYPEDEF_CHARACTERISTIC C_U16 "" VALUE U16 0 NO_COMPU_METHOD 0 65535 /end TYPEDEF_CHARACTERISTIC + /begin TYPEDEF_CHARACTERISTIC C_U32 "" VALUE U32 0 NO_COMPU_METHOD 0 4294967295 /end TYPEDEF_CHARACTERISTIC + /begin TYPEDEF_CHARACTERISTIC C_U64 "" VALUE U64 0 NO_COMPU_METHOD 0 1e12 /end TYPEDEF_CHARACTERISTIC + /begin TYPEDEF_CHARACTERISTIC C_I8 "" VALUE I8 0 NO_COMPU_METHOD -128 127 /end TYPEDEF_CHARACTERISTIC + /begin TYPEDEF_CHARACTERISTIC C_I16 "" VALUE I16 0 NO_COMPU_METHOD -32768 32767 /end TYPEDEF_CHARACTERISTIC + /begin TYPEDEF_CHARACTERISTIC C_I32 "" VALUE I32 0 NO_COMPU_METHOD -2147483648 2147483647 /end TYPEDEF_CHARACTERISTIC + /begin TYPEDEF_CHARACTERISTIC C_I64 "" VALUE I64 0 NO_COMPU_METHOD -1e12 1e12 /end TYPEDEF_CHARACTERISTIC + /begin TYPEDEF_CHARACTERISTIC C_F64 "" VALUE F64 0 NO_COMPU_METHOD -1e12 1e12 /end TYPEDEF_CHARACTERISTIC + /begin TYPEDEF_CHARACTERISTIC C_F32 "" VALUE F32 0 NO_COMPU_METHOD -1e12 1e12 /end TYPEDEF_CHARACTERISTIC + +/begin MOD_PAR "" +/begin MEMORY_SEGMENT epk "" DATA FLASH INTERN 0x80000000 20 -1 -1 -1 -1 -1 +/begin IF_DATA XCP + /begin SEGMENT 0 2 0 0 0 + /begin CHECKSUM XCP_ADD_44 MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM + /begin PAGE 0x0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_DONT_CARE /end PAGE + /begin PAGE 0x1 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_NOT_ALLOWED /end PAGE + /end SEGMENT +/end IF_DATA +/end MEMORY_SEGMENT +/begin MEMORY_SEGMENT params "" DATA FLASH INTERN 0x80010000 56 -1 -1 -1 -1 -1 +/begin IF_DATA XCP + /begin SEGMENT 1 2 0 0 0 + /begin CHECKSUM XCP_ADD_44 MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM + /begin PAGE 0x0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_DONT_CARE /end PAGE + /begin PAGE 0x1 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_NOT_ALLOWED /end PAGE + /end SEGMENT +/end IF_DATA +/end MEMORY_SEGMENT +/end MOD_PAR + +/begin IF_DATA XCP + /begin PROTOCOL_LAYER + 0x104 1000 2000 0 0 0 0 0 252 1468 BYTE_ORDER_MSB_LAST ADDRESS_GRANULARITY_BYTE + OPTIONAL_CMD GET_COMM_MODE_INFO + OPTIONAL_CMD GET_ID + OPTIONAL_CMD SET_REQUEST + OPTIONAL_CMD SET_MTA + OPTIONAL_CMD UPLOAD + OPTIONAL_CMD SHORT_UPLOAD + OPTIONAL_CMD DOWNLOAD + OPTIONAL_CMD SHORT_DOWNLOAD + OPTIONAL_CMD GET_CAL_PAGE + OPTIONAL_CMD SET_CAL_PAGE + OPTIONAL_CMD COPY_CAL_PAGE + OPTIONAL_CMD BUILD_CHECKSUM + OPTIONAL_CMD GET_DAQ_RESOLUTION_INFO + OPTIONAL_CMD GET_DAQ_PROCESSOR_INFO + OPTIONAL_CMD FREE_DAQ + OPTIONAL_CMD ALLOC_DAQ + OPTIONAL_CMD ALLOC_ODT + OPTIONAL_CMD ALLOC_ODT_ENTRY + OPTIONAL_CMD SET_DAQ_PTR + OPTIONAL_CMD WRITE_DAQ + OPTIONAL_CMD GET_DAQ_LIST_MODE + OPTIONAL_CMD SET_DAQ_LIST_MODE + OPTIONAL_CMD START_STOP_SYNCH + OPTIONAL_CMD START_STOP_DAQ_LIST + OPTIONAL_CMD GET_DAQ_CLOCK + OPTIONAL_CMD WRITE_DAQ_MULTIPLE + OPTIONAL_CMD TIME_CORRELATION_PROPERTIES + OPTIONAL_CMD USER_CMD + OPTIONAL_LEVEL1_CMD GET_VERSION + /end PROTOCOL_LAYER + + /begin DAQ + DYNAMIC 0 4 0 OPTIMISATION_TYPE_DEFAULT ADDRESS_EXTENSION_FREE IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE 0xF8 OVERLOAD_INDICATION_PID + /begin TIMESTAMP_SUPPORTED + 0x1 SIZE_DWORD UNIT_1US TIMESTAMP_FIXED + /end TIMESTAMP_SUPPORTED + + /begin EVENT "async" "async" 0 DAQ 0xFF 0 0 0 CONSISTENCY DAQ /end EVENT + /* compilation unit = 0, function = main, CFA = 128 */ + /begin EVENT "mainloop" "mainloop" 1 DAQ 0xFF 0 0 0 CONSISTENCY DAQ /end EVENT + /* compilation unit = 0, function = task, CFA = 112 */ + /begin EVENT "task" "task" 2 DAQ 0xFF 0 0 0 CONSISTENCY DAQ /end EVENT + /* compilation unit = 0, function = foo, CFA = 112 */ + /begin EVENT "foo" "foo" 3 DAQ 0xFF 0 0 0 CONSISTENCY DAQ /end EVENT + + /end DAQ + + /begin XCP_ON_TCP_IP 0x104 5555 ADDRESS "192.168.0.206" /end XCP_ON_TCP_IP + +/end IF_DATA + + +/* TypeDefs */ +/begin TYPEDEF_CHARACTERISTIC counter_max "" VALUE U16 0 IDENTITY 0 65535 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC delay_us "" VALUE U32 0 IDENTITY 0 4294967295 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC test_par_uint8_array "" VAL_BLK U8 0 IDENTITY 0 255 MATRIX_DIM 10 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC test_par_double "" VALUE F64 0 NO_COMPU_METHOD -100000000000000000000000000000000 100000000000000000000000000000000 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC test_par_bool "" VALUE U8 0 IDENTITY 0 255 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC test_par_enum "" VALUE U32 0 IDENTITY 0 4294967295 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC test_field_uint16 "" VALUE U16 0 IDENTITY 0 65535 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC test_field_int16 "" VALUE I16 0 IDENTITY -32768 32767 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC test_field_float "" VALUE F32 0 NO_COMPU_METHOD -100000000000000000000000000000000 100000000000000000000000000000000 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC test_field_uint8_array "" VAL_BLK U8 0 IDENTITY 0 255 MATRIX_DIM 3 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_STRUCTURE test_par_struct "" 12 + /begin STRUCTURE_COMPONENT test_field_uint16 test_field_uint16 0 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT test_field_int16 test_field_int16 2 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT test_field_float test_field_float 4 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT test_field_uint8_array test_field_uint8_array 8 /end STRUCTURE_COMPONENT +/end TYPEDEF_STRUCTURE +/begin TYPEDEF_STRUCTURE params "" 56 + /begin STRUCTURE_COMPONENT counter_max counter_max 0 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT delay_us delay_us 4 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT test_par_uint8_array test_par_uint8_array 8 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT test_par_double test_par_double 24 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT test_par_bool test_par_bool 32 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT test_par_enum test_par_enum 36 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT test_par_struct test_par_struct 40 /end STRUCTURE_COMPONENT +/end TYPEDEF_STRUCTURE +/begin TYPEDEF_MEASUREMENT a "" UWORD IDENTITY 0 0 0 65535 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT b "" SWORD IDENTITY 0 0 -32768 32767 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT f "" FLOAT32_IEEE NO_COMPU_METHOD 0 0 -100000000000000000000000000000000 100000000000000000000000000000000 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT d "" UBYTE IDENTITY 0 0 0 255 MATRIX_DIM 3 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_STRUCTURE test_struct "" 12 + /begin STRUCTURE_COMPONENT a a 0 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT b b 2 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT f f 4 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT d d 8 /end STRUCTURE_COMPONENT +/end TYPEDEF_STRUCTURE + + +/* Measurements */ + +/* Measurements for event 'async' */ +/begin MEASUREMENT global_running "" UBYTE IDENTITY 0 0 0 255 ECU_ADDRESS 0x30200 ECU_ADDRESS_EXTENSION 1 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_counter "" UWORD IDENTITY 0 0 0 65535 ECU_ADDRESS 0x3026A ECU_ADDRESS_EXTENSION 1 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_uint8 "" UBYTE IDENTITY 0 0 0 255 ECU_ADDRESS 0x3024E ECU_ADDRESS_EXTENSION 1 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_uint16 "" UWORD IDENTITY 0 0 0 65535 ECU_ADDRESS 0x3024C ECU_ADDRESS_EXTENSION 1 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_uint32 "" ULONG IDENTITY 0 0 0 4294967295 ECU_ADDRESS 0x30248 ECU_ADDRESS_EXTENSION 1 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_uint64 "" A_UINT64 IDENTITY 0 0 0 18446744073709552000 ECU_ADDRESS 0x30240 ECU_ADDRESS_EXTENSION 1 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_int8 "" SBYTE IDENTITY 0 0 -128 127 ECU_ADDRESS 0x3023E ECU_ADDRESS_EXTENSION 1 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_int16 "" SWORD IDENTITY 0 0 -32768 32767 ECU_ADDRESS 0x3023C ECU_ADDRESS_EXTENSION 1 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_int32 "" SLONG IDENTITY 0 0 -2147483648 2147483647 ECU_ADDRESS 0x30238 ECU_ADDRESS_EXTENSION 1 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_int64 "" A_INT64 IDENTITY 0 0 -9223372036854776000 9223372036854776000 ECU_ADDRESS 0x30230 ECU_ADDRESS_EXTENSION 1 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_float "" FLOAT32_IEEE NO_COMPU_METHOD 0 0 -100000000000000000000000000000000 100000000000000000000000000000000 ECU_ADDRESS 0x30228 ECU_ADDRESS_EXTENSION 1 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_double "" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -100000000000000000000000000000000 100000000000000000000000000000000 ECU_ADDRESS 0x30220 ECU_ADDRESS_EXTENSION 1 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_bool "" UBYTE IDENTITY 0 0 0 255 ECU_ADDRESS 0x3021B ECU_ADDRESS_EXTENSION 1 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_array "" UBYTE IDENTITY 0 0 0 255 ECU_ADDRESS 0x30218 ECU_ADDRESS_EXTENSION 1 MATRIX_DIM 3 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin INSTANCE global_test_struct "" test_struct 0x30208 ECU_ADDRESS_EXTENSION 1 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end INSTANCE +/begin MEASUREMENT XCPLITE__CASDD "" UWORD IDENTITY 0 0 0 65535 ECU_ADDRESS 0xD058 ECU_ADDRESS_EXTENSION 1 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT XcpCreateIndexedEvent.e "" UWORD IDENTITY 0 0 0 65535 ECU_ADDRESS 0x30688 ECU_ADDRESS_EXTENSION 1 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT + +/* Measurements for event 'mainloop' */ +/begin MEASUREMENT main.counter "" ULONG IDENTITY 0 0 0 4294967295 ECU_ADDRESS 0x1006C ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT main.static_counter "" UWORD IDENTITY 0 0 0 65535 ECU_ADDRESS 0x30270 ECU_ADDRESS_EXTENSION 1 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT + +/* Measurements for event 'task' */ +/begin MEASUREMENT task.counter "" ULONG IDENTITY 0 0 0 4294967295 ECU_ADDRESS 0x2006C ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task.static_counter "" UWORD IDENTITY 0 0 0 65535 ECU_ADDRESS 0x3026C ECU_ADDRESS_EXTENSION 1 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT + +/* Measurements for event 'foo' */ +/begin MEASUREMENT foo.counter "" ULONG IDENTITY 0 0 0 4294967295 ECU_ADDRESS 0x3006C ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT foo.static_counter "" UWORD IDENTITY 0 0 0 65535 ECU_ADDRESS 0x3026E ECU_ADDRESS_EXTENSION 1 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT foo.test_float "" FLOAT32_IEEE NO_COMPU_METHOD 0 0 -100000000000000000000000000000000 100000000000000000000000000000000 ECU_ADDRESS 0x30068 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT foo.test_double "" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -100000000000000000000000000000000 100000000000000000000000000000000 ECU_ADDRESS 0x30060 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT foo.test_uint8 "" UBYTE IDENTITY 0 0 0 255 ECU_ADDRESS 0x3005F ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT foo.test_uint16 "" UWORD IDENTITY 0 0 0 65535 ECU_ADDRESS 0x3005C ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT foo.test_uint32 "" ULONG IDENTITY 0 0 0 4294967295 ECU_ADDRESS 0x30058 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT foo.test_uint64 "" A_UINT64 IDENTITY 0 0 0 18446744073709552000 ECU_ADDRESS 0x30050 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT foo.test_int8 "" SBYTE IDENTITY 0 0 -128 127 ECU_ADDRESS 0x3004F ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT foo.test_int16 "" SWORD IDENTITY 0 0 -32768 32767 ECU_ADDRESS 0x3004C ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT foo.test_int32 "" SLONG IDENTITY 0 0 -2147483648 2147483647 ECU_ADDRESS 0x30048 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT foo.test_int64 "" A_UINT64 IDENTITY 0 0 0 18446744073709552000 ECU_ADDRESS 0x30040 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin INSTANCE foo.test_struct "" test_struct 0x30030 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 3 /end DAQ_EVENT /end IF_DATA /end INSTANCE + +/* Measurements without fixed event */ + +/begin GROUP Measurements "" ROOT /begin SUB_GROUP async mainloop task foo /end SUB_GROUP /end GROUP +/begin GROUP async "" /begin REF_MEASUREMENT global_running global_counter global_test_uint8 global_test_uint16 global_test_uint32 global_test_uint64 global_test_int8 global_test_int16 global_test_int32 global_test_int64 global_test_float global_test_double global_test_bool global_test_array global_test_struct XCPLITE__CASDD XcpCreateIndexedEvent.e /end REF_MEASUREMENT /end GROUP +/begin GROUP mainloop "" /begin REF_MEASUREMENT main.counter main.static_counter /end REF_MEASUREMENT /end GROUP +/begin GROUP task "" /begin REF_MEASUREMENT task.counter task.static_counter /end REF_MEASUREMENT /end GROUP +/begin GROUP foo "" /begin REF_MEASUREMENT foo.counter foo.static_counter foo.test_float foo.test_double foo.test_uint8 foo.test_uint16 foo.test_uint32 foo.test_uint64 foo.test_int8 foo.test_int16 foo.test_int32 foo.test_int64 foo.test_struct /end REF_MEASUREMENT /end GROUP + +/* Axis */ + +/* Characteristics */ +/begin INSTANCE params "" params 0x80010000 /end INSTANCE + +/* Characteristic and Axis Groups */ + +/begin GROUP Characteristics "" ROOT /begin SUB_GROUP params /end SUB_GROUP /end GROUP + +/end MODULE +/end PROJECT diff --git a/examples/no_a2l_demo/CANape/no_a2l_demo.cna b/examples/no_a2l_demo/CANape/no_a2l_demo.cna new file mode 100644 index 00000000..91b86c0b --- /dev/null +++ b/examples/no_a2l_demo/CANape/no_a2l_demo.cna @@ -0,0 +1,3863 @@ +[FILE_INFO] +Identification=CANape-Configuration-File +FileName=no_a2l_demo.cna +FileNameAbsolute=Y:\XCPlite-RainerZ\examples\no_a2l_demo\CANape\no_a2l_demo.cna +WorkingDirectory=Y:\XCPlite-RainerZ\examples\no_a2l_demo\CANape +ProjectId=07e9-000a-0002-000b-0018-002f-0000 +FileVersion=2200 +PrgVersion=Version 23.0.20.3237 +PrgDate=16.06.2025 +Description= +CreationTime=11:34 +CreationDate=10/02/2025 ; Month/Day/Year +ModificationTime=08:33 +ModificationDate=10/26/2025 ; Month/Day/Year +Protected=0 +CurrentWindowsACP=1252 + +[ANALYSISPROFILE_MDF_LIST] +Count=1 + +[AUDIO_COMMENT_DEVICE] +Name=AudioComment +Disabled=0 +Mode=5 +Rate=0 +ModeIsDefault=0 +ModeModule= +ModeName=4,"AudioCommentHotkey" +ArchivBy_1=Recorder +DisplayCount=0 + +[AVI_LIST] +Count=0 + +[CALIBRATION_LIST] +Count=9 + +[CALIBRATION_OBJECT_1] +EditOffset=1 +EditFactor=2 +EditFormat=2 +ShowWorkingPoint=0 +FollowWorkingPoint=0 +OverwriteWorkingPointInputX= +OverwriteWorkingPointInputY= +Module=no_a2l_demo +Name=$params$params.counter_max +StimMode=0 +IsFallback=0 + +[CALIBRATION_OBJECT_2] +EditOffset=1 +EditFactor=2 +EditFormat=2 +ShowWorkingPoint=0 +FollowWorkingPoint=0 +OverwriteWorkingPointInputX= +OverwriteWorkingPointInputY= +Module=no_a2l_demo +Name=$params$params.delay_us +StimMode=0 +IsFallback=0 + +[CALIBRATION_OBJECT_3] +EditOffset=1 +EditFactor=2 +EditFormat=2 +ShowWorkingPoint=0 +FollowWorkingPoint=0 +OverwriteWorkingPointInputX= +OverwriteWorkingPointInputY= +Module=no_a2l_demo +Name=$params$params.test_par_double +StimMode=0 +IsFallback=0 + +[CALIBRATION_OBJECT_4] +EditOffset=1 +EditFactor=2 +EditFormat=2 +ShowWorkingPoint=0 +FollowWorkingPoint=0 +OverwriteWorkingPointInputX= +OverwriteWorkingPointInputY= +Module=no_a2l_demo +Name=$params$params.test_par_enum +StimMode=0 +IsFallback=0 + +[CALIBRATION_OBJECT_5] +EditOffset=1 +EditFactor=2 +EditFormat=2 +ShowWorkingPoint=0 +FollowWorkingPoint=0 +OverwriteWorkingPointInputX= +OverwriteWorkingPointInputY= +Module=no_a2l_demo +Name=$params$$test_par_struct$params.test_par_struct.test_field_float +StimMode=0 +IsFallback=0 + +[CALIBRATION_OBJECT_6] +EditOffset=1 +EditFactor=2 +EditFormat=2 +ShowWorkingPoint=0 +FollowWorkingPoint=0 +OverwriteWorkingPointInputX= +OverwriteWorkingPointInputY= +Module=no_a2l_demo +Name=$params$$test_par_struct$params.test_par_struct.test_field_int16 +StimMode=0 +IsFallback=0 + +[CALIBRATION_OBJECT_7] +EditOffset=1 +EditFactor=2 +EditFormat=2 +ShowWorkingPoint=0 +FollowWorkingPoint=0 +OverwriteWorkingPointInputX= +OverwriteWorkingPointInputY= +Module=no_a2l_demo +Name=$params$$test_par_struct$params.test_par_struct.test_field_uint16 +StimMode=0 +IsFallback=0 + +[CALIBRATION_OBJECT_8] +EditOffset=1 +EditFactor=2 +EditFormat=2 +ShowWorkingPoint=0 +FollowWorkingPoint=0 +OverwriteWorkingPointInputX= +OverwriteWorkingPointInputY= +Module=no_a2l_demo +Name=$params$$test_par_struct$params.test_par_struct.test_field_uint8_array +Array=1 +Rows=1 +Columns=3 +StimMode=0 +IsFallback=0 + +[CALIBRATION_OBJECT_9] +EditOffset=1 +EditFactor=2 +EditFormat=2 +ShowWorkingPoint=0 +FollowWorkingPoint=0 +OverwriteWorkingPointInputX= +OverwriteWorkingPointInputY= +Module=no_a2l_demo +Name=$params$params.test_par_uint8_array +Array=1 +Rows=1 +Columns=10 +StimMode=0 +IsFallback=0 + +[CANAPE_ENVIRONMENT] +OBJECT_COUNT=0 + +[CUSTOM_AXIS_TEMPLATE_LIST] +COUNT=0 + +[CUSTOM_TIME_AXIS_TEMPLATE_LIST] +COUNT=0 + +[DATAFLOW_LIST] +Count=0 + +[DATAMINING] +AnalysisFilename=Analysis-{YEAR}-{MONTH}-{DAY}_{HOUR}-{MINUTE}-{SECOND} +AnalysisDirectory= +Comment= +OptionMaxFindingsPerFile=100 +OptionMaxFindings=1000 +OptionCSVListSeparator=0 +OptionCSVExport=0 +OptionMARMFExport=0 +OptionMARMFExtended=0 +OptionSuppressCASLRuntimeErrors=1 +FromTime=-1 +FromActive=0 +FromTimePartActive=0 +ToTime=-1 +ToActive=0 +ToTimePartActive=0 +MDFExtensions=.mf4;.mdf;.dat;.mat;.h5;.xls;.xlsx;.tdms;.marmf +Methods= +Signals= +AnalysisProfiles= +ConditionEpsilon=1e-09 +ConditionEpsilonRelative=0 + +[DATAMINING_FILE_LIST] +Count=0 + +[DISPLAY_PAGE_1] +Name= +Comment= +Maximized=0 +ActiveWindow=1 +IsReportPage=0 +TimeAxisSynchronized=0 +PrintLayout=Default +GUID=DISPLAY_PAGE_70f0db69-d4f3-442f-aff2-585894fc7b32 + +[DISPLAY_PAGE_1_DisplayElements] +Count=0 + +[DISPLAY_PAGES] +Count=1 +Active=0 + +[DYNAMIC_COLUMNS] +Count=0 + +[EVENT_1] +Type=4 +Disabled=0 +KeyCode=86 +Modifier=1 +Name=AudioCommentHotkey +Comment=Audio Comments recorded by the user during measurement +IsFallback=0 + +[EVENT_LIST] +Count=1 + +[FILE_COMMENT_TEMPLATE] +1="Name","" +2="Division","" +3="Project","" +4="Subject","" +5="Comment","" +Count=5 + +[FUNCTION_OBJECT_LIST] +count=0 + +[FUNCTIONS] +COUNT=0 +COUNT_LIBRARY=0 + +[GFX_VISUALIZATION] +EnableRendering=1 + +[JOB_LIST] +Count=0 + +[MASTER_CONFIG] +CommentCOUNT=0 +DisplayName=no_a2l_demo +ColorUsed=0 +SubConfigsCount=0 + +[MDF_LIST] +Count=0 + +[MEASUREMENT_LIST] +Count=31 +OfflineFileName=no_a2l_demo.mf4 +OfflineFileCount=1 +MeaCfgLabellistName= + +[MEASUREMENT_OBJECT_1] +Module=no_a2l_demo +Name=global_counter +Disabled=0 +Mode=2147483648 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=2 + +[MEASUREMENT_OBJECT_10] +Module=no_a2l_demo +Name=foo.test_int8 +Disabled=0 +Mode=2147483651 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_10_DISPLAY_1] +Window=5 +Index=5 +Color=16755455 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_0fe4ddf5-71d8-43f8-9614-1aa37e182d8b + +[MEASUREMENT_OBJECT_11] +Module=no_a2l_demo +Name=foo.test_int16 +Disabled=0 +Mode=2147483651 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_11_DISPLAY_1] +Window=5 +Index=8 +Color=8421631 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_d0ca19f3-a26a-4eb9-b920-c820598221d2 + +[MEASUREMENT_OBJECT_12] +Module=no_a2l_demo +Name=foo.test_int32 +Disabled=0 +Mode=2147483651 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_12_DISPLAY_1] +Window=5 +Index=7 +Color=43690 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_cce51fa3-609f-4ccc-8465-b54896541857 + +[MEASUREMENT_OBJECT_13] +Module=no_a2l_demo +Name=foo.test_int64 +Disabled=0 +Mode=2147483651 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_13_DISPLAY_1] +Window=5 +Index=6 +Color=11184640 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_3f2637ed-1197-4462-8f72-ecf810acece2 + +[MEASUREMENT_OBJECT_14] +Module=no_a2l_demo +Name=foo.test_uint8 +Disabled=0 +Mode=2147483651 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_14_DISPLAY_1] +Window=5 +Index=1 +Color=255 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_fab8d2f5-33ba-44a2-8d77-4ed3ec7f1114 + +[MEASUREMENT_OBJECT_15] +Module=no_a2l_demo +Name=foo.test_uint16 +Disabled=0 +Mode=2147483651 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_15_DISPLAY_1] +Window=5 +Index=4 +Color=11184895 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_33046ed8-1422-43ff-b20d-f3ecd8e33ec6 + +[MEASUREMENT_OBJECT_16] +Module=no_a2l_demo +Name=foo.test_uint32 +Disabled=0 +Mode=2147483651 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_16_DISPLAY_1] +Window=5 +Index=3 +Color=16755370 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_98f1c3e7-1249-4a8a-bc52-68963cd4370b + +[MEASUREMENT_OBJECT_17] +Module=no_a2l_demo +Name=foo.test_uint64 +Disabled=0 +Mode=2147483651 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_17_DISPLAY_1] +Window=5 +Index=2 +Color=11206570 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_1b4d97ed-914f-4e15-aab2-b1df8f51c11a + +[MEASUREMENT_OBJECT_18] +Components=0 +Module=no_a2l_demo +Name=$foo.test_struct$ +Disabled=0 +Mode=2147483651 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_18_DISPLAY_1] +Window=5 +Index=0 +Color=65280 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_46873a4e-7dd5-47cf-9d1f-5bdebd848d18 + +[MEASUREMENT_OBJECT_19] +Module=no_a2l_demo +Name=task.counter +Disabled=0 +Mode=2147483650 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=2 + +[MEASUREMENT_OBJECT_19_DISPLAY_1] +Window=5 +Index=14 +Color=65535 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_77404029-bd0b-4370-98d9-58e38b962f22 + +[MEASUREMENT_OBJECT_19_DISPLAY_2] +Window=3 +Index=0 +Color=65535 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=-400 +YMaxHome=1600 +YMin=-400 +YMax=1600 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=1 +SublMask=1 +MeaSublMask=3 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=1 +AxisTemplate= +GUID=DISPLAY_406e17e7-f494-46c4-859f-92e355567002 + +[MEASUREMENT_OBJECT_1_DISPLAY_1] +Window=3 +Index=6 +Color=65535 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=-400 +YMaxHome=1600 +YMin=-400 +YMax=1600 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=3 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=1 +AxisTemplate= +GUID=DISPLAY_f54f731f-fdd2-4734-bcb9-2067c6e3eaea + +[MEASUREMENT_OBJECT_1_DISPLAY_2] +Window=5 +Index=28 +Color=65535 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_f5908e73-266d-4f06-b830-396ad92c6629 + +[MEASUREMENT_OBJECT_2] +Components=0 +Module=no_a2l_demo +Name=$global_test_struct$ +Disabled=0 +Mode=2147483648 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_20] +Module=no_a2l_demo +Name=task.static_counter +Disabled=0 +Mode=2147483650 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=2 + +[MEASUREMENT_OBJECT_20_DISPLAY_1] +Window=5 +Index=13 +Color=33023 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_8fbe7fdb-5aa6-41cc-a15d-08a59e28f633 + +[MEASUREMENT_OBJECT_20_DISPLAY_2] +Window=3 +Index=1 +Color=33023 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=-400 +YMaxHome=1600 +YMin=-400 +YMax=1600 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=3 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=1 +AxisTemplate= +GUID=DISPLAY_e234b676-34f1-4a0c-ad3e-6652579052ed + +[MEASUREMENT_OBJECT_21] +Module=no_a2l_demo +Name=global_running +Disabled=0 +Mode=2147483648 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=0 + +[MEASUREMENT_OBJECT_22] +Module=no_a2l_demo +Name=global_test_double +Disabled=0 +Mode=2147483648 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_22_DISPLAY_1] +Window=5 +Index=26 +Color=28784 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_f7b0b003-497b-430d-af33-bbbc819c1f4f + +[MEASUREMENT_OBJECT_23] +Module=no_a2l_demo +Name=global_test_float +Disabled=0 +Mode=2147483648 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_23_DISPLAY_1] +Window=5 +Index=25 +Color=16755200 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_c85e458d-a499-4b19-8731-4c9407493e91 + +[MEASUREMENT_OBJECT_24] +Module=no_a2l_demo +Name=global_test_int16 +Disabled=0 +Mode=2147483648 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_24_DISPLAY_1] +Window=5 +Index=24 +Color=16711850 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_70a34032-37bc-4fcb-afcc-992588401040 + +[MEASUREMENT_OBJECT_25] +Module=no_a2l_demo +Name=global_test_int32 +Disabled=0 +Mode=2147483648 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_25_DISPLAY_1] +Window=5 +Index=23 +Color=21930 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_ef5464ef-46b6-45c8-9b95-28e16cfe7fbe + +[MEASUREMENT_OBJECT_26] +Module=no_a2l_demo +Name=global_test_int64 +Disabled=0 +Mode=2147483648 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_26_DISPLAY_1] +Window=5 +Index=22 +Color=11162965 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_13ff4fe0-0651-4dcd-817e-0cd7309aee5d + +[MEASUREMENT_OBJECT_27] +Module=no_a2l_demo +Name=global_test_int8 +Disabled=0 +Mode=2147483648 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_27_DISPLAY_1] +Window=5 +Index=21 +Color=16777215 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_a214dfc1-1888-40fb-88a6-4608302e478d + +[MEASUREMENT_OBJECT_28] +Module=no_a2l_demo +Name=global_test_uint16 +Disabled=0 +Mode=2147483648 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_28_DISPLAY_1] +Window=5 +Index=20 +Color=43520 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_154c9d41-d5dc-4fff-b3af-ad354a4dbc4d + +[MEASUREMENT_OBJECT_29] +Module=no_a2l_demo +Name=global_test_uint32 +Disabled=0 +Mode=2147483648 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_29_DISPLAY_1] +Window=5 +Index=19 +Color=204 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_6e7aa625-ce14-46f5-8fc7-50687ddce7d5 + +[MEASUREMENT_OBJECT_2_DISPLAY_1] +Window=5 +Index=29 +Color=43520 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_b356d395-ca4d-43fa-97ab-f38e7d5ebf48 + +[MEASUREMENT_OBJECT_3] +Module=no_a2l_demo +Name=global_test_array +Disabled=0 +Mode=2147483648 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +MeasureWorkingPoint=0 +ShowWorkingPoint=0 +FollowWorkingPoint=0 +OverwriteWorkingPointInputX= +OverwriteWorkingPointInputY= +Array=1 +Rows=1 +Columns=3 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=2 + +[MEASUREMENT_OBJECT_30] +Module=no_a2l_demo +Name=global_test_uint64 +Disabled=0 +Mode=2147483648 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_30_DISPLAY_1] +Window=5 +Index=18 +Color=28784 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_8d7731cf-97aa-499f-bbae-6bd153980385 + +[MEASUREMENT_OBJECT_31] +Module=no_a2l_demo +Name=global_test_uint8 +Disabled=0 +Mode=2147483648 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_31_DISPLAY_1] +Window=5 +Index=17 +Color=16755200 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_abdc8627-2666-4183-b630-cd1118dab567 + +[MEASUREMENT_OBJECT_3_DISPLAY_1] +Window=6 +Index=0 +Color=65535 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=255 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=1 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_9641b46a-641f-4fd2-8c34-11aa84f476c5 +MarkerSettingValid=1 + +[MEASUREMENT_OBJECT_3_DISPLAY_2] +Window=5 +Index=27 +Color=65535 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_fd26e113-4437-4e48-a888-986aa379af56 + +[MEASUREMENT_OBJECT_4] +Module=no_a2l_demo +Name=main.counter +Disabled=0 +Mode=2147483649 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=2 + +[MEASUREMENT_OBJECT_4_DISPLAY_1] +Window=3 +Index=4 +Color=255 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=-400 +YMaxHome=1600 +YMin=-400 +YMax=1600 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=3 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=1 +AxisTemplate= +GUID=DISPLAY_94befd39-434a-4cf9-b1fb-b0839fa94275 + +[MEASUREMENT_OBJECT_4_DISPLAY_2] +Window=5 +Index=16 +Color=255 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_f3079fc6-3235-4fa2-a15f-4e9c320c6ff8 + +[MEASUREMENT_OBJECT_5] +Module=no_a2l_demo +Name=foo.counter +Disabled=0 +Mode=2147483651 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=2 + +[MEASUREMENT_OBJECT_5_DISPLAY_1] +Window=5 +Index=11 +Color=16776960 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_21002e6f-acca-4b5f-9c89-e90092a0e584 + +[MEASUREMENT_OBJECT_5_DISPLAY_2] +Window=3 +Index=2 +Color=16776960 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=-400 +YMaxHome=1600 +YMin=-400 +YMax=1600 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=3 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=1 +AxisTemplate= +GUID=DISPLAY_dd922ee9-74c5-4ddb-92a3-bfd18dd788d4 + +[MEASUREMENT_OBJECT_6] +Module=no_a2l_demo +Name=foo.static_counter +Disabled=0 +Mode=2147483651 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=2 + +[MEASUREMENT_OBJECT_6_DISPLAY_1] +Window=5 +Index=12 +Color=16777215 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_b60b1ddf-be6d-42dc-ad35-63dbef59b42e + +[MEASUREMENT_OBJECT_6_DISPLAY_2] +Window=3 +Index=3 +Color=16777215 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=-400 +YMaxHome=1600 +YMin=-400 +YMax=1600 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=3 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=1 +AxisTemplate= +GUID=DISPLAY_33028dcd-c7aa-43f5-82df-2bd78ad1e65e + +[MEASUREMENT_OBJECT_7] +Module=no_a2l_demo +Name=main.static_counter +Disabled=0 +Mode=2147483649 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=2 + +[MEASUREMENT_OBJECT_7_DISPLAY_1] +Window=5 +Index=15 +Color=16711935 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_5b48ea33-d113-475c-a83d-5eed238527c3 + +[MEASUREMENT_OBJECT_7_DISPLAY_2] +Window=3 +Index=5 +Color=16711935 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=-400 +YMaxHome=1600 +YMin=-400 +YMax=1600 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=3 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=1 +AxisTemplate= +GUID=DISPLAY_91e83b83-115a-44ca-87fa-3f181020a9b2 + +[MEASUREMENT_OBJECT_8] +Module=no_a2l_demo +Name=foo.test_double +Disabled=0 +Mode=2147483651 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_8_DISPLAY_1] +Window=5 +Index=10 +Color=11206655 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_35a9f4d6-8b7e-4ef2-9f07-c51525840b00 + +[MEASUREMENT_OBJECT_9] +Module=no_a2l_demo +Name=foo.test_float +Disabled=0 +Mode=2147483651 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_DISPLAY_1] +Window=5 +Index=9 +Color=65450 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_bc0ad253-edd6-4cab-b9bc-36c72c501d04 + +[MEASUREMENT_OPTIONS] +RemainingRecordingTime=5000 +StopMeasurementOnRecorderStopped=0 +MaxTime=60000 +BufferSize=3600000 +TimeAxis=20000 +TimeLimited=0 +BufferSizeMem=5120 +ShowDialogForErrors=1 +SaveAllToDisplayBuffer=0 +SaveAllToDisplayBufferSignalLimit=1000 +TimeMode=0 +YMode=1 +PollingAlways=1 +PollingOnlyVisiblePage=0 +DrawLastValue=1 +UpdateCycleBar=100 +UpdateCycleVal=500 +UpdateCycleGraph=1000 +UpdateCycleArr=1000 +UpdateCycleCal=1000 +UpdateCycle2D3DMeasure=500 +UpdateCycleAx=100 +UpdateCycleWrt=100 +UpdateCycleTrace=100 +UpdateCycleTxt=1000 +TimeScrollSoft=0 +TimeScrollAt=100 +TimeScrollSoftAt=80 +TimeScrollBy=100 +FitTimeAxis=1 +FitYAxis=0 +AutoInsertComment=0 +OfflineFileSignals=1 +UpdateMeaInCalWindows=1 +MeaSaveParameterOnStart=0 +NoCpuThrottle=0 +ShowFileSignalsDuringMeasurement=0 +CreateInternalSignalsOnDemand=0 +LiveMeasurementRate=1000 +EditCommentAfterSaveSignals=1 +ShowRejectFileMsg=1 +MeasurementStopTimeoutMS=15000 +TaraMeasurementDurationMS=5000 +TaraMeasurementForerunMS=2000 +TaraMeasurementValueCount=5 +TaraSigmaCoefficient=0.3 +LinkOfflineFileSignalsAtOnce=0 +ParDeviceCount=0 +MeaSaveParameterFileName=Parameter +StopMeasurementOnEvent=0 +StopMeasurementEventsCount=0 +PauseMeasurementOnEvent=0 +PauseMeasurementEventsCount=0 +VmdmSaveToCloud=0 +VmdmMoveFile=0 +VmdmCollectionName= +VmdmCollectionId= +VmdmTenantName= +VmdmTenantId= +VmdmDescription= + +[MEASUREMENT_USERFILTER] +Count=0 + +[Module_no_a2l_demo] +EVENT_COUNT=4 +EVENT_CHANNEL_0=0x0000 +EVENT_CHANNEL_1=0x0001 +EVENT_CHANNEL_2=0x0002 +EVENT_CHANNEL_3=0x0003 +EVENT_CYCLE_0=100 +EVENT_CYCLE_1=0 +EVENT_CYCLE_2=0 +EVENT_CYCLE_3=0 +EVENT_SAMPLE_UNIT_0=7 +EVENT_SAMPLE_UNIT_1=3 +EVENT_SAMPLE_UNIT_2=3 +EVENT_SAMPLE_UNIT_3=3 +EVENT_MODE_0=4 +EVENT_MODE_1=4 +EVENT_MODE_2=4 +EVENT_MODE_3=4 +EVENT_PRIO_0=0 +EVENT_PRIO_1=0 +EVENT_PRIO_2=0 +EVENT_PRIO_3=0 +EVENT_MAX_DAQ_LIST_0=255 +EVENT_MAX_DAQ_LIST_1=255 +EVENT_MAX_DAQ_LIST_2=255 +EVENT_MAX_DAQ_LIST_3=255 +EVENT_NAME_0=async +EVENT_NAME_1=mainloop +EVENT_NAME_2=task +EVENT_NAME_3=foo +EVENT_MIN_CYCLE_TIME_CYCLE_0=0 +EVENT_MIN_CYCLE_TIME_CYCLE_1=0 +EVENT_MIN_CYCLE_TIME_CYCLE_2=0 +EVENT_MIN_CYCLE_TIME_CYCLE_3=0 +EVENT_MIN_CYCLE_TIME_UNIT_0=9 +EVENT_MIN_CYCLE_TIME_UNIT_1=9 +EVENT_MIN_CYCLE_TIME_UNIT_2=9 +EVENT_MIN_CYCLE_TIME_UNIT_3=9 +EVENT_MULTISAMPLES_0=0 +EVENT_MULTISAMPLES_1=0 +EVENT_MULTISAMPLES_2=0 +EVENT_MULTISAMPLES_3=0 +EVENT_DPM_SUPPORTED_0=0 +EVENT_DPM_SUPPORTED_1=0 +EVENT_DPM_SUPPORTED_2=0 +EVENT_DPM_SUPPORTED_3=0 +IGNORE_FIX_EVENTS=0 + +[OPTIONS] +WindowTextExtended=1 +WindowTextExtendedNew=1 +WindowSymbols=1 +GlobalCursor=0 +GlobalCursorTime=0 +GlobalCursorTimeNs=0 +MainWindowPos=1, 191, 102, 2997, 1767 ;cmd, x, y, w, h + +[PAR_COMMENT] +1="Name","" +2="Division","" +3="Project","" +4="Subject","" +5="Comment","" +Count=5 + +[POST_ANALYSIS_SCRIPT] +ScriptName= + +[POST_PROCESSEDFILE_SCRIPT] +ScriptName= + +[PRE_ANALYSIS_SCRIPT] +ScriptName= + +[PRE_PROCESSEDFILE_SCRIPT] +ScriptName= + +[PRINTING] +ScreenDPI=192 + +[PROFILE_MDF_OBJECT_1] +Unit= +Components=0 +TimeSeriesSaveMode=0 +OptionalMethod=0 +IsStatisticObject=0 +TimeObjectIndex=-1 +CycleDetection=0 +TimeGridNs=100000000 +TimeGrid=100 +TimeRangeObjectIndex=-1 +TimeRangeFromNs=0 +TimeRangeFrom=0 +TimeRangeObjectIndexTo=-1 +TimeRangeToNs=60000000000 +TimeRangeTo=60000 +DataMiningNoFindings=1 +DataMiningConditionOperator=3 +DataMiningConditionValue=0 +DataMiningComment= +DMAnalysisProfile= +DataMiningDescription= +Name=Global +Type=28 +TextFormula=Global +Disabled=0 +FromLibrary=1 +BurstSensitivity=10 +LPcount=0 +Count=0 +IsFallback=0 +DisplayCount=0 + +[RECORDER_1] +Name=Recorder +Type=0 +Comment= +FilenameTemplate=no_a2l_demo.mf4 +ConverterId= +TEXT_SEARCH= +RecStartStopEnabled=0 +RecStartStopEvent= +RecStartStopPostTimeMS=5000 +MaxSize=4294967295 +Enabled=1 +DefaultRecorder=1 +StartWithoutRecording=0 +SplitFileEnabled=0 +SplitFileTimeEnabled=0 +SplitFileSizeEnabled=1 +SplitFileEventEnabled=0 +SplitFileTimeS=3600 +SplitFileSizeBytes=104857600 +DataCompressionMode=0 +DataCompressionRate=6 +ForceFileSelection=0 +BuildFilenameAfterRecording=0 +TrgEnabled=0 +TrgStopRecording=0 +TrgStartStop=0 +TrgEnableMaxStopTime=0 +TrgExpandPostTime=0 +TrgSaveInOneFile=0 +TrgPreTimeMS=5000 +TrgPostTimeMS=5000 +TrgMaxStopTimeMS=5000 +TrgMaxBlockCount=1 +StartEvCount=0 +StopEvCount=0 +SplitEvCount=0 +BusLogNetworkKeyListCount=0 +IsFallback=0 +EditComment=1 +SaveMeasurementComment=1 +SaveCalibrationHistory=1 +SaveWriteWindowText=0 +SaveCalibrationCommands=0 +DataReduction=-1 +SaveParameterOnStart=0 +FlushMode=0 +AttachDeviceDatabase=1 +EmbedDeviceDatabase=0 +CompressDeviceDatabase=0 +vMDMCollectionId= +vMDMCollectionName= +vMDMTenantId= +vMDMTenantName= +vMDMUploadIndex=-1 +vMDMMoveFile=-1 + +[RECORDER_1_ATTACHMENT_OPTIONS] +AttachFileTime=0 +AttachFileMode=2 +MaxAttachFileCount=10 +MaxAttachFileSize=1000 +MaxTotalAttachSize=100000 +MaxLimitAttachFileCount=100 +MaxLimitAttachFileSize=10000 +MaxLimitTotalAttachSize=1000000 +AttachmentPathCount=0 + +[RECORDER_1_FILE_COMMENT] +1="Name","" +2="Division","" +3="Project","" +4="Subject","" +5="Comment","" +Count=5 + +[RECORDER_LIST] +RecorderCount=1 + +[REF_COLOR_FUNCTIONS] +Count=0 + +[SIGNAL_OBJECT_OFFLINE_OBJECTS] +Count=0 + +[SIGNALOBJECT_BINDINGS] +Count=0 + +[SIGNSELWND] +FocusID=2004 +ActiveTab=0 +FilterNodeID=All\Devices\no_a2l_demo +TreeExpand_0=@All +TreeExpand_1=All\Devices +TreeExpand_2=All\Devices\xcp_demo +TreeExpand_3=All\Devices\xcp_demo\xcp_demo_autodetect.a2l +TreeExpand_4=All\Devices\xcp_demo\Unknown variables +TreeExpand_5=All\Devices\xcp_demo\Unknown variables\calc_speed +TreeExpand_6=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events +TreeExpand_7=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\mainloop +TreeExpand_8=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Parameters +TreeExpand_9=All\Measurement list\All signals +TreeExpand_10=All\Measurement list\All signals\Dt +TreeExpand_11=All\Measurement list\All signals\Dt\System information +TreeExpand_12=All\Measurement list\no_a2l_demo +TreeExpand_13=All\Devices\no_a2l_demo\no_a2l_demo.a2l +TreeExpand_14=All\Devices\no_a2l_demo\no_a2l_demo.a2l\Software structure\params +TreeExpand_15=All\Devices\no_a2l_demo\no_a2l_demo.a2l\Measurements +TreeExpand_16=All\Devices\no_a2l_demo\no_a2l_demo.a2l\Software structure\params\params.test_par_struct +TreeExpand_17=All\Devices\no_a2l_demo\no_a2l_demo.a2l\Measurements\task +TreeExpand_18=All\Devices\no_a2l_demo\no_a2l_demo.a2l\Software structure\global_test_struct +TreeExpand_19=All\Devices\no_a2l_demo\no_a2l_demo.a2l\Measurements\foo +TreeExpand_20=All\Devices\no_a2l_demo\no_a2l_demo.a2l\Measurements\mainloop +TreeExpand_21=All\Devices\no_a2l_demo\no_a2l_demo.a2l\Measurements\async +TreeExpand_22=All\Devices\no_a2l_demo\no_a2l_demo.a2l\Software structure +TreeExpand_23=$All\Devices +TreeExpand_24=#All\Devices +TreeExpand_25=@All\Devices\no_a2l_demo +TreeExpand_26=$All\Devices\no_a2l_demo\no_a2l_demo.a2l\Measurements\foo\foo.test_int8 +TreeExpand_27=#All\Devices\no_a2l_demo\no_a2l_demo.a2l\Software structure\params\params.test_par_enum +TreeExpand_28=@All\Measurement list +TreeExpand_29=$All\Measurement list\All signals +TreeExpand_30=#All\Measurement list\no_a2l_demo\mainloop +TextSearchCaseSensitive=0 +TextSearchUseMode=1 +TextSearchSearchFullText=1 +TextSearchSearchInComments=0 +TextSearchSearchInDisplayNames=1 + +[VIRTUAL_MDF_LIST] +Count=0 + +[WINDOW_1] +ShowTime=1 +TimeWidth=180 +CopyColumnTitles=1 +ClearStart=0 +AbsoluteTimeEnabled=0 +ShowGridLines=0 +ColumnCount=3 +Column_0=21, 80 +Column_0_dpi96=21, 40 +Column_1=22, 180 +Column_1_dpi96=22, 90 +Column_2=23, 1300 +Column_2_dpi96=23, 650 +Title=Write +Type=128 +Comment=Write Window +Number=1 +GUID=WINDOW_a32111b5-a5a8-46cf-969d-65f6529bf1c6 +ScreenDPIinSection=192 +Position=0, 10, 988, 1600, 306 ;cmd, x, y, w, h +Position_dpi96=0, 5, 494, 800, 153 ;cmd, x, y, w, h +Position_Page01=0, 10, 988, 1600, 306 ;cmd, x, y, w, h +Position_Page01_dpi96=0, 5, 494, 800, 153 ;cmd, x, y, w, h +FloatingWindow=0 +ShowSignalComments=1 +DisplayMask=1 ; pages 1 + +[WINDOW_2] +ComponentCount=1 +Title= +Type=65536 +Comment=Multi view window +Number=2 +GUID=WINDOW_ec6bccc5-2628-4812-b9d0-f7dbe6892d37 +ScreenDPIinSection=192 +Position=0, 10, 12, 1600, 434 ;cmd, x, y, w, h +Position_dpi96=0, 5, 6, 800, 217 ;cmd, x, y, w, h +Position_Page01=0, 10, 12, 1600, 434 ;cmd, x, y, w, h +Position_Page01_dpi96=0, 5, 6, 800, 217 ;cmd, x, y, w, h +FloatingWindow=0 +ShowSignalComments=1 +DisplayMask=1 ; pages 1 + +[WINDOW_3] +XLen=30155 +XMin=0 +XMinNs=0 +XMax=22847 +XMaxNs=22847763534 +Grid=1 +Mark=1 +YValue=1 +ShowLegend=2 +ShowLegendHeader=1 +LegendPixWidth=448 +LegendPixWidth_dpi96=224 +LegendPixHeight=196 +LegendPixHeight_dpi96=98 +LegendPos=2 +Optimize=1 +Average=0 +ShowMinMax=1 +XYModeIndexP1=-1 +DisplayModeAuto=0 +XStart=0 +AbsoluteTimeMode=0 +YAxisWidth=138 +YAxisWidth_dpi96=69 +RightYAxisWidth=0 +RightYAxisWidth_dpi96=0 +ObjectMode=1 +DisplayMode=1 +ShowSignalMode=0 +AxisScrollPos2=0 +LegendScrollPos=0 +LegendShowLifeValues=1 +ShowXScrollbar=1 +ShowWholeTimeRange=0 +YAxisDynScaleEnabled=0 +YAxisDynScaleEnlarge=25 +TimeStickToZero=0 +XYModeRedrawEnabled=0 +MARKER_TIME_1=81594910265 +MARKER_TIME_2=81595965747 +OscilloscopeEnabled=0 +OsciEventCount=0 +EventCompareModeEnabled=0 +ObjectCount=0 +Title=Measurement Data +Type=1 +Comment=Graphic Window +Number=3 +GUID=WINDOW_0fe20030-6334-4bce-83c3-5f0cc0d43d4d +ScreenDPIinSection=192 +Position=0, 0, 0, 0, 0 ;cmd, x, y, w, h +Position_dpi96=0, 0, 0, 0, 0 ;cmd, x, y, w, h +Position_Page01=0, 0, 0, 0, 0 ;cmd, x, y, w, h +Position_Page01_dpi96=0, 0, 0, 0, 0 ;cmd, x, y, w, h +FloatingWindow=0 +JointIndex=2 +ShowSignalComments=1 +ComponentOrder=0 +ComponentSpace=100 +LEGEND_HSCROLL_POS=0 +LEGEND_SHARED_COLUMNS=1 +TimeAxisTemplate= +DisplayMask=1 ; pages 1 + +[WINDOW_3_LEG_COLUMNS] +ScreenDPIinSection=192 +COUNT=2 +COL_0=31, 340 +COL_0_dpi96=31, 170 +COL_1=1048578, 100 +COL_1_dpi96=1048578, 50 + +[WINDOW_4] +ProgID= +PROPERTIES_COUNT=1 +PROPERTY_1={"Version":"1.3.0.0","Configuration":{"ArrayWindowSubControlConfiguration":{"NumericGraphicCompositeWidth":797,"NumericGraphicCompositeHeight":237,"LegendCoordinatePoint":{"X":0,"Y":0},"LegendWidth":0,"LegendHeight":0,"LegendLayoutGroupSizeWidth":0,"LegendLayoutGroupSizeHeight":0,"NumericCoordinatePoint":{"X":1,"Y":24},"NumericWidth":795,"NumericHeight":212,"NumericLayoutGroupSizeWidth":795,"NumericLayoutGroupSizeHeight":212,"Intersection2DXWCoordinatePoint":{"X":0,"Y":0},"Intersection2DXWWidth":0,"Intersection2DXWHeight":0,"Intersection2DXWLayoutGroupSizeWidth":0,"Intersection2DXWLayoutGroupSizeHeight":0,"Intersection2DYWCoordinatePoint":{"X":0,"Y":0},"Intersection2DYWWidth":0,"Intersection2DYWHeight":0,"Intersection2DYWLayoutGroupSizeWidth":0,"Intersection2DYWLayoutGroupSizeHeight":0,"Graphic3DCoordinatePoint":{"X":0,"Y":0},"Graphic3DWidth":0,"Graphic3DHeight":0,"Graphic3DLayoutGroupSizeWidth":0,"Graphic3DLayoutGroupSizeHeight":0},"ShowCalibrationBar":true,"ShowHorizontalChartLines":false,"ShowVerticalChartLines":false,"NonSelectedIntersectionLineTransparency":0.100000024,"FocusedValueSymbol":"DEVICE:\"no_a2l_demo\":\"$params$params.counter_max\":P","ValueObjectConfigurations":[{"Symbol":"DEVICE:\"no_a2l_demo\":\"$params$params.counter_max\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":65535,"ValueAxisMinHome":0,"ValueAxisMaxHome":65535,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"no_a2l_demo\":\"$params$params.delay_us\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":4294967295,"ValueAxisMinHome":0,"ValueAxisMaxHome":4294967295,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"no_a2l_demo\":\"$params$params.test_par_double\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":-1.8446744073709552E+19,"ValueAxisMax":1.8446744073709552E+19,"ValueAxisMinHome":-1.8446744073709552E+19,"ValueAxisMaxHome":1.8446744073709552E+19,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"no_a2l_demo\":\"$params$params.test_par_enum\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":4294967295,"ValueAxisMinHome":0,"ValueAxisMaxHome":4294967295,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"no_a2l_demo\":\"$params$params.test_par_uint8_array\":P","SerializationColor":{"R":255,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[0],"NumericFormat":4,"AxisNumericFormats":[0],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":255,"ValueAxisMinHome":0,"ValueAxisMaxHome":255,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"no_a2l_demo\":\"$params$$test_par_struct$params.test_par_struct.test_field_float\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":-1.8446744073709552E+19,"ValueAxisMax":1.8446744073709552E+19,"ValueAxisMinHome":-1.8446744073709552E+19,"ValueAxisMaxHome":1.8446744073709552E+19,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"no_a2l_demo\":\"$params$$test_par_struct$params.test_par_struct.test_field_int16\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":-32768,"ValueAxisMax":32767,"ValueAxisMinHome":-32768,"ValueAxisMaxHome":32767,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"no_a2l_demo\":\"$params$$test_par_struct$params.test_par_struct.test_field_uint16\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":65535,"ValueAxisMinHome":0,"ValueAxisMaxHome":65535,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"no_a2l_demo\":\"$params$$test_par_struct$params.test_par_struct.test_field_uint8_array\":P","SerializationColor":{"R":0,"G":255,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[0],"NumericFormat":4,"AxisNumericFormats":[0],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":255,"ValueAxisMinHome":0,"ValueAxisMaxHome":255,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]}],"NumericGraphicControlPosition":0,"NumericGraphicControlSelectedTab":0,"GraphicControlPosition":0,"Height2DXControl":1,"Height2DYControl":1,"Height3DControl":2,"HeightNumericControl":1,"HeightChartControl":1,"HeightLegendControl":0.44999998807907104,"Width2DXControl":1,"Width2DYControl":1,"Width3DControl":2,"WidthNumericControl":2,"WidthChartControl":2,"WidthLegendControl":0.30000001192092896,"HeightValueControl":1,"WidthValueControl":1,"HeightNumericGraphicControl":1,"WidthNumericGraphicControl":1,"Height2DChartsControl":1,"Width2DChartsControl":1,"IsXAxisHeightSynchronizedBetweenCharts":true,"IsYAxisAreaWidthSynchronizedBetweenCharts":true,"SyncedXAxisHeight":NaN,"XWChartXAxisHeight":NaN,"YWChartXAxisHeight":NaN,"SyncedLeftAxisAreaWidth":NaN,"XWChartLeftAxisAreaWidth":NaN,"YWChartLeftAxisAreaWidth":NaN,"SyncedRightAxisAreaWidth":NaN,"XWChartRightAxisAreaWidth":NaN,"YWChartRightAxisAreaWidth":NaN,"LegendPosition":0,"LegendViewType":0,"LegendTableColumnAttributes":[{"TypeId":"1048594","Size":40},{"TypeId":"1048601","Size":45},{"TypeId":"31","Size":100},{"TypeId":"3","Size":250},{"TypeId":"16","Size":70},{"TypeId":"1048627","Size":100},{"TypeId":"1048631","Size":100},{"TypeId":"1048634","Size":100}],"LegendTabItemAttributes":[{"TypeId":"31","Size":100}],"FlipAxes":false,"AxisDisplayNameMode":3,"ReversedAxis":[false,false],"ShowUnits":false,"ShowObjectColor":true,"SortDescending":false,"SortAttributeId":null,"ShowWorkingPointHistory":false,"NumericViewValueObjectDisplayOption":1,"ValueColumnWidth":50,"ValueColumnWidthDouble":50.5,"ParameterGroup":"","ModuleName":"","GroupIsFunction":false,"NumericControlAxisAttributes":[],"NumericControlColumnAttributes":[{"TypeId":"31","Size":250.5}],"ChartViewValueObjectDisplayOption":1,"SerializationCameraPosition":{"X":1,"Y":1,"Z":-1},"SerializationCameraTarget":{"X":0,"Y":0.5,"Z":0},"IsValueAnnotationRotated":false,"EquidistantAxisPoints":false,"BarThickness":0.6,"WorkingPointMarker":0,"LinearWorkingPointInterpolation":true,"ShowAllIntersectionLines":false,"IsValueAxisIndependent":true,"TickLabelRotationAngle":-90,"IsTickLabelRotationEnabled":false,"IsTickLabelRightAligned":false,"ShowBoundarySurface":true,"ShowBoundarySurfaceGradient":false,"ShowCursorAsCrosshair":false,"XAxisAutoRange":true,"ValueAxisAutoRange":true,"ShowAllValueAxes":false,"DrawAxisBands":false,"CurrentColumnChartType":0,"SerializationCursorCrosshairColor":{"R":0,"G":0,"B":0,"A":255},"AlignBarToZero":true,"DefaultChartViewType":2,"AttributeColumnPositioning":1}} +OBJECTS_COUNT=9 +OBJECT_1=DEVICE:"no_a2l_demo":"$params$params.counter_max":P +OBJECT_2=DEVICE:"no_a2l_demo":"$params$params.delay_us":P +OBJECT_3=DEVICE:"no_a2l_demo":"$params$params.test_par_double":P +OBJECT_4=DEVICE:"no_a2l_demo":"$params$params.test_par_enum":P +OBJECT_5=DEVICE:"no_a2l_demo":"$params$params.test_par_uint8_array":P +OBJECT_6=DEVICE:"no_a2l_demo":"$params$$test_par_struct$params.test_par_struct.test_field_float":P +OBJECT_7=DEVICE:"no_a2l_demo":"$params$$test_par_struct$params.test_par_struct.test_field_int16":P +OBJECT_8=DEVICE:"no_a2l_demo":"$params$$test_par_struct$params.test_par_struct.test_field_uint16":P +OBJECT_9=DEVICE:"no_a2l_demo":"$params$$test_par_struct$params.test_par_struct.test_field_uint8_array":P +ObjectCount=9 +HiddenDisplayCount=0 +Title=Parameters +Type=137438953472 +Comment=Parameters +Number=4 +GUID=WINDOW_c343785a-09dc-4f21-9c3c-19ce11f4fbd3 +ScreenDPIinSection=192 +Position=0, 10, 460, 1600, 514 ;cmd, x, y, w, h +Position_dpi96=0, 5, 230, 800, 257 ;cmd, x, y, w, h +Position_Page01=0, 10, 460, 1600, 514 ;cmd, x, y, w, h +Position_Page01_dpi96=0, 5, 230, 800, 257 ;cmd, x, y, w, h +FloatingWindow=0 +ShowSignalComments=1 +DisplayMask=1 ; pages 1 + +[WINDOW_4_OBJECT_1] +Type=2 +Module=no_a2l_demo +Name=$params$params.counter_max +Window=4 +Index=0 +Color=0 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=65535 +YMin=0 +YMax=65535 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_f16698fe-cc00-496b-a784-78112e245839 + +[WINDOW_4_OBJECT_2] +Type=2 +Module=no_a2l_demo +Name=$params$params.delay_us +Window=4 +Index=1 +Color=0 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=4294967295 +YMin=0 +YMax=4294967295 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_850b1b56-e42c-4fc0-afe2-5fef43d1f836 + +[WINDOW_4_OBJECT_3] +Type=2 +Module=no_a2l_demo +Name=$params$params.test_par_double +Window=4 +Index=2 +Color=0 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=-1.84467440737e+19 +YMaxHome=1.84467440737e+19 +YMin=-1.84467440737e+19 +YMax=1.84467440737e+19 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_34ba7fc3-d898-4ab5-8695-7d85ca429e65 + +[WINDOW_4_OBJECT_4] +Type=2 +Module=no_a2l_demo +Name=$params$params.test_par_enum +Window=4 +Index=3 +Color=0 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=4294967295 +YMin=0 +YMax=4294967295 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_c3080ac2-5aaf-442a-bd5f-eeb65ea52912 + +[WINDOW_4_OBJECT_5] +Type=2 +Module=no_a2l_demo +Name=$params$params.test_par_uint8_array +Window=4 +Index=4 +Color=255 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=255 +YMin=0 +YMax=255 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_e720269f-a359-401a-9040-be23f4712b92 + +[WINDOW_4_OBJECT_6] +Type=2 +Module=no_a2l_demo +Name=$params$$test_par_struct$params.test_par_struct.test_field_float +Window=4 +Index=5 +Color=0 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=-1.84467440737e+19 +YMaxHome=1.84467440737e+19 +YMin=-1.84467440737e+19 +YMax=1.84467440737e+19 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_8ad5aecb-3e1f-4018-bcd4-614ec4308f56 + +[WINDOW_4_OBJECT_7] +Type=2 +Module=no_a2l_demo +Name=$params$$test_par_struct$params.test_par_struct.test_field_int16 +Window=4 +Index=6 +Color=0 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=-32768 +YMaxHome=32767 +YMin=-32768 +YMax=32767 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_4db71c25-6c9f-41a7-91dd-723dc28a384b + +[WINDOW_4_OBJECT_8] +Type=2 +Module=no_a2l_demo +Name=$params$$test_par_struct$params.test_par_struct.test_field_uint16 +Window=4 +Index=7 +Color=0 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=65535 +YMin=0 +YMax=65535 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_43aed001-0373-4596-a565-487823a5b989 + +[WINDOW_4_OBJECT_9] +Type=2 +Module=no_a2l_demo +Name=$params$$test_par_struct$params.test_par_struct.test_field_uint8_array +Window=4 +Index=8 +Color=65280 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=255 +YMin=0 +YMax=255 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_7e86824b-816a-4a10-9d62-abe65d129ef8 + +[WINDOW_5] +ObjectCount=0 +Expanded_Root_0_GUID=DISPLAY_b356d395-ca4d-43fa-97ab-f38e7d5ebf48 +Expanded_Root_0_Count=0 +Expanded_Root_1_GUID=DISPLAY_f5908e73-266d-4f06-b830-396ad92c6629 +Expanded_Root_1_Count=0 +Expanded_Root_2_GUID=DISPLAY_fd26e113-4437-4e48-a888-986aa379af56 +Expanded_Root_2_Count=0 +Expanded_Root_3_GUID=DISPLAY_f7b0b003-497b-430d-af33-bbbc819c1f4f +Expanded_Root_3_Count=0 +Expanded_Root_4_GUID=DISPLAY_c85e458d-a499-4b19-8731-4c9407493e91 +Expanded_Root_4_Count=0 +Expanded_Root_5_GUID=DISPLAY_70a34032-37bc-4fcb-afcc-992588401040 +Expanded_Root_5_Count=0 +Expanded_Root_6_GUID=DISPLAY_ef5464ef-46b6-45c8-9b95-28e16cfe7fbe +Expanded_Root_6_Count=0 +Expanded_Root_7_GUID=DISPLAY_13ff4fe0-0651-4dcd-817e-0cd7309aee5d +Expanded_Root_7_Count=0 +Expanded_Root_8_GUID=DISPLAY_a214dfc1-1888-40fb-88a6-4608302e478d +Expanded_Root_8_Count=0 +Expanded_Root_9_GUID=DISPLAY_154c9d41-d5dc-4fff-b3af-ad354a4dbc4d +Expanded_Root_9_Count=0 +Expanded_Root_10_GUID=DISPLAY_6e7aa625-ce14-46f5-8fc7-50687ddce7d5 +Expanded_Root_10_Count=0 +Expanded_Root_11_GUID=DISPLAY_8d7731cf-97aa-499f-bbae-6bd153980385 +Expanded_Root_11_Count=0 +Expanded_Root_12_GUID=DISPLAY_abdc8627-2666-4183-b630-cd1118dab567 +Expanded_Root_12_Count=0 +Expanded_Root_13_GUID=DISPLAY_f3079fc6-3235-4fa2-a15f-4e9c320c6ff8 +Expanded_Root_13_Count=0 +Expanded_Root_14_GUID=DISPLAY_5b48ea33-d113-475c-a83d-5eed238527c3 +Expanded_Root_14_Count=0 +Expanded_Root_15_GUID=DISPLAY_77404029-bd0b-4370-98d9-58e38b962f22 +Expanded_Root_15_Count=0 +Expanded_Root_16_GUID=DISPLAY_8fbe7fdb-5aa6-41cc-a15d-08a59e28f633 +Expanded_Root_16_Count=0 +Expanded_Root_17_GUID=DISPLAY_b60b1ddf-be6d-42dc-ad35-63dbef59b42e +Expanded_Root_17_Count=0 +Expanded_Root_18_GUID=DISPLAY_21002e6f-acca-4b5f-9c89-e90092a0e584 +Expanded_Root_18_Count=0 +Expanded_Root_19_GUID=DISPLAY_35a9f4d6-8b7e-4ef2-9f07-c51525840b00 +Expanded_Root_19_Count=0 +Expanded_Root_20_GUID=DISPLAY_bc0ad253-edd6-4cab-b9bc-36c72c501d04 +Expanded_Root_20_Count=0 +Expanded_Root_21_GUID=DISPLAY_d0ca19f3-a26a-4eb9-b920-c820598221d2 +Expanded_Root_21_Count=0 +Expanded_Root_22_GUID=DISPLAY_cce51fa3-609f-4ccc-8465-b54896541857 +Expanded_Root_22_Count=0 +Expanded_Root_23_GUID=DISPLAY_3f2637ed-1197-4462-8f72-ecf810acece2 +Expanded_Root_23_Count=0 +Expanded_Root_24_GUID=DISPLAY_0fe4ddf5-71d8-43f8-9614-1aa37e182d8b +Expanded_Root_24_Count=0 +Expanded_Root_25_GUID=DISPLAY_33046ed8-1422-43ff-b20d-f3ecd8e33ec6 +Expanded_Root_25_Count=0 +Expanded_Root_26_GUID=DISPLAY_98f1c3e7-1249-4a8a-bc52-68963cd4370b +Expanded_Root_26_Count=0 +Expanded_Root_27_GUID=DISPLAY_1b4d97ed-914f-4e15-aab2-b1df8f51c11a +Expanded_Root_27_Count=0 +Expanded_Root_28_GUID=DISPLAY_fab8d2f5-33ba-44a2-8d77-4ed3ec7f1114 +Expanded_Root_28_Count=0 +Expanded_Root_29_GUID=DISPLAY_46873a4e-7dd5-47cf-9d1f-5bdebd848d18 +Expanded_Root_29_Count=0 +Expanded_Root_Count=30 +Omit_Root_0_GUID=DISPLAY_b356d395-ca4d-43fa-97ab-f38e7d5ebf48 +Omit_Root_0_Count=0 +Omit_Root_1_GUID=DISPLAY_f5908e73-266d-4f06-b830-396ad92c6629 +Omit_Root_1_Count=0 +Omit_Root_2_GUID=DISPLAY_fd26e113-4437-4e48-a888-986aa379af56 +Omit_Root_2_Count=0 +Omit_Root_3_GUID=DISPLAY_f7b0b003-497b-430d-af33-bbbc819c1f4f +Omit_Root_3_Count=0 +Omit_Root_4_GUID=DISPLAY_c85e458d-a499-4b19-8731-4c9407493e91 +Omit_Root_4_Count=0 +Omit_Root_5_GUID=DISPLAY_70a34032-37bc-4fcb-afcc-992588401040 +Omit_Root_5_Count=0 +Omit_Root_6_GUID=DISPLAY_ef5464ef-46b6-45c8-9b95-28e16cfe7fbe +Omit_Root_6_Count=0 +Omit_Root_7_GUID=DISPLAY_13ff4fe0-0651-4dcd-817e-0cd7309aee5d +Omit_Root_7_Count=0 +Omit_Root_8_GUID=DISPLAY_a214dfc1-1888-40fb-88a6-4608302e478d +Omit_Root_8_Count=0 +Omit_Root_9_GUID=DISPLAY_154c9d41-d5dc-4fff-b3af-ad354a4dbc4d +Omit_Root_9_Count=0 +Omit_Root_10_GUID=DISPLAY_6e7aa625-ce14-46f5-8fc7-50687ddce7d5 +Omit_Root_10_Count=0 +Omit_Root_11_GUID=DISPLAY_8d7731cf-97aa-499f-bbae-6bd153980385 +Omit_Root_11_Count=0 +Omit_Root_12_GUID=DISPLAY_abdc8627-2666-4183-b630-cd1118dab567 +Omit_Root_12_Count=0 +Omit_Root_13_GUID=DISPLAY_f3079fc6-3235-4fa2-a15f-4e9c320c6ff8 +Omit_Root_13_Count=0 +Omit_Root_14_GUID=DISPLAY_5b48ea33-d113-475c-a83d-5eed238527c3 +Omit_Root_14_Count=0 +Omit_Root_15_GUID=DISPLAY_77404029-bd0b-4370-98d9-58e38b962f22 +Omit_Root_15_Count=0 +Omit_Root_16_GUID=DISPLAY_8fbe7fdb-5aa6-41cc-a15d-08a59e28f633 +Omit_Root_16_Count=0 +Omit_Root_17_GUID=DISPLAY_b60b1ddf-be6d-42dc-ad35-63dbef59b42e +Omit_Root_17_Count=0 +Omit_Root_18_GUID=DISPLAY_21002e6f-acca-4b5f-9c89-e90092a0e584 +Omit_Root_18_Count=0 +Omit_Root_19_GUID=DISPLAY_35a9f4d6-8b7e-4ef2-9f07-c51525840b00 +Omit_Root_19_Count=0 +Omit_Root_20_GUID=DISPLAY_bc0ad253-edd6-4cab-b9bc-36c72c501d04 +Omit_Root_20_Count=0 +Omit_Root_21_GUID=DISPLAY_d0ca19f3-a26a-4eb9-b920-c820598221d2 +Omit_Root_21_Count=0 +Omit_Root_22_GUID=DISPLAY_cce51fa3-609f-4ccc-8465-b54896541857 +Omit_Root_22_Count=0 +Omit_Root_23_GUID=DISPLAY_3f2637ed-1197-4462-8f72-ecf810acece2 +Omit_Root_23_Count=0 +Omit_Root_24_GUID=DISPLAY_0fe4ddf5-71d8-43f8-9614-1aa37e182d8b +Omit_Root_24_Count=0 +Omit_Root_25_GUID=DISPLAY_33046ed8-1422-43ff-b20d-f3ecd8e33ec6 +Omit_Root_25_Count=0 +Omit_Root_26_GUID=DISPLAY_98f1c3e7-1249-4a8a-bc52-68963cd4370b +Omit_Root_26_Count=0 +Omit_Root_27_GUID=DISPLAY_1b4d97ed-914f-4e15-aab2-b1df8f51c11a +Omit_Root_27_Count=0 +Omit_Root_28_GUID=DISPLAY_fab8d2f5-33ba-44a2-8d77-4ed3ec7f1114 +Omit_Root_28_Count=0 +Omit_Root_29_GUID=DISPLAY_46873a4e-7dd5-47cf-9d1f-5bdebd848d18 +Omit_Root_29_Count=0 +Omit_Root_Count=30 +Hide_Root_0_GUID=DISPLAY_b356d395-ca4d-43fa-97ab-f38e7d5ebf48 +Hide_Root_0_Count=0 +Hide_Root_1_GUID=DISPLAY_f5908e73-266d-4f06-b830-396ad92c6629 +Hide_Root_1_Count=0 +Hide_Root_2_GUID=DISPLAY_fd26e113-4437-4e48-a888-986aa379af56 +Hide_Root_2_Count=0 +Hide_Root_3_GUID=DISPLAY_f7b0b003-497b-430d-af33-bbbc819c1f4f +Hide_Root_3_Count=0 +Hide_Root_4_GUID=DISPLAY_c85e458d-a499-4b19-8731-4c9407493e91 +Hide_Root_4_Count=0 +Hide_Root_5_GUID=DISPLAY_70a34032-37bc-4fcb-afcc-992588401040 +Hide_Root_5_Count=0 +Hide_Root_6_GUID=DISPLAY_ef5464ef-46b6-45c8-9b95-28e16cfe7fbe +Hide_Root_6_Count=0 +Hide_Root_7_GUID=DISPLAY_13ff4fe0-0651-4dcd-817e-0cd7309aee5d +Hide_Root_7_Count=0 +Hide_Root_8_GUID=DISPLAY_a214dfc1-1888-40fb-88a6-4608302e478d +Hide_Root_8_Count=0 +Hide_Root_9_GUID=DISPLAY_154c9d41-d5dc-4fff-b3af-ad354a4dbc4d +Hide_Root_9_Count=0 +Hide_Root_10_GUID=DISPLAY_6e7aa625-ce14-46f5-8fc7-50687ddce7d5 +Hide_Root_10_Count=0 +Hide_Root_11_GUID=DISPLAY_8d7731cf-97aa-499f-bbae-6bd153980385 +Hide_Root_11_Count=0 +Hide_Root_12_GUID=DISPLAY_abdc8627-2666-4183-b630-cd1118dab567 +Hide_Root_12_Count=0 +Hide_Root_13_GUID=DISPLAY_f3079fc6-3235-4fa2-a15f-4e9c320c6ff8 +Hide_Root_13_Count=0 +Hide_Root_14_GUID=DISPLAY_5b48ea33-d113-475c-a83d-5eed238527c3 +Hide_Root_14_Count=0 +Hide_Root_15_GUID=DISPLAY_77404029-bd0b-4370-98d9-58e38b962f22 +Hide_Root_15_Count=0 +Hide_Root_16_GUID=DISPLAY_8fbe7fdb-5aa6-41cc-a15d-08a59e28f633 +Hide_Root_16_Count=0 +Hide_Root_17_GUID=DISPLAY_b60b1ddf-be6d-42dc-ad35-63dbef59b42e +Hide_Root_17_Count=0 +Hide_Root_18_GUID=DISPLAY_21002e6f-acca-4b5f-9c89-e90092a0e584 +Hide_Root_18_Count=0 +Hide_Root_19_GUID=DISPLAY_35a9f4d6-8b7e-4ef2-9f07-c51525840b00 +Hide_Root_19_Count=0 +Hide_Root_20_GUID=DISPLAY_bc0ad253-edd6-4cab-b9bc-36c72c501d04 +Hide_Root_20_Count=0 +Hide_Root_21_GUID=DISPLAY_d0ca19f3-a26a-4eb9-b920-c820598221d2 +Hide_Root_21_Count=0 +Hide_Root_22_GUID=DISPLAY_cce51fa3-609f-4ccc-8465-b54896541857 +Hide_Root_22_Count=0 +Hide_Root_23_GUID=DISPLAY_3f2637ed-1197-4462-8f72-ecf810acece2 +Hide_Root_23_Count=0 +Hide_Root_24_GUID=DISPLAY_0fe4ddf5-71d8-43f8-9614-1aa37e182d8b +Hide_Root_24_Count=0 +Hide_Root_25_GUID=DISPLAY_33046ed8-1422-43ff-b20d-f3ecd8e33ec6 +Hide_Root_25_Count=0 +Hide_Root_26_GUID=DISPLAY_98f1c3e7-1249-4a8a-bc52-68963cd4370b +Hide_Root_26_Count=0 +Hide_Root_27_GUID=DISPLAY_1b4d97ed-914f-4e15-aab2-b1df8f51c11a +Hide_Root_27_Count=0 +Hide_Root_28_GUID=DISPLAY_fab8d2f5-33ba-44a2-8d77-4ed3ec7f1114 +Hide_Root_28_Count=0 +Hide_Root_29_GUID=DISPLAY_46873a4e-7dd5-47cf-9d1f-5bdebd848d18 +Hide_Root_29_Count=0 +Hide_Root_Count=30 +Table_Expanded_Root_0_GUID=DISPLAY_b356d395-ca4d-43fa-97ab-f38e7d5ebf48 +Table_Expanded_Root_0_Count=0 +Table_Expanded_Root_1_GUID=DISPLAY_f5908e73-266d-4f06-b830-396ad92c6629 +Table_Expanded_Root_1_Count=0 +Table_Expanded_Root_2_GUID=DISPLAY_fd26e113-4437-4e48-a888-986aa379af56 +Table_Expanded_Root_2_Count=0 +Table_Expanded_Root_3_GUID=DISPLAY_f7b0b003-497b-430d-af33-bbbc819c1f4f +Table_Expanded_Root_3_Count=0 +Table_Expanded_Root_4_GUID=DISPLAY_c85e458d-a499-4b19-8731-4c9407493e91 +Table_Expanded_Root_4_Count=0 +Table_Expanded_Root_5_GUID=DISPLAY_70a34032-37bc-4fcb-afcc-992588401040 +Table_Expanded_Root_5_Count=0 +Table_Expanded_Root_6_GUID=DISPLAY_ef5464ef-46b6-45c8-9b95-28e16cfe7fbe +Table_Expanded_Root_6_Count=0 +Table_Expanded_Root_7_GUID=DISPLAY_13ff4fe0-0651-4dcd-817e-0cd7309aee5d +Table_Expanded_Root_7_Count=0 +Table_Expanded_Root_8_GUID=DISPLAY_a214dfc1-1888-40fb-88a6-4608302e478d +Table_Expanded_Root_8_Count=0 +Table_Expanded_Root_9_GUID=DISPLAY_154c9d41-d5dc-4fff-b3af-ad354a4dbc4d +Table_Expanded_Root_9_Count=0 +Table_Expanded_Root_10_GUID=DISPLAY_6e7aa625-ce14-46f5-8fc7-50687ddce7d5 +Table_Expanded_Root_10_Count=0 +Table_Expanded_Root_11_GUID=DISPLAY_8d7731cf-97aa-499f-bbae-6bd153980385 +Table_Expanded_Root_11_Count=0 +Table_Expanded_Root_12_GUID=DISPLAY_abdc8627-2666-4183-b630-cd1118dab567 +Table_Expanded_Root_12_Count=0 +Table_Expanded_Root_13_GUID=DISPLAY_f3079fc6-3235-4fa2-a15f-4e9c320c6ff8 +Table_Expanded_Root_13_Count=0 +Table_Expanded_Root_14_GUID=DISPLAY_5b48ea33-d113-475c-a83d-5eed238527c3 +Table_Expanded_Root_14_Count=0 +Table_Expanded_Root_15_GUID=DISPLAY_77404029-bd0b-4370-98d9-58e38b962f22 +Table_Expanded_Root_15_Count=0 +Table_Expanded_Root_16_GUID=DISPLAY_8fbe7fdb-5aa6-41cc-a15d-08a59e28f633 +Table_Expanded_Root_16_Count=0 +Table_Expanded_Root_17_GUID=DISPLAY_b60b1ddf-be6d-42dc-ad35-63dbef59b42e +Table_Expanded_Root_17_Count=0 +Table_Expanded_Root_18_GUID=DISPLAY_21002e6f-acca-4b5f-9c89-e90092a0e584 +Table_Expanded_Root_18_Count=0 +Table_Expanded_Root_19_GUID=DISPLAY_35a9f4d6-8b7e-4ef2-9f07-c51525840b00 +Table_Expanded_Root_19_Count=0 +Table_Expanded_Root_20_GUID=DISPLAY_bc0ad253-edd6-4cab-b9bc-36c72c501d04 +Table_Expanded_Root_20_Count=0 +Table_Expanded_Root_21_GUID=DISPLAY_d0ca19f3-a26a-4eb9-b920-c820598221d2 +Table_Expanded_Root_21_Count=0 +Table_Expanded_Root_22_GUID=DISPLAY_cce51fa3-609f-4ccc-8465-b54896541857 +Table_Expanded_Root_22_Count=0 +Table_Expanded_Root_23_GUID=DISPLAY_3f2637ed-1197-4462-8f72-ecf810acece2 +Table_Expanded_Root_23_Count=0 +Table_Expanded_Root_24_GUID=DISPLAY_0fe4ddf5-71d8-43f8-9614-1aa37e182d8b +Table_Expanded_Root_24_Count=0 +Table_Expanded_Root_25_GUID=DISPLAY_33046ed8-1422-43ff-b20d-f3ecd8e33ec6 +Table_Expanded_Root_25_Count=0 +Table_Expanded_Root_26_GUID=DISPLAY_98f1c3e7-1249-4a8a-bc52-68963cd4370b +Table_Expanded_Root_26_Count=0 +Table_Expanded_Root_27_GUID=DISPLAY_1b4d97ed-914f-4e15-aab2-b1df8f51c11a +Table_Expanded_Root_27_Count=0 +Table_Expanded_Root_28_GUID=DISPLAY_fab8d2f5-33ba-44a2-8d77-4ed3ec7f1114 +Table_Expanded_Root_28_Count=0 +Table_Expanded_Root_29_GUID=DISPLAY_46873a4e-7dd5-47cf-9d1f-5bdebd848d18 +Table_Expanded_Root_29_Count=0 +Table_Expanded_Root_Count=30 +Table_Expanded_PropId_0=65560 +Table_Expanded_PropId_Count=1 +Table_Component_Column_OriginalName_0=Name/type +Table_Component_Column_Id_0=0 +Table_Component_Column_Name_0=Name/type +Table_Component_Column_Width_0=230 +Table_Component_Column_Visible_0=1 +Table_Component_Column_OriginalName_1=Value +Table_Component_Column_Id_1=3145728 +Table_Component_Column_Name_1=Value +Table_Component_Column_Width_1=100 +Table_Component_Column_Visible_1=1 +Table_Component_Column_OriginalName_2=a +Table_Component_Column_Id_2=3145729 +Table_Component_Column_Name_2=a +Table_Component_Column_Width_2=100 +Table_Component_Column_Visible_2=1 +Table_Component_Column_OriginalName_3=b +Table_Component_Column_Id_3=3145730 +Table_Component_Column_Name_3=b +Table_Component_Column_Width_3=100 +Table_Component_Column_Visible_3=1 +Table_Component_Column_OriginalName_4=d +Table_Component_Column_Id_4=3145731 +Table_Component_Column_Name_4=d +Table_Component_Column_Width_4=100 +Table_Component_Column_Visible_4=1 +Table_Component_Column_OriginalName_5=f +Table_Component_Column_Id_5=3145732 +Table_Component_Column_Name_5=f +Table_Component_Column_Width_5=100 +Table_Component_Column_Visible_5=1 +Table_Component_Column_Count=6 +Table_Hidden_Columns_Count=0 +Table_Hide_Root_0_GUID=DISPLAY_b356d395-ca4d-43fa-97ab-f38e7d5ebf48 +Table_Hide_Root_0_Count=0 +Table_Hide_Root_1_GUID=DISPLAY_f5908e73-266d-4f06-b830-396ad92c6629 +Table_Hide_Root_1_Count=0 +Table_Hide_Root_2_GUID=DISPLAY_fd26e113-4437-4e48-a888-986aa379af56 +Table_Hide_Root_2_Count=0 +Table_Hide_Root_3_GUID=DISPLAY_f7b0b003-497b-430d-af33-bbbc819c1f4f +Table_Hide_Root_3_Count=0 +Table_Hide_Root_4_GUID=DISPLAY_c85e458d-a499-4b19-8731-4c9407493e91 +Table_Hide_Root_4_Count=0 +Table_Hide_Root_5_GUID=DISPLAY_70a34032-37bc-4fcb-afcc-992588401040 +Table_Hide_Root_5_Count=0 +Table_Hide_Root_6_GUID=DISPLAY_ef5464ef-46b6-45c8-9b95-28e16cfe7fbe +Table_Hide_Root_6_Count=0 +Table_Hide_Root_7_GUID=DISPLAY_13ff4fe0-0651-4dcd-817e-0cd7309aee5d +Table_Hide_Root_7_Count=0 +Table_Hide_Root_8_GUID=DISPLAY_a214dfc1-1888-40fb-88a6-4608302e478d +Table_Hide_Root_8_Count=0 +Table_Hide_Root_9_GUID=DISPLAY_154c9d41-d5dc-4fff-b3af-ad354a4dbc4d +Table_Hide_Root_9_Count=0 +Table_Hide_Root_10_GUID=DISPLAY_6e7aa625-ce14-46f5-8fc7-50687ddce7d5 +Table_Hide_Root_10_Count=0 +Table_Hide_Root_11_GUID=DISPLAY_8d7731cf-97aa-499f-bbae-6bd153980385 +Table_Hide_Root_11_Count=0 +Table_Hide_Root_12_GUID=DISPLAY_abdc8627-2666-4183-b630-cd1118dab567 +Table_Hide_Root_12_Count=0 +Table_Hide_Root_13_GUID=DISPLAY_f3079fc6-3235-4fa2-a15f-4e9c320c6ff8 +Table_Hide_Root_13_Count=0 +Table_Hide_Root_14_GUID=DISPLAY_5b48ea33-d113-475c-a83d-5eed238527c3 +Table_Hide_Root_14_Count=0 +Table_Hide_Root_15_GUID=DISPLAY_77404029-bd0b-4370-98d9-58e38b962f22 +Table_Hide_Root_15_Count=0 +Table_Hide_Root_16_GUID=DISPLAY_8fbe7fdb-5aa6-41cc-a15d-08a59e28f633 +Table_Hide_Root_16_Count=0 +Table_Hide_Root_17_GUID=DISPLAY_b60b1ddf-be6d-42dc-ad35-63dbef59b42e +Table_Hide_Root_17_Count=0 +Table_Hide_Root_18_GUID=DISPLAY_21002e6f-acca-4b5f-9c89-e90092a0e584 +Table_Hide_Root_18_Count=0 +Table_Hide_Root_19_GUID=DISPLAY_35a9f4d6-8b7e-4ef2-9f07-c51525840b00 +Table_Hide_Root_19_Count=0 +Table_Hide_Root_20_GUID=DISPLAY_bc0ad253-edd6-4cab-b9bc-36c72c501d04 +Table_Hide_Root_20_Count=0 +Table_Hide_Root_21_GUID=DISPLAY_d0ca19f3-a26a-4eb9-b920-c820598221d2 +Table_Hide_Root_21_Count=0 +Table_Hide_Root_22_GUID=DISPLAY_cce51fa3-609f-4ccc-8465-b54896541857 +Table_Hide_Root_22_Count=0 +Table_Hide_Root_23_GUID=DISPLAY_3f2637ed-1197-4462-8f72-ecf810acece2 +Table_Hide_Root_23_Count=0 +Table_Hide_Root_24_GUID=DISPLAY_0fe4ddf5-71d8-43f8-9614-1aa37e182d8b +Table_Hide_Root_24_Count=0 +Table_Hide_Root_25_GUID=DISPLAY_33046ed8-1422-43ff-b20d-f3ecd8e33ec6 +Table_Hide_Root_25_Count=0 +Table_Hide_Root_26_GUID=DISPLAY_98f1c3e7-1249-4a8a-bc52-68963cd4370b +Table_Hide_Root_26_Count=0 +Table_Hide_Root_27_GUID=DISPLAY_1b4d97ed-914f-4e15-aab2-b1df8f51c11a +Table_Hide_Root_27_Count=0 +Table_Hide_Root_28_GUID=DISPLAY_fab8d2f5-33ba-44a2-8d77-4ed3ec7f1114 +Table_Hide_Root_28_Count=0 +Table_Hide_Root_29_GUID=DISPLAY_46873a4e-7dd5-47cf-9d1f-5bdebd848d18 +Table_Hide_Root_29_Count=0 +Table_Hide_Root_Count=30 +ScreenDPIinSection=192 +ColumnCount=2 +Column_0=0, 416 +Column_0_dpi96=0, 208 +Column_1=65560, 172 +Column_1_dpi96=65560, 86 +RecommendedWidths_Count=4 +RecWidth_0=0, 416 +RecWidth_0_dpi96=0, 208 +RecWidth_1=3, 500 +RecWidth_1_dpi96=3, 250 +RecWidth_2=16, 140 +RecWidth_2_dpi96=16, 70 +RecWidth_3=65560, 172 +RecWidth_3_dpi96=65560, 86 +ScrollHorz=0 +ScrollVert=0 +TransposedScrollHorz=0 +TransposedScrollVert=0 +ReverseIndexes=0 +ShowSearchBar=1 +TableView=0 +TextSearchCaseSensitive=0 +TextSearchUseMode=1 +TextSearchSearchFullText=1 +TextSearchSearchInComments=0 +TextSearchSearchInDisplayNames=1 +FilterHistorySize=0 +Title=Measurement Data +Type=262144 +Comment=Data Window +Number=5 +GUID=WINDOW_59288106-87cd-427f-835e-a379c0370e7a +Position=0, 1624, 12, 610, 868 ;cmd, x, y, w, h +Position_dpi96=0, 812, 6, 305, 434 ;cmd, x, y, w, h +Position_Page01=0, 1624, 12, 610, 868 ;cmd, x, y, w, h +Position_Page01_dpi96=0, 812, 6, 305, 434 ;cmd, x, y, w, h +FloatingWindow=0 +ShowSignalComments=1 +DisplayMask=1 ; pages 1 + +[WINDOW_6] +Title= +Type=8192 +Comment=Map/Curve Window +Number=6 +GUID=WINDOW_a46d638d-9996-4450-996a-0ae57dfe4f27 +ScreenDPIinSection=192 +Position=0, 1624, 890, 610, 404 ;cmd, x, y, w, h +Position_dpi96=0, 812, 445, 305, 202 ;cmd, x, y, w, h +Position_Page01=0, 1624, 890, 610, 404 ;cmd, x, y, w, h +Position_Page01_dpi96=0, 812, 445, 305, 202 ;cmd, x, y, w, h +FloatingWindow=0 +ShowSignalComments=1 +2DCutSplitFactor=0.5 +2DCutVerticalSplitFactor=0.5 +AlignBottom=1 +AutoZoom=0 +BarReference=0 +BarSize=60 +BoundingBoxGradient=1 +CLineTransparency=75 +ColWidth=203 +CrosshairCursor=0 +CursorColor=0 +DataWindowAreaHorizontalSplittingFactor=0.433774834437 +DataWindowAreaLayout=2 +DisplayMask=1 ; pages 1 +Distance=14 +FirstColWidth=51 +FixAxis=0 +FixAxisMax=1 +FixAxisMin=0 +FlipX=0 +FlipY=0 +GridSideBarWide=0 +GridTitleHeight=10 +GridX=0 +GridY=0 +InterpolateWorkingPoint=0 +LastFocus=SpreadSheet +LeftCol=1 +LegendWindowSelectionMode=0 +LegendWindowSizeInPercent=0.228021978022 +LegendWindowVerticalSizeInPixel=83 +LwColumns= +LwScrollPos=H:0,V:0 +markerMaxX=0 +markerMaxY=0 +markerMinX=0 +markerMinY=0 +Mirror=1 +ObjectCount=0 +Phi=20 +Psi=4294967251 +ScreenDPI=192 +ShowAllCLines=0 +ShowBoundingBox=1 +ShowLegend=1 +ShowLegendWindowHeader=1 +ShowValueModificationWindow=0 +ShowWorkingPointHistory=0 +SideAndTopHeaderContent=0 +SplitFactor=0.666666666667 +SplittedDataWindowArea=1 +SplitVerticalFactor=0.666666666667 +TopRow=1 +WireModel=0 +WorkingPointColor=16711680 +WorkingPointMarker=0 +WorkingPointSize=100 + +[WINDOWS] +Count=6 + +[Y_COMMON_AXIS_1] +YMin=-400 +YMax=1600 +ValueFormat=3 +AxisTemplate= +LockScaling=0 +ID=1 +Comment= +Color=16711935 +Name=Counters +YMin-Home=-400 +YMax-Home=1600 +DisplayOnlyComment=0 +XAxisGroup=0 + +[Y_COMMON_AXIS_LIST] +Count=1 + diff --git a/examples/no_a2l_demo/CANape/no_a2l_demo.cnaxml b/examples/no_a2l_demo/CANape/no_a2l_demo.cnaxml new file mode 100644 index 00000000..fbd3aecd --- /dev/null +++ b/examples/no_a2l_demo/CANape/no_a2l_demo.cnaxml @@ -0,0 +1,207 @@ + + + + vSymbolExplorerID + + Visible + + + + + + true + Desktop + + + false + Horizontal + -1 + false + + + true + + LayoutGroup + + + WindowLayoutRoot + + + false + Vertical + -1 + false + 150 + 357 + + + true + + LayoutGroup + WindowLayoutRoot + + LeftLayoutGroup + + + 0,0,0,0 + 0,0 + 250,600 + 150 + 250 + + + LayoutPanel + LeftLayoutGroup + + Hidden + vSymbolExplorerID + + + false + Vertical + -1 + false + 0.88609* + + + true + + LayoutGroup + WindowLayoutRoot + + MiddleLayoutGroup + + + true + false + -1 + false + 300 + + + true + + false + TabbedGroup + MiddleLayoutGroup + + TopDocumentGroup + + + NoWhere + true + false + 0 + Top + + + true + + DocumentGroup + MiddleLayoutGroup + + PageArea + + + true + false + -1 + false + 300 + + + true + + false + TabbedGroup + MiddleLayoutGroup + + BottomDocumentGroup + + + false + Vertical + -1 + false + 300 + + + true + + LayoutGroup + WindowLayoutRoot + + RightLayoutGroup + + + Left + false + Vertical + -1 + false + 300 + + + true + + AutoHideGroup + + $AutoHideGroups + LeftAutoHideGroup + + + Right + false + Vertical + -1 + false + 300 + + + true + + AutoHideGroup + + $AutoHideGroups + RightAutoHideGroup + + + Top + false + Horizontal + -1 + false + 300 + + + true + + AutoHideGroup + + $AutoHideGroups + TopAutoHideGroup + + + Bottom + false + Horizontal + -1 + false + 300 + + + true + + AutoHideGroup + + $AutoHideGroups + BottomAutoHideGroup + + + false + false + false + 96.5,196.5 + + + \ No newline at end of file diff --git a/examples/no_a2l_demo/CANape/no_a2l_demo.out b/examples/no_a2l_demo/CANape/no_a2l_demo.out new file mode 100755 index 00000000..ff0821e8 Binary files /dev/null and b/examples/no_a2l_demo/CANape/no_a2l_demo.out differ diff --git a/examples/no_a2l_demo/CANape/no_a2l_demo.template.a2l b/examples/no_a2l_demo/CANape/no_a2l_demo.template.a2l new file mode 100644 index 00000000..697ab32d --- /dev/null +++ b/examples/no_a2l_demo/CANape/no_a2l_demo.template.a2l @@ -0,0 +1,245 @@ + +/* Created by xcp_client with ELF/DWARF information only, offline mode - 2025-10-17 10:24:32 */ +ASAP2_VERSION 1 71 +/begin PROJECT project_name "" +/begin HEADER "" VERSION "1.0" PROJECT_NO XCP_LITE_ACSDD /end HEADER + +/begin MODULE project_name "" + + /include "XCP_104.aml" + + /begin MOD_COMMON "" + BYTE_ORDER MSB_LAST + ALIGNMENT_BYTE 1 + ALIGNMENT_WORD 1 + ALIGNMENT_LONG 1 + ALIGNMENT_FLOAT16_IEEE 1 + ALIGNMENT_FLOAT32_IEEE 1 + ALIGNMENT_FLOAT64_IEEE 1 + ALIGNMENT_INT64 1 + /end MOD_COMMON + + /* Predefined conversion rule for bool */ + /begin COMPU_METHOD BOOL "" + TAB_VERB "%.0" "" COMPU_TAB_REF BOOL.table + /end COMPU_METHOD + /begin COMPU_VTAB BOOL.table "" TAB_VERB 2 + 0 "false" 1 "true" + /end COMPU_VTAB + + /* Predefined conversion rule identity with no phys unit and zero decimal places */ + /begin COMPU_METHOD IDENTITY "" + IDENTICAL "%.0" "" + /end COMPU_METHOD + + /* Predefined characteristic record layouts for standard types */ + /begin RECORD_LAYOUT BOOL FNC_VALUES 1 UBYTE ROW_DIR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT U8 FNC_VALUES 1 UBYTE ROW_DIR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT U16 FNC_VALUES 1 UWORD ROW_DIR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT U32 FNC_VALUES 1 ULONG ROW_DIR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT U64 FNC_VALUES 1 A_UINT64 ROW_DIR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT I8 FNC_VALUES 1 SBYTE ROW_DIR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT I16 FNC_VALUES 1 SWORD ROW_DIR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT I32 FNC_VALUES 1 SLONG ROW_DIR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT I64 FNC_VALUES 1 A_INT64 ROW_DIR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT F32 FNC_VALUES 1 FLOAT32_IEEE ROW_DIR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT F64 FNC_VALUES 1 FLOAT64_IEEE ROW_DIR DIRECT /end RECORD_LAYOUT + + /* Predefined axis record layouts for standard types */ + /begin RECORD_LAYOUT A_U8 AXIS_PTS_X 1 UBYTE INDEX_INCR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT A_U16 AXIS_PTS_X 1 UWORD INDEX_INCR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT A_U32 AXIS_PTS_X 1 ULONG INDEX_INCR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT A_U64 AXIS_PTS_X 1 A_UINT64 INDEX_INCR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT A_I8 AXIS_PTS_X 1 SBYTE INDEX_INCR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT A_I16 AXIS_PTS_X 1 SWORD INDEX_INCR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT A_I32 AXIS_PTS_X 1 SLONG INDEX_INCR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT A_I64 AXIS_PTS_X 1 A_INT64 INDEX_INCR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT A_F32 AXIS_PTS_X 1 FLOAT32_IEEE INDEX_INCR DIRECT /end RECORD_LAYOUT + /begin RECORD_LAYOUT A_F64 AXIS_PTS_X 1 FLOAT64_IEEE INDEX_INCR DIRECT /end RECORD_LAYOUT + + /* Predefined measurement and characteristic typedefs for standard types */ + /begin TYPEDEF_MEASUREMENT M_BOOL "" UBYTE BOOL 0 0 0 1 /end TYPEDEF_MEASUREMENT + /begin TYPEDEF_MEASUREMENT M_U8 "" UBYTE NO_COMPU_METHOD 0 0 0 255 /end TYPEDEF_MEASUREMENT + /begin TYPEDEF_MEASUREMENT M_U16 "" UWORD NO_COMPU_METHOD 0 0 0 65535 /end TYPEDEF_MEASUREMENT + /begin TYPEDEF_MEASUREMENT M_U32 "" ULONG NO_COMPU_METHOD 0 0 0 4294967295 /end TYPEDEF_MEASUREMENT + /begin TYPEDEF_MEASUREMENT M_U64 "" A_UINT64 NO_COMPU_METHOD 0 0 0 1e12 /end TYPEDEF_MEASUREMENT + /begin TYPEDEF_MEASUREMENT M_I8 "" SBYTE NO_COMPU_METHOD 0 0 -128 127 /end TYPEDEF_MEASUREMENT + /begin TYPEDEF_MEASUREMENT M_I16 "" SWORD NO_COMPU_METHOD 0 0 -32768 32767 /end TYPEDEF_MEASUREMENT + /begin TYPEDEF_MEASUREMENT M_I32 "" SLONG NO_COMPU_METHOD 0 0 -2147483648 2147483647 /end TYPEDEF_MEASUREMENT + /begin TYPEDEF_MEASUREMENT M_I64 "" A_INT64 NO_COMPU_METHOD 0 0 -1e12 1e12 /end TYPEDEF_MEASUREMENT + /begin TYPEDEF_MEASUREMENT M_F32 "" FLOAT32_IEEE NO_COMPU_METHOD 0 0 -1e12 1e12 /end TYPEDEF_MEASUREMENT + /begin TYPEDEF_MEASUREMENT M_F64 "" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e12 1e12 /end TYPEDEF_MEASUREMENT + /begin TYPEDEF_CHARACTERISTIC C_BOOL "" VALUE U8 0 BOOL 0 1 /end TYPEDEF_CHARACTERISTIC + /begin TYPEDEF_CHARACTERISTIC C_U8 "" VALUE U8 0 NO_COMPU_METHOD 0 255 /end TYPEDEF_CHARACTERISTIC + /begin TYPEDEF_CHARACTERISTIC C_U16 "" VALUE U16 0 NO_COMPU_METHOD 0 65535 /end TYPEDEF_CHARACTERISTIC + /begin TYPEDEF_CHARACTERISTIC C_U32 "" VALUE U32 0 NO_COMPU_METHOD 0 4294967295 /end TYPEDEF_CHARACTERISTIC + /begin TYPEDEF_CHARACTERISTIC C_U64 "" VALUE U64 0 NO_COMPU_METHOD 0 1e12 /end TYPEDEF_CHARACTERISTIC + /begin TYPEDEF_CHARACTERISTIC C_I8 "" VALUE I8 0 NO_COMPU_METHOD -128 127 /end TYPEDEF_CHARACTERISTIC + /begin TYPEDEF_CHARACTERISTIC C_I16 "" VALUE I16 0 NO_COMPU_METHOD -32768 32767 /end TYPEDEF_CHARACTERISTIC + /begin TYPEDEF_CHARACTERISTIC C_I32 "" VALUE I32 0 NO_COMPU_METHOD -2147483648 2147483647 /end TYPEDEF_CHARACTERISTIC + /begin TYPEDEF_CHARACTERISTIC C_I64 "" VALUE I64 0 NO_COMPU_METHOD -1e12 1e12 /end TYPEDEF_CHARACTERISTIC + /begin TYPEDEF_CHARACTERISTIC C_F64 "" VALUE F64 0 NO_COMPU_METHOD -1e12 1e12 /end TYPEDEF_CHARACTERISTIC + /begin TYPEDEF_CHARACTERISTIC C_F32 "" VALUE F32 0 NO_COMPU_METHOD -1e12 1e12 /end TYPEDEF_CHARACTERISTIC + +/begin MOD_PAR "" +/begin MEMORY_SEGMENT params "" DATA FLASH INTERN 0xBA00 56 -1 -1 -1 -1 -1 +/begin IF_DATA XCP + /begin SEGMENT 0 2 0 0 0 + /begin CHECKSUM XCP_ADD_44 MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM + /begin PAGE 0x0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_DONT_CARE /end PAGE + /begin PAGE 0x1 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_NOT_ALLOWED /end PAGE + /end SEGMENT +/end IF_DATA +/end MEMORY_SEGMENT +/end MOD_PAR + +/begin IF_DATA XCP + /begin PROTOCOL_LAYER + 0x104 1000 2000 0 0 0 0 0 252 1468 BYTE_ORDER_MSB_LAST ADDRESS_GRANULARITY_BYTE + OPTIONAL_CMD GET_COMM_MODE_INFO + OPTIONAL_CMD GET_ID + OPTIONAL_CMD SET_REQUEST + OPTIONAL_CMD SET_MTA + OPTIONAL_CMD UPLOAD + OPTIONAL_CMD SHORT_UPLOAD + OPTIONAL_CMD DOWNLOAD + OPTIONAL_CMD SHORT_DOWNLOAD + OPTIONAL_CMD GET_CAL_PAGE + OPTIONAL_CMD SET_CAL_PAGE + OPTIONAL_CMD COPY_CAL_PAGE + OPTIONAL_CMD BUILD_CHECKSUM + OPTIONAL_CMD GET_DAQ_RESOLUTION_INFO + OPTIONAL_CMD GET_DAQ_PROCESSOR_INFO + OPTIONAL_CMD FREE_DAQ + OPTIONAL_CMD ALLOC_DAQ + OPTIONAL_CMD ALLOC_ODT + OPTIONAL_CMD ALLOC_ODT_ENTRY + OPTIONAL_CMD SET_DAQ_PTR + OPTIONAL_CMD WRITE_DAQ + OPTIONAL_CMD GET_DAQ_LIST_MODE + OPTIONAL_CMD SET_DAQ_LIST_MODE + OPTIONAL_CMD START_STOP_SYNCH + OPTIONAL_CMD START_STOP_DAQ_LIST + OPTIONAL_CMD GET_DAQ_CLOCK + OPTIONAL_CMD WRITE_DAQ_MULTIPLE + OPTIONAL_CMD TIME_CORRELATION_PROPERTIES + OPTIONAL_CMD USER_CMD + OPTIONAL_LEVEL1_CMD GET_VERSION + /end PROTOCOL_LAYER + + /begin DAQ + DYNAMIC 0 3 0 OPTIMISATION_TYPE_DEFAULT ADDRESS_EXTENSION_FREE IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE 0xF8 OVERLOAD_INDICATION_PID + /begin TIMESTAMP_SUPPORTED + 0x1 SIZE_DWORD UNIT_1US TIMESTAMP_FIXED + /end TIMESTAMP_SUPPORTED + + /* compilation unit = 0, function = main, CFA = 128 */ + /begin EVENT "mainloop" "mainloop" 0 DAQ 0xFF 0 0 0 CONSISTENCY DAQ /end EVENT + /* compilation unit = 0, function = foo, CFA = 112 */ + /begin EVENT "foo" "foo" 1 DAQ 0xFF 0 0 0 CONSISTENCY DAQ /end EVENT + /* compilation unit = 0, function = task, CFA = 112 */ + /begin EVENT "task" "task" 2 DAQ 0xFF 0 0 0 CONSISTENCY DAQ /end EVENT + + /end DAQ + + /begin XCP_ON_TCP_IP 0x104 5555 ADDRESS "192.168.0.206" /end XCP_ON_TCP_IP + +/end IF_DATA + + +/* TypeDefs */ +/begin TYPEDEF_CHARACTERISTIC counter_max "" VALUE U16 0 IDENTITY 0 65535 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC delay_us "" VALUE U32 0 IDENTITY 0 4294967295 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC test_par_uint8_array "" VAL_BLK U8 0 IDENTITY 0 255 MATRIX_DIM 10 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC test_par_double "" VALUE F64 0 NO_COMPU_METHOD -100000000000000000000000000000000 100000000000000000000000000000000 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC test_par_bool "" VALUE U8 0 IDENTITY 0 255 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC test_par_enum "" VALUE U32 0 IDENTITY 0 4294967295 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC test_field_uint16 "" VALUE U16 0 IDENTITY 0 65535 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC test_field_int16 "" VALUE I16 0 IDENTITY -32768 32767 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC test_field_float "" VALUE F32 0 NO_COMPU_METHOD -100000000000000000000000000000000 100000000000000000000000000000000 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC test_field_uint8_array "" VAL_BLK U8 0 IDENTITY 0 255 MATRIX_DIM 3 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_STRUCTURE test_par_struct "" 12 + /begin STRUCTURE_COMPONENT test_field_uint16 test_field_uint16 0 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT test_field_int16 test_field_int16 2 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT test_field_float test_field_float 4 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT test_field_uint8_array test_field_uint8_array 8 /end STRUCTURE_COMPONENT +/end TYPEDEF_STRUCTURE +/begin TYPEDEF_STRUCTURE params "" 56 + /begin STRUCTURE_COMPONENT counter_max counter_max 0 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT delay_us delay_us 4 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT test_par_uint8_array test_par_uint8_array 8 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT test_par_double test_par_double 24 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT test_par_bool test_par_bool 32 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT test_par_enum test_par_enum 36 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT test_par_struct test_par_struct 40 /end STRUCTURE_COMPONENT +/end TYPEDEF_STRUCTURE +/begin TYPEDEF_MEASUREMENT a "" UWORD IDENTITY 0 0 0 65535 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT b "" SWORD IDENTITY 0 0 -32768 32767 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT f "" FLOAT32_IEEE NO_COMPU_METHOD 0 0 -100000000000000000000000000000000 100000000000000000000000000000000 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT d "" UBYTE IDENTITY 0 0 0 255 MATRIX_DIM 3 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_STRUCTURE test_struct "" 12 + /begin STRUCTURE_COMPONENT a a 0 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT b b 2 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT f f 4 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT d d 8 /end STRUCTURE_COMPONENT +/end TYPEDEF_STRUCTURE + + +/* Measurements */ + +/* Measurements for event 'mainloop' */ +/begin MEASUREMENT global_running "" UBYTE IDENTITY 0 0 0 255 ECU_ADDRESS 0x30200 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_counter "" UWORD IDENTITY 0 0 0 65535 ECU_ADDRESS 0x3026A /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_uint8 "" UBYTE IDENTITY 0 0 0 255 ECU_ADDRESS 0x3024E /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_uint16 "" UWORD IDENTITY 0 0 0 65535 ECU_ADDRESS 0x3024C /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_uint32 "" ULONG IDENTITY 0 0 0 4294967295 ECU_ADDRESS 0x30248 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_uint64 "" A_UINT64 IDENTITY 0 0 0 18446744073709552000 ECU_ADDRESS 0x30240 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_int8 "" SBYTE IDENTITY 0 0 -128 127 ECU_ADDRESS 0x3023E /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_int16 "" SWORD IDENTITY 0 0 -32768 32767 ECU_ADDRESS 0x3023C /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_int32 "" SLONG IDENTITY 0 0 -2147483648 2147483647 ECU_ADDRESS 0x30238 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_int64 "" A_INT64 IDENTITY 0 0 -9223372036854776000 9223372036854776000 ECU_ADDRESS 0x30230 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_float "" FLOAT32_IEEE NO_COMPU_METHOD 0 0 -100000000000000000000000000000000 100000000000000000000000000000000 ECU_ADDRESS 0x30228 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_double "" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -100000000000000000000000000000000 100000000000000000000000000000000 ECU_ADDRESS 0x30220 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_bool "" UBYTE IDENTITY 0 0 0 255 ECU_ADDRESS 0x3021B /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_test_array "" UBYTE IDENTITY 0 0 0 255 ECU_ADDRESS 0x30218 MATRIX_DIM 3 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin INSTANCE global_test_struct "" test_struct 0x30208 ECU_ADDRESS_EXTENSION 0 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end INSTANCE +/begin MEASUREMENT main.counter "" ULONG IDENTITY 0 0 0 4294967295 ECU_ADDRESS 0x6C ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT main.static_counter "" UWORD IDENTITY 0 0 0 65535 ECU_ADDRESS 0x30270 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT + +/* Measurements for event 'foo' */ +/begin MEASUREMENT foo.counter "" ULONG IDENTITY 0 0 0 4294967295 ECU_ADDRESS 0x1006C ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT foo.static_counter "" UWORD IDENTITY 0 0 0 65535 ECU_ADDRESS 0x3026E /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT foo.test_float "" FLOAT32_IEEE NO_COMPU_METHOD 0 0 -100000000000000000000000000000000 100000000000000000000000000000000 ECU_ADDRESS 0x10068 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT foo.test_double "" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -100000000000000000000000000000000 100000000000000000000000000000000 ECU_ADDRESS 0x10060 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT foo.test_uint8 "" UBYTE IDENTITY 0 0 0 255 ECU_ADDRESS 0x1005F ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT foo.test_uint16 "" UWORD IDENTITY 0 0 0 65535 ECU_ADDRESS 0x1005C ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT foo.test_uint32 "" ULONG IDENTITY 0 0 0 4294967295 ECU_ADDRESS 0x10058 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT foo.test_uint64 "" A_UINT64 IDENTITY 0 0 0 18446744073709552000 ECU_ADDRESS 0x10050 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT foo.test_int8 "" SBYTE IDENTITY 0 0 -128 127 ECU_ADDRESS 0x1004F ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT foo.test_int16 "" SWORD IDENTITY 0 0 -32768 32767 ECU_ADDRESS 0x1004C ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT foo.test_int32 "" SLONG IDENTITY 0 0 -2147483648 2147483647 ECU_ADDRESS 0x10048 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT foo.test_int64 "" A_UINT64 IDENTITY 0 0 0 18446744073709552000 ECU_ADDRESS 0x10040 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin INSTANCE foo.test_struct "" test_struct 0x10030 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 1 /end DAQ_EVENT /end IF_DATA /end INSTANCE + +/* Measurements for event 'task' */ +/begin MEASUREMENT task.counter "" ULONG IDENTITY 0 0 0 4294967295 ECU_ADDRESS 0x2006C ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task.static_counter "" UWORD IDENTITY 0 0 0 65535 ECU_ADDRESS 0x3026C /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT + +/* Measurements without fixed event */ + +/begin GROUP Measurements "" ROOT /begin SUB_GROUP mainloop foo task /end SUB_GROUP /end GROUP +/begin GROUP mainloop "" /begin REF_MEASUREMENT global_running global_counter global_test_uint8 global_test_uint16 global_test_uint32 global_test_uint64 global_test_int8 global_test_int16 global_test_int32 global_test_int64 global_test_float global_test_double global_test_bool global_test_array global_test_struct main.counter main.static_counter /end REF_MEASUREMENT /end GROUP +/begin GROUP foo "" /begin REF_MEASUREMENT foo.counter foo.static_counter foo.test_float foo.test_double foo.test_uint8 foo.test_uint16 foo.test_uint32 foo.test_uint64 foo.test_int8 foo.test_int16 foo.test_int32 foo.test_int64 foo.test_struct /end REF_MEASUREMENT /end GROUP +/begin GROUP task "" /begin REF_MEASUREMENT task.counter task.static_counter /end REF_MEASUREMENT /end GROUP + +/* Axis */ + +/* Characteristics */ +/begin INSTANCE params "" params 0xBA00 /end INSTANCE + +/* Characteristic and Axis Groups */ + +/begin GROUP Characteristics "" ROOT /begin SUB_GROUP params /end SUB_GROUP /end GROUP + +/end MODULE +/end PROJECT diff --git a/examples/no_a2l_demo/README.md b/examples/no_a2l_demo/README.md new file mode 100644 index 00000000..a090d0c2 --- /dev/null +++ b/examples/no_a2l_demo/README.md @@ -0,0 +1,161 @@ +# no_a2l_demo Demo + +Demonstrates XCPlite operation without runtime A2L generation. +This is experimental and work in progress. +The A2L creator and ELF/DWARF reader are quick and dirty code, partly AI generated, partly taken from DanielT a2ltool and from the VectorGrp Rust xcp-lite MC registry and A2L writer. +Not ready for production. +This is could be be the base for the planned ThreadX version of XCPlite. + +## The Build Time A2L Generation Concept + +### Current State/* Achievements + +Needs a XCPlite specific A2L writer and an ELF/DWARF reader in a separate tool at build time to: + +Step 1: A2L template generation: + +- Create an A2L template from ELF by detecting segments and events + Event and segment numbers are sequentially allocated an may not have the correct number + +Step 2: AL2 content generation: + +- Add parameters + The reference pages of all calibration parameters must be in addressable (4 GB - 32bit) global memory (.bss segment must be in this range) + Parameters must be in a structure, a calibration segment contains a single structure to assure a defined memory area and layout + Detect calibration parameters by the address of their reference page by naming convention and segment marker variable + XCP needs to be configure for absolute calibration segment addressing +- Add measurements + Global or static measurements must be in addressable (4 GB - 32bit) global memory (.bss segment must be in this range) + Takes all global, static and local variables into account in specified compilation units + Try to detect an appropriate fixed event for each variable by detecting a event trigger in the same function, if not use the unsafe standard async event as default event +- Add all types required as TYPEDEF_STRUCTURE + +Content generation step 2 can alternatively be done by hand, with any other A2L tool from Vector or open source + +Step 3: A2L Fix: + +- The remaining problem is the wrong event and segment numbers. The A2L file is consistent and complete, but the numbers do not match the runtime numbers + This can be fixed connecting to the target and querying segments and events + CANape already does this for events, but not for segments + The associating is done by namme + Problem is, that the XCP standard command GET_SEGMENT_INFO does not support segment names, only numbers + The is a small extension in XCPlite, which supports segment name query + + The proposal is, to simply integrate this into CANape and we are done .... + + Of course the whole process could be integrated into CANape, which would eliminate the need for an A2L file at all! + +### TODO List + +- The xcp_client tool is just proof of concept + Make it more flexible by adding a regular expression filter to the xcp_client tool, allow to specify a list of compilation units, ... +- Support relative calibration segment addressing + XCPlite can then be configured for relative calibration segment addressing as an option + As long as all reference pages are in a 4 GB addressable range, there is no benefit of relative addressing + By convention, parameters always use address extension 0 ACFDD or CAFDD + Currently we preliminary use AAFDD, because the XCPlite macros for event triggering so not detect the calibration segment addressing mode and CANape can not handle ACFDD +- Free standing parameters not in calibration segments + Not implemented yet, would probably need code macro annotations to detect them +- Make sure the event trigger location and the variable location have the same CFA (have not seen any violations yet) +- Heap measurement variables + The A2L creator can not handle heap variables yet + Needs to detect trg__AASD or trg__AASDD type and analyze the argument type of DaqTriggerEvent(), pointer to type +- Thread local variables + The A2L creator can not handle thread local variables yet + The DAQ capture method does not work for TLS, need a ApplXcpGetTlsBaseAddress() function, maybe introduce AAST type + Detect the base address of the TLS block, like it is done in ApplXcpGetBaseAddr()/xcp_get_base_addr() for the global variables + The DaqCapture macros as an alternative, does not work yet +- EPK + Detect if the target application has a EPK segment or not + Currently not EPK segment is generated, switched off in XCPlite +- Function parameters + Define a macro to declare function parameters as XCP_MEA, which sills them to stack + A2L Creator ELF reader parser must detect the function parameters with the CFA offset in the stack frame +- bool + The A2L creator must create a BOOL conversion rule and detect the size of the bool type +- Nested structures + Should work, if Daniel handles it correct, not tested yet +- Arrays of structures + Should work, if Daniel handles it correct, not tested yet +- Multiple source files not tested yet +- Support for C++, name spaces, classes, member functions, ... + +## Using the xcp_client tool + +The xcp_client tool from Rust xcp-lite can generate A2L file templates for XCPlite, for further processing with other tools. +It can update A2L files with all visible measurement and calibration variables. +To generate the correct (safe) event id and calibration segment number for the XCP protocol, the application can be run on the target to enable xcp_client to upload event and calibration segment information via XCP. +CANape currently only detects and corrects event ids, but not calibration segment numbers !!! + +Example: Create an A2L template from target: +(Note that the tool will connect to the target ECU to get event id and calibration memory segment number information) + +```bash +$xcp_client --dest-addr=$TARGET_HOST:5555 --tcp --create-a2l --a2l no_a2l_demo.a2l +``` + +Example: Create an A2L template from binary file with debug information: +(Note that the protocol information is only needed, to store it in the A2L file, the A2L file will be consistent, but the event ids and calibration memory segment numbers may be wrong!) + +```bash +$xcp_client --dest-addr=$TARGET_HOST:5555 --tcp --offline --elf no_a2l_demo.out --create-a2l --a2l no_a2l_demo.a2l +``` + +Example: Create measurement and calibration variables from a binary file with ELF/DWARF debug information and add variable from specified compilation units filtered by a regular expression + +```bash +$xcp_client --dest-addr=$TARGET_HOST:5555 --tcp --offline --elf no_a2l_demo.out --a2l no_a2l_demo.a2l +``` + +Refer to the xcp_client command line parameter description for details. + +The A2L file template can now be modified, extended and updated with CANape or any other A2L tool. +This approach works for global measurement variables and calibration parameters. +XCPlite must be configured for absolute calibration segment addressing (OPTION_CAL_SEGMENTS_ABS). + +To make local variables visible, they have to live on stack which is usually not true with optimized code. +There is a macro XCP_MEA to spill local variables to stack with minimal runtime overhead. + +Example: + +```bash +XCP_MEA uint8_t counter = 0; +``` + +. + +### Using Vector CANape + +Drop the template generated by xcp_client into CANape and create a new XCP on Ethernet device. +Enable access to the ELF file in the device configuration. +Use the A2L editor to add individual measurement parameters. +For calibration create an calibration instance for the complete calibration parameter struct. + +### Using Vector A2L-Toolset A2L-Creator to add measurement and calibration metadata + +The example code contains some A2L creator metadata annotation to add metadata such as calibration variable limits and physical units + +### Using Open Source a2ltool + +Example: +Add the calibration segment 'params' and the measurment variable 'counter' to the A2L template: + +```bash +a2ltool --update --measurement-regex "counter" --characteristic-regex "params" --elffile no_a2l_demo.out --enable-structures --output no_a2l_demo.out no_a2l_demo.out +``` + +### Demo + +The demo script create_a2l.sh automates the complete remote build and A2L generation process. + +```bash +./create_a2l.sh +``` + +### Work in progress + +This is currently experimental. +The approach will be used for the upcoming ThreadX demo with build time A2L generation. + +objdump -W no_a2l_demo.out +objdump --all-headers no_a2l_demo.out diff --git a/examples/no_a2l_demo/create_a2l.sh b/examples/no_a2l_demo/create_a2l.sh new file mode 100755 index 00000000..90a927fd --- /dev/null +++ b/examples/no_a2l_demo/create_a2l.sh @@ -0,0 +1,241 @@ +# !/bin/bash + +# A2L file creator for the no_a2l_demo example project + +# The script syncs the example project to the target, builds it there, runs it with XCP on Ethernet, +# downloads the ELF file to the local machine and creates an A2L file either with xcp_client or with a2ltool +# Prerequisites: +# - The target must be reachable via SSH and have rsync installed +# - The local machine must have rsync and scp installed +# - The local machine must have xcp_client and a2ltool compiled and available + + +#====================================================================================================================== +# Parameters +#====================================================================================================================== + +LOGFILE="examples/no_a2l_demo/CANape/no_a2l_demo.log" +#LOGFILE='/dev/stdout' +#LOGFILE="/dev/null" + +# Target A2L name to generate +# The A2L file is generated in the local machine CANape project directory (examples/no_a2l_demo/CANape/) +A2LFILE="examples/no_a2l_demo/CANape/no_a2l_demo.a2l" +A2LFILE_TEMPLATE="examples/no_a2l_demo/CANape/no_a2l_demo.template.a2l" + +# Path to ELF file in local machine CANape project folder +ELFFILE="examples/no_a2l_demo/CANape/no_a2l_demo.out" + +# Build type for target executable: Release, RelWithDebInfo or Debug +# RelWithDebInfo is default to demonstrate operation with with -O1 and NDEBUG +BUILD_TYPE="RelWithDebInfo" +# -O0 +#BUILD_TYPE="Debug" +# -O2 no debug symbols +#BUILD_TYPE="Release" + +# Release build will of course not work because debug symbols are removed + +# Optimization level >= -O1 keeps variables in registers whenever possible, so local variables cannot be measured in any case +# The most efficient solution to keep local variables measurable is to use the DaqCapture macro, another option is mark the variable with volatile ot with the provided macro XCP_MEA +# Debug mode is the least efficient but keeps all variables and stack frames intact +# So far, the solution works well with -O1 + + +# Connect to the target system possible +#ECU_ONLINE=true +ECU_ONLINE=true + +# Connect to the target XCP server possible +# Start the XCP server on the target in background and stop it after A2L creation +#XCP_ONLINE=true +XCP_ONLINE=true + +# Use the offline A2L creator and then update the A2L with the online A2L updater when the ECU is online +OFFLINE_A2L_CREATION_AND_FIX=false +#OFFLINE_A2L_CREATION_AND_FIX=true + +# Target connection details +TARGET_USER="rainer" +TARGET_HOST="192.168.0.206" +TARGET_PATH="~/XCPlite-RainerZ/build/no_a2l_demo.out" + +# Path to a2ltool executable +A2LTOOL="../a2ltool-RainerZ/target/debug/a2ltool" + +# Path to xcp_client tool executable +XCPCLIENT="../xcp-lite-RainerZ/target/debug/xcp_client" + + +# Run a simple measurement with the created A2L file to verify that measurements and characteristics are working +#TEST=true +TEST=false + +#====================================================================================================================== +# Sync Target, Build Application on Target, Download ELF, Start ECU, ... +#====================================================================================================================== + + +echo "========================================================================================================" +echo "A2L file creator for the no_a2l_demo example project" +echo "========================================================================================================" + +echo "Logging to $LOGFILE enabled" +echo "" > $LOGFILE + +#--------------------------------------------------- +if [ $ECU_ONLINE == true ]; then + +# Sync target +echo "Sync target ..." +rsync -avz --delete --exclude=build/ --exclude=.git/ --exclude="*.o" --exclude="*.out" --exclude="*.a" ./ rainer@192.168.0.206:~/XCPlite-RainerZ/ 1> /dev/null +if [ $? -ne 0 ]; then + echo "❌ FAILED: Rsync with target" + exit 1 +fi + + +# Build on target +echo "Build executable on Target ..." +ssh $TARGET_USER@$TARGET_HOST "cd ~/XCPlite-RainerZ && ./build.sh $BUILD_TYPE" 1> /dev/null +if [ $? -ne 0 ]; then + echo "❌ FAILED: Build on target" + exit 1 +fi + + +# Download the target executable for the local A2L generation process +echo "Downloading executable from target $TARGET_PATH to $ELFFILE ..." +scp $TARGET_USER@$TARGET_HOST:$TARGET_PATH $ELFFILE 1> /dev/null +if [ $? -ne 0 ]; then + echo "❌ FAILED: Download $TARGET_PATH" + exit 1 +fi +cp $ELFFILE ../xcp-lite-RainerZ/fixtures/no_a2l_demo.out + + +# Run target executable with XCP on Ethernet in background# +if [ $XCP_ONLINE == true ]; then +ssh $TARGET_USER@$TARGET_HOST "pkill -f no_a2l_demo.out" 1> /dev/null +echo "" +echo "Starting executable $TARGET_PATH on Target ..." +ssh $TARGET_USER@$TARGET_HOST "cd ~/XCPlite-RainerZ && $TARGET_PATH" & +SSH_PID=$! +sleep 2 +fi + +fi +# ECU_ONLINE +#--------------------------------------------------- + + +#====================================================================================================================== +# Create A2L file +#====================================================================================================================== + +# Create a A2L template offline with xcp_client by uploading memory segments and events via XCP + +#--------------------------------------------------- +# One step +if [ $OFFLINE_A2L_CREATION_AND_FIX == false ]; then + +echo "" +echo "========================================================================================================" +echo "Creating A2L file in online mode via XCP event and segment information and from XCPlite ELF file ..." +echo "========================================================================================================" +echo "" +$XCPCLIENT --log-level=3 --verbose=5 --dest-addr=$TARGET_HOST --tcp --elf $ELFFILE --a2l $A2LFILE --create-a2l >> $LOGFILE +if [ $? -ne 0 ]; then + echo "❌ FAILED: xcp_client returned error" + exit 1 +fi + +#--------------------------------------------------- +# Two step +else + + +echo "" +echo "========================================================================================================" +echo "Creating A2L file template from XCPlite ELF file ..." +echo "========================================================================================================" +echo "" +$XCPCLIENT --log-level=3 --verbose=0 --dest-addr=$TARGET_HOST --tcp --offline --elf $ELFFILE --create-a2l --a2l $A2LFILE_TEMPLATE >> $LOGFILE +if [ $? -ne 0 ]; then + echo "❌ FAILED: xcp_client returned error" + exit 1 +fi + +if [ $XCP_ONLINE == true ]; then + +cp $A2LFILE_TEMPLATE $A2LFILE +echo "" +echo "========================================================================================================" +echo "Fixing A2L file with XCP server information to correct event ids, segment numbers and IF_DATA IP address ..." +echo "========================================================================================================" +echo "" +$XCPCLIENT --log-level=3 --verbose=0 --dest-addr=$TARGET_HOST --tcp --elf $ELFFILE --a2l $A2LFILE --fix-a2l >> $LOGFILE +if [ $? -ne 0 ]; then + echo "❌ FAILED: xcp_client returned error" + exit 1 +fi + +fi + + +fi +# OFFLINE_A2L_CREATION_AND_FIX +#--------------------------------------------------- + + +#====================================================================================================================== +# Shutdown +#====================================================================================================================== + + +echo "" +echo "" + + +if [ $ECU_ONLINE == true ]; then +if [ $XCP_ONLINE == true ]; then + +# Stop target - kill SSH process if it still exists, then kill remote process by name +echo "Stopping target executable $SSH_PID on Target ..." +if kill -0 $SSH_PID 2>/dev/null; then + kill $SSH_PID +fi +# Also kill the remote process by name to be sure +# ssh rainer@192.168.0.206 "pkill -f no_a2l_demo.out" +ssh $TARGET_USER@$TARGET_HOST "pkill -f no_a2l_demo.out" 2>/dev/null || true +# Give target some time to shutdown +sleep 1 + +fi +fi + +echo "" +echo "✅ SUCCESS:" +echo "Created a new A2L file $A2LFILE" +echo "" + + +#====================================================================================================================== +# Test +#====================================================================================================================== + +if [ $TEST == true ]; then + + +echo "========================================================================================================" +echo "Test measurement" +echo "========================================================================================================" + +echo "Start a test measurement" +ssh $TARGET_USER@$TARGET_HOST "cd ~/XCPlite-RainerZ && $TARGET_PATH" & +sleep 1 +$XCPCLIENT --log-level=3 --dest-addr=$TARGET_HOST:5555 --tcp --a2l $A2LFILE --mea ".*" --time-ms 100 +ssh $TARGET_USER@$TARGET_HOST "pkill -f no_a2l_demo.out" + + +fi \ No newline at end of file diff --git a/examples/no_a2l_demo/src/main.c b/examples/no_a2l_demo/src/main.c new file mode 100644 index 00000000..1001d062 --- /dev/null +++ b/examples/no_a2l_demo/src/main.c @@ -0,0 +1,294 @@ +// no_a2l_demo xcplib example +// Demonstrates XCPlite operation without runtime A2L generation +// See ../README.md for details +// Requires manual or tool based XCPlite specific A2L file creation and update process + +#include // for assert +#include // for signal handling +#include // for bool +#include // for uintxx_t +#include // for printf +#include // for malloc, free +#include // for sprintf + +#include "xcplib.h" // for xcplib application programming interface + +// Internal xcplib includes to simplify multi platform support +#include "platform.h" // for platform abstraction for thread local, threads, mutex, sockets, sleepUs, ... + +static volatile bool global_running = true; +static void sig_handler(int sig) { global_running = false; } + +//----------------------------------------------------------------------------------------------------- +// XCP params + +#define OPTION_PROJECT_NAME "no_a2l_demo" // Project name, used to build the volatile and BIN file name +#define OPTION_PROJECT_EPK __TIME__ // EPK version string +#define OPTION_USE_TCP true // TCP or UDP +#define OPTION_SERVER_PORT 5555 // Port +#define OPTION_SERVER_ADDR {0, 0, 0, 0} // Bind addr, 0.0.0.0 = ANY +#define OPTION_QUEUE_SIZE 1024 * 16 // Size of the measurement queue in bytes, must be a multiple of 8 +#define OPTION_LOG_LEVEL 3 // Log level, 0 = no log, 1 = error, 2 = warning, 3 = info, 4 = debug + +//----------------------------------------------------------------------------------------------------- +// Demo calibration parameters + +// Calibration parameters structure +struct params { + uint16_t counter_max; // Maximum value for the counter + uint32_t delay_us; // Sleep time in microseconds for the main loop + + // Test parameters of various types + uint8_t test_par_uint8_array[10]; + double test_par_double; + bool test_par_bool; + enum { ENUM_0 = 0, ENUM_1 = 1, ENUM_2 = 2, ENUM_3 = 3 } test_par_enum; + struct test_par_struct { + uint16_t test_field_uint16; + int16_t test_field_int16; + float test_field_float; + uint8_t test_field_uint8_array[3]; + } test_par_struct; +}; + +// Example A2L Creator code parser annotation +/* + @@ ELEMENT = counter_max + @@ STRUCTURE = params + @@ DATA_TYPE = UWORD [0 ... 10000] + @@ END +*/ + +// Example A2L Creator linker map parser annotation +XCP_LIMITS(delay_us, 1.0, 10000.0); +XCP_UNIT(delay_us, "us"); + +// Default values (reference page, "FLASH") for the calibration parameters +const struct params params = {.counter_max = 1024, + .delay_us = 1000, + .test_par_double = 0.123456789, + .test_par_bool = true, + .test_par_enum = ENUM_2, + .test_par_uint8_array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, + .test_par_struct = {2, -2, 0.4f, {0, 1, 2}}}; + +//----------------------------------------------------------------------------------------------------- +// Demo global measurement values + +// Global measurement variable +// Modified in function foo +// Measuring it in main or task, is possible, but asynchronous and may give inconsistent results +uint16_t global_counter = 0; + +// Example A2L Creator code parser annotation +/* +@@ SYMBOL = global_counter +@@ DESCRIPTION = "Global counter incremented in function main synch with event mainloop" +@@ UNIT = "delay_us ticks" +@@ END +*/ + +// More global measurement variables of various basic and complex types +uint8_t global_test_uint8 = 8; +uint16_t global_test_uint16 = 16; +uint32_t global_test_uint32 = 32; +uint64_t global_test_uint64 = 64; +int8_t global_test_int8 = -8; +int16_t global_test_int16 = -16; +int32_t global_test_int32 = -32; +int64_t global_test_int64 = -64; +float global_test_float = 0.4f; +double global_test_double = 0.8; +bool global_test_bool = true; +uint8_t global_test_array[3] = {1, 2, 3}; +struct test_struct { + uint16_t a; + int16_t b; + float f; + uint8_t d[3]; +}; +struct test_struct global_test_struct = {1, -2, 0.3f, {1, 2, 3}}; + +//----------------------------------------------------------------------------------------------------- +// Demo thread + +#ifdef _WIN32 // Windows 32 or 64 bit +DWORD WINAPI task(LPVOID p) +#else +void *task(void *p) +#endif +{ + printf("Start thread %u ...\n", get_thread_id()); + + // Thread local measurement variables + static THREAD_LOCAL volatile uint16_t thread_local_counter = 0; + + // Static local scope measurement variable + volatile static uint16_t static_counter = 0; + + // Local measurement variable + volatile uint32_t counter = 0; + XCP_UNIT(counter, "ticks"); // Example for an A2L Creator annotation as code + + // Heap measurement variable + struct test_struct *volatile heap_struct = (struct test_struct *)malloc(sizeof(struct test_struct)); + assert(heap_struct); + heap_struct->a = 11; + heap_struct->b = -22; + heap_struct->f = 0.33f; + heap_struct->d[0] = 11; + heap_struct->d[1] = 22; + heap_struct->d[2] = 33; + + DaqCreateEvent(task); + + while (global_running) { + + counter = global_counter; + static_counter = global_counter; + thread_local_counter = global_counter; + + // @@@@ TODO: Thread local variables + // The A2L creator in xcp_client can not handle thread local variables yet + // The DAQ capture method does not work for TLS + // DaqCapture(task, thread_local_counter); + + DaqTriggerEventExt(task, heap_struct); + + sleepUs(1000); + } + + free(heap_struct); + return 0; +} + +//----------------------------------------------------------------------------------------------------- +// Demo function + +void foo(void) { + + // Static local scope measurement variable + volatile static uint16_t static_counter = 0; + + // Local variable + volatile uint32_t counter = 0; + + // More local measurement variables + volatile float test_float = 0.1f; + volatile double test_double = 0.2; + volatile uint8_t test_uint8 = 1; + volatile uint16_t test_uint16 = 2; + volatile uint32_t test_uint32 = 3; + volatile uint64_t test_uint64 = 4; + volatile int8_t test_int8 = -1; + volatile int16_t test_int16 = -2; + volatile int32_t test_int32 = -3; + volatile uint64_t test_int64 = 1; + volatile struct test_struct test_struct = {1, -2, 0.3f, {1, 2, 3}}; + // uint8_t test_array[3] = {1, 2, 3}; + + counter = global_counter; + static_counter = global_counter; + + DaqCreateAndTriggerEvent(foo); +} + +//----------------------------------------------------------------------------------------------------- +// Demo main + +int main(void) { + + printf("\nXCP on Ethernet no_a2l_demo C xcplib demo\n"); + + // Print build configuration +#ifdef NDEBUG + printf("Build: Release "); +#else + printf("Build: Debug "); +#endif +#ifdef __OPTIMIZE__ + printf("(__OPTIMIZE__ = %u)\n", __OPTIMIZE__); +#else + printf("(no optimization)\n"); +#endif + + signal(SIGINT, sig_handler); + signal(SIGTERM, sig_handler); + + // XCP: Set log level (1-error, 2-warning, 3-info, 4-show XCP commands) + XcpSetLogLevel(OPTION_LOG_LEVEL); + + // XCP: Initialize the XCP singleton, activate XCP, must be called before starting the server + // If XCP is not activated, the server will not start and all XCP instrumentation will be passive with minimal overhead + XcpInit(OPTION_PROJECT_NAME, OPTION_PROJECT_EPK, true); + + // XCP: Initialize the XCP Server + const uint8_t __addr[4] = OPTION_SERVER_ADDR; + if (!XcpEthServerInit(__addr, OPTION_SERVER_PORT, OPTION_USE_TCP, OPTION_QUEUE_SIZE)) { + return 1; + } + + // XCP: Create a calibration segment named 'params' for the calibration parameters in 'const struct params params' as reference page + CalSegCreate(params); + + // Create threads + THREAD __t1 = 0; + create_thread(&__t1, task); + + // Local measurement variable + volatile uint16_t counter = 0; + + // Local scope static measurement variable + volatile static uint16_t static_counter = 0; + + // XCP: Create a measurement event named "mainloop" + DaqCreateEvent(mainloop); + + // Mainloop + printf("Start main loop...\n"); + uint32_t delay_us; + while (global_running) { + // XCP: Lock the calibration parameter segment for consistent and safe access + // Calibration segment locking is wait-free, locks may be recursive, calibration segments may be shared among multiple threads + // Returns a pointer to the active page (working or reference) of the calibration segment + { + const struct params *p = CalSegLock(params); + + delay_us = p->delay_us; // Get the delay_us calibration value + + global_counter++; + if (global_counter > p->counter_max) { + global_counter = 0; + } + + // XCP: Unlock the calibration segment + CalSegUnlock(params); + } + + counter = global_counter; + static_counter = global_counter; + + // XCP: Trigger the measurement event "mainloop" + DaqTriggerEvent(mainloop); + + // Sleep for the specified delay parameter in microseconds, don't sleep with the XCP lock held to give the XCP client a chance to update params + sleepUs(delay_us); + + foo(); + + } // for (;;) + + // XCP: Force disconnect the XCP client + XcpDisconnect(); + + // Wait for the thread to stop + if (__t1) + join_thread(__t1); + // if (__t2) + // join_thread(__t2); + + // XCP: Stop the XCP server + XcpEthServerShutdown(); + + return 0; +} diff --git a/examples/struct_demo/CANape/CANape.ini b/examples/struct_demo/CANape/CANape.ini index c2d2aa35..66bfe31e 100644 --- a/examples/struct_demo/CANape/CANape.ini +++ b/examples/struct_demo/CANape/CANape.ini @@ -1,6 +1,6 @@ [!!!!!_CONSISTENCY_CHECK_START_SECTION_!!!!!] -GUID={12D7537B-7F2E-4AF5-99A6-6E6C5CA1D09C} +GUID={CDCFADE5-3010-4F11-8EB0-805B77FEF3A8} [FILE_INFO] Identification=CANape-Project-File @@ -14,8 +14,8 @@ PrgDate=16.06.2025 Description= CreationTime=21:03 CreationDate=07/07/2024 ; Month/Day/Year -ModificationTime=19:56 -ModificationDate=09/22/2025 ; Month/Day/Year +ModificationTime=15:55 +ModificationDate=11/07/2025 ; Month/Day/Year Protected=0 CurrentWindowsACP=1252 @@ -985,7 +985,7 @@ TREEX_dpi96=225 TREEY=1161 TREEY_dpi96=581 ACTIVEPANE=1 -SELECTED_TREENODE=Devices/xcp_demo_Device/Protocol +SELECTED_TREENODE=Networks/ETH_Network_Network/xcp_demo_Device/Protocol/Transport Layer FIRSTVISIBLE_TREENODE=Devices TREEEXPAND_COUNT=7 TREEEXPAND_0=Devices @@ -1260,7 +1260,7 @@ XCP_OPTIONAL_CMD_AVAILABLE_19=3 XCP_OPTIONAL_CMD_AVAILABLE_20=3 XCP_OPTIONAL_CMD_AVAILABLE_21=3 XCP_OPTIONAL_CMD_AVAILABLE_22=3 -XCP_OPTIONAL_CMD_AVAILABLE_23=2 +XCP_OPTIONAL_CMD_AVAILABLE_23=3 XCP_OPTIONAL_CMD_AVAILABLE_24=2 XCP_OPTIONAL_CMD_AVAILABLE_25=3 XCP_OPTIONAL_CMD_AVAILABLE_26=3 @@ -1276,8 +1276,8 @@ XCP_OPTIONAL_CMD_AVAILABLE_35=3 XCP_OPTIONAL_CMD_AVAILABLE_36=3 XCP_OPTIONAL_CMD_AVAILABLE_37=3 XCP_OPTIONAL_CMD_AVAILABLE_38=3 -XCP_OPTIONAL_CMD_AVAILABLE_39=2 -XCP_OPTIONAL_CMD_AVAILABLE_40=2 +XCP_OPTIONAL_CMD_AVAILABLE_39=3 +XCP_OPTIONAL_CMD_AVAILABLE_40=3 XCP_OPTIONAL_CMD_AVAILABLE_41=3 XCP_OPTIONAL_CMD_AVAILABLE_42=3 XCP_OPTIONAL_CMD_AVAILABLE_43=3 @@ -1305,9 +1305,9 @@ XCP_OPTIONAL_CMD_AUTO_LEARNING=1 XCP_OPTIONAL_SUB_CMD_AVAILABLE_0=3 XCP_OPTIONAL_SUB_CMD_AVAILABLE_1=2 XCP_OPTIONAL_SUB_CMD_AVAILABLE_2=2 -XCP_DAQ_PROPERTIES=0x15 +XCP_DAQ_PROPERTIES=0x13 XCP_DAQ_KEY_BYTE=0xC0 -XCP_DAQ_TIMESTAMP_MODE=0x3C +XCP_DAQ_TIMESTAMP_MODE=0x0C XCP_DAQ_TIMESTAMP_TICKS=1 XCP_MIN_DAQ=0 XCP_MAX_DAQ=0 @@ -1377,14 +1377,14 @@ BEG_CAL_SERVICE=0x1f1 END_CAL_SERVICE=0x2f1 TEST_CONNECTION_PERIOD=0 OVERRUN_HANDLING=0 -EVENT_COUNT=2 +EVENT_COUNT=3 EVENT_CHANNEL_0=0x0000 -EVENT_CYCLE_0=0 -EVENT_SAMPLE_UNIT_0=3 +EVENT_CYCLE_0=100 +EVENT_SAMPLE_UNIT_0=7 EVENT_MODE_0=4 EVENT_PRIO_0=0 EVENT_MAX_DAQ_LIST_0=255 -EVENT_NAME_0=event +EVENT_NAME_0=async EVENT_MULTISAMPLES_0=0 IGNORE_FIX_EVENTS=0 ECU_CYCLE_TIME=0 @@ -1395,8 +1395,8 @@ DETECT_SYNC_PULSE=0 GENERATE_SYNC_PULSE=0 TIME_CORR_MULTICAST=0 DAQ_TIMEOUT=0 -DAQ_RESUME_SUPPORTED=1 -DAQ_PRESCALER_SUPPORTED=0 +DAQ_RESUME_SUPPORTED=0 +DAQ_PRESCALER_SUPPORTED=1 DAQ_SINGLE_EVENT=0 DTO_SINGLE_EXT=0 DOUBLE_AS_FLOAT=0 @@ -1411,7 +1411,7 @@ PSEUDO_CAN_ID_START=2415919104 DSP_MODE=0 DAQ_LIST_AUTODETECT=1 DAQ_COUNT=0 -DAQ_CONFIG_ID=5270 +DAQ_CONFIG_ID=33178 DAQ_START_STOP_ALL_DISABLED=0 INIT_CAL_PAGE_SEGMENTWISE=0 CALRAM_CHECK_INITIAL_PAGE=1 @@ -1443,7 +1443,7 @@ STOP_DAQ_ON_CONNECT=1 CALRAM_WRITE_OPT=1 CALRAM_OFFLINE=1 CALRAM_FLASH_OFFSET=0x00000000 -CALRAM_CACHE=1 +CALRAM_CACHE=0 CALRAM_DEF_ACTION_READONLY=0 CALRAM_DEF_ACTION_TEMPREADONLY=0 CALRAM_DEF_ACTION_WRITABLE=0 @@ -1488,27 +1488,27 @@ FLASH_PROGRAM_RESET_DISABLED=0 FLASH_DISABLE_PAGE_SWITCHING=0 FLASH_DELETE_WHOLE_GROUP=0 CALPAGE_XCP_INITIAL_PAGE=0 -SET_CALPAGE_SEPARATLY=1 +SET_CALPAGE_SEPARATLY=0 CALPAGE_SINGLE_SEGMENT_SWITCHING=0 MEMORY_SEGMENTS_V8_COMPATIBILITY_MODE=0 FLASH_TOOL=Protocol FLASH_EXTERNAL_CONVERTER= FLASH_GRANULARITY=212 -CHECKSUM_TYPE=12 +CHECKSUM_TYPE=0 CHECKSUM_TYPE_INCA=0x0 -CHECKSUM_ENABLED=1 +CHECKSUM_ENABLED=0 CHECKSUM_DLL_NAME= CHECKSUM_MAX_BLOCKSIZE=65535 ENABLE_CHECKSUM_OUTPUT=0 CHECKSUM_TYPE_MAPPING_2=2 -SELECT_CAL_PAGE=1 +SELECT_CAL_PAGE=0 INIT_CAL_PAGE=0 RAM_PAGE_ID=0x0 ROM_PAGE_ID=0x1 RAM_PAGE_ID_EXT=0x0 ROM_PAGE_ID_EXT=0x0 FLASH_PAGE_ADDRESS_MAPPING_ENABLED=1 -MEMORY_SEGMENT_COUNT=1 +MEMORY_SEGMENT_COUNT=0 MEMORY_SEGMENT_NAME_1=epk MEMORY_SEGMENT_TYPE_1=FLASH,DATA,INTERN MEMORY_SEGMENT_SIZE_1=0x00000015 @@ -1541,14 +1541,14 @@ CALRAM_SECTOR_ADDR_EXT_2=0x00 CALRAM_SECTOR_ATTRIBUTE_2=0x00000000 CALRAM_SECTOR_FLASH_OFFSET_2=0x00000000 CALRAM_SECTOR_ADDRESS_MAPPING_2= -CALRAM_SECTOR_COUNT=1 +CALRAM_SECTOR_COUNT=0 FLASH_SECTOR_COUNT=0 FLASH_GROUP_COUNT=0 TRANSPORT_LAYER_INSTANCE_NAME= PROTOCOL_TYPE=4 PACKET_CTR=0 TRANSPORT_LAYER_VERSION=260 -HOST=192.168.8.133 +HOST=192.168.0.101 PORT=5555 LOCAL_PORT=0 TRANSPORT_LAYER_PROTOCOL=0 @@ -1621,7 +1621,7 @@ EVENT_SAMPLE_UNIT_1=3 EVENT_MODE_1=4 EVENT_PRIO_1=0 EVENT_MAX_DAQ_LIST_1=255 -EVENT_NAME_1=event_heap +EVENT_NAME_1=event EVENT_MULTISAMPLES_1=0 EVENT_MIN_CYCLE_TIME_CYCLE_1=0 EVENT_MIN_CYCLE_TIME_UNIT_1=9 @@ -1632,7 +1632,7 @@ EVENT_SAMPLE_UNIT_2=3 EVENT_MODE_2=4 EVENT_PRIO_2=0 EVENT_MAX_DAQ_LIST_2=255 -EVENT_NAME_2=event_global +EVENT_NAME_2=event_heap EVENT_MULTISAMPLES_2=0 EVENT_MIN_CYCLE_TIME_CYCLE_2=0 EVENT_MIN_CYCLE_TIME_UNIT_2=9 @@ -2791,64 +2791,6 @@ WindowWidth_dpi96=594 WindowHeight=322 WindowHeight_dpi96=322 -[DEVICE_EXPLORER_COLUMNLIST_CHANNELS] -ScreenDPIinSection=192 -ColumnCount=4 -Column_0=0, 306 -Column_0_dpi96=0, 153 -Column_1=1245185, 132 -Column_1_dpi96=1245185, 66 -Column_2=1245186, 66 -Column_2_dpi96=1245186, 33 -Column_3=1245187, 106 -Column_3_dpi96=1245187, 53 -ColumnIdSort=-1 -SortUpward=1 - -[DEVICE_EXPLORER_COLUMNLIST_DEVICES] -ScreenDPIinSection=192 -ColumnCount=10 -Column_0=34, 96 -Column_0_dpi96=34, 48 -Column_1=0, 460 -Column_1_dpi96=0, 230 -Column_2=131078, 160 -Column_2_dpi96=131078, 80 -Column_3=131103, 100 -Column_3_dpi96=131103, 50 -Column_4=131079, 100 -Column_4_dpi96=131079, 50 -Column_5=262145, 240 -Column_5_dpi96=262145, 120 -Column_6=131085, 200 -Column_6_dpi96=131085, 100 -Column_7=131080, 240 -Column_7_dpi96=131080, 120 -Column_8=131081, 160 -Column_8_dpi96=131081, 80 -Column_9=196609, 100 -Column_9_dpi96=196609, 50 -ColumnIdSort=-1 -SortUpward=1 - -[DEVICE_EXPLORER_COLUMNLIST_NETWORKS] -ScreenDPIinSection=192 -ColumnCount=6 -Column_0=34, 64 -Column_0_dpi96=34, 32 -Column_1=0, 304 -Column_1_dpi96=0, 152 -Column_2=983041, 192 -Column_2_dpi96=983041, 96 -Column_3=983042, 530 -Column_3_dpi96=983042, 265 -Column_4=983043, 252 -Column_4_dpi96=983043, 126 -Column_5=983044, 300 -Column_5_dpi96=983044, 150 -ColumnIdSort=-1 -SortUpward=1 - [COLOR_SCHEME_LIST] COLOR_SCHEME0=COLOR_SCHEMEUSER_DEFINED SCHEMES_COUNT=1 @@ -2984,14 +2926,72 @@ MODE=12 VALUE_COUNT=0 HISTORY_COUNT=0 +[DEVICE_EXPLORER_COLUMNLIST_CHANNELS] +ScreenDPIinSection=192 +ColumnCount=4 +Column_0=0, 306 +Column_0_dpi96=0, 153 +Column_1=1245185, 132 +Column_1_dpi96=1245185, 66 +Column_2=1245186, 66 +Column_2_dpi96=1245186, 33 +Column_3=1245187, 106 +Column_3_dpi96=1245187, 53 +ColumnIdSort=-1 +SortUpward=1 + +[DEVICE_EXPLORER_COLUMNLIST_DEVICES] +ScreenDPIinSection=192 +ColumnCount=10 +Column_0=34, 96 +Column_0_dpi96=34, 48 +Column_1=0, 460 +Column_1_dpi96=0, 230 +Column_2=131078, 160 +Column_2_dpi96=131078, 80 +Column_3=131103, 100 +Column_3_dpi96=131103, 50 +Column_4=131079, 100 +Column_4_dpi96=131079, 50 +Column_5=262145, 240 +Column_5_dpi96=262145, 120 +Column_6=131085, 200 +Column_6_dpi96=131085, 100 +Column_7=131080, 240 +Column_7_dpi96=131080, 120 +Column_8=131081, 160 +Column_8_dpi96=131081, 80 +Column_9=196609, 100 +Column_9_dpi96=196609, 50 +ColumnIdSort=-1 +SortUpward=1 + +[DEVICE_EXPLORER_COLUMNLIST_NETWORKS] +ScreenDPIinSection=192 +ColumnCount=6 +Column_0=34, 64 +Column_0_dpi96=34, 32 +Column_1=0, 304 +Column_1_dpi96=0, 152 +Column_2=983041, 192 +Column_2_dpi96=983041, 96 +Column_3=983042, 530 +Column_3_dpi96=983042, 265 +Column_4=983043, 252 +Column_4_dpi96=983043, 126 +Column_5=983044, 300 +Column_5_dpi96=983044, 150 +ColumnIdSort=-1 +SortUpward=1 + [MEASUREMENT_0] FileId=Measurement1 -MeasurementId=0aee7021-6e66-4970-bd0d-475d7070685d +MeasurementId=4f4c8535-b1a1-4aac-ab0f-28b212dd3716 LoadMeasurementSetting=3 [SIGNSELWND_DYNAMIC_COLUMNS] Count=0 [~~~~~_CONSISTENCY_CHECK_END_SECTION_~~~~~] -GUID={12D7537B-7F2E-4AF5-99A6-6E6C5CA1D09C} +GUID={CDCFADE5-3010-4F11-8EB0-805B77FEF3A8} diff --git a/examples/struct_demo/CANape/xcp_demo.cna b/examples/struct_demo/CANape/xcp_demo.cna index 52f57a15..c2956dd7 100644 --- a/examples/struct_demo/CANape/xcp_demo.cna +++ b/examples/struct_demo/CANape/xcp_demo.cna @@ -10,8 +10,8 @@ PrgDate=16.06.2025 Description= CreationTime=21:05 CreationDate=07/07/2024 ; Month/Day/Year -ModificationTime=19:56 -ModificationDate=09/22/2025 ; Month/Day/Year +ModificationTime=15:53 +ModificationDate=11/07/2025 ; Month/Day/Year Protected=0 CurrentWindowsACP=1252 @@ -130,7 +130,7 @@ Count=0 Name=Measurement and Calibration Demo Comment= Maximized=0 -ActiveWindow=6 +ActiveWindow=7 IsReportPage=0 TimeAxisSynchronized=0 PrintLayout=Default @@ -209,39 +209,13187 @@ MeaCfgLabellistName= [MEASUREMENT_OBJECT_1] Module=xcp_demo -Name=local_counter +Name=counter +Disabled=0 +Mode=2147483649 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder1 +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_10] +Components=0 +Module=xcp_demo +Name=$heap_struct2$ +Disabled=0 +Mode=2147483650 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder1 +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_10_DISPLAY_1] +Window=5 +Index=0 +Color=16777215 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_3ed3f6e9-ae0c-49be-af00-fb64977e9939 + +[MEASUREMENT_OBJECT_1_DISPLAY_1] +Window=2 +Index=1 +Color=16744576 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=65535 +YMin=0 +YMax=65535 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=3 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=1 +AxisTemplate= +GUID=DISPLAY_8f489186-62a8-497f-afef-e1bcf40c6cbd + +[MEASUREMENT_OBJECT_2] +Module=xcp_demo +Name=static_counter Disabled=0 Mode=2147483648 +Rate=1 +ModeIsDefault=0 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder1 +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_2_DISPLAY_1] +Window=2 +Index=0 +Color=16777215 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=65535 +YMin=0 +YMax=65535 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=1 +SublMask=1 +MeaSublMask=3 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=1 +AxisTemplate= +GUID=DISPLAY_d644a337-88be-47d7-b473-8c28df4cf97e + +[MEASUREMENT_OBJECT_3] +Components=0 +Module=xcp_demo +Name=$local_struct1$ +Disabled=0 +Mode=2147483649 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder1 +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_3_DISPLAY_1] +Window=5 +Index=7 +Color=65280 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_b9fa0758-955b-40c9-ac65-334f00d4840c + +[MEASUREMENT_OBJECT_4] +Components=0 +Module=xcp_demo +Name=$local_struct1_array$ +Disabled=0 +Mode=2147483649 Rate=0 ModeIsDefault=1 Row=0 -Column=0 -MeaReferenced=1 -ArchivBy_1=Recorder1 -IsFallback=0 -HasManagedDisplay=0 -DisplayCount=1 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder1 +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_4_DISPLAY_1] +Window=5 +Index=6 +Color=255 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_92b97e00-ea80-4f2c-b4a5-fa7f3a34bea9 + +[MEASUREMENT_OBJECT_5] +Components=0 +Module=xcp_demo +Name=$local_struct2$ +Disabled=0 +Mode=2147483649 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder1 +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_5_DISPLAY_1] +Window=5 +Index=5 +Color=65535 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_ddd2618d-c1c8-43e0-8b42-17070a825d44 + +[MEASUREMENT_OBJECT_6] +Components=0 +Module=xcp_demo +Name=$static_struct1$ +Disabled=0 +Mode=2147483648 +Rate=1 +ModeIsDefault=0 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder1 +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_6_DISPLAY_1] +Window=5 +Index=4 +Color=16776960 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_c9292d48-a2c9-48c3-b12c-3dfe0d142eac + +[MEASUREMENT_OBJECT_7] +Components=0 +Module=xcp_demo +Name=$static_struct1_array$ +Disabled=0 +Mode=2147483648 +Rate=1 +ModeIsDefault=0 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder1 +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_7_DISPLAY_1] +Window=5 +Index=3 +Color=16711935 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_62100522-5e70-4ede-b014-a1e9a2f3dd7a + +[MEASUREMENT_OBJECT_8] +Components=0 +Module=xcp_demo +Name=$static_struct2$ +Disabled=0 +Mode=2147483648 +Rate=1 +ModeIsDefault=0 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder1 +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_8_DISPLAY_1] +Window=5 +Index=2 +Color=33023 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=1 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=0 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_5f3e2ac4-a3c2-4615-b619-9c8cbd2f1ee6 + +[MEASUREMENT_OBJECT_9] +Components=256 +Module=xcp_demo +Name=$heap_struct1$ +Disabled=0 +Mode=2147483650 +Rate=0 +ModeIsDefault=1 +Row=0 +Column=0 +MeaReferenced=1 +ArchivBy_1=Recorder1 +IsFallback=0 +HasManagedDisplay=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO1] +Name=$heap_struct1$$array_field$$[000]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO10] +Name=$heap_struct1$$array_field$$[009]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO100] +Name=$heap_struct1$$array_field$$[099]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO100_DISPLAY_1] +Window=7 +Index=156 +Color=16776960 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_8c29d70f-8b40-4a5f-9043-cf4f023b96b3 + +[MEASUREMENT_OBJECT_9_CO101] +Name=$heap_struct1$$array_field$$[100]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO101_DISPLAY_1] +Window=7 +Index=155 +Color=16711935 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_a2ed1c93-ec07-4382-b190-20584efae562 + +[MEASUREMENT_OBJECT_9_CO102] +Name=$heap_struct1$$array_field$$[101]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO102_DISPLAY_1] +Window=7 +Index=154 +Color=33023 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_a3a864e8-8e31-44e5-96f0-718e30c1360d + +[MEASUREMENT_OBJECT_9_CO103] +Name=$heap_struct1$$array_field$$[102]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO103_DISPLAY_1] +Window=7 +Index=153 +Color=16744576 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_1ddcbc10-ac2b-4afb-b6f9-218403c86e4f + +[MEASUREMENT_OBJECT_9_CO104] +Name=$heap_struct1$$array_field$$[103]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO104_DISPLAY_1] +Window=7 +Index=152 +Color=16777215 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_7015e303-70fc-436d-b4b3-910ba6c9e693 + +[MEASUREMENT_OBJECT_9_CO105] +Name=$heap_struct1$$array_field$$[104]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO105_DISPLAY_1] +Window=7 +Index=151 +Color=43520 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_361ed804-b415-4820-9a66-8767cebf6b26 + +[MEASUREMENT_OBJECT_9_CO106] +Name=$heap_struct1$$array_field$$[105]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO106_DISPLAY_1] +Window=7 +Index=150 +Color=204 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_164e7a63-8aa0-4e1a-81db-8684ebe31a08 + +[MEASUREMENT_OBJECT_9_CO107] +Name=$heap_struct1$$array_field$$[106]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO107_DISPLAY_1] +Window=7 +Index=149 +Color=28784 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_4c971c28-e7d8-448a-b7c5-e58042c417ae + +[MEASUREMENT_OBJECT_9_CO108] +Name=$heap_struct1$$array_field$$[107]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO108_DISPLAY_1] +Window=7 +Index=148 +Color=16755200 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_c8923aa7-9a8d-4f44-93ad-86870ef6f595 + +[MEASUREMENT_OBJECT_9_CO109] +Name=$heap_struct1$$array_field$$[108]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO109_DISPLAY_1] +Window=7 +Index=147 +Color=16711850 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_7f08a3a9-9147-4b4a-925c-ecf431eec804 + +[MEASUREMENT_OBJECT_9_CO10_DISPLAY_1] +Window=7 +Index=246 +Color=204 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_4866d878-63da-4bab-8eef-de503b84541f + +[MEASUREMENT_OBJECT_9_CO11] +Name=$heap_struct1$$array_field$$[010]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO110] +Name=$heap_struct1$$array_field$$[109]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO110_DISPLAY_1] +Window=7 +Index=146 +Color=21930 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_f7bc1c74-053d-4e2c-8213-cfce0cc3c7f5 + +[MEASUREMENT_OBJECT_9_CO111] +Name=$heap_struct1$$array_field$$[110]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO111_DISPLAY_1] +Window=7 +Index=145 +Color=11162965 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_ac72d4b2-80f3-45bf-8afb-9fdd2dcf4725 + +[MEASUREMENT_OBJECT_9_CO112] +Name=$heap_struct1$$array_field$$[111]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO112_DISPLAY_1] +Window=7 +Index=144 +Color=11206655 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_985e369f-67d7-4862-b73e-8b1dd0b97966 + +[MEASUREMENT_OBJECT_9_CO113] +Name=$heap_struct1$$array_field$$[112]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO113_DISPLAY_1] +Window=7 +Index=143 +Color=65450 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_dfb430ca-f088-4c2c-9540-5f012ef00b1b + +[MEASUREMENT_OBJECT_9_CO114] +Name=$heap_struct1$$array_field$$[113]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO114_DISPLAY_1] +Window=7 +Index=142 +Color=8421631 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_afb7255e-86cb-40a6-8a07-facefa0d5c06 + +[MEASUREMENT_OBJECT_9_CO115] +Name=$heap_struct1$$array_field$$[114]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO115_DISPLAY_1] +Window=7 +Index=141 +Color=43690 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_96b4f42a-510c-4ce6-bfc4-2d79d7ae157e + +[MEASUREMENT_OBJECT_9_CO116] +Name=$heap_struct1$$array_field$$[115]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO116_DISPLAY_1] +Window=7 +Index=140 +Color=11184640 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_b3f0a5e6-24ac-40e8-8f5c-bf66826f5e13 + +[MEASUREMENT_OBJECT_9_CO117] +Name=$heap_struct1$$array_field$$[116]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO117_DISPLAY_1] +Window=7 +Index=139 +Color=16755455 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_9d8119c9-e679-4fa1-a318-0f85d678cdee + +[MEASUREMENT_OBJECT_9_CO118] +Name=$heap_struct1$$array_field$$[117]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO118_DISPLAY_1] +Window=7 +Index=138 +Color=11184895 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_99d0170b-985f-48ef-b16e-d2f024d0b308 + +[MEASUREMENT_OBJECT_9_CO119] +Name=$heap_struct1$$array_field$$[118]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO119_DISPLAY_1] +Window=7 +Index=137 +Color=16755370 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_9513359c-d812-4c82-9236-e8dad77eda7f + +[MEASUREMENT_OBJECT_9_CO11_DISPLAY_1] +Window=7 +Index=245 +Color=28784 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_f4f78771-2665-4bb7-bba6-e963eb6b180b + +[MEASUREMENT_OBJECT_9_CO12] +Name=$heap_struct1$$array_field$$[011]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO120] +Name=$heap_struct1$$array_field$$[119]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO120_DISPLAY_1] +Window=7 +Index=136 +Color=11206570 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_c951f318-6e43-4e7e-819d-4e6fcc27081b + +[MEASUREMENT_OBJECT_9_CO121] +Name=$heap_struct1$$array_field$$[120]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO121_DISPLAY_1] +Window=7 +Index=135 +Color=65280 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_e568e62c-d06c-4400-90d5-4ba460b8d91e + +[MEASUREMENT_OBJECT_9_CO122] +Name=$heap_struct1$$array_field$$[121]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO122_DISPLAY_1] +Window=7 +Index=134 +Color=255 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_268d6c17-658d-4f5a-899f-77025f7994cb + +[MEASUREMENT_OBJECT_9_CO123] +Name=$heap_struct1$$array_field$$[122]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO123_DISPLAY_1] +Window=7 +Index=133 +Color=65535 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_a132f81b-8f11-49c8-b6b1-67ddc8f162d2 + +[MEASUREMENT_OBJECT_9_CO124] +Name=$heap_struct1$$array_field$$[123]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO124_DISPLAY_1] +Window=7 +Index=132 +Color=16776960 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_d553085e-98a5-4081-b46c-448c4677552b + +[MEASUREMENT_OBJECT_9_CO125] +Name=$heap_struct1$$array_field$$[124]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO125_DISPLAY_1] +Window=7 +Index=131 +Color=16711935 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_f5921516-0fbf-451f-ab03-2a6a806ad4c2 + +[MEASUREMENT_OBJECT_9_CO126] +Name=$heap_struct1$$array_field$$[125]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO126_DISPLAY_1] +Window=7 +Index=130 +Color=33023 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_9cf6dc78-d184-4f0d-b6dd-6c86279dbb3a + +[MEASUREMENT_OBJECT_9_CO127] +Name=$heap_struct1$$array_field$$[126]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO127_DISPLAY_1] +Window=7 +Index=129 +Color=16744576 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_efcbca01-ca25-4e5e-93eb-709fb6fd844c + +[MEASUREMENT_OBJECT_9_CO128] +Name=$heap_struct1$$array_field$$[127]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO128_DISPLAY_1] +Window=7 +Index=128 +Color=16777215 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_ff4764b1-f590-425b-8929-f2c3dd6cd66f + +[MEASUREMENT_OBJECT_9_CO129] +Name=$heap_struct1$$array_field$$[128]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO129_DISPLAY_1] +Window=7 +Index=127 +Color=43520 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_703dbb8f-dcdc-4bd5-af4c-079a5867eff9 + +[MEASUREMENT_OBJECT_9_CO12_DISPLAY_1] +Window=7 +Index=244 +Color=16755200 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_9ef56deb-f2b0-4ebc-8df2-f18693f1256e + +[MEASUREMENT_OBJECT_9_CO13] +Name=$heap_struct1$$array_field$$[012]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO130] +Name=$heap_struct1$$array_field$$[129]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO130_DISPLAY_1] +Window=7 +Index=126 +Color=204 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_82d15eeb-8269-4a2a-a527-904674c12857 + +[MEASUREMENT_OBJECT_9_CO131] +Name=$heap_struct1$$array_field$$[130]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO131_DISPLAY_1] +Window=7 +Index=125 +Color=28784 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_351d6839-251c-4d99-ae94-55906883b072 + +[MEASUREMENT_OBJECT_9_CO132] +Name=$heap_struct1$$array_field$$[131]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO132_DISPLAY_1] +Window=7 +Index=124 +Color=16755200 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_0dafb80e-d3e5-42e4-ada0-abf9f73b65aa + +[MEASUREMENT_OBJECT_9_CO133] +Name=$heap_struct1$$array_field$$[132]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO133_DISPLAY_1] +Window=7 +Index=123 +Color=16711850 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_d4ea49e4-daef-4c2b-90f2-e8c523c3ec60 + +[MEASUREMENT_OBJECT_9_CO134] +Name=$heap_struct1$$array_field$$[133]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO134_DISPLAY_1] +Window=7 +Index=122 +Color=21930 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_2b68c8fc-6ab5-4f40-ab4f-1a54a235bc75 + +[MEASUREMENT_OBJECT_9_CO135] +Name=$heap_struct1$$array_field$$[134]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO135_DISPLAY_1] +Window=7 +Index=121 +Color=11162965 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_937ff376-81bd-4c96-b34f-02ade2e5f717 + +[MEASUREMENT_OBJECT_9_CO136] +Name=$heap_struct1$$array_field$$[135]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO136_DISPLAY_1] +Window=7 +Index=120 +Color=11206655 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_bbf2f73d-e2de-47d8-b722-0bf21cee8c14 + +[MEASUREMENT_OBJECT_9_CO137] +Name=$heap_struct1$$array_field$$[136]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO137_DISPLAY_1] +Window=7 +Index=119 +Color=65450 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_386452f8-84aa-4d95-99b8-d26006c43f85 + +[MEASUREMENT_OBJECT_9_CO138] +Name=$heap_struct1$$array_field$$[137]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO138_DISPLAY_1] +Window=7 +Index=118 +Color=8421631 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_419e7b4e-ed4c-4652-a1dc-4e19bec42af8 + +[MEASUREMENT_OBJECT_9_CO139] +Name=$heap_struct1$$array_field$$[138]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO139_DISPLAY_1] +Window=7 +Index=117 +Color=43690 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_4c1e2bc1-be48-49bd-a21c-c9c700412902 + +[MEASUREMENT_OBJECT_9_CO13_DISPLAY_1] +Window=7 +Index=243 +Color=16711850 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_378d35d1-3ab3-43ee-b37b-a70b64ef22fa + +[MEASUREMENT_OBJECT_9_CO14] +Name=$heap_struct1$$array_field$$[013]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO140] +Name=$heap_struct1$$array_field$$[139]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO140_DISPLAY_1] +Window=7 +Index=116 +Color=11184640 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_3822a4a2-0da8-4df1-9463-04261ce319d9 + +[MEASUREMENT_OBJECT_9_CO141] +Name=$heap_struct1$$array_field$$[140]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO141_DISPLAY_1] +Window=7 +Index=115 +Color=16755455 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_07f4dd09-43c0-4ac6-882d-b92a758c4b8d + +[MEASUREMENT_OBJECT_9_CO142] +Name=$heap_struct1$$array_field$$[141]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO142_DISPLAY_1] +Window=7 +Index=114 +Color=11184895 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_ed3e10a8-91f8-4f3a-9f17-be03d39de358 + +[MEASUREMENT_OBJECT_9_CO143] +Name=$heap_struct1$$array_field$$[142]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO143_DISPLAY_1] +Window=7 +Index=113 +Color=16755370 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_62a18b29-6d04-4e60-8e0d-85be7bf1d513 + +[MEASUREMENT_OBJECT_9_CO144] +Name=$heap_struct1$$array_field$$[143]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO144_DISPLAY_1] +Window=7 +Index=112 +Color=11206570 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_77b1e6db-f3c1-42bc-b5a7-7a107d043eaf + +[MEASUREMENT_OBJECT_9_CO145] +Name=$heap_struct1$$array_field$$[144]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO145_DISPLAY_1] +Window=7 +Index=111 +Color=65280 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_1e645693-9af5-4eee-86ff-8831e8dba72d + +[MEASUREMENT_OBJECT_9_CO146] +Name=$heap_struct1$$array_field$$[145]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO146_DISPLAY_1] +Window=7 +Index=110 +Color=255 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_6f397dc4-4f7f-45bd-acc9-4cda9884cbfc + +[MEASUREMENT_OBJECT_9_CO147] +Name=$heap_struct1$$array_field$$[146]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO147_DISPLAY_1] +Window=7 +Index=109 +Color=65535 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_efd3c360-d218-45d4-95f6-9d5675e9f353 + +[MEASUREMENT_OBJECT_9_CO148] +Name=$heap_struct1$$array_field$$[147]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO148_DISPLAY_1] +Window=7 +Index=108 +Color=16776960 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_66880a40-2bf1-4248-a27a-489afc835df1 + +[MEASUREMENT_OBJECT_9_CO149] +Name=$heap_struct1$$array_field$$[148]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO149_DISPLAY_1] +Window=7 +Index=107 +Color=16711935 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_498d47e4-9f5a-421f-8a3d-a8e7f873ba8e + +[MEASUREMENT_OBJECT_9_CO14_DISPLAY_1] +Window=7 +Index=242 +Color=21930 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_fcd08f6b-1cd9-4752-9af4-84ee3979dddd + +[MEASUREMENT_OBJECT_9_CO15] +Name=$heap_struct1$$array_field$$[014]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO150] +Name=$heap_struct1$$array_field$$[149]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO150_DISPLAY_1] +Window=7 +Index=106 +Color=33023 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_ddc22cc0-a764-4b53-a476-72bb5fdcbc55 + +[MEASUREMENT_OBJECT_9_CO151] +Name=$heap_struct1$$array_field$$[150]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO151_DISPLAY_1] +Window=7 +Index=105 +Color=16744576 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_ca4fa33e-355b-40e2-84f2-8070dfdc9077 + +[MEASUREMENT_OBJECT_9_CO152] +Name=$heap_struct1$$array_field$$[151]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO152_DISPLAY_1] +Window=7 +Index=104 +Color=16777215 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_647e135f-0ed9-4f80-ba2c-b3f5c2e3e5b4 + +[MEASUREMENT_OBJECT_9_CO153] +Name=$heap_struct1$$array_field$$[152]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO153_DISPLAY_1] +Window=7 +Index=103 +Color=43520 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_7dbe1ac0-22af-475e-8890-aae03fcd0e4c + +[MEASUREMENT_OBJECT_9_CO154] +Name=$heap_struct1$$array_field$$[153]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO154_DISPLAY_1] +Window=7 +Index=102 +Color=204 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_89379a7f-8cfd-4325-80e9-450d52de86e2 + +[MEASUREMENT_OBJECT_9_CO155] +Name=$heap_struct1$$array_field$$[154]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO155_DISPLAY_1] +Window=7 +Index=101 +Color=28784 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_a09c6f9c-3877-4d14-be52-48bf541093a1 + +[MEASUREMENT_OBJECT_9_CO156] +Name=$heap_struct1$$array_field$$[155]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO156_DISPLAY_1] +Window=7 +Index=100 +Color=16755200 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_92bca3f7-3ae5-4094-ba04-13a708b5b28b + +[MEASUREMENT_OBJECT_9_CO157] +Name=$heap_struct1$$array_field$$[156]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO157_DISPLAY_1] +Window=7 +Index=99 +Color=16711850 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_b97ab419-94d3-4e0c-aae6-ac083cca0fa5 + +[MEASUREMENT_OBJECT_9_CO158] +Name=$heap_struct1$$array_field$$[157]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO158_DISPLAY_1] +Window=7 +Index=98 +Color=21930 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_c084604a-88cd-4d58-9bde-ddbc7134310c + +[MEASUREMENT_OBJECT_9_CO159] +Name=$heap_struct1$$array_field$$[158]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO159_DISPLAY_1] +Window=7 +Index=97 +Color=11162965 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_089066df-fa64-4b87-b9ba-0bd6afd7bf50 + +[MEASUREMENT_OBJECT_9_CO15_DISPLAY_1] +Window=7 +Index=241 +Color=11162965 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_d43c329a-d190-4de2-b6ba-4fb29006b8cb + +[MEASUREMENT_OBJECT_9_CO16] +Name=$heap_struct1$$array_field$$[015]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO160] +Name=$heap_struct1$$array_field$$[159]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO160_DISPLAY_1] +Window=7 +Index=96 +Color=11206655 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_9251bcc8-a84b-4f41-aeb9-21a367edb0e0 + +[MEASUREMENT_OBJECT_9_CO161] +Name=$heap_struct1$$array_field$$[160]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO161_DISPLAY_1] +Window=7 +Index=95 +Color=65450 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_0554133d-9d68-4c35-b20e-d6fb7e5b9d40 + +[MEASUREMENT_OBJECT_9_CO162] +Name=$heap_struct1$$array_field$$[161]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO162_DISPLAY_1] +Window=7 +Index=94 +Color=8421631 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_60a82715-b353-48ae-be6a-163d397119ce + +[MEASUREMENT_OBJECT_9_CO163] +Name=$heap_struct1$$array_field$$[162]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO163_DISPLAY_1] +Window=7 +Index=93 +Color=43690 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_6b1b545b-43ab-41be-b3a6-541210b4365a + +[MEASUREMENT_OBJECT_9_CO164] +Name=$heap_struct1$$array_field$$[163]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO164_DISPLAY_1] +Window=7 +Index=92 +Color=11184640 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_f61cce43-3351-43e6-b47b-bcd7db64c2b3 + +[MEASUREMENT_OBJECT_9_CO165] +Name=$heap_struct1$$array_field$$[164]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO165_DISPLAY_1] +Window=7 +Index=91 +Color=16755455 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_d088f902-ccce-4ed2-bda5-f11f617df94e + +[MEASUREMENT_OBJECT_9_CO166] +Name=$heap_struct1$$array_field$$[165]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO166_DISPLAY_1] +Window=7 +Index=90 +Color=11184895 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_c4a7e0f1-0a31-4d16-9055-2dafe83c3d6a + +[MEASUREMENT_OBJECT_9_CO167] +Name=$heap_struct1$$array_field$$[166]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO167_DISPLAY_1] +Window=7 +Index=89 +Color=16755370 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_928b99d7-a0e7-4ed2-9ca8-51167cb38a37 + +[MEASUREMENT_OBJECT_9_CO168] +Name=$heap_struct1$$array_field$$[167]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO168_DISPLAY_1] +Window=7 +Index=88 +Color=11206570 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_e0cbb1a7-8ba4-47f5-8cbb-ccdaa45a56f0 + +[MEASUREMENT_OBJECT_9_CO169] +Name=$heap_struct1$$array_field$$[168]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO169_DISPLAY_1] +Window=7 +Index=87 +Color=65280 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_27f35c1b-b0a2-44db-b034-81a5d0740333 + +[MEASUREMENT_OBJECT_9_CO16_DISPLAY_1] +Window=7 +Index=240 +Color=11206655 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_5472f575-6b6d-4f6a-9967-87b73c81057c + +[MEASUREMENT_OBJECT_9_CO17] +Name=$heap_struct1$$array_field$$[016]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO170] +Name=$heap_struct1$$array_field$$[169]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO170_DISPLAY_1] +Window=7 +Index=86 +Color=255 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_c0eb33c2-3743-42bb-86c5-deff576bec33 + +[MEASUREMENT_OBJECT_9_CO171] +Name=$heap_struct1$$array_field$$[170]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO171_DISPLAY_1] +Window=7 +Index=85 +Color=65535 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_869134be-c815-4e85-85d0-aa26d741911c + +[MEASUREMENT_OBJECT_9_CO172] +Name=$heap_struct1$$array_field$$[171]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO172_DISPLAY_1] +Window=7 +Index=84 +Color=16776960 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_f1b63095-cc76-40e0-ab2d-054809634448 + +[MEASUREMENT_OBJECT_9_CO173] +Name=$heap_struct1$$array_field$$[172]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO173_DISPLAY_1] +Window=7 +Index=83 +Color=16711935 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_985492e5-6de4-4003-8f8f-5508bf09ad1d + +[MEASUREMENT_OBJECT_9_CO174] +Name=$heap_struct1$$array_field$$[173]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO174_DISPLAY_1] +Window=7 +Index=82 +Color=33023 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_bc23743d-f186-4e0a-8353-e49feb43387b + +[MEASUREMENT_OBJECT_9_CO175] +Name=$heap_struct1$$array_field$$[174]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO175_DISPLAY_1] +Window=7 +Index=81 +Color=16744576 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_81c488e2-2fdb-492f-843a-a3f696f35c56 + +[MEASUREMENT_OBJECT_9_CO176] +Name=$heap_struct1$$array_field$$[175]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO176_DISPLAY_1] +Window=7 +Index=80 +Color=16777215 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_53d56130-2d91-4643-b211-0f450d549b62 + +[MEASUREMENT_OBJECT_9_CO177] +Name=$heap_struct1$$array_field$$[176]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO177_DISPLAY_1] +Window=7 +Index=79 +Color=43520 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_b4cd798d-581c-434b-93ea-42a1509e08de + +[MEASUREMENT_OBJECT_9_CO178] +Name=$heap_struct1$$array_field$$[177]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO178_DISPLAY_1] +Window=7 +Index=78 +Color=204 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_cf5e51b8-57d1-4a4e-a7a9-fc83095d3140 + +[MEASUREMENT_OBJECT_9_CO179] +Name=$heap_struct1$$array_field$$[178]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO179_DISPLAY_1] +Window=7 +Index=77 +Color=28784 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_b3f1d2c3-d35c-4579-8e02-f9380d05279f + +[MEASUREMENT_OBJECT_9_CO17_DISPLAY_1] +Window=7 +Index=239 +Color=65450 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_fe204300-aa81-4a65-94f0-a86a51b03a86 + +[MEASUREMENT_OBJECT_9_CO18] +Name=$heap_struct1$$array_field$$[017]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO180] +Name=$heap_struct1$$array_field$$[179]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO180_DISPLAY_1] +Window=7 +Index=76 +Color=16755200 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_362db596-b2ea-4111-9fff-30194348d140 + +[MEASUREMENT_OBJECT_9_CO181] +Name=$heap_struct1$$array_field$$[180]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO181_DISPLAY_1] +Window=7 +Index=75 +Color=16711850 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_b9577b21-a2ba-43bf-865b-d7ffb7feb115 + +[MEASUREMENT_OBJECT_9_CO182] +Name=$heap_struct1$$array_field$$[181]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO182_DISPLAY_1] +Window=7 +Index=74 +Color=21930 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_b25427c3-f70c-466d-a0e3-7947a4230f2f + +[MEASUREMENT_OBJECT_9_CO183] +Name=$heap_struct1$$array_field$$[182]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO183_DISPLAY_1] +Window=7 +Index=73 +Color=11162965 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_6135e5f0-1bf6-406b-b8d4-6038f1f65b1e + +[MEASUREMENT_OBJECT_9_CO184] +Name=$heap_struct1$$array_field$$[183]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO184_DISPLAY_1] +Window=7 +Index=72 +Color=11206655 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_3228a129-cb7f-4056-96b3-c60ce90b2a07 + +[MEASUREMENT_OBJECT_9_CO185] +Name=$heap_struct1$$array_field$$[184]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO185_DISPLAY_1] +Window=7 +Index=71 +Color=65450 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_2ba4ea96-0523-4289-bc43-460ae536a328 + +[MEASUREMENT_OBJECT_9_CO186] +Name=$heap_struct1$$array_field$$[185]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO186_DISPLAY_1] +Window=7 +Index=70 +Color=8421631 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_316cf53c-ce8b-412d-9519-4d0817f96ba8 + +[MEASUREMENT_OBJECT_9_CO187] +Name=$heap_struct1$$array_field$$[186]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO187_DISPLAY_1] +Window=7 +Index=69 +Color=43690 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_06a1c19e-5e00-4d0c-815c-8fbd5e04b306 + +[MEASUREMENT_OBJECT_9_CO188] +Name=$heap_struct1$$array_field$$[187]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO188_DISPLAY_1] +Window=7 +Index=68 +Color=11184640 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_6763f773-7f54-4c08-85d0-99fcb6a07e80 + +[MEASUREMENT_OBJECT_9_CO189] +Name=$heap_struct1$$array_field$$[188]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO189_DISPLAY_1] +Window=7 +Index=67 +Color=16755455 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_dd0ff0b2-1318-4e5e-9f67-315e3d83816c + +[MEASUREMENT_OBJECT_9_CO18_DISPLAY_1] +Window=7 +Index=238 +Color=8421631 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_68bab2bc-0c73-4cc2-bcd5-99f74dcbd668 + +[MEASUREMENT_OBJECT_9_CO19] +Name=$heap_struct1$$array_field$$[018]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO190] +Name=$heap_struct1$$array_field$$[189]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO190_DISPLAY_1] +Window=7 +Index=66 +Color=11184895 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_50d79c67-d63f-453b-abc2-e0a2063dc4a9 + +[MEASUREMENT_OBJECT_9_CO191] +Name=$heap_struct1$$array_field$$[190]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO191_DISPLAY_1] +Window=7 +Index=65 +Color=16755370 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_7d5ff3b7-34c0-4c01-8513-d83f89286e87 + +[MEASUREMENT_OBJECT_9_CO192] +Name=$heap_struct1$$array_field$$[191]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO192_DISPLAY_1] +Window=7 +Index=64 +Color=11206570 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_c37b0a77-5471-4733-9357-ca44cee7940b + +[MEASUREMENT_OBJECT_9_CO193] +Name=$heap_struct1$$array_field$$[192]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO193_DISPLAY_1] +Window=7 +Index=63 +Color=65280 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_39e606d4-8442-48b4-b9a7-0879c932cc80 + +[MEASUREMENT_OBJECT_9_CO194] +Name=$heap_struct1$$array_field$$[193]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO194_DISPLAY_1] +Window=7 +Index=62 +Color=255 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_ea0e475e-d6d3-43f7-9261-4a678a90ecc2 + +[MEASUREMENT_OBJECT_9_CO195] +Name=$heap_struct1$$array_field$$[194]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO195_DISPLAY_1] +Window=7 +Index=61 +Color=65535 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_0cd8b9e2-bdaa-4a67-97f7-a82d583565bc + +[MEASUREMENT_OBJECT_9_CO196] +Name=$heap_struct1$$array_field$$[195]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO196_DISPLAY_1] +Window=7 +Index=60 +Color=16776960 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_e60768af-700c-48ee-90b3-9c998cad10d7 + +[MEASUREMENT_OBJECT_9_CO197] +Name=$heap_struct1$$array_field$$[196]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO197_DISPLAY_1] +Window=7 +Index=59 +Color=16711935 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_58f36093-38b9-4659-9da5-c07b2d45680c + +[MEASUREMENT_OBJECT_9_CO198] +Name=$heap_struct1$$array_field$$[197]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO198_DISPLAY_1] +Window=7 +Index=58 +Color=33023 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_7e98da64-c424-4bf8-acbd-c08faa8ddad1 + +[MEASUREMENT_OBJECT_9_CO199] +Name=$heap_struct1$$array_field$$[198]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO199_DISPLAY_1] +Window=7 +Index=57 +Color=16744576 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_67fa3946-c846-4512-8ece-e41c916ba693 + +[MEASUREMENT_OBJECT_9_CO19_DISPLAY_1] +Window=7 +Index=237 +Color=43690 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_5796d077-63f9-4645-bec9-caba492b4b7a + +[MEASUREMENT_OBJECT_9_CO1_DISPLAY_1] +Window=7 +Index=255 +Color=65280 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_dd01d4f3-2469-473f-be64-48676dcddf6c + +[MEASUREMENT_OBJECT_9_CO2] +Name=$heap_struct1$$array_field$$[001]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO20] +Name=$heap_struct1$$array_field$$[019]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO200] +Name=$heap_struct1$$array_field$$[199]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO200_DISPLAY_1] +Window=7 +Index=56 +Color=16777215 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_d190b582-7a5a-4b48-a7b8-92dfe1cef4fb + +[MEASUREMENT_OBJECT_9_CO201] +Name=$heap_struct1$$array_field$$[200]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO201_DISPLAY_1] +Window=7 +Index=55 +Color=43520 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_c15c9b61-4b2b-4505-888b-2882120dcbe4 + +[MEASUREMENT_OBJECT_9_CO202] +Name=$heap_struct1$$array_field$$[201]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO202_DISPLAY_1] +Window=7 +Index=54 +Color=204 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_8b80a7ae-3e46-48f0-92ca-5f620dedb41e + +[MEASUREMENT_OBJECT_9_CO203] +Name=$heap_struct1$$array_field$$[202]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO203_DISPLAY_1] +Window=7 +Index=53 +Color=28784 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_9e080de9-1fef-424b-b364-9c51bd73ea98 + +[MEASUREMENT_OBJECT_9_CO204] +Name=$heap_struct1$$array_field$$[203]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO204_DISPLAY_1] +Window=7 +Index=52 +Color=16755200 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_7527aa10-cb61-4807-860c-c29ebd5ca64c + +[MEASUREMENT_OBJECT_9_CO205] +Name=$heap_struct1$$array_field$$[204]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO205_DISPLAY_1] +Window=7 +Index=51 +Color=16711850 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_148f854a-9b7a-41c8-84df-f5ee718f421f + +[MEASUREMENT_OBJECT_9_CO206] +Name=$heap_struct1$$array_field$$[205]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO206_DISPLAY_1] +Window=7 +Index=50 +Color=21930 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_edb35940-060d-49fc-a6fe-8f9b9a9466d5 + +[MEASUREMENT_OBJECT_9_CO207] +Name=$heap_struct1$$array_field$$[206]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO207_DISPLAY_1] +Window=7 +Index=49 +Color=11162965 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_d47d7aae-2a0a-4c28-93a6-d641a3d2e849 + +[MEASUREMENT_OBJECT_9_CO208] +Name=$heap_struct1$$array_field$$[207]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO208_DISPLAY_1] +Window=7 +Index=48 +Color=11206655 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_3baee4c7-df3a-4b4c-b57e-e5e22a0036d3 + +[MEASUREMENT_OBJECT_9_CO209] +Name=$heap_struct1$$array_field$$[208]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO209_DISPLAY_1] +Window=7 +Index=47 +Color=65450 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_e6ada153-3600-46ea-9135-6f1e58c1cdc5 + +[MEASUREMENT_OBJECT_9_CO20_DISPLAY_1] +Window=7 +Index=236 +Color=11184640 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_db960ddb-271b-4aba-8875-261fbc3f4e21 + +[MEASUREMENT_OBJECT_9_CO21] +Name=$heap_struct1$$array_field$$[020]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO210] +Name=$heap_struct1$$array_field$$[209]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO210_DISPLAY_1] +Window=7 +Index=46 +Color=8421631 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_ea551c29-4615-4042-bb8d-93b23ab9ec0d + +[MEASUREMENT_OBJECT_9_CO211] +Name=$heap_struct1$$array_field$$[210]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO211_DISPLAY_1] +Window=7 +Index=45 +Color=43690 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_c31370cc-a78a-4b47-a1e6-b2041f00191e + +[MEASUREMENT_OBJECT_9_CO212] +Name=$heap_struct1$$array_field$$[211]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO212_DISPLAY_1] +Window=7 +Index=44 +Color=11184640 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_c60e9136-24c5-476a-bebb-eb256d5b68a3 + +[MEASUREMENT_OBJECT_9_CO213] +Name=$heap_struct1$$array_field$$[212]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO213_DISPLAY_1] +Window=7 +Index=43 +Color=16755455 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_6a152f1a-645a-4675-bf4f-8ce970e2e982 + +[MEASUREMENT_OBJECT_9_CO214] +Name=$heap_struct1$$array_field$$[213]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO214_DISPLAY_1] +Window=7 +Index=42 +Color=11184895 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_840021a0-cfbe-4d86-b74b-f28278a19cde + +[MEASUREMENT_OBJECT_9_CO215] +Name=$heap_struct1$$array_field$$[214]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO215_DISPLAY_1] +Window=7 +Index=41 +Color=16755370 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_f33a480a-c4f5-4ae6-a284-082ab57ddf2f + +[MEASUREMENT_OBJECT_9_CO216] +Name=$heap_struct1$$array_field$$[215]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO216_DISPLAY_1] +Window=7 +Index=40 +Color=11206570 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_ec05a1de-f014-4fbe-b807-9b1f77d0602d + +[MEASUREMENT_OBJECT_9_CO217] +Name=$heap_struct1$$array_field$$[216]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO217_DISPLAY_1] +Window=7 +Index=39 +Color=65280 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_e5bb17a6-2708-4179-b3f7-0634d4e1139f + +[MEASUREMENT_OBJECT_9_CO218] +Name=$heap_struct1$$array_field$$[217]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO218_DISPLAY_1] +Window=7 +Index=38 +Color=255 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_4755a775-dc83-44d5-ae0c-55e2f69c2344 + +[MEASUREMENT_OBJECT_9_CO219] +Name=$heap_struct1$$array_field$$[218]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO219_DISPLAY_1] +Window=7 +Index=37 +Color=65535 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_270e7778-5b45-478a-8ac4-ea1935ae393c + +[MEASUREMENT_OBJECT_9_CO21_DISPLAY_1] +Window=7 +Index=235 +Color=16755455 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_3f1944b7-be33-4af1-9ee2-acaea7a958f0 + +[MEASUREMENT_OBJECT_9_CO22] +Name=$heap_struct1$$array_field$$[021]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO220] +Name=$heap_struct1$$array_field$$[219]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO220_DISPLAY_1] +Window=7 +Index=36 +Color=16776960 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_daabb015-460d-489a-96ad-190b93fbc07c + +[MEASUREMENT_OBJECT_9_CO221] +Name=$heap_struct1$$array_field$$[220]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO221_DISPLAY_1] +Window=7 +Index=35 +Color=16711935 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_9929e858-ce1e-4f3a-9d33-98f20f76bdcd + +[MEASUREMENT_OBJECT_9_CO222] +Name=$heap_struct1$$array_field$$[221]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO222_DISPLAY_1] +Window=7 +Index=34 +Color=33023 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_8efc14d8-8d9a-42a7-8660-c17035c4839c + +[MEASUREMENT_OBJECT_9_CO223] +Name=$heap_struct1$$array_field$$[222]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO223_DISPLAY_1] +Window=7 +Index=33 +Color=16744576 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_aeded5c7-9433-4111-a806-4da22b3dc65f + +[MEASUREMENT_OBJECT_9_CO224] +Name=$heap_struct1$$array_field$$[223]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO224_DISPLAY_1] +Window=7 +Index=32 +Color=16777215 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_f3990500-4088-4d68-9295-6ea9a9819661 + +[MEASUREMENT_OBJECT_9_CO225] +Name=$heap_struct1$$array_field$$[224]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO225_DISPLAY_1] +Window=7 +Index=31 +Color=43520 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_beab5c58-6cc2-449f-8f24-2c3a5766677d + +[MEASUREMENT_OBJECT_9_CO226] +Name=$heap_struct1$$array_field$$[225]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO226_DISPLAY_1] +Window=7 +Index=30 +Color=204 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_3c0256c1-a170-4ccb-85cb-2e2ec3abc397 + +[MEASUREMENT_OBJECT_9_CO227] +Name=$heap_struct1$$array_field$$[226]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO227_DISPLAY_1] +Window=7 +Index=29 +Color=28784 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_44cf1432-f80b-4bd2-a029-a7ef4ae51158 + +[MEASUREMENT_OBJECT_9_CO228] +Name=$heap_struct1$$array_field$$[227]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO228_DISPLAY_1] +Window=7 +Index=28 +Color=16755200 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_b6e7aee6-1ff6-487b-a2c2-d63be91dd9a8 + +[MEASUREMENT_OBJECT_9_CO229] +Name=$heap_struct1$$array_field$$[228]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO229_DISPLAY_1] +Window=7 +Index=27 +Color=16711850 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_6dbab992-3689-4cba-99f9-4677a9f22e6e + +[MEASUREMENT_OBJECT_9_CO22_DISPLAY_1] +Window=7 +Index=234 +Color=11184895 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_bbb26c92-7bb6-47eb-ba3f-280fcde70c7c + +[MEASUREMENT_OBJECT_9_CO23] +Name=$heap_struct1$$array_field$$[022]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO230] +Name=$heap_struct1$$array_field$$[229]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO230_DISPLAY_1] +Window=7 +Index=26 +Color=21930 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_fd1c366c-258e-40b3-a8e1-32c17471505b + +[MEASUREMENT_OBJECT_9_CO231] +Name=$heap_struct1$$array_field$$[230]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO231_DISPLAY_1] +Window=7 +Index=25 +Color=11162965 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_33484fbc-ecc1-49bc-9f5e-4faa3221cad7 + +[MEASUREMENT_OBJECT_9_CO232] +Name=$heap_struct1$$array_field$$[231]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO232_DISPLAY_1] +Window=7 +Index=24 +Color=11206655 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_f01e6d53-2055-45d0-b629-4db7dde7aa87 + +[MEASUREMENT_OBJECT_9_CO233] +Name=$heap_struct1$$array_field$$[232]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO233_DISPLAY_1] +Window=7 +Index=23 +Color=65450 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_173f26f7-c87f-46d8-b703-be67e2ea8822 + +[MEASUREMENT_OBJECT_9_CO234] +Name=$heap_struct1$$array_field$$[233]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO234_DISPLAY_1] +Window=7 +Index=22 +Color=8421631 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_2f59ae30-1f32-40d9-80cf-6fbd419bacd7 + +[MEASUREMENT_OBJECT_9_CO235] +Name=$heap_struct1$$array_field$$[234]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO235_DISPLAY_1] +Window=7 +Index=21 +Color=43690 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_ea948688-5ea9-4080-a735-7c463dc7450d + +[MEASUREMENT_OBJECT_9_CO236] +Name=$heap_struct1$$array_field$$[235]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO236_DISPLAY_1] +Window=7 +Index=20 +Color=11184640 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_c93509ee-c9bd-433c-b99a-777d9ee5d6c3 + +[MEASUREMENT_OBJECT_9_CO237] +Name=$heap_struct1$$array_field$$[236]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO237_DISPLAY_1] +Window=7 +Index=19 +Color=16755455 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_173e958d-2cbe-4cb0-933d-5ea2360b75dd + +[MEASUREMENT_OBJECT_9_CO238] +Name=$heap_struct1$$array_field$$[237]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO238_DISPLAY_1] +Window=7 +Index=18 +Color=11184895 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_e4fb8a86-6e05-4e03-b17a-164bf3487988 + +[MEASUREMENT_OBJECT_9_CO239] +Name=$heap_struct1$$array_field$$[238]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO239_DISPLAY_1] +Window=7 +Index=17 +Color=16755370 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_35043c50-0859-4a19-9c66-27754f7a9471 + +[MEASUREMENT_OBJECT_9_CO23_DISPLAY_1] +Window=7 +Index=233 +Color=16755370 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_25fb1e5b-3fc4-4962-8a66-af3858afe198 + +[MEASUREMENT_OBJECT_9_CO24] +Name=$heap_struct1$$array_field$$[023]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO240] +Name=$heap_struct1$$array_field$$[239]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO240_DISPLAY_1] +Window=7 +Index=16 +Color=11206570 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_1596ade6-e0a2-4d8c-8f89-a3a9c6da8c9e + +[MEASUREMENT_OBJECT_9_CO241] +Name=$heap_struct1$$array_field$$[240]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO241_DISPLAY_1] +Window=7 +Index=15 +Color=65280 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_a88a5040-f057-433c-92c3-30431bc33477 + +[MEASUREMENT_OBJECT_9_CO242] +Name=$heap_struct1$$array_field$$[241]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO242_DISPLAY_1] +Window=7 +Index=14 +Color=255 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_0eb761f0-afde-473b-8f8b-6a5011aa92aa + +[MEASUREMENT_OBJECT_9_CO243] +Name=$heap_struct1$$array_field$$[242]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO243_DISPLAY_1] +Window=7 +Index=13 +Color=65535 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_dfdb39f7-d451-49d9-b1de-d6f883214812 + +[MEASUREMENT_OBJECT_9_CO244] +Name=$heap_struct1$$array_field$$[243]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO244_DISPLAY_1] +Window=7 +Index=12 +Color=16776960 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_1fb26d76-1086-423f-ba4b-eb332dcbb50f + +[MEASUREMENT_OBJECT_9_CO245] +Name=$heap_struct1$$array_field$$[244]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO245_DISPLAY_1] +Window=7 +Index=11 +Color=16711935 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_120516c8-fc22-4dbe-af79-163be2a81671 + +[MEASUREMENT_OBJECT_9_CO246] +Name=$heap_struct1$$array_field$$[245]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO246_DISPLAY_1] +Window=7 +Index=10 +Color=33023 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_8ea61e75-d9c6-477c-b6dc-9aab32ae31c8 + +[MEASUREMENT_OBJECT_9_CO247] +Name=$heap_struct1$$array_field$$[246]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO247_DISPLAY_1] +Window=7 +Index=9 +Color=16744576 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_bbecf42b-c03d-44e1-a934-8eaa74bbc663 + +[MEASUREMENT_OBJECT_9_CO248] +Name=$heap_struct1$$array_field$$[247]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO248_DISPLAY_1] +Window=7 +Index=8 +Color=16777215 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_e38e0db5-3305-428a-8b68-0e9c4387e9fe + +[MEASUREMENT_OBJECT_9_CO249] +Name=$heap_struct1$$array_field$$[248]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO249_DISPLAY_1] +Window=7 +Index=7 +Color=43520 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_b2440450-49f2-4f6e-b929-99965aa5592d + +[MEASUREMENT_OBJECT_9_CO24_DISPLAY_1] +Window=7 +Index=232 +Color=11206570 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_95976d45-5fa0-403a-b6a5-cf01ac36a685 + +[MEASUREMENT_OBJECT_9_CO25] +Name=$heap_struct1$$array_field$$[024]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO250] +Name=$heap_struct1$$array_field$$[249]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO250_DISPLAY_1] +Window=7 +Index=6 +Color=204 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_165ec9ea-66a2-41a8-bfe8-6786b1c35874 + +[MEASUREMENT_OBJECT_9_CO251] +Name=$heap_struct1$$array_field$$[250]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO251_DISPLAY_1] +Window=7 +Index=5 +Color=28784 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_c0d016ce-4ce4-4447-b712-4e98131d3b0c + +[MEASUREMENT_OBJECT_9_CO252] +Name=$heap_struct1$$array_field$$[251]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO252_DISPLAY_1] +Window=7 +Index=4 +Color=16755200 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_622a108b-0103-4f59-9242-c61230faa74f + +[MEASUREMENT_OBJECT_9_CO253] +Name=$heap_struct1$$array_field$$[252]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO253_DISPLAY_1] +Window=7 +Index=3 +Color=16711850 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_44e56216-9885-41d6-8e7d-d4b5ab291e46 + +[MEASUREMENT_OBJECT_9_CO254] +Name=$heap_struct1$$array_field$$[253]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO254_DISPLAY_1] +Window=7 +Index=2 +Color=21930 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_55362807-e593-41f9-850d-f245e2dbe691 + +[MEASUREMENT_OBJECT_9_CO255] +Name=$heap_struct1$$array_field$$[254]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO255_DISPLAY_1] +Window=7 +Index=1 +Color=11162965 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_f9491490-12cd-4328-b3ee-d6ddd19b805c + +[MEASUREMENT_OBJECT_9_CO256] +Name=$heap_struct1$$array_field$$[255]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO256_DISPLAY_1] +Window=7 +Index=0 +Color=11206655 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=1 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_063a3fa9-88ad-42f4-ba24-33a05628006c + +[MEASUREMENT_OBJECT_9_CO25_DISPLAY_1] +Window=7 +Index=231 +Color=65280 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_6d3d0ab3-7d74-47dc-81c4-5ecad3b5b461 + +[MEASUREMENT_OBJECT_9_CO26] +Name=$heap_struct1$$array_field$$[025]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO26_DISPLAY_1] +Window=7 +Index=230 +Color=255 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_dea8a49f-28f5-4bf5-87c4-dba9b50e7307 + +[MEASUREMENT_OBJECT_9_CO27] +Name=$heap_struct1$$array_field$$[026]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO27_DISPLAY_1] +Window=7 +Index=229 +Color=65535 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_ed406b14-5a2f-40c4-a49d-90c21d1955d7 + +[MEASUREMENT_OBJECT_9_CO28] +Name=$heap_struct1$$array_field$$[027]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO28_DISPLAY_1] +Window=7 +Index=228 +Color=16776960 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_7ea53648-c289-480c-bd17-576d28cdf71e + +[MEASUREMENT_OBJECT_9_CO29] +Name=$heap_struct1$$array_field$$[028]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO29_DISPLAY_1] +Window=7 +Index=227 +Color=16711935 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_1686e4d9-6374-48e3-a7f9-c6b34691f34b + +[MEASUREMENT_OBJECT_9_CO2_DISPLAY_1] +Window=7 +Index=254 +Color=255 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_0e1ae82a-d959-4164-978b-45b2020d1e42 + +[MEASUREMENT_OBJECT_9_CO3] +Name=$heap_struct1$$array_field$$[002]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO30] +Name=$heap_struct1$$array_field$$[029]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO30_DISPLAY_1] +Window=7 +Index=226 +Color=33023 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_dad45fde-511f-482b-ba5a-d641fb1e7e0d + +[MEASUREMENT_OBJECT_9_CO31] +Name=$heap_struct1$$array_field$$[030]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO31_DISPLAY_1] +Window=7 +Index=225 +Color=16744576 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_ecb42159-2c3c-41b2-9e20-7b7486932b34 + +[MEASUREMENT_OBJECT_9_CO32] +Name=$heap_struct1$$array_field$$[031]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO32_DISPLAY_1] +Window=7 +Index=224 +Color=16777215 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_eec23b05-19e0-418d-839a-5ba539b64852 + +[MEASUREMENT_OBJECT_9_CO33] +Name=$heap_struct1$$array_field$$[032]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO33_DISPLAY_1] +Window=7 +Index=223 +Color=43520 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_0fd4e0a9-6454-4125-afcc-c341e4ca9bfc + +[MEASUREMENT_OBJECT_9_CO34] +Name=$heap_struct1$$array_field$$[033]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO34_DISPLAY_1] +Window=7 +Index=222 +Color=204 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_d401e501-1fa6-4dd7-bcfd-2d6677b727d1 + +[MEASUREMENT_OBJECT_9_CO35] +Name=$heap_struct1$$array_field$$[034]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO35_DISPLAY_1] +Window=7 +Index=221 +Color=28784 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_0f1427a4-e273-4403-a935-8a7b42848219 + +[MEASUREMENT_OBJECT_9_CO36] +Name=$heap_struct1$$array_field$$[035]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO36_DISPLAY_1] +Window=7 +Index=220 +Color=16755200 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_57704f25-03ce-424c-995a-f7e277a5400b + +[MEASUREMENT_OBJECT_9_CO37] +Name=$heap_struct1$$array_field$$[036]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO37_DISPLAY_1] +Window=7 +Index=219 +Color=16711850 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_0b558617-6584-4da6-b59b-52c32f8fa202 + +[MEASUREMENT_OBJECT_9_CO38] +Name=$heap_struct1$$array_field$$[037]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO38_DISPLAY_1] +Window=7 +Index=218 +Color=21930 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_a959eefa-0a2c-4365-8a0c-6e444837ee0e + +[MEASUREMENT_OBJECT_9_CO39] +Name=$heap_struct1$$array_field$$[038]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO39_DISPLAY_1] +Window=7 +Index=217 +Color=11162965 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_190a8a11-0bf1-4541-956b-0bbeee6ca89a + +[MEASUREMENT_OBJECT_9_CO3_DISPLAY_1] +Window=7 +Index=253 +Color=65535 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_1a545b12-d9b5-4bf7-a7b2-21363df91574 + +[MEASUREMENT_OBJECT_9_CO4] +Name=$heap_struct1$$array_field$$[003]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO40] +Name=$heap_struct1$$array_field$$[039]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO40_DISPLAY_1] +Window=7 +Index=216 +Color=11206655 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_7b940f4c-530d-4339-beaf-6e997e818a53 + +[MEASUREMENT_OBJECT_9_CO41] +Name=$heap_struct1$$array_field$$[040]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO41_DISPLAY_1] +Window=7 +Index=215 +Color=65450 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_091d352b-36a0-406a-b977-0cf4ae43822e + +[MEASUREMENT_OBJECT_9_CO42] +Name=$heap_struct1$$array_field$$[041]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO42_DISPLAY_1] +Window=7 +Index=214 +Color=8421631 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_8eb9c3aa-79a7-4aab-8732-473db188547d + +[MEASUREMENT_OBJECT_9_CO43] +Name=$heap_struct1$$array_field$$[042]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO43_DISPLAY_1] +Window=7 +Index=213 +Color=43690 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_66aab30e-5fd0-4ad8-81dc-d2480c026939 + +[MEASUREMENT_OBJECT_9_CO44] +Name=$heap_struct1$$array_field$$[043]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO44_DISPLAY_1] +Window=7 +Index=212 +Color=11184640 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_d7fb8493-b6cf-43ea-88a6-df9e83d10223 + +[MEASUREMENT_OBJECT_9_CO45] +Name=$heap_struct1$$array_field$$[044]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO45_DISPLAY_1] +Window=7 +Index=211 +Color=16755455 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_2a698ad5-3d18-4e47-907b-31999a7ed9d6 + +[MEASUREMENT_OBJECT_9_CO46] +Name=$heap_struct1$$array_field$$[045]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO46_DISPLAY_1] +Window=7 +Index=210 +Color=11184895 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_b9ac1705-6c5d-4e3b-8f14-17b59b9a4aa7 + +[MEASUREMENT_OBJECT_9_CO47] +Name=$heap_struct1$$array_field$$[046]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO47_DISPLAY_1] +Window=7 +Index=209 +Color=16755370 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_ac1f325c-5c3e-42cd-9dec-381f839b0d21 + +[MEASUREMENT_OBJECT_9_CO48] +Name=$heap_struct1$$array_field$$[047]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO48_DISPLAY_1] +Window=7 +Index=208 +Color=11206570 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_99dd2c5f-3baf-43d0-89a1-db6536f35591 + +[MEASUREMENT_OBJECT_9_CO49] +Name=$heap_struct1$$array_field$$[048]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO49_DISPLAY_1] +Window=7 +Index=207 +Color=65280 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_da87aca3-906c-4b53-ac1a-65f0ee68c54c + +[MEASUREMENT_OBJECT_9_CO4_DISPLAY_1] +Window=7 +Index=252 +Color=16776960 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_dc94a1a5-6e18-4082-b816-9d626f031600 + +[MEASUREMENT_OBJECT_9_CO5] +Name=$heap_struct1$$array_field$$[004]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO50] +Name=$heap_struct1$$array_field$$[049]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO50_DISPLAY_1] +Window=7 +Index=206 +Color=255 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_bfdff99d-882b-41cb-9252-aa9194a9e7ee + +[MEASUREMENT_OBJECT_9_CO51] +Name=$heap_struct1$$array_field$$[050]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO51_DISPLAY_1] +Window=7 +Index=205 +Color=65535 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_3f4e94e1-b303-428c-b2b0-27478677b15c + +[MEASUREMENT_OBJECT_9_CO52] +Name=$heap_struct1$$array_field$$[051]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO52_DISPLAY_1] +Window=7 +Index=204 +Color=16776960 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_3a6390e7-b03c-4934-9183-47383ae4210d + +[MEASUREMENT_OBJECT_9_CO53] +Name=$heap_struct1$$array_field$$[052]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO53_DISPLAY_1] +Window=7 +Index=203 +Color=16711935 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_7990e3ba-30c4-4943-bfbc-2093ea41d918 + +[MEASUREMENT_OBJECT_9_CO54] +Name=$heap_struct1$$array_field$$[053]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO54_DISPLAY_1] +Window=7 +Index=202 +Color=33023 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_067d7d00-9acd-42c5-baf7-45acce3320cf + +[MEASUREMENT_OBJECT_9_CO55] +Name=$heap_struct1$$array_field$$[054]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO55_DISPLAY_1] +Window=7 +Index=201 +Color=16744576 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_58f06442-4f7c-4840-a7b7-95d59c5435f6 + +[MEASUREMENT_OBJECT_9_CO56] +Name=$heap_struct1$$array_field$$[055]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO56_DISPLAY_1] +Window=7 +Index=200 +Color=16777215 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_18c03672-1d9b-458b-80fa-ffd36ed31d7d + +[MEASUREMENT_OBJECT_9_CO57] +Name=$heap_struct1$$array_field$$[056]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO57_DISPLAY_1] +Window=7 +Index=199 +Color=43520 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_9fbada6c-8df7-452f-9e02-a7a9e67f1fe7 + +[MEASUREMENT_OBJECT_9_CO58] +Name=$heap_struct1$$array_field$$[057]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO58_DISPLAY_1] +Window=7 +Index=198 +Color=204 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_295d62c4-81bf-4ef9-96db-b73310422cea + +[MEASUREMENT_OBJECT_9_CO59] +Name=$heap_struct1$$array_field$$[058]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO59_DISPLAY_1] +Window=7 +Index=197 +Color=28784 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_860ab4cb-b5d6-450a-8f31-04bf783fa4b2 + +[MEASUREMENT_OBJECT_9_CO5_DISPLAY_1] +Window=7 +Index=251 +Color=16711935 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_2598bf3c-0239-4932-9ec2-b48820c451e9 + +[MEASUREMENT_OBJECT_9_CO6] +Name=$heap_struct1$$array_field$$[005]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO60] +Name=$heap_struct1$$array_field$$[059]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO60_DISPLAY_1] +Window=7 +Index=196 +Color=16755200 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_46c4d30b-4b3d-433d-9fb9-f56b8c5d3384 + +[MEASUREMENT_OBJECT_9_CO61] +Name=$heap_struct1$$array_field$$[060]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO61_DISPLAY_1] +Window=7 +Index=195 +Color=16711850 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_c49adb1c-2e0b-46a8-bcc9-99f37fa6d54e + +[MEASUREMENT_OBJECT_9_CO62] +Name=$heap_struct1$$array_field$$[061]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO62_DISPLAY_1] +Window=7 +Index=194 +Color=21930 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_b10051aa-f22e-4b7d-8380-bf90154f3e53 + +[MEASUREMENT_OBJECT_9_CO63] +Name=$heap_struct1$$array_field$$[062]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO63_DISPLAY_1] +Window=7 +Index=193 +Color=11162965 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_f51ee920-49b1-45ba-8539-88419302a7db + +[MEASUREMENT_OBJECT_9_CO64] +Name=$heap_struct1$$array_field$$[063]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO64_DISPLAY_1] +Window=7 +Index=192 +Color=11206655 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_93451f03-549e-4f21-9f55-a8020fa3462d + +[MEASUREMENT_OBJECT_9_CO65] +Name=$heap_struct1$$array_field$$[064]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO65_DISPLAY_1] +Window=7 +Index=191 +Color=65450 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_3b131c7a-f246-4c10-a906-d72b2e373523 + +[MEASUREMENT_OBJECT_9_CO66] +Name=$heap_struct1$$array_field$$[065]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO66_DISPLAY_1] +Window=7 +Index=190 +Color=8421631 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_472d4fa0-623e-4427-94e4-d9b104200aeb + +[MEASUREMENT_OBJECT_9_CO67] +Name=$heap_struct1$$array_field$$[066]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO67_DISPLAY_1] +Window=7 +Index=189 +Color=43690 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_2f72f0e6-491f-451f-9f54-b12a3cec89c0 + +[MEASUREMENT_OBJECT_9_CO68] +Name=$heap_struct1$$array_field$$[067]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO68_DISPLAY_1] +Window=7 +Index=188 +Color=11184640 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_9bfd2134-cc2f-4da9-a45c-8cbf13f60173 + +[MEASUREMENT_OBJECT_9_CO69] +Name=$heap_struct1$$array_field$$[068]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO69_DISPLAY_1] +Window=7 +Index=187 +Color=16755455 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_2742d46f-af5d-4e8f-ae77-9967ed40f4cb + +[MEASUREMENT_OBJECT_9_CO6_DISPLAY_1] +Window=7 +Index=250 +Color=33023 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_4b21102e-7f23-4e99-a05e-4c65799b8e04 + +[MEASUREMENT_OBJECT_9_CO7] +Name=$heap_struct1$$array_field$$[006]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO70] +Name=$heap_struct1$$array_field$$[069]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO70_DISPLAY_1] +Window=7 +Index=186 +Color=11184895 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_2c88f52f-dded-49e7-83d5-9b83e876149c + +[MEASUREMENT_OBJECT_9_CO71] +Name=$heap_struct1$$array_field$$[070]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO71_DISPLAY_1] +Window=7 +Index=185 +Color=16755370 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_7e8c178c-ee0e-4d85-a51e-f6987bdc07cb + +[MEASUREMENT_OBJECT_9_CO72] +Name=$heap_struct1$$array_field$$[071]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO72_DISPLAY_1] +Window=7 +Index=184 +Color=11206570 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_aa0e081a-1a5d-483e-8ee3-83c92008a57a + +[MEASUREMENT_OBJECT_9_CO73] +Name=$heap_struct1$$array_field$$[072]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO73_DISPLAY_1] +Window=7 +Index=183 +Color=65280 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_77989fdf-2468-41e0-b27d-1baa0d4208b3 + +[MEASUREMENT_OBJECT_9_CO74] +Name=$heap_struct1$$array_field$$[073]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO74_DISPLAY_1] +Window=7 +Index=182 +Color=255 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_79028f83-d5f2-4729-b69c-b23fec5a8beb + +[MEASUREMENT_OBJECT_9_CO75] +Name=$heap_struct1$$array_field$$[074]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO75_DISPLAY_1] +Window=7 +Index=181 +Color=65535 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_38be73b2-5a9b-4e16-b9fb-14d8d861ee41 + +[MEASUREMENT_OBJECT_9_CO76] +Name=$heap_struct1$$array_field$$[075]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO76_DISPLAY_1] +Window=7 +Index=180 +Color=16776960 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_00313c9a-1ba6-4adc-b0bf-ee932554ee16 + +[MEASUREMENT_OBJECT_9_CO77] +Name=$heap_struct1$$array_field$$[076]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO77_DISPLAY_1] +Window=7 +Index=179 +Color=16711935 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_aadbf06c-d424-4b08-8c2d-a021b52aca65 + +[MEASUREMENT_OBJECT_9_CO78] +Name=$heap_struct1$$array_field$$[077]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO78_DISPLAY_1] +Window=7 +Index=178 +Color=33023 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_0c21e5b5-fe94-4b88-a9b8-5533d591fd88 + +[MEASUREMENT_OBJECT_9_CO79] +Name=$heap_struct1$$array_field$$[078]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO79_DISPLAY_1] +Window=7 +Index=177 +Color=16744576 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_a1b1f884-3789-43ac-8e74-cd00d488b156 + +[MEASUREMENT_OBJECT_9_CO7_DISPLAY_1] +Window=7 +Index=249 +Color=16744576 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_020d090e-ed4c-445d-bdb4-e790fb5cd4b3 + +[MEASUREMENT_OBJECT_9_CO8] +Name=$heap_struct1$$array_field$$[007]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO80] +Name=$heap_struct1$$array_field$$[079]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO80_DISPLAY_1] +Window=7 +Index=176 +Color=16777215 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_382c0fa5-253a-4580-bfce-14b367cd4304 + +[MEASUREMENT_OBJECT_9_CO81] +Name=$heap_struct1$$array_field$$[080]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO81_DISPLAY_1] +Window=7 +Index=175 +Color=43520 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_4289a431-6ccf-451e-94db-bdcc79d0a032 + +[MEASUREMENT_OBJECT_9_CO82] +Name=$heap_struct1$$array_field$$[081]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO82_DISPLAY_1] +Window=7 +Index=174 +Color=204 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_3805c88c-92f7-4a7d-98ae-4d5529d90718 + +[MEASUREMENT_OBJECT_9_CO83] +Name=$heap_struct1$$array_field$$[082]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO83_DISPLAY_1] +Window=7 +Index=173 +Color=28784 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_17740bde-871f-4978-9f12-5d452eba242a + +[MEASUREMENT_OBJECT_9_CO84] +Name=$heap_struct1$$array_field$$[083]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO84_DISPLAY_1] +Window=7 +Index=172 +Color=16755200 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_e667fcca-c0c1-467c-8bda-4a76db90122e + +[MEASUREMENT_OBJECT_9_CO85] +Name=$heap_struct1$$array_field$$[084]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO85_DISPLAY_1] +Window=7 +Index=171 +Color=16711850 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_e948c1a7-f018-4d35-ab01-01b3eb337cbb + +[MEASUREMENT_OBJECT_9_CO86] +Name=$heap_struct1$$array_field$$[085]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO86_DISPLAY_1] +Window=7 +Index=170 +Color=21930 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_b4b646f7-73b4-44ae-b34d-8e7ce45a1f77 + +[MEASUREMENT_OBJECT_9_CO87] +Name=$heap_struct1$$array_field$$[086]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO87_DISPLAY_1] +Window=7 +Index=169 +Color=11162965 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_e7297c84-2c3a-4ff5-9645-d4f2940a3b29 + +[MEASUREMENT_OBJECT_9_CO88] +Name=$heap_struct1$$array_field$$[087]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO88_DISPLAY_1] +Window=7 +Index=168 +Color=11206655 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_386bd2a6-b0f1-4e44-9bd1-f18316aad964 + +[MEASUREMENT_OBJECT_9_CO89] +Name=$heap_struct1$$array_field$$[088]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO89_DISPLAY_1] +Window=7 +Index=167 +Color=65450 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_ee8af050-4cd0-478b-a31c-1c7ba08f3da1 + +[MEASUREMENT_OBJECT_9_CO8_DISPLAY_1] +Window=7 +Index=248 +Color=16777215 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_6c2e8674-e1fc-48ba-b9b8-59a88f1419ed + +[MEASUREMENT_OBJECT_9_CO9] +Name=$heap_struct1$$array_field$$[008]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO90] +Name=$heap_struct1$$array_field$$[089]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO90_DISPLAY_1] +Window=7 +Index=166 +Color=8421631 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_07c8e9a7-f88b-403f-ad37-5babe4b65439 + +[MEASUREMENT_OBJECT_9_CO91] +Name=$heap_struct1$$array_field$$[090]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO91_DISPLAY_1] +Window=7 +Index=165 +Color=43690 +ApplyColorToBackground=0 +ColorFunction=0 +ColorFunctionScope=1 +LineTyp=2 +YMinHome=0 +YMaxHome=100 +YMin=0 +YMax=100 +XOffsetNS=0 +XOffset=0 +ValueFormat=3 +BitMask=255 +ShowYAxis=1 +Width=10 +LineStyle=1 +MarkerType=1 +SRMainValue=0 +InvalidValueDrawMode=3 +LineWidth=1 +Precision=-2 +Digits=6 +Enabled=1 +StoredFocused=0 +SublMask=1 +MeaSublMask=0 +LockScaling=0 +RightAxis=0 +MapMode=2 +OverlayGridColor=0 +ShadingMode=3 +EditOffset=1 +EditFactor=2 +WAxisLabel= +XAxisLabel= +YAxisLabel= +AxisCaption= +Row=0 +Col=0 +YAxis_ID=0 +AxisTemplate= +GUID=DISPLAY_bc729b6a-f8d4-47d6-a996-e54cd7132899 -[MEASUREMENT_OBJECT_10] -Components=0 -Module=xcp_demo -Name=$heap_struct2$ -Disabled=0 -Mode=2147483649 -Rate=0 -ModeIsDefault=1 -Row=0 -Column=0 -MeaReferenced=1 -ArchivBy_1=Recorder1 +[MEASUREMENT_OBJECT_9_CO92] +Name=$heap_struct1$$array_field$$[091]$ IsFallback=0 -HasManagedDisplay=0 DisplayCount=1 -[MEASUREMENT_OBJECT_10_DISPLAY_1] -Window=5 -Index=0 -Color=16777215 +[MEASUREMENT_OBJECT_9_CO92_DISPLAY_1] +Window=7 +Index=164 +Color=11184640 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -253,7 +13401,7 @@ YMax=100 XOffsetNS=0 XOffset=0 ValueFormat=3 -BitMask=1 +BitMask=255 ShowYAxis=1 Width=10 LineStyle=1 @@ -265,7 +13413,7 @@ Precision=-2 Digits=6 Enabled=1 StoredFocused=0 -SublMask=0 +SublMask=1 MeaSublMask=0 LockScaling=0 RightAxis=0 @@ -282,24 +13430,29 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_3ed3f6e9-ae0c-49be-af00-fb64977e9939 +GUID=DISPLAY_77a7f3a6-cab5-4113-b590-96a6b6fc7db5 -[MEASUREMENT_OBJECT_1_DISPLAY_1] -Window=2 -Index=1 -Color=16744576 +[MEASUREMENT_OBJECT_9_CO93] +Name=$heap_struct1$$array_field$$[092]$ +IsFallback=0 +DisplayCount=1 + +[MEASUREMENT_OBJECT_9_CO93_DISPLAY_1] +Window=7 +Index=163 +Color=16755455 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 LineTyp=2 YMinHome=0 -YMaxHome=65535 +YMaxHome=100 YMin=0 -YMax=65535 +YMax=100 XOffsetNS=0 XOffset=0 ValueFormat=3 -BitMask=1 +BitMask=255 ShowYAxis=1 Width=10 LineStyle=1 @@ -312,7 +13465,7 @@ Digits=6 Enabled=1 StoredFocused=0 SublMask=1 -MeaSublMask=3 +MeaSublMask=0 LockScaling=0 RightAxis=0 MapMode=2 @@ -326,41 +13479,31 @@ YAxisLabel= AxisCaption= Row=0 Col=0 -YAxis_ID=1 +YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_8f489186-62a8-497f-afef-e1bcf40c6cbd +GUID=DISPLAY_4a96a8d9-ca37-4eb1-96a7-a849de8f5561 -[MEASUREMENT_OBJECT_2] -Module=xcp_demo -Name=static_counter -Disabled=0 -Mode=2147483648 -Rate=0 -ModeIsDefault=1 -Row=0 -Column=0 -MeaReferenced=1 -ArchivBy_1=Recorder1 +[MEASUREMENT_OBJECT_9_CO94] +Name=$heap_struct1$$array_field$$[093]$ IsFallback=0 -HasManagedDisplay=0 DisplayCount=1 -[MEASUREMENT_OBJECT_2_DISPLAY_1] -Window=2 -Index=0 -Color=16777215 +[MEASUREMENT_OBJECT_9_CO94_DISPLAY_1] +Window=7 +Index=162 +Color=11184895 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 LineTyp=2 YMinHome=0 -YMaxHome=65535 +YMaxHome=100 YMin=0 -YMax=65535 +YMax=100 XOffsetNS=0 XOffset=0 ValueFormat=3 -BitMask=1 +BitMask=255 ShowYAxis=1 Width=10 LineStyle=1 @@ -371,9 +13514,9 @@ LineWidth=1 Precision=-2 Digits=6 Enabled=1 -StoredFocused=1 +StoredFocused=0 SublMask=1 -MeaSublMask=3 +MeaSublMask=0 LockScaling=0 RightAxis=0 MapMode=2 @@ -387,30 +13530,19 @@ YAxisLabel= AxisCaption= Row=0 Col=0 -YAxis_ID=1 +YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_d644a337-88be-47d7-b473-8c28df4cf97e +GUID=DISPLAY_1bfd0c6f-9701-41e5-8679-f4e703f22fee -[MEASUREMENT_OBJECT_3] -Components=0 -Module=xcp_demo -Name=$local_struct1$ -Disabled=0 -Mode=2147483648 -Rate=0 -ModeIsDefault=1 -Row=0 -Column=0 -MeaReferenced=1 -ArchivBy_1=Recorder1 +[MEASUREMENT_OBJECT_9_CO95] +Name=$heap_struct1$$array_field$$[094]$ IsFallback=0 -HasManagedDisplay=0 DisplayCount=1 -[MEASUREMENT_OBJECT_3_DISPLAY_1] -Window=5 -Index=7 -Color=65280 +[MEASUREMENT_OBJECT_9_CO95_DISPLAY_1] +Window=7 +Index=161 +Color=16755370 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -422,7 +13554,7 @@ YMax=100 XOffsetNS=0 XOffset=0 ValueFormat=3 -BitMask=1 +BitMask=255 ShowYAxis=1 Width=10 LineStyle=1 @@ -434,7 +13566,7 @@ Precision=-2 Digits=6 Enabled=1 StoredFocused=0 -SublMask=0 +SublMask=1 MeaSublMask=0 LockScaling=0 RightAxis=0 @@ -451,28 +13583,17 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_b9fa0758-955b-40c9-ac65-334f00d4840c +GUID=DISPLAY_a2cfccc5-28e0-453e-92ab-56fdc13a32a3 -[MEASUREMENT_OBJECT_4] -Components=0 -Module=xcp_demo -Name=$local_struct1_array$ -Disabled=0 -Mode=2147483648 -Rate=0 -ModeIsDefault=1 -Row=0 -Column=0 -MeaReferenced=1 -ArchivBy_1=Recorder1 +[MEASUREMENT_OBJECT_9_CO96] +Name=$heap_struct1$$array_field$$[095]$ IsFallback=0 -HasManagedDisplay=0 DisplayCount=1 -[MEASUREMENT_OBJECT_4_DISPLAY_1] -Window=5 -Index=6 -Color=255 +[MEASUREMENT_OBJECT_9_CO96_DISPLAY_1] +Window=7 +Index=160 +Color=11206570 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -484,7 +13605,7 @@ YMax=100 XOffsetNS=0 XOffset=0 ValueFormat=3 -BitMask=1 +BitMask=255 ShowYAxis=1 Width=10 LineStyle=1 @@ -496,7 +13617,7 @@ Precision=-2 Digits=6 Enabled=1 StoredFocused=0 -SublMask=0 +SublMask=1 MeaSublMask=0 LockScaling=0 RightAxis=0 @@ -513,28 +13634,17 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_92b97e00-ea80-4f2c-b4a5-fa7f3a34bea9 +GUID=DISPLAY_647f47ee-f6d7-4e9a-aaf4-a5fcd7cbd900 -[MEASUREMENT_OBJECT_5] -Components=0 -Module=xcp_demo -Name=$local_struct2$ -Disabled=0 -Mode=2147483648 -Rate=0 -ModeIsDefault=1 -Row=0 -Column=0 -MeaReferenced=1 -ArchivBy_1=Recorder1 +[MEASUREMENT_OBJECT_9_CO97] +Name=$heap_struct1$$array_field$$[096]$ IsFallback=0 -HasManagedDisplay=0 DisplayCount=1 -[MEASUREMENT_OBJECT_5_DISPLAY_1] -Window=5 -Index=5 -Color=65535 +[MEASUREMENT_OBJECT_9_CO97_DISPLAY_1] +Window=7 +Index=159 +Color=65280 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -546,7 +13656,7 @@ YMax=100 XOffsetNS=0 XOffset=0 ValueFormat=3 -BitMask=1 +BitMask=255 ShowYAxis=1 Width=10 LineStyle=1 @@ -558,7 +13668,7 @@ Precision=-2 Digits=6 Enabled=1 StoredFocused=0 -SublMask=0 +SublMask=1 MeaSublMask=0 LockScaling=0 RightAxis=0 @@ -575,28 +13685,17 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_ddd2618d-c1c8-43e0-8b42-17070a825d44 +GUID=DISPLAY_bec59b5a-eabf-4c72-8bc8-cd0ba55780a5 -[MEASUREMENT_OBJECT_6] -Components=0 -Module=xcp_demo -Name=$static_struct1$ -Disabled=0 -Mode=2147483648 -Rate=0 -ModeIsDefault=1 -Row=0 -Column=0 -MeaReferenced=1 -ArchivBy_1=Recorder1 +[MEASUREMENT_OBJECT_9_CO98] +Name=$heap_struct1$$array_field$$[097]$ IsFallback=0 -HasManagedDisplay=0 DisplayCount=1 -[MEASUREMENT_OBJECT_6_DISPLAY_1] -Window=5 -Index=4 -Color=16776960 +[MEASUREMENT_OBJECT_9_CO98_DISPLAY_1] +Window=7 +Index=158 +Color=255 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -608,7 +13707,7 @@ YMax=100 XOffsetNS=0 XOffset=0 ValueFormat=3 -BitMask=1 +BitMask=255 ShowYAxis=1 Width=10 LineStyle=1 @@ -620,7 +13719,7 @@ Precision=-2 Digits=6 Enabled=1 StoredFocused=0 -SublMask=0 +SublMask=1 MeaSublMask=0 LockScaling=0 RightAxis=0 @@ -637,28 +13736,17 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_c9292d48-a2c9-48c3-b12c-3dfe0d142eac +GUID=DISPLAY_26cdda2b-3cc0-4c7e-94df-e38fffa720b4 -[MEASUREMENT_OBJECT_7] -Components=0 -Module=xcp_demo -Name=$static_struct1_array$ -Disabled=0 -Mode=2147483648 -Rate=0 -ModeIsDefault=1 -Row=0 -Column=0 -MeaReferenced=1 -ArchivBy_1=Recorder1 +[MEASUREMENT_OBJECT_9_CO99] +Name=$heap_struct1$$array_field$$[098]$ IsFallback=0 -HasManagedDisplay=0 DisplayCount=1 -[MEASUREMENT_OBJECT_7_DISPLAY_1] -Window=5 -Index=3 -Color=16711935 +[MEASUREMENT_OBJECT_9_CO99_DISPLAY_1] +Window=7 +Index=157 +Color=65535 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -670,7 +13758,7 @@ YMax=100 XOffsetNS=0 XOffset=0 ValueFormat=3 -BitMask=1 +BitMask=255 ShowYAxis=1 Width=10 LineStyle=1 @@ -682,7 +13770,7 @@ Precision=-2 Digits=6 Enabled=1 StoredFocused=0 -SublMask=0 +SublMask=1 MeaSublMask=0 LockScaling=0 RightAxis=0 @@ -699,28 +13787,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_62100522-5e70-4ede-b014-a1e9a2f3dd7a - -[MEASUREMENT_OBJECT_8] -Components=0 -Module=xcp_demo -Name=$static_struct2$ -Disabled=0 -Mode=2147483648 -Rate=0 -ModeIsDefault=1 -Row=0 -Column=0 -MeaReferenced=1 -ArchivBy_1=Recorder1 -IsFallback=0 -HasManagedDisplay=0 -DisplayCount=1 +GUID=DISPLAY_968ba721-91ab-426e-bff6-3a817a92b172 -[MEASUREMENT_OBJECT_8_DISPLAY_1] -Window=5 -Index=2 -Color=33023 +[MEASUREMENT_OBJECT_9_CO9_DISPLAY_1] +Window=7 +Index=247 +Color=43520 ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 @@ -732,7 +13804,7 @@ YMax=100 XOffsetNS=0 XOffset=0 ValueFormat=3 -BitMask=1 +BitMask=255 ShowYAxis=1 Width=10 LineStyle=1 @@ -744,7 +13816,7 @@ Precision=-2 Digits=6 Enabled=1 StoredFocused=0 -SublMask=0 +SublMask=1 MeaSublMask=0 LockScaling=0 RightAxis=0 @@ -761,23 +13833,7 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_5f3e2ac4-a3c2-4615-b619-9c8cbd2f1ee6 - -[MEASUREMENT_OBJECT_9] -Components=0 -Module=xcp_demo -Name=$heap_struct1$ -Disabled=0 -Mode=2147483649 -Rate=0 -ModeIsDefault=1 -Row=0 -Column=0 -MeaReferenced=1 -ArchivBy_1=Recorder1 -IsFallback=0 -HasManagedDisplay=0 -DisplayCount=1 +GUID=DISPLAY_90044ef8-4000-4f21-aab8-899097f5e7ce [MEASUREMENT_OBJECT_9_DISPLAY_1] Window=5 @@ -891,29 +13947,40 @@ VmdmDescription= Count=0 [Module_xcp_demo] -EVENT_COUNT=2 +EVENT_COUNT=3 EVENT_CHANNEL_0=0x0000 EVENT_CHANNEL_1=0x0001 -EVENT_CYCLE_0=0 +EVENT_CHANNEL_2=0x0002 +EVENT_CYCLE_0=100 EVENT_CYCLE_1=0 -EVENT_SAMPLE_UNIT_0=3 +EVENT_CYCLE_2=0 +EVENT_SAMPLE_UNIT_0=7 EVENT_SAMPLE_UNIT_1=3 +EVENT_SAMPLE_UNIT_2=3 EVENT_MODE_0=4 EVENT_MODE_1=4 +EVENT_MODE_2=4 EVENT_PRIO_0=0 EVENT_PRIO_1=0 +EVENT_PRIO_2=0 EVENT_MAX_DAQ_LIST_0=255 EVENT_MAX_DAQ_LIST_1=255 -EVENT_NAME_0=event -EVENT_NAME_1=event_heap +EVENT_MAX_DAQ_LIST_2=255 +EVENT_NAME_0=async +EVENT_NAME_1=event +EVENT_NAME_2=event_heap EVENT_MIN_CYCLE_TIME_CYCLE_0=0 EVENT_MIN_CYCLE_TIME_CYCLE_1=0 +EVENT_MIN_CYCLE_TIME_CYCLE_2=0 EVENT_MIN_CYCLE_TIME_UNIT_0=9 EVENT_MIN_CYCLE_TIME_UNIT_1=9 +EVENT_MIN_CYCLE_TIME_UNIT_2=9 EVENT_MULTISAMPLES_0=0 EVENT_MULTISAMPLES_1=0 +EVENT_MULTISAMPLES_2=0 EVENT_DPM_SUPPORTED_0=0 EVENT_DPM_SUPPORTED_1=0 +EVENT_DPM_SUPPORTED_2=0 IGNORE_FIX_EVENTS=0 [OPTIONS] @@ -921,8 +13988,8 @@ WindowTextExtended=1 WindowTextExtendedNew=1 WindowSymbols=1 GlobalCursor=1 -GlobalCursorTime=16324 -GlobalCursorTimeNs=16324989584 +GlobalCursorTime=5018 +GlobalCursorTimeNs=5018937167 MainWindowPos=1, 102, 56, 2824, 1646 ;cmd, x, y, w, h [PAR_COMMENT] @@ -1075,15 +14142,25 @@ ActiveTab=0 FilterNodeID=All\Devices\xcp_demo TreeExpand_0=@All TreeExpand_1=All\Devices\xcp_demo\xcp_demo_autodetect.a2l -TreeExpand_2=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events -TreeExpand_3=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Parameters -TreeExpand_4=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\event -TreeExpand_5=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\event_heap -TreeExpand_6=$All\Devices -TreeExpand_7=# -TreeExpand_8=@All\Devices\xcp_demo -TreeExpand_9=$All\Devices\xcp_demo\xcp_demo_autodetect.a2l -TreeExpand_10=#All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\event_heap\heap_struct2 +TreeExpand_2=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Parameters +TreeExpand_3=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\event +TreeExpand_4=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\event_heap +TreeExpand_5=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\event_heap\heap_struct1 +TreeExpand_6=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\event_heap\heap_struct1\heap_struct1.struct_field +TreeExpand_7=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\event_heap\heap_struct1\heap_struct1.array_field +TreeExpand_8=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\event\local_struct1 +TreeExpand_9=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\event\local_struct1\local_struct1.array_field +TreeExpand_10=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\event\local_struct1\local_struct1.struct_field +TreeExpand_11=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\event\local_struct1_array +TreeExpand_12=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\event\local_struct2 +TreeExpand_13=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\event\static_struct1 +TreeExpand_14=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\event\static_struct1_array +TreeExpand_15=All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events\event\static_struct2 +TreeExpand_16=$All\Devices +TreeExpand_17=# +TreeExpand_18=@All\Devices\xcp_demo +TreeExpand_19=$All\Devices\xcp_demo\xcp_demo_autodetect.a2l +TreeExpand_20=#All\Devices\xcp_demo\xcp_demo_autodetect.a2l\Events TextSearchCaseSensitive=0 TextSearchUseMode=1 TextSearchSearchFullText=1 @@ -1101,10 +14178,10 @@ Comment=Multi view window Number=1 GUID=WINDOW_3f306d17-7bdd-464f-bbd8-ead5b31ddbd8 ScreenDPIinSection=192 -Position=0, 680, 442, 1604, 452 ;cmd, x, y, w, h -Position_dpi96=0, 340, 221, 802, 226 ;cmd, x, y, w, h -Position_Page01=0, 680, 442, 1604, 452 ;cmd, x, y, w, h -Position_Page01_dpi96=0, 340, 221, 802, 226 ;cmd, x, y, w, h +Position=0, 680, 13, 1604, 416 ;cmd, x, y, w, h +Position_dpi96=0, 340, 7, 802, 208 ;cmd, x, y, w, h +Position_Page01=0, 680, 13, 1604, 416 ;cmd, x, y, w, h +Position_Page01_dpi96=0, 340, 7, 802, 208 ;cmd, x, y, w, h FloatingWindow=0 ShowSignalComments=1 DisplayMask=1 ; pages 1 @@ -1113,15 +14190,15 @@ DisplayMask=1 ; pages 1 XLen=3789 XMin=0 XMinNs=0 -XMax=17142 -XMaxNs=17142289063 +XMax=132588 +XMaxNs=132588325920 Grid=1 Mark=1 YValue=2 ShowLegend=2 ShowLegendHeader=1 -LegendPixWidth=648 -LegendPixWidth_dpi96=324 +LegendPixWidth=351 +LegendPixWidth_dpi96=176 LegendPixHeight=196 LegendPixHeight_dpi96=98 LegendPos=2 @@ -1148,7 +14225,7 @@ YAxisDynScaleEnabled=0 YAxisDynScaleEnlarge=25 TimeStickToZero=0 XYModeRedrawEnabled=0 -MARKER_TIME_1=16324989584 +MARKER_TIME_1=5018937167 MARKER_TIME_2=1945292750 OscilloscopeEnabled=0 OsciEventCount=0 @@ -1177,8 +14254,8 @@ DisplayMask=1 ; pages 1 [WINDOW_2_LEG_COLUMNS] ScreenDPIinSection=192 COUNT=2 -COL_0=31, 554 -COL_0_dpi96=31, 277 +COL_0=31, 242 +COL_0_dpi96=31, 121 COL_1=1048578, 98 COL_1_dpi96=1048578, 49 @@ -1202,10 +14279,10 @@ Comment=Write Window Number=3 GUID=WINDOW_446152b9-0c82-4710-9a56-52baa89295ac ScreenDPIinSection=192 -Position=0, 680, 0, 1604, 418 ;cmd, x, y, w, h -Position_dpi96=0, 340, 0, 802, 209 ;cmd, x, y, w, h -Position_Page01=0, 680, 0, 1604, 418 ;cmd, x, y, w, h -Position_Page01_dpi96=0, 340, 0, 802, 209 ;cmd, x, y, w, h +Position=0, 680, 778, 1327, 452 ;cmd, x, y, w, h +Position_dpi96=0, 340, 389, 664, 226 ;cmd, x, y, w, h +Position_Page01=0, 680, 778, 1327, 452 ;cmd, x, y, w, h +Position_Page01_dpi96=0, 340, 389, 664, 226 ;cmd, x, y, w, h FloatingWindow=0 ShowSignalComments=1 DisplayMask=1 ; pages 1 @@ -1215,7 +14292,7 @@ ProgID=CNPTRACE.TraceCtrl.1 PROPERTIES_COUNT=22 PROPERTY_1=DeviceItems={"CaptureEvents":"1","ShowEvents":"0","NodeCount":"1","Node0":{"DeviceName":"xcp_demo","CaptureEvents":"1","ShowEvents":"1","NodeCount":"3","Node0":{"Channel":"2","DisplayColor":{"Color":"0","UseColor":"false"},"CaptureEvents":"1","ShowEvents":"1","NodeCount":"0"},"Node1":{"Channel":"3","DisplayColor":{"Color":"0","UseColor":"false"},"CaptureEvents":"1","ShowEvents":"1","NodeCount":"0"},"Node2":{"Channel":"4","DisplayColor":{"Color":"0","UseColor":"false"},"CaptureEvents":"1","ShowEvents":"1","NodeCount":"0"}}} PROPERTY_2=NetworkItems={"Items":"0"} -PROPERTY_3=ColumnConfigs={"ConfigCount":"1","Config0":{"Layout":"1","Name":"hello_xcp","Column0":{"Width":"212","Position":"0","Name":"Time","IsDefaultName":"1"},"Column3":{"Width":"92","Position":"1","Name":"Name","IsDefaultName":"1"},"Column6":{"Width":"100","Position":"2","Name":"Length","IsDefaultName":"1"},"Column7":{"Width":"600","Position":"4","Name":"Data","IsDefaultName":"1"},"Column52":{"Width":"624","Position":"3","Name":"Protocol Interpretation","IsDefaultName":"1"}},"Active":"0","ActiveLayout":"1"} +PROPERTY_3=ColumnConfigs={"ConfigCount":"1","Config0":{"Layout":"1","Name":"hello_xcp","Column0":{"Width":"212","Position":"0","Name":"Time","IsDefaultName":"1"},"Column3":{"Width":"92","Position":"1","Name":"Name","IsDefaultName":"1"},"Column6":{"Width":"100","Position":"2","Name":"Length","IsDefaultName":"1"},"Column7":{"Width":"340","Position":"4","Name":"Data","IsDefaultName":"1"},"Column52":{"Width":"899","Position":"3","Name":"Protocol Interpretation","IsDefaultName":"1"}},"Active":"0","ActiveLayout":"1"} PROPERTY_4=PinningEvents={"EventCount":"0"} PROPERTY_5=ExpandedEvents={"EventCount":"0"} PROPERTY_6=AnalysisGroups={"GroupCount":"1","Group0":{"Enabled":"1","Expanded":"1","Name":"Filtergruppe 0","FilterCount":"2","Filter0":{"Stop":"1","Enabled":"1","ConditionCount":"0"},"Filter1":{"Stop":"0","Enabled":"0","ConditionCount":"0"}}} @@ -1243,8 +14320,8 @@ ColumnCount=5 Column_0=0, 212 Column_1=4, 92 Column_2=2, 100 -Column_3=513, 624 -Column_4=3, 600 +Column_3=513, 899 +Column_4=3, 340 DeltaTimeEnabled=1 Title=Trace-Fenster {DISPLAYED_FILENAME} Type=16384 @@ -1252,10 +14329,10 @@ Comment=ActiveX Window Number=4 GUID=WINDOW_9327afe1-ff92-4071-9bed-dc42be1f63ed ScreenDPIinSection=192 -Position=0, 0, 0, 2108, 970 ;cmd, x, y, w, h -Position_dpi96=0, 0, 0, 1054, 485 ;cmd, x, y, w, h -Position_Page02=0, 0, 0, 2108, 970 ;cmd, x, y, w, h -Position_Page02_dpi96=0, 0, 0, 1054, 485 ;cmd, x, y, w, h +Position=0, 0, 0, 2228, 1186 ;cmd, x, y, w, h +Position_dpi96=0, 0, 0, 1114, 593 ;cmd, x, y, w, h +Position_Page02=0, 0, 0, 2228, 1186 ;cmd, x, y, w, h +Position_Page02_dpi96=0, 0, 0, 1114, 593 ;cmd, x, y, w, h FloatingWindow=0 ShowSignalComments=1 DisplayMask=2 ; pages 2 @@ -1275,11 +14352,14 @@ Color=0 [WINDOW_5] ObjectCount=0 Expanded_Root_0_GUID=DISPLAY_b9fa0758-955b-40c9-ac65-334f00d4840c -Expanded_Root_0_0=local_struct1.struct_field -Expanded_Root_0_Count=1 +Expanded_Root_0_0=local_struct1 +Expanded_Root_0_1=local_struct1.struct_field +Expanded_Root_0_Count=2 Expanded_Root_1_GUID=DISPLAY_92b97e00-ea80-4f2c-b4a5-fa7f3a34bea9 -Expanded_Root_1_0=local_struct1_array[2].struct_field -Expanded_Root_1_Count=1 +Expanded_Root_1_0=local_struct1_array +Expanded_Root_1_1=local_struct1_array[0] +Expanded_Root_1_2=local_struct1_array[2].struct_field +Expanded_Root_1_Count=3 Expanded_Root_2_GUID=DISPLAY_ddd2618d-c1c8-43e0-8b42-17070a825d44 Expanded_Root_2_Count=0 Expanded_Root_3_GUID=DISPLAY_c9292d48-a2c9-48c3-b12c-3dfe0d142eac @@ -1289,7 +14369,8 @@ Expanded_Root_4_Count=0 Expanded_Root_5_GUID=DISPLAY_5f3e2ac4-a3c2-4615-b619-9c8cbd2f1ee6 Expanded_Root_5_Count=0 Expanded_Root_6_GUID=DISPLAY_2ace1464-2778-430d-9924-c81c86e24e03 -Expanded_Root_6_Count=0 +Expanded_Root_6_0=heap_struct1 +Expanded_Root_6_Count=1 Expanded_Root_7_GUID=DISPLAY_3ed3f6e9-ae0c-49be-af00-fb64977e9939 Expanded_Root_7_0=heap_struct2 Expanded_Root_7_Count=1 @@ -1362,12 +14443,7 @@ Table_Component_Column_Id_2=3145729 Table_Component_Column_Name_2=word_field Table_Component_Column_Width_2=100 Table_Component_Column_Visible_2=1 -Table_Component_Column_OriginalName_3=Value -Table_Component_Column_Id_3=3145730 -Table_Component_Column_Name_3=Value -Table_Component_Column_Width_3=100 -Table_Component_Column_Visible_3=1 -Table_Component_Column_Count=4 +Table_Component_Column_Count=3 Table_Hidden_Columns_Count=0 Table_Hide_Root_0_GUID=DISPLAY_b9fa0758-955b-40c9-ac65-334f00d4840c Table_Hide_Root_0_Count=0 @@ -1430,12 +14506,12 @@ DisplayMask=1 ; pages 1 [WINDOW_6] ProgID= PROPERTIES_COUNT=1 -PROPERTY_1={"Version":"1.3.0.0","Configuration":{"ArrayWindowSubControlConfiguration":{"NumericGraphicCompositeWidth":317,"NumericGraphicCompositeHeight":129,"LegendCoordinatePoint":{"X":0,"Y":0},"LegendWidth":0,"LegendHeight":0,"LegendLayoutGroupSizeWidth":0,"LegendLayoutGroupSizeHeight":0,"NumericCoordinatePoint":{"X":1,"Y":24},"NumericWidth":315,"NumericHeight":104,"NumericLayoutGroupSizeWidth":315,"NumericLayoutGroupSizeHeight":104,"Intersection2DXWCoordinatePoint":{"X":0,"Y":0},"Intersection2DXWWidth":0,"Intersection2DXWHeight":0,"Intersection2DXWLayoutGroupSizeWidth":0,"Intersection2DXWLayoutGroupSizeHeight":0,"Intersection2DYWCoordinatePoint":{"X":0,"Y":0},"Intersection2DYWWidth":0,"Intersection2DYWHeight":0,"Intersection2DYWLayoutGroupSizeWidth":0,"Intersection2DYWLayoutGroupSizeHeight":0,"Graphic3DCoordinatePoint":{"X":0,"Y":0},"Graphic3DWidth":0,"Graphic3DHeight":0,"Graphic3DLayoutGroupSizeWidth":0,"Graphic3DLayoutGroupSizeHeight":0},"ShowCalibrationBar":true,"ShowHorizontalChartLines":false,"ShowVerticalChartLines":false,"NonSelectedIntersectionLineTransparency":0.100000024,"FocusedValueSymbol":"DEVICE:\"xcp_demo\":\"$heap_struct1$heap_struct1.word_field\":P","ValueObjectConfigurations":[{"Symbol":"DEVICE:\"xcp_demo\":\"$heap_struct1$heap_struct1.word_field\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":-32768,"ValueAxisMax":32767,"ValueAxisMinHome":-32768,"ValueAxisMaxHome":32767,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$heap_struct1$heap_struct1.byte_field\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":255,"ValueAxisMinHome":0,"ValueAxisMaxHome":255,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$heap_struct1$$struct_field$heap_struct1.struct_field.word_field\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":-32768,"ValueAxisMax":32767,"ValueAxisMinHome":-32768,"ValueAxisMaxHome":32767,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$heap_struct1$$struct_field$heap_struct1.struct_field.byte_field\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":0,"ValueAxisMax":255,"ValueAxisMinHome":0,"ValueAxisMaxHome":255,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]}],"NumericGraphicControlPosition":0,"NumericGraphicControlSelectedTab":0,"GraphicControlPosition":0,"Height2DXControl":1,"Height2DYControl":1,"Height3DControl":2,"HeightNumericControl":1,"HeightChartControl":1,"HeightLegendControl":0.44999998807907104,"Width2DXControl":1,"Width2DYControl":1,"Width3DControl":2,"WidthNumericControl":2,"WidthChartControl":2,"WidthLegendControl":0.30000001192092896,"HeightValueControl":1,"WidthValueControl":1,"HeightNumericGraphicControl":1,"WidthNumericGraphicControl":1,"Height2DChartsControl":1,"Width2DChartsControl":1,"IsXAxisHeightSynchronizedBetweenCharts":true,"IsYAxisAreaWidthSynchronizedBetweenCharts":true,"SyncedXAxisHeight":NaN,"XWChartXAxisHeight":NaN,"YWChartXAxisHeight":NaN,"SyncedLeftAxisAreaWidth":NaN,"XWChartLeftAxisAreaWidth":NaN,"YWChartLeftAxisAreaWidth":NaN,"SyncedRightAxisAreaWidth":NaN,"XWChartRightAxisAreaWidth":NaN,"YWChartRightAxisAreaWidth":NaN,"LegendPosition":0,"LegendViewType":0,"LegendTableColumnAttributes":[{"TypeId":"1048594","Size":40},{"TypeId":"1048601","Size":45},{"TypeId":"31","Size":100},{"TypeId":"3","Size":250},{"TypeId":"16","Size":70},{"TypeId":"1048627","Size":100},{"TypeId":"1048631","Size":100},{"TypeId":"1048634","Size":100}],"LegendTabItemAttributes":[{"TypeId":"31","Size":100}],"FlipAxes":false,"AxisDisplayNameMode":3,"ReversedAxis":[false,false],"ShowUnits":false,"ShowObjectColor":true,"SortDescending":false,"SortAttributeId":null,"ShowWorkingPointHistory":false,"NumericViewValueObjectDisplayOption":1,"ValueColumnWidth":83,"ValueColumnWidthDouble":83.5,"ParameterGroup":"","ModuleName":"","GroupIsFunction":false,"NumericControlAxisAttributes":[],"NumericControlColumnAttributes":[{"TypeId":"31","Size":216}],"ChartViewValueObjectDisplayOption":1,"SerializationCameraPosition":{"X":1,"Y":1,"Z":-1},"SerializationCameraTarget":{"X":0,"Y":0.5,"Z":0},"IsValueAnnotationRotated":false,"EquidistantAxisPoints":false,"BarThickness":0.6,"WorkingPointMarker":0,"LinearWorkingPointInterpolation":true,"ShowAllIntersectionLines":false,"IsValueAxisIndependent":true,"TickLabelRotationAngle":-90,"IsTickLabelRotationEnabled":false,"IsTickLabelRightAligned":false,"ShowBoundarySurface":true,"ShowBoundarySurfaceGradient":false,"ShowCursorAsCrosshair":false,"XAxisAutoRange":true,"ValueAxisAutoRange":true,"ShowAllValueAxes":false,"DrawAxisBands":false,"CurrentColumnChartType":0,"SerializationCursorCrosshairColor":{"R":0,"G":0,"B":0,"A":255},"AlignBarToZero":true,"DefaultChartViewType":2,"AttributeColumnPositioning":1}} +PROPERTY_1={"Version":"1.3.0.0","Configuration":{"ArrayWindowSubControlConfiguration":{"NumericGraphicCompositeWidth":317,"NumericGraphicCompositeHeight":129,"LegendCoordinatePoint":{"X":0,"Y":0},"LegendWidth":0,"LegendHeight":0,"LegendLayoutGroupSizeWidth":0,"LegendLayoutGroupSizeHeight":0,"NumericCoordinatePoint":{"X":1,"Y":24},"NumericWidth":315,"NumericHeight":104,"NumericLayoutGroupSizeWidth":315,"NumericLayoutGroupSizeHeight":104,"Intersection2DXWCoordinatePoint":{"X":0,"Y":0},"Intersection2DXWWidth":0,"Intersection2DXWHeight":0,"Intersection2DXWLayoutGroupSizeWidth":0,"Intersection2DXWLayoutGroupSizeHeight":0,"Intersection2DYWCoordinatePoint":{"X":0,"Y":0},"Intersection2DYWWidth":0,"Intersection2DYWHeight":0,"Intersection2DYWLayoutGroupSizeWidth":0,"Intersection2DYWLayoutGroupSizeHeight":0,"Graphic3DCoordinatePoint":{"X":0,"Y":0},"Graphic3DWidth":0,"Graphic3DHeight":0,"Graphic3DLayoutGroupSizeWidth":0,"Graphic3DLayoutGroupSizeHeight":0},"ShowCalibrationBar":true,"ShowHorizontalChartLines":false,"ShowVerticalChartLines":false,"NonSelectedIntersectionLineTransparency":0.100000024,"FocusedValueSymbol":"DEVICE:\"xcp_demo\":\"$heap_struct1$$struct_field$heap_struct1.struct_field.word_field\":P","ValueObjectConfigurations":[{"Symbol":"DEVICE:\"xcp_demo\":\"$heap_struct1$heap_struct1.byte_field\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":-100,"ValueAxisMax":100,"ValueAxisMinHome":0,"ValueAxisMaxHome":0,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$heap_struct1$heap_struct1.word_field\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":-100,"ValueAxisMax":100,"ValueAxisMinHome":0,"ValueAxisMaxHome":0,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$heap_struct1$$struct_field$heap_struct1.struct_field.byte_field\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":-100,"ValueAxisMax":100,"ValueAxisMinHome":0,"ValueAxisMaxHome":0,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]},{"Symbol":"DEVICE:\"xcp_demo\":\"$heap_struct1$$struct_field$heap_struct1.struct_field.word_field\":P","SerializationColor":{"R":0,"G":0,"B":0,"A":255},"Collapsed":false,"SerializationFrameColor":{"R":0,"G":0,"B":0,"A":255},"ValueFormat":0,"AxisValueFormats":[],"NumericFormat":4,"AxisNumericFormats":[],"NumericFormatDigits":6,"IsActive":true,"CurrentChartViewType":2,"PointMarker":1,"IsValueAnnotationEnabled":false,"ValueAxisMin":-100,"ValueAxisMax":100,"ValueAxisMinHome":0,"ValueAxisMaxHome":0,"ValueAxisPosition":0,"CommonValueAxisName":null,"CommonValueAxisLabel":"","CommonValueAxisMin":0,"CommonValueAxisMax":0,"CommonValueAxisMinHome":0,"CommonValueAxisMaxHome":0,"SerializationCommonValueAxisColor":{"R":0,"G":0,"B":0,"A":0},"CommonValueAxisID":0,"CommonValueAxisFormat":null,"CommonValueAxisPosition":0,"CommonXAxisLabel":"","CommonYAxisLabel":"","CustomAxisLabels":["","","","","",""]}],"NumericGraphicControlPosition":0,"NumericGraphicControlSelectedTab":0,"GraphicControlPosition":0,"Height2DXControl":1,"Height2DYControl":1,"Height3DControl":2,"HeightNumericControl":1,"HeightChartControl":1,"HeightLegendControl":0.44999998807907104,"Width2DXControl":1,"Width2DYControl":1,"Width3DControl":2,"WidthNumericControl":2,"WidthChartControl":2,"WidthLegendControl":0.30000001192092896,"HeightValueControl":1,"WidthValueControl":1,"HeightNumericGraphicControl":1,"WidthNumericGraphicControl":1,"Height2DChartsControl":1,"Width2DChartsControl":1,"IsXAxisHeightSynchronizedBetweenCharts":true,"IsYAxisAreaWidthSynchronizedBetweenCharts":true,"SyncedXAxisHeight":NaN,"XWChartXAxisHeight":NaN,"YWChartXAxisHeight":NaN,"SyncedLeftAxisAreaWidth":NaN,"XWChartLeftAxisAreaWidth":NaN,"YWChartLeftAxisAreaWidth":NaN,"SyncedRightAxisAreaWidth":NaN,"XWChartRightAxisAreaWidth":NaN,"YWChartRightAxisAreaWidth":NaN,"LegendPosition":0,"LegendViewType":0,"LegendTableColumnAttributes":[{"TypeId":"1048594","Size":40},{"TypeId":"1048601","Size":45},{"TypeId":"31","Size":100},{"TypeId":"3","Size":250},{"TypeId":"16","Size":70},{"TypeId":"1048627","Size":100},{"TypeId":"1048631","Size":100},{"TypeId":"1048634","Size":100}],"LegendTabItemAttributes":[{"TypeId":"31","Size":100}],"FlipAxes":false,"AxisDisplayNameMode":3,"ReversedAxis":[false,false],"ShowUnits":false,"ShowObjectColor":true,"SortDescending":false,"SortAttributeId":null,"ShowWorkingPointHistory":false,"NumericViewValueObjectDisplayOption":1,"ValueColumnWidth":83,"ValueColumnWidthDouble":83.5,"ParameterGroup":"","ModuleName":"","GroupIsFunction":false,"NumericControlAxisAttributes":[],"NumericControlColumnAttributes":[{"TypeId":"31","Size":216}],"ChartViewValueObjectDisplayOption":1,"SerializationCameraPosition":{"X":1,"Y":1,"Z":-1},"SerializationCameraTarget":{"X":0,"Y":0.5,"Z":0},"IsValueAnnotationRotated":false,"EquidistantAxisPoints":false,"BarThickness":0.6,"WorkingPointMarker":0,"LinearWorkingPointInterpolation":true,"ShowAllIntersectionLines":false,"IsValueAxisIndependent":true,"TickLabelRotationAngle":-90,"IsTickLabelRotationEnabled":false,"IsTickLabelRightAligned":false,"ShowBoundarySurface":true,"ShowBoundarySurfaceGradient":false,"ShowCursorAsCrosshair":false,"XAxisAutoRange":true,"ValueAxisAutoRange":true,"ShowAllValueAxes":false,"DrawAxisBands":false,"CurrentColumnChartType":0,"SerializationCursorCrosshairColor":{"R":0,"G":0,"B":0,"A":255},"AlignBarToZero":true,"DefaultChartViewType":2,"AttributeColumnPositioning":1}} OBJECTS_COUNT=4 -OBJECT_1=DEVICE:"xcp_demo":"$heap_struct1$heap_struct1.word_field":P -OBJECT_2=DEVICE:"xcp_demo":"$heap_struct1$heap_struct1.byte_field":P -OBJECT_3=DEVICE:"xcp_demo":"$heap_struct1$$struct_field$heap_struct1.struct_field.word_field":P -OBJECT_4=DEVICE:"xcp_demo":"$heap_struct1$$struct_field$heap_struct1.struct_field.byte_field":P +OBJECT_1=DEVICE:"xcp_demo":"$heap_struct1$heap_struct1.byte_field":P +OBJECT_2=DEVICE:"xcp_demo":"$heap_struct1$heap_struct1.word_field":P +OBJECT_3=DEVICE:"xcp_demo":"$heap_struct1$$struct_field$heap_struct1.struct_field.byte_field":P +OBJECT_4=DEVICE:"xcp_demo":"$heap_struct1$$struct_field$heap_struct1.struct_field.word_field":P ObjectCount=4 HiddenDisplayCount=0 Title=Parameters @@ -1444,10 +14520,10 @@ Comment=Parameters Number=6 GUID=WINDOW_862f72ad-7158-4cf0-82e2-286ab62d18d8 ScreenDPIinSection=192 -Position=0, 680, 910, 640, 298 ;cmd, x, y, w, h -Position_dpi96=0, 340, 455, 320, 149 ;cmd, x, y, w, h -Position_Page01=0, 680, 910, 640, 298 ;cmd, x, y, w, h -Position_Page01_dpi96=0, 340, 455, 320, 149 ;cmd, x, y, w, h +Position=0, 680, 442, 640, 298 ;cmd, x, y, w, h +Position_dpi96=0, 340, 221, 320, 149 ;cmd, x, y, w, h +Position_Page01=0, 680, 442, 640, 298 ;cmd, x, y, w, h +Position_Page01_dpi96=0, 340, 221, 320, 149 ;cmd, x, y, w, h FloatingWindow=0 ShowSignalComments=1 DisplayMask=1 ; pages 1 @@ -1455,7 +14531,7 @@ DisplayMask=1 ; pages 1 [WINDOW_6_OBJECT_1] Type=2 Module=xcp_demo -Name=$heap_struct1$heap_struct1.word_field +Name=$heap_struct1$heap_struct1.byte_field Window=6 Index=0 Color=0 @@ -1463,10 +14539,10 @@ ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 LineTyp=2 -YMinHome=-32768 -YMaxHome=32767 -YMin=-32768 -YMax=32767 +YMinHome=-100 +YMaxHome=100 +YMin=-100 +YMax=100 XOffsetNS=0 XOffset=0 ValueFormat=3 @@ -1499,12 +14575,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_6b48ab37-fec3-4ea5-a5cb-7a6fed315840 +GUID=DISPLAY_cfcf0bb6-d88a-4d41-9726-adbbc4cd7a0d [WINDOW_6_OBJECT_2] Type=2 Module=xcp_demo -Name=$heap_struct1$heap_struct1.byte_field +Name=$heap_struct1$heap_struct1.word_field Window=6 Index=1 Color=0 @@ -1512,10 +14588,10 @@ ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 LineTyp=2 -YMinHome=0 -YMaxHome=255 -YMin=0 -YMax=255 +YMinHome=-100 +YMaxHome=100 +YMin=-100 +YMax=100 XOffsetNS=0 XOffset=0 ValueFormat=3 @@ -1548,12 +14624,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_fc8cb1c0-cd71-4626-95ae-c57019ef8d1c +GUID=DISPLAY_e3347d52-2c35-4780-8a32-3e7336a0f003 [WINDOW_6_OBJECT_3] Type=2 Module=xcp_demo -Name=$heap_struct1$$struct_field$heap_struct1.struct_field.word_field +Name=$heap_struct1$$struct_field$heap_struct1.struct_field.byte_field Window=6 Index=2 Color=0 @@ -1561,10 +14637,10 @@ ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 LineTyp=2 -YMinHome=-32768 -YMaxHome=32767 -YMin=-32768 -YMax=32767 +YMinHome=-100 +YMaxHome=100 +YMin=-100 +YMax=100 XOffsetNS=0 XOffset=0 ValueFormat=3 @@ -1597,12 +14673,12 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_2cbe68bd-1a81-4ef6-9ea3-03e653e3a2e5 +GUID=DISPLAY_ce6dbe50-ac33-4c19-8036-ff0f0582b624 [WINDOW_6_OBJECT_4] Type=2 Module=xcp_demo -Name=$heap_struct1$$struct_field$heap_struct1.struct_field.byte_field +Name=$heap_struct1$$struct_field$heap_struct1.struct_field.word_field Window=6 Index=3 Color=0 @@ -1610,10 +14686,10 @@ ApplyColorToBackground=0 ColorFunction=0 ColorFunctionScope=1 LineTyp=2 -YMinHome=0 -YMaxHome=255 -YMin=0 -YMax=255 +YMinHome=-100 +YMaxHome=100 +YMin=-100 +YMax=100 XOffsetNS=0 XOffset=0 ValueFormat=3 @@ -1646,10 +14722,35 @@ Row=0 Col=0 YAxis_ID=0 AxisTemplate= -GUID=DISPLAY_fd1f0436-13e4-4d1b-b555-36ff4f051e27 +GUID=DISPLAY_31f6a7ef-c005-4fbc-9b37-399ab74ea142 + +[WINDOW_7] +XMin=1 +XMinNs=1967834 +ShowTime=1 +Grid=1 +HDspOffset=0 +TimeColWidth=18 +LegendHeight=32 +LegendHeight_dpi96=16 +AbsoluteTimeMode=0 +ObjectCount=0 +Title=Text {DISPLAYED_FILENAME} +Type=32 +Comment=Text Window +Number=7 +GUID=WINDOW_78e57dc3-e84f-45cb-a787-a7c42dcbbd0a +ScreenDPIinSection=192 +Position=0, 1336, 442, 948, 766 ;cmd, x, y, w, h +Position_dpi96=0, 668, 221, 474, 383 ;cmd, x, y, w, h +Position_Page01=0, 1336, 442, 948, 766 ;cmd, x, y, w, h +Position_Page01_dpi96=0, 668, 221, 474, 383 ;cmd, x, y, w, h +FloatingWindow=0 +ShowSignalComments=1 +DisplayMask=1 ; pages 1 [WINDOWS] -Count=6 +Count=7 [Y_COMMON_AXIS_1] YMin=0 diff --git a/examples/struct_demo/CANape/xcp_demo_autodetect.a2l b/examples/struct_demo/CANape/xcp_demo_autodetect.a2l index 2726bb16..0449f08d 100644 --- a/examples/struct_demo/CANape/xcp_demo_autodetect.a2l +++ b/examples/struct_demo/CANape/xcp_demo_autodetect.a2l @@ -1,7 +1,7 @@ ASAP2_VERSION 1 71 /begin PROJECT struct_demo "" -/begin HEADER "" VERSION "1.0" PROJECT_NO VECTOR /end HEADER +/begin HEADER "" VERSION "1.0" PROJECT_NO XCPLITE__CASDD /end HEADER /begin MODULE struct_demo "" @@ -21,34 +21,34 @@ ALIGNMENT_INT64 1 /begin TYPEDEF_STRUCTURE struct2_t "A2L typedef for struct2_t" 0x4 - /begin STRUCTURE_COMPONENT byte_field M_U8 0x0 /end STRUCTURE_COMPONENT - /begin STRUCTURE_COMPONENT word_field M_I16 0x2 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT byte_field M_byte_field 0x0 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT word_field M_word_field 0x2 /end STRUCTURE_COMPONENT /end TYPEDEF_STRUCTURE /begin TYPEDEF_STRUCTURE struct1_t "A2L typedef for struct1_t" 0x108 - /begin STRUCTURE_COMPONENT byte_field M_U8 0x0 /end STRUCTURE_COMPONENT - /begin STRUCTURE_COMPONENT word_field M_I16 0x2 /end STRUCTURE_COMPONENT - /begin STRUCTURE_COMPONENT array_field M_U8 0x4 MATRIX_DIM 256 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT byte_field M_byte_field 0x0 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT word_field M_word_field 0x2 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT array_field M_array_field 0x4 MATRIX_DIM 256 /end STRUCTURE_COMPONENT /begin STRUCTURE_COMPONENT struct_field struct2_t 0x104 /end STRUCTURE_COMPONENT /end TYPEDEF_STRUCTURE -/* Stack frame relative addressing mode: event=event (0), addr_ext=2 */ -/begin MEASUREMENT local_counter "Stack measurement variable" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0xF31E ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin INSTANCE local_struct2 "Instance of test_struct2_t" struct2_t 0xF318 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end INSTANCE -/begin INSTANCE local_struct1 "Instance of test_struct1_t" struct1_t 0xFBC0 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end INSTANCE -/begin INSTANCE local_struct1_array "Array [10] of struct1_t" struct1_t 0xF380 ECU_ADDRESS_EXTENSION 2 MATRIX_DIM 8 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x0 /end DAQ_EVENT /end IF_DATA /end INSTANCE +/* Stack frame relative addressing mode: event=event (1), addr_ext=2 */ +/begin MEASUREMENT local_counter "Stack measurement variable" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x1F63E ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin INSTANCE local_struct2 "Instance of test_struct2_t" struct2_t 0x1F638 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end INSTANCE +/begin INSTANCE local_struct1 "Instance of test_struct1_t" struct1_t 0x1FEE0 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end INSTANCE +/begin INSTANCE local_struct1_array "Array [10] of struct1_t" struct1_t 0x1F6A0 ECU_ADDRESS_EXTENSION 2 MATRIX_DIM 8 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end INSTANCE -/* Absolute addressing mode: default_event=event (0), addr_ext=1 */ -/begin MEASUREMENT static_counter "Global measurement variable " UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x24C08 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x0 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT -/begin INSTANCE static_struct2 "Instance of test_struct2_t" struct2_t 0x24000 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x0 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end INSTANCE -/begin INSTANCE static_struct1 "Instance of test_struct1_t" struct1_t 0x24004 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x0 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end INSTANCE -/begin INSTANCE static_struct1_array "Array [10] of struct1_t" struct1_t 0x241B8 ECU_ADDRESS_EXTENSION 1 MATRIX_DIM 8 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x0 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end INSTANCE +/* Absolute addressing mode: default_event=event (1), addr_ext=1 */ +/begin MEASUREMENT static_counter "Global measurement variable " UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x24C08 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin INSTANCE static_struct2 "Instance of test_struct2_t" struct2_t 0x24000 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end INSTANCE +/begin INSTANCE static_struct1 "Instance of test_struct1_t" struct1_t 0x24004 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end INSTANCE +/begin INSTANCE static_struct1_array "Array [10] of struct1_t" struct1_t 0x241B8 ECU_ADDRESS_EXTENSION 1 MATRIX_DIM 8 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end INSTANCE -/* Relative addressing mode: event=event_heap (1), addr_ext=3 */ -/begin INSTANCE heap_struct1 "Pointer to struct1_t on heap" struct1_t 0x10000 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end INSTANCE +/* Relative addressing mode: event=event_heap (2), addr_ext=3 */ +/begin INSTANCE heap_struct1 "Pointer to struct1_t on heap" struct1_t 0x20000 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end INSTANCE -/* Relative addressing mode: event=event_heap (1), addr_ext=4 */ -/begin INSTANCE heap_struct2 "Pointer to struct2_t on heap" struct2_t 0x10000 ECU_ADDRESS_EXTENSION 4 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end INSTANCE +/* Relative addressing mode: event=event_heap (2), addr_ext=4 */ +/begin INSTANCE heap_struct2 "Pointer to struct2_t on heap" struct2_t 0x20000 ECU_ADDRESS_EXTENSION 4 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end INSTANCE /* Typedefs */ /begin RECORD_LAYOUT U8 FNC_VALUES 1 UBYTE ROW_DIR DIRECT /end RECORD_LAYOUT @@ -92,31 +92,27 @@ ALIGNMENT_INT64 1 /begin TYPEDEF_MEASUREMENT M_F64 "" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 /end TYPEDEF_MEASUREMENT /begin TYPEDEF_CHARACTERISTIC C_F64 "" VALUE F64 0 NO_COMPU_METHOD -1e+12 1e+12 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_MEASUREMENT M_byte_field "Byte field" UBYTE NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT M_word_field "Word field" SWORD NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT M_byte_field "Byte field" UBYTE NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT M_word_field "Word field" SWORD NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT M_array_field "Array field of 256 bytes" UBYTE NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT /* Groups */ -/begin GROUP event "Measurement event group" /begin REF_MEASUREMENT local_counter local_struct2 local_struct1 local_struct1_array static_counter static_struct2 static_struct1 static_struct1_array /end REF_MEASUREMENT /end GROUP -/begin GROUP event_heap "Measurement event group" /begin REF_MEASUREMENT heap_struct1 heap_struct2 /end REF_MEASUREMENT /end GROUP +/begin GROUP event "Measurement event group" /begin REF_MEASUREMENT local_counter local_struct2 local_struct1 local_struct1_array static_counter static_struct2 static_struct1 static_struct1_array /end REF_MEASUREMENT /end GROUP +/begin GROUP event_heap "Measurement event group" /begin REF_MEASUREMENT heap_struct1 heap_struct2 /end REF_MEASUREMENT /end GROUP /begin GROUP Events "Events" ROOT /begin SUB_GROUP event event_heap /end SUB_GROUP /end GROUP /* Conversions */ /begin COMPU_METHOD conv.bool "" TAB_VERB "%.0" "" COMPU_TAB_REF conv.bool.table /end COMPU_METHOD /begin COMPU_VTAB conv.bool.table "" TAB_VERB 2 0 "false" 1 "true" /end COMPU_VTAB /begin COMPU_METHOD conv.events "" TAB_VERB "%.0 " "" COMPU_TAB_REF conv.events.table /end COMPU_METHOD -/begin COMPU_VTAB conv.events.table "" TAB_VERB 2 - 0 "event" 1 "event_heap" +/begin COMPU_VTAB conv.events.table "" TAB_VERB 3 + 0 "async" 1 "event" 2 "event_heap" /end COMPU_VTAB /begin MOD_PAR "" -EPK "_Sep_22_2025_19_01_45" ADDR_EPK 0x80000000 -/begin MEMORY_SEGMENT epk "" DATA FLASH INTERN 0x80000000 21 -1 -1 -1 -1 -1 -/begin IF_DATA XCP -/begin SEGMENT 0 2 0 0 0 -/begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM -/begin PAGE 0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_DONT_CARE /end PAGE -/begin PAGE 1 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_NOT_ALLOWED /end PAGE -/end SEGMENT -/end IF_DATA -/end MEMORY_SEGMENT +EPK "14_51_40" ADDR_EPK 0x80000000 /end MOD_PAR @@ -143,6 +139,7 @@ OPTIONAL_CMD BUILD_CHECKSUM OPTIONAL_CMD USER_CMD OPTIONAL_CMD GET_DAQ_RESOLUTION_INFO OPTIONAL_CMD GET_DAQ_PROCESSOR_INFO +OPTIONAL_CMD GET_DAQ_EVENT_INFO OPTIONAL_CMD FREE_DAQ OPTIONAL_CMD ALLOC_DAQ OPTIONAL_CMD ALLOC_ODT @@ -159,15 +156,14 @@ OPTIONAL_CMD TIME_CORRELATION_PROPERTIES OPTIONAL_LEVEL1_CMD GET_VERSION /end PROTOCOL_LAYER /begin DAQ -DYNAMIC 0 2 0 OPTIMISATION_TYPE_DEFAULT ADDRESS_EXTENSION_FREE IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE 0xF8 OVERLOAD_INDICATION_PID -/begin TIMESTAMP_SUPPORTED -0x1 SIZE_DWORD UNIT_1US TIMESTAMP_FIXED -/end TIMESTAMP_SUPPORTED -/begin EVENT "event" "event" 0x0 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT -/begin EVENT "event_heap" "event_heap" 0x1 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +DYNAMIC 0 3 0 OPTIMISATION_TYPE_DEFAULT ADDRESS_EXTENSION_FREE IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE 0xF8 OVERLOAD_INDICATION_PID PRESCALER_SUPPORTED +/begin TIMESTAMP_SUPPORTED 0x1 SIZE_DWORD UNIT_1NS TIMESTAMP_FIXED /end TIMESTAMP_SUPPORTED +/begin EVENT "async" "async" 0x0 DAQ 0xFF 100 4 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "event" "event" 0x1 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "event_heap" "event_heap" 0x2 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT /end DAQ /begin XCP_ON_TCP_IP - 0x104 5555 ADDRESS "192.168.8.133" + 0x104 5555 ADDRESS "192.168.0.101" /end XCP_ON_TCP_IP /end IF_DATA diff --git a/examples/struct_demo/src/main.c b/examples/struct_demo/src/main.c index b75532ab..097591d6 100644 --- a/examples/struct_demo/src/main.c +++ b/examples/struct_demo/src/main.c @@ -19,6 +19,7 @@ // XCP parameters #define OPTION_PROJECT_NAME "struct_demo" // A2L project name +#define OPTION_PROJECT_EPK __TIME__ // EPK version string #define OPTION_USE_TCP true // TCP or UDP #define OPTION_SERVER_PORT 5555 // Port #define OPTION_SERVER_ADDR {0, 0, 0, 0} // Bind addr, 0.0.0.0 = ANY @@ -64,7 +65,7 @@ int main(void) { // Initialize the XCP singleton, activate XCP, must be called before starting the server // If XCP is not activated, the server will not start and all XCP instrumentation will be passive with minimal overhead - XcpInit(true); + XcpInit(OPTION_PROJECT_NAME, OPTION_PROJECT_EPK, true); // Initialize the XCP Server uint8_t addr[4] = OPTION_SERVER_ADDR; @@ -73,26 +74,26 @@ int main(void) { } // Enable A2L generation and prepare the A2L file, finalize the A2L file on XCP connect - if (!A2lInit(OPTION_PROJECT_NAME, NULL, addr, OPTION_SERVER_PORT, OPTION_USE_TCP, A2L_MODE_WRITE_ALWAYS | A2L_MODE_FINALIZE_ON_CONNECT | A2L_MODE_AUTO_GROUPS)) { + if (!A2lInit(addr, OPTION_SERVER_PORT, OPTION_USE_TCP, A2L_MODE_WRITE_ONCE | A2L_MODE_FINALIZE_ON_CONNECT | A2L_MODE_AUTO_GROUPS)) { return 1; } // Create a A2L typedef for struct2_t - A2lTypedefBegin(struct2_t, "A2L typedef for struct2_t"); - A2lTypedefMeasurementComponent(byte_field, struct2_t); - A2lTypedefMeasurementComponent(word_field, struct2_t); + A2lTypedefBegin(struct2_t, &static_struct2, "A2L typedef for struct2_t"); + A2lTypedefMeasurementComponent(byte_field, "Byte field"); + A2lTypedefMeasurementComponent(word_field, "Word field"); A2lTypedefEnd(); // Create a typedef for struct1_t - A2lTypedefBegin(struct1_t, "A2L typedef for struct1_t"); - A2lTypedefMeasurementComponent(byte_field, struct1_t); - A2lTypedefMeasurementComponent(word_field, struct1_t); - A2lTypedefMeasurementArrayComponent(array_field, struct1_t); - A2lTypedefComponent(struct_field, struct2_t, 1, struct1_t); + A2lTypedefBegin(struct1_t, &static_struct1, "A2L typedef for struct1_t"); + A2lTypedefMeasurementComponent(byte_field, "Byte field"); + A2lTypedefMeasurementComponent(word_field, "Word field"); + A2lTypedefMeasurementArrayComponent(array_field, "Array field of 256 bytes"); + A2lTypedefComponent(struct_field, struct2_t, 1); A2lTypedefEnd(); // Local stack measurement variables - uint16_t local_counter = 0; // Local counter variable for measurement + uint16_t counter = 0; // Local counter variable for measurement struct2_t local_struct2 = {.byte_field = 1, .word_field = 2}; // Single instance of struct2_t struct1_t local_struct1 = {.byte_field = 1, .word_field = 2, .array_field = {0}, .struct_field = {.byte_field = 1, .word_field = 2}}; // Single instance of struct1_t struct1_t local_struct1_array[8]; // Array of struct1_t @@ -113,14 +114,14 @@ int main(void) { // Create measurement events DaqCreateEvent(event); - DaqCreateEvent(event_heap); // Relative heap addressing mode needs an individual event for each pointer + DaqCreateEvent(event2); // Relative heap addressing mode needs an individual event for each pointer // Create a A2L measurement variables for the counters // Create A2L typedef instances for the structs and the array of structs // Stack A2lSetStackAddrMode(event); // stack relative addressing mode - A2lCreateMeasurement(local_counter, "Stack measurement variable"); + A2lCreateMeasurement(counter, "Mainloop counter"); A2lCreateTypedefInstance(local_struct2, struct2_t, "Instance of test_struct2_t"); A2lCreateTypedefInstance(local_struct1, struct1_t, "Instance of test_struct1_t"); A2lCreateTypedefArray(local_struct1_array, struct1_t, 8, "Array [10] of struct1_t"); @@ -133,29 +134,27 @@ int main(void) { A2lCreateTypedefArray(static_struct1_array, struct1_t, 8, "Array [10] of struct1_t"); // Heap - A2lSetRelativeAddrMode1(event_heap); // relative addressing mode for heap_struct1_array, first base pointer - A2lCreateTypedefInstance(heap_struct1, struct1_t, "Pointer to struct1_t on heap"); - A2lSetRelativeAddrMode2(event_heap); // relative addressing mode for heap_struct2_array, second base pointer - A2lCreateTypedefInstance(heap_struct2, struct2_t, "Pointer to struct2_t on heap"); + A2lSetRelativeAddrMode(event2, heap_struct1); // relative addressing mode for heap_struct1 + A2lCreateTypedefReference(heap_struct1, struct1_t, "Pointer to struct1_t on heap"); A2lFinalize(); // Optional: Finalize the A2L file generation early, to write the A2L immediately, not when the client connects while (running) { // Modify some static and stack variables - local_counter++; + counter++; static_counter++; - local_struct1_array[local_counter % 8].word_field = local_counter; - local_struct1_array[local_counter % 8].struct_field.word_field = local_counter; - static_struct1_array[local_counter % 8].word_field = local_counter; - static_struct1_array[local_counter % 8].struct_field.word_field = local_counter; + local_struct1_array[counter % 8].word_field = counter; + local_struct1_array[counter % 8].struct_field.word_field = counter; + static_struct1_array[counter % 8].word_field = counter; + static_struct1_array[counter % 8].struct_field.word_field = counter; heap_struct1->word_field++; // Modify the heap variable heap_struct1->struct_field.word_field++; heap_struct2->word_field++; // Trigger the measurement events - DaqEvent(event); - DaqEvent2(event_heap, heap_struct1, heap_struct2); + DaqTriggerEvent(event); + DaqTriggerEventExt(event2, heap_struct1); sleepUs(1000); } // for(;;) diff --git a/inc/a2l.h b/inc/a2l.h index cfa830aa..87d22e96 100644 --- a/inc/a2l.h +++ b/inc/a2l.h @@ -3,7 +3,7 @@ /*---------------------------------------------------------------------------- | File: -| a2l.h +| a2l.h - Public C API for A2L generation | | Description: | Public header for A2L generation @@ -47,7 +47,7 @@ #include // for offsetof #include // for uintxx_t -#include "xcplib.h" // for tXcpEventId, tXcpCalSegIndex, get_stack_frame_pointer +#include "xcplib.h" // for tXcpEventId, tXcpCalSegIndex, xcp_get_frame_addr, ... // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // A2L generation modes @@ -316,16 +316,18 @@ static inline tA2lTypeId A2lGetTypeIdFromPtr_bool(const bool *p) { #define A2lSetRelativeAddrMode(event_name, base_addr) A2lSetRelativeAddrMode__s(#event_name, 1, (const uint8_t *)base_addr); #define A2lSetRelativeAddrMode_s(event_name, base_addr) A2lSetRelativeAddrMode__s(event_name, 1, (const uint8_t *)base_addr); #define A2lSetRelativeAddrMode_i(event_id, base_addr) A2lSetRelativeAddrMode__i(event_id, 1, (const uint8_t *)base_addr); -#define A2lSetRelativeAddrMode1(event_name) A2lSetRelativeAddrMode__s(#event_name, 1, NULL); -#define A2lSetRelativeAddrMode2(event_name) A2lSetRelativeAddrMode__s(#event_name, 2, NULL); -#define A2lSetRelativeAddrMode2_s(event_name, base_addr) A2lSetRelativeAddrMode__s(event_name, 2, (const uint8_t *)base_addr); -#define A2lSetRelativeAddrMode2_i(event_id, base_addr) A2lSetRelativeAddrMode__i(event_id, 2, (const uint8_t *)base_addr); + +// Set addressing mode to auto (stack or base address) and event 'event_name' +// Error if the event does not exist +#define A2lSetAutomaticAddrMode(event_name, base_addr) A2lSetAutoAddrMode__s(#event_name, xcp_get_frame_addr(), base_addr); +#define A2lSetAutomaticAddrMode_s(event_name_string, base_addr) A2lSetAutoAddrMode__s(event_name_string, xcp_get_frame_addr(), base_addr); +#define A2lSetAutomaticAddrMode_i(event_id, base_addr) A2lSetAutoAddrMode__i(event_id, xcp_get_frame_addr(), base_addr); // Set addressing mode to stack and event 'event_name' // Error if the event does not exist -#define A2lSetStackAddrMode(event_name) A2lSetStackAddrMode__s(#event_name, get_stack_frame_pointer()); -#define A2lSetStackAddrMode_s(event_name_string) A2lSetStackAddrMode__s(event_name_string, get_stack_frame_pointer()); -#define A2lSetStackAddrMode_i(event_id) A2lSetStackAddrMode__i(event_id, get_stack_frame_pointer()); +#define A2lSetStackAddrMode(event_name) A2lSetStackAddrMode__s(#event_name, xcp_get_frame_addr()); +#define A2lSetStackAddrMode_s(event_name_string) A2lSetStackAddrMode__s(event_name_string, xcp_get_frame_addr()); +#define A2lSetStackAddrMode_i(event_id) A2lSetStackAddrMode__i(event_id, xcp_get_frame_addr()); // Set addressing mode to absolute and event 'event_name' // Error if the event does not exist @@ -336,22 +338,22 @@ static inline tA2lTypeId A2lGetTypeIdFromPtr_bool(const bool *p) { // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // Create parameters in calibration parameter segments or in global memory -#define A2lCreateParameter(name, comment, unit, min, max) A2lCreateParameter_(#name, A2lGetTypeId(name), A2lGetAddrExt_(), A2lGetAddr_((uint8_t *)&name), comment, unit, min, max); +#define A2lCreateParameter(name, comment, unit, min, max) A2lCreateParameter_(#name, A2lGetTypeId(name), A2lGetAddr_((uint8_t *)&name), A2lGetAddrExt_(), comment, unit, min, max); #define A2lCreateCurve(name, xdim, comment, unit, min, max) \ - A2lCreateCurve_(#name, A2lGetArray1DElementTypeId(name), A2lGetAddrExt_(), A2lGetAddr_((uint8_t *)&name[0]), xdim, comment, unit, min, max, NULL); + A2lCreateCurve_(#name, A2lGetArray1DElementTypeId(name), A2lGetAddr_((uint8_t *)&name[0]), A2lGetAddrExt_(), xdim, comment, unit, min, max, NULL); #define A2lCreateCurveWithSharedAxis(name, xdim, comment, unit, min, max, x_axis) \ - A2lCreateCurve_(#name, A2lGetArray1DElementTypeId(name), A2lGetAddrExt_(), A2lGetAddr_((uint8_t *)&name[0]), xdim, comment, unit, min, max, x_axis); + A2lCreateCurve_(#name, A2lGetArray1DElementTypeId(name), A2lGetAddr_((uint8_t *)&name[0]), A2lGetAddrExt_(), xdim, comment, unit, min, max, x_axis); #define A2lCreateAxis(name, xdim, comment, unit, min, max) \ - A2lCreateAxis_(#name, A2lGetArray1DElementTypeId(name), A2lGetAddrExt_(), A2lGetAddr_((uint8_t *)&name[0]), xdim, comment, unit, min, max); + A2lCreateAxis_(#name, A2lGetArray1DElementTypeId(name), A2lGetAddr_((uint8_t *)&name[0]), A2lGetAddrExt_(), xdim, comment, unit, min, max); #define A2lCreateMap(name, xdim, ydim, comment, unit, min, max) \ - A2lCreateMap_(#name, A2lGetArray2DElementTypeId(name), A2lGetAddrExt_(), A2lGetAddr_((uint8_t *)&name[0][0]), xdim, ydim, comment, unit, min, max, NULL, NULL); + A2lCreateMap_(#name, A2lGetArray2DElementTypeId(name), A2lGetAddr_((uint8_t *)&name[0][0]), A2lGetAddrExt_(), xdim, ydim, comment, unit, min, max, NULL, NULL); #define A2lCreateMapWithSharedAxis(name, xdim, ydim, comment, unit, min, max, x_axis, y_axis) \ - A2lCreateMap_(#name, A2lGetArray2DElementTypeId(name), A2lGetAddrExt_(), A2lGetAddr_((uint8_t *)&name[0][0]), xdim, ydim, comment, unit, min, max, x_axis, y_axis); + A2lCreateMap_(#name, A2lGetArray2DElementTypeId(name), A2lGetAddr_((uint8_t *)&name[0][0]), A2lGetAddrExt_(), xdim, ydim, comment, unit, min, max, x_axis, y_axis); // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // Create conversions @@ -363,137 +365,153 @@ static inline tA2lTypeId A2lGetTypeIdFromPtr_bool(const bool *p) { // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // Create measurements on stack or in global memory -#define A2lCreateMeasurement(name, comment) A2lCreateMeasurement_(NULL, #name, A2lGetTypeId(name), A2lGetAddrExt_(), A2lGetAddr_((uint8_t *)&(name)), NULL, 0.0, 0.0, comment); +#define A2lCreateMeasurement(name, comment) A2lCreateMeasurement_(NULL, #name, A2lGetTypeId(name), A2lGetAddr_((uint8_t *)&(name)), A2lGetAddrExt_(), NULL, 0.0, 0.0, comment); #define A2lCreatePhysMeasurement(name, comment, unit_or_conversion, min, max) \ - A2lCreateMeasurement_(NULL, #name, A2lGetTypeId(name), A2lGetAddrExt_(), A2lGetAddr_((uint8_t *)&(name)), unit_or_conversion, min, max, comment); + A2lCreateMeasurement_(NULL, #name, A2lGetTypeId(name), A2lGetAddr_((uint8_t *)&(name)), A2lGetAddrExt_(), unit_or_conversion, min, max, comment); #define A2lCreateMeasurementArray(name, comment) \ - A2lCreateMeasurementArray_(NULL, #name, A2lGetArray1DElementTypeId(name), sizeof(name) / sizeof(name[0]), 1, A2lGetAddrExt_(), A2lGetAddr_(&name[0]), NULL, 0.0, 0.0, comment); + A2lCreateMeasurementArray_(NULL, #name, A2lGetArray1DElementTypeId(name), sizeof(name) / sizeof(name[0]), 1, A2lGetAddr_(&name[0]), A2lGetAddrExt_(), NULL, 0.0, 0.0, comment); #define A2lCreateMeasurementMatrix(name, comment) \ - A2lCreateMeasurementArray_(NULL, #name, A2lGetArray2DElementTypeId(name), sizeof(name[0]) / sizeof(name[0][0]), sizeof(name) / sizeof(name[0]), A2lGetAddrExt_(), \ - A2lGetAddr_(&name[0]), NULL, 0.0, 0.0, comment); + A2lCreateMeasurementArray_(NULL, #name, A2lGetArray2DElementTypeId(name), sizeof(name[0]) / sizeof(name[0][0]), sizeof(name) / sizeof(name[0]), A2lGetAddr_(&name[0]), \ + A2lGetAddrExt_(), NULL, 0.0, 0.0, comment); #define A2lCreatePhysMeasurementArray(name, comment, unit_or_conversion, min, max) \ - A2lCreatePhysMeasurementArray_(NULL, #name, A2lGetArray1DElementTypeId(name), sizeof(name) / sizeof(name[0]), 1, A2lGetAddrExt_(), A2lGetAddr_(&name[0]), unit_or_conversion, \ + A2lCreatePhysMeasurementArray_(NULL, #name, A2lGetArray1DElementTypeId(name), sizeof(name) / sizeof(name[0]), 1, A2lGetAddr_(&name[0]), A2lGetAddrExt_(), unit_or_conversion, \ min, max, comment); #define A2lCreatePhysMeasurementMatrix(name, comment, unit_or_conversion, min, max) \ - A2lCreateMeasurementArray_(NULL, #name, A2lGetArray2DElementTypeId(name), sizeof(name[0]) / sizeof(name[0][0]), sizeof(name) / sizeof(name[0]), A2lGetAddrExt_(), \ - A2lGetAddr_(&name[0]), unit_or_conversion, min, max, comment); + A2lCreateMeasurementArray_(NULL, #name, A2lGetArray2DElementTypeId(name), sizeof(name[0]) / sizeof(name[0][0]), sizeof(name) / sizeof(name[0]), A2lGetAddr_(&name[0]), \ + A2lGetAddrExt_(), unit_or_conversion, min, max, comment); // With instance name #define A2lCreateMeasurementInstance(instance_name, name, comment) \ - A2lCreateMeasurement_(instance_name, #name, A2lGetTypeId(name), A2lGetAddrExt_(), A2lGetAddr_((uint8_t *)&(name)), NULL, 0.0, 0.0, comment); + A2lCreateMeasurement_(instance_name, #name, A2lGetTypeId(name), A2lGetAddr_((uint8_t *)&(name)), A2lGetAddrExt_(), NULL, 0.0, 0.0, comment); #define A2lCreatePhysMeasurementInstance(instance_name, name, comment, unit_or_conversion, min, max) \ - A2lCreateMeasurement_(instance_name, #name, A2lGetTypeId(name), A2lGetAddrExt_(), A2lGetAddr_((uint8_t *)&(name)), unit_or_conversion, min, max, comment); + A2lCreateMeasurement_(instance_name, #name, A2lGetTypeId(name), A2lGetAddr_((uint8_t *)&(name)), A2lGetAddrExt_(), unit_or_conversion, min, max, comment); #define A2lCreateMeasurementArrayInstance(instance_name, name, comment) \ - A2lCreateMeasurementArray_(instance_name, #name, A2lGetArray1DElementTypeId(name), sizeof(name) / sizeof(name[0]), 1, A2lGetAddrExt_(), A2lGetAddr_(&name[0]), NULL, 0.0, 0.0, \ + A2lCreateMeasurementArray_(instance_name, #name, A2lGetArray1DElementTypeId(name), sizeof(name) / sizeof(name[0]), 1, A2lGetAddr_(&name[0]), A2lGetAddrExt_(), NULL, 0.0, 0.0, \ comment); #define A2lCreateMeasurementMatrixInstance(instance_name, name, comment) \ - A2lCreateMeasurementArray_(instance_name, #name, A2lGetArray2DElementTypeId(name), sizeof(name[0]) / sizeof(name[0][0]), sizeof(name) / sizeof(name[0]), A2lGetAddrExt_(), \ - A2lGetAddr_(&name[0]), NULL, 0.0, 0.0, comment); + A2lCreateMeasurementArray_(instance_name, #name, A2lGetArray2DElementTypeId(name), sizeof(name[0]) / sizeof(name[0][0]), sizeof(name) / sizeof(name[0]), \ + A2lGetAddr_(&name[0]), A2lGetAddrExt_(), NULL, 0.0, 0.0, comment); // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // Create instances from typedefs // Single instance of typedef // A2L instance name and symbol name are the same -#define A2lCreateTypedefInstance(name, typeName, comment) A2lCreateTypedefMeasurementInstance_(#name, #typeName, 0, A2lGetAddrExt_(), A2lGetAddr_((uint8_t *)&name), comment); +#define A2lCreateTypedefInstance(name, typeName, comment) A2lCreateTypedefInstance_(#name, #typeName, 0, A2lGetAddr_((uint8_t *)&name), A2lGetAddrExt_(), comment); // Single instance of typedef // A2L instance name and symbol name are different #define A2lCreateTypedefNamedInstance(name, instance, typeName, comment) \ - A2lCreateTypedefMeasurementInstance_(name, #typeName, 0, A2lGetAddrExt_(), A2lGetAddr_((uint8_t *)&instance), comment); + A2lCreateTypedefInstance_(name, #typeName, 0, A2lGetAddr_((uint8_t *)&instance), A2lGetAddrExt_(), comment); // Array of typedef instances -#define A2lCreateTypedefArray(name, typeName, dim, comment) A2lCreateTypedefMeasurementInstance_(#name, #typeName, dim, A2lGetAddrExt_(), A2lGetAddr_((uint8_t *)&name), comment); +#define A2lCreateTypedefArray(name, typeName, dim, comment) A2lCreateTypedefInstance_(#name, #typeName, dim, A2lGetAddr_((uint8_t *)&name), A2lGetAddrExt_(), comment); // Pointer to typedef instance -#define A2lCreateTypedefReference(name, typeName, comment) A2lCreateTypedefMeasurementInstance_(#name, #typeName, 0, A2lGetAddrExt_(), A2lGetAddr_((uint8_t *)name), comment); +#define A2lCreateTypedefReference(name, typeName, comment) A2lCreateTypedefInstance_(#name, #typeName, 0, A2lGetAddr_((uint8_t *)name), A2lGetAddrExt_(), comment); // Pointer to array of typedef instances -#define A2lCreateTypedefArrayReference(name, typeName, dim, comment) \ - A2lCreateTypedefMeasurementInstance_(#name, #typeName, dim, A2lGetAddrExt_(), A2lGetAddr_((uint8_t *)name), comment); +#define A2lCreateTypedefArrayReference(name, typeName, dim, comment) A2lCreateTypedefInstance_(#name, #typeName, dim, A2lGetAddr_((uint8_t *)name), A2lGetAddrExt_(), comment); // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // Create typedefs and typedef components -#define A2lTypedefBegin(type_name, comment) A2lTypedefBegin_(#type_name, (uint32_t)sizeof(type_name), comment); +#define A2lTypedefBegin(typedef_name, type_instance, ...) \ + { \ + const typedef_name *__A2lTypedefBegin_instance = type_instance; \ + A2lTypedefBegin_(#typedef_name, (uint32_t)sizeof(typedef_name), __VA_ARGS__); -#define A2lTypedefComponent(field_name, field_type_name, field_dim, typedef_name) \ - A2lTypedefComponent_(#field_name, #field_type_name, field_dim, offsetof(typedef_name, field_name)); +// For scalar or one dimensional measurement and parameter components of specified type +// field_type_name is the name of another typedef, typedef_measurement or typedef_characteristic +#define A2lTypedefComponent(field_name, field_type_name, field_dim) \ + A2lTypedefComponent_(#field_name, #field_type_name, field_dim, (uint32_t)((uint8_t *)&(__A2lTypedefBegin_instance->field_name) - (uint8_t *)__A2lTypedefBegin_instance)) -#define A2lTypedefEnd() A2lTypedefEnd_() +#define A2lTypedefEnd() \ + } \ + A2lTypedefEnd_() // Measurement components +// Implicitly create a TYPEDEF_MEASUREMENT + +#define A2lTypedefMeasurementComponent(field_name, comment) \ + do { \ + A2lTypedefMeasurementComponent_(#field_name, A2lGetTypeName(__A2lTypedefBegin_instance->field_name), 1, \ + (uint32_t)((uint8_t *)&(__A2lTypedefBegin_instance->field_name) - (uint8_t *)__A2lTypedefBegin_instance), comment, NULL, 0.0, 0.0); \ + } while (0) -#define A2lTypedefMeasurementComponent(field_name, typedef_name) \ +#define A2lTypedefMeasurementArrayComponent(field_name, comment) \ do { \ - typedef_name instance; \ - A2lTypedefComponent_(#field_name, A2lGetTypeName_M(instance.field_name), 1, (uint32_t)((uint8_t *)&(instance.field_name) - (uint8_t *)&instance)); \ + A2lTypedefMeasurementComponent_(#field_name, A2lGetTypeName1D(__A2lTypedefBegin_instance->field_name), \ + sizeof(__A2lTypedefBegin_instance->field_name) / sizeof(__A2lTypedefBegin_instance->field_name[0]), \ + (uint32_t)((uint8_t *)&(__A2lTypedefBegin_instance->field_name) - (uint8_t *)__A2lTypedefBegin_instance), comment, NULL, 0.0, 0.0); \ } while (0) -#define A2lTypedefPhysMeasurementComponent(field_name, typedef_name, comment, unit_or_conversion, min, max) \ +#define A2lTypedefPhysMeasurementComponent(field_name, comment, unit_or_conversion, min, max) \ do { \ - typedef_name instance; \ - A2lTypedefMeasurementComponent_(#field_name, A2lGetTypeName(instance.field_name), (uint32_t)((uint8_t *)&(instance.field_name) - (uint8_t *)&instance), comment, \ - unit_or_conversion, min, max); \ + A2lTypedefMeasurementComponent_(#field_name, A2lGetTypeName(__A2lTypedefBegin_instance->field_name), 1, \ + (uint32_t)((uint8_t *)&(__A2lTypedefBegin_instance->field_name) - (uint8_t *)__A2lTypedefBegin_instance), comment, unit_or_conversion, \ + min, max); \ } while (0) -#define A2lTypedefMeasurementArrayComponent(field_name, typedef_name) \ +#define A2lTypedefPhysMeasurementArrayComponent(field_name, comment, unit_or_conversion, min, max) \ do { \ - typedef_name instance; \ - A2lTypedefComponent_(#field_name, A2lGetTypeName1D_M(instance.field_name), sizeof(instance.field_name) / sizeof(instance.field_name[0]), \ - (uint32_t)((uint8_t *)&(instance.field_name[0]) - (uint8_t *)&instance)); \ + A2lTypedefMeasurementComponent_(#field_name, A2lGetTypeName1D(__A2lTypedefBegin_instance->field_name), \ + sizeof(__A2lTypedefBegin_instance->field_name) / sizeof(__A2lTypedefBegin_instance->field_name[0]), \ + (uint32_t)((uint8_t *)&(__A2lTypedefBegin_instance->field_name) - (uint8_t *)__A2lTypedefBegin_instance), comment, unit_or_conversion, \ + min, max); \ } while (0) // Parameter components +// Implicitly create a TYPEDEF_CHARACTERISTIC -#define A2lTypedefParameterComponent(field_name, typeName, comment, unit, min, max) \ +#define A2lTypedefParameterComponent(field_name, comment, unit, min, max) \ do { \ - typeName instance; \ - A2lTypedefParameterComponent_(#field_name, A2lGetRecordLayoutName(instance.field_name), 1, 1, (uint32_t)((uint8_t *)&(instance.field_name) - (uint8_t *)&instance), \ - comment, unit, min, max, NULL, NULL); \ + A2lTypedefParameterComponent_(#field_name, A2lGetRecordLayoutName(__A2lTypedefBegin_instance->field_name), 1, 1, \ + (uint32_t)((uint8_t *)&(__A2lTypedefBegin_instance->field_name) - (uint8_t *)__A2lTypedefBegin_instance), comment, unit, min, max, NULL, \ + NULL); \ } while (0) -#define A2lTypedefCurveComponent(field_name, typeName, x_dim, comment, unit, min, max) \ +#define A2lTypedefCurveComponent(field_name, x_dim, comment, unit, min, max) \ do { \ - typeName instance; \ - A2lTypedefParameterComponent_(#field_name, A2lGetRecordLayoutName1D(instance.field_name), x_dim, 1, (uint32_t)((uint8_t *)&(instance.field_name) - (uint8_t *)&instance), \ - comment, unit, min, max, NULL, NULL); \ + A2lTypedefParameterComponent_(#field_name, A2lGetRecordLayoutName1D(__A2lTypedefBegin_instance->field_name), x_dim, 1, \ + (uint32_t)((uint8_t *)&(__A2lTypedefBegin_instance->field_name) - (uint8_t *)__A2lTypedefBegin_instance), comment, unit, min, max, NULL, \ + NULL); \ } while (0) -#define A2lTypedefCurveComponentWithSharedAxis(field_name, typeName, x_dim, comment, unit, min, max, x_axis) \ +#define A2lTypedefCurveComponentWithSharedAxis(field_name, x_dim, comment, unit, min, max, x_axis) \ do { \ - typeName instance; \ - A2lTypedefParameterComponent_(#field_name, A2lGetRecordLayoutName1D(instance.field_name), x_dim, 1, (uint32_t)((uint8_t *)&(instance.field_name) - (uint8_t *)&instance), \ - comment, unit, min, max, x_axis, NULL); \ + A2lTypedefParameterComponent_(#field_name, A2lGetRecordLayoutName1D(__A2lTypedefBegin_instance->field_name), x_dim, 1, \ + (uint32_t)((uint8_t *)&(__A2lTypedefBegin_instance->field_name) - (uint8_t *)__A2lTypedefBegin_instance), comment, unit, min, max, x_axis, \ + NULL); \ } while (0) -#define A2lTypedefMapComponent(field_name, typeName, x_dim, y_dim, comment, unit, min, max) \ +#define A2lTypedefMapComponent(field_name, x_dim, y_dim, comment, unit, min, max) \ do { \ - typeName instance; \ - A2lTypedefParameterComponent_(#field_name, A2lGetRecordLayoutName2D(instance.field_name), x_dim, y_dim, \ - (uint32_t)((uint8_t *)&(instance.field_name) - (uint8_t *)&instance), comment, unit, min, max, NULL, NULL); \ + A2lTypedefParameterComponent_(#field_name, A2lGetRecordLayoutName2D(__A2lTypedefBegin_instance->field_name), x_dim, y_dim, \ + (uint32_t)((uint8_t *)&(__A2lTypedefBegin_instance->field_name) - (uint8_t *)__A2lTypedefBegin_instance), comment, unit, min, max, NULL, \ + NULL); \ } while (0) -#define A2lTypedefMapComponentWithSharedAxis(field_name, typeName, x_dim, y_dim, comment, unit, min, max, x_axis, y_axis) \ +#define A2lTypedefMapComponentWithSharedAxis(field_name, x_dim, y_dim, comment, unit, min, max, x_axis, y_axis) \ do { \ - typeName instance; \ - A2lTypedefParameterComponent_(#field_name, A2lGetRecordLayoutName2D(instance.field_name), x_dim, y_dim, \ - (uint32_t)((uint8_t *)&(instance.field_name) - (uint8_t *)&instance), comment, unit, min, max, x_axis, y_axis); \ + A2lTypedefParameterComponent_(#field_name, A2lGetRecordLayoutName2D(__A2lTypedefBegin_instance->field_name), x_dim, y_dim, \ + (uint32_t)((uint8_t *)&(__A2lTypedefBegin_instance->field_name) - (uint8_t *)__A2lTypedefBegin_instance), comment, unit, min, max, x_axis, \ + y_axis); \ } while (0) -#define A2lTypedefAxisComponent(field_name, typeName, x_dim, comment, unit, min, max) \ +#define A2lTypedefAxisComponent(field_name, x_dim, comment, unit, min, max) \ do { \ - typeName instance; \ - A2lTypedefParameterComponent_(#field_name, A2lGetRecordLayoutName1D(instance.field_name), x_dim, 0, (uint32_t)((uint8_t *)&(instance.field_name) - (uint8_t *)&instance), \ - comment, unit, min, max, NULL, NULL); \ + A2lTypedefParameterComponent_(#field_name, A2lGetRecordLayoutName1D(__A2lTypedefBegin_instance->field_name), x_dim, 0, \ + (uint32_t)((uint8_t *)&(__A2lTypedefBegin_instance->field_name) - (uint8_t *)__A2lTypedefBegin_instance), comment, unit, min, max, NULL, \ + NULL); \ } while (0) // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -540,6 +558,7 @@ const char *A2lGetRecordLayoutName_(tA2lTypeId type); // Set addressing modes void A2lRstAddrMode(void); +void A2lSetAutoAddrMode(tXcpEventId event_id, const uint8_t *frame_ptr, const uint8_t *base_ptr); void A2lSetDynAddrMode(tXcpEventId event_id, uint8_t i, const uint8_t *base); #ifdef XCP_ENABLE_REL_ADDRESSING void A2lSetRelAddrMode(tXcpEventId event_id, const uint8_t *base); @@ -566,8 +585,6 @@ void A2lCreateMeasurementGroupFromList(const char *name, char *names[], uint32_t /// Init A2L generation /// If the A2l file aready exists and matches the current EPK matches, if yes, load the binary persistence file /// If not, prepare the A2L file and start the runtime generation process -/// @param a2l_projectname Name of the A2L project, used to build the A2L and BIN file name -/// @param a2l_version Version string of the A2L project, used to build the A2L and BIN file name, can be NULL to generate a version based on time and date /// @param addr IP Address Used for IF_DATA XCP /// @param port Port Used for IF_DATA XCP /// @param useTCP Protocol Used for IF_DATA XCP @@ -577,7 +594,7 @@ void A2lCreateMeasurementGroupFromList(const char *name, char *names[], uint32_t /// A2L_MODE_FINALIZE_ON_CONNECT Finalize the A2L file on XCP client connect, if false, the A2L file has to finalized manually /// A2L_MODE_AUTO_GROUPS Enable automatic grouping of parameters (per segment) and measurements (per event), if false, grouping must be done manually /// @return true on success, false on failure -bool A2lInit(const char *a2l_projectname, const char *a2l_version, const uint8_t *addr, uint16_t port, bool useTCP, uint8_t mode); +bool A2lInit(const uint8_t *addr, uint16_t port, bool useTCP, uint8_t mode); /// Finish A2L generation /// Finalize the A2L file, write the binary persistence file @@ -590,6 +607,8 @@ bool A2lFinalize(void); // Used by the macros with the identical name (one underscore) void A2lSetSegmentAddrMode__i(tXcpCalSegIndex calseg_index, const uint8_t *calseg_instance); void A2lSetSegmentAddrMode__s(const char *calseg_name, const uint8_t *calseg_instance); +void A2lSetAutoAddrMode__s(const char *event_name, const uint8_t *stack_frame, const uint8_t *base_addr); +void A2lSetAutoAddrMode__i(tXcpEventId event_id, const uint8_t *stack_frame, const uint8_t *base_addr); void A2lSetRelativeAddrMode__s(const char *event_name, uint8_t i, const uint8_t *base_addr); void A2lSetRelativeAddrMode__i(tXcpEventId event_id, uint8_t i, const uint8_t *base_addr); void A2lSetStackAddrMode__s(const char *event_name, const uint8_t *stack_frame); @@ -605,34 +624,34 @@ uint32_t A2lGetAddr_(const void *addr); uint8_t A2lGetAddrExt_(void); // Create parameters -void A2lCreateParameter_(const char *name, tA2lTypeId type, uint8_t ext, uint32_t addr, const char *comment, const char *unit, double min, double max); -void A2lCreateMap_(const char *name, tA2lTypeId type, uint8_t ext, uint32_t addr, uint32_t xdim, uint32_t ydim, const char *comment, const char *unit, double min, double max, +void A2lCreateParameter_(const char *name, tA2lTypeId type, uint32_t addr, uint8_t ext, const char *comment, const char *unit, double min, double max); +void A2lCreateMap_(const char *name, tA2lTypeId type, uint32_t addr, uint8_t ext, uint32_t xdim, uint32_t ydim, const char *comment, const char *unit, double min, double max, const char *x_axis, const char *y_axis); -void A2lCreateCurve_(const char *name, tA2lTypeId type, uint8_t ext, uint32_t addr, uint32_t xdim, const char *comment, const char *unit, double min, double max, +void A2lCreateCurve_(const char *name, tA2lTypeId type, uint32_t addr, uint8_t ext, uint32_t xdim, const char *comment, const char *unit, double min, double max, const char *x_axis); -void A2lCreateAxis_(const char *name, tA2lTypeId type, uint8_t ext, uint32_t addr, uint32_t xdim, const char *comment, const char *unit, double min, double max); +void A2lCreateAxis_(const char *name, tA2lTypeId type, uint32_t addr, uint8_t ext, uint32_t xdim, const char *comment, const char *unit, double min, double max); // Create conversions const char *A2lCreateLinearConversion_(const char *name, const char *comment, const char *unit, double factor, double offset); const char *A2lCreateEnumConversion_(const char *name, const char *enum_description); // Create measurements -void A2lCreateMeasurement_(const char *instance_name, const char *name, tA2lTypeId type, uint8_t ext, uint32_t addr, const char *unit_or_conversion, double min, double max, +void A2lCreateMeasurement_(const char *instance_name, const char *name, tA2lTypeId type, uint32_t addr, uint8_t ext, const char *unit_or_conversion, double min, double max, const char *comment); -void A2lCreateMeasurementArray_(const char *instance_name, const char *name, tA2lTypeId type, int x_dim, int y_dim, uint8_t ext, uint32_t addr, const char *unit_or_conversion, +void A2lCreateMeasurementArray_(const char *instance_name, const char *name, tA2lTypeId type, int x_dim, int y_dim, uint32_t addr, uint8_t ext, const char *unit_or_conversion, double phys_min, double phys_max, const char *comment); // Create typedefs -void A2lTypedefBegin_(const char *name, uint32_t size, const char *comment); +void A2lTypedefBegin_(const char *name, uint32_t size, const char *format, ...); void A2lTypedefEnd_(void); -void A2lTypedefComponent_(const char *name, const char *type_name, uint16_t x_dim, uint32_t offset); -void A2lTypedefMeasurementComponent_(const char *name, const char *type_name, uint32_t offset, const char *comment, const char *unit_or_conversion, double min, double max); -void A2lTypedefParameterComponent_(const char *name, const char *type_name, uint16_t x_dim, uint16_t y_dim, uint32_t offset, const char *comment, const char *unit, double min, +void A2lTypedefComponent_(const char *name, const char *typedef_name, uint16_t x_dim, uint32_t offset); +void A2lTypedefMeasurementComponent_(const char *name, const char *typedef_name, uint16_t x_dim, uint32_t offset, const char *comment, const char *unit_or_conversion, double min, + double max); +void A2lTypedefParameterComponent_(const char *name, const char *typedef_name, uint16_t x_dim, uint16_t y_dim, uint32_t offset, const char *comment, const char *unit, double min, double max, const char *x_axis, const char *y_axis); -// Create instances if typedefs -void A2lCreateTypedefMeasurementInstance_(const char *instance_name, const char *type_name, uint16_t x_dim, uint8_t ext, uint32_t addr, const char *comment); -void A2lCreateTypedefParameterInstance_(const char *instance_name, const char *type_name, uint8_t ext, uint32_t addr, const char *comment); +// Create an instance of a typedef +void A2lCreateTypedefInstance_(const char *instance_name, const char *typedef_name, uint16_t x_dim, uint32_t addr, uint8_t ext, const char *comment); #ifdef __cplusplus } // extern "C" diff --git a/inc/a2l.hpp b/inc/a2l.hpp index d50d9223..22034aef 100644 --- a/inc/a2l.hpp +++ b/inc/a2l.hpp @@ -3,7 +3,7 @@ /*----------------------------------------------------------------------------- | File: -| a2l.hpp +| a2l.hpp - Public C++ API for A2L generation | | Description: | Public C++ header for A2L generation @@ -13,8 +13,10 @@ | ----------------------------------------------------------------------------*/ +// ============================================================================= // Helper macros for C++ one time and thread safe A2L registrations // Mutex protection is needed in multi-threaded contexts, because the A2L registration macros are not thread-safe +// ============================================================================= /* Usage examples: diff --git a/inc/xcplib.h b/inc/xcplib.h index f1c99ac9..f7bfa794 100644 --- a/inc/xcplib.h +++ b/inc/xcplib.h @@ -3,7 +3,7 @@ /*---------------------------------------------------------------------------- | File: -| xcplib.h +| xcplib.h - Public xcplib C API | | Description: | C header file for the XCPlite library xcplib application programming interface @@ -16,6 +16,7 @@ ----------------------------------------------------------------------------*/ #include +#include #include #ifdef __cplusplus @@ -32,7 +33,7 @@ extern "C" { /// @param use_tcp Use TCP if true, otherwise UDP. /// @param measurement_queue_size Measurement queue size in bytes. Includes the bytes occupied by the queue header and some space needed for alignment. /// @return true on success, otherwise false. -bool XcpEthServerInit(uint8_t const *address, uint16_t port, bool use_tcp, uint32_t measurement_queue_size); +bool XcpEthServerInit(const uint8_t *address, uint16_t port, bool use_tcp, uint32_t measurement_queue_size); /// Shutdown the XCP on Ethernet server. bool XcpEthServerShutdown(void); @@ -57,6 +58,7 @@ void XcpEthServerGetInfo(bool *out_is_tcp, uint8_t *out_mac, uint8_t *out_addres // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // Calibration segments +/// Calibration segment handle typedef uint16_t tXcpCalSegIndex; #define XCP_UNDEFINED_CALSEG 0xFFFF @@ -71,6 +73,9 @@ typedef uint16_t tXcpCalSegIndex; /// @return a handle or XCP_UNDEFINED_CALSEG when out of memory or the name already exists. tXcpCalSegIndex XcpCreateCalSeg(const char *name, const void *default_page, uint16_t size); +/// Find a calibration segment by name, returns XCP_UNDEFINED_CALSEG if not found +tXcpCalSegIndex XcpFindCalSeg(const char *name); + /// Get the name of the calibration segment /// @return the name of the calibration segment or NULL if the index is invalid. const char *XcpGetCalSegName(tXcpCalSegIndex calseg); @@ -82,13 +87,13 @@ const char *XcpGetCalSegName(tXcpCalSegIndex calseg); /// The data can be safely accessed while the lock is held. /// There is no contention with the XCP client tool and with other threads acquiring the lock. /// Acquiring the lock is wait-free, locks may be recursive -uint8_t const *XcpLockCalSeg(tXcpCalSegIndex calseg); +const uint8_t *XcpLockCalSeg(tXcpCalSegIndex calseg); /// Unlock a calibration segment void XcpUnlockCalSeg(tXcpCalSegIndex calseg); /// Freeze all calibration segments -/// The current working page is written to the persistency file +/// The current working page is written to the persistence file /// It will be the new default page on next application start /// Freeze can also be required by the XCP client tool. /// Requires option XCP_ENABLE_FREEZE_CAL_PAGE. @@ -99,14 +104,52 @@ bool XcpFreezeAllCalSeg(void); /// Maybe used in emergency situations. bool XcpResetAllCalSegs(void); -// Get the XCP/A2L address of a calibration segment -// Internal function used for A2L generation +// Internal functions uint32_t XcpGetCalSegBaseAddress(tXcpCalSegIndex calseg); +uint16_t XcpGetCalSegCount(void); +uint16_t XcpGetCalSegSize(tXcpCalSegIndex calseg); + +// --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// Calibration segment convenience macros + +// Convienienc macros to create and access calibration segments by identifier without providing explicit handles and the need to pass them around + +/// Create calibration segment macro +/// Name given as identifier, type name and segment name are identical +/// Macro may be used anywhere in the code, even in loops +// cal__##name is the linker map file marker for calibration segments +/// @param name given as identifier +#define CalSegCreate(name) \ + static tXcpCalSegIndex cal__##name = XCP_UNDEFINED_CALSEG; \ + static tXcpCalSegIndex __cal__##name = XCP_UNDEFINED_CALSEG; \ + if (cal__##name == XCP_UNDEFINED_CALSEG) { \ + cal__##name = XcpCreateCalSeg(#name, (uint8_t *)&(name), sizeof(name)); \ + __cal__##name = cal__##name; \ + } + +/// Get calibration segment macro +/// @param name given as identifier +#define CalSegGet(name) \ + static tXcpCalSegIndex __cal__##name = XCP_UNDEFINED_CALSEG; \ + if (__cal__##name == XCP_UNDEFINED_CALSEG) { \ + __cal__##name = XcpFindCalSeg(#name); \ + } + +/// Lock calibration segment macro +/// Macro may be used anywhere in the code, even in loops +/// @param name given as identifier +#define CalSegLock(name) ((const __typeof__(name) *)XcpLockCalSeg(__cal__##name)) + +/// Unlock calibration segment macro +/// @param name given as identifier +#define CalSegUnlock(name) XcpUnlockCalSeg(__cal__##name) // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // Dynamic DAQ event creation +/// Undefined event id #define XCP_UNDEFINED_EVENT_ID 0xFFFF +/// DAQ event id as handle typedef uint16_t tXcpEventId; /// Add a measurement event to the event list, returns the event id (0..XCP_MAX_EVENT_COUNT-1) @@ -148,37 +191,53 @@ uint16_t XcpGetEventIndex(tXcpEventId event); // To create an XCP event with increased priority, use XcpCreateEvent /// Global event -/// Name given as identifier /// Macro may be used anywhere in the code, even in loops -/// TLS once pattern, only the first call per thread does the event lookup +/// TLS once pattern (the first call creates the event, the first call per thread does the event lookup) +/// @param name Name given as identifier #define DaqCreateEvent(name) \ + static THREAD_LOCAL tXcpEventId evt__##name = XCP_UNDEFINED_EVENT_ID; \ if (XcpIsActivated()) { \ - static THREAD_LOCAL tXcpEventId daq_create_event_##name##_ = XCP_UNDEFINED_EVENT_ID; \ - if (daq_create_event_##name##_ == XCP_UNDEFINED_EVENT_ID) { \ - daq_create_event_##name##_ = XcpCreateEvent(#name, 0, 0); \ + if (evt__##name == XCP_UNDEFINED_EVENT_ID) { \ + evt__##name = XcpCreateEvent(#name, 0, 0); \ } \ } /// Global event /// Macro may be used anywhere in the code, even in loops -/// TLS once pattern, only the first call per thread does the event lookup +/// TLS once pattern (the first call creates the event, the first call per thread does the event lookup) +/// @param name Name given as string #define DaqCreateEvent_s(name) \ + static THREAD_LOCAL tXcpEventId evt__dynname = XCP_UNDEFINED_EVENT_ID; \ if (XcpIsActivated()) { \ - static THREAD_LOCAL tXcpEventId daq_create_event__ = XCP_UNDEFINED_EVENT_ID; \ - if (daq_create_event__ == XCP_UNDEFINED_EVENT_ID) { \ - daq_create_event__ = XcpCreateEvent(name, 0, 0); \ + if (evt__dynname == XCP_UNDEFINED_EVENT_ID) { \ + evt__dynname = XcpCreateEvent(name, 0, 0); \ } \ } /// Multi instance event -/// Name given as identifier -/// No caching of the event id, a new event instance is created for each call -#define DaqCreateEventInstance(name) XcpCreateEventInstance(#name, 0, 0); +/// No once pattern, a new event instance is created for each call +/// If the name exists, an incrementing instance id is appended to the name _xxx +/// @param name Name given as identifier +#define DaqCreateEventInstance(name) \ + static THREAD_LOCAL tXcpEventId evt__##name = XCP_UNDEFINED_EVENT_ID; \ + if (XcpIsActivated()) { \ + evt__##name = XcpCreateEventInstance(#name, 0, 0); \ + } + +/// Thread instance event +/// TLS once pattern (the first call per thread creates the event, an incrementing instance id is appended to the name _xxx +/// @param name Name given as identifier +#define DaqCreateEventThreadInstance(name) \ + static THREAD_LOCAL tXcpEventId evt__##name = XCP_UNDEFINED_EVENT_ID; \ + if (XcpIsActivated()) { \ + if (evt__##name == XCP_UNDEFINED_EVENT_ID) { \ + evt__##name = XcpCreateEventInstance(#name, 0, 0); \ + } \ + } -/// Multi instance event (thread local) -/// Name given as char string -/// No caching of the event id, a new event instance is created for each call -#define DaqCreateEventInstance_s(name) XcpCreateEventInstance(name, 0, 0); +/// Get event instance id +/// @param name Name given as identifier +#define DaqGetEventInstanceId(name) evt__##name // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // DAQ event trigger measurement instrumentation point @@ -188,26 +247,25 @@ uint16_t XcpGetEventIndex(tXcpEventId event); /// Trigger the XCP event 'event' for stack absolute addressing mode (XCP_ADDR_EXT_ABS) /// @param event Event id. -/// Assumes XCP address extension XCP_ADDR_EXT_REL is used for stack relative addressing and XCP_ADDR_EXT_ABS for absolute addressing. void XcpEvent(tXcpEventId event); -/// Trigger the XCP event 'event' for relative or absolute addressing mode with explicitly given base address (XCP_ADDR_EXT_DYN) +/// Trigger the XCP event 'event' for absolute or relative mode with explicitly given base address (for XCP_ADDR_EXT_DYN) /// @param event /// @param base address pointer for the relative (XCP_ADDR_EXT_DYN) addressing mode -void XcpEventExt(tXcpEventId event, const uint8_t *base); +void XcpEventExt(tXcpEventId event, const uint8_t *base2); -/// Trigger the XCP event 'event' with explicitly given base addresses for all addressing modes (address extensions XCP_ADDR_EXT_SEG, XCP_ADDR_EXT_ABS, XCP_ADDR_EXT_DYN, ...) -/// @param event -/// @param base address pointers -void XcpEventExt_(tXcpEventId event, const uint8_t **bases); +// Variadic versions for more call convenience -/// Trigger the XCP event 'event' with explicitly given base addresses for all addressing modes (address extensions XCP_ADDR_EXT_SEG, XCP_ADDR_EXT_ABS, XCP_ADDR_EXT_DYN, ...) -/// For explicitly setting the event time stamp (clock > 0) -/// For xplicitly setting the event time stamp (clock > 0) +/// Trigger the XCP event 'event' with explicitly given base addresses for all addressing modes (address extensions XCP_ADDR_EXT_DYN, ...) /// @param event -/// @param base address pointers -/// @param time stamp in CLOCK_TICKS_PER_S units -void XcpEventExt_At(tXcpEventId event, const uint8_t **bases, uint64_t clock); +/// @param count Number of base address pointers passed +void XcpEventExt_Var(tXcpEventId event, uint8_t count, ...); + +/// Internal use by some macros and the Rust API +void XcpEventExtAt(tXcpEventId event, const uint8_t *base2, uint64_t clock); +void XcpEventExt2(tXcpEventId event, const uint8_t *base2, const uint8_t *base3); +void XcpEventExt2At(tXcpEventId event, const uint8_t *base2, const uint8_t *base3, uint64_t clock); +void XcpEventExtAt_Var(tXcpEventId event, uint64_t clock, uint8_t count, ...); // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // Get stack frame pointer @@ -216,7 +274,7 @@ void XcpEventExt_At(tXcpEventId event, const uint8_t **bases, uint64_t clock); // Linux, MACOS gnu and clang compiler #if defined(__GNUC__) || defined(__clang__) -#define get_stack_frame_pointer() (const uint8_t *)__builtin_frame_address(0) +#define xcp_get_frame_addr() (const uint8_t *)__builtin_frame_address(0) // MSVC compiler #elif defined(_MSC_VER) @@ -227,23 +285,34 @@ void XcpEventExt_At(tXcpEventId event, const uint8_t **bases, uint64_t clock); // Suppress the warning since this is intentional behavior for stack frame detection #pragma warning(push) #pragma warning(disable : 4172) // returning address of local variable - intentional -static __forceinline const uint8_t *get_stack_frame_pointer_msvc(void) { +static __forceinline const uint8_t *xcp_get_frame_addr_msvc(void) { volatile char stack_marker = 0; return (const uint8_t *)&stack_marker; } #pragma warning(pop) -#define get_stack_frame_pointer() get_stack_frame_pointer_msvc() +#define xcp_get_frame_addr() xcp_get_frame_addr_msvc() // Other compilers #else -#error "get_stack_frame_pointer is not defined for this compiler. Please implement it." +#error "xcp_get_frame_addr is not defined for this compiler. Please implement it." #endif +// --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// Global storage + +// Get the base address for absolute XCP/A2L 32 bit address +const uint8_t *ApplXcpGetBaseAddr(void); +extern const uint8_t *gXcpBaseAddr; +#define xcp_get_base_addr() gXcpBaseAddr // For runtime optimization, use xcp_get_base_addr() instead of ApplXcpGetBaseAddr() + +// Calculate the absolute XCP/A2L 32 bit address from a pointer +uint32_t ApplXcpGetAddr(const uint8_t *p); + // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // DAQ event trigger convenience macros // Event name parameter is a symbol, a string (_s) or an event index (_i) -// Creates linker map file markers (static variables: daq_event_stackframe_'eventname'_ or daq_event_relative_'eventname'_) for the XCP event id used +// Creates linker map file markers (static variables: trg__xxxx_'eventname' ) for the XCP event id used // No need to take care to store the event id // Uses thread local storage to create a thread safe once pattern for the event lookup // All macros can be used to measure variables registered in absolute addressing mode as well @@ -264,116 +333,145 @@ static __forceinline const uint8_t *get_stack_frame_pointer_msvc(void) { #endif #endif // THREAD_LOCAL -// Get the base address for DAQ data access -uint8_t *ApplXcpGetBaseAddr(void); - /// Trigger the XCP event 'name' for stack relative or absolute addressing /// Cache the event name lookup -#define DaqEvent(name) \ +/// @param name Name given as identifier +#define DaqTriggerEvent(name) \ if (XcpIsActivated()) { \ - static THREAD_LOCAL tXcpEventId daq_event_stackframe_##name##_ = XCP_UNDEFINED_EVENT_ID; \ - if (daq_event_stackframe_##name##_ == XCP_UNDEFINED_EVENT_ID) { \ - daq_event_stackframe_##name##_ = XcpFindEvent(#name, NULL); \ - assert(daq_event_stackframe_##name##_ != XCP_UNDEFINED_EVENT_ID); \ + static THREAD_LOCAL tXcpEventId trg__AAS__##name = XCP_UNDEFINED_EVENT_ID; \ + if (trg__AAS__##name == XCP_UNDEFINED_EVENT_ID) { \ + trg__AAS__##name = XcpFindEvent(#name, NULL); \ + assert(trg__AAS__##name != XCP_UNDEFINED_EVENT_ID); \ } \ - const uint8_t *base[4] = {NULL, ApplXcpGetBaseAddr(), get_stack_frame_pointer(), NULL}; \ - XcpEventExt_(daq_event_stackframe_##name##_, base); \ + XcpEventExt_Var(trg__AAS__##name, 1, xcp_get_frame_addr()); \ } -#define DaqEventAt(name, clock) \ +#define DaqTriggerEventAt(name, clock) \ if (XcpIsActivated()) { \ - static THREAD_LOCAL tXcpEventId daq_event_stackframe_##name##_ = XCP_UNDEFINED_EVENT_ID; \ - if (daq_event_stackframe_##name##_ == XCP_UNDEFINED_EVENT_ID) { \ - daq_event_stackframe_##name##_ = XcpFindEvent(#name, NULL); \ - assert(daq_event_stackframe_##name##_ != XCP_UNDEFINED_EVENT_ID); \ + static THREAD_LOCAL tXcpEventId trg__AAS__##name = XCP_UNDEFINED_EVENT_ID; \ + if (trg__AAS__##name == XCP_UNDEFINED_EVENT_ID) { \ + trg__AAS__##name = XcpFindEvent(#name, NULL); \ + assert(trg__AAS__##name != XCP_UNDEFINED_EVENT_ID); \ } \ - const uint8_t *base[4] = {NULL, ApplXcpGetBaseAddr(), get_stack_frame_pointer(), NULL}; \ - XcpEventExt_At(daq_event_stackframe_##name##_, base, clock); \ - } - -/// Trigger the XCP event 'name' for stack relative or absolute addressing -/// Name is a character string, but must not be a string literal -/// Cache the event name lookup -#define DaqEvent_s(name) \ - if (XcpIsActivated()) { \ - static THREAD_LOCAL tXcpEventId daq_event_stackframe__ = XCP_UNDEFINED_EVENT_ID; \ - if (daq_event_stackframe__ == XCP_UNDEFINED_EVENT_ID) { \ - daq_event_stackframe__ = XcpFindEvent(name, NULL); \ - assert(daq_event_stackframe__ != XCP_UNDEFINED_EVENT_ID); \ - } \ - const uint8_t *base[4] = {NULL, ApplXcpGetBaseAddr(), get_stack_frame_pointer(), NULL}; \ - XcpEventExt_(daq_event_stackframe__, base); \ - } -#define DaqEventAt_s(name, clock) \ - if (XcpIsActivated()) { \ - static THREAD_LOCAL tXcpEventId daq_event_stackframe__ = XCP_UNDEFINED_EVENT_ID; \ - if (daq_event_stackframe__ == XCP_UNDEFINED_EVENT_ID) { \ - daq_event_stackframe__ = XcpFindEvent(name, NULL); \ - assert(daq_event_stackframe__ != XCP_UNDEFINED_EVENT_ID); \ - } \ - const uint8_t *base[4] = {NULL, ApplXcpGetBaseAddr(), get_stack_frame_pointer(), NULL}; \ - XcpEventExt_At(daq_event_stackframe__, base, clock); \ + XcpEventExtAt_Var(trg__AAS__##name, clock, 1, xcp_get_frame_addr()); \ } /// Trigger the XCP event by handle 'event_id' for stack relative or absolute addressing -#define DaqEvent_i(event_id) \ +/// No lookup +/// @param name Event given as id +#define DaqTriggerEvent_i(event_id) \ if (XcpIsActivated()) { \ - const uint8_t *base[4] = {NULL, ApplXcpGetBaseAddr(), get_stack_frame_pointer(), NULL}; \ - XcpEventExt_(event_id, base); \ + static THREAD_LOCAL tXcpEventId trg__AAS__##name = XCP_UNDEFINED_EVENT_ID; \ + trg__AAS__##name = event_id; \ + XcpEventExt(event_id, xcp_get_frame_addr()); \ } -#define DaqEventAt_i(event_id, clock) \ +#define DaqTriggerEventAt_i(event_id, clock) \ if (XcpIsActivated()) { \ - const uint8_t *base[4] = {NULL, ApplXcpGetBaseAddr(), get_stack_frame_pointer(), NULL}; \ - XcpEventExt_At(event_id, base, clock); \ + static THREAD_LOCAL tXcpEventId trg__AAS__##name = event_id; \ + trg__AAS__##name = event_id; \ + XcpEventExtAt(event_id, xcp_get_frame_addr(), clock); \ } /// Trigger the XCP event 'name' for absolute, stack and relative addressing mode with given individual base address (from A2lSetRelativeAddrMode(base_addr)) -/// Cache the event lookup -#define DaqEvent1(name, base_addr) \ - if (XcpIsActivated()) { \ - static THREAD_LOCAL tXcpEventId daq_event_relative_##name##_ = XCP_UNDEFINED_EVENT_ID; \ - if (daq_event_relative_##name##_ == XCP_UNDEFINED_EVENT_ID) { \ - daq_event_relative_##name##_ = XcpFindEvent(#name, NULL); \ - assert(daq_event_relative_##name##_ != XCP_UNDEFINED_EVENT_ID); \ - } \ - const uint8_t *base[4] = {NULL, ApplXcpGetBaseAddr(), get_stack_frame_pointer(), (const uint8_t *)base_addr}; \ - XcpEventExt_(daq_event_relative_##name##_, base); \ - } -#define DaqEvent2(name, base_addr1, base_addr2) \ +/// Cache the event name lookup +#define DaqTriggerEventExt(name, base_addr) \ if (XcpIsActivated()) { \ - static THREAD_LOCAL tXcpEventId daq_event_relative_##name##_ = XCP_UNDEFINED_EVENT_ID; \ - if (daq_event_relative_##name##_ == XCP_UNDEFINED_EVENT_ID) { \ - daq_event_relative_##name##_ = XcpFindEvent(#name, NULL); \ - assert(daq_event_relative_##name##_ != XCP_UNDEFINED_EVENT_ID); \ + static THREAD_LOCAL tXcpEventId trg__AASD__##name = XCP_UNDEFINED_EVENT_ID; \ + if (trg__AASD__##name == XCP_UNDEFINED_EVENT_ID) { \ + trg__AASD__##name = XcpFindEvent(#name, NULL); \ + assert(trg__AASD__##name != XCP_UNDEFINED_EVENT_ID); \ } \ - const uint8_t *base[5] = {NULL, ApplXcpGetBaseAddr(), get_stack_frame_pointer(), (const uint8_t *)base_addr1, (const uint8_t *)base_addr2}; \ - XcpEventExt_(daq_event_relative_##name##_, base); \ + XcpEventExt_Var(trg__AASD__##name, 2, xcp_get_frame_addr(), (const uint8_t *)base_addr); \ } /// Trigger the XCP event 'name' for absolute, stack and relative addressing mode with given individual base address (from A2lSetRelativeAddrMode(base_addr)) /// Name is a character string, but must not be a string literal /// Cache the event lookup -#define DaqEvent1_s(name, base_addr) \ +/// @param name Name given as identifier +/// @param base_addr Base address pointer for relative addressing mode +#define DaqTriggerEventExt_s(name, base_addr) \ if (XcpIsActivated()) { \ - static THREAD_LOCAL tXcpEventId daq_event_relative__ = XCP_UNDEFINED_EVENT_ID; \ - if (daq_event_relative__ == XCP_UNDEFINED_EVENT_ID) { \ - daq_event_relative__ = XcpFindEvent(name, NULL); \ - assert(daq_event_relative__ != XCP_UNDEFINED_EVENT_ID); \ + static THREAD_LOCAL tXcpEventId trg__AASD__ = XCP_UNDEFINED_EVENT_ID; \ + if (trg__AASD__ == XCP_UNDEFINED_EVENT_ID) { \ + trg__AASD__ = XcpFindEvent(name, NULL); \ + assert(trg__AASD__ != XCP_UNDEFINED_EVENT_ID); \ } \ - const uint8_t *base[4] = {NULL, ApplXcpGetBaseAddr(), get_stack_frame_pointer(), (const uint8_t *)base_addr}; \ - XcpEventExt_(daq_event_relative__, base); \ + XcpEventExt_Var(trg__AASD__, 2, xcp_get_frame_addr(), (const uint8_t *)base_addr); \ } /// Trigger the XCP event by handle 'event_id' for absolute, stack and relative addressing mode with given individual base address (from A2lSetRelativeAddrMode(base_addr)) -/// Cache the event lookup -#define DaqEvent1_i(event_id, base_addr) \ +/// No lookup +/// @param event_id Event given as id +/// @param base_addr Base address pointer for relative addressing mode +#define DaqTriggerEventExt_i(event_id, base_addr) \ if (XcpIsActivated()) { \ - const uint8_t *base[4] = {NULL, ApplXcpGetBaseAddr(), get_stack_frame_pointer(), (const uint8_t *)base_addr}; \ - XcpEventExt_(event_id, base); \ + static THREAD_LOCAL tXcpEventId trg__AASD__##name = event_id; \ + XcpEventExt_Var(trg__AASD__##name, 2, xcp_get_frame_addr(), (const uint8_t *)base_addr); \ } -#define DaqEventRelative DaqEvent1 -#define DaqEventRelative_s DaqEvent1_s -#define DaqEventRelative_i DaqEvent1_i +// --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// Combined create and trigger DAQ event macros + +#define DaqCreateAndTriggerEvent(name) \ + if (XcpIsActivated()) { \ + static THREAD_LOCAL tXcpEventId evt__##name = XCP_UNDEFINED_EVENT_ID; \ + static THREAD_LOCAL tXcpEventId trg__AAS__##name = XCP_UNDEFINED_EVENT_ID; \ + if (trg__AAS__##name == XCP_UNDEFINED_EVENT_ID) { \ + evt__##name = trg__AAS__##name; \ + trg__AAS__##name = XcpCreateEvent(#name, 0, 0); \ + } \ + XcpEventExt_Var(trg__AAS__##name, 1, xcp_get_frame_addr()); \ + } + +// --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// Build time A2L file generation helpers + +// @@@@ NOTE: Work in progress +#if 0 + +#define _XCP_STRING(var_name, suffix, value) static const char __attribute__((section(XCP_STRING_SECTION), used)) __xcp_str_##var_name##suffix[] = value + +#ifdef __APPLE__ +// macOS Mach-O: segment,section format +#define XCP_META_SECTION "__DATA,__xcp_meta" +#define XCP_STRING_SECTION "__DATA,__xcp_str" +#else +// Linux ELF: simple section names +#define XCP_META_SECTION ".xcp.meta" +#define XCP_STRING_SECTION ".xcp.strings" +#endif + +// Metadata annotations +#define XCP_COMMENT (name, comment) static const char *__attribute__((section(XCP_STRING_SECTION), used)) __a2l_comment_##name = comment; +#define XCP_UNIT(name, unit) static const char *__attribute__((section(XCP_STRING_SECTION), used)) __a2l_unit_##name = unit; +#define XCP_LIMITS(name, min, max) \ + static const double __attribute__((section(XCP_META_SECTION), used)) __a2l_min_##name = min; \ + static const double __attribute__((section(XCP_META_SECTION), used)) __a2l_max_##name = max; + +#else +#define XCP_COMMENT (name, comment) +#define XCP_UNIT(name, unit) +#define XCP_LIMITS(name, min, max) +#endif + +// --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// Measurement of stack variables + +// Mark a (local) variable as volatile and used to prevent compiler optimizations and force spilling it to a memory location +// XCPlite can measure stack variables but not registers +// The A2L updater or creator can handle only simple location expressions such as absolute addresses, stack relative addresses (CFA) and calibration segment relative addresses +// For complex cases, use the DaqCapture macro to capture the variable in a hidden static variable +/// Attribute to mark a variable as measurable by XCP/A2L +/// Example usage: XCP_MEA int32_t my_var = 0; +#define XCP_MEA volatile + +/// Capture a local variable for measurement with a specific event +/// The variable must be in scope when the event is triggered with DaqTriggerEvent +/// The build time A2L file generator will find the hidden static variable 'daq__##event##__##var' and create the measurement with approriate addressing mode and event association +#define DaqCapture(event, var) \ + do { \ + static __typeof__(var) daq__##event##__##var; \ + daq__##event##__##var = var; \ + } while (0) // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // Misc @@ -386,7 +484,10 @@ void XcpSetLogLevel(uint8_t level); /// Initialize the XCP singleton, activate XCP, must be called before starting the server /// If XCP is not activated, the server will not start and all XCP instrumentation will be passive with minimal overhead /// @param activate If true, the XCP library is activated -void XcpInit(bool activate); +void XcpInit(const char *name, const char *epk, bool activate); + +/// Reset XCP library to initial state +void XcpReset(void); /// Check if XCP has been activated bool XcpIsActivated(void); @@ -394,16 +495,16 @@ bool XcpIsActivated(void); /// Check if XCP is connected bool XcpIsConnected(void); -// Set the A2L file name -// To enable automatic detection by the XCP client tool (GET_ID IDT_ASAM_NAME, IDT_ASAM_NAME and for IDT_ASAM_UPLOAD) -// Internal function used by the A2L generator -#define XCP_A2L_FILENAME_MAX_LENGTH 255 // Maximum length of A2L filename with extension -void ApplXcpSetA2lName(const char *name); +// Project name +const char *XcpGetProjectName(void); -// Set software version identifier (EPK) -// Internal function used by the A2L generator -#define XCP_EPK_MAX_LENGTH 32 // Maximum length of EPK string -void XcpSetEpk(const char *epk); +// A2L file name +// Notify xcplib there is a valid A2L with this name to be provided for upload via XCP command GET_ID +void XcpSetA2lName(const char *name); +const char *XcpGetA2lName(void); + +// EPK software version identifier +const char *XcpGetEpk(void); /// Force Disconnect /// Stop DAQ, flush queue, flush pending calibrations @@ -425,7 +526,7 @@ void XcpPrint(const char *str); uint64_t ApplXcpGetClock64(void); // Register XCP callbacks -void ApplXcpRegisterConnectCallback(bool (*cb_connect)(void)); +void ApplXcpRegisterConnectCallback(bool (*cb_connect)(uint8_t mode)); void ApplXcpRegisterPrepareDaqCallback(uint8_t (*cb_prepare_daq)(void)); void ApplXcpRegisterStartDaqCallback(uint8_t (*cb_start_daq)(void)); void ApplXcpRegisterStopDaqCallback(void (*cb_stop_daq)(void)); @@ -436,18 +537,24 @@ void ApplXcpRegisterFreezeCalCallback(uint8_t (*cb_freeze_cal)(void)); void ApplXcpRegisterInitCalCallback(uint8_t (*cb_init_cal)(uint8_t src_page, uint8_t dst_page)); void ApplXcpRegisterReadCallback(uint8_t (*cb_read)(uint32_t src, uint8_t size, uint8_t *dst)); void ApplXcpRegisterWriteCallback(uint8_t (*cb_write)(uint32_t dst, uint8_t size, const uint8_t *src, uint8_t delay)); -void ApplXcpRegisterFlushCallback(uint8_t (*cb_flush)(void)); // Internal function used by the Rust API -void ApplXcpRegisterCallbacks(bool (*cb_connect)(void), uint8_t (*cb_prepare_daq)(void), uint8_t (*cb_start_daq)(void), void (*cb_stop_daq)(void), - uint8_t (*cb_freeze_daq)(uint8_t clear, uint16_t config_id), uint8_t (*cb_get_cal_page)(uint8_t segment, uint8_t mode), - uint8_t (*cb_set_cal_page)(uint8_t segment, uint8_t page, uint8_t mode), uint8_t (*cb_freeze_cal)(void), - uint8_t (*cb_init_cal)(uint8_t src_page, uint8_t dst_page), uint8_t (*cb_read)(uint32_t src, uint8_t size, uint8_t *dst), - uint8_t (*cb_write)(uint32_t dst, uint8_t size, const uint8_t *src, uint8_t delay), uint8_t (*cb_flush)(void)); +void ApplXcpRegisterFlushCallback(uint8_t (*cb_flush)(void)); // xcplib utility functions used for the demos to keep them clean and platform-independent uint64_t clockGetNs(void); uint64_t clockGetUs(void); void sleepUs(uint32_t us); +// --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// Compatibility V0.9.3 to V1.0.0 + +// Deprecated macros +#define DaqEvent DaqTriggerEvent +#define DaqEventRelative DaqTriggerEventExt +#define DaqEventRelative_s DaqTriggerEventExt_s +#define DaqEventRelative_i DaqTriggerEventExt_i +#define DaqCreateEventInstance_s DaqCreateEventInstance +#define DaqEvent_i DaqTriggerEvent_i + #ifdef __cplusplus } // extern "C" #endif diff --git a/inc/xcplib.hpp b/inc/xcplib.hpp index 01f9c85d..78e85129 100644 --- a/inc/xcplib.hpp +++ b/inc/xcplib.hpp @@ -3,7 +3,7 @@ /*---------------------------------------------------------------------------- | File: -| xcplib.hpp +| xcplib.hpp - Public xcplib C++ API | | Description: | C++ header file for the XCPlite library xcplib application programming interface @@ -21,6 +21,10 @@ namespace xcplib { constexpr uint8_t XCP_ADDR_EXT_SEG = 0; +// ============================================================================= +// RAII wrapper for structs with calibration parameters +// ============================================================================= + /// Generic RAII wrapper for structs with calibration parameters /// Template parameter T must be the calibration parameter struct type template class CalSeg { @@ -31,8 +35,8 @@ template class CalSeg { /// Constructor - creates the calibration segment struct wrapper /// @param name Name of the calibration segment /// @param default_params Default parameter values (reference page) - CalSeg(const char *name, const T &default_params) { - segment_index_ = XcpCreateCalSeg(name, &default_params, sizeof(T)); + CalSeg(const char *name, const T *default_params) { + segment_index_ = XcpCreateCalSeg(name, default_params, sizeof(T)); assert(segment_index_ != XCP_UNDEFINED_CALSEG); // Ensure the calibration segment was created successfully } @@ -75,13 +79,187 @@ template class CalSeg { void CreateA2lTypedefInstance(const char *type_name, const char *comment) { A2lLock(); A2lSetSegmentAddrMode__i(segment_index_, NULL); - A2lCreateTypedefParameterInstance_(XcpGetCalSegName(segment_index_), type_name, XCP_ADDR_EXT_SEG, XcpGetCalSegBaseAddress(segment_index_), comment); + A2lCreateTypedefInstance_(XcpGetCalSegName(segment_index_), type_name, 0, XcpGetCalSegBaseAddress(segment_index_), XCP_ADDR_EXT_SEG, comment); A2lUnlock(); } }; /// Convenience function to create calibration segment wrappers /// Usage: auto calseg = xcp::CreateCalSeg("Parameters", default_parameters); -template CalSeg CreateCalSeg(const char *name, const T &default_params) { return CalSeg(name, default_params); } +template CalSeg CreateCalSeg(const char *name, const T *default_params) { return CalSeg(name, default_params); } } // namespace xcplib + +// ============================================================================= +// Variadic event trigger convinience macros +// Option to reate event, register measurements and trigger event in one call +// ============================================================================= + +// Macro to count arguments in a tuple +#define A2L_TUPLE_SIZE_(...) A2L_TUPLE_SIZE_IMPL_(__VA_ARGS__, 5, 4, 3, 2, 1, 0) +#define A2L_TUPLE_SIZE_IMPL_(_1, _2, _3, _4, _5, N, ...) N + +// Dispatch macro based on tuple size +#define A2L_UNPACK_AND_REG_DISPATCH_(tuple) A2L_UNPACK_AND_REG_DISPATCH_IMPL_ tuple +#define A2L_UNPACK_AND_REG_DISPATCH_IMPL_(...) A2L_UNPACK_AND_REG_SELECT_(A2L_TUPLE_SIZE_(__VA_ARGS__))(__VA_ARGS__) + +// Select the appropriate registration macro based on argument count +#define A2L_UNPACK_AND_REG_SELECT_(N) A2L_UNPACK_AND_REG_SELECT_IMPL_(N) +#define A2L_UNPACK_AND_REG_SELECT_IMPL_(N) A2L_UNPACK_AND_REG_##N##_ + +// Measurement: (var, comment) +#define A2L_UNPACK_AND_REG_2_(var, comment) A2lCreateMeasurement_(NULL, #var, A2lGetTypeId(var), A2lGetAddr_((uint8_t *)&(var)), A2lGetAddrExt_(), NULL, 0.0, 0.0, comment); + +// Physical measurement: (var, comment, unit_or_conversion, min, max) +#define A2L_UNPACK_AND_REG_5_(var, comment, unit_or_conversion, min, max) \ + A2lCreateMeasurement_(NULL, #var, A2lGetTypeId(var), A2lGetAddr_((uint8_t *)&(var)), A2lGetAddrExt_(), unit_or_conversion, min, max, comment); + +// Main unpacking macro - dispatches to the right version +#define A2L_UNPACK_AND_REG_(...) A2L_UNPACK_AND_REG_DISPATCH_((__VA_ARGS__)) + +// Macro helpers for FOR_EACH pattern +// These expand the variadic arguments and apply a macro to each one +#define XCPLIB_FOR_EACH_MEAS_(macro, ...) XCPLIB_FOR_EACH_MEAS_IMPL_(macro, __VA_ARGS__) + +// Implementation helper - handles up to 16 measurements +// Each XCPLIB_APPLY_ expands to macro(args) where args is (var, comment) +#define XCPLIB_FOR_EACH_MEAS_IMPL_(m, ...) \ + XCPLIB_GET_MACRO_(__VA_ARGS__, XCPLIB_FE_16_, XCPLIB_FE_15_, XCPLIB_FE_14_, XCPLIB_FE_13_, XCPLIB_FE_12_, XCPLIB_FE_11_, XCPLIB_FE_10_, XCPLIB_FE_9_, XCPLIB_FE_8_, \ + XCPLIB_FE_7_, XCPLIB_FE_6_, XCPLIB_FE_5_, XCPLIB_FE_4_, XCPLIB_FE_3_, XCPLIB_FE_2_, XCPLIB_FE_1_, XCPLIB_FE_0_)(m, __VA_ARGS__) + +// Selector macro - picks the right expander based on argument count +#define XCPLIB_GET_MACRO_(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, NAME, ...) NAME + +// Expander macros for different argument counts +#define XCPLIB_FE_0_(m) +#define XCPLIB_FE_1_(m, x1) XCPLIB_APPLY_(m, x1) +#define XCPLIB_FE_2_(m, x1, x2) XCPLIB_APPLY_(m, x1) XCPLIB_APPLY_(m, x2) +#define XCPLIB_FE_3_(m, x1, x2, x3) XCPLIB_APPLY_(m, x1) XCPLIB_APPLY_(m, x2) XCPLIB_APPLY_(m, x3) +#define XCPLIB_FE_4_(m, x1, x2, x3, x4) XCPLIB_APPLY_(m, x1) XCPLIB_APPLY_(m, x2) XCPLIB_APPLY_(m, x3) XCPLIB_APPLY_(m, x4) +#define XCPLIB_FE_5_(m, x1, x2, x3, x4, x5) XCPLIB_APPLY_(m, x1) XCPLIB_APPLY_(m, x2) XCPLIB_APPLY_(m, x3) XCPLIB_APPLY_(m, x4) XCPLIB_APPLY_(m, x5) +#define XCPLIB_FE_6_(m, x1, x2, x3, x4, x5, x6) XCPLIB_APPLY_(m, x1) XCPLIB_APPLY_(m, x2) XCPLIB_APPLY_(m, x3) XCPLIB_APPLY_(m, x4) XCPLIB_APPLY_(m, x5) XCPLIB_APPLY_(m, x6) +#define XCPLIB_FE_7_(m, x1, x2, x3, x4, x5, x6, x7) \ + XCPLIB_APPLY_(m, x1) XCPLIB_APPLY_(m, x2) XCPLIB_APPLY_(m, x3) XCPLIB_APPLY_(m, x4) XCPLIB_APPLY_(m, x5) XCPLIB_APPLY_(m, x6) XCPLIB_APPLY_(m, x7) +#define XCPLIB_FE_8_(m, x1, x2, x3, x4, x5, x6, x7, x8) \ + XCPLIB_APPLY_(m, x1) XCPLIB_APPLY_(m, x2) XCPLIB_APPLY_(m, x3) XCPLIB_APPLY_(m, x4) XCPLIB_APPLY_(m, x5) XCPLIB_APPLY_(m, x6) XCPLIB_APPLY_(m, x7) XCPLIB_APPLY_(m, x8) +#define XCPLIB_FE_9_(m, x1, x2, x3, x4, x5, x6, x7, x8, x9) \ + XCPLIB_APPLY_(m, x1) \ + XCPLIB_APPLY_(m, x2) XCPLIB_APPLY_(m, x3) XCPLIB_APPLY_(m, x4) XCPLIB_APPLY_(m, x5) XCPLIB_APPLY_(m, x6) XCPLIB_APPLY_(m, x7) XCPLIB_APPLY_(m, x8) XCPLIB_APPLY_(m, x9) +#define XCPLIB_FE_10_(m, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10) \ + XCPLIB_APPLY_(m, x1) \ + XCPLIB_APPLY_(m, x2) \ + XCPLIB_APPLY_(m, x3) XCPLIB_APPLY_(m, x4) XCPLIB_APPLY_(m, x5) XCPLIB_APPLY_(m, x6) XCPLIB_APPLY_(m, x7) XCPLIB_APPLY_(m, x8) XCPLIB_APPLY_(m, x9) XCPLIB_APPLY_(m, x10) +#define XCPLIB_FE_11_(m, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11) \ + XCPLIB_APPLY_(m, x1) \ + XCPLIB_APPLY_(m, x2) \ + XCPLIB_APPLY_(m, x3) \ + XCPLIB_APPLY_(m, x4) XCPLIB_APPLY_(m, x5) XCPLIB_APPLY_(m, x6) XCPLIB_APPLY_(m, x7) XCPLIB_APPLY_(m, x8) XCPLIB_APPLY_(m, x9) XCPLIB_APPLY_(m, x10) XCPLIB_APPLY_(m, x11) +#define XCPLIB_FE_12_(m, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12) \ + XCPLIB_APPLY_(m, x1) \ + XCPLIB_APPLY_(m, x2) \ + XCPLIB_APPLY_(m, x3) \ + XCPLIB_APPLY_(m, x4) \ + XCPLIB_APPLY_(m, x5) XCPLIB_APPLY_(m, x6) XCPLIB_APPLY_(m, x7) XCPLIB_APPLY_(m, x8) XCPLIB_APPLY_(m, x9) XCPLIB_APPLY_(m, x10) XCPLIB_APPLY_(m, x11) XCPLIB_APPLY_(m, x12) +#define XCPLIB_FE_13_(m, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13) \ + XCPLIB_APPLY_(m, x1) \ + XCPLIB_APPLY_(m, x2) \ + XCPLIB_APPLY_(m, x3) \ + XCPLIB_APPLY_(m, x4) \ + XCPLIB_APPLY_(m, x5) \ + XCPLIB_APPLY_(m, x6) XCPLIB_APPLY_(m, x7) XCPLIB_APPLY_(m, x8) XCPLIB_APPLY_(m, x9) XCPLIB_APPLY_(m, x10) XCPLIB_APPLY_(m, x11) XCPLIB_APPLY_(m, x12) XCPLIB_APPLY_(m, x13) +#define XCPLIB_FE_14_(m, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14) \ + XCPLIB_APPLY_(m, x1) \ + XCPLIB_APPLY_(m, x2) \ + XCPLIB_APPLY_(m, x3) \ + XCPLIB_APPLY_(m, x4) \ + XCPLIB_APPLY_(m, x5) \ + XCPLIB_APPLY_(m, x6) \ + XCPLIB_APPLY_(m, x7) XCPLIB_APPLY_(m, x8) XCPLIB_APPLY_(m, x9) XCPLIB_APPLY_(m, x10) XCPLIB_APPLY_(m, x11) XCPLIB_APPLY_(m, x12) XCPLIB_APPLY_(m, x13) XCPLIB_APPLY_(m, x14) +#define XCPLIB_FE_15_(m, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15) \ + XCPLIB_APPLY_(m, x1) \ + XCPLIB_APPLY_(m, x2) \ + XCPLIB_APPLY_(m, x3) \ + XCPLIB_APPLY_(m, x4) \ + XCPLIB_APPLY_(m, x5) \ + XCPLIB_APPLY_(m, x6) \ + XCPLIB_APPLY_(m, x7) \ + XCPLIB_APPLY_(m, x8) XCPLIB_APPLY_(m, x9) XCPLIB_APPLY_(m, x10) XCPLIB_APPLY_(m, x11) XCPLIB_APPLY_(m, x12) XCPLIB_APPLY_(m, x13) XCPLIB_APPLY_(m, x14) XCPLIB_APPLY_(m, x15) +#define XCPLIB_FE_16_(m, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16) \ + XCPLIB_APPLY_(m, x1) \ + XCPLIB_APPLY_(m, x2) \ + XCPLIB_APPLY_(m, x3) \ + XCPLIB_APPLY_(m, x4) \ + XCPLIB_APPLY_(m, x5) \ + XCPLIB_APPLY_(m, x6) \ + XCPLIB_APPLY_(m, x7) \ + XCPLIB_APPLY_(m, x8) \ + XCPLIB_APPLY_(m, x9) XCPLIB_APPLY_(m, x10) XCPLIB_APPLY_(m, x11) XCPLIB_APPLY_(m, x12) XCPLIB_APPLY_(m, x13) XCPLIB_APPLY_(m, x14) XCPLIB_APPLY_(m, x15) XCPLIB_APPLY_(m, x16) + +// Apply macro to unpacked tuple arguments +// Strips the outer parentheses from (var, comment) and passes to macro as two separate arguments +#define XCPLIB_APPLY_(m, args) m args + +// ============================================================================= +// Variadic DAQ macros which register measurments and trigger already created events +// ============================================================================= + +// Create the daq event (just for unique naming scheme) +#define XcpCreateDaqEvent DaqCreateEvent + +// Register measurements once and trigger an already created event with stack addressing mode +#define XcpTriggerDaqEvent(event_name, ...) \ + do { \ + if (A2lOnceLock()) { \ + A2lSetStackAddrMode__s(#event_name, xcp_get_frame_addr()); \ + XCPLIB_FOR_EACH_MEAS_(A2L_UNPACK_AND_REG_, __VA_ARGS__) \ + } \ + DaqTriggerEvent(event_name); \ + } while (0) + +// Register measurements once and trigger an already created event with stack or relative addressing mode +#define XcpTriggerDaqEventExt(event_name, base, ...) \ + do { \ + if (A2lOnceLock()) { \ + A2lSetAutoAddrMode__s(#event_name, xcp_get_frame_addr(), (const uint8_t *)base); \ + XCPLIB_FOR_EACH_MEAS_(A2L_UNPACK_AND_REG_, __VA_ARGS__) \ + } \ + DaqTriggerEventExt(event_name, base); \ + } while (0) + +// ============================================================================= +// Variadic DAQ macros which create, register variables and trigger events in one call +// ============================================================================= + +// Create event, register stack measurements once and trigger an event with stack addressing mode +#define XcpDaqEvent(event_name, ...) \ + do { \ + if (XcpIsActivated()) { \ + static THREAD_LOCAL tXcpEventId evt__##event_name = XCP_UNDEFINED_EVENT_ID; \ + if (evt__##event_name == XCP_UNDEFINED_EVENT_ID) { \ + evt__##event_name = XcpCreateEvent(#event_name, 0, 0); \ + if (A2lOnceLock()) { \ + A2lSetStackAddrMode__s(#event_name, xcp_get_frame_addr()); \ + XCPLIB_FOR_EACH_MEAS_(A2L_UNPACK_AND_REG_, __VA_ARGS__) \ + } \ + } \ + static THREAD_LOCAL tXcpEventId trg__AAS__##event_name = evt__##event_name; \ + XcpEventExt_Var(trg__AAS__##event_name, 1, xcp_get_frame_addr()); \ + } \ + } while (0) + +// Create event, register once and trigger an event with stack or relative addressing mode +#define XcpDaqEventExt(event_name, base, ...) \ + do { \ + if (XcpIsActivated()) { \ + static THREAD_LOCAL tXcpEventId evt__##event_name = XCP_UNDEFINED_EVENT_ID; \ + if (evt__##event_name == XCP_UNDEFINED_EVENT_ID) { \ + evt__##event_name = XcpCreateEvent(#event_name, 0, 0); \ + if (A2lOnceLock()) { \ + A2lSetAutoAddrMode__s(#event_name, xcp_get_frame_addr(), (const uint8_t *)base); \ + XCPLIB_FOR_EACH_MEAS_(A2L_UNPACK_AND_REG_, __VA_ARGS__) \ + } \ + } \ + static THREAD_LOCAL tXcpEventId trg__AASD__##event_name = evt__##event_name; \ + XcpEventExt_Var(trg__AASD__##event_name, 2, xcp_get_frame_addr(), (const uint8_t *)base); \ + } \ + } while (0) diff --git a/src/a2l.c b/src/a2l.c index 3c245c99..6213bf37 100644 --- a/src/a2l.c +++ b/src/a2l.c @@ -22,54 +22,60 @@ #include "dbg_print.h" // for DBG_PRINTF3, DBG_PRINT4, DBG_PRINTF4, DBG... #include "main_cfg.h" // for OPTION_xxx -#include "persistency.h" // for XcpBinWrite, XcpBinLoad +#include "persistence.h" // for XcpBinWrite #include "platform.h" // for platform defines (WIN_, LINUX_, MACOS_) and specific implementation of sockets, clock, thread, mutex #include "xcp.h" // for CRC_XXX #include "xcpLite.h" // for tXcpDaqLists, XcpXxx, ApplXcpXxx, ... #include "xcp_cfg.h" // for XCP_xxx #include "xcptl_cfg.h" // for XCPTL_xxx -#ifdef _WIN32 -#ifdef OPTION_ENABLE_GET_LOCAL_ADDR -#include // for free, malloc in getLocalAddr -#endif -#endif +#ifdef OPTION_ENABLE_A2L_GENERATOR //---------------------------------------------------------------------------------- -static FILE *gA2lFile = NULL; -static bool gA2lFileFinalized = false; - -static char gA2lFilename[256]; -#ifdef OPTION_CAL_PERSISTENCE -static char gBinFilename[256]; -#endif +#define INCLUDE_AML_FILES // Use /include "file.aml" +// #define EMBED_AML_FILES // Embed AML files into generated A2L file -static bool gA2lFinalizeOnConnect = false; // Finalize A2L file on connect -static bool gA2lWriteAlways = true; // Write A2L file always, even if no changes were made +//---------------------------------------------------------------------------------- -static MUTEX gA2lMutex; +// A2L global options +static bool gA2lUseTCP = false; +static uint16_t gA2lOptionPort = 5555; +static uint8_t gA2lOptionBindAddr[4] = {0, 0, 0, 0}; +static uint8_t gA2lMode = A2L_MODE_WRITE_ALWAYS | A2L_MODE_FINALIZE_ON_CONNECT | A2L_MODE_AUTO_GROUPS; +static bool gA2lFinalizeOnConnect = true; // Finalize A2L file on connect +static bool gA2lWriteAlways = true; // Write A2L file always, even if no changes were made +static bool gA2lAutoGroups = true; // Automatically create groups for measurements and parameters +// A2L file handles and state +static char gA2lFilename[256]; +static bool gA2lFileWritten = false; +static FILE *gA2lFile = NULL; static FILE *gA2lTypedefsFile = NULL; static FILE *gA2lGroupsFile = NULL; - static FILE *gA2lConversionsFile = NULL; + +// Thread safety and one time execution +static MUTEX gA2lMutex; +A2L_ONCE_TYPE gA2lOncePass = 1; // Allows to rerun the once checkers + +// Conversion name buffer static char gA2lConvName[256]; -static char gA2lAutoGroups = true; // Automatically create groups for measurements and parameters +// Auto grouping static const char *gA2lAutoGroupName = NULL; // Current open group static bool gA2lAutoGroupIsParameter = false; // Group is a parameter group -static bool gA2lUseTCP = false; -static uint16_t gA2lOptionPort = 5555; -static uint8_t gA2lOptionBindAddr[4] = {0, 0, 0, 0}; - +// Addressing mode static tXcpEventId gA2lFixedEvent = XCP_UNDEFINED_EVENT_ID; static tXcpEventId gA2lDefaultEvent = XCP_UNDEFINED_EVENT_ID; -static uint8_t gAl2AddrExt = XCP_ADDR_EXT_ABS; // Address extension (addressing mode, default absolute) -static const uint8_t *gA2lAddrBase = NULL; // Base address for rel and dyn mode -static tXcpCalSegIndex gA2lAddrIndex = 0; // Segment index for seg mode +static uint8_t gA2lAddrExt = XCP_ADDR_EXT_ABS; // Address extension (addressing mode, default absolute) +static uint8_t gA2lAutoAddrExt = XCP_UNDEFINED_ADDR_EXT; // Address extension calculated in automatic mode (valid if gA2lAddrExt=XCP_UNDEFINED_ADDR_EXT) +static const uint8_t *gA2lFramePtr = NULL; // Frame address for rel and dyn mode +static const uint8_t *gA2lBasePtr = NULL; // Base address for rel and dyn mode +static tXcpCalSegIndex gA2lAddrIndex = 0; // Segment index for seg mode +// Statistics static uint32_t gA2lMeasurements; static uint32_t gA2lParameters; static uint32_t gA2lTypedefs; @@ -78,49 +84,62 @@ static uint32_t gA2lInstances; static uint32_t gA2lConversions; //---------------------------------------------------------------------------------- -static const char *gA2lHeader = "ASAP2_VERSION 1 71\n" - "/begin PROJECT %s \"\"\n\n" - "/begin HEADER \"\" VERSION \"1.0\" PROJECT_NO XCPlite /end HEADER\n\n" - "/begin MODULE %s \"\"\n\n" - "/include \"XCP_104.aml\"\n\n" - "/begin MOD_COMMON \"\"\n" - "BYTE_ORDER MSB_LAST\n" - "ALIGNMENT_BYTE 1\n" - "ALIGNMENT_WORD 1\n" - "ALIGNMENT_LONG 1\n" - "ALIGNMENT_FLOAT16_IEEE 1\n" - "ALIGNMENT_FLOAT32_IEEE 1\n" - "ALIGNMENT_FLOAT64_IEEE 1\n" - "ALIGNMENT_INT64 1\n" - "/end MOD_COMMON\n" - "\n\n"; + +static bool A2lOpen(void); + +//---------------------------------------------------------------------------------- +static const char *gA2lHeader1 = "ASAP2_VERSION 1 71\n" + "/begin PROJECT %s \"\"\n\n" // project name + "/begin HEADER \"\" VERSION \"1.0\" PROJECT_NO " XCP_ADDRESS_MODE " /end HEADER\n\n" + "/begin MODULE %s \"\"\n\n"; // module name + +static const char *gA2lHeader2 = "/begin MOD_COMMON \"\"\n" + "BYTE_ORDER MSB_LAST\n" + "ALIGNMENT_BYTE 1\n" + "ALIGNMENT_WORD 1\n" + "ALIGNMENT_LONG 1\n" + "ALIGNMENT_FLOAT16_IEEE 1\n" + "ALIGNMENT_FLOAT32_IEEE 1\n" + "ALIGNMENT_FLOAT64_IEEE 1\n" + "ALIGNMENT_INT64 1\n" + "/end MOD_COMMON\n" + "\n\n"; + +//---------------------------------------------------------------------------------- +#ifdef EMBED_AML_FILES +static const char *gA2lAml = ""; +#endif //---------------------------------------------------------------------------------- #ifdef XCP_ENABLE_CALSEG_LIST -static const char *gA2lMemorySegment = "/begin MEMORY_SEGMENT %s \"\" DATA FLASH INTERN 0x%08X 0x%X -1 -1 -1 -1 -1\n" // name, start, size - "/begin IF_DATA XCP\n" - "/begin SEGMENT %u 2 0 0 0\n" // index - "/begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION \"\" /end CHECKSUM\n" - // 2 calibration pages, 0=working page (RAM), 1=initial readonly page (FLASH), independent access to ECU and XCP page possible - "/begin PAGE 0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_DONT_CARE /end PAGE\n" - "/begin PAGE 1 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_NOT_ALLOWED /end PAGE\n" - "/end SEGMENT\n" - "/end IF_DATA\n" - "/end MEMORY_SEGMENT\n"; - -#ifdef XCP_ENABLE_EPK_CALSEG -static const char *gA2lEpkMemorySegment = "/begin MEMORY_SEGMENT epk \"\" DATA FLASH INTERN 0x%08X %u -1 -1 -1 -1 -1\n" - "/begin IF_DATA XCP\n" - "/begin SEGMENT 0 2 0 0 0\n" - // @@@@ TODO: Workaround: EPK segment has 2 readonly pages, CANape would not care for a single page EPK segment, reads active page always - // from segment 0 and uses only SET_CAL_PAGE ALL mode - "/begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION \"\" /end CHECKSUM\n" - "/begin PAGE 0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_NOT_ALLOWED /end PAGE\n" - "/begin PAGE 1 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_NOT_ALLOWED /end PAGE\n" - "/end SEGMENT\n" - "/end IF_DATA\n" - "/end MEMORY_SEGMENT\n"; +static const char *gA2lMemorySegment = +#ifdef XCP_ENABLE_CAL_PAGE + // 2 calibration pages, 0=working page (RAM), 1=initial readonly page (FLASH), independent access to ECU and XCP page possible using GET/SET_CAL_PAGE + // DATA = program data allowed for online calibration + "/begin MEMORY_SEGMENT %s \"\" DATA FLASH INTERN 0x%08X %u -1 -1 -1 -1 -1\n" // name, start addr, size + "/begin IF_DATA XCP\n" + " /begin SEGMENT %u 2 0 0 0\n" // index + " /begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION \"\" /end CHECKSUM\n" + " /begin PAGE 0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_DONT_CARE /end PAGE\n" + " /begin PAGE 1 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_NOT_ALLOWED /end PAGE\n" + " /end SEGMENT\n" + "/end IF_DATA\n" +#else + // 1 calibration page + "/begin MEMORY_SEGMENT %s \"\" DATA RAM INTERN 0x%08X %u -1 -1 -1 -1 -1\n" // name, start addr, size + "/begin IF_DATA XCP\n" + " /begin SEGMENT %u 1 0 0 0\n" // index + " /begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION \"\" /end CHECKSUM\n" + " /begin PAGE 0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_WITH_ECU_ONLY XCP_WRITE_ACCESS_WITH_ECU_ONLY /end PAGE\n" + " /end SEGMENT\n" + "/end IF_DATA\n" +#endif +#ifdef OPTION_CAL_SEGMENTS_ABS + "/begin IF_DATA CANAPE_ADDRESS_UPDATE\n" + "/begin MEMORY_SEGMENT \"%s\" FIRST \"%s\" 0 LAST \"%s\" %u /end MEMORY_SEGMENT\n" + "/end IF_DATA\n" #endif + "/end MEMORY_SEGMENT\n"; #endif @@ -145,7 +164,10 @@ static const char *gA2lIfDataProtocolLayer = // Parameter: XCP_PROTOCOL_LAYER_VE #ifdef XCP_ENABLE_CAL_PAGE "OPTIONAL_CMD GET_CAL_PAGE\n" "OPTIONAL_CMD SET_CAL_PAGE\n" +#ifdef XCP_ENABLE_COPY_CAL_PAGE "OPTIONAL_CMD COPY_CAL_PAGE\n" +#endif +#endif // XCP_ENABLE_CAL_PAGE #ifdef XCP_ENABLE_CALSEG_LIST "OPTIONAL_CMD GET_PAG_PROCESSOR_INFO\n" "OPTIONAL_CMD GET_SEGMENT_INFO\n" @@ -155,7 +177,6 @@ static const char *gA2lIfDataProtocolLayer = // Parameter: XCP_PROTOCOL_LAYER_VE "OPTIONAL_CMD SET_SEGMENT_MODE\n" #endif // XCP_ENABLE_FREEZE_CAL_PAGE #endif // XCP_ENABLE_CALSEG_LIST -#endif // XCP_ENABLE_CAL_PAGE #ifdef XCP_ENABLE_CHECKSUM "OPTIONAL_CMD BUILD_CHECKSUM\n" #endif @@ -211,14 +232,14 @@ static const char *gA2lIfDataProtocolLayer = // Parameter: XCP_PROTOCOL_LAYER_VE //---------------------------------------------------------------------------------- static const char *gA2lIfDataBeginDAQ = // Parameter: %u max event, %s timestamp unit "/begin DAQ\n" - "DYNAMIC 0 %u 0 OPTIMISATION_TYPE_DEFAULT ADDRESS_EXTENSION_FREE IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE 0xF8 OVERLOAD_INDICATION_PID\n" - "/begin TIMESTAMP_SUPPORTED\n" - "0x1 SIZE_DWORD %s TIMESTAMP_FIXED\n" - "/end TIMESTAMP_SUPPORTED\n"; + "DYNAMIC 0 %u 0 OPTIMISATION_TYPE_DEFAULT ADDRESS_EXTENSION_FREE IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE 0xF8 OVERLOAD_INDICATION_PID" +#ifdef XCP_ENABLE_DAQ_PRESCALER + " PRESCALER_SUPPORTED" +#endif + "\n/begin TIMESTAMP_SUPPORTED 0x1 SIZE_DWORD %s TIMESTAMP_FIXED /end TIMESTAMP_SUPPORTED\n"; // ... Event list follows, before EndDaq -//---------------------------------------------------------------------------------- static const char *const gA2lIfDataEndDAQ = "/end DAQ\n"; //---------------------------------------------------------------------------------- @@ -424,26 +445,47 @@ static double getTypeMax(tA2lTypeId type) { return max; } -static bool A2lOpen(const char *filename, const char *projectname) { - - assert(!gA2lFileFinalized); +// Start A2L file generation +// Filename gA2lFilename +static bool A2lOpen(void) { gA2lFile = NULL; gA2lTypedefsFile = NULL; - gA2lFixedEvent = XCP_UNDEFINED_EVENT_ID; + gA2lGroupsFile = NULL; + gA2lConversionsFile = NULL; + + A2lRstAddrMode(); + gA2lMeasurements = gA2lParameters = gA2lTypedefs = gA2lInstances = gA2lConversions = gA2lComponents = 0; - gA2lFile = fopen(filename, "w"); + + // Start A2L generator + DBG_PRINTF3("Start A2L generator, file=%s, write_always=%u, finalize_on_connect=%u, auto_groups=%u\n", gA2lFilename, gA2lWriteAlways, gA2lFinalizeOnConnect, gA2lAutoGroups); + if (fexists(gA2lFilename)) { + DBG_PRINTF_WARNING("A2L filename %s already exists!\n", gA2lFilename); + } + gA2lFile = fopen(gA2lFilename, "w"); gA2lTypedefsFile = fopen("typedefs.a2l", "w"); gA2lGroupsFile = fopen("groups.a2l", "w"); gA2lConversionsFile = fopen("conversions.a2l", "w"); - if (gA2lFile == 0 || gA2lTypedefsFile == 0 || gA2lGroupsFile == 0 || gA2lConversionsFile == 0) { DBG_PRINT_ERROR("Could not create A2L file!\n"); return false; } // Create headers - fprintf(gA2lFile, gA2lHeader, projectname, projectname); // main file + fprintf(gA2lFile, gA2lHeader1, XcpGetProjectName(), XcpGetProjectName()); +#ifdef INCLUDE_AML_FILES + // To include multiple AML files, remove the /begin A2ML and /end A2LM in the XCP_104.aml and CANape.aml files and uncomment the following lines + // fprintf(gA2lFile,"/begin A2ML\n" + // "/include \"XCP_104.aml\"\n\n" + // "/include \"CANape.aml\"\n\n" + // "/end A2ML\n"); + fprintf(gA2lFile, "/include \"XCP_104.aml\"\n\n"); +#endif +#ifdef EMBED_AML_FILES + fprintf(gA2lFile, gA2lAml); // main file +#endif + fprintf(gA2lFile, "%s", gA2lHeader2); fprintf(gA2lTypedefsFile, "\n/* Typedefs */\n"); // typedefs temporary file fprintf(gA2lGroupsFile, "\n/* Groups */\n"); // groups temporary file @@ -495,29 +537,21 @@ static void A2lCreate_MOD_PAR(void) { const char *epk = XcpGetEpk(); if (epk) { fprintf(gA2lFile, "EPK \"%s\" ADDR_EPK 0x%08X\n", epk, XCP_ADDR_EPK); - - // EPK memory segment is segment 0 -#ifdef XCP_ENABLE_CALSEG_LIST -#ifdef XCP_ENABLE_EPK_CALSEG - fprintf(gA2lFile, gA2lEpkMemorySegment, XCP_ADDR_EPK, strlen(epk)); -#endif -#endif // XCP_ENABLE_CALSEG_LIST } // Memory segments #ifdef XCP_ENABLE_CALSEG_LIST - tXcpCalSegList const *calSegList = XcpGetCalSegList(); - if (calSegList != NULL && calSegList->count > 0) { - for (tXcpCalSegIndex i = 0; i < calSegList->count; i++) { - tXcpCalSeg const *calseg = &calSegList->calseg[i]; - fprintf(gA2lFile, gA2lMemorySegment, calseg->name, XcpGetCalSegBaseAddress(i), calseg->size, -#ifdef XCP_ENABLE_EPK_CALSEG - i + 1 + const tXcpCalSegList *calSegList = XcpGetCalSegList(); + if (calSegList != NULL && +#ifdef OPTION_CAL_SEGMENT_EPK // Don't create calseg the EPK segment if it is the only one + calSegList->count > 1) #else - i + calSegList->count > 0) #endif - - ); + { + for (tXcpCalSegIndex i = 0; i < calSegList->count; i++) { + const tXcpCalSeg *calseg = &calSegList->calseg[i]; + fprintf(gA2lFile, gA2lMemorySegment, calseg->name, XcpGetCalSegBaseAddress(i), calseg->size, i, calseg->name, calseg->name, calseg->name, calseg->size); } } #endif // XCP_ENABLE_CALSEG_LIST @@ -550,29 +584,23 @@ static void A2lCreate_IF_DATA_DAQ(void) { fprintf(gA2lFile, gA2lIfDataBeginDAQ, eventCount, XCP_TIMESTAMP_UNIT_S); // Eventlist - #if defined(XCP_ENABLE_DAQ_EVENT_LIST) for (uint32_t id = 0; id < eventCount; id++) { tXcpEvent *event = &eventList->event[id]; - uint16_t index = event->index; - const char *name = event->name; - // Convert cycle time to ASAM coding time cycle and time unit + // Convert cycle time to ASAM XCP IF_DATA coding time cycle and time unit // RESOLUTION OF TIMESTAMP "UNIT_1NS" = 0, "UNIT_10NS" = 1, ... - uint8_t timeUnit = 0; // timeCycle unit, 1ns=0, 10ns=1, 100ns=2, 1us=3, ..., 1ms=6, ... - uint8_t timeCycle; // cycle time in units, 0 = sporadic or unknown - uint32_t c = event->cycleTimeNs; - while (c >= 256) { - c /= 10; + uint8_t timeUnit = 0; // timeCycle unit, 1ns=0, 10ns=1, 100ns=2, 1us=3, ..., 1ms=6, ... + uint32_t timeCycle = event->cycleTimeNs; // cycle time in units, 0 = sporadic or unknown + while (timeCycle >= 256) { + timeCycle /= 10; timeUnit++; } - timeCycle = (uint8_t)c; - if (index == 0) { - fprintf(gA2lFile, "/begin EVENT \"%s\" \"%s\" 0x%X DAQ 0xFF %u %u %u CONSISTENCY EVENT", name, name, id, timeCycle, timeUnit, event->priority); - } else { - fprintf(gA2lFile, "/begin EVENT \"%s_%u\" \"%s_%u\" 0x%X DAQ 0xFF %u %u %u CONSISTENCY EVENT", name, index, name, index, id, timeCycle, timeUnit, event->priority); - } + // @@@@ TODO: Clarify + // Short event names (the second name) must not be unique, but <= 8 characters ? + fprintf(gA2lFile, "/begin EVENT \"%s\" \"%.8s\" 0x%X DAQ 0xFF %u %u %u CONSISTENCY EVENT", XcpGetEventName(id), XcpGetEventName(id), id, timeCycle, timeUnit, + event->priority); fprintf(gA2lFile, " /end EVENT\n"); } @@ -614,9 +642,11 @@ static void A2lCreate_ETH_IF_DATA(bool useTCP, const uint8_t *addr, uint16_t por static void A2lCreateMeasurement_IF_DATA(void) { if (gA2lFile != NULL) { - if (XcpAddrIsDyn(gAl2AddrExt) + + uint8_t addr_ext = A2lGetAddrExt_(); + if (XcpAddrIsDyn(addr_ext) #ifdef XCP_ENABLE_REL_ADDRESSING - || XcpAddrIsRel(gAl2AddrExt) + || XcpAddrIsRel(addr_ext) #endif ) { @@ -625,7 +655,7 @@ static void A2lCreateMeasurement_IF_DATA(void) { } else { assert(false); // Fixed event must be set before calling this function } - } else if (XcpAddrIsAbs(gAl2AddrExt)) { + } else if (XcpAddrIsAbs(addr_ext)) { if (gA2lFixedEvent != XCP_UNDEFINED_EVENT_ID) { fprintf(gA2lFile, " /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x%X /end DAQ_EVENT /end IF_DATA", gA2lFixedEvent); } else if (gA2lDefaultEvent != XCP_UNDEFINED_EVENT_ID) { @@ -644,8 +674,8 @@ static void A2lCreateMeasurement_IF_DATA(void) { #if defined(XCP_ENABLE_CALSEG_LIST) void A2lSetSegAddrMode(tXcpCalSegIndex calseg_index, const uint8_t *calseg_instance_addr) { gA2lAddrIndex = calseg_index; - gA2lAddrBase = calseg_instance_addr; // Address of the calibration segment instance which is used in the macros to create the components - gAl2AddrExt = XCP_ADDR_EXT_SEG; + gA2lBasePtr = calseg_instance_addr; // Address of the calibration segment instance which is used in the macros to create the components + gA2lAddrExt = XCP_ADDR_EXT_SEG; } #endif @@ -654,37 +684,54 @@ void A2lSetSegAddrMode(tXcpCalSegIndex calseg_index, const uint8_t *calseg_insta void A2lSetAbsAddrMode(tXcpEventId default_event_id) { gA2lFixedEvent = XCP_UNDEFINED_EVENT_ID; gA2lDefaultEvent = default_event_id; // May be XCP_UNDEFINED_EVENT_ID - gAl2AddrExt = XCP_ADDR_EXT_ABS; + gA2lFramePtr = NULL; + gA2lBasePtr = NULL; + gA2lAddrExt = XCP_ADDR_EXT_ABS; } // Relative addressing mode // Used for accessing stack variables relative to the stack frame pointer #ifdef XCP_ENABLE_REL_ADDRESSING -void A2lSetRelAddrMode(tXcpEventId event_id, const uint8_t *base) { - gA2lAddrBase = base; +void A2lSetRelAddrMode(tXcpEventId event_id, const uint8_t *base_ptr) { + gA2lBasePtr = base_ptr; + gA2lFramePtr = NULL; gA2lFixedEvent = event_id; gA2lDefaultEvent = XCP_UNDEFINED_EVENT_ID; - gAl2AddrExt = XCP_ADDR_EXT_REL; + gA2lAddrExt = XCP_ADDR_EXT_REL; } #endif // Dynamic addressing mode // Relative address, used for heap and class members // Enables XCP polling access -void A2lSetDynAddrMode(tXcpEventId event_id, uint8_t i, const uint8_t *base) { - gA2lAddrBase = base; +void A2lSetDynAddrMode(tXcpEventId event_id, uint8_t i, const uint8_t *base_ptr) { + gA2lBasePtr = base_ptr; + gA2lFramePtr = NULL; gA2lFixedEvent = event_id; gA2lDefaultEvent = XCP_UNDEFINED_EVENT_ID; - gAl2AddrExt = XCP_ADDR_EXT_DYN + i; - assert(gAl2AddrExt <= XCP_ADDR_EXT_DYN_MAX); + gA2lAddrExt = XCP_ADDR_EXT_DYN + i; + assert(gA2lAddrExt <= XCP_ADDR_EXT_DYN_MAX); +} + +// Automatic addressing mode +// A2lGetAddr and A2lGetAddrExt will determine the addressing mode at runtime +// Based on heuristic whether the variable address is within the stack frame or not +void A2lSetAutoAddrMode(tXcpEventId event_id, const uint8_t *frame_ptr, const uint8_t *base_ptr) { + gA2lFramePtr = frame_ptr; + gA2lBasePtr = base_ptr; + gA2lFixedEvent = event_id; + gA2lDefaultEvent = XCP_UNDEFINED_EVENT_ID; + gA2lAddrExt = XCP_UNDEFINED_ADDR_EXT; // Auto } void A2lRstAddrMode(void) { gA2lFixedEvent = XCP_UNDEFINED_EVENT_ID; gA2lDefaultEvent = XCP_UNDEFINED_EVENT_ID; - gA2lAddrBase = NULL; + gA2lFramePtr = NULL; + gA2lBasePtr = NULL; gA2lAddrIndex = 0; - gAl2AddrExt = XCP_UNDEFINED_ADDR_EXT; + gA2lAddrExt = XCP_ADDR_EXT_ABS; + gA2lAutoAddrExt = XCP_UNDEFINED_ADDR_EXT; } //---------------------------------------------------------------------------------- @@ -700,10 +747,13 @@ void A2lSetSegmentAddrMode__i(tXcpCalSegIndex calseg_index, const uint8_t *calse DBG_PRINTF_ERROR("SetSegAddrMode: Calibration segment %u not found!\n", calseg_index); return; } - +#if XCP_ADDR_EXT_SEG == 0x00 A2lSetSegAddrMode(calseg_index, (const uint8_t *)calseg_instance_addr); fprintf(gA2lFile, "\n/* Segment relative addressing mode: calseg=%s */\n", calseg->name); - +#else + A2lSetAbsAddrMode(XCP_UNDEFINED_EVENT_ID); + fprintf(gA2lFile, "\n/* Absolute segment addressing mode: calseg=%s */\n", calseg->name); +#endif if (gA2lAutoGroups) { A2lBeginGroup(calseg->name, "Calibration Segment", true); } @@ -712,24 +762,27 @@ void A2lSetSegmentAddrMode__i(tXcpCalSegIndex calseg_index, const uint8_t *calse // Set segment relative address mode with calibration segment name void A2lSetSegmentAddrMode__s(const char *calseg_name, const uint8_t *calseg_instance_addr) { - - tXcpCalSegIndex calseg_index = XcpFindCalSeg(calseg_name); - if (calseg_index == XCP_UNDEFINED_CALSEG) { - DBG_PRINTF_ERROR("SetSegAddrMode: Calibration segment %s not found!\n", calseg_name); - return; - } - const tXcpCalSeg *calseg = XcpGetCalSeg(calseg_index); - if (calseg == NULL) { - DBG_PRINTF_ERROR("SetSegAddrMode: Calibration segment %u not found!\n", calseg_index); - return; - } - - A2lSetSegAddrMode(calseg_index, (const uint8_t *)calseg_instance_addr); - if (gA2lFile != NULL) + if (gA2lFile != NULL) { + tXcpCalSegIndex calseg_index = XcpFindCalSeg(calseg_name); + if (calseg_index == XCP_UNDEFINED_CALSEG) { + DBG_PRINTF_ERROR("SetSegAddrMode: Calibration segment %s not found!\n", calseg_name); + return; + } + const tXcpCalSeg *calseg = XcpGetCalSeg(calseg_index); + if (calseg == NULL) { + DBG_PRINTF_ERROR("SetSegAddrMode: Calibration segment %u not found!\n", calseg_index); + return; + } +#if XCP_ADDR_EXT_SEG == 0x00 + A2lSetSegAddrMode(calseg_index, (const uint8_t *)calseg_instance_addr); fprintf(gA2lFile, "\n/* Segment relative addressing mode: calseg=%s */\n", calseg->name); - - if (gA2lAutoGroups) { - A2lBeginGroup(calseg->name, "Calibration Segment", true); +#else + A2lSetAbsAddrMode(XCP_UNDEFINED_EVENT_ID); + fprintf(gA2lFile, "\n/* Absolute segment addressing mode: calseg=%s */\n", calseg->name); +#endif + if (gA2lAutoGroups) { + A2lBeginGroup(calseg->name, "Calibration Segment", true); + } } } @@ -739,28 +792,40 @@ void A2lSetSegmentAddrMode__s(const char *calseg_name, const uint8_t *calseg_ins static void beginEventGroup(tXcpEventId event_id) { if (gA2lAutoGroups) { + A2lBeginGroup(XcpGetEventName(event_id), "Measurement event group", false); + } +} + +// Set autodetect address mode with event name or event id +// Will result in using (ADDR_EXT_DYN+0) with stackframe pointer or (ADDR_EXT_DYN+1) user defined base addresses selected when a variable is created +void A2lSetAutoAddrMode__s(const char *event_name, const uint8_t *stack_frame, const uint8_t *base_addr) { + if (gA2lFile != NULL) { + tXcpEventId event_id = XcpFindEvent(event_name, NULL); + assert(event_id != XCP_UNDEFINED_EVENT_ID); + A2lSetAutoAddrMode(event_id, stack_frame, base_addr); + beginEventGroup(event_id); + fprintf(gA2lFile, "\n/* Auto addressing mode: event=%s (%u) */\n", event_name, event_id); + } +} +void A2lSetAutoAddrMode__i(tXcpEventId event_id, const uint8_t *stack_frame, const uint8_t *base_addr) { + if (gA2lFile != NULL) { const char *event_name = XcpGetEventName(event_id); - if (XcpGetEventIndex(event_id) == 0) { - // Use the event name as group name if the event index is 0 - A2lBeginGroup(event_name, "Measurement event group", false); - } else { - // Use the event name with index as group name if the event index is not 0 - char group_name[64]; - SNPRINTF(group_name, sizeof(group_name), "%s_%u", event_name, XcpGetEventIndex(event_id)); - A2lBeginGroup(group_name, "Measurement event group", false); - } + assert(event_name != NULL); + A2lSetAutoAddrMode(event_id, stack_frame, base_addr); + beginEventGroup(event_id); + fprintf(gA2lFile, "\n/* Auto addressing mode: event=%s (%u) */\n", event_name, event_id); } } // Set relative address mode with event name or event id -// Will result in using ADDR_EXT_DYN for user defined base, ADDR_EXT_REL is used for stack frame relative addressing +// Will result in using (ADDR_EXT_DYN+i) with user defined base addresses void A2lSetRelativeAddrMode__s(const char *event_name, uint8_t i, const uint8_t *base_addr) { if (gA2lFile != NULL) { tXcpEventId event_id = XcpFindEvent(event_name, NULL); assert(event_id != XCP_UNDEFINED_EVENT_ID); A2lSetDynAddrMode(event_id, i, (uint8_t *)base_addr); beginEventGroup(event_id); - fprintf(gA2lFile, "\n/* Relative addressing mode: event=%s (%u), addr_ext=%u */\n", event_name, event_id, gAl2AddrExt); + fprintf(gA2lFile, "\n/* Relative addressing mode: event=%s (%u), addr_ext=%u */\n", event_name, event_id, A2lGetAddrExt_()); } } void A2lSetRelativeAddrMode__i(tXcpEventId event_id, uint8_t i, const uint8_t *base_addr) { @@ -769,19 +834,19 @@ void A2lSetRelativeAddrMode__i(tXcpEventId event_id, uint8_t i, const uint8_t *b assert(event_name != NULL); A2lSetDynAddrMode(event_id, i, (uint8_t *)base_addr); beginEventGroup(event_id); - fprintf(gA2lFile, "\n/* Relative addressing mode: event=%s (%u), addr_ext=%u */\n", event_name, event_id, gAl2AddrExt); + fprintf(gA2lFile, "\n/* Relative addressing mode: event=%s (%u), addr_ext=%u */\n", event_name, event_id, A2lGetAddrExt_()); } } // Set stack frame relative address mode with event name or event id -// Will result in using ADDR_EXT_REL +// Will result in using (ADDR_EXT_DYN+0) with stack frame pointer as base address void A2lSetStackAddrMode__s(const char *event_name, const uint8_t *stack_frame) { if (gA2lFile != NULL) { tXcpEventId event_id = XcpFindEvent(event_name, NULL); assert(event_id != XCP_UNDEFINED_EVENT_ID); A2lSetDynAddrMode(event_id, 0, stack_frame); beginEventGroup(event_id); - fprintf(gA2lFile, "\n/* Stack frame relative addressing mode: event=%s (%u), addr_ext=%u */\n", event_name, event_id, gAl2AddrExt); + fprintf(gA2lFile, "\n/* Stack frame relative addressing mode: event=%s (%u), addr_ext=%u */\n", event_name, event_id, A2lGetAddrExt_()); } } void A2lSetStackAddrMode__i(tXcpEventId event_id, const uint8_t *stack_frame) { @@ -790,7 +855,7 @@ void A2lSetStackAddrMode__i(tXcpEventId event_id, const uint8_t *stack_frame) { assert(event_name != NULL); A2lSetDynAddrMode(event_id, 0, stack_frame); beginEventGroup(event_id); - fprintf(gA2lFile, "\n/* Stack frame relative addressing mode: event=%s (%u), addr_ext=%u */\n", event_name, event_id, gAl2AddrExt); + fprintf(gA2lFile, "\n/* Stack frame relative addressing mode: event=%s (%u), addr_ext=%u */\n", event_name, event_id, A2lGetAddrExt_()); } } @@ -801,7 +866,7 @@ void A2lSetAbsoluteAddrMode__s(const char *event_name) { A2lSetAbsAddrMode(event_id); if (event_id != XCP_UNDEFINED_EVENT_ID) { beginEventGroup(event_id); - fprintf(gA2lFile, "\n/* Absolute addressing mode: default_event=%s (%u), addr_ext=%u */\n", event_name, event_id, gAl2AddrExt); + fprintf(gA2lFile, "\n/* Absolute addressing mode: default_event=%s (%u), addr_ext=%u */\n", event_name, event_id, A2lGetAddrExt_()); } } } @@ -812,35 +877,112 @@ void A2lSetAbsoluteAddrMode__i(tXcpEventId event_id) { A2lSetAbsAddrMode(event_id); if (event_id != XCP_UNDEFINED_EVENT_ID) { beginEventGroup(event_id); - fprintf(gA2lFile, "\n/* Stack frame absolute addressing mode: event=%s (%u), addr_ext=%u */\n", event_name, event_id, gAl2AddrExt); + fprintf(gA2lFile, "\n/* Stack frame absolute addressing mode: event=%s (%u), addr_ext=%u */\n", event_name, event_id, A2lGetAddrExt_()); } } } - #endif //---------------------------------------------------------------------------------- // Address encoding -uint8_t A2lGetAddrExt_(void) { return gAl2AddrExt; } +// Get the current address extension +// Must be called after A2lGetAddr to get the correct address extension in case of auto addressing mode +uint8_t A2lGetAddrExt_(void) { + + if (gA2lAddrExt == XCP_UNDEFINED_ADDR_EXT) { + return gA2lAutoAddrExt; + } + return gA2lAddrExt; +} +// Get encoded address for pointer p according to current address extension +// If auto addressing mode (address extension is undefined) is selected, the addressing extension is detected uint32_t A2lGetAddr_(const void *p) { if (gA2lFile != NULL) { - if (XcpAddrIsAbs(gAl2AddrExt)) { + if (gA2lAddrExt == XCP_UNDEFINED_ADDR_EXT) { + uint64_t addr_diff = 0; + const uint8_t *base_ptr = NULL; + // If both base pointers are set, auto detect appropriate base pointer and addressing mode + if (gA2lBasePtr != NULL && gA2lFramePtr != NULL) { + uint64_t addr_diff1 = (uint64_t)p - (uint64_t)gA2lBasePtr; + uint64_t addr_high1 = (addr_diff1 >> 16); + uint64_t addr_diff2 = (uint64_t)p - (uint64_t)gA2lFramePtr; + uint64_t addr_high2 = (addr_diff2 >> 16); + DBG_PRINTF5("A2L auto dyn address mode: addr=%p, base1=%p, diff1=%llX, base2=%p, diff2=%llX\n", p, (void *)gA2lBasePtr, (unsigned long long)addr_diff1, + (void *)gA2lFramePtr, (unsigned long long)addr_diff2); + // Prefer positive this, then negative stack, then positive stack + // Positive base (heap or this relative) + if (addr_high1 == 0) { + base_ptr = gA2lBasePtr; + addr_diff = addr_diff1; + gA2lAutoAddrExt = XCP_ADDR_EXT_DYN + 1; // Use base pointer addressing mode with index 1 + DBG_PRINT5("Positive base selected\n"); + } + // Negative stack (local variables) + else if (addr_high2 == 0xFFFFFFFFFFFF) { + base_ptr = gA2lFramePtr; + addr_diff = addr_diff2; + gA2lAutoAddrExt = XCP_ADDR_EXT_DYN; // Use frame pointer addressing mode + DBG_PRINT5("Negative stack selected\n"); + } + // Positive stack (function parameters) + else if (addr_high2 == 0) { + base_ptr = gA2lFramePtr; + addr_diff = addr_diff2; + gA2lAutoAddrExt = XCP_ADDR_EXT_DYN; // Use frame pointer addressing mode + DBG_PRINT5("Positive stack selected\n"); + } + // Negative base + else if (addr_high1 == 0xFFFFFFFFFFFF) { + DBG_PRINTF_ERROR("A2L dyn address overflow detected! negative base offset, addr: %p, base1: %p, base2: %p\n", p, (void *)gA2lBasePtr, (void *)gA2lFramePtr); + assert(0); + return 0; + } + // Overflow + else { + DBG_PRINTF_ERROR("A2L dyn address overflow detected! addr: %p, base1: %p, base2: %p\n", p, (void *)gA2lBasePtr, (void *)gA2lFramePtr); + assert(0); + return 0; + } + } + // If only the frame pointer is set, use it as base pointer + else if (gA2lFramePtr != NULL) { + base_ptr = gA2lFramePtr; + } + // If only the base pointer is set, use it + else if (gA2lBasePtr != NULL) { + base_ptr = gA2lBasePtr; + } + + if (base_ptr != NULL) { + addr_diff = (uint64_t)p - (uint64_t)base_ptr; + // Ensure the address difference does not overflow the value range for signed int16_t + uint64_t addr_high = (addr_diff >> 16); + if (addr_high != 0 && addr_high != 0xFFFFFFFFFFFF) { + DBG_PRINTF_ERROR("A2L dyn address overflow detected! addr: %p, base: %p\n", p, (void *)base_ptr); + assert(0); + return 0; + } + } + return XcpAddrEncodeDyn(addr_diff, gA2lFixedEvent); + } + + else if (XcpAddrIsAbs(gA2lAddrExt)) { return XcpAddrEncodeAbs(p); } #ifdef XCP_ENABLE_REL_ADDRESSING - else if (XcpAddrIsRel(gAl2AddrExt)) { + else if (XcpAddrIsRel(gA2lAddrExt)) { uint64_t addr_diff = 0; - if (gA2lAddrBase != NULL) { - addr_diff = (uint64_t)p - (uint64_t)gA2lAddrBase; + if (gA2lBasePtr != NULL) { + addr_diff = (uint64_t)p - (uint64_t)gA2lBasePtr; // Ensure the address difference does not overflow the value range for signed int32_t uint64_t addr_high = (addr_diff >> 32); if (addr_high != 0 && addr_high != 0xFFFFFFFF) { - DBG_PRINTF_ERROR("A2L rel address overflow detected! addr: %p, base: %p\n", p, (void *)gA2lAddrBase); + DBG_PRINTF_ERROR("A2L rel address overflow detected! addr: %p, base: %p\n", p, (void *)gA2lBasePtr); assert(0); return 0; } @@ -848,28 +990,31 @@ uint32_t A2lGetAddr_(const void *p) { return XcpAddrEncodeRel(addr_diff); } #endif - else if (XcpAddrIsDyn(gAl2AddrExt)) { + + else if (XcpAddrIsDyn(gA2lAddrExt)) { uint64_t addr_diff = 0; - if (gA2lAddrBase != NULL) { - addr_diff = (uint64_t)p - (uint64_t)gA2lAddrBase; + if (gA2lBasePtr != NULL) { + addr_diff = (uint64_t)p - (uint64_t)gA2lBasePtr; // Ensure the address difference does not overflow the value range for signed int16_t uint64_t addr_high = (addr_diff >> 16); if (addr_high != 0 && addr_high != 0xFFFFFFFFFFFF) { - DBG_PRINTF_ERROR("A2L dyn address overflow detected! addr: %p, base: %p\n", p, (void *)gA2lAddrBase); + DBG_PRINTF_ERROR("A2L dyn address overflow detected! addr: %p, base: %p\n", p, (void *)gA2lBasePtr); assert(0); return 0; } } return XcpAddrEncodeDyn(addr_diff, gA2lFixedEvent); - } else + } + + else #ifdef XCP_ENABLE_CALSEG_LIST - if (XcpAddrIsSeg(gAl2AddrExt)) { + if (XcpAddrIsSeg(gA2lAddrExt)) { uint64_t addr_diff = 0; - if (gA2lAddrBase != NULL) { - addr_diff = (uint64_t)p - (uint64_t)gA2lAddrBase; + if (gA2lBasePtr != NULL) { + addr_diff = (uint64_t)p - (uint64_t)gA2lBasePtr; // Ensure the relative address does not overflow the 16 Bit A2L address offset for calibration segment relative addressing if ((addr_diff >> 16) != 0) { - DBG_PRINTF_ERROR("A2L seg relative address overflow detected! addr: %p, base: %p\n", p, (void *)gA2lAddrBase); + DBG_PRINTF_ERROR("A2L seg relative address overflow detected! addr: %p, base: %p\n", p, (void *)gA2lBasePtr); assert(0); return 0; } @@ -878,7 +1023,7 @@ uint32_t A2lGetAddr_(const void *p) { } else #endif { - DBG_PRINTF_ERROR("A2L address extension %u is not supported!\n", gAl2AddrExt); + DBG_PRINTF_ERROR("A2L address extension %u is not supported!\n", gA2lAddrExt); } } // if (gA2lFile != NULL) @@ -952,8 +1097,18 @@ const char *A2lCreateEnumConversion_(const char *name, const char *enum_descript // Typedefs // Begin a typedef structure -void A2lTypedefBegin_(const char *name, uint32_t size, const char *comment) { +void A2lTypedefBegin_(const char *name, uint32_t size, const char *format, ...) { if (gA2lFile != NULL) { + + // Format the comment string + char comment[256]; + va_list args; + va_start(args, format); + vsnprintf(comment, sizeof(comment), format, args); + va_end(args); + + DBG_PRINTF4("A2lTypedefBegin_: %s, size=%u, comment='%s'\n", name, size, comment); + fprintf(gA2lFile, "\n/begin TYPEDEF_STRUCTURE %s \"%s\" 0x%X\n", name, comment, size); gA2lTypedefs++; } @@ -962,6 +1117,7 @@ void A2lTypedefBegin_(const char *name, uint32_t size, const char *comment) { // End a typedef structure void A2lTypedefEnd_(void) { if (gA2lFile != NULL) { + DBG_PRINT4("A2lTypedefEnd_\n"); fprintf(gA2lFile, "/end TYPEDEF_STRUCTURE\n"); } } @@ -970,6 +1126,7 @@ void A2lTypedefEnd_(void) { // type_name is the name of another typedef, typedef_measurement or typedef_characteristic void A2lTypedefComponent_(const char *name, const char *type_name, uint16_t x_dim, uint32_t offset) { if (gA2lFile != NULL) { + DBG_PRINTF4("A2lTypedefComponent_: %s, %s, x_dim=%u, offset=0x%X\n", name, type_name, x_dim, offset); fprintf(gA2lFile, " /begin STRUCTURE_COMPONENT %s %s 0x%X", name, type_name, offset); if (x_dim > 1) fprintf(gA2lFile, " MATRIX_DIM %u", x_dim); @@ -979,8 +1136,11 @@ void A2lTypedefComponent_(const char *name, const char *type_name, uint16_t x_di } // For measurement components with TYPEDEF_MEASUREMENT for fields with comment, unit, min, max -void A2lTypedefMeasurementComponent_(const char *name, const char *type_name, uint32_t offset, const char *comment, const char *unit_or_conversion, double min, double max) { +void A2lTypedefMeasurementComponent_(const char *name, const char *type_name, uint16_t x_dim, uint32_t offset, const char *comment, const char *unit_or_conversion, double min, + double max) { if (gA2lFile != NULL) { + DBG_PRINTF4("A2lTypedefMeasurementComponent_: %s, %s, x_dim=%u, offset=0x%X\n", name, type_name, x_dim, offset); + // TYPEDEF_MEASUREMENT const char *conv = getConversion(unit_or_conversion, NULL, NULL); assert(gA2lTypedefsFile != NULL); @@ -989,8 +1149,10 @@ void A2lTypedefMeasurementComponent_(const char *name, const char *type_name, ui fprintf(gA2lTypedefsFile, " /end TYPEDEF_MEASUREMENT\n"); // STRUCTURE_COMPONENT - fprintf(gA2lFile, " /begin STRUCTURE_COMPONENT %s M_%s 0x%X /end STRUCTURE_COMPONENT\n", name, name, offset); - + fprintf(gA2lFile, " /begin STRUCTURE_COMPONENT %s M_%s 0x%X", name, name, offset); + if (x_dim > 1) + fprintf(gA2lFile, " MATRIX_DIM %u", x_dim); + fprintf(gA2lFile, " /end STRUCTURE_COMPONENT\n"); gA2lComponents++; } } @@ -999,8 +1161,7 @@ void A2lTypedefMeasurementComponent_(const char *name, const char *type_name, ui void A2lTypedefParameterComponent_(const char *name, const char *type_name, uint16_t x_dim, uint16_t y_dim, uint32_t offset, const char *comment, const char *unit_or_conversion, double min, double max, const char *x_axis, const char *y_axis) { if (gA2lFile != NULL) { - - assert(gA2lTypedefsFile != NULL); + DBG_PRINTF4("A2lTypedefParameterComponent_: %s, %s, x_dim=%u, y_dim=%u, offset=0x%X\n", name, type_name, x_dim, y_dim, offset); // TYPEDEF_AXIS (y_dim==0) if (y_dim == 0 && x_dim > 1) { @@ -1055,31 +1216,26 @@ void A2lTypedefParameterComponent_(const char *name, const char *type_name, uint } } -void A2lCreateTypedefMeasurementInstance_(const char *instance_name, const char *typeName, uint16_t x_dim, uint8_t ext, uint32_t addr, const char *comment) { +void A2lCreateTypedefInstance_(const char *instance_name, const char *typeName, uint16_t x_dim, uint32_t addr, uint8_t ext, const char *comment) { if (gA2lFile != NULL) { + DBG_PRINTF4("A2lCreateTypedefInstance_: %s, \"%s\", %s, 0x%X\n", instance_name, comment, typeName, addr); + if (gA2lAutoGroups) { A2lAddToGroup(instance_name); } fprintf(gA2lFile, "/begin INSTANCE %s \"%s\" %s 0x%X", instance_name, comment, typeName, addr); printAddrExt(ext); - if (x_dim > 1) + + // For measurements only: add MATRIX_DIM, READ_WRITE and IF_DATAif applicable + if (x_dim > 1) { // Array of instance fprintf(gA2lFile, " MATRIX_DIM %u", x_dim); - if (XcpAddrIsAbs(gAl2AddrExt) || XcpAddrIsDyn(gAl2AddrExt)) { // Absolute and dynamic mode allows write access + } + uint8_t addr_ext = A2lGetAddrExt_(); + if (XcpAddrIsAbs(addr_ext) || XcpAddrIsDyn(addr_ext)) { // Measurements in absolute and dynamic mode allows write access fprintf(gA2lFile, " READ_WRITE"); } - A2lCreateMeasurement_IF_DATA(); - fprintf(gA2lFile, " /end INSTANCE\n"); - gA2lInstances++; - } -} + A2lCreateMeasurement_IF_DATA(); // Create event definition for measurements -void A2lCreateTypedefParameterInstance_(const char *instance_name, const char *typeName, uint8_t ext, uint32_t addr, const char *comment) { - if (gA2lFile != NULL) { - if (gA2lAutoGroups) { - A2lAddToGroup(instance_name); - } - fprintf(gA2lFile, "/begin INSTANCE %s \"%s\" %s 0x%X", instance_name, comment, typeName, addr); - printAddrExt(ext); fprintf(gA2lFile, " /end INSTANCE\n"); gA2lInstances++; } @@ -1088,7 +1244,7 @@ void A2lCreateTypedefParameterInstance_(const char *instance_name, const char *t //---------------------------------------------------------------------------------- // Measurements -void A2lCreateMeasurement_(const char *instance_name, const char *name, tA2lTypeId type, uint8_t ext, uint32_t addr, const char *unit_or_conversion, double phys_min, +void A2lCreateMeasurement_(const char *instance_name, const char *name, tA2lTypeId type, uint32_t addr, uint8_t ext, const char *unit_or_conversion, double phys_min, double phys_max, const char *comment) { if (gA2lFile != NULL) { @@ -1113,7 +1269,8 @@ void A2lCreateMeasurement_(const char *instance_name, const char *name, tA2lType fprintf(gA2lFile, "/begin MEASUREMENT %s \"%s\" %s %s 0 0 %g %g ECU_ADDRESS 0x%X", symbol_name, comment, A2lGetA2lTypeName(type), conv, min, max, addr); printAddrExt(ext); printPhysUnit(gA2lFile, unit_or_conversion); - if (XcpAddrIsAbs(gAl2AddrExt) || XcpAddrIsDyn(gAl2AddrExt)) { // Absolute and dynamic mode allows write access + uint8_t addr_ext = A2lGetAddrExt_(); + if (XcpAddrIsAbs(addr_ext) || XcpAddrIsDyn(addr_ext)) { // Absolute and dynamic mode allows write access fprintf(gA2lFile, " READ_WRITE"); } A2lCreateMeasurement_IF_DATA(); @@ -1122,7 +1279,7 @@ void A2lCreateMeasurement_(const char *instance_name, const char *name, tA2lType } } -void A2lCreateMeasurementArray_(const char *instance_name, const char *name, tA2lTypeId type, int x_dim, int y_dim, uint8_t ext, uint32_t addr, const char *unit_or_conversion, +void A2lCreateMeasurementArray_(const char *instance_name, const char *name, tA2lTypeId type, int x_dim, int y_dim, uint32_t addr, uint8_t ext, const char *unit_or_conversion, double phys_min, double phys_max, const char *comment) { if (gA2lFile != NULL) { const char *symbol_name = A2lGetSymbolName(instance_name, name); @@ -1154,7 +1311,7 @@ void A2lCreateMeasurementArray_(const char *instance_name, const char *name, tA2 //---------------------------------------------------------------------------------- // Parameters -void A2lCreateParameter_(const char *name, tA2lTypeId type, uint8_t ext, uint32_t addr, const char *comment, const char *unit_or_conversion, double phys_min, double phys_max) { +void A2lCreateParameter_(const char *name, tA2lTypeId type, uint32_t addr, uint8_t ext, const char *comment, const char *unit_or_conversion, double phys_min, double phys_max) { if (gA2lFile != NULL) { if (gA2lAutoGroups) { @@ -1180,7 +1337,7 @@ void A2lCreateParameter_(const char *name, tA2lTypeId type, uint8_t ext, uint32_ } } -void A2lCreateMap_(const char *name, tA2lTypeId type, uint8_t ext, uint32_t addr, uint32_t xdim, uint32_t ydim, const char *comment, const char *unit, double min, double max, +void A2lCreateMap_(const char *name, tA2lTypeId type, uint32_t addr, uint8_t ext, uint32_t xdim, uint32_t ydim, const char *comment, const char *unit, double min, double max, const char *x_axis, const char *y_axis) { if (gA2lFile != NULL) { @@ -1206,7 +1363,7 @@ void A2lCreateMap_(const char *name, tA2lTypeId type, uint8_t ext, uint32_t addr } } -void A2lCreateCurve_(const char *name, tA2lTypeId type, uint8_t ext, uint32_t addr, uint32_t xdim, const char *comment, const char *unit, double min, double max, +void A2lCreateCurve_(const char *name, tA2lTypeId type, uint32_t addr, uint8_t ext, uint32_t xdim, const char *comment, const char *unit, double min, double max, const char *x_axis) { if (gA2lFile != NULL) { @@ -1228,7 +1385,7 @@ void A2lCreateCurve_(const char *name, tA2lTypeId type, uint8_t ext, uint32_t ad } } -void A2lCreateAxis_(const char *name, tA2lTypeId type, uint8_t ext, uint32_t addr, uint32_t xdim, const char *comment, const char *unit, double min, double max) { +void A2lCreateAxis_(const char *name, tA2lTypeId type, uint32_t addr, uint8_t ext, uint32_t xdim, const char *comment, const char *unit, double min, double max) { if (gA2lFile != NULL) { if (gA2lAutoGroups) { @@ -1254,7 +1411,7 @@ void A2lBeginGroup(const char *name, const char *comment, bool is_parameter_grou A2lEndGroup(); // Close previous group if any gA2lAutoGroupName = name; gA2lAutoGroupIsParameter = is_parameter_group; - fprintf(gA2lGroupsFile, "/begin GROUP %s \"%s\"", name, comment); + fprintf(gA2lGroupsFile, "/begin GROUP %s \"%s\" %s", name, comment, is_parameter_group ? "ROOT" : ""); fprintf(gA2lGroupsFile, " /begin REF_%s", gA2lAutoGroupIsParameter ? "CHARACTERISTIC" : "MEASUREMENT"); } } @@ -1351,7 +1508,7 @@ void A2lCreateParameterGroupFromList(const char *name, const char *pNames[], int bool A2lOnce_(A2L_ONCE_TYPE *value) { if (gA2lFile != NULL) { A2L_ONCE_TYPE old_value = 0; - if (atomic_compare_exchange_strong_explicit((A2L_ONCE_ATOMIC_TYPE *)value, &old_value, 1, memory_order_relaxed, memory_order_relaxed)) { + if (atomic_compare_exchange_strong_explicit((A2L_ONCE_ATOMIC_TYPE *)value, &old_value, gA2lOncePass, memory_order_relaxed, memory_order_relaxed)) { return true; // Return true if A2L file is open } } @@ -1384,25 +1541,33 @@ static bool includeFile(FILE **filep, const char *filename) { } // Callback on XCP client tool connect -bool A2lCheckFinalizeOnConnect(void) { +bool A2lCheckFinalizeOnConnect(uint8_t connect_mode) { - // Finalize A2l once on connect - if (gA2lFinalizeOnConnect) { - if (gA2lFileFinalized) { - return true; // A2L file already finalized, allow connect - } else { - return A2lFinalize(); // Finalize A2L file generation - } - } else { + // Finalize A2l once on connect, if A2L generation is active + if (gA2lFinalizeOnConnect && gA2lFile != NULL) { + A2lFinalize(); + } + + // If A2l generation is active, refuse connect + else if (gA2lFile != NULL) { + DBG_PRINT_WARNING("A2L file not finalized yet, XCP connect refused!\n"); + return false; // Refuse connect, waiting for finalization by application + } - // If A2l generation is active, refuse connect - if (gA2lFile != NULL) { - DBG_PRINT_WARNING("A2L file not finalized, XCP connect refused!\n"); - return false; // Refuse connect + // If A2L generation is not active + // Give the client a way to delete A2L and BIN file + else { + if (connect_mode == 0xAA) { + DBG_PRINT_WARNING("Delete A2L and BIN file (connect_mode=0xAA)!\n"); + remove(gA2lFilename); +#ifdef OPTION_CAL_PERSISTENCE + XcpBinDelete(); +#endif + return false; } } - return true; // Do not refuse connect + return true; } // Finalize A2L file generation @@ -1425,21 +1590,20 @@ bool A2lFinalize(void) { fprintf(gA2lConversionsFile, "/begin COMPU_METHOD conv.events \"\" TAB_VERB \"%%.0 \" \"\" COMPU_TAB_REF conv.events.table /end COMPU_METHOD\n"); fprintf(gA2lConversionsFile, "/begin COMPU_VTAB conv.events.table \"\" TAB_VERB %u\n", eventList->count); for (uint32_t id = 0; id < eventList->count; id++) { - tXcpEvent *event = &eventList->event[id]; - fprintf(gA2lConversionsFile, " %u \"%s\"", id, event->name); + fprintf(gA2lConversionsFile, " %u \"%s\"", id, XcpGetEventName(id)); } fprintf(gA2lConversionsFile, "\n/end COMPU_VTAB\n"); // Create a sub group for all events if (gA2lAutoGroups) { fprintf(gA2lGroupsFile, "/begin GROUP Events \"Events\" ROOT /begin SUB_GROUP"); - for (uint32_t id = 0; id < eventList->count; id++) { - tXcpEvent *event = &eventList->event[id]; - uint16_t index = event->index; - const char *name = event->name; - if (index <= 1) { - fprintf(gA2lGroupsFile, " %s", name); - } +#ifdef OPTION_DAQ_ASYNC_EVENT + uint32_t id = 1; // Skip event 0 which is the built-in asynchronous events +#else + uint32_t id = 0; +#endif + for (; id < eventList->count; id++) { + fprintf(gA2lGroupsFile, " %s", XcpGetEventName(id)); } fprintf(gA2lGroupsFile, " /end SUB_GROUP /end GROUP\n"); } @@ -1461,20 +1625,20 @@ bool A2lFinalize(void) { fclose(gA2lFile); gA2lFile = NULL; - gA2lFileFinalized = true; + gA2lFileWritten = true; DBG_PRINTF3("A2L created: %u measurements, %u params, %u typedefs, %u components, %u instances, %u conversions\n", gA2lMeasurements, gA2lParameters, gA2lTypedefs, gA2lComponents, gA2lInstances, gA2lConversions); - // Write the binary persistence file if calsegment list and DAQ event list are enabled + // Write the binary persistence file + // This is required to make sure the A2L file remains valid, even if the creation order of event or calibration segment is different #ifdef OPTION_CAL_PERSISTENCE if (!gA2lWriteAlways) - XcpBinWrite(gBinFilename); + XcpBinWrite(XCP_CALPAGE_WORKING_PAGE); #endif // Notify XCP that there is an A2L file available for upload by the XCP client - ApplXcpSetA2lName(gA2lFilename); - + XcpSetA2lName(gA2lFilename); return true; // A2L file generation successful } @@ -1497,14 +1661,13 @@ void A2lUnlock(void) { } // Open the A2L file and register the finalize callback -bool A2lInit(const char *a2l_projectname, const char *a2l_version, const uint8_t *addr, uint16_t port, bool useTCP, uint8_t mode) { +bool A2lInit(const uint8_t *addr, uint16_t port, bool useTCP, uint8_t mode) { - assert(a2l_projectname != NULL); assert(addr != NULL); // Check and ignore, if the XCP singleton has not been initialized and activated if (!XcpIsActivated()) { - DBG_PRINT3("A2lInit: XCP not initialized and activated!\n"); + DBG_PRINT3("A2lInit: XCP is deactivated!\n"); return true; } @@ -1514,57 +1677,45 @@ bool A2lInit(const char *a2l_projectname, const char *a2l_version, const uint8_t gA2lUseTCP = useTCP; // Save mode - gA2lWriteAlways = mode & A2L_MODE_WRITE_ALWAYS; + gA2lMode = mode; + gA2lWriteAlways = !!(mode & A2L_MODE_WRITE_ALWAYS); #ifndef OPTION_CAL_PERSISTENCE assert(gA2lWriteAlways); #endif - gA2lAutoGroups = mode & A2L_MODE_AUTO_GROUPS; - gA2lFinalizeOnConnect = mode & A2L_MODE_FINALIZE_ON_CONNECT; + gA2lAutoGroups = !!(mode & A2L_MODE_AUTO_GROUPS); + gA2lFinalizeOnConnect = !!(mode & A2L_MODE_FINALIZE_ON_CONNECT); mutexInit(&gA2lMutex, false, 0); - // EPK generation if not provided - // Set the EPK (software version number) for the A2L file - char epk[64]; - if (a2l_version == NULL) { - SNPRINTF(epk, sizeof(epk), "_%s_%s", __DATE__, __TIME__); + // Build A2L filename from project name and EPK + // If A2l file is generated only once for a new build, the EPK is appended to the filename + if (gA2lWriteAlways) { + SNPRINTF(gA2lFilename, sizeof(gA2lFilename), "%s.a2l", XcpGetProjectName()); } else { - SNPRINTF(epk, sizeof(epk), "_%s", a2l_version); + SNPRINTF(gA2lFilename, sizeof(gA2lFilename), "%s_%s.a2l", XcpGetProjectName(), gA2lWriteAlways ? "" : XcpGetEpk()); } - XcpSetEpk(epk); - - // Build filenames - // If A2l file is build once for a new build, the EPK is appended to the filename - const char *epk_suffix = gA2lWriteAlways ? "" : XcpGetEpk(); - SNPRINTF(gA2lFilename, sizeof(gA2lFilename), "%s%s.a2l", a2l_projectname, epk_suffix); - DBG_PRINTF3("Start A2L generator, file=%s, write_always=%u, finalize_on_connect=%u, auto_groups=%u\n", gA2lFilename, gA2lWriteAlways, gA2lFinalizeOnConnect, gA2lAutoGroups); - -// Check if the BIN file and the A2L exists and load the binary file -#ifdef OPTION_CAL_PERSISTENCE - SNPRINTF(gBinFilename, sizeof(gBinFilename), "%s%s.bin", a2l_projectname, epk_suffix); - if (!gA2lWriteAlways) { - - if (fexists(gA2lFilename)) { - if (XcpBinLoad(gBinFilename, XcpGetEpk())) { - DBG_PRINTF3("Loaded binary file %s, A2L generation has been disabled\n", gBinFilename); - // Notify XCP that there is an A2L file available for upload by the XCP client - ApplXcpSetA2lName(gA2lFilename); + // Register a callback on XCP connect + ApplXcpRegisterConnectCallback(A2lCheckFinalizeOnConnect); - return true; // Do not generate A2L, but still provide the existing file, if binary file exists - } - } + // In A2L_WRITE_ONCE mode: + // Check if the A2L file already exists and the persistence BIN file has been loaded and checked + // If yes, skip generation if not write always + gA2lFileWritten = false; + if (!gA2lWriteAlways && (XcpGetSessionStatus() & SS_PERSISTENCE_LOADED) && fexists(gA2lFilename)) { + // Notify XCP that there is an A2L file available for upload by the XCP client + XcpSetA2lName(gA2lFilename); + DBG_PRINTF3("A2L file %s already exists, disable A2L generation\n", gA2lFilename); + return true; } -#endif // Open A2L file for generation - if (!A2lOpen(gA2lFilename, a2l_projectname)) { + if (!A2lOpen()) { printf("Failed to open A2L file %s\n", gA2lFilename); return false; } - // Register a callback on XCP connect - ApplXcpRegisterConnectCallback(A2lCheckFinalizeOnConnect); - return true; } + +#endif // XCP_ENABLE_A2L_GENERATOR diff --git a/src/dbg_print.h b/src/dbg_print.h index 901d6ba9..e41c1460 100644 --- a/src/dbg_print.h +++ b/src/dbg_print.h @@ -18,6 +18,20 @@ #error "Please define OPTION_DEFAULT_DBG_LEVEL or OPTION_FIXED_DBG_LEVEL" #endif +#ifdef OPTION_ENABLE_DBG_METRICS +#ifdef __cplusplus +extern "C" { +#endif +extern uint32_t gXcpWritePendingCount; +extern uint32_t gXcpCalSegPublishAllCount; +extern uint32_t gXcpDaqEventCount; +extern uint32_t gXcpTxPacketCount; +extern uint32_t gXcpRxPacketCount; +#ifdef __cplusplus +} +#endif +#endif + #ifdef OPTION_ENABLE_DBG_PRINTS /* @@ -28,11 +42,24 @@ 5 - Debug */ +// ANSI color codes +#define ANSI_COLOR_RED "\x1b[31m" +#define ANSI_COLOR_YELLOW "\x1b[33m" +#define ANSI_COLOR_GREEN "\x1b[32m" +#define ANSI_COLOR_BLUE "\x1b[34m" +#define ANSI_COLOR_RESET "\x1b[0m" + #ifdef OPTION_FIXED_DBG_LEVEL #define DBG_LEVEL OPTION_FIXED_DBG_LEVEL #else -extern uint8_t gDebugLevel; -#define DBG_LEVEL gDebugLevel +#ifdef __cplusplus +extern "C" { +#endif +extern uint8_t gXcpDebugLevel; +#ifdef __cplusplus +} +#endif +#define DBG_LEVEL gXcpDebugLevel #endif #define DBG_PRINTF(format, ...) printf(format, __VA_ARGS__) @@ -41,23 +68,23 @@ extern uint8_t gDebugLevel; #define DBG_PRINTF_ERROR(format, ...) \ do { \ if (DBG_LEVEL >= 1) \ - fprintf(stderr, "[XCP ] ERROR: " format, __VA_ARGS__); \ + fprintf(stderr, ANSI_COLOR_RED "[XCP ] ERROR: " ANSI_COLOR_RESET format, __VA_ARGS__); \ } while (0) #define DBG_PRINTF_WARNING(format, ...) \ do { \ if (DBG_LEVEL >= 2) \ - fprintf(stderr, "[XCP ] WARNING: " format, __VA_ARGS__); \ + fprintf(stderr, ANSI_COLOR_YELLOW "[XCP ] WARNING: " ANSI_COLOR_RESET format, __VA_ARGS__); \ } while (0) #else #define DBG_PRINTF_ERROR(format, ...) \ do { \ if (DBG_LEVEL >= 1) \ - printf("[XCP ] ERROR: " format, __VA_ARGS__); \ + printf(ANSI_COLOR_RED "[XCP ] ERROR: " ANSI_COLOR_RESET format, __VA_ARGS__); \ } while (0) #define DBG_PRINTF_WARNING(format, ...) \ do { \ if (DBG_LEVEL >= 2) \ - printf("[XCP ] WARNING: " format, __VA_ARGS__); \ + printf(ANSI_COLOR_YELLOW "[XCP ] WARNING: " ANSI_COLOR_RESET format, __VA_ARGS__); \ } while (0) #endif #define DBG_PRINTF3(format, ...) \ @@ -83,23 +110,23 @@ extern uint8_t gDebugLevel; #define DBG_PRINT_ERROR(format) \ do { \ if (DBG_LEVEL >= 1) \ - fprintf(stderr, "[XCP ] ERROR: " format); \ + fprintf(stderr, ANSI_COLOR_RED "[XCP ] ERROR: " ANSI_COLOR_RESET format); \ } while (0) #define DBG_PRINT_WARNING(format) \ do { \ if (DBG_LEVEL >= 2) \ - fprintf(stderr, "[XCP ] WARNING: " format); \ + fprintf(stderr, ANSI_COLOR_YELLOW "[XCP ] WARNING: " ANSI_COLOR_RESET format); \ } while (0) #else #define DBG_PRINT_ERROR(format) \ do { \ if (DBG_LEVEL >= 1) \ - printf("[XCP ] ERROR: " format); \ + printf(ANSI_COLOR_RED "[XCP ] ERROR: " ANSI_COLOR_RESET format); \ } while (0) #define DBG_PRINT_WARNING(format) \ do { \ if (DBG_LEVEL >= 2) \ - printf("[XCP ] WARNING: " format); \ + printf(ANSI_COLOR_YELLOW "[XCP ] WARNING: " ANSI_COLOR_RESET format); \ } while (0) #endif #define DBG_PRINT3(format) \ diff --git a/src/main_cfg.h b/src/main_cfg.h index e6f6dd9a..09b07e0e 100644 --- a/src/main_cfg.h +++ b/src/main_cfg.h @@ -7,106 +7,124 @@ | | Description: | General configuration and build options for XCPlite / xcplib -|| +| ----------------------------------------------------------------------------*/ -// Version -#define OPTION_VERSION_MAJOR 0 -#define OPTION_VERSION_MINOR 9 -#define OPTION_VERSION_PATCH 3 - /* - - A #define OPTION_xxx may be a higher abstraction level configuration set More specific XCP configuration is in xcp_cfg.h (Protocol Layer) and xcptl_cfg.h (Transport Layer)) - The default values for XCP_xxx and XCPTL_xxx defines (in xcp_cfg.h and xcptl_cfg.h) may depend on options - - - XCP library build options: - - // Logging - #define OPTION_ENABLE_DBG_PRINTS Enable debug prints - #define OPTION_ENABLE_DBG_STDERR Enable debug print errors and warnings go to stderr - #define OPTION_DEFAULT_DBG_LEVEL x Default log level: 1 - Error, 2 - Warn, 3 - Info, 4 - Trace, 5 - Debug - #define OPTION_FIXED_DBG_LEVEL x Fixed log level to optimize code size - - // Clock - #define OPTION_CLOCK_EPOCH_ARB Arbitrary epoch or since 1.1.1970 - #define OPTION_CLOCK_EPOCH_PTP - #define OPTION_CLOCK_TICKS_1NS Resolution 1ns or 1us, granularity depends on platform - #define OPTION_CLOCK_TICKS_1US - - // XCP server settings - #define OPTION_ENABLE_TCP - #define OPTION_ENABLE_UDP - #define OPTION_MTU x Ethernet MTU, must be %8 - #define OPTION_SERVER_FORCEFULL_TERMINATION Terminate the server threads instead of waiting for the tasks to finish + The values for XCP_xxx and XCPTL_xxx define constants (in xcp_cfg.h and xcptl_cfg.h) may depend on options +*/ - // DAQ settings - #define OPTION_DAQ_MEM_SIZE x Size of memory for DAQ setup in bytes (integer value, 6 bytes per signal needed) - #define OPTION_DAQ_EVENT_COUNT x Maximum number of DAQ events (integer value, must be even) +// Version +#define OPTION_VERSION_MAJOR 1 +#define OPTION_VERSION_MINOR 0 +#define OPTION_VERSION_PATCH 0 - // CAL settings - #define OPTION_CAL_SEGMENTS Enable calibration segment management (otherwise callbacks are used for calibration segment commands) - #define OPTION_CAL_SEGMENT_COUNT x Maximum number of calibration segments - #define OPTION_CAL_PERSISTENCE Enable calibration segment persistence, BIN file is used to store calibration segments, A2L maybe generated only once per build - #define OPTION_CAL_SEGMENT_EPK Enable EPK calibration segment to detect HEX file incompatibility +#ifdef XCPLIB_FOR_RUST // Configuration for Rust xcp-lite - // A2L generation settings - #define OPTION_ENABLE_A2L_UPLOAD Enable A2L upload through XCP - #define OPTION_ENABLE_GET_LOCAL_ADDR Determine an existing IP address for A2L file, if bound to ANY +#include "xcplib_cfg.h" // for Rust xcp-lite specific configuration -*/ +#else +//------------------------------------------------------------------------------- // Logging + +// Enable debug prints #define OPTION_ENABLE_DBG_PRINTS +// Enable debug print errors and warnings go to stderr #define OPTION_ENABLE_DBG_STDERR -#define OPTION_DEFAULT_DBG_LEVEL 3 // User adjustable log level, default 3 -// #define OPTION_FIXED_DBG_LEVEL 2 // Optimize code size, only errors and warnings enabled, other levels optimized out +// Default log level: 1 - Error, 2 - Warn, 3 - Info, 4 - Trace, 5 - Debug +// Use level 4 print all XCP commands +#define OPTION_DEFAULT_DBG_LEVEL 3 +// Optimize code size, only errors and warnings enabled, other levels optimized out +// #define OPTION_FIXED_DBG_LEVEL 2 +// Enable debug metrics +#define OPTION_ENABLE_DBG_METRICS +//------------------------------------------------------------------------------- // Clock -#define OPTION_CLOCK_EPOCH_ARB // -> use CLOCK_MONOTONIC_RAW -// #define OPTION_CLOCK_EPOCH_PTP // -> use CLOCK_REALTIME -// #define OPTION_CLOCK_TICKS_1US + +// Epoch options (only one must be defined) +#define OPTION_CLOCK_EPOCH_ARB // Arbitrary epoch -> uses CLOCK_MONOTONIC_RAW +// #define OPTION_CLOCK_EPOCH_PTP // Precision Time Protocol epoch -> uses CLOCK_REALTIME + +// Resolution 1ns or 1us, granularity depends on platform (only one must be defined) #define OPTION_CLOCK_TICKS_1NS +// #define OPTION_CLOCK_TICKS_1US +//------------------------------------------------------------------------------- // XCP server options + #define OPTION_ENABLE_TCP #define OPTION_ENABLE_UDP -#define OPTION_MTU 8000 // Ethernet packet size (MTU) - Jumbo frames supported +#define OPTION_MTU 8000 // Ethernet packet size (MTU), must be %8 - Jumbo frames supported #define OPTION_SERVER_FORCEFULL_TERMINATION // Don't wait for the rx and tx thread to finish, just terminate them -#ifndef XCPLIB_FOR_RUST // Set by the rust build script +//------------------------------------------------------------------------------- +// CAL setting -// CAL -#define OPTION_CAL_SEGMENTS // Enable calibration segment management -#define OPTION_CAL_SEGMENT_COUNT 4 // Maximum number of calibration segments -#define OPTION_CAL_PERSISTENCE // Enable calibration segment persistence, BIN file is used to store calibration segments, A2L maybe generated only once per build -// #define OPTION_CAL_SEGMENT_EPK // Enable EPK calibration segment to detect HEX file incompatibility +// Enable calibration segment management +// (otherwise the callbacks in xcpAppl.c are used for calibration segment commands and memory read/write) +#define OPTION_CAL_SEGMENTS -// DAQ -#define OPTION_DAQ_MEM_SIZE (1000 * 6) // Memory bytes used for XCP DAQ tables - max 6 bytes per measurement signal needed -#define OPTION_DAQ_EVENT_COUNT 32 // Maximum number of DAQ events (integer value, must be even) +// Maximum number of calibration segments +#define OPTION_CAL_SEGMENT_COUNT 8 -#else +// Single page mode +// #define OPTION_CAL_SEGMENTS_SINGLE_PAGE -#define OPTION_DAQ_MEM_SIZE (10000 * 6) // Memory bytes used for XCP DAQ tables - max 6 bytes per measurement signal needed -#define OPTION_DAQ_EVENT_COUNT 256 // Maximum number of DAQ events (integer value, must be even) +// Enable calibration segment persistence, a binary (.BIN) file is used to store calibration segments +// This allows to safely build the A2L file only once per build, even if the creation order of events and segments changes +#define OPTION_CAL_PERSISTENCE -#endif +// Enable EPK calibration segment to check HEX/BIN file compatibility +// If the EPK is included in the HEX/BIN file, the version of the data structure can be checked using the EPK address specified in the A2L file +#define OPTION_CAL_SEGMENT_EPK + +// Enable absolute addressing for calibration segments +// Default is segment relative addressing, uses address extension 0 for segment relative and 1 for absolute and encodes the segment number in the address high word +// As this is not compatible to most well known tools to update, modify and create A2L files, this option switches to absolute addressing on address extension 0 +// Requirement is, that the address of all reference pages must be stable and in address range of 0x0000_0000 to 0xFFFF_FFFF +// #define OPTION_CAL_SEGMENTS_ABS + +// Enable persistence (freeze) to reference page or to working page on next application restart +// This decides which pages (reference/FLASH or working/RAM) are stored to the calibration segment binary file (.BIN) on XCP freeze request +// #define OPTION_CAL_REFERENCE_PAGE_PERSISTENCE + +// Start on reference/default page instead of on working page +// #define OPTION_CAL_SEGMENTS_START_ON_REFERENCE_PAGE -// A2L -#define OPTION_ENABLE_A2L_UPLOAD // Enable A2L upload via XCP +// Automatically persist the working page on XCP disconnect +// #define OPTION_CAL_PERSIST_ON_DISCONNECT + +# +//------------------------------------------------------------------------------- +// DAQ settings + +#define OPTION_DAQ_MEM_SIZE (1024 * 8) // Memory bytes used for XCP DAQ tables - 6 bytes per measurement signal/block needed +#define OPTION_DAQ_EVENT_COUNT 256 // Maximum number of DAQ events (integer value, must be even) +#define OPTION_DAQ_ASYNC_EVENT // Create an asynchronous, cyclic DAQ event for asynchronous data acquisition + +//------------------------------------------------------------------------------- +// A2L generation settings + +#define OPTION_ENABLE_A2L_GENERATOR // Enable A2L generator +#define OPTION_ENABLE_A2L_UPLOAD // Enable A2L upload via XCP // Enable socketGetLocalAddr and XcpEthTlGetInfo // Used for convenience to get an existing ip address in A2L, when bound to ANY 0.0.0.0 #define OPTION_ENABLE_GET_LOCAL_ADDR //------------------------------------------------------------------------------- +// Miscellaneous options -// Enable atomic emulation for platforms without stdatomic.h -// This is used on Windows and automatically set in platform.hin this case +// Enable atomic emulation for Windows without stdatomic.h for C // Switches to 32 bit transmit queue implementation // Not designed for non x86 platforms, needs strong memory ordering -// Explicit define used for testing only -// #define OPTION_ATOMIC_EMULATION +// Used for testing on Windows + +#if defined(_WIN32) || defined(_WIN64) +#define OPTION_ATOMIC_EMULATION +#endif + +#endif // !XCPLIB_FOR_RUST diff --git a/src/persistence.c b/src/persistence.c new file mode 100644 index 00000000..64e3bb91 --- /dev/null +++ b/src/persistence.c @@ -0,0 +1,433 @@ +/*---------------------------------------------------------------------------- +| File: +| persistence.c +| +| Description: +| Read and write binary file for calibration segment persistence +| +| Copyright (c) Vector Informatik GmbH. All rights reserved. +| Licensed under the MIT license. See LICENSE file in the project root for details. +| + ----------------------------------------------------------------------------*/ + +#include "persistence.h" + +#include // for assert +#include // for PRIu64 +#include // for va_ +#include // for bool +#include // for uintxx_t +#include // for fclose, fopen, fread, fseek, ftell +#include // for free, malloc +#include // for strlen, strncpy + +#include "dbg_print.h" // for DBG_PRINTF3, DBG_PRINT4, DBG_PRINTF4, DBG... +#include "main_cfg.h" // for OPTION_xxx +#include "platform.h" // for platform defines (WIN_, LINUX_, MACOS_) and specific implementation of sockets, clock, thread, mutex +#include "xcp.h" // for CRC_XXX +#include "xcpLite.h" // for tXcpDaqLists, XcpXxx, ApplXcpXxx, ... +#include "xcp_cfg.h" // for XCP_xxx +#include "xcptl_cfg.h" // for XCPTL_xxx + +#ifdef OPTION_CAL_PERSISTENCE + +#if !defined(XCP_ENABLE_DAQ_EVENT_LIST) || !defined(XCP_ENABLE_CALSEG_LIST) +#error "XCP_ENABLE_DAQ_EVENT_LIST and XCP_ENABLE_CALSEG_LIST must be enabled for calibration segment persistence" +#endif + +#define BIN_SIGNATURE "XCPLITE__BINARY" +#define BIN_VERSION 0x0204 + +#pragma pack(push, 1) + +typedef struct { + char signature[16]; // File signature "XCPLITE__BINARY" + uint16_t version; // File version, currently 0x0100 + uint16_t event_count; // Number of events, tEventDescriptor + uint16_t calseg_count; // Number of calibration segments, tCalSegDescriptor + uint8_t reserved[128 - 16 - 2 - 2 - 2]; // Reserved for future use + char Epk[XCP_EPK_MAX_LENGTH + 1]; // EPK string, 0 terminated + uint8_t padding[128 - (XCP_EPK_MAX_LENGTH + 1)]; // Reserved for longer EPK strings up to 128 bytes +} tHeader; + +static_assert(sizeof(tHeader) == 256, "Size of tHeader must be 256 bytes"); + +typedef struct { + uint16_t id; // Event ID + uint16_t index; // Event index + uint32_t cycleTimeNs; // Cycle time in ns + uint8_t priority; // Priority 0 = queued, 1 = pushing, 2 = realtime + uint8_t reserved[128 - 2 - 2 - 4 - 1]; // Reserved for future use + char name[XCP_MAX_EVENT_NAME + 1]; // Event name, 0 terminated + uint8_t padding[128 - (XCP_MAX_EVENT_NAME + 1)]; // Reserved for longer event names up to 128 bytes +} tEventDescriptor; + +static_assert(sizeof(tEventDescriptor) == 256, "Size of tEventDescriptor must be 256 bytes"); + +typedef struct { + uint16_t index; // Index of the calibration segment in the list, 0.. 0) + return; // Already built + const char *project_name = XcpGetProjectName(); + assert(project_name != NULL); + const char *epk = XcpGetEpk(); + assert(epk != NULL); + SNPRINTF(gXcpBinFilename, XCP_BIN_FILENAME_MAX_LENGTH, "%s_%s.bin", project_name, epk); +} + +// Print the content of a calibration segment page for debugging +#ifdef OPTION_ENABLE_DBG_PRINTS +static void printCalsegPage(const uint8_t *page, uint16_t size) { + for (uint16_t i = 0; i < size; i++) { + printf("%02X ", page[i]); + if ((i + 1) % 16 == 0) { + printf("\n"); + } + } + if (size % 16 != 0) { + printf("\n"); + } +} +#endif + +// Write the BIN file header +static bool writeHeader(FILE *file, const char *epk, uint16_t event_count, uint16_t calseg_count) { + + memset(&gBinHeader, 0, sizeof(tHeader)); + strncpy(gBinHeader.signature, BIN_SIGNATURE, sizeof(gBinHeader.signature) - 1); + gBinHeader.signature[sizeof(gBinHeader.signature) - 1] = '\0'; // Ensure null termination + gBinHeader.version = BIN_VERSION; + strncpy(gBinHeader.Epk, epk, XCP_EPK_MAX_LENGTH); + gBinHeader.Epk[XCP_EPK_MAX_LENGTH] = '\0'; // Ensure null termination + gBinHeader.event_count = event_count; + gBinHeader.calseg_count = calseg_count; + size_t written = fwrite(&gBinHeader, sizeof(tHeader), 1, file); + if (written != 1) { + DBG_PRINTF3("Failed to write header to file: %s\n", strerror(errno)); + return false; + } + return true; +} + +// Write an event descriptor to the BIN file +static bool writeEvent(FILE *file, tXcpEventId event_id, const tXcpEvent *event) { + tEventDescriptor desc; + memset(&desc, 0, sizeof(tEventDescriptor)); + strncpy(desc.name, event->name, XCP_MAX_EVENT_NAME); + desc.name[XCP_MAX_EVENT_NAME] = '\0'; // Ensure null termination + desc.cycleTimeNs = event->cycleTimeNs; + desc.priority = event->priority; + desc.id = event_id; + desc.index = XcpGetEventIndex(event_id); + size_t written = fwrite(&desc, sizeof(tEventDescriptor), 1, file); + if (written != 1) { + DBG_PRINTF3("Failed to write event descriptor to file: %s\n", strerror(errno)); + return false; + } + + return true; +} + +// Write a calibration segment descriptor and page data to the BIN file +static bool writeCalseg(FILE *file, tXcpCalSegIndex calseg, tXcpCalSeg *seg, uint8_t page) { + tCalSegDescriptor desc; + memset(&desc, 0, sizeof(tCalSegDescriptor)); + strncpy(desc.name, seg->name, XCP_MAX_CALSEG_NAME); + desc.name[XCP_MAX_CALSEG_NAME] = '\0'; // Ensure null termination + desc.size = seg->size; + desc.addr = XcpGetCalSegBaseAddress(calseg); + desc.index = calseg; + size_t written = fwrite(&desc, sizeof(tCalSegDescriptor), 1, file); + if (written != 1) { + DBG_PRINTF3("Failed to write calibration segment descriptor to file: %s\n", strerror(errno)); + return false; + } + seg->file_pos = (uint32_t)ftell(file); // Save the position of the segment page data in the file +#ifdef OPTION_ENABLE_DBG_PRINTS + DBG_PRINTF4("Writing calibration segment %u, size=%u %s page data:\n", calseg, seg->size, page == XCP_CALPAGE_DEFAULT_PAGE ? "default" : "working"); + if (DBG_LEVEL >= 4) + printCalsegPage(page == XCP_CALPAGE_DEFAULT_PAGE ? seg->default_page : seg->ecu_page, seg->size); +#endif + // This is safe, because XCP is not connected + written = fwrite(page == XCP_CALPAGE_DEFAULT_PAGE ? seg->default_page : seg->ecu_page, seg->size, 1, file); + if (written != 1) { + DBG_PRINTF3("Failed to write calibration segment data to file: %s\n", strerror(errno)); + return false; + } + return true; +} + +//-------------------------------------------------------------------------------------------------------------------------------- + +/// Write the binary persistence file. +/// This function writes the current state of the XCP events and calibration segments to a binary file. +/// It creates a file with the specified filename and writes the header, events, and calibration segments. +/// The tool must not be connected at that time +/// @param filename The name of the file to write. +/// @return +/// Returns true if the file was successfully written, false otherwise. +bool XcpBinWrite(uint8_t page) { + + buildBinFilename(); + + if (XcpIsConnected() && page == XCP_CALPAGE_WORKING_PAGE) { + DBG_PRINT_ERROR("Cannot write persistence file while XCP is connected\n"); + return false; + } + + // Open file for writing + FILE *file = fopen(gXcpBinFilename, "wb"); + if (file == NULL) { + DBG_PRINTF3("Failed to open file %s for writing: %s\n", gXcpBinFilename, strerror(errno)); + return false; + } + if (!writeHeader(file, XcpGetEpk(), gXcp.EventList.count, gXcp.CalSegList.count)) { + fclose(file); + return false; + } + + // Write events + for (tXcpEventId i = 0; i < gXcp.EventList.count; i++) { + const tXcpEvent *event = XcpGetEvent(i); + if (!writeEvent(file, i, event)) { + fclose(file); + return false; + } + } + + // Write calibration segments descriptors and data + for (tXcpCalSegIndex i = 0; i < gXcp.CalSegList.count; i++) { + tXcpCalSeg *seg = XcpGetCalSeg(i); + assert(seg != NULL); + if (!writeCalseg(file, i, seg, page)) { + fclose(file); + return false; + } + } + + fclose(file); + + DBG_PRINTF3("Persistence data written to file '%s'\n", gXcpBinFilename); + return true; +} + +//-------------------------------------------------------------------------------------------------------------------------------- + +/// Freeze the active page of a calibration segment to the binary persistence file. +/// This function writes the active page of the specified calibration segment to the binary persistence file. +/// @param calseg Calibration segment index +/// @return +/// Returns true if the operation was successful. +bool XcpBinFreezeCalSeg(tXcpCalSegIndex calseg) { + assert(calseg < gXcp.CalSegList.count); + tXcpCalSeg *seg = XcpGetCalSeg(calseg); + if (seg == NULL) { + DBG_PRINTF_ERROR("Calibration segment '%u' not found!\n", calseg); + return false; + } + + buildBinFilename(); + FILE *file = fopen(gXcpBinFilename, "r+b"); + if (file == NULL) { + // If the file does not exist yet, create a new initial one with default page data + XcpBinWrite(XCP_CALPAGE_DEFAULT_PAGE); + file = fopen(gXcpBinFilename, "r+b"); + } + if (file == NULL) { + DBG_PRINTF_ERROR("Failed to open file '%s' for read/write: %s\n", gXcpBinFilename, strerror(errno)); + return false; + } + + // Set position to start of calseg data and write the active page data + assert(seg->file_pos > 0); // Ensure the file position is set + size_t n = 0; + if (0 == fseek(file, seg->file_pos, SEEK_SET)) { + const uint8_t *ecu_page = XcpLockCalSeg(calseg); +#ifdef OPTION_ENABLE_DBG_PRINTS + DBG_PRINTF4("Freezing calibration segment %u, size=%u active page data to file '%s'+%u\n", calseg, seg->size, gXcpBinFilename, seg->file_pos); + if (DBG_LEVEL >= 4) + printCalsegPage(ecu_page, seg->size); +#endif + n = fwrite(ecu_page, seg->size, 1, file); + XcpUnlockCalSeg(calseg); + } + fclose(file); + if (n != 1) { + DBG_PRINTF_ERROR("Failed to write calibration segment %u, size=%u active page data to file '%s'+%u\n", calseg, seg->size, gXcpBinFilename, seg->file_pos); + return false; + } else { + return true; + } +} + +//-------------------------------------------------------------------------------------------------------------------------------- + +// Load the binary persistence file. +// @param filename The pathname of the file (with extension) to read +// @param epk The expected EPK string for verification +// @return +// If the file is successfully loaded, it returns true. +// Returns false, if the file does not exist, has an invalid format, the EPK does not match or any other reason +static bool load(const char *filename, const char *epk) { + assert(filename != NULL); + FILE *file = fopen(filename, "rb"); + if (file == NULL) { + DBG_PRINTF3("File '%s' does not exist, starting with default calibration parameters\n", filename); + return false; + } + + // Read and verify header + size_t read = fread(&gBinHeader, sizeof(tHeader), 1, file); + if (read != 1 || strncmp(gBinHeader.signature, BIN_SIGNATURE, sizeof(gBinHeader.signature)) != 0) { + DBG_PRINTF_ERROR("Invalid file format or signature in '%s'\n", filename); + fclose(file); + return false; + } + if (gBinHeader.version != BIN_VERSION) { + DBG_PRINTF_ERROR("Unsupported BIN file version 0x%04X in '%s'\n", gBinHeader.version, filename); + fclose(file); + return false; + } + + // Check EPK match + if (strncmp(gBinHeader.Epk, epk, XCP_EPK_MAX_LENGTH) != 0) { + DBG_PRINTF_WARNING("Persistence file '%s' not loaded, EPK mismatch: file EPK '%s', current EPK '%s'\n", filename, gBinHeader.Epk, epk); + fclose(file); + return false; // EPK mismatch + } + + DBG_PRINTF3("Loading '%s', EPK '%s'\n", filename, epk); + + // Load events + // Event list must be empty at this point + if (gXcp.EventList.count != 0) { + DBG_PRINT_ERROR("Event list not empty prior to loading persistence file\n"); + fclose(file); + return false; + } + for (uint16_t i = 0; i < gBinHeader.event_count; i++) { + tEventDescriptor desc; + tXcpEventId event_id; + + // Read event descriptor + read = fread(&desc, sizeof(tEventDescriptor), 1, file); + if (read != 1) { + DBG_PRINTF_ERROR("Failed to read event descriptor from file: %s\n", strerror(errno)); + fclose(file); + return false; + } + + // Create the event + // As it is created in the original order, the event ID must match + event_id = XcpCreateIndexedEvent(desc.name, desc.index, desc.cycleTimeNs, desc.priority); + if (event_id == XCP_UNDEFINED_EVENT_ID || event_id != desc.id) { // Should not happen + DBG_PRINTF_ERROR("Failed to create event '%s' from persistence file\n", desc.name); + fclose(file); + return false; + } + } + + // Load calibration segments + // Calibration segment list must be empty at this point + if (gXcp.CalSegList.count != 0) { + DBG_PRINT_ERROR("Calibration segment list not empty prior to loading persistence file\n"); + fclose(file); + return false; + } + for (uint16_t i = 0; i < gBinHeader.calseg_count; i++) { + tXcpCalSegIndex calseg; + + tCalSegDescriptor desc; + read = fread(&desc, sizeof(tCalSegDescriptor), 1, file); + if (read != 1) { + DBG_PRINTF_ERROR("Failed to read calibration segment descriptor from file: %s\n", strerror(errno)); + fclose(file); + return false; + } + + // Read calibration segment page data + // Allocate memory for persisted page from heap + void *page = malloc(desc.size); + read = fread(page, desc.size, 1, file); + if (read != 1) { + DBG_PRINTF_ERROR("Failed to read calibration segment data from file: %s\n", strerror(errno)); + free(page); + fclose(file); + return false; + } +#ifdef OPTION_ENABLE_DBG_PRINTS + DBG_PRINTF4("Reading calibration segment %u, size=%u:\n", i, desc.size); + if (DBG_LEVEL >= 4) + printCalsegPage(page, desc.size); +#endif + + // The persisted data will become the preliminary reference page + // Providing a heap allocated default page may not work for absolute segment addressing mode in reference page persistence mode + // In working page persistence mode, the default page will be moved to working page in the later XcpCreateCalSeg called by the user, otherwise fail + calseg = XcpCreateCalSeg(desc.name, page, desc.size); + if (calseg != desc.index) { + DBG_PRINT_ERROR("Failed to create calibration segment\n"); + free(page); + fclose(file); + return false; + } + + // Mark the segment as pre initialized + tXcpCalSeg *seg = XcpGetCalSeg(calseg); + seg->mode = PAG_PROPERTY_PRELOAD; + seg->file_pos = (uint32_t)ftell(file) - desc.size; // Save the position of the segment page data in the file + } + + return true; +} + +// Load the binary persistence file. +// This function reads the binary file containing calibration segment descriptors and data and event descriptors +// It verifies the file signature and EPK, and creates the events and calibration segments +// This must be done early, before any event or segments are created +// @return +// If the file is successfully loaded, it returns true. +// Returns false, if the file does not exist, has an invalid format, the EPK does not match or any other reason + +bool XcpBinLoad(void) { + + buildBinFilename(); + const char *epk = XcpGetEpk(); + assert(epk != NULL); + if (load(gXcpBinFilename, epk)) { + DBG_PRINTF3("Loaded binary file %s\n", gXcpBinFilename); + return true; + } + return false; +} + +void XcpBinDelete(void) { + buildBinFilename(); + if (remove(gXcpBinFilename) == 0) { + DBG_PRINTF3("Deleted persistence file '%s'\n", gXcpBinFilename); + } +} + +#endif // OPTION_CAL_PERSISTENCE diff --git a/src/persistency.h b/src/persistence.h similarity index 77% rename from src/persistency.h rename to src/persistence.h index a982e81e..6994bc02 100644 --- a/src/persistency.h +++ b/src/persistence.h @@ -1,12 +1,12 @@ #pragma once -#define __PERSISTENCY_H__ +#define __PERSISTENCE_H__ /*---------------------------------------------------------------------------- | File: -| persistency.h +| persistence.h | | Description: -| XCPlite internal header file for persistency.c +| XCPlite internal header file for persistence.c | | Copyright (c) Vector Informatik GmbH. All rights reserved. | See LICENSE file in the project root for details. @@ -25,8 +25,9 @@ extern "C" { #endif -bool XcpBinWrite(const char *filename); -bool XcpBinLoad(const char *filename, const char *epk); +bool XcpBinWrite(uint8_t page); +bool XcpBinLoad(void); +void XcpBinDelete(void); bool XcpBinFreezeCalSeg(tXcpCalSegIndex calseg); #ifdef __cplusplus diff --git a/src/persistency.c b/src/persistency.c deleted file mode 100644 index fa7d537a..00000000 --- a/src/persistency.c +++ /dev/null @@ -1,302 +0,0 @@ -/*---------------------------------------------------------------------------- -| File: -| persistency.c -| -| Description: -| Read and write binary file for calibration segment persistency -| -| Copyright (c) Vector Informatik GmbH. All rights reserved. -| Licensed under the MIT license. See LICENSE file in the project root for details. -| - ----------------------------------------------------------------------------*/ - -#include "persistency.h" - -#include // for assert -#include // for PRIu64 -#include // for va_ -#include // for bool -#include // for uintxx_t -#include // for fclose, fopen, fread, fseek, ftell -#include // for free, malloc -#include // for strlen, strncpy - -#include "dbg_print.h" // for DBG_PRINTF3, DBG_PRINT4, DBG_PRINTF4, DBG... -#include "main_cfg.h" // for OPTION_xxx -#include "platform.h" // for platform defines (WIN_, LINUX_, MACOS_) and specific implementation of sockets, clock, thread, mutex -#include "xcp.h" // for CRC_XXX -#include "xcpLite.h" // for tXcpDaqLists, XcpXxx, ApplXcpXxx, ... -#include "xcp_cfg.h" // for XCP_xxx -#include "xcptl_cfg.h" // for XCPTL_xxx - -#ifdef OPTION_CAL_PERSISTENCE - -#if !defined(XCP_ENABLE_DAQ_EVENT_LIST) || !defined(XCP_ENABLE_CALSEG_LIST) -#error "XCP_ENABLE_DAQ_EVENT_LIST and XCP_ENABLE_CALSEG_LIST must be enabled for calibration segment persistency" -#endif - -#define BIN_SIGNATURE "XCPlite__BINARY" -#define BIN_VERSION 0x0100 -#pragma pack(push, 1) - -typedef struct { - char signature[16]; // File signature "XCPlite__BINARY" - uint16_t version; // File version, currently 0x0100 - char Epk[XCP_EPK_MAX_LENGTH + 1]; // EPK string, 0 terminated, 32 bytes - uint16_t event_count; // Number of events tEventDescriptor - uint16_t calseg_count; - uint32_t res; -} tHeader; - -typedef struct { - char name[XCP_MAX_EVENT_NAME + 1]; // event name, 0 terminated, 16 bytes - uint16_t id; - uint16_t index; - uint32_t cycleTimeNs; // cycle time in ns - uint8_t priority; // priority 0 = queued, 1 = pushing, 2 = realtime - uint8_t res[3]; // reserved, 3 bytes -} tEventDescriptor; - -typedef struct { - char name[XCP_MAX_CALSEG_NAME + 1]; // calibration segment name, 0 terminated, 16 bytes - uint16_t size; // size of the calibration segment in bytes, multiple of 4 - uint16_t index; // index of the calibration segment in the list, 0..name, XCP_MAX_EVENT_NAME); - desc.name[XCP_MAX_EVENT_NAME] = '\0'; // Ensure null termination - desc.cycleTimeNs = event->cycleTimeNs; - desc.priority = event->priority; - desc.id = event_id; - desc.index = XcpGetEventIndex(event_id); - desc.res[0] = 0xEE; - desc.res[1] = 0xEE; - desc.res[2] = 0xEE; - - size_t written = fwrite(&desc, sizeof(tEventDescriptor), 1, file); - if (written != 1) { - DBG_PRINTF3("Failed to write event descriptor to file: %s\n", strerror(errno)); - return false; - } - - return true; -} - -static bool writeCalseg(FILE *file, tXcpCalSegIndex calseg, tXcpCalSeg *seg) { - tCalSegDescriptor desc; - strncpy(desc.name, seg->name, XCP_MAX_CALSEG_NAME); - desc.name[XCP_MAX_CALSEG_NAME] = '\0'; // Ensure null termination - desc.size = seg->size; - desc.index = calseg; - *(uint32_t *)&desc.res[0] = 0xDDDDDDDD; - - size_t written = fwrite(&desc, sizeof(tCalSegDescriptor), 1, file); - if (written != 1) { - DBG_PRINTF3("Failed to write calibration segment descriptor to file: %s\n", strerror(errno)); - return false; - } - seg->file_pos = (uint32_t)ftell(file); // Save the position of the segment page data in the file - written = fwrite(seg->ecu_page, seg->size, 1, file); - if (written != 1) { - DBG_PRINTF3("Failed to write calibration segment data to file: %s\n", strerror(errno)); - return false; - } - return true; -} - -//-------------------------------------------------------------------------------------------------------------------------------- - -/// Write the binary persistency file. -/// This function writes the current state of the XCP events and calibration segments to a binary file. -/// It creates a file with the specified filename and writes the header, events, and calibration segments. -/// @param filename The name of the file to write. -/// @return -/// Returns true if the file was successfully written, false otherwise. -bool XcpBinWrite(const char *filename) { - assert(filename != NULL); - - FILE *file = fopen(filename, "wb"); - if (file == NULL) { - DBG_PRINTF3("Failed to open file for writing: %s\n", strerror(errno)); - return false; - } - - if (!writeHeader(file, XcpGetEpk(), gXcp.EventList.count, gXcp.CalSegList.count)) { - fclose(file); - return false; - } - - // Write events - for (tXcpEventId i = 0; i < gXcp.EventList.count; i++) { - const tXcpEvent *event = XcpGetEvent(i); - if (!writeEvent(file, i, event)) { - fclose(file); - return false; - } - } - - // Write calibration segments descriptors and data - for (tXcpCalSegIndex i = 0; i < gXcp.CalSegList.count; i++) { - tXcpCalSeg *seg = XcpGetCalSeg(i); - assert(seg != NULL); - if (!writeCalseg(file, i, seg)) { - fclose(file); - return false; - } - } - - fclose(file); - gBinFilename = filename; - - DBG_PRINTF3("Persistency data written to file '%s'\n", filename); - return true; -} - -//-------------------------------------------------------------------------------------------------------------------------------- - -/// Freeze the active page of a calibration segment to the binary persistency file. -/// This function writes the active page of the specified calibration segment to the binary persistency file. -/// @param calseg Calibration segment index -/// @return -/// Returns true if the operation was successful. -bool XcpBinFreezeCalSeg(tXcpCalSegIndex calseg) { - assert(calseg < gXcp.CalSegList.count); - tXcpCalSeg *seg = XcpGetCalSeg(calseg); - if (seg == NULL) { - DBG_PRINTF_ERROR("Calibration segment '%u' not found!\n", calseg); - return false; - } - - FILE *file = fopen(gBinFilename, "r+b"); - if (file == NULL) { - DBG_PRINTF_ERROR("Failed to open file '%s' for read/write: %s\n", gBinFilename, strerror(errno)); - return false; - } - - // Set position to start of calseg data and write the active page data - assert(seg->file_pos > 0); // Ensure the file position is set - size_t n = 0; - if (0 == fseek(file, seg->file_pos, SEEK_SET)) { - printf("Writing calibration segment %u, size=%u active page data to file '%s'+%u\n", calseg, seg->size, gBinFilename, seg->file_pos); - const uint8_t *ecu_page = XcpLockCalSeg(calseg); - n = fwrite(ecu_page, seg->size, 1, file); - XcpUnlockCalSeg(calseg); - } - fclose(file); - if (n != 1) { - DBG_PRINTF_ERROR("Failed to write calibration segment %u, size=%u active page data to file '%s'+%u\n", calseg, seg->size, gBinFilename, seg->file_pos); - return false; - } else { - return true; - } -} - -//-------------------------------------------------------------------------------------------------------------------------------- - -/// Load the binary persistency file. -/// This function reads the binary file containing calibration segment descriptors and data and event descriptors -/// It verifies the file signature and EPK, and creates the events and calibration segments -/// @return -/// If the file is successfully loaded, it returns true. -/// If the file does not exist, has an invalid format, or the EPK does not match, it returns false. -bool XcpBinLoad(const char *filename, const char *epk) { - assert(filename != NULL); - gBinFilename = NULL; - - FILE *file = fopen(filename, "rb"); - if (file == NULL) { - DBG_PRINTF3("File '%s' does not exist\n", filename); - return false; - } - - size_t read = fread(&gHeader, sizeof(tHeader), 1, file); - if (read != 1 || strncmp(gHeader.signature, BIN_SIGNATURE, sizeof(gHeader.signature)) != 0) { - DBG_PRINTF3("Invalid file format or signature in '%s'\n", filename); - fclose(file); - return false; - } - - // Check EPK match - if (strncmp(gHeader.Epk, epk, XCP_EPK_MAX_LENGTH) != 0) { - DBG_PRINTF_WARNING("Persistence file '%s' not loaded, EPK mismatch: file EPK '%s', current EPK '%s'\n", filename, gHeader.Epk, epk); - fclose(file); - return false; // EPK mismatch - } - - DBG_PRINTF3("Loading '%s', EPK '%s'\n", filename, epk); - gBinFilename = filename; - - // Load events - for (uint16_t i = 0; i < gHeader.event_count; i++) { - tEventDescriptor desc; - read = fread(&desc, sizeof(tEventDescriptor), 1, file); - if (read != 1) { - DBG_PRINTF3("Failed to read event descriptor from file: %s\n", strerror(errno)); - fclose(file); - return false; - } - - tXcpEventId event_id = XcpCreateIndexedEvent(desc.name, desc.index, desc.cycleTimeNs, desc.priority); - assert(event_id == desc.id); // Ensure the event ID matches the descriptor ID - (void)event_id; - } - - // Load calibration segments - for (uint16_t i = 0; i < gHeader.calseg_count; i++) { - tCalSegDescriptor desc; - read = fread(&desc, sizeof(tCalSegDescriptor), 1, file); - if (read != 1) { - DBG_PRINTF3("Failed to read calibration segment descriptor from file: %s\n", strerror(errno)); - fclose(file); - return false; - } - - void *default_page = malloc(desc.size); - read = fread(default_page, desc.size, 1, file); - if (read != 1) { - DBG_PRINTF3("Failed to read calibration segment data from file: %s\n", strerror(errno)); - free(default_page); - fclose(file); - return false; - } - tXcpCalSegIndex calseg = XcpCreateCalSeg(desc.name, default_page, desc.size); - assert(calseg == desc.index); - - // Mark the segment as pre initialized - tXcpCalSeg *seg = XcpGetCalSeg(calseg); - seg->mode = PAG_PROPERTY_PRELOAD; - seg->file_pos = (uint32_t)ftell(file) - desc.size; // Save the position of the segment page data in the file - } - - return true; -} - -#endif // OPTION_CAL_PERSISTENCE diff --git a/src/platform.c b/src/platform.c index 0f18c86b..fac3a4e2 100644 --- a/src/platform.c +++ b/src/platform.c @@ -3,7 +3,7 @@ | platform.c | | Description: -| Platform (Linux/Windows/MACOS) abstraction layer +| Platform (Linux/Windows/MACOS/QNX) abstraction layer | Atomics | Sleep | Threads @@ -35,7 +35,7 @@ // Keyboard /**************************************************************************/ -#ifdef _LINUX +#if !defined(_WIN) // Non-Windows platforms #ifdef PLATFORM_ENABLE_KEYBOARD @@ -82,7 +82,7 @@ int _kbhit(void) { // Sleep /**************************************************************************/ -#if defined(_LINUX) // Linux +#if !defined(_WIN) #include // for timespec, nanosleep, CLOCK_MONOTONIC_RAW #include // for sleep @@ -110,7 +110,7 @@ void sleepMs(uint32_t ms) { } } -#elif defined(_WIN) // Windows +#else // Windows void sleepUs(uint32_t us) { @@ -222,7 +222,7 @@ bool atomic_compare_exchange_strong_explicit(uint64_t *a, uint64_t *b, uint64_t // Mutex /**************************************************************************/ -#if defined(_LINUX) +#if !defined(_WIN) // Non-Windows platforms void mutexInit(MUTEX *m, bool recursive, uint32_t spinCount) { (void)spinCount; @@ -238,7 +238,7 @@ void mutexInit(MUTEX *m, bool recursive, uint32_t spinCount) { void mutexDestroy(MUTEX *m) { pthread_mutex_destroy(m); } -#elif defined(_WIN) +#else // Windows void mutexInit(MUTEX *m, bool recursive, uint32_t spinCount) { (void)recursive; @@ -256,7 +256,7 @@ void mutexDestroy(MUTEX *m) { DeleteCriticalSection(m); } #if defined(OPTION_ENABLE_TCP) || defined(OPTION_ENABLE_UDP) -#ifdef _LINUX +#if !defined(_WIN) // Non-Windows platforms bool socketStartup(void) { return true; } @@ -320,13 +320,13 @@ bool socketClose(SOCKET *sp) { #ifdef OPTION_ENABLE_GET_LOCAL_ADDR -#ifndef _MACOS +#if !defined(_MACOS) && !defined(_QNX) #include #else #include #include #endif -#ifdef _LINUX +#if !defined(_WIN) // Non-Windows platforms #include #endif @@ -335,7 +335,7 @@ static bool GetMAC(char *ifname, uint8_t *mac) { if (getifaddrs(&ifaddrs) == 0) { for (ifa = ifaddrs; ifa != NULL; ifa = ifa->ifa_next) { if (!strcmp(ifa->ifa_name, ifname)) { -#ifdef _MACOS +#if defined(_MACOS) || defined(_QNX) if (ifa->ifa_addr->sa_family == AF_LINK) { memcpy(mac, (uint8_t *)LLADDR((struct sockaddr_dl *)ifa->ifa_addr), 6); DBG_PRINTF4(" %s: MAC = %02X-%02X-%02X-%02X-%02X-%02X\n", ifa->ifa_name, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); @@ -357,12 +357,12 @@ static bool GetMAC(char *ifname, uint8_t *mac) { } bool socketGetLocalAddr(uint8_t *mac, uint8_t *addr) { - static uint32_t addr1 = 0; - static uint8_t mac1[6] = {0, 0, 0, 0, 0, 0}; + static uint32_t __addr1 = 0; + static uint8_t __mac1[6] = {0, 0, 0, 0, 0, 0}; #ifdef DBG_LEVEL char strbuf[64]; #endif - if (addr1 == 0) { + if (__addr1 == 0) { struct ifaddrs *ifaddrs, *ifa; struct ifaddrs *ifa1 = NULL; if (-1 != getifaddrs(&ifaddrs)) { @@ -370,33 +370,33 @@ bool socketGetLocalAddr(uint8_t *mac, uint8_t *addr) { if ((NULL != ifa->ifa_addr) && (AF_INET == ifa->ifa_addr->sa_family)) { // IPV4 struct sockaddr_in *sa = (struct sockaddr_in *)(ifa->ifa_addr); if (0x100007f != sa->sin_addr.s_addr) { /* not 127.0.0.1 */ - if (addr1 == 0) { - addr1 = sa->sin_addr.s_addr; + if (__addr1 == 0) { + __addr1 = sa->sin_addr.s_addr; ifa1 = ifa; break; } } } } - if (addr1 != 0 && ifa1 != NULL) { - GetMAC(ifa1->ifa_name, mac1); + if (__addr1 != 0 && ifa1 != NULL) { + GetMAC(ifa1->ifa_name, __mac1); #ifdef DBG_LEVEL if (DBG_LEVEL >= 5) { - inet_ntop(AF_INET, &addr1, strbuf, sizeof(strbuf)); + inet_ntop(AF_INET, &__addr1, strbuf, sizeof(strbuf)); printf(" Use IPV4 adapter %s with IP=%s, MAC=%02X-%02X-%02X-%02X-%02X-%02X for A2L info and clock " "UUID\n", - ifa1->ifa_name, strbuf, mac1[0], mac1[1], mac1[2], mac1[3], mac1[4], mac1[5]); + ifa1->ifa_name, strbuf, __mac1[0], __mac1[1], __mac1[2], __mac1[3], __mac1[4], __mac1[5]); } #endif } freeifaddrs(ifaddrs); } } - if (addr1 != 0) { + if (__addr1 != 0) { if (mac) - memcpy(mac, mac1, 6); + memcpy(mac, __mac1, 6); if (addr) - memcpy(addr, &addr1, 4); + memcpy(addr, &__addr1, 4); return true; } else { return false; @@ -405,9 +405,7 @@ bool socketGetLocalAddr(uint8_t *mac, uint8_t *addr) { #endif // OPTION_ENABLE_GET_LOCAL_ADDR -#endif // _LINUX - -#if defined(_WIN) +#else uint32_t socketGetTimestampMode(uint8_t *clockType) { @@ -548,14 +546,14 @@ bool socketClose(SOCKET *sockp) { bool socketGetLocalAddr(uint8_t *mac, uint8_t *addr) { - static uint8_t addr1[4] = {0, 0, 0, 0}; - static uint8_t mac1[6] = {0, 0, 0, 0, 0, 0}; + static uint8_t __addr1[4] = {0, 0, 0, 0}; + static uint8_t __mac1[6] = {0, 0, 0, 0, 0, 0}; uint32_t a; PIP_ADAPTER_INFO pAdapterInfo; PIP_ADAPTER_INFO pAdapter = NULL; DWORD dwRetVal = 0; - if (addr1[0] == 0) { + if (__addr1[0] == 0) { ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO); pAdapterInfo = (IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO)); @@ -586,9 +584,9 @@ bool socketGetLocalAddr(uint8_t *mac, uint8_t *addr) { // if (pAdapter->DhcpEnabled) DBG_PRINTF5(" DHCP"); DBG_PRINT5("\n"); #endif - if (addr1[0] == 0) { - memcpy(addr1, (uint8_t *)&a, 4); - memcpy(mac1, pAdapter->Address, 6); + if (__addr1[0] == 0) { + memcpy(__addr1, (uint8_t *)&a, 4); + memcpy(__mac1, pAdapter->Address, 6); } } } @@ -599,11 +597,11 @@ bool socketGetLocalAddr(uint8_t *mac, uint8_t *addr) { free(pAdapterInfo); } - if (addr1[0] != 0) { + if (__addr1[0] != 0) { if (mac) - memcpy(mac, mac1, 6); + memcpy(mac, __mac1, 6); if (addr) - memcpy(addr, addr1, 4); + memcpy(addr, __addr1, 4); return true; } return false; @@ -700,10 +698,8 @@ int16_t socketSendTo(SOCKET sock, const uint8_t *buffer, uint16_t size, const ui sa.sin_family = AF_INET; #if defined(_WIN) // Windows memcpy(&sa.sin_addr.S_un.S_addr, addr, 4); -#elif defined(_LINUX) // Linux - memcpy(&sa.sin_addr.s_addr, addr, 4); #else -#error + memcpy(&sa.sin_addr.s_addr, addr, 4); #endif sa.sin_port = htons(port); if (time != NULL) @@ -721,13 +717,13 @@ int16_t socketSend(SOCKET sock, const uint8_t *buffer, uint16_t size) { return ( // Clock /**************************************************************************/ -static uint64_t sClock = 0; +static uint64_t __gClock = 0; // Get the last known clock value // Save CPU load, clockGet may take resonable run time, depending on platform // For slow timeouts and timers, it is sufficient to rely on the relatively high call frequency of clockGet() by other // parts of the application -uint64_t clockGetLast(void) { return sClock; } +uint64_t clockGetLast(void) { return __gClock; } // Not used, might be faster on macOS // #ifdef _MACOS @@ -740,14 +736,13 @@ uint64_t clockGetLast(void) { return sClock; } // } // #endif -#if defined(_LINUX) // Linux or macOS +#if !defined(_WIN) // Non-Windows platforms #if !defined(OPTION_CLOCK_EPOCH_PTP) && !defined(OPTION_CLOCK_EPOCH_ARB) #error "Please define OPTION_CLOCK_EPOCH_ARB or OPTION_CLOCK_EPOCH_PTP" #endif /* - Clock options OPTION_CLOCK_EPOCH_ARB arbitrary epoch @@ -755,21 +750,35 @@ Clock options OPTION_CLOCK_TICKS_1NS resolution 1ns or 1us, granularity depends on platform OPTION_CLOCK_TICKS_1US -Clock types used - CLOCK_REALTIME This clock may be affected by incremental adjustments performed by NTP - Epoch ns since 1.1.1970 - Works on all platforms - 1us granularity on MacOS - - CLOCK_TAI This clock does not experience discontinuities and backwards jumps caused by NTP or inserting -leap seconds as CLOCK_REALTIME does. Epoch ns since 1.1.1970 Not available on Linux and MacOS - - CLOCK_MONOTONIC_RAW Provides a monotonic clock without time drift adjustments by NTP, giving higher stability and -resolution Epoch ns since OS or process start Works on all platforms <1us granularity on MACOS, +Clock types + CLOCK_REALTIME + This clock may be affected by incremental adjustments performed by NTP. + Epoch ns since 1.1.1970. + Works on all platforms. + 1us granularity on MacOS. + + CLOCK_TAI + This clock does not experience discontinuities and backwards jumps caused by NTP or inserting leap seconds as CLOCK_REALTIME does. + Epoch ns since 1.1.1970 Not available on Linux and MacOS. + + CLOCK_MONOTONIC_RAW + Provides a monotonic clock without time drift adjustments by NTP, giving higher stability and resolution Epoch ns since OS or process start. + Works on all platforms except QNX, <1us granularity on MACOS. + + CLOCK_MONOTONIC + Provides a monotonic clock that might be adjusted in frequency by NTP to compensate drifts (on Linux and MACOS). + On QNX, this clock cannot be adjusted and is ensured to increase at a constant rate. + Epoch ns since OS or process start. + Available on all platforms. + <1us granularity on MACOS. */ #ifdef OPTION_CLOCK_EPOCH_ARB -#define CLOCK_TYPE CLOCK_MONOTONIC_RAW // Works on all OS +#ifdef _QNX +#define CLOCK_TYPE CLOCK_MONOTONIC // Same behaviour as CLOCK_MONOTONIC_RAW on the other os +#else +#define CLOCK_TYPE CLOCK_MONOTONIC_RAW +#endif #else #ifdef _WIN #define CLOCK_TYPE CLOCK_TAI @@ -810,7 +819,7 @@ bool clockInit(void) { DBG_PRINT3(" ticks = OPTION_CLOCK_TICKS_1NS\n"); #endif - sClock = 0; + __gClock = 0; #ifdef DBG_LEVEL if (DBG_LEVEL >= 3) { // Test @@ -845,14 +854,14 @@ uint64_t clockGet(void) { struct timespec ts; clock_gettime(CLOCK_TYPE, &ts); #ifdef OPTION_CLOCK_TICKS_1NS // ns - return sClock = (((uint64_t)(ts.tv_sec) * 1000000000ULL) + (uint64_t)(ts.tv_nsec)); + return __gClock = (((uint64_t)(ts.tv_sec) * 1000000000ULL) + (uint64_t)(ts.tv_nsec)); #else // us - return sClock = (((uint64_t)(ts.tv_sec) * 1000000ULL) + (uint64_t)(ts.tv_nsec / 1000)); // us - // return sClock = (((uint64_t)(ts.tv_sec - gts0.tv_sec) * 1000000ULL) + (uint64_t)(ts.tv_nsec / 1000)); + return __gClock = (((uint64_t)(ts.tv_sec) * 1000000ULL) + (uint64_t)(ts.tv_nsec / 1000)); // us + // return __gClock = (((uint64_t)(ts.tv_sec - gts0.tv_sec) * 1000000ULL) + (uint64_t)(ts.tv_nsec / 1000)); #endif } -#elif defined(_WIN) // Windows +#else // Windows // Performance counter to clock conversion static uint64_t sFactor = 0; // ticks per us @@ -916,7 +925,7 @@ bool clockInit(void) { #endif DBG_PRINTF4(" CLOCK_TICKS_PER_S = %u\n\n", CLOCK_TICKS_PER_S); - sClock = 0; + __gClock = 0; // Get current performance counter frequency // Determine conversion to CLOCK_TICKS_PER_S -> sDivide/sFactor @@ -1010,7 +1019,7 @@ uint64_t clockGet(void) { } else { t = t * sFactor + sOffset; } - sClock = t; + __gClock = t; return t; } @@ -1023,7 +1032,7 @@ uint64_t clockGetNs(void) { return clockGet(); } // File system utilities /**************************************************************************/ -#if defined(_WIN32) +#ifdef _WIN #include // for _access #else #include // for access @@ -1036,7 +1045,7 @@ bool fexists(const char *filename) { return false; } -#ifdef _WIN32 +#ifdef _WIN // Windows: use _access from io.h return (_access(filename, 0) == 0); #else diff --git a/src/platform.h b/src/platform.h index 891dd95b..d8c9c36d 100644 --- a/src/platform.h +++ b/src/platform.h @@ -17,7 +17,7 @@ // Platform defines // 64 Bit or 32 Bit platform -#if defined(__x86_64__) || defined(_M_X64) || defined(__aarch64__) || defined(_WIN64) +#if defined(_ix64_) || defined(__x86_64__) || defined(_M_X64) || defined(__aarch64__) || defined(_WIN64) #define PLATFORM_64BIT #else #define PLATFORM_32BIT @@ -28,45 +28,31 @@ #define _WIN -// For Windows compatibility, we must use an emulation for atomic operations and fallback to the 32 bit transmit queue -// MSVC does not support C11 stdatomic.h -#define OPTION_ATOMIC_EMULATION - -#if defined(_LINUX) || defined(_LINUX64) || defined(_LINUX32) -#error "defined(_LINUX) || defined(_LINUX64) || defined(_LINUX32)" -#endif +#define WIN32_LEAN_AND_MEAN -// Linux or macOS +// Linux or macOS or QNX #else -#define _LINUX +#if defined(PLATFORM_64BIT) -#if defined(_ix64_) || defined(__x86_64__) || defined(__aarch64__) -#define _LINUX64 -#ifdef __APPLE__ +#if defined(__APPLE__) #define _MACOS -#endif +#elif defined(__QNXNTO__) || defined(__QNX__) +#define _QNX #else -#error "32 Bit OS not supported" -#define _LINUX32 -#ifdef __APPLE__ -#define _MACOS32 -#endif +#define _LINUX #endif -#if defined(_WIN) || defined(_WIN64) || defined(_WIN32) -#error "defined(_WIN) || defined(_WIN64) || defined(_WIN32)" -#endif +#else -#endif +#error "32 Bit *X OS currently not supported" -#ifdef _WIN -#define WIN32_LEAN_AND_MEAN +#endif #endif -#if !defined(_WIN) && !defined(_LINUX) && !defined(_MACOS) -#error "Please define platform _WIN or _MACOS or _LINUX" +#if !defined(_WIN) && !defined(_LINUX) && !defined(_MACOS) && !defined(_QNX) +#error "Please define platform _WIN or _MACOS or _LINUX or _QNX" #endif //------------------------------------------------------------------------------------------------- @@ -92,7 +78,7 @@ #include // for malloc, free #endif -#elif defined(_LINUX) || defined(_MACOS) // Linux +#else // Define feature test macros before any includes to ensure POSIX functions are available #ifndef _DEFAULT_SOURCE @@ -126,10 +112,6 @@ #endif #endif -#else - -#error "Please define platform _WIN or _MACOS or _LINUX" - #endif //------------------------------------------------------------------------------- @@ -142,14 +124,16 @@ #ifdef OPTION_ENABLE_KEYBOARD -#ifdef _LINUX +#if !defined(_WIN) // Non-Windows platforms + #include int _getch(void); int _kbhit(void); -#endif -#ifdef _WIN +#else + #include + #endif #endif // PLATFORM_ENABLE_KEYBOARD @@ -163,8 +147,10 @@ int _kbhit(void); // Portable implementation of strnlen for systems that don't have it static inline size_t safe_strnlen(const char *s, size_t maxlen) { size_t len = 0; - while (len < maxlen && s[len] != '\0') { - len++; + if (s != NULL) { + while (len < maxlen && s[len] != '\0') { + len++; + } } return len; } @@ -176,7 +162,7 @@ static inline size_t safe_strnlen(const char *s, size_t maxlen) { #define STRNCPY(dest, src, n) strncpy(dest, src, n) #define STRNLEN(s, n) strnlen_s(s, n) -#elif defined(_LINUX) // Linux +#else #define SPRINTF(dest, format, ...) snprintf((char *)dest, sizeof(dest), format, __VA_ARGS__) #define SNPRINTF(dest, len, format, ...) snprintf((char *)dest, len, format, __VA_ARGS__) @@ -208,7 +194,7 @@ void sleepMs(uint32_t ms); #define mutexLock EnterCriticalSection #define mutexUnlock LeaveCriticalSection -#elif defined(_LINUX) // Linux +#else #define MUTEX pthread_mutex_t #define MUTEX_INTIALIZER PTHREAD_MUTEX_INITIALIZER @@ -234,8 +220,9 @@ typedef HANDLE THREAD; WaitForSingleObject(h, 1000); \ CloseHandle(h); \ } +#define get_thread_id() GetCurrentThreadId() -#elif defined(_LINUX) // Linux +#else typedef pthread_t THREAD; #define create_thread(h, t) pthread_create(h, NULL, t, NULL) @@ -246,6 +233,7 @@ typedef pthread_t THREAD; pthread_cancel(h); \ } #define yield_thread(void) sched_yield(void) +#define get_thread_id() ((uint32_t)(uintptr_t)pthread_self()) #endif @@ -270,7 +258,7 @@ typedef pthread_t THREAD; #if defined(OPTION_ENABLE_TCP) || defined(OPTION_ENABLE_UDP) -#ifdef _LINUX // Linux or macOS sockets +#if !defined(_WIN) // Non-Windows platforms #include #include @@ -293,9 +281,7 @@ typedef pthread_t THREAD; #define socketGetLastError(void) errno -#endif - -#if defined(_WIN) // Windows // Windows sockets or XL-API +#else // Windows sockets #include #include diff --git a/src/xcp.h b/src/xcp.h index b1131d7f..2c00c21a 100644 --- a/src/xcp.h +++ b/src/xcp.h @@ -233,12 +233,14 @@ #define SS_RESUME ((uint16_t)0x0080) // Internal states (high byte) */ -#define SS_BLOCK_UPLOAD ((uint16_t)0x0100) /* Block upload in progress */ -#define SS_LEGACY_MODE ((uint16_t)0x0200) /* XCP 1.3 legacy mode */ -#define SS_INITIALIZED ((uint16_t)0x8000) /* initialized */ -#define SS_STARTED ((uint16_t)0x4000) /* started*/ -#define SS_CONNECTED ((uint16_t)0x2000) /* connected */ -#define SS_ACTIVATED ((uint16_t)0x1000) /* activated or passive */ +#define SS_BLOCK_UPLOAD ((uint16_t)0x0100) /* Block upload in progress */ +#define SS_LEGACY_MODE ((uint16_t)0x0200) /* XCP 1.3 legacy mode */ +#define SS_PERSISTENCE_LOADED ((uint16_t)0x0400) /* Persistence loaded from BIN file*/ +#define SS_UNUSED2 ((uint16_t)0x0800) +#define SS_INITIALIZED ((uint16_t)0x8000) /* initialized */ +#define SS_STARTED ((uint16_t)0x4000) /* started*/ +#define SS_CONNECTED ((uint16_t)0x2000) /* connected */ +#define SS_ACTIVATED ((uint16_t)0x1000) /* activated or passive */ /*-------------------------------------------------------------------------*/ /* Identifier Type (GET_ID) */ diff --git a/src/xcpAppl.c b/src/xcpAppl.c index db6809b7..3e8800d0 100644 --- a/src/xcpAppl.c +++ b/src/xcpAppl.c @@ -24,85 +24,56 @@ #include "xcpLite.h" // for tXcpDaqLists, XcpXxx, ApplXcpXxx, ... #include "xcp_cfg.h" // for XCP_ENABLE_xxx -#if !defined(_WIN) && !defined(_LINUX) && !defined(_MACOS) -#error "Please define platform _WIN, _MACOS or _LINUX" +#if !defined(_WIN) && !defined(_LINUX) && !defined(_MACOS) && !defined(_QNX) +#error "Please define platform _WIN, _MACOS or _LINUX or _QNX" #endif -// @@@@ TODO improve +// @@@@ TODO: improve, __write_delayed is the consistency hold flag parameter for the __callback_write function #ifdef XCP_ENABLE_USER_COMMAND -static bool write_delayed = false; +static bool __write_delayed = false; #endif -/**************************************************************************/ -// Logging -/**************************************************************************/ - -// This is used by the Rust ffi to set the log level -void ApplXcpSetLogLevel(uint8_t level) { XcpSetLogLevel(level); } - /**************************************************************************/ // Callbacks /**************************************************************************/ -static bool (*callback_connect)(void) = NULL; -static uint8_t (*callback_prepare_daq)(void) = NULL; -static uint8_t (*callback_start_daq)(void) = NULL; -static void (*callback_stop_daq)(void) = NULL; -static uint8_t (*callback_freeze_daq)(uint8_t clear, uint16_t config_id) = NULL; -static uint8_t (*callback_get_cal_page)(uint8_t segment, uint8_t mode) = NULL; -static uint8_t (*callback_set_cal_page)(uint8_t segment, uint8_t page, uint8_t mode) = NULL; -static uint8_t (*callback_init_cal)(uint8_t src_page, uint8_t dst_page) = NULL; -static uint8_t (*callback_freeze_cal)(void) = NULL; -static uint8_t (*callback_read)(uint32_t src, uint8_t size, uint8_t *dst) = NULL; -static uint8_t (*callback_write)(uint32_t dst, uint8_t size, const uint8_t *src, uint8_t delay) = NULL; -static uint8_t (*callback_flush)(void) = NULL; - -void ApplXcpRegisterConnectCallback(bool (*cb_connect)(void)) { callback_connect = cb_connect; } -void ApplXcpRegisterPrepareDaqCallback(uint8_t (*cb_prepare_daq)(void)) { callback_prepare_daq = cb_prepare_daq; } -void ApplXcpRegisterStartDaqCallback(uint8_t (*cb_start_daq)(void)) { callback_start_daq = cb_start_daq; } -void ApplXcpRegisterStopDaqCallback(void (*cb_stop_daq)(void)) { callback_stop_daq = cb_stop_daq; } -void ApplXcpRegisterFreezeDaqCallback(uint8_t (*cb_freeze_daq)(uint8_t clear, uint16_t config_id)) { callback_freeze_daq = cb_freeze_daq; } -void ApplXcpRegisterGetCalPageCallback(uint8_t (*cb_get_cal_page)(uint8_t segment, uint8_t mode)) { callback_get_cal_page = cb_get_cal_page; } -void ApplXcpRegisterSetCalPageCallback(uint8_t (*cb_set_cal_page)(uint8_t segment, uint8_t page, uint8_t mode)) { callback_set_cal_page = cb_set_cal_page; } -void ApplXcpRegisterFreezeCalCallback(uint8_t (*cb_freeze_cal)(void)) { callback_freeze_cal = cb_freeze_cal; } -void ApplXcpRegisterInitCalCallback(uint8_t (*cb_init_cal)(uint8_t src_page, uint8_t dst_page)) { callback_init_cal = cb_init_cal; } -void ApplXcpRegisterReadCallback(uint8_t (*cb_read)(uint32_t src, uint8_t size, uint8_t *dst)) { callback_read = cb_read; } -void ApplXcpRegisterWriteCallback(uint8_t (*cb_write)(uint32_t dst, uint8_t size, const uint8_t *src, uint8_t delay)) { callback_write = cb_write; } -void ApplXcpRegisterFlushCallback(uint8_t (*cb_flush)(void)) { callback_flush = cb_flush; } - -// Internal function used by the Rust API -void ApplXcpRegisterCallbacks(bool (*cb_connect)(void), uint8_t (*cb_prepare_daq)(void), uint8_t (*cb_start_daq)(void), void (*cb_stop_daq)(void), - uint8_t (*cb_freeze_daq)(uint8_t clear, uint16_t config_id), uint8_t (*cb_get_cal_page)(uint8_t segment, uint8_t mode), - uint8_t (*cb_set_cal_page)(uint8_t segment, uint8_t page, uint8_t mode), uint8_t (*cb_freeze_cal)(void), - uint8_t (*cb_init_cal)(uint8_t src_page, uint8_t dst_page), uint8_t (*cb_read)(uint32_t src, uint8_t size, uint8_t *dst), - uint8_t (*cb_write)(uint32_t dst, uint8_t size, const uint8_t *src, uint8_t delay), uint8_t (*cb_flush)(void)) - -{ - callback_connect = cb_connect; - callback_prepare_daq = cb_prepare_daq; - callback_start_daq = cb_start_daq; - callback_stop_daq = cb_stop_daq; - callback_freeze_daq = cb_freeze_daq; - callback_get_cal_page = cb_get_cal_page; - callback_set_cal_page = cb_set_cal_page; - callback_freeze_cal = cb_freeze_cal; - callback_init_cal = cb_init_cal; - callback_read = cb_read; - callback_write = cb_write; - callback_flush = cb_flush; -} +static bool (*__callback_connect)(uint8_t mode) = NULL; +static uint8_t (*__callback_prepare_daq)(void) = NULL; +static uint8_t (*__callback_start_daq)(void) = NULL; +static void (*__callback_stop_daq)(void) = NULL; +static uint8_t (*__callback_freeze_daq)(uint8_t clear, uint16_t config_id) = NULL; +static uint8_t (*__callback_get_cal_page)(uint8_t segment, uint8_t mode) = NULL; +static uint8_t (*__callback_set_cal_page)(uint8_t segment, uint8_t page, uint8_t mode) = NULL; +static uint8_t (*__callback_init_cal)(uint8_t src_page, uint8_t dst_page) = NULL; +static uint8_t (*__callback_freeze_cal)(void) = NULL; +static uint8_t (*__callback_read)(uint32_t src, uint8_t size, uint8_t *dst) = NULL; +static uint8_t (*__callback_write)(uint32_t dst, uint8_t size, const uint8_t *src, uint8_t delay) = NULL; +static uint8_t (*__callback_flush)(void) = NULL; + +void ApplXcpRegisterConnectCallback(bool (*cb_connect)(uint8_t mode)) { __callback_connect = cb_connect; } +void ApplXcpRegisterPrepareDaqCallback(uint8_t (*cb_prepare_daq)(void)) { __callback_prepare_daq = cb_prepare_daq; } +void ApplXcpRegisterStartDaqCallback(uint8_t (*cb_start_daq)(void)) { __callback_start_daq = cb_start_daq; } +void ApplXcpRegisterStopDaqCallback(void (*cb_stop_daq)(void)) { __callback_stop_daq = cb_stop_daq; } +void ApplXcpRegisterFreezeDaqCallback(uint8_t (*cb_freeze_daq)(uint8_t clear, uint16_t config_id)) { __callback_freeze_daq = cb_freeze_daq; } +void ApplXcpRegisterGetCalPageCallback(uint8_t (*cb_get_cal_page)(uint8_t segment, uint8_t mode)) { __callback_get_cal_page = cb_get_cal_page; } +void ApplXcpRegisterSetCalPageCallback(uint8_t (*cb_set_cal_page)(uint8_t segment, uint8_t page, uint8_t mode)) { __callback_set_cal_page = cb_set_cal_page; } +void ApplXcpRegisterFreezeCalCallback(uint8_t (*cb_freeze_cal)(void)) { __callback_freeze_cal = cb_freeze_cal; } +void ApplXcpRegisterInitCalCallback(uint8_t (*cb_init_cal)(uint8_t src_page, uint8_t dst_page)) { __callback_init_cal = cb_init_cal; } +void ApplXcpRegisterReadCallback(uint8_t (*cb_read)(uint32_t src, uint8_t size, uint8_t *dst)) { __callback_read = cb_read; } +void ApplXcpRegisterWriteCallback(uint8_t (*cb_write)(uint32_t dst, uint8_t size, const uint8_t *src, uint8_t delay)) { __callback_write = cb_write; } +void ApplXcpRegisterFlushCallback(uint8_t (*cb_flush)(void)) { __callback_flush = cb_flush; } /**************************************************************************/ // General notifications from protocol layer /**************************************************************************/ -bool ApplXcpConnect(void) { - DBG_PRINT4("ApplXcpConnect\n"); +bool ApplXcpConnect(uint8_t mode) { + DBG_PRINTF4("ApplXcpConnect mode=%u\n", mode); #ifdef XCP_ENABLE_USER_COMMAND - write_delayed = false; + __write_delayed = false; #endif - if (callback_connect != NULL) - return callback_connect(); + if (__callback_connect != NULL) + return __callback_connect(mode); return true; } @@ -111,8 +82,8 @@ void ApplXcpDisconnect(void) { DBG_PRINT4("ApplXcpDisconnect\n"); } #if XCP_PROTOCOL_LAYER_VERSION >= 0x0104 bool ApplXcpPrepareDaq(void) { DBG_PRINT4("ApplXcpPrepareDaq\n"); - if (callback_prepare_daq != NULL) { - if (!callback_prepare_daq()) { + if (__callback_prepare_daq != NULL) { + if (!__callback_prepare_daq()) { DBG_PRINT_WARNING("DAQ start canceled by AppXcpPrepareDaq!\n"); return false; }; @@ -123,14 +94,14 @@ bool ApplXcpPrepareDaq(void) { void ApplXcpStartDaq(void) { DBG_PRINT4("ApplXcpStartDaq\n"); - if (callback_start_daq != NULL) - callback_start_daq(); + if (__callback_start_daq != NULL) + __callback_start_daq(); } void ApplXcpStopDaq(void) { DBG_PRINT4("ApplXcpStartDaq\n"); - if (callback_stop_daq != NULL) - callback_stop_daq(); + if (__callback_stop_daq != NULL) + __callback_stop_daq(); } /**************************************************************************/ @@ -182,27 +153,33 @@ bool ApplXcpGetClockInfoGrandmaster(uint8_t *uuid, uint8_t *epoch, uint8_t *stra #ifdef XCP_ENABLE_ABS_ADDRESSING -#ifdef _WIN +// Global module load address to optimize resolving relocated absolute addresses during runtime +// xcp_get_base_addr() uses gXcpBaseAddr directly, not ApplXcpGetBaseAddr(), assuming XCP has been initialized before -static uint8_t *baseAddr = NULL; -static uint8_t baseAddrValid = 0; +const uint8_t *gXcpBaseAddr = NULL; +uint8_t gXcpBaseAddrValid = 0; + +//---------------------------- +// Windows 64 or 32 bit +#ifdef _WIN // Get base pointer for the XCP address range // This function is time sensitive, as it is called once on every XCP event -uint8_t *ApplXcpGetBaseAddr(void) { +const uint8_t *ApplXcpGetBaseAddr(void) { - if (!baseAddrValid) { - baseAddr = (uint8_t *)GetModuleHandle(NULL); - baseAddrValid = 1; - DBG_PRINTF4("ApplXcpGetBaseAddr() = 0x%I64X\n", (uint64_t)baseAddr); + if (!gXcpBaseAddrValid) { + gXcpBaseAddr = (uint8_t *)GetModuleHandle(NULL); + gXcpBaseAddrValid = 1; + DBG_PRINTF4("ApplXcpGetBaseAddr() = 0x%I64X\n", (uint64_t)gXcpBaseAddr); } - return baseAddr; + return gXcpBaseAddr; } uint32_t ApplXcpGetAddr(const uint8_t *p) { + DBG_PRINTF5("Windows Address: base = %p, addr = %p, diff = %ld\n", (void *)ApplXcpGetBaseAddr(), (void *)p, (long)(p - ApplXcpGetBaseAddr())); assert(p >= ApplXcpGetBaseAddr()); -#ifdef _WIN64 +#if defined(PLATFORM_64BIT) assert(((uint64_t)p - (uint64_t)ApplXcpGetBaseAddr()) <= 0xffffffff); // be sure that XCP address range is sufficient #endif return (uint32_t)(p - ApplXcpGetBaseAddr()); @@ -210,50 +187,97 @@ uint32_t ApplXcpGetAddr(const uint8_t *p) { #endif -#if defined(_LINUX64) && !defined(_MACOS) +//---------------------------- +// Linux 64 bit or QNX 64 bit +#if (defined(_LINUX) || defined(_QNX)) && defined(PLATFORM_64BIT) + +#ifdef _QNX + +#include /* dl_iterate_phdr, dl_phdr_info */ +#include /* _NTO_VERSION */ +#if _NTO_VERSION >= 800 +#include /* qh_get_progname */ +#endif + +static int dump_phdr(const struct dl_phdr_info *pinfo, size_t size, void *data) { + DBG_PRINTF3("name=%s (%d segments, addr=0x%p)\n", pinfo->dlpi_name, pinfo->dlpi_phnum, (void *)pinfo->dlpi_addr); + + // On QNX, the application module name is the full path to the executable +#if _NTO_VERSION >= 800 + // QNX 8.0 is the first version to introduce qh_get_progname() + // Strip off the path from the module name and compare it to the retrieved program name to find the corresponding phdr entry + const char *pName = strrchr(pinfo->dlpi_name, '/'); + const char *pAppName = qh_get_progname(); + if (NULL != pName) { + pName += 1; + } else { + pName = pinfo->dlpi_name; + } + if (0 == strncmp(pName, pAppName, strlen(pAppName))) { + gXcpBaseAddr = pinfo->dlpi_addr; + } +#else + // On QNX 7.1 or less, there is no API to retrieve the name of the current program + // Name must be forwarded from args[0] to xcpAppl + // Workaround for now: Assume that entry 0 always contains the application module + gXcpBaseAddr = (uint8_t *)pinfo->dlpi_addr; + +#endif + + (void)size; + (void)data; + return 0; +} + +#else #ifndef __USE_GNU #define __USE_GNU #endif #include -static uint8_t *baseAddr = NULL; -static uint8_t baseAddrValid = 0; - static int dump_phdr(struct dl_phdr_info *pinfo, size_t size, void *data) { // DBG_PRINTF3("name=%s (%d segments)\n", pinfo->dlpi_name, pinfo->dlpi_phnum); - // Application modules has no name + // Application module has no name if (0 == strlen(pinfo->dlpi_name)) { - baseAddr = (uint8_t *)pinfo->dlpi_addr; + gXcpBaseAddr = (uint8_t *)pinfo->dlpi_addr; } (void)size; (void)data; return 0; } +#endif -uint8_t *ApplXcpGetBaseAddr(void) { +const uint8_t *ApplXcpGetBaseAddr(void) { - if (!baseAddrValid) { + if (!gXcpBaseAddrValid) { dl_iterate_phdr(dump_phdr, NULL); - assert(baseAddr != NULL); - baseAddrValid = 1; - DBG_PRINTF4("Base address for absolute addressing = %p\n", (void *)baseAddr); + assert(gXcpBaseAddr != NULL); + gXcpBaseAddrValid = 1; + DBG_PRINTF4("Base address for absolute addressing = %p\n", (void *)gXcpBaseAddr); } - return baseAddr; + return gXcpBaseAddr; } uint32_t ApplXcpGetAddr(const uint8_t *p) { - uint8_t *b = ApplXcpGetBaseAddr(); + const uint8_t *b = ApplXcpGetBaseAddr(); + DBG_PRINTF5("Linux Address: base = %p, addr = %p, diff = %ld\n", (void *)b, (void *)p, (long)(p - b)); assert(p >= b); - assert(((uint64_t)p - (uint64_t)b) <= 0xffffffff); // be sure that XCP address range is sufficient + if (((uint64_t)p - (uint64_t)b) > 0xffffffff) { // be sure that XCP address range is sufficient + DBG_PRINTF_ERROR("Address out of range! base = %p, addr = %p\n", (void *)b, (void *)p); + assert(0); + return 0; + } return (uint32_t)(p - b); } #endif +//---------------------------- +// MACOS 64 bit #ifdef _MACOS #include @@ -271,24 +295,21 @@ static int dump_so(void) { } */ -static uint8_t *baseAddr = NULL; -static uint8_t baseAddrValid = 0; - -uint8_t *ApplXcpGetBaseAddr(void) { - - if (!baseAddrValid) { +const uint8_t *ApplXcpGetBaseAddr(void) { + if (!gXcpBaseAddrValid) { // dump_so(); - baseAddr = (uint8_t *)_dyld_get_image_header(0); // Module addr - assert(baseAddr != NULL); - baseAddrValid = 1; - DBG_PRINTF4("Base address for absolute addressing = %p\n", (void *)baseAddr); + gXcpBaseAddr = (uint8_t *)_dyld_get_image_header(0); // Module addr + assert(gXcpBaseAddr != NULL); + gXcpBaseAddrValid = 1; + DBG_PRINTF4("Base address for absolute addressing = %p\n", (void *)gXcpBaseAddr); } - return baseAddr; + return gXcpBaseAddr; } uint32_t ApplXcpGetAddr(const uint8_t *p) { - uint8_t *b = ApplXcpGetBaseAddr(); + const uint8_t *b = ApplXcpGetBaseAddr(); + DBG_PRINTF5("Mac Address: base = %p, addr = %p, diff = %ld\n", (void *)b, (void *)p, (long)(p - b)); if (p < b || ((uint64_t)p - (uint64_t)b) > 0xffffffff) { // be sure that XCP address range is sufficient DBG_PRINTF_ERROR("Address out of range! base = %p, addr = %p\n", (void *)b, (void *)p); assert(0); // Ensure the address is in range @@ -299,9 +320,11 @@ uint32_t ApplXcpGetAddr(const uint8_t *p) { #endif -#ifdef _LINUX32 +//---------------------------- +// Linux 32 bit +#if defined(_LINUX) && defined(PLATFORM_32BIT) -uint8_t *ApplXcpGetBaseAddr(void) { return ((uint8_t *)0); } +const uint8_t *ApplXcpGetBaseAddr(void) { return ((uint8_t *)0); } uint32_t ApplXcpGetAddr(const uint8_t *p) { return ((uint32_t)(p)); } @@ -320,13 +343,13 @@ uint8_t ApplXcpUserCommand(uint8_t cmd) { switch (cmd) { case 0x01: // Begin atomic calibration operation - write_delayed = true; + __write_delayed = true; break; case 0x02: // End atomic calibration operation; - write_delayed = false; + __write_delayed = false; #ifdef XCP_ENABLE_APP_ADDRESSING - if (callback_flush != NULL) - return callback_flush(); + if (__callback_flush != NULL) + return __callback_flush(); #endif break; default: @@ -340,35 +363,34 @@ uint8_t ApplXcpUserCommand(uint8_t cmd) { // Called for SEG addressing mode, only when internal calibration segment management is not used or not enabled #ifdef XCP_ENABLE_APP_ADDRESSING uint8_t ApplXcpReadMemory(uint32_t src, uint8_t size, uint8_t *dst) { - if (callback_read != NULL) - return callback_read(src, size, dst); + if (__callback_read != NULL) + return __callback_read(src, size, dst); return CRC_ACCESS_DENIED; } uint8_t ApplXcpWriteMemory(uint32_t dst, uint8_t size, const uint8_t *src) { - if (callback_write != NULL) - return callback_write(dst, size, src, write_delayed); + if (__callback_write != NULL) + return __callback_write(dst, size, src, __write_delayed); return CRC_ACCESS_DENIED; } #endif /**************************************************************************/ +// Operations on calibration memory segments // Calibration page switching callbacks /**************************************************************************/ -// Operations on calibration memory segments - -// Called only when internal calibration segment management is not used or not enabled +// Called only when internal calibration segment management is not enabled #ifdef XCP_ENABLE_CAL_PAGE uint8_t ApplXcpGetCalPage(uint8_t segment, uint8_t mode) { - if (callback_get_cal_page != NULL) - return callback_get_cal_page(segment, mode); // return cal page number - return XCP_CALPAGE_WORKING_PAGE; // page 0 = working page (RAM) is default + if (__callback_get_cal_page != NULL) + return __callback_get_cal_page(segment, mode); // return cal page number + return XCP_CALPAGE_WORKING_PAGE; // page 0 = working page (RAM) is default } uint8_t ApplXcpSetCalPage(uint8_t segment, uint8_t page, uint8_t mode) { - if (callback_set_cal_page != NULL) - return callback_set_cal_page(segment, page, mode); // return CRC_CMD_xxx return code + if (__callback_set_cal_page != NULL) + return __callback_set_cal_page(segment, page, mode); // return CRC_CMD_xxx return code return CRC_CMD_UNKNOWN; } @@ -376,16 +398,16 @@ uint8_t ApplXcpSetCalPage(uint8_t segment, uint8_t page, uint8_t mode) { uint8_t ApplXcpCopyCalPage(uint8_t srcSeg, uint8_t srcPage, uint8_t dstSeg, uint8_t dstPage) { if (srcSeg != dstSeg && srcSeg > 0) return CRC_PAGE_NOT_VALID; // Only one segment supported - if (callback_init_cal != NULL) - return callback_init_cal(srcPage, dstPage); // return CRC_CMD_xxx return code + if (__callback_init_cal != NULL) + return __callback_init_cal(srcPage, dstPage); // return CRC_CMD_xxx return code return CRC_CMD_UNKNOWN; } #endif #ifdef XCP_ENABLE_FREEZE_CAL_PAGE uint8_t ApplXcpCalFreeze(void) { - if (callback_freeze_cal != NULL) - return callback_freeze_cal(); // return CRC_CMD_xxx return code + if (__callback_freeze_cal != NULL) + return __callback_freeze_cal(); // return CRC_CMD_xxx return code return CRC_CMD_UNKNOWN; } #endif @@ -416,10 +438,11 @@ uint8_t ApplXcpDaqResumeClear(void) { // Functions for upload of A2L file /**************************************************************************/ +#define XCP_A2L_FILENAME_MAX_LENGTH 255 // Maximum length of A2L filename with extension static char gXcpA2lName[XCP_A2L_FILENAME_MAX_LENGTH + 1] = ""; // A2L filename (without extension .a2l) // Set the A2L file (filename without extension .a2l) to be provided to the host for upload -void ApplXcpSetA2lName(const char *name) { +void XcpSetA2lName(const char *name) { assert(name != NULL && strlen(name) < XCP_A2L_FILENAME_MAX_LENGTH); STRNCPY(gXcpA2lName, name, XCP_A2L_FILENAME_MAX_LENGTH); @@ -428,11 +451,11 @@ void ApplXcpSetA2lName(const char *name) { if (dot != NULL) *dot = '\0'; // Null-terminate the string at the dot gXcpA2lName[XCP_A2L_FILENAME_MAX_LENGTH] = '\0'; // Ensure null-termination - DBG_PRINTF4("ApplXcpSetA2lName '%s'\n", name); + DBG_PRINTF4("XcpSetA2lName '%s'\n", name); } // Return the A2L name (without extension) -const char *ApplXcpGetA2lName(void) { return gXcpA2lName; } +const char *XcpGetA2lName(void) { return gXcpA2lName; } #ifdef XCP_ENABLE_IDT_A2L_UPLOAD // Enable GET_ID A2L content upload to host @@ -473,6 +496,7 @@ static uint32_t openA2lFile(void) { bool ApplXcpReadA2L(uint8_t size, uint32_t addr, uint8_t *data) { if (gXcpFile == NULL) return false; + assert(gXcpFile != NULL); if (addr + size > gXcpFileLength || size != fread(data, 1, (uint32_t)size, gXcpFile)) { closeA2lFile(); DBG_PRINTF_ERROR("ApplXcpReadA2L addr=%u size=%u exceeds file length=%u\n", addr, size, gXcpFileLength); @@ -498,8 +522,18 @@ uint32_t ApplXcpGetId(uint8_t id, uint8_t *buf, uint32_t bufLen) { uint32_t len = 0; switch (id) { - case IDT_ASCII: - case IDT_ASAM_NAME: + case IDT_ASCII: { + const char *project_name = XcpGetProjectName(); + len = (uint32_t)strlen(project_name); + if (buf) { + if (len >= bufLen - 1) + return 0; // Insufficient buffer space + STRNCPY((char *)buf, project_name, len); + } + DBG_PRINTF3("ApplXcpGetId GET_ID%u project_name=%s\n", id, project_name); + } break; + + case IDT_ASAM_NAME: { if (gXcpA2lName[0] == 0) return 0; len = (uint32_t)strlen(gXcpA2lName); @@ -508,10 +542,10 @@ uint32_t ApplXcpGetId(uint8_t id, uint8_t *buf, uint32_t bufLen) { return 0; // Insufficient buffer space STRNCPY((char *)buf, gXcpA2lName, len); } - DBG_PRINTF3("ApplXcpGetId GET_ID%u name=%s\n", id, gXcpA2lName); - break; + DBG_PRINTF3("ApplXcpGetId GET_ID%u a2l_name=%s\n", id, gXcpA2lName); + } break; - case IDT_ASAM_PATH: + case IDT_ASAM_PATH: { if (gXcpA2lName[0] == 0) return 0; len = (uint32_t)strlen(gXcpA2lName) + 4; @@ -520,8 +554,8 @@ uint32_t ApplXcpGetId(uint8_t id, uint8_t *buf, uint32_t bufLen) { return 0; // Insufficient buffer space SNPRINTF((char *)buf, bufLen, "%s.a2l", gXcpA2lName); } - DBG_PRINTF3("ApplXcpGetId GET_ID%u A2L path=%s\n", id, buf); - break; + DBG_PRINTF3("ApplXcpGetId GET_ID%u a2l_path=%s\n", id, buf); + } break; case IDT_ASAM_EPK: { const char *epk = XcpGetEpk(); @@ -539,16 +573,16 @@ uint32_t ApplXcpGetId(uint8_t id, uint8_t *buf, uint32_t bufLen) { } break; #ifdef XCP_ENABLE_IDT_A2L_UPLOAD - case IDT_ASAM_UPLOAD: + case IDT_ASAM_UPLOAD: { if (buf != NULL) return 0; // A2L not available as response buffer len = openA2lFile(); DBG_PRINTF3("ApplXcpGetId GET_ID%u A2L as upload (len=%u)\n", id, len); - break; + } break; #endif #ifdef XCP_ENABLE_IDT_A2L_HTTP_GET - case IDT_ASAM_URL: + case IDT_ASAM_URL: { if (buf) { uint8_t addr[4]; if (socketGetLocalAddr(NULL, addr)) { @@ -556,8 +590,16 @@ uint32_t ApplXcpGetId(uint8_t id, uint8_t *buf, uint32_t bufLen) { len = (uint32_t)strlen((char *)buf); } } - break; + } break; #endif + + /* + case IDT_ASAM_ECU: + case IDT_ASAM_SYSID: + case IDT_VECTOR_MAPNAMES: + case IDT_VECTOR_GET_A2LOBJECTS_FROM_ECU: + // Not implemented + */ } return len; } diff --git a/src/xcpEthServer.c b/src/xcpEthServer.c index fcd3c282..ce98f3d3 100644 --- a/src/xcpEthServer.c +++ b/src/xcpEthServer.c @@ -28,19 +28,21 @@ #include "xcpQueue.h" #include "xcptl_cfg.h" // for XCPTL_xxx -#if !defined(_WIN) && !defined(_LINUX) && !defined(_MACOS) -#error "Please define platform _WIN, _MACOS or _LINUX" +#if !defined(_WIN) && !defined(_LINUX) && !defined(_MACOS) && !defined(_QNX) +#error "Please define platform _WIN, _MACOS or _LINUX or _QNX" #endif + #if defined(_WIN) // Windows static DWORD WINAPI XcpServerReceiveThread(LPVOID lpParameter); -#elif defined(_LINUX) // Linux +#else static void *XcpServerReceiveThread(void *par); #endif #if defined(_WIN) // Windows static DWORD WINAPI XcpServerTransmitThread(LPVOID lpParameter); -#elif defined(_LINUX) // Linux +#else static void *XcpServerTransmitThread(void *par); #endif + #if !defined(OPTION_ENABLE_TCP) && !defined(OPTION_ENABLE_UDP) #error "Please define OPTION_ENABLE_TCP or OPTION_ENABLE_UDP" #endif @@ -75,7 +77,7 @@ bool XcpEthServerInit(const uint8_t *addr, uint16_t port, bool useTCP, uint32_t // Check and ignore, if the XCP singleton has not been initialized and activated if (!XcpIsActivated()) { - DBG_PRINT3("XcpEthServerInit: XCP not initialized and activated!\n"); + DBG_PRINT3("XcpEthServerInit: XCP is deactivated!\n"); return true; } @@ -157,7 +159,7 @@ bool XcpEthServerShutdown(void) { // XCP server unicast command receive thread #if defined(_WIN) // Windows DWORD WINAPI XcpServerReceiveThread(LPVOID par) -#elif defined(_LINUX) // Linux +#else extern void *XcpServerReceiveThread(void *par) #endif { @@ -183,7 +185,7 @@ extern void *XcpServerReceiveThread(void *par) // XCP server transmit thread #if defined(_WIN) // Windows DWORD WINAPI XcpServerTransmitThread(LPVOID par) -#elif defined(_LINUX) // Linux +#else extern void *XcpServerTransmitThread(void *par) #endif { diff --git a/src/xcpEthServer.h b/src/xcpEthServer.h index 2686d94e..f197d114 100644 --- a/src/xcpEthServer.h +++ b/src/xcpEthServer.h @@ -23,7 +23,7 @@ /// @param use_tcp Use TCP if true, otherwise UDP. /// @param measurement_queue_size Measurement queue size in bytes. Includes the bytes occupied by the queue header and some space needed for alignment. /// @return true on success, otherwise false. -bool XcpEthServerInit(uint8_t const *address, uint16_t port, bool use_tcp, uint32_t measurement_queue_size); +bool XcpEthServerInit(const uint8_t *address, uint16_t port, bool use_tcp, uint32_t measurement_queue_size); /// Shutdown the XCP on Ethernet server. bool XcpEthServerShutdown(void); diff --git a/src/xcpEthTl.c b/src/xcpEthTl.c index 7ee57187..29ba2acd 100644 --- a/src/xcpEthTl.c +++ b/src/xcpEthTl.c @@ -119,6 +119,10 @@ static int XcpEthTlSend(const uint8_t *data, uint16_t size, const uint8_t *addr, assert(data != NULL); DBG_PRINTF5("XcpEthTlSend: msg_len = %u\n", size); +#ifdef OPTION_ENABLE_DBG_METRICS + gXcpTxPacketCount++; +#endif + #ifdef XCPTL_ENABLE_TCP if (isTCP()) { r = socketSend(gXcpTl.Sock, data, size); @@ -288,6 +292,10 @@ bool XcpEthTlHandleCommands(uint32_t timeout_ms) { (void)timeout_ms; assert((!gXcpTl.blockingRx && timeout_ms == 0) || (gXcpTl.blockingRx && timeout_ms == XCPTL_TIMEOUT_INFINITE)); +#ifdef OPTION_ENABLE_DBG_METRICS + gXcpRxPacketCount++; +#endif + #ifdef XCPTL_ENABLE_TCP if (isTCP()) { @@ -363,7 +371,7 @@ static int handleXcpMulticastCommand(int n, tXcpCtoMessage *p, uint8_t *dstAddr, (void)dstAddr; (void)dstPort; - // @@@@ TODO: Check addr and cluster id and port + // @@@@ TODO: Check multicast addr and cluster id and port // printf("MULTICAST: %u.%u.%u.%u:%u len=%u\n", dstAddr[0], dstAddr[1], dstAddr[2], dstAddr[3], dstPort, n); // Valid socket data received, at least transport layer header and 1 byte @@ -382,13 +390,13 @@ void XcpEthTlSetClusterId(uint16_t clusterId) { // Not implemented } -#if !defined(_WIN) && !defined(_LINUX) && !defined(_MACOS) -#error "Please define platform _WIN, _MACOS or _LINUX" +#if !defined(_WIN) && !defined(_LINUX) && !defined(_MACOS) && !defined(_QNX) +#error "Please define platform _WIN, _MACOS or _LINUX or _QNX" #endif #if defined(_WIN) // Windows DWORD WINAPI XcpTlMulticastThread(LPVOID par) -#elif defined(_LINUX) // Linux +#else extern void *XcpTlMulticastThread(void *par) #endif { @@ -573,8 +581,8 @@ void XcpEthTlGetInfo(bool *isTcp, uint8_t *mac, uint8_t *addr, uint16_t *port) { int32_t XcpTlHandleTransmitQueue(void) { // Simply polling transmit queue - // @@@@ TODO Optimize efficiency, use a condvar or something like that to wakeup/sleep the transmit thread - // @@@@ TODO Eliminate the mutex + // @@@@ TODO: Optimize efficiency, use a condvar or something like that to wakeup/sleep the transmit thread + // @@@@ TODO: Eliminate the mutex // This is needed to assure XCP transport layer header counter consistency among response and DAQ packets // In fact this is a XCP design flaw, CANape supports independent DAQ and response packet counters, but other tools don't @@ -592,6 +600,14 @@ int32_t XcpTlHandleTransmitQueue(void) { const uint32_t outer_loop_sleep_ms = 1; // Sleep time in ms for each outer loop #endif +// @@@@ TODO: This is too early, when the server is started before A2lInit !!!!!!!!!!!!! +#if defined(OPTION_DAQ_ASYNC_EVENT) && defined(XCP_ENABLE_DAQ_EVENT_LIST) + static tXcpEventId gXcpAsyncEvent = XCP_UNDEFINED_EVENT_ID; + if (gXcpAsyncEvent == XCP_UNDEFINED_EVENT_ID) { + gXcpAsyncEvent = XcpCreateEvent("async", outer_loop_sleep_ms * CLOCK_TICKS_PER_MS, 0); + } +#endif + int32_t n = 0; // Number of bytes sent bool flush = false; // Flush queue in regular intervals @@ -636,6 +652,10 @@ int32_t XcpTlHandleTransmitQueue(void) { } sleepMs(outer_loop_sleep_ms); +#if defined(OPTION_DAQ_ASYNC_EVENT) && defined(XCP_ENABLE_DAQ_EVENT_LIST) + XcpEvent(gXcpAsyncEvent); +#endif + } // for(j) return n; } diff --git a/src/xcpLite.c b/src/xcpLite.c index de5cbd1f..f35b9d67 100644 --- a/src/xcpLite.c +++ b/src/xcpLite.c @@ -4,7 +4,7 @@ | | Description: | Implementation of the ASAM XCP Protocol Layer V1.4 -| Version V0.9.2 +| Version V1.0.0 | - Designed and optimized for 64 bit POSIX based platforms (Linux or MacOS) | - Tested on x86 strong and ARM weak memory model | - Can be adapted for 32 bit platforms @@ -22,7 +22,6 @@ | - Only dynamic DAQ list allocation supported | - Resume is not supported | - Overload indication by event is not supported -| - DAQ does not support prescaler | - ODT optimization not supported | - Seed & key is not supported | - Flash programming is not supported @@ -57,6 +56,7 @@ #include // for assert #include // for PRIx32, PRIu64 +#include // for va_list, va_start, va_arg, va_end #include // for bool #include // for uint8_t, uint16_t, uint32_t, int32_t, uin... #include // for printf @@ -64,7 +64,7 @@ #include // for memcpy, memset, strlen #include "dbg_print.h" // for DBG_LEVEL, DBG_PRINT3, DBG_PRINTF4, DBG... -#include "persistency.h" // for XcpBinFreezeCalSeg +#include "persistence.h" // for XcpBinFreezeCalSeg #include "platform.h" // for atomics #include "xcp.h" // XCP protocol definitions #include "xcpEthTl.h" // for transport layer XcpTlWaitForTransmitQueueEmpty and XcpTlSendCrm @@ -130,6 +130,42 @@ #define XCP_MAX_DAQ_COUNT 256 #endif +/* Check length of of names with null termination must be even*/ +#if XCP_EPK_MAX_LENGTH & 1 == 0 || XCP_EPK_MAX_LENGTH >= 128 +#error "XCP_EPK_MAX_LENGTH must be <128 and odd for null termination" +#endif + +#if XCP_MAX_EVENT_NAME & 1 == 0 || XCP_MAX_EVENT_NAME >= 128 +#error "XCP_MAX_EVENT_NAME must be <128 and odd for null termination" +#endif + +/****************************************************************************/ +/* XCPlite memoryy signature (XCPLITE__XXXXX) */ +/****************************************************************************/ + +// Current supported addressing schemes are: +// For the Rust wrapper: XCP_ADDRESS_MODE_XCPLITE__C_DR +// For A2L-Toolset compatibility: Absolute addressing mode - XCP_ADDRESS_MODE_XCPLITE__ACSDD +// Default: Segment relative addressing mode - XCP_ADDRESS_MODE_XCPLITE__CASDD +#ifdef XCP_ADDRESS_MODE_XCPLITE__C_DR +#ifndef _WIN +__attribute__((used)) +#endif +uint16_t XCPLITE__C_DR = XCP_DRIVER_VERSION; +#elif defined(XCP_ADDRESS_MODE_XCPLITE__ACSDD) +#ifndef _WIN +__attribute__((used)) +#endif +const uint16_t XCPLITE__ACSDD = XCP_DRIVER_VERSION; +#elif defined(XCP_ADDRESS_MODE_XCPLITE__CASDD) +#ifndef _WIN +__attribute__((used)) +#endif +const uint16_t XCPLITE__CASDD = XCP_DRIVER_VERSION; +#else +#error "Please define one of XCP_ADDRESS_MODE_XCPLITE__C_DR, XCP_ADDRESS_MODE_XCPLITE__ACSDD, XCP_ADDRESS_MODE_XCPLITE__CASDD" +#endif + /****************************************************************************/ /* Protocol layer state data */ /****************************************************************************/ @@ -167,7 +203,11 @@ static uint8_t XcpAsyncCommand(bool async, const uint32_t *cmdBuf, uint8_t cmdLe #define DaqListAddrExt(i) gXcp.DaqLists->u.daq_list[i].addr_ext #define DaqListPriority(i) gXcp.DaqLists->u.daq_list[i].priority #ifdef XCP_MAX_EVENT_COUNT -#define DaqListFirst(event) gXcp.DaqLists->daq_first[event] +#ifdef XCP_ENABLE_DAQ_EVENT_LIST +#define DaqListFirst(event_id) gXcp.EventList.event[event_id].daq_first +#else +#define DaqListFirst(event_id) gXcp.DaqLists->daq_first[event_id] +#endif #define DaqListNext(daq) gXcp.DaqLists->u.daq_list[daq].next #endif @@ -201,19 +241,31 @@ static uint8_t XcpAsyncCommand(bool async, const uint32_t *cmdBuf, uint8_t cmdLe // Thread safe state checks #define isDaqRunning() atomic_load_explicit(&gXcp.DaqRunning, memory_order_relaxed) +/****************************************************************************/ +// Metrics +/****************************************************************************/ + +#ifdef OPTION_ENABLE_DBG_METRICS +uint32_t gXcpWritePendingCount = 0; +uint32_t gXcpCalSegPublishAllCount = 0; +uint32_t gXcpDaqEventCount = 0; +uint32_t gXcpTxPacketCount; +uint32_t gXcpRxPacketCount; +#endif + /****************************************************************************/ // Logging /****************************************************************************/ #if defined(OPTION_ENABLE_DBG_PRINTS) && !defined(OPTION_FIXED_DBG_LEVEL) && defined(OPTION_DEFAULT_DBG_LEVEL) -uint8_t gDebugLevel = OPTION_DEFAULT_DBG_LEVEL; +uint8_t gXcpDebugLevel = OPTION_DEFAULT_DBG_LEVEL; // Set the log level void XcpSetLogLevel(uint8_t level) { if (level > 3) - DBG_PRINTF_WARNING("Set log level %u -> %u\n", gDebugLevel, level); - gDebugLevel = level; + DBG_PRINTF_WARNING("Set log level %u -> %u\n", gXcpDebugLevel, level); + gXcpDebugLevel = level; } #else @@ -281,13 +333,37 @@ uint64_t XcpGetDaqStartTime(void) { return gXcp.DaqStartClock64; } uint32_t XcpGetDaqOverflowCount(void) { return gXcp.DaqOverflowCount; } +/**************************************************************************/ +/* Project/ECU name */ +/**************************************************************************/ + +// Set the project name +static void XcpSetProjectName(const char *name) { + + assert(name != NULL); + + size_t name_len = STRNLEN(name, XCP_PROJECT_NAME_MAX_LENGTH); + STRNCPY(gXcp.ProjectName, name, name_len); + gXcp.ProjectName[XCP_PROJECT_NAME_MAX_LENGTH] = 0; // Ensure null-termination + DBG_PRINTF3("Project Name = '%s'\n", gXcp.ProjectName); +} + +// Get the project name +const char *XcpGetProjectName(void) { + if (STRNLEN(gXcp.ProjectName, XCP_PROJECT_NAME_MAX_LENGTH) == 0) + return NULL; + return gXcp.ProjectName; +} + /**************************************************************************/ /* EPK version string */ /**************************************************************************/ -// Set/get the EPK (A2l file version string) -void XcpSetEpk(const char *epk) { +// Set the EPK +static void XcpSetEpk(const char *epk) { + assert(epk != NULL); + size_t epk_len = STRNLEN(epk, XCP_EPK_MAX_LENGTH); STRNCPY(gXcp.Epk, epk, epk_len); gXcp.Epk[XCP_EPK_MAX_LENGTH] = 0; // Ensure null-termination @@ -299,6 +375,8 @@ void XcpSetEpk(const char *epk) { } DBG_PRINTF3("EPK = '%s'\n", gXcp.Epk); } + +// Get the EPK const char *XcpGetEpk(void) { if (STRNLEN(gXcp.Epk, XCP_EPK_MAX_LENGTH) == 0) return NULL; @@ -311,6 +389,10 @@ const char *XcpGetEpk(void) { #ifdef XCP_ENABLE_CALSEG_LIST +#if XCP_MAX_CALSEG_NAME & 1 == 0 || XCP_MAX_CALSEG_NAME >= 128 +#error "XCP_MAX_CALSEG_NAME must be <128 and odd for null termination" +#endif + // Initialize the calibration segment list static void XcpInitCalSegList(void) { gXcp.CalSegList.count = 0; @@ -342,11 +424,17 @@ static void XcpFreeCalSegList(void) { } // Get a pointer to the list and the size of the list -tXcpCalSegList const *XcpGetCalSegList(void) { +const tXcpCalSegList *XcpGetCalSegList(void) { assert(isInitialized()); return &gXcp.CalSegList; } +// Get the number of calibration segments +uint16_t XcpGetCalSegCount(void) { + assert(isInitialized()); + return gXcp.CalSegList.count; +} + // Get a pointer to the calibration segment struct of calseg index tXcpCalSeg *XcpGetCalSeg(tXcpCalSegIndex calseg) { assert(isInitialized()); @@ -367,6 +455,18 @@ tXcpCalSegIndex XcpFindCalSeg(const char *name) { return XCP_UNDEFINED_CALSEG; // Not found } +// Get the index of a calibration segment by address (inside of the default page) +tXcpCalSegIndex XcpFindCalSegByAddr(uint8_t *addr) { + assert(isInitialized()); + for (tXcpCalSegIndex i = 0; i < gXcp.CalSegList.count; i++) { + tXcpCalSeg *calseg = &gXcp.CalSegList.calseg[i]; + if (addr >= calseg->default_page && addr < calseg->default_page + calseg->size) { + return i; + } + } + return XCP_UNDEFINED_CALSEG; // Not found +} + // Get the name of the calibration segment const char *XcpGetCalSegName(tXcpCalSegIndex calseg) { assert(isInitialized()); @@ -374,11 +474,25 @@ const char *XcpGetCalSegName(tXcpCalSegIndex calseg) { return gXcp.CalSegList.calseg[calseg].name; } -// Get the XCP/A2L address (address mode XCP_ADDR_MODE_SEG) of a calibration segment +// Get the size of a calibration segment +uint16_t XcpGetCalSegSize(tXcpCalSegIndex calseg) { + assert(isInitialized()); + assert(calseg < gXcp.CalSegList.count); + return gXcp.CalSegList.calseg[calseg].size; +} + +// Get the XCP/A2L address (address mode XCP_ADDR_MODE_SEG or XCP_ADDR_MODE_ABS) of a calibration segment uint32_t XcpGetCalSegBaseAddress(tXcpCalSegIndex calseg) { assert(isInitialized()); assert(calseg < gXcp.CalSegList.count); +#if XCP_ADDR_EXT_SEG == 0x00 // Memory segments are addressed in relative mode return XcpAddrEncodeSegIndex(calseg, 0); +#else // Memory segments are addressed in absolute mode +#if defined(XCP_ENABLE_ABS_ADDRESSING) && XCP_ADDR_EXT_ABS != 0x00 +#error "XCP_ADDR_EXT_ABS must be 0x00" +#endif + return XcpAddrEncodeAbs(gXcp.CalSegList.calseg[calseg].default_page); +#endif } // Create a calibration segment @@ -401,12 +515,12 @@ tXcpCalSegIndex XcpCreateCalSeg(const char *name, const void *default_page, uint tXcpCalSeg *c = NULL; tXcpCalSegIndex index = XcpFindCalSeg(name); if (index != XCP_UNDEFINED_CALSEG) { -#ifdef XCP_ENABLE_FREEZE_CAL_PAGE +#ifdef XCP_ENABLE_CAL_PERSISTENCE // Check if this is a preloaded segment // Preloaded segments have the correct size and a valid default page, loaded from the binary calibration segment image file on startup c = &gXcp.CalSegList.calseg[index]; if (size == c->size && c->default_page != NULL && (c->mode & PAG_PROPERTY_PRELOAD) != 0) { - DBG_PRINTF3("Use preloaded CalSeg %u: %s index=%u, addr=0x%08X, size=%u\n", index, c->name, index, XcpGetCalSegBaseAddress(index), c->size); + DBG_PRINTF3("Use preloaded CalSeg %u: %s index=%u, size=%u\n", index, c->name, index, c->size); } else #endif { @@ -424,10 +538,10 @@ tXcpCalSegIndex XcpCreateCalSeg(const char *name, const void *default_page, uint c->name[XCP_MAX_CALSEG_NAME] = 0; c->size = size; c->default_page = (uint8_t *)default_page; -#ifdef XCP_ENABLE_FREEZE_CAL_PAGE +#ifdef XCP_ENABLE_CAL_PERSISTENCE c->file_pos = 0; #endif - DBG_PRINTF3("Create CalSeg %u: %s index=%u, addr=0x%08X, size=%u\n", index, c->name, index, XcpGetCalSegBaseAddress(index), c->size); + DBG_PRINTF3("Create CalSeg %u: %s index=%u, size=%u\n", index, c->name, index, c->size); } // Init @@ -438,41 +552,81 @@ tXcpCalSegIndex XcpCreateCalSeg(const char *name, const void *default_page, uint atomic_store_explicit(&c->ecu_page_next, (uintptr_t)NULL, memory_order_relaxed); c->write_pending = false; c->xcp_access = XCP_CALPAGE_DEFAULT_PAGE; // Default page for XCP access - atomic_store_explicit(&c->ecu_access, XCP_CALPAGE_DEFAULT_PAGE, memory_order_relaxed); // Default page for ECU access + atomic_store_explicit(&c->ecu_access, XCP_CALPAGE_DEFAULT_PAGE, memory_order_relaxed); // Default page for ECU access if XCP is not activated atomic_store_explicit(&c->lock_count, 0, memory_order_relaxed); // No locks -#ifdef XCP_ENABLE_FREEZE_CAL_PAGE - c->mode = 0; // Default mode is freeze not enabled, set by XCP command SET_SEGMENT_MODE -#endif // Allocate the working page and initialize RCU, if XCP has been activated if (isActivated()) { - // Allocate the ecu working page (RAM page) - c->xcp_page = malloc(size); - memcpy(c->xcp_page, c->default_page, size); // Copy default page to XCP working page copy - - // Allocate the xcp page + // Allocate the ECU working page (RAM page) c->ecu_page = malloc(size); memcpy(c->ecu_page, c->default_page, size); // Copy default page to ECU working page copy + // Allocate the xcp working page (RAM page) +#if defined(XCP_ENABLE_CAL_PERSISTENCE) && defined(XCP_ENABLE_REFERENCE_PAGE_PERSISTENCE) +// No persistence possible in absolute segment addressing mode +#if defined(XCP_ENABLE_ABS_ADDRESSING) && XCP_ADDR_EXT_ABS == 0 +#error "XCP_ENABLE_REFERENCE_PAGE_PERSISTENCE requires segment relative addressing mode!" +#endif + + // Reference page persistence + // Allocate the working page + c->xcp_page = malloc(size); + memcpy(c->xcp_page, c->default_page, size); // Copy default page to working page + if (c->mode & PAG_PROPERTY_PRELOAD) { + DBG_PRINTF3("Persistence data loaded into reference page of CalSeg %u: %s size=%u\n", index, c->name, c->size); + } +#else // XCP_ENABLE_REFERENCE_PAGE_PERSISTENCE + + // Working page persistence + // If it is a preloaded segment with a heap allocated default page, use this default page as XCP working page +#ifdef XCP_ENABLE_CAL_PERSISTENCE + if (c->mode & PAG_PROPERTY_PRELOAD) { + c->xcp_page = (uint8_t *)c->default_page; // Swap XCP working page and preloaded default page + c->default_page = default_page; + memcpy(c->ecu_page, c->xcp_page, size); // Copy XCP working page to ECU working page copy as well + DBG_PRINTF3("Persistence data loaded into working page of CalSeg %u: %s addr=0x%08X, size=%u\n", index, c->name, XcpGetCalSegBaseAddress(index), c->size); + } else +#endif + // else allocate and initialize the working page + { + + // Allocate the XCP working page + c->xcp_page = malloc(size); + memcpy(c->xcp_page, default_page, size); // Copy default page to working page + } +#endif // !XCP_ENABLE_REFERENCE_PAGE_PERSISTENCE + // Allocate a free uninitialized page atomic_store_explicit(&c->free_page, (uintptr_t)malloc(size), memory_order_relaxed); // New ECU page version not updated atomic_store_explicit(&c->ecu_page_next, (uintptr_t)c->ecu_page, memory_order_relaxed); +#ifdef XCP_START_ON_REFERENCE_PAGE + // Enable access to the reference page + c->xcp_access = XCP_CALPAGE_DEFAULT_PAGE; // Default page for XCP access is the reference page + atomic_store_explicit(&c->ecu_access, XCP_CALPAGE_DEFAULT_PAGE, memory_order_relaxed); // Default page for ECU access is the reference page +#else // Enable access to the working page c->xcp_access = XCP_CALPAGE_WORKING_PAGE; // Default page for XCP access is the working page atomic_store_explicit(&c->ecu_access, XCP_CALPAGE_WORKING_PAGE, memory_order_relaxed); // Default page for ECU access is the working page - // No write pending +#endif } +#ifdef XCP_ENABLE_CAL_PERSISTENCE + c->mode = 0; // Default mode is freeze not enabled, set by XCP command SET_SEGMENT_MODE, clear the preloaded flag +#endif + mutexUnlock(&gXcp.CalSegList.mutex); return index; } // Lock a calibration segment and return a pointer to the ECU page -uint8_t const *XcpLockCalSeg(tXcpCalSegIndex calseg) { +// Thread safe +// Shared atomic state is lock_count, ecu_page_next, free_page, ecu_access +// Shared non atomic is ecu_page, free_page_hazard, release on free_page +const uint8_t *XcpLockCalSeg(tXcpCalSegIndex calseg) { assert(isInitialized()); @@ -494,15 +648,18 @@ uint8_t const *XcpLockCalSeg(tXcpCalSegIndex calseg) { // Update if there is a new page version, free the old page uint8_t *ecu_page_next = (uint8_t *)atomic_load_explicit(&c->ecu_page_next, memory_order_acquire); - if (c->ecu_page != ecu_page_next) { + uint8_t *ecu_page = c->ecu_page; + if (ecu_page != ecu_page_next) { c->free_page_hazard = true; // Free page might be acquired by some other thread, since we got the first lock on this segment - atomic_store_explicit(&c->free_page, (uintptr_t)c->ecu_page, memory_order_release); c->ecu_page = ecu_page_next; + atomic_store_explicit(&c->free_page, (uintptr_t)ecu_page, memory_order_release); } else { c->free_page_hazard = false; // There was no lock and no need for update, free page must be safe now, if there is one } } + // DBG_PRINTF5("CalSeg %u: %s locked, ecu_access=%u\n", calseg, c->name, atomic_load_explicit(&c->ecu_access, memory_order_relaxed)); + // Return the active ECU page (RAM or FLASH) if (atomic_load_explicit(&c->ecu_access, memory_order_relaxed) != XCP_CALPAGE_WORKING_PAGE) { return c->default_page; @@ -512,6 +669,8 @@ uint8_t const *XcpLockCalSeg(tXcpCalSegIndex calseg) { } // Unlock a calibration segment +// Thread safe +// Shared state is lock_count void XcpUnlockCalSeg(tXcpCalSegIndex calseg) { if (!isActivated()) @@ -528,28 +687,13 @@ void XcpUnlockCalSeg(tXcpCalSegIndex calseg) { // XCP client memory read // Read xcp or default page // Read ecu page is not supported, calibration changes might be stale +// Single threaded function, called from XcpCommand on the XCP server thread static uint8_t XcpCalSegReadMemory(uint32_t src, uint16_t size, uint8_t *dst) { // Decode the source address into calibration segment and offset uint16_t calseg = XcpAddrDecodeSegNumber(src); // Get the calibration segment number from the address uint16_t offset = XcpAddrDecodeSegOffset(src); // Get the offset within the calibration segment -// Check for EPK read access -#ifdef XCP_ENABLE_EPK_CALSEG - if (calseg == 0) { - const char *epk = XcpGetEpk(); - if (epk != NULL) { - uint16_t epk_len = (uint16_t)strlen(epk); - if (size + offset <= epk_len) { - memcpy(dst, epk + offset, size); - return CRC_CMD_OK; - } - } - return CRC_ACCESS_DENIED; - } - calseg--; // Adjust for EPK segment at index 0 -#endif - if (calseg >= gXcp.CalSegList.count) { DBG_PRINTF_ERROR("invalid calseg index %u\n", calseg); return CRC_ACCESS_DENIED; @@ -565,11 +709,13 @@ static uint8_t XcpCalSegReadMemory(uint32_t src, uint16_t size, uint8_t *dst) { } // Publish a modified calibration segment +// Single threaded function, called from XcpCalSegPublishAll or XcpCalSegWriteMemory on the XCP server thread // Option to wait for this, or return unsuccessful with CRC_CMD_PENDING static uint8_t XcpCalSegPublish(tXcpCalSeg *c, bool wait) { // Try allocate a new xcp page // Im a multithreaded consumer use case, we must be sure the free page is really not in use anymore // We simply wait until all threads are updated, this is theoretically not free of starvation, but calibration changes are slow + // Aquire/release semantics with XcpCalSegLock on the free page pointer uint8_t *free_page = (uint8_t *)atomic_load_explicit(&c->free_page, memory_order_acquire); if (wait) { // Wait and delay the XCP server receive thread, until a free page becomes available @@ -584,6 +730,10 @@ static uint8_t XcpCalSegPublish(tXcpCalSeg *c, bool wait) { } else { if (free_page == NULL || c->free_page_hazard) { DBG_PRINTF5("Can not update calibration changes of %s yet\n", c->name); + c->write_pending = true; +#ifdef OPTION_ENABLE_DBG_METRICS + gXcpWritePendingCount++; +#endif return CRC_CMD_PENDING; // No free page available } } @@ -598,6 +748,8 @@ static uint8_t XcpCalSegPublish(tXcpCalSeg *c, bool wait) { c->xcp_page = xcp_page_new; // Publish the old xcp page + // Acquire/release semantics with XcpCalSegLock on the ecu_page_next pointer + c->write_pending = false; // No longer pending atomic_store_explicit(&c->ecu_page_next, (uintptr_t)xcp_page_old, memory_order_release); return CRC_CMD_OK; @@ -605,6 +757,7 @@ static uint8_t XcpCalSegPublish(tXcpCalSeg *c, bool wait) { // Publish all modified calibration segments // Must be call from the same thread that calles XcpCommend +// Returns CRC_CMD_OK if all segments have been published uint8_t XcpCalSegPublishAll(bool wait) { uint8_t res = CRC_CMD_OK; // If no atomic calibration operation is in progress @@ -614,7 +767,9 @@ uint8_t XcpCalSegPublishAll(bool wait) { if (c->write_pending) { uint8_t res1 = XcpCalSegPublish(c, wait); if (res1 == CRC_CMD_OK) { - c->write_pending = false; +#ifdef OPTION_ENABLE_DBG_METRICS + gXcpCalSegPublishAllCount++; +#endif } else { res = res1; } @@ -631,14 +786,6 @@ static uint8_t XcpCalSegWriteMemory(uint32_t dst, uint16_t size, const uint8_t * uint16_t calseg = XcpAddrDecodeSegNumber(dst); uint16_t offset = XcpAddrDecodeSegOffset(dst); -#ifdef XCP_ENABLE_EPK_CALSEG - if (calseg == 0) { - DBG_PRINT_ERROR("invalid write access to calseg number 0 (EPK)\n"); - return CRC_ACCESS_DENIED; - } - calseg--; // Adjust for EPK segment at index 0 -#endif - if (calseg >= gXcp.CalSegList.count) { DBG_PRINTF_ERROR("invalid calseg number %u\n", calseg); return CRC_ACCESS_DENIED; @@ -660,20 +807,19 @@ static uint8_t XcpCalSegWriteMemory(uint32_t dst, uint16_t size, const uint8_t * // If write delayed, we do not update the ECU page yet if (gXcp.CalSegList.write_delayed) { c->write_pending = true; // Modified + return CRC_CMD_OK; } else { #ifdef XCP_ENABLE_CALSEG_LAZY_WRITE - // If lazy mode is enabled, we do not need to update the ECU page yet - uint8_t res = XcpCalSegPublish(c, false); - if (res) - c->write_pending = true; + // If lazy mode is enabled, try update, but we do not require to update the ECU page yet + XcpCalSegPublish(c, false); + return CRC_CMD_OK; #else // If not lazy mode, we wait until a free page is available - uint8_t res = XcpCalSegPublish(c, true); - if (res) - return res; + // This should succeed + return XcpCalSegPublish(c, true); + #endif } - return CRC_CMD_OK; } // Table 97 GET SEGMENT INFO command structure @@ -682,50 +828,6 @@ static uint8_t XcpCalSegWriteMemory(uint32_t dst, uint16_t size, const uint8_t * static uint8_t XcpGetSegInfo(tXcpCalSegNumber segment, uint8_t mode, uint8_t seg_info, uint8_t map_index) { (void)map_index; // Mapping not supported -// EPK segment (segment = 0) does not support calibration pages or mappings -// @@@@ TODO: better handling if EPK is not set -#ifdef XCP_ENABLE_EPK_CALSEG - if (segment == 0) { - const char *epk = XcpGetEpk(); - if (epk == NULL) { - DBG_PRINT_ERROR("EPK segment not available\n"); - return CRC_OUT_OF_RANGE; - } - switch (mode) { - case 0: // Mode 0 - get get basic info (address, length or name) - CRM_LEN = CRM_GET_SEGMENT_INFO_LEN_MODE0; - if (seg_info == 0) { - CRM_GET_SEGMENT_INFO_BASIC_INFO = XCP_ADDR_EPK; // EPK segment address - return CRC_CMD_OK; - } else if (seg_info == 1) { - CRM_GET_SEGMENT_INFO_BASIC_INFO = strlen(epk); // EPK segment size - return CRC_CMD_OK; - } else if (seg_info == 2) { // EPK segment name (Vector extension, name via MTA and upload) - CRM_GET_SEGMENT_INFO_BASIC_INFO = 3; // Length of the name - gXcp.MtaPtr = (uint8_t *)"epk"; - gXcp.MtaExt = XCP_ADDR_EXT_PTR; - return CRC_CMD_OK; - } else { - return CRC_OUT_OF_RANGE; - } - break; - case 1: // Mode 1 - get standard info - CRM_LEN = CRM_GET_SEGMENT_INFO_LEN_MODE1; - CRM_GET_SEGMENT_INFO_MAX_PAGES = 1; - CRM_GET_SEGMENT_INFO_ADDRESS_EXTENSION = XCP_ADDR_EXT_EPK; - CRM_GET_SEGMENT_INFO_MAX_MAPPING = 0; - CRM_GET_SEGMENT_INFO_COMPRESSION = 0; - CRM_GET_SEGMENT_INFO_ENCRYPTION = 0; - return CRC_CMD_OK; - case 2: // Mode 2 - get mapping info not supported - return CRC_OUT_OF_RANGE; - default: // Illegal mode - return CRC_CMD_SYNTAX; - } - } - segment--; // Adjust for EPK segment at index 0 -#endif - tXcpCalSegIndex calseg = segment; if (segment >= gXcp.CalSegList.count) { DBG_PRINTF_ERROR("invalid segment index: %u\n", segment); @@ -740,10 +842,10 @@ static uint8_t XcpGetSegInfo(tXcpCalSegNumber segment, uint8_t mode, uint8_t seg CRM_GET_SEGMENT_INFO_BASIC_INFO = XcpGetCalSegBaseAddress(calseg); return CRC_CMD_OK; } else if (seg_info == 1) { // Get length - CRM_GET_SEGMENT_INFO_BASIC_INFO = c->size; + CRM_GET_SEGMENT_INFO_BASIC_INFO = (uint32_t)c->size; return CRC_CMD_OK; } else if (seg_info == 2) { // Get segment name (Vector extension, name via MTA and upload) - CRM_GET_SEGMENT_INFO_BASIC_INFO = strlen(c->name); + CRM_GET_SEGMENT_INFO_BASIC_INFO = (uint32_t)strlen(c->name); gXcp.MtaPtr = (uint8_t *)c->name; gXcp.MtaExt = XCP_ADDR_EXT_PTR; return CRC_CMD_OK; @@ -754,7 +856,7 @@ static uint8_t XcpGetSegInfo(tXcpCalSegNumber segment, uint8_t mode, uint8_t seg case 1: // Get standard info for this SEGMENT CRM_LEN = CRM_GET_SEGMENT_INFO_LEN_MODE1; CRM_GET_SEGMENT_INFO_MAX_PAGES = 2; - CRM_GET_SEGMENT_INFO_ADDRESS_EXTENSION = XCP_ADDR_EXT_SEG; + CRM_GET_SEGMENT_INFO_ADDRESS_EXTENSION = 0; // Address extension for segments is always 0 (SEG or ABS address mode) CRM_GET_SEGMENT_INFO_MAX_MAPPING = 0; CRM_GET_SEGMENT_INFO_COMPRESSION = 0; CRM_GET_SEGMENT_INFO_ENCRYPTION = 0; @@ -770,19 +872,15 @@ uint8_t XcpGetSegPageInfo(tXcpCalSegNumber segment, uint8_t page) { CRM_LEN = CRM_GET_PAGE_INFO_LEN; -#ifdef XCP_ENABLE_EPK_CALSEG - if (segment == 0) { - CRM_GET_PAGE_INFO_PROPERTIES = 0x0F; // EPK segment, write access not allowed, read access don't care - CRM_GET_PAGE_INFO_INIT_SEGMENT = 0; - return CRC_CMD_OK; - } - segment--; // Adjust for EPK segment at index 0 -#endif - if (segment >= gXcp.CalSegList.count) return CRC_OUT_OF_RANGE; +#ifdef XCP_ENABLE_CAL_PAGE // If GET/SET_CAL_PAGE enabled, support 2 pages if (page > 1) return CRC_PAGE_NOT_VALID; +#else + if (page != 0) + return CRC_PAGE_NOT_VALID; +#endif // PAGE 0: ECU_ACCESS_DONT_CARE, XCP_READ_ACCESS_DONT_CARE, XCP_WRITE_ACCESS_DONT_CARE // PAGE 1: ECU_ACCESS_DONT_CARE, XCP_READ_ACCESS_DONT_CARE, XCP_WRITE_ACCESS_NOT_ALLOWED @@ -795,7 +893,7 @@ uint8_t XcpGetSegPageInfo(tXcpCalSegNumber segment, uint8_t page) { return CRC_CMD_OK; } -#ifdef XCP_ENABLE_CAL_PAGE +#ifdef XCP_ENABLE_CAL_PAGE // Calibration page support with GET/SET_CAL_PAGE and COPY_CAL_PAGE enabled // Get active ecu or xcp calibration page // Note: XCP/A2L segment numbers are bytes, 0 is reserved for the EPK segment, tXcpCalSegIndex is the XCP/A2L segment number - 1 @@ -804,12 +902,6 @@ static uint8_t XcpCalSegGetCalPage(tXcpCalSegNumber segment, uint8_t mode) { DBG_PRINTF_ERROR("invalid segment number: %u\n", segment); return XCP_CALPAGE_INVALID_PAGE; } -#ifdef XCP_ENABLE_EPK_CALSEG - if (segment == 0) { - return XCP_CALPAGE_DEFAULT_PAGE; // EPK segment does not have calibration pages - } - segment--; // Adjust for EPK segment at index 0 -#endif if (mode == CAL_PAGE_MODE_ECU) { return (uint8_t)atomic_load_explicit(&gXcp.CalSegList.calseg[segment].ecu_access, memory_order_relaxed); } @@ -822,7 +914,7 @@ static uint8_t XcpCalSegGetCalPage(tXcpCalSegNumber segment, uint8_t mode) { // Set active ecu and/or xcp calibration page // Note: XCP/A2L segment numbers are bytes, 0 is reserved for the EPK segment, tXcpCalSegIndex is the XCP/A2L segment number - 1 -static uint8_t XcpCalSegSetCalPage(tXcpCalSegNumber segment, uint8_t page, uint8_t mode) { +uint8_t XcpCalSegSetCalPage(tXcpCalSegNumber segment, uint8_t page, uint8_t mode) { if (page > 1) { DBG_PRINTF_ERROR("invalid cal page number %u\n", page); return CRC_ACCESS_DENIED; // Invalid calseg @@ -838,13 +930,6 @@ static uint8_t XcpCalSegSetCalPage(tXcpCalSegNumber segment, uint8_t page, uint8 } } else { -#ifdef XCP_ENABLE_EPK_CALSEG - if (segment == 0) { - return CRC_ACCESS_DENIED; // EPK segment does not have calibration pages - } - segment--; // Adjust for EPK segment at index 0 -#endif - if (segment >= gXcp.CalSegList.count) { DBG_PRINTF_ERROR("invalid segment index %u\n", segment); return CRC_ACCESS_DENIED; // Invalid calseg @@ -864,31 +949,16 @@ static uint8_t XcpCalSegSetCalPage(tXcpCalSegNumber segment, uint8_t page, uint8 #ifdef XCP_ENABLE_COPY_CAL_PAGE static uint8_t XcpCalSegCopyCalPage(tXcpCalSegNumber srcSeg, uint8_t srcPage, tXcpCalSegNumber dstSeg, uint8_t dstPage) { -#ifdef XCP_ENABLE_EPK_CALSEG - if (srcSeg == 0) { - return CRC_ACCESS_DENIED; // EPK segment does not have calibration pages - } - srcSeg--; // Adjust for EPK segment at index 0 -#endif - // Only copy from default page to working page supported if (srcSeg != dstSeg || srcSeg >= gXcp.CalSegList.count || dstPage != XCP_CALPAGE_WORKING_PAGE || srcPage != XCP_CALPAGE_DEFAULT_PAGE) { - DBG_PRINT_ERROR("invalid calseg copy operation\n"); + DBG_PRINT_ERROR("unsupported or invalid calseg copy operation\n"); return CRC_WRITE_PROTECTED; } - // @@@@ TODO: CANape does not support individual segment copy operations, copy all segments at once +#ifdef XCP_ENABLE_COPY_CAL_PAGE_WORKAROUND - // if (dstSeg >= 1) { - // tXcpCalSeg *c = &gXcp.CalSegList.calseg[dstSeg - 1]; - // uint16_t size = c->size; - // const uint8_t *srcPtr = c->default_page; - // return XcpCalSegWriteMemory(XcpAddrEncodeSegNumber(dstSeg, 0), size, srcPtr); - // } else { - // return CRC_WRITE_PROTECTED; // Copy operation on EPK segment - // } - - // Copy all segments from default page to working page + // Older CANapes < 24SP1 do not send individual segment copy operations for each segment + // Copy all existing segments from default page to working page, ignoring srcSeg/dstSeg for (tXcpCalSegIndex i = 0; i < gXcp.CalSegList.count; i++) { tXcpCalSeg *c = &gXcp.CalSegList.calseg[i]; uint16_t size = c->size; @@ -899,8 +969,18 @@ static uint8_t XcpCalSegCopyCalPage(tXcpCalSegNumber srcSeg, uint8_t srcPage, tX } } return CRC_CMD_OK; -} + +#else + + tXcpCalSeg *c = &gXcp.CalSegList.calseg[dstSeg]; + uint16_t size = c->size; + const uint8_t *srcPtr = c->default_page; + return XcpCalSegWriteMemory(XcpAddrEncodeSegNumber(dstSeg, 0), size, srcPtr); + #endif +} +#endif // XCP_ENABLE_COPY_CAL_PAGE +#endif // XCP_ENABLE_CAL_PAGE // Handle atomic calibration segment commands #ifdef XCP_ENABLE_USER_COMMAND @@ -930,22 +1010,12 @@ uint8_t XcpCalSegCommand(uint8_t cmd) { #ifdef XCP_ENABLE_FREEZE_CAL_PAGE static uint8_t XcpGetCalSegMode(tXcpCalSegNumber segment) { -#ifdef XCP_ENABLE_EPK_CALSEG - if (segment == 0) - return 0; // EPK segment has no mode - segment--; // Adjust for EPK segment at index 0 -#endif if (segment >= gXcp.CalSegList.count) return 0; // Segment number out of range, ignore return gXcp.CalSegList.calseg[segment].mode; // Return the segment mode } static uint8_t XcpSetCalSegMode(tXcpCalSegNumber segment, uint8_t mode) { -#ifdef XCP_ENABLE_EPK_CALSEG - if (segment == 0) - return CRC_CMD_OK; // EPK segment has no mode - segment--; // Adjust for EPK segment at index 0 -#endif if (segment >= gXcp.CalSegList.count) return CRC_OUT_OF_RANGE; // Segment number out of range gXcp.CalSegList.calseg[segment].mode = mode; @@ -982,8 +1052,6 @@ void XcpResetAllCalSegs(void) { #endif // XCP_ENABLE_FREEZE_CAL_PAGE -#endif // XCP_ENABLE_CAL_PAGE - #endif // XCP_ENABLE_CALSEG_LIST /****************************************************************************/ @@ -993,16 +1061,16 @@ void XcpResetAllCalSegs(void) { /* XcpWriteMta is not performance critical, but critical for data consistency. It is used to modify calibration variables. -When using memcpy, it is not guaranteed that is uses multibyte move operations specifically for alignment to provide thread safety. -Its primary responsibility is only to copy memory. Any considerations regarding thread safety must be explicitly managed. -This is also a requirement to the tool, which must ensure that the data is consistent by choosing the right granularity for DOWNLOAD and SHORT_DOWNLOAD operations. +For size 1, 2, 4, 8 it uses single "atomic" writes assuming valid aligned target memory locations. +Its responsibility is only to copy memory. Any considerations regarding thread safety must be explicitly managed. +This is alsoa requirement to the tool, which must ensure that the data is consistent by choosing the right granularity for DOWNLOAD and SHORT_DOWNLOAD operations. */ // Copy of size bytes from data to gXcp.MtaPtr or gXcp.MtaAddr depending on the addressing mode uint8_t XcpWriteMta(uint8_t size, const uint8_t *data) { +#ifdef XCP_ENABLE_SEG_ADDRESSING // EXT == XCP_ADDR_EXT_SEG calibration segment memory access -#ifdef XCP_ENABLE_CALSEG_LIST if (XcpAddrIsSeg(gXcp.MtaExt)) { uint8_t res = XcpCalSegWriteMemory(gXcp.MtaAddr, size, data); gXcp.MtaAddr += size; @@ -1010,8 +1078,8 @@ uint8_t XcpWriteMta(uint8_t size, const uint8_t *data) { } #endif - // EXT == XCP_ADDR_EXT_APP Application specific memory access #ifdef XCP_ENABLE_APP_ADDRESSING + // EXT == XCP_ADDR_EXT_APP Application specific memory access if (XcpAddrIsApp(gXcp.MtaExt)) { uint8_t res = ApplXcpWriteMemory(gXcp.MtaAddr, size, data); gXcp.MtaAddr += size; @@ -1032,7 +1100,7 @@ uint8_t XcpWriteMta(uint8_t size, const uint8_t *data) { // sleepUs(1); // } - // Fast write with atomic copies of basic types, assuming correctly aligned target memory locations + // Fast write with "atomic" copies of basic types, assuming correctly aligned target memory locations switch (size) { case 1: *gXcp.MtaPtr = *data; @@ -1060,8 +1128,8 @@ uint8_t XcpWriteMta(uint8_t size, const uint8_t *data) { // Copying of size bytes from data to gXcp.MtaPtr or gXcp.MtaAddr, depending on the addressing mode static uint8_t XcpReadMta(uint8_t size, uint8_t *data) { +#ifdef XCP_ENABLE_SEG_ADDRESSING // EXT == XCP_ADDR_EXT_SEG calibration segment memory access -#ifdef XCP_ENABLE_CALSEG_LIST if (XcpAddrIsSeg(gXcp.MtaExt)) { uint8_t res = XcpCalSegReadMemory(gXcp.MtaAddr, size, data); gXcp.MtaAddr += size; @@ -1069,8 +1137,8 @@ static uint8_t XcpReadMta(uint8_t size, uint8_t *data) { } #endif - // EXT == XCP_ADDR_EXT_APP Application specific memory access #ifdef XCP_ENABLE_APP_ADDRESSING + // EXT == XCP_ADDR_EXT_APP Application specific memory access if (XcpAddrIsApp(gXcp.MtaExt)) { uint8_t res = ApplXcpReadMemory(gXcp.MtaAddr, size, data); gXcp.MtaAddr += size; @@ -1078,7 +1146,7 @@ static uint8_t XcpReadMta(uint8_t size, uint8_t *data) { } #endif - // Ext == XCP_ADDR_EXT_ABS Standard memory access by absolute address pointer + // Ext == XCP_ADDR_EXT_PTR - Standard memory access by pointer if (gXcp.MtaExt == XCP_ADDR_EXT_PTR) { if (gXcp.MtaPtr == NULL) return CRC_ACCESS_DENIED; @@ -1087,8 +1155,8 @@ static uint8_t XcpReadMta(uint8_t size, uint8_t *data) { return 0; // Ok } - // Ext == XCP_ADDR_EXT_A2L A2L file upload address space #ifdef XCP_ENABLE_IDT_A2L_UPLOAD + // Ext == XCP_ADDR_EXT_A2L - A2L file upload address space if (gXcp.MtaExt == XCP_ADDR_EXT_A2L) { if (!ApplXcpReadA2L(size, gXcp.MtaAddr, data)) return CRC_ACCESS_DENIED; // Access violation @@ -1097,51 +1165,80 @@ static uint8_t XcpReadMta(uint8_t size, uint8_t *data) { } #endif - return CRC_ACCESS_DENIED; // Access violation, illegal address or extension + return CRC_ACCESS_DENIED; // Access violation, illegal address or addressing mode } // Set MTA +// Sets the memory transfer address in gXcp.MtaAddr/gXcp.MtaExt +// Absolute addressing mode: +// Converted to pointer addressing mode gXcp.MtaPtr=ApplXcpGetBaseAddr()+XcpAddrDecodeAbsOffset(gXcp.MtaAddr) and gXcp.MtaExt=XCP_ADDR_EXT_PTR +// EPK access is gXcp.MtaPtr=XcpGetEpk() and gXcp.MtaExt=XCP_ADDR_EXT_PTR +// Absolute access to calibration segments is converted to segment relative addressing mode gXcp.MtaExt=XCP_ADDR_EXT_SEG +// Other addressing mode are left unchanged +// Called by XCP commands SET_MTA, SHORT_DOWNLOAD and SHORT_UPLOAD uint8_t XcpSetMta(uint8_t ext, uint32_t addr) { gXcp.MtaExt = ext; gXcp.MtaAddr = addr; -#ifndef XCP_ENABLE_EPK_CALSEG + gXcp.MtaPtr = NULL; // MtaPtr not defined + + // If not EPK calibration segment or addressing mode 0 is absolute +#if !defined(XCP_ENABLE_EPK_CALSEG) || (defined(XCP_ENABLE_ABS_ADDRESSING) && (XCP_ADDR_EXT_ABS == 0)) // Direct EPK access if (gXcp.MtaExt == XCP_ADDR_EXT_EPK && gXcp.MtaAddr == XCP_ADDR_EPK) { gXcp.MtaPtr = (uint8_t *)XcpGetEpk(); gXcp.MtaExt = XCP_ADDR_EXT_PTR; - } else + return CRC_CMD_OK; + } #endif + #ifdef XCP_ENABLE_DYN_ADDRESSING - // Event relative addressing mode, MtaPtr unknown yet - if (XcpAddrIsDyn(gXcp.MtaExt)) { - gXcp.MtaPtr = NULL; // MtaPtr not used - } else + // Event relative addressing mode + if (XcpAddrIsDyn(gXcp.MtaExt)) { + return CRC_CMD_OK; + } #endif -#ifdef XCP_ENABLE_CALSEG_LIST - // Segment relative addressing mode - if (XcpAddrIsSeg(gXcp.MtaExt)) { - gXcp.MtaPtr = NULL; // MtaPtr not used - } else + +#ifdef XCP_ENABLE_REL_ADDRESSING + // Relative addressing mode + if (XcpAddrIsRel(gXcp.MtaExt)) { + return CRC_CMD_OK; + } #endif -#if defined(XCP_ENABLE_APP_ADDRESSING) - // Application specific addressing mode - if (XcpAddrIsApp(gXcp.MtaExt)) { - gXcp.MtaPtr = NULL; // MtaPtr not used - } else + +#ifdef XCP_ENABLE_SEG_ADDRESSING + // Segment relative addressing mode + if (XcpAddrIsSeg(gXcp.MtaExt)) { + return CRC_CMD_OK; + } +#endif + +#ifdef XCP_ENABLE_APP_ADDRESSING + // Application specific addressing mode + if (XcpAddrIsApp(gXcp.MtaExt)) { + return CRC_CMD_OK; + } #endif + #ifdef XCP_ENABLE_ABS_ADDRESSING - // Absolute addressing mode - if (XcpAddrIsAbs(gXcp.MtaExt)) { - gXcp.MtaPtr = ApplXcpGetBaseAddr() + gXcp.MtaAddr; - gXcp.MtaExt = XCP_ADDR_EXT_PTR; - } else -#endif - { - return CRC_OUT_OF_RANGE; // Unsupported addressing mode for direct memory access - } + // Absolute addressing mode + if (XcpAddrIsAbs(gXcp.MtaExt)) { + gXcp.MtaPtr = (uint8_t *)ApplXcpGetBaseAddr() + XcpAddrDecodeAbsOffset(gXcp.MtaAddr); + gXcp.MtaExt = XCP_ADDR_EXT_PTR; +#ifdef XCP_ENABLE_CALSEG_LIST + // Check for calibration segment absolute address (XcpSetMta is not performance critical) + tXcpCalSegIndex calseg = XcpFindCalSegByAddr(gXcp.MtaPtr); + if (calseg != XCP_UNDEFINED_CALSEG) { + tXcpCalSeg *c = &gXcp.CalSegList.calseg[calseg]; + gXcp.MtaExt = XCP_ADDR_EXT_SEG; + gXcp.MtaAddr = XcpAddrEncodeSegIndex(calseg, gXcp.MtaPtr - c->default_page); // Convert to segment relative address + } +#endif + return CRC_CMD_OK; + } +#endif - return CRC_CMD_OK; + return CRC_OUT_OF_RANGE; // Unsupported addressing mode } /**************************************************************************/ @@ -1152,7 +1249,7 @@ uint8_t XcpSetMta(uint8_t ext, uint32_t addr) { #ifdef XCP_ENABLE_CHECKSUM #if (XCP_CHECKSUM_TYPE == XCP_CHECKSUM_TYPE_CRC16CCITT) -static const uint16_t CRC16CCITTtab[256] = { +static const uint16_t gXcpCRC16CCITTtab[256] = { 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7u, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1efu, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6u, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3deu, 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485u, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58du, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4u, 0xb75b, 0xa77a, 0x9719, 0x8738, @@ -1182,7 +1279,7 @@ static uint8_t calcChecksum(uint32_t checksum_size, uint32_t *checksum_result) { uint8_t res = XcpReadMta(1, &value); if (res != CRC_CMD_OK) return res; - sum = CRC16CCITTtab[((uint8_t)(sum >> 8)) ^ value] ^ (uint16_t)(sum << 8); + sum = gXcpCRC16CCITTtab[((uint8_t)(sum >> 8)) ^ value] ^ (uint16_t)(sum << 8); } *checksum_result = (uint32_t)sum; @@ -1232,10 +1329,18 @@ tXcpEvent *XcpGetEvent(tXcpEventId event) { return &gXcp.EventList.event[event]; } -// Get the event name +// Get the full event name, including instance index postfix if applicable +// Result has lifetime until next call of XcpGetEventName() const char *XcpGetEventName(tXcpEventId event) { if (!isActivated() || event >= gXcp.EventList.count) return NULL; + tXcpEvent *e = &gXcp.EventList.event[event]; + if (e->index > 0) { + // Event instance, append instance index to the name + static char nameBuf[XCP_MAX_EVENT_NAME + 8]; + SNPRINTF(nameBuf, sizeof(nameBuf), "%s_%u", e->name, e->index); + return nameBuf; + } return (const char *)&gXcp.EventList.event[event].name; } @@ -1278,7 +1383,7 @@ tXcpEventId XcpCreateIndexedEvent(const char *name, uint16_t index, uint32_t cyc // Check name length size_t nameLen = STRNLEN(name, XCP_MAX_EVENT_NAME + 1); if (nameLen > XCP_MAX_EVENT_NAME) { - DBG_PRINTF_ERROR("event name '%.*s...' too long (%zu > %d chars)\n", XCP_MAX_EVENT_NAME, name, nameLen, XCP_MAX_EVENT_NAME); + DBG_PRINTF_ERROR("event name '%.*s' too long (%zu > %d chars)\n", XCP_MAX_EVENT_NAME, name, nameLen, XCP_MAX_EVENT_NAME); return XCP_UNDEFINED_EVENT_ID; } @@ -1294,6 +1399,11 @@ tXcpEventId XcpCreateIndexedEvent(const char *name, uint16_t index, uint32_t cyc STRNCPY(gXcp.EventList.event[e].name, name, XCP_MAX_EVENT_NAME); gXcp.EventList.event[e].name[XCP_MAX_EVENT_NAME] = 0; gXcp.EventList.event[e].priority = priority; +#ifdef XCP_ENABLE_DAQ_PRESCALER + gXcp.EventList.event[e].daq_prescaler = 0; + gXcp.EventList.event[e].daq_prescaler_cnt = 0; +#endif + gXcp.EventList.event[e].daq_first = XCP_UNDEFINED_DAQ_LIST; gXcp.EventList.event[e].cycleTimeNs = cycleTimeNs; DBG_PRINTF3("Create Event %u: %s index=%u, cycle=%uns, prio=%u\n", e, gXcp.EventList.event[e].name, index, cycleTimeNs, priority); return e; @@ -1310,7 +1420,7 @@ tXcpEventId XcpCreateEventInstance(const char *name, uint32_t cycleTimeNs, uint8 uint16_t count = 0; mutexLock(&gXcp.EventList.mutex); tXcpEventId id = XcpFindEvent(name, &count); - // @@@@ TODO use preloaded event instances instead of creating a new instance + // @@@@ TODO: use preloaded event instances instead of creating a new instance // Event instances have no identity, could use any unused preload event instance with this name id = XcpCreateIndexedEvent(name, count + 1, cycleTimeNs, priority); mutexUnlock(&gXcp.EventList.mutex); @@ -1368,11 +1478,16 @@ static void XcpClearDaq(void) { gXcp.DaqLists->res = 0xBEAC; #ifdef XCP_MAX_EVENT_COUNT - uint16_t event; - for (event = 0; event < XCP_MAX_EVENT_COUNT; event++) { +#ifdef XCP_ENABLE_DAQ_EVENT_LIST + for (uint16_t event = 0; event < gXcp.EventList.count; event++) { + gXcp.EventList.event[event].daq_first = XCP_UNDEFINED_DAQ_LIST; + } +#else + for (uint16_t event = 0; event < XCP_MAX_EVENT_COUNT; event++) { gXcp.DaqLists->daq_first[event] = XCP_UNDEFINED_DAQ_LIST; } #endif +#endif } // Check if there is sufficient memory for the values of DaqCount, OdtCount and OdtEntryCount @@ -1593,25 +1708,40 @@ static uint8_t XcpAddOdtEntry(uint32_t addr, uint8_t ext, uint8_t size) { // Set DAQ list mode // All DAQ lists associated with an event, must have the same address extension -static uint8_t XcpSetDaqListMode(uint16_t daq, uint16_t event, uint8_t mode, uint8_t prio) { +static uint8_t XcpSetDaqListMode(uint16_t daq, uint16_t event_id, uint8_t mode, uint8_t prescaler, uint8_t prio) { if (gXcp.DaqLists == NULL || daq >= gXcp.DaqLists->daq_count) return CRC_DAQ_CONFIG; +#ifndef XCP_ENABLE_DAQ_PRESCALER + if (prescaler > 1) + return CRC_OUT_OF_RANGE; // prescaler is not supported +#else + (void)prescaler; +#endif + #ifdef XCP_ENABLE_DAQ_EVENT_LIST - // If any events are registered, check if this event exists - if (gXcp.EventList.count > 0) { - tXcpEvent *e = XcpGetEvent(event); // Check if event exists - if (e == NULL) - return CRC_OUT_OF_RANGE; - } + // Check if this event exists + tXcpEvent *event = XcpGetEvent(event_id); // Check if event exists + if (event == NULL) + return CRC_OUT_OF_RANGE; + +// Set the prescaler to the associated event, individual prescaler per DAQ list are not supported +#ifdef XCP_ENABLE_DAQ_PRESCALER +#ifndef XCP_ENABLE_DAQ_EVENT_LIST +#error "XCP_ENABLE_DAQ_PRESCALER requires XCP_ENABLE_DAQ_EVENT_LIST" +#endif + event->daq_prescaler = prescaler; // Conflicts are not checked + event->daq_prescaler_cnt = 0; +#endif + #endif #ifdef XCP_ENABLE_DYN_ADDRESSING // Check if the DAQ list requires a specific event and it matches - uint16_t event0 = DaqListEventChannel(daq); - if (event0 != XCP_UNDEFINED_EVENT_ID && event != event0) + uint16_t event_id0 = DaqListEventChannel(daq); + if (event_id0 != XCP_UNDEFINED_EVENT_ID && event_id != event_id0) return CRC_DAQ_CONFIG; // Error event not unique // Check all DAQ lists with same event have the same address extension @@ -1628,14 +1758,14 @@ static uint8_t XcpSetDaqListMode(uint16_t daq, uint16_t event, uint8_t mode, uin #endif #endif - DaqListEventChannel(daq) = event; + DaqListEventChannel(daq) = event_id; DaqListMode(daq) = mode; DaqListPriority(daq) = prio; - // Add daq to linked list of daq lists already associated to this event + // Append daq to linked list of daq lists already associated to this event #ifdef XCP_MAX_EVENT_COUNT - uint16_t daq0 = DaqListFirst(event); - uint16_t *daq0_next = &DaqListFirst(event); + uint16_t daq0 = DaqListFirst(event_id); + uint16_t *daq0_next = &DaqListFirst(event_id); while (daq0 != XCP_UNDEFINED_DAQ_LIST) { assert(daq0 < gXcp.DaqLists->daq_count); daq0 = DaqListNext(daq0); @@ -1789,11 +1919,11 @@ static void XcpStopSelectedDaqLists(void) { /* Data Acquisition Event Processor */ /****************************************************************************/ -// Trigger daq list +// Trigger DAQ list #ifdef XCP_ENABLE_DAQ_ADDREXT -static void XcpTriggerDaqList(tQueueHandle queueHandle, uint16_t daq, const uint8_t **bases, uint64_t clock) { +static void XcpTriggerDaqList_(tQueueHandle queueHandle, uint16_t daq, const uint8_t **bases, uint64_t clock) { #else -static void XcpTriggerDaqList(tQueueHandle queueHandle, uint16_t daq, const uint8_t *base, uint64_t clock) { +static void XcpTriggerDaqList_(tQueueHandle queueHandle, uint16_t daq, const uint8_t *base, uint64_t clock) { #endif uint8_t *d0; uint16_t odt, hs; @@ -1874,74 +2004,72 @@ static void XcpTriggerDaqList(tQueueHandle queueHandle, uint16_t daq, const uint } /* odt */ } -// Trigger event -// DAQ must be running -static void XcpTriggerDaqEvent(tQueueHandle queueHandle, tXcpEventId event, const uint8_t **bases, uint64_t clock) { - - uint16_t daq; - - // No DAQ lists allocated - if (gXcp.DaqLists == NULL) - return; - - // DAQ not running - if (!isDaqRunning()) - return; - - // Event is invalid - if (event >= XCP_MAX_EVENT_COUNT) { - DBG_PRINTF_ERROR("Event %u out of range\n", event); - return; - } +// Trigger DAQ event +// DAQ lists must be valid and DAQ must be running +static void XcpTriggerDaqEvent_(tQueueHandle queueHandle, tXcpEventId event_id, const uint8_t **bases, uint64_t clock) { - // Get clock, if not given as parameter - if (clock == 0) - clock = ApplXcpGetClock64(); - -#ifndef XCP_MAX_EVENT_COUNT +#ifdef OPTION_ENABLE_DBG_METRICS + gXcpDaqEventCount++; +#endif - // @@@@ Non optimized version for arbitrary event ids +#ifndef XCP_MAX_EVENT_COUNT // Basic mode for arbitrary event ids // Loop over all active DAQ lists associated to the current event - for (daq = 0; daq < gXcp.DaqLists->daq_count; daq++) { + for (uint16_t daq = 0; daq < gXcp.DaqLists->daq_count; daq++) { if ((DaqListState(daq) & DAQ_STATE_RUNNING) == 0) continue; // DAQ list not active - if (DaqListEventChannel(daq) != event) + if (DaqListEventChannel(daq) != event_id) continue; // DAQ list not associated with this event #ifndef XCP_ENABLE_DAQ_ADDREXT // Address extension unique per DAQ list // Build base pointer for this DAQ list uint8_t ext = DaqListAddrExt(daq); - XcpTriggerDaqList(queueHandle, daq, bases[ext], clock); // Trigger DAQ list + XcpTriggerDaqList_(queueHandle, daq, bases[ext], clock); // Trigger DAQ list #else - XcpTriggerDaqList(queueHandle, daq, bases, clock); // Trigger DAQ list + XcpTriggerDaqList_(queueHandle, daq, bases, clock); // Trigger DAQ list #endif } /* daq */ -#else +#else // Event number space is limited to XCP_MAX_EVENT_COUNT, with and without event list - // Optimized - // Loop over linked list of daq lists associated to event - if (event >= XCP_MAX_EVENT_COUNT) - return; // Event out of range +#ifdef XCP_ENABLE_DAQ_EVENT_LIST + if (event_id >= gXcp.EventList.count) { + DBG_PRINTF_ERROR("Event id %u out of range\n", event_id); + return; + } + +#ifdef XCP_ENABLE_DAQ_PRESCALER + tXcpEvent *event = &gXcp.EventList.event[event_id]; + event->daq_prescaler_cnt++; + if (event->daq_prescaler_cnt >= event->daq_prescaler) { + event->daq_prescaler_cnt = 0; + } else { + return; + } +#endif + +#else + if (event_id >= XCP_MAX_EVENT_COUNT) { + DBG_PRINTF_ERROR("Event id %u out of range\n", event_id); + return; + } +#endif - daq = DaqListFirst(event); - while (daq != XCP_UNDEFINED_DAQ_LIST) { + // Loop over all active DAQ lists associated to the current event + for (uint16_t daq = DaqListFirst(event_id); daq != XCP_UNDEFINED_DAQ_LIST; daq = DaqListNext(daq)) { assert(daq < gXcp.DaqLists->daq_count); if (DaqListState(daq) & DAQ_STATE_RUNNING) { // DAQ list active - #ifndef XCP_ENABLE_DAQ_ADDREXT // Address extension unique per DAQ list // Build base pointer for this DAQ list uint8_t ext = DaqListAddrExt(daq); - XcpTriggerDaqList(queueHandle, daq, base[ext], clock); // Trigger DAQ list + XcpTriggerDaqList_(queueHandle, daq, base[ext], clock); // Trigger DAQ list #else - XcpTriggerDaqList(queueHandle, daq, bases, clock); // Trigger DAQ list + XcpTriggerDaqList_(queueHandle, daq, bases, clock); // Trigger DAQ list #endif } - daq = DaqListNext(daq); } #endif } @@ -1966,7 +2094,7 @@ static void XcpProcessPendingCommand(tXcpEventId event, const uint8_t **bases) { } #endif // XCP_ENABLE_DYN_ADDRESSING -void XcpEventExt_At(tXcpEventId event, const uint8_t **bases, uint64_t clock) { +static void XcpEventExtAt_(tXcpEventId event, const uint8_t **bases, uint64_t clock) { // Async command processing for pending command #ifdef XCP_ENABLE_DYN_ADDRESSING @@ -1976,40 +2104,156 @@ void XcpEventExt_At(tXcpEventId event, const uint8_t **bases, uint64_t clock) { // Daq if (!isDaqRunning()) return; // DAQ not running - XcpTriggerDaqEvent(gXcp.Queue, event, bases, clock); + XcpTriggerDaqEvent_(gXcp.Queue, event, bases, clock); } -void XcpEventExt_(tXcpEventId event, const uint8_t **bases) { +static void XcpEventExt_(tXcpEventId event, const uint8_t **bases) { // Async command processing for pending command #ifdef XCP_ENABLE_DYN_ADDRESSING XcpProcessPendingCommand(event, bases); #endif // XCP_ENABLE_DYN_ADDRESSING + XcpTriggerDaqEvent_(gXcp.Queue, event, bases, ApplXcpGetClock64()); +} + +//---------------------------------------------------------------------------- +// Public API + +#ifdef XCP_ADDRESS_MODE_XCPLITE__C_DR + +// Internal function used by the Rust API +// Supports XCP_ADDR_EXT_DYN and XCP_ADDR_EXT_REL with given base pointers +void XcpEventExt2(tXcpEventId event, const uint8_t *base_dyn, const uint8_t *base_rel) { + if (!isDaqRunning()) + return; // DAQ not running + const uint8_t *bases[4] = {NULL, NULL, base_dyn, base_rel}; + XcpEventExt_(event, bases); +} +void XcpEventExt2At(tXcpEventId event, const uint8_t *base_dyn, const uint8_t *base_rel, uint64_t clock) { if (!isDaqRunning()) return; // DAQ not running - XcpTriggerDaqEvent(gXcp.Queue, event, bases, 0); + const uint8_t *bases[5] = {NULL, NULL, base_rel, base_dyn, base_rel}; + XcpEventExtAt_(event, bases, clock); } +#else + +// Supports XCP_ADDR_EXT_ABS and XCP_ADDR_EXT_DYN with given base pointer void XcpEventExt(tXcpEventId event, const uint8_t *base) { - const uint8_t *bases[4] = {NULL, ApplXcpGetBaseAddr(), base, base}; + if (!isDaqRunning()) + return; // DAQ not running +#if defined(XCP_ADDRESS_MODE_XCPLITE__ACSDD) + const uint8_t *bases[5] = {xcp_get_base_addr(), NULL, NULL, base, NULL}; +#elif defined(XCP_ADDRESS_MODE_XCPLITE__CASDD) + const uint8_t *bases[5] = {NULL, xcp_get_base_addr(), base, NULL, NULL}; +#else + static_assert(false); +#endif XcpEventExt_(event, bases); } - void XcpEventExtAt(tXcpEventId event, const uint8_t *base, uint64_t clock) { - const uint8_t *bases[4] = {NULL, ApplXcpGetBaseAddr(), base, base}; - XcpEventExt_At(event, bases, clock); + if (!isDaqRunning()) + return; // DAQ not running +#if defined(XCP_ADDRESS_MODE_XCPLITE__ACSDD) + const uint8_t *bases[5] = {xcp_get_base_addr(), NULL, NULL, base, NULL}; +#elif defined(XCP_ADDRESS_MODE_XCPLITE__CASDD) + const uint8_t *bases[5] = {NULL, xcp_get_base_addr(), base, NULL, NULL}; +#else + static_assert(false); +#endif + XcpEventExtAt_(event, bases, clock); } -#ifdef XCP_ENABLE_ABS_ADDRESSING +// Supports XCP_ADDR_EXT_ABS only void XcpEvent(tXcpEventId event) { if (!isDaqRunning()) return; // DAQ not running - const uint8_t *bases[4] = {NULL, ApplXcpGetBaseAddr(), NULL, NULL}; - XcpTriggerDaqEvent(gXcp.Queue, event, bases, 0); +#if defined(XCP_ADDRESS_MODE_XCPLITE__ACSDD) + const uint8_t *bases[5] = {xcp_get_base_addr(), NULL, NULL, NULL, NULL}; +#elif defined(XCP_ADDRESS_MODE_XCPLITE__CASDD) + const uint8_t *bases[5] = {NULL, xcp_get_base_addr(), NULL, NULL, NULL}; +#else + static_assert(false); +#endif + XcpTriggerDaqEvent_(gXcp.Queue, event, bases, ApplXcpGetClock64()); +} +void XcpEventAt(tXcpEventId event, uint64_t clock) { + if (!isDaqRunning()) + return; // DAQ not running +#if defined(XCP_ADDRESS_MODE_XCPLITE__ACSDD) + const uint8_t *bases[5] = {xcp_get_base_addr(), NULL, NULL, NULL, NULL}; +#elif defined(XCP_ADDRESS_MODE_XCPLITE__CASDD) + const uint8_t *bases[5] = {NULL, xcp_get_base_addr(), NULL, NULL, NULL}; +#else + static_assert(false); +#endif + XcpTriggerDaqEvent_(gXcp.Queue, event, bases, clock); } + #endif +#if defined(XCP_ENABLE_DYN_ADDRESSING) && (XCP_ADDR_EXT_DYN == 2) && (XCP_ADDR_EXT_DYN_MAX == 4) +// Function is partly hardcoded for performance reasons, supports exactly up to 5 different base pointers +void XcpEventExt_Var(tXcpEventId event, uint8_t count, ...) { + va_list args; + va_start(args, count); + const uint8_t *bases[5] = {xcp_get_base_addr(), xcp_get_base_addr(), NULL, NULL, NULL}; + switch (count) { + case 3: + bases[2] = va_arg(args, uint8_t *); + bases[3] = va_arg(args, uint8_t *); + bases[4] = va_arg(args, uint8_t *); + break; + case 2: + bases[2] = va_arg(args, uint8_t *); + bases[3] = va_arg(args, uint8_t *); + break; + case 1: + bases[2] = va_arg(args, uint8_t *); + break; + } + va_end(args); + + // Async command processing for pending command + XcpProcessPendingCommand(event, bases); + + if (!isDaqRunning()) + return; // DAQ not running + + XcpTriggerDaqEvent_(gXcp.Queue, event, bases, ApplXcpGetClock64()); +} + +void XcpEventExtAt_Var(tXcpEventId event, uint64_t clock, uint8_t count, ...) { + va_list args; + va_start(args, count); + const uint8_t *bases[5] = {xcp_get_base_addr(), xcp_get_base_addr(), NULL, NULL, NULL}; + switch (count) { + case 3: + bases[2] = va_arg(args, uint8_t *); + bases[3] = va_arg(args, uint8_t *); + bases[4] = va_arg(args, uint8_t *); + break; + case 2: + bases[2] = va_arg(args, uint8_t *); + bases[3] = va_arg(args, uint8_t *); + break; + case 1: + bases[2] = va_arg(args, uint8_t *); + break; + } + va_end(args); + + // Async command processing for pending command + XcpProcessPendingCommand(event, bases); + + if (!isDaqRunning()) + return; // DAQ not running + + XcpTriggerDaqEvent_(gXcp.Queue, event, bases, clock); +} +#endif // XCP_ENABLE_DYN_ADDRESSING && (XCP_ADDR_EXT_DYN == 2) && (XCP_ADDR_EXT_DYN_MAX == 4) + /****************************************************************************/ /* Command Processor */ /****************************************************************************/ @@ -2032,6 +2276,11 @@ void XcpDisconnect(void) { gXcp.SessionStatus &= (uint16_t)(~SS_CONNECTED); ApplXcpDisconnect(); + + // Must be done in disconnected state +#if defined(XCP_ENABLE_CAL_PERSISTENCE) && defined(XCP_ENABLE_FREEZE_ON_DISCONNECT) + XcpBinWrite(XCP_CALPAGE_WORKING_PAGE); +#endif } } @@ -2116,14 +2365,15 @@ static uint8_t XcpAsyncCommand(bool async, const uint32_t *cmdBuf, uint8_t cmdLe if (CRO_LEN >= CRO_CONNECT_LEN && CRO_CMD == CC_CONNECT) #endif { + uint8_t mode = CRO_CONNECT_MODE; #ifdef DBG_LEVEL - DBG_PRINTF3("CONNECT mode=%u\n", CRO_CONNECT_MODE); + DBG_PRINTF3("CONNECT mode=%u\n", mode); if ((gXcp.SessionStatus & SS_CONNECTED) != 0) DBG_PRINT_WARNING("Already connected! DAQ setup cleared! Legacy mode activated!\n"); #endif // Check application is ready for XCP connect - if (!ApplXcpConnect()) + if (!ApplXcpConnect(mode)) return CRC_CMD_OK; // Application not ready, ignore // Initialize Session Status @@ -2191,13 +2441,8 @@ static uint8_t XcpAsyncCommand(bool async, const uint32_t *cmdBuf, uint8_t cmdLe case CC_GET_COMM_MODE_INFO: { CRM_LEN = CRM_GET_COMM_MODE_INFO_LEN; CRM_GET_COMM_MODE_INFO_DRIVER_VERSION = XCP_DRIVER_VERSION; -#ifdef XCP_ENABLE_INTERLEAVED - CRM_GET_COMM_MODE_INFO_COMM_OPTIONAL = 0; // CMO_INTERLEAVED_MODE; - CRM_GET_COMM_MODE_INFO_QUEUE_SIZE = XCP_INTERLEAVED_QUEUE_SIZE; -#else CRM_GET_COMM_MODE_INFO_COMM_OPTIONAL = 0; CRM_GET_COMM_MODE_INFO_QUEUE_SIZE = 0; -#endif CRM_GET_COMM_MODE_INFO_MAX_BS = 0; CRM_GET_COMM_MODE_INFO_MIN_ST = 0; } break; @@ -2231,14 +2476,11 @@ static uint8_t XcpAsyncCommand(bool async, const uint32_t *cmdBuf, uint8_t cmdLe CRM_GET_ID_MODE = 0x01; // Transfer mode is "Uncompressed data in response" } else */ - { // EPK provided via upload + { + // EPK provided via upload gXcp.MtaAddr = XCP_ADDR_EPK; -#ifdef XCP_ENABLE_EPK_CALSEG - gXcp.MtaExt = XCP_ADDR_EXT_EPK; -#else gXcp.MtaPtr = (uint8_t *)XcpGetEpk(); gXcp.MtaExt = XCP_ADDR_EXT_PTR; -#endif CRM_GET_ID_LENGTH = ApplXcpGetId(CRO_GET_ID_TYPE, NULL, 0); CRM_GET_ID_MODE = 0x00; // Transfer mode is "Uncompressed data upload" } @@ -2314,13 +2556,13 @@ static uint8_t XcpAsyncCommand(bool async, const uint32_t *cmdBuf, uint8_t cmdLe gXcp.DaqLists->config_id = config_id; // gXcp.SessionStatus |= SS_STORE_DAQ_REQ; check_error(ApplXcpDaqResumeStore(config_id)); - /* @@@@ TODO Send an event message */ + /* @@@@ TODO: Send an event message */ // gXcp.SessionStatus &= (uint16_t)(~SS_STORE_DAQ_REQ); } break; case SS_CLEAR_DAQ_REQ: // gXcp.SessionStatus |= SS_CLEAR_DAQ_REQ; check_error(ApplXcpDaqResumeClear()); - /* @@@@ TODO Send an event message */ + /* @@@@ TODO: Send an event message */ // gXcp.SessionStatus &= (uint16_t)(~SS_CLEAR_DAQ_REQ); break; #endif /* XCP_ENABLE_DAQ_RESUME */ @@ -2466,17 +2708,15 @@ static uint8_t XcpAsyncCommand(bool async, const uint32_t *cmdBuf, uint8_t cmdLe #endif } break; #endif // XCP_ENABLE_COPY_CAL_PAGE +#endif // XCP_ENABLE_CAL_PAGE #ifdef XCP_ENABLE_CALSEG_LIST case CC_GET_PAG_PROCESSOR_INFO: { check_len(CRO_GET_PAG_PROCESSOR_INFO_LEN); CRM_LEN = CRM_GET_PAG_PROCESSOR_INFO_LEN; -#ifdef XCP_ENABLE_EPK_CALSEG CRM_GET_PAG_PROCESSOR_INFO_MAX_SEGMENTS = (uint8_t)(gXcp.CalSegList.count + 1); // +1 for segment 0 (EPK) -#else CRM_GET_PAG_PROCESSOR_INFO_MAX_SEGMENTS = (uint8_t)(gXcp.CalSegList.count); -#endif #ifdef XCP_ENABLE_FREEZE_CAL_PAGE CRM_GET_PAG_PROCESSOR_INFO_PROPERTIES = PAG_PROPERTY_FREEZE; // Freeze mode supported #else @@ -2518,7 +2758,6 @@ static uint8_t XcpAsyncCommand(bool async, const uint32_t *cmdBuf, uint8_t cmdLe } break; #endif // XCP_ENABLE_CALSEG_LIST -#endif // XCP_ENABLE_CAL_PAGE #ifdef XCP_ENABLE_CHECKSUM case CC_BUILD_CHECKSUM: { @@ -2566,21 +2805,22 @@ static uint8_t XcpAsyncCommand(bool async, const uint32_t *cmdBuf, uint8_t cmdLe CRM_GET_DAQ_PROCESSOR_INFO_DAQ_KEY_BYTE |= DAQ_EXT_DAQ; #endif - // Dynamic DAQ list configuration, timestamps, resume and overload indication supported - // Identification field can not be switched off, bitwise data stimulation not supported, Prescaler not supported - CRM_GET_DAQ_PROCESSOR_INFO_PROPERTIES = (uint8_t)( - DAQ_PROPERTY_CONFIG_TYPE | - DAQ_PROPERTY_TIMESTAMP | + // Dynamic DAQ list configuration, timestamps, resume, prescaler and overrun indication options + // Identification field can not be switched off, bitwise data stimulation not supported + CRM_GET_DAQ_PROCESSOR_INFO_PROPERTIES = (uint8_t)(DAQ_PROPERTY_CONFIG_TYPE | DAQ_PROPERTY_TIMESTAMP | #ifdef XCP_ENABLE_OVERRUN_INDICATION_PID - DAQ_OVERLOAD_INDICATION_PID) | + DAQ_OVERLOAD_INDICATION_PID | #endif #ifdef XCP_ENABLE_OVERRUN_INDICATION_EVENT - DAQ_OVERLOAD_INDICATION_EVENT | + DAQ_OVERLOAD_INDICATION_EVENT | #endif #ifdef XCP_ENABLE_DAQ_RESUME - DAQ_PROPERTY_RESUME | + DAQ_PROPERTY_RESUME | +#endif +#ifdef XCP_ENABLE_DAQ_PRESCALER + DAQ_PROPERTY_PRESCALER | #endif - 0); + 0); } break; @@ -2602,26 +2842,28 @@ static uint8_t XcpAsyncCommand(bool async, const uint32_t *cmdBuf, uint8_t cmdLe check_len(CRO_GET_DAQ_EVENT_INFO_LEN); uint16_t eventNumber = CRO_GET_DAQ_EVENT_INFO_EVENT; tXcpEvent *event = XcpGetEvent(eventNumber); - if (event == NULL) + if (event == NULL) { error(CRC_OUT_OF_RANGE); - // Convert cycle time to ASAM coding time cycle and time unit + } + const char *eventName = XcpGetEventName(eventNumber); + assert(eventName != NULL); + + // Convert cycle time to ASAM XCP IF_DATA coding time cycle and time unit // RESOLUTION OF TIMESTAMP "UNIT_1NS" = 0, "UNIT_10NS" = 1, ... - uint8_t timeUnit = 0; // timeCycle unit, 1ns=0, 10ns=1, 100ns=2, 1us=3, ..., 1ms=6, ... - uint8_t timeCycle; // cycle time in units, 0 = sporadic or unknown - uint32_t c = event->cycleTimeNs; - while (c >= 256) { - c /= 10; + uint8_t timeUnit = 0; // timeCycle unit, 1ns=0, 10ns=1, 100ns=2, 1us=3, ..., 1ms=6, ... + uint32_t timeCycle = event->cycleTimeNs; // cycle time in units, 0 = sporadic or unknown + while (timeCycle >= 256) { + timeCycle /= 10; timeUnit++; } - timeCycle = (uint8_t)c; CRM_LEN = CRM_GET_DAQ_EVENT_INFO_LEN; CRM_GET_DAQ_EVENT_INFO_PROPERTIES = DAQ_EVENT_PROPERTIES_DAQ | DAQ_EVENT_PROPERTIES_EVENT_CONSISTENCY; CRM_GET_DAQ_EVENT_INFO_MAX_DAQ_LIST = 0xFF; - CRM_GET_DAQ_EVENT_INFO_NAME_LENGTH = (uint8_t)strlen(event->name); - CRM_GET_DAQ_EVENT_INFO_TIME_CYCLE = timeCycle; + CRM_GET_DAQ_EVENT_INFO_NAME_LENGTH = (uint8_t)strlen(eventName); + CRM_GET_DAQ_EVENT_INFO_TIME_CYCLE = (uint8_t)timeCycle; CRM_GET_DAQ_EVENT_INFO_TIME_UNIT = timeUnit; CRM_GET_DAQ_EVENT_INFO_PRIORITY = event->priority; - gXcp.MtaPtr = (uint8_t *)event->name; + gXcp.MtaPtr = (uint8_t *)eventName; gXcp.MtaExt = XCP_ADDR_EXT_PTR; } break; #endif // XCP_ENABLE_DAQ_EVENT_INFO @@ -2679,6 +2921,7 @@ static uint8_t XcpAsyncCommand(bool async, const uint32_t *cmdBuf, uint8_t cmdLe uint16_t event = CRO_SET_DAQ_LIST_MODE_EVENTCHANNEL; uint8_t mode = CRO_SET_DAQ_LIST_MODE_MODE; uint8_t prio = CRO_SET_DAQ_LIST_MODE_PRIORITY; + uint8_t prescaler = CRO_SET_DAQ_LIST_MODE_PRESCALER; if (gXcp.DaqLists == NULL) error(CRC_SEQUENCE); if (daq >= gXcp.DaqLists->daq_count) @@ -2687,9 +2930,7 @@ static uint8_t XcpAsyncCommand(bool async, const uint32_t *cmdBuf, uint8_t cmdLe error(CRC_OUT_OF_RANGE); // none of these modes implemented if ((mode & DAQ_MODE_TIMESTAMP) == 0) error(CRC_CMD_SYNTAX); // timestamp is fixed on - if (CRO_SET_DAQ_LIST_MODE_PRESCALER > 1) - error(CRC_OUT_OF_RANGE); // prescaler is not implemented - check_error(XcpSetDaqListMode(daq, event, mode, prio)); + check_error(XcpSetDaqListMode(daq, event, mode, prescaler, prio)); break; } @@ -3018,7 +3259,23 @@ void XcpBackgroundTasks(void) { // Publish all modified calibration segments #ifdef XCP_ENABLE_CALSEG_LAZY_WRITE - XcpCalSegPublishAll(false); + static uint64_t last_success_time = 0; + bool res = XcpCalSegPublishAll(false); + if (res != CRC_CMD_OK && res != CRC_CMD_PENDING) { + DBG_PRINT_WARNING("XcpBackgroundTasks: Calibration segment publish failed!\n"); + } + if (res == CRC_CMD_OK) { + // All segments published + last_success_time = clockGetLast(); + } else if (res == CRC_CMD_PENDING) { + // Warn if delayed by more than 200ms + if (clockGetLast() - last_success_time > CLOCK_TICKS_PER_MS * 200) { + if (last_success_time != 0) + DBG_PRINT_WARNING("XcpBackgroundTasks: Calibration segment publish delayed by more than 200ms!\n"); + last_success_time = clockGetLast(); + } + } + #endif } @@ -3088,25 +3345,59 @@ void XcpPrint(const char *str) { // Init XCP protocol layer singleton once // This is a once initialization of the static gXcp singleton data structure // Memory for the DAQ lists are provided by the caller if daq_lists != NULL -void XcpInit(bool activate) { +void XcpInit(const char *name, const char *epk, bool activate) { // Once if (isActivated()) { // Already initialized, just ignore return; } + // name and epk are mandatory + if (name == NULL) { + name = "XCPlite"; + } else if (STRNLEN(name, XCP_PROJECT_NAME_MAX_LENGTH) == 0) { + DBG_PRINT_ERROR("XcpInit: Project name invalid!\n"); + return; + } + if (epk == NULL) { + epk = __TIME__; + } else if (STRNLEN(epk, XCP_EPK_MAX_LENGTH) == 0) { + DBG_PRINT_ERROR("XcpInit: EPK invalid!\n"); + return; + } + // Clear XCP state memset((uint8_t *)&gXcp, 0, sizeof(gXcp)); + gXcp.SessionStatus = SS_INITIALIZED; if (!activate) { - gXcp.SessionStatus = SS_INITIALIZED; - return; // Do not activate XCP protocol layer + return; // Do not activate XCP protocol layer, state is safe now } +// Initialize the base address for absolute addressing +#ifdef XCP_ENABLE_ABS_ADDRESSING + ApplXcpGetBaseAddr(); + assert(xcp_get_base_addr() != NULL); +#endif + // Allocate DAQ list memory gXcp.DaqLists = malloc(sizeof(tXcpDaqLists)); assert(gXcp.DaqLists != NULL); XcpClearDaq(); + // Initialize high resolution clock + clockInit(); + + // Set the project name + XcpSetProjectName(name); + + // Set the EPK + XcpSetEpk(epk); + +#ifdef XCP_ENABLE_DAQ_CLOCK_MULTICAST + gXcp.ClusterId = XCP_MULTICAST_CLUSTER_ID; // XCP default cluster id (multicast addr 239,255,0,1, group 127,0,1 (mac 01-00-5E-7F-00-01) + XcpEthTlSetClusterId(gXcp.ClusterId); +#endif + #ifdef XCP_ENABLE_CALSEG_LIST XcpInitCalSegList(); #endif @@ -3115,15 +3406,28 @@ void XcpInit(bool activate) { XcpInitEventList(); #endif -#ifdef XCP_ENABLE_DAQ_CLOCK_MULTICAST - gXcp.ClusterId = XCP_MULTICAST_CLUSTER_ID; // XCP default cluster id (multicast addr 239,255,0,1, group 127,0,1 (mac 01-00-5E-7F-00-01) - XcpEthTlSetClusterId(gXcp.ClusterId); -#endif + // Activate XCP protocol layer + gXcp.SessionStatus |= SS_ACTIVATED; - // Initialize high resolution clock - clockInit(); +// Check if the BIN file exists and load it +// Needs a valid EPK to check for correct version +// If successful, do not start the A2L generation process, but still provide the existing A2L file to the XCP client +#ifdef XCP_ENABLE_CAL_PERSISTENCE + if (XcpBinLoad()) { + gXcp.SessionStatus |= SS_PERSISTENCE_LOADED; + } +#endif - gXcp.SessionStatus = SS_INITIALIZED | SS_ACTIVATED; +#ifdef XCP_ENABLE_CALSEG_LIST +#ifdef XCP_ENABLE_EPK_CALSEG + // Create the EPK calibration segment + // Make sure it has index 0 + // @@@@ TODO: Currently the EPK segment is treated like any other segment, even if it is read-only and does not need 2 pages + static tXcpCalSegIndex cal__epk = XCP_UNDEFINED_CALSEG; // Create the linker file marker for the EPK segment + cal__epk = XcpCreateCalSeg("epk", XcpGetEpk(), (uint16_t)STRNLEN(XcpGetEpk(), XCP_EPK_MAX_LENGTH)); + assert(cal__epk == 0); +#endif +#endif } // Start XCP protocol layer @@ -3141,6 +3445,8 @@ void XcpStart(tQueueHandle queueHandle, bool resumeMode) { DBG_PRINTF3(" Version=%u.%u, MAX_CTO=%u, MAX_DTO=%u, DAQ_MEM=%u, MAX_DAQ=%u, MAX_ODT_ENTRY=%u, MAX_ODT_ENTRYSIZE=%u, %u KiB memory used\n", XCP_PROTOCOL_LAYER_VERSION >> 8, XCP_PROTOCOL_LAYER_VERSION & 0xFF, XCPTL_MAX_CTO_SIZE, XCPTL_MAX_DTO_SIZE, XCP_DAQ_MEM_SIZE, (1 << sizeof(uint16_t) * 8) - 1, (1 << sizeof(uint16_t) * 8) - 1, (1 << (sizeof(uint8_t) * 8)) - 1, (unsigned int)sizeof(gXcp) / 1024); + + DBG_PRINT3(" Addressing scheme=" XCP_ADDRESS_MODE "\n"); DBG_PRINT3(" Options=("); // Print activated XCP protocol options @@ -3150,6 +3456,12 @@ void XcpStart(tQueueHandle queueHandle, bool resumeMode) { #ifdef XCP_DAQ_CLOCK_64BIT // Use 64 Bit time stamps DBG_PRINT("DAQ_CLK_64BIT,"); #endif +#ifdef XCP_ENABLE_DAQ_ADDREXT // Enable DAQ with individual address extension per entry + DBG_PRINT("DAQ_ADDREXT,"); +#endif +#ifdef XCP_ENABLE_DAQ_PRESCALER // Enable DAQ prescaler + DBG_PRINT("DAQ_PRESCALER,"); +#endif #ifdef XCP_ENABLE_PTP // Enable server clock synchronized to PTP grandmaster clock DBG_PRINT("GM_CLK_INFO,"); #endif @@ -3165,14 +3477,26 @@ void XcpStart(tQueueHandle queueHandle, bool resumeMode) { #ifdef XCP_ENABLE_CALSEG_LIST // Enable XCP calibration segments DBG_PRINT("CALSEG_LIST,"); #endif +#ifdef XCP_ENABLE_EPK_CALSEG // Enable EPK calibration segment + DBG_PRINT("EPK_CALSEG,"); +#endif +#ifdef XCP_ENABLE_COPY_CAL_PAGE + DBG_PRINT("COPY_CAL_PAGE,"); +#endif +#ifdef XCP_ENABLE_A2L_UPLOAD // Enable A2L upload to host + DBG_PRINT("A2L_UPLOAD,"); +#endif +#ifdef XCP_ENABLE_FREEZE_CAL_PAGE // Enable freeze calibration page + DBG_PRINT("FREEZE_CAL_PAGE,"); +#endif +#ifdef XCP_ENABLE_DAQ_RESUME // Enable DAQ resume mode + DBG_PRINT("DAQ_RESUME,"); +#endif #ifdef XCP_ENABLE_DAQ_EVENT_INFO // Enable XCP event info by protocol instead of A2L DBG_PRINT("DAQ_EVT_INFO,"); #endif #ifdef XCP_ENABLE_CHECKSUM // Enable BUILD_CHECKSUM command DBG_PRINT("CHECKSUM,"); -#endif -#ifdef XCP_ENABLE_INTERLEAVED // Enable interleaved command execution - DBG_PRINT("INTERLEAVED,"); #endif DBG_PRINT(")\n"); } @@ -3200,7 +3524,7 @@ void XcpStart(tQueueHandle queueHandle, bool resumeMode) { uint8_t uuid[8] = XCP_DAQ_CLOCK_UIID; memcpy(gXcp.ClockInfo.server.UUID, uuid, 8); - DBG_PRINTF4(" ServerClock: ticks=%u, unit=%s, size=%u, UUID=%02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X\n\n", gXcp.ClockInfo.server.timestampTicks, + DBG_PRINTF4(" ServerClock: ticks=%u, unit=%s, size=%u, UUID=%02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X\n", gXcp.ClockInfo.server.timestampTicks, (gXcp.ClockInfo.server.timestampUnit == DAQ_TIMESTAMP_UNIT_1NS) ? "ns" : "us", gXcp.ClockInfo.server.nativeTimestampSize, gXcp.ClockInfo.server.UUID[0], gXcp.ClockInfo.server.UUID[1], gXcp.ClockInfo.server.UUID[2], gXcp.ClockInfo.server.UUID[3], gXcp.ClockInfo.server.UUID[4], gXcp.ClockInfo.server.UUID[5], gXcp.ClockInfo.server.UUID[6], gXcp.ClockInfo.server.UUID[7]); @@ -3238,7 +3562,7 @@ void XcpStart(tQueueHandle queueHandle, bool resumeMode) { gXcp.SessionStatus |= SS_RESUME; /* Start DAQ */ XcpStartSelectedDaqLists(); - // @@@@ TODO Send an event message to indicate resume mode + // @@@@ TODO: Send an event message to indicate resume mode #ifdef DBG_LEVEL if (DBG_LEVEL != 0) { @@ -3262,13 +3586,21 @@ void XcpReset(void) { return; } - free(gXcp.DaqLists); + assert(!XcpIsDaqRunning()); + + // Free DAQ list memory allocation + if (gXcp.DaqLists) { + free(gXcp.DaqLists); + } gXcp.DaqLists = NULL; + + // Free calibration list memory allocations #ifdef XCP_ENABLE_CALSEG_LIST XcpFreeCalSegList(); #endif - XcpInit(true); // Reset XCP state + // Reset XCP state to not initialized + gXcp.SessionStatus = 0; } /****************************************************************************/ diff --git a/src/xcpLite.h b/src/xcpLite.h index 511c9483..44c55056 100644 --- a/src/xcpLite.h +++ b/src/xcpLite.h @@ -1,5 +1,5 @@ #pragma once -#define __XCP_LITE_H__ +#define __XCPLITE_H__ /*---------------------------------------------------------------------------- | File: @@ -34,17 +34,16 @@ extern "C" { /****************************************************************************/ // Initialization for the XCP Protocol Layer -void XcpInit(bool activate); +void XcpInit(const char *name, const char *epk, bool activate); bool XcpIsInitialized(void); bool XcpIsActivated(void); void XcpStart(tQueueHandle queueHandle, bool resumeMode); void XcpReset(void); +// Project name +const char *XcpGetProjectName(void); + // EPK software version identifier -#ifndef XCP_EPK_MAX_LENGTH -#define XCP_EPK_MAX_LENGTH 31 // Maximum length of EPK string -#endif -void XcpSetEpk(const char *epk); const char *XcpGetEpk(void); // XCP command processor @@ -62,12 +61,20 @@ void XcpDisconnect(void); typedef uint16_t tXcpEventId; // Trigger a XCP data acquisition event -void XcpEventExt_At(tXcpEventId event, const uint8_t **bases, uint64_t clock); -void XcpEventExt_(tXcpEventId event, const uint8_t **bases); -void XcpEventExtAt(tXcpEventId event, const uint8_t *base, uint64_t clock); -void XcpEventExt(tXcpEventId event, const uint8_t *base); +void XcpEventExtAt(tXcpEventId event, const uint8_t *base2, uint64_t clock); +void XcpEventExt(tXcpEventId event, const uint8_t *base2); +void XcpEventExt2(tXcpEventId event, const uint8_t *base2, const uint8_t *base3); +void XcpEventExt2At(tXcpEventId event, const uint8_t *base2, const uint8_t *base3, uint64_t clock); +void XcpEventAt(tXcpEventId event, uint64_t clock); void XcpEvent(tXcpEventId event); +// Trigger a XCP data acquisition event +// Variadic version for more call convenience +#if defined(XCP_ENABLE_DYN_ADDRESSING) && (XCP_ADDR_EXT_DYN == 2) && (XCP_ADDR_EXT_DYN_MAX == 4) +void XcpEventExt_Var(tXcpEventId event, uint8_t count, ...); +void XcpEventExtAt_Var(tXcpEventId event, uint64_t clock, uint8_t count, ...); +#endif + // Send a XCP event message void XcpSendEvent(uint8_t evc, const uint8_t *d, uint8_t l); @@ -119,12 +126,15 @@ void XcpSetLogLevel(uint8_t level); #endif typedef struct { - uint16_t daqList; // associated DAQ list - uint16_t index; // Event instance index, 0 = single instance, 1.. = multiple instances - uint32_t cycleTimeNs; // cycle time in nanoseconds, 0 means sporadic event - uint8_t priority; // priority 0 = queued, 1 = pushing, 2 = realtime - uint8_t res; // reserved - char name[XCP_MAX_EVENT_NAME + 1]; // event name + uint32_t cycleTimeNs; // Cycle time in nanoseconds, 0 means sporadic event + uint16_t index; // Event instance index, 0 = single instance, 1.. = multiple instances + uint16_t daq_first; // First associated DAQ list, linked list + uint8_t priority; // Priority 0 = queued, >=1 flushing +#ifdef XCP_ENABLE_DAQ_PRESCALER + uint8_t daq_prescaler; // Current prescaler set with SET_DAQ_LIST_MODE + uint8_t daq_prescaler_cnt; // Current prescaler counter +#endif + char name[XCP_MAX_EVENT_NAME + 1]; // Event name } tXcpEvent; typedef struct { @@ -136,9 +146,9 @@ typedef struct { // Create an XCP event (internal use) tXcpEventId XcpCreateIndexedEvent(const char *name, uint16_t index, uint32_t cycleTimeNs, uint8_t priority); // Add a measurement event to event list, return event number (0..MAX_EVENT-1) -tXcpEventId XcpCreateEvent(const char *name, uint32_t cycleTimeNs /* ns */, uint8_t priority /* 0-normal, >=1 realtime*/); +tXcpEventId XcpCreateEvent(const char *name, uint32_t cycleTimeNs /* ns */, uint8_t priority /* 0 = queued, >=1 flushing*/); // Add a measurement event to event list, return event number (0..MAX_EVENT-1), thread safe, if name exists, an instance id is appended to the name -tXcpEventId XcpCreateEventInstance(const char *name, uint32_t cycleTimeNs /* ns */, uint8_t priority /* 0-normal, >=1 realtime*/); +tXcpEventId XcpCreateEventInstance(const char *name, uint32_t cycleTimeNs /* ns */, uint8_t priority /* 0 = queued, >=1 flushing */); // Get event list tXcpEventList *XcpGetEventList(void); @@ -172,23 +182,6 @@ tXcpEvent *XcpGetEvent(tXcpEventId event); #define XCP_MAX_CALSEG_NAME 15 #endif -/* -lock-free, wait-free CalSeg RCU: - XCP receive thread command handler: - On XCP write access - if free_page != NULL - Copy xcp_page to free_page - NULL -> free_page --> xcp_page --> ecu_page_next - ECU thread XcpCalSegLock: - if ecu_page_next != ecu_page - ecu_page_next --> ecu_page --> free_page - - Shared state between the XCP thread and the ECU thread is: - - ecu_page_next: the next page to be accessed by the ECU thread - - free_page: the page freed by the ECU thread - - ecu_access -*/ - // Calibration segment number // Used in A2l and XCP commands to identify a calibration segment // Currently only 256 segments are supported @@ -212,9 +205,9 @@ typedef struct { uint8_t xcp_access; // page number for XCP access bool write_pending; // write pending because write delay bool free_page_hazard; // safe free page use is not guaranteed yet, it may be in use -#ifdef XCP_ENABLE_FREEZE_CAL_PAGE - uint8_t mode; // reuested for freeze and preload - uint32_t file_pos; // position of the calibration segment in the persistency file +#ifdef XCP_ENABLE_CAL_PERSISTENCE + uint8_t mode; // requested for freeze and preload + uint32_t file_pos; // position of the calibration segment in the persistence file #endif char name[XCP_MAX_CALSEG_NAME + 1]; } tXcpCalSeg; @@ -228,7 +221,10 @@ typedef struct { } tXcpCalSegList; // Get calibration segment list -tXcpCalSegList const *XcpGetCalSegList(void); +const tXcpCalSegList *XcpGetCalSegList(void); + +// Get the number of calibration segments +uint16_t XcpGetCalSegCount(void); // Find a calibration segment by name, returns XCP_UNDEFINED_CALSEG if not found tXcpCalSegIndex XcpFindCalSeg(const char *name); @@ -239,6 +235,9 @@ tXcpCalSeg *XcpGetCalSeg(tXcpCalSegIndex calseg); // Get the name of the calibration segment const char *XcpGetCalSegName(tXcpCalSegIndex calseg); +// Get the size of the calibration segment +uint16_t XcpGetCalSegSize(tXcpCalSegIndex calseg); + // Get the XCP/A2L address of a calibration segment uint32_t XcpGetCalSegBaseAddress(tXcpCalSegIndex calseg); @@ -248,7 +247,7 @@ uint32_t XcpGetCalSegBaseAddress(tXcpCalSegIndex calseg); tXcpCalSegIndex XcpCreateCalSeg(const char *name, const void *default_page, uint16_t size); // Lock a calibration segment and return a pointer to the ECU page -uint8_t const *XcpLockCalSeg(tXcpCalSegIndex calseg); +const uint8_t *XcpLockCalSeg(tXcpCalSegIndex calseg); // Unlock a calibration segment // Single threaded, must be used in the thread it was created @@ -315,8 +314,8 @@ typedef struct { uint16_t config_id; uint16_t res1; #endif -#ifdef XCP_MAX_EVENT_COUNT - uint16_t daq_first[XCP_MAX_EVENT_COUNT]; // Event channel to DAQ list mapping +#if !defined(XCP_ENABLE_DAQ_EVENT_LIST) && defined(XCP_MAX_EVENT_COUNT) + uint16_t daq_first[XCP_MAX_EVENT_COUNT]; // Event channel to DAQ list mapping when there is no event management #endif // DAQ array @@ -385,6 +384,9 @@ typedef struct { uint64_t DaqStartClock64; // DAQ start time uint32_t DaqOverflowCount; // DAQ queue overflow + /* Project Name */ + char ProjectName[XCP_PROJECT_NAME_MAX_LENGTH + 1]; // Project name string, null terminated + /* EPK */ char Epk[XCP_EPK_MAX_LENGTH + 1]; // EPK string, null terminated @@ -427,7 +429,7 @@ typedef struct { // All callback functions supplied by the application ust be thread save /* Callbacks on connect, disconnect, measurement prepare, start and stop */ -bool ApplXcpConnect(void); +bool ApplXcpConnect(uint8_t mode); void ApplXcpDisconnect(void); #if XCP_PROTOCOL_LAYER_VERSION >= 0x0104 bool ApplXcpPrepareDaq(void); @@ -437,8 +439,13 @@ void ApplXcpStopDaq(void); /* Address conversions from A2L address to pointer and vice versa in absolute addressing mode */ #ifdef XCP_ENABLE_ABS_ADDRESSING +extern const uint8_t *gXcpBaseAddr; // For runtime optimization, use xcp_get_base_addr() instead of ApplXcpGetBaseAddr() +const uint8_t *ApplXcpGetBaseAddr(void); // Get the base address for DAQ data access */ +#define xcp_get_base_addr() gXcpBaseAddr // For runtime optimization, use xcp_get_base_addr() instead of ApplXcpGetBaseAddr() uint32_t ApplXcpGetAddr(const uint8_t *p); // Calculate the xcpAddr address from a pointer -uint8_t *ApplXcpGetBaseAddr(void); // Get the base address for DAQ data access */ +#else +#define ApplXcpGetBaseAddr() +#define xcp_get_base_addr() NULL #endif /* Read and write memory */ @@ -494,10 +501,8 @@ bool ApplXcpGetClockInfoGrandmaster(uint8_t *uuid, uint8_t *epoch, uint8_t *stra /* DAQ resume */ #ifdef XCP_ENABLE_DAQ_RESUME - uint8_t ApplXcpDaqResumeStore(uint16_t config_id); uint8_t ApplXcpDaqResumeClear(void); - #endif /* Get info for GET_ID command (pointer to and length of data) */ @@ -511,11 +516,8 @@ uint32_t ApplXcpGetId(uint8_t id, uint8_t *buf, uint32_t bufLen); bool ApplXcpReadA2L(uint8_t size, uint32_t offset, uint8_t *data); #endif -// Logging -void ApplXcpSetLogLevel(uint8_t level); - // Register XCP callbacks -void ApplXcpRegisterConnectCallback(bool (*cb_connect)(void)); +void ApplXcpRegisterConnectCallback(bool (*cb_connect)(uint8_t mode)); void ApplXcpRegisterPrepareDaqCallback(uint8_t (*cb_prepare_daq)(void)); void ApplXcpRegisterStartDaqCallback(uint8_t (*cb_start_daq)(void)); void ApplXcpRegisterStopDaqCallback(void (*cb_stop_daq)(void)); @@ -528,17 +530,9 @@ void ApplXcpRegisterReadCallback(uint8_t (*cb_read)(uint32_t src, uint8_t size, void ApplXcpRegisterWriteCallback(uint8_t (*cb_write)(uint32_t dst, uint8_t size, const uint8_t *src, uint8_t delay)); void ApplXcpRegisterFlushCallback(uint8_t (*cb_flush)(void)); -// Internal function used by the Rust API -void ApplXcpRegisterCallbacks(bool (*cb_connect)(void), uint8_t (*cb_prepare_daq)(void), uint8_t (*cb_start_daq)(void), void (*cb_stop_daq)(void), - uint8_t (*cb_freeze_daq)(uint8_t clear, uint16_t config_id), uint8_t (*cb_get_cal_page)(uint8_t segment, uint8_t mode), - uint8_t (*cb_set_cal_page)(uint8_t segment, uint8_t page, uint8_t mode), uint8_t (*cb_freeze_cal)(void), - uint8_t (*cb_init_cal)(uint8_t src_page, uint8_t dst_page), uint8_t (*cb_read)(uint32_t src, uint8_t size, uint8_t *dst), - uint8_t (*cb_write)(uint32_t dst, uint8_t size, const uint8_t *src, uint8_t delay), uint8_t (*cb_flush)(void)); - -// Set/get the A2L file name (for GET_ID IDT_ASAM_NAME, IDT_ASAM_NAME and for IDT_ASAM_UPLOAD) -#define XCP_A2L_FILENAME_MAX_LENGTH 255 // Maximum length of A2L filename with extension -void ApplXcpSetA2lName(const char *name); -const char *ApplXcpGetA2lName(void); +// Set/get the A2L file name (for GET_ID IDT_ASAM_NAME and for IDT_ASAM_UPLOAD) +void XcpSetA2lName(const char *name); +const char *XcpGetA2lName(void); #ifdef __cplusplus } // extern "C" diff --git a/src/xcpQueue32.c b/src/xcpQueue32.c index 4ba06510..127012e4 100644 --- a/src/xcpQueue32.c +++ b/src/xcpQueue32.c @@ -301,7 +301,7 @@ tQueueBuffer QueuePeek(tQueueHandle queueHandle, bool flush, uint32_t *packets_l if (packets_lost != NULL) { *packets_lost = queue->packets_lost; if (*packets_lost > 0) - DBG_PRINTF4("QueuePeek: packets_lost=%" PRIu32 "\n", *packets_lost); + DBG_PRINTF5("QueuePeek: packets_lost=%" PRIu32 "\n", *packets_lost); queue->packets_lost = 0; // Reset lost packets count } @@ -314,7 +314,7 @@ tQueueBuffer QueuePeek(tQueueHandle queueHandle, bool flush, uint32_t *packets_l // Flush tail segment buffer if it is not empty if (queue->queue_len == 1 && b->size > 0 && flush) { - DBG_PRINT4("QueuePeek: flush\n"); + DBG_PRINT5("QueuePeek: flush\n"); newSegmentBuffer(queue); } diff --git a/src/xcpQueue64.c b/src/xcpQueue64.c index 9ca2be29..876bad05 100644 --- a/src/xcpQueue64.c +++ b/src/xcpQueue64.c @@ -59,9 +59,9 @@ // Assume a maximum cache line size of 128 bytes #define CACHE_LINE_SIZE 128u // Cache line size, used to align the queue header -// Check for 64 Bit platform -#if (!defined(_LINUX64) && !defined(_MACOS)) || !defined(PLATFORM_64BIT) -#error "This implementation requires a 64 Bit Posix platform (_LINUX64 or _MACOS)" +// Check for 64 Bit non Windows platform +#if !defined(PLATFORM_64BIT) || defined(_WIN) +#error "This implementation requires a 64 Bit Posix platform" #endif static_assert(sizeof(void *) == 8, "This implementation requires a 64 Bit platform"); @@ -711,7 +711,7 @@ tQueueBuffer QueuePeek(tQueueHandle queueHandle, bool flush, uint32_t *packets_l total_len = dlc + XCPTL_TRANSPORT_LAYER_HEADER_SIZE; // Include the transport layer header size // Check for more packets to concatenate in a message segment with maximum of XCPTL_MAX_SEGMENT_SIZE, by repeating this procedure -// @@@@ TODO maybe optimize the duplicate code below +// @@@@ TODO: maybe optimize the duplicate code below #ifdef QUEUE_ACCUMULATE_PACKETS uint32_t offset = first_offset + total_len; uint32_t max_offset = first_offset + level - 1; diff --git a/src/xcp_cfg.h b/src/xcp_cfg.h index a7042db6..cf81c40c 100644 --- a/src/xcp_cfg.h +++ b/src/xcp_cfg.h @@ -28,58 +28,109 @@ // #define XCP_PROTOCOL_LAYER_VERSION 0x0103 // GET_DAQ_CLOCK_MULTICAST, GET_TIME_CORRELATION_PROPERTIES #define XCP_PROTOCOL_LAYER_VERSION 0x0104 // PACKED_MODE, CC_START_STOP_SYNCH prepare +// Maximum length of EPK string (excluding null terminator), must be odd +#define XCP_EPK_MAX_LENGTH 31 + +// Maximum length of the project name (excluding null terminator), must be odd +#define XCP_PROJECT_NAME_MAX_LENGTH 31 + /*----------------------------------------------------------------------------*/ // Enable calibration segment list management -#ifndef XCPLIB_FOR_RUST // Not needed for Rust xcp-lite, has its own calibration segment management and uses the callbacks #ifdef OPTION_CAL_SEGMENTS #define XCP_ENABLE_CALSEG_LIST #if OPTION_CAL_SEGMENT_COUNT > 0 #define XCP_MAX_CALSEG_COUNT OPTION_CAL_SEGMENT_COUNT #endif #endif // OPTION_CAL_SEGMENTS -#endif /*----------------------------------------------------------------------------*/ /* Address, address extension coding */ /* -Address extensions: -0x00 - Calibration segment relative addressing mode (XCP_ADDR_EXT_SEG) +Address extensions and addressing modes: + +XCPlite absolute addressing: XCPLITE__ACSDD (default) +0x00 - Calibration segment relative addressing mode (XCP_ADDR_EXT_SEG with u16 offset) 0x01 - Absolute addressing mode (XCP_ADDR_EXT_ABS) -0x02-0x04 - Event based relative addressing mode with asynchronous access ([XCP_ADDR_EXT_DYN+x]) +0x02 - Stackframe relative (Event based relative addressing mode with asynchronous access and i16 offset) +0x03-0x04 - Pointer relative (Event based relative addressing mode with asynchronous access and i16 offset) 0x05-0xFC - Reserved 0xFD - A2L upload memory space (XCP_ADDR_EXT_A2L) 0xFE - MTA pointer address space (XCP_ADDR_EXT_PTR) 0xFF - Undefined address extension (XCP_UNDEFINED_ADDR_EXT) + +XCPlite relative addressing: XCPLITE__CASDD: +0x00 - Absolute addressing mode (XCP_ADDR_EXT_ABS) +0x01 - Calibration segment relative addressing mode (XCP_ADDR_EXT_SEG) + +xcp-lite >=V1.0.0 for Rust XCPLITE__C_DR: +0x00 - Calibration segment relative addressing mode (XCP_ADDR_EXT_SEG with u16 offset) +0x01 - Absolute addressing mode (XCP_ADDR_EXT_ABS) not used +0x02 - Pointer relative (XCP_ADDR_EXT_DYN) (Event based relative addressing mode with asynchronous access and i16 offset) +0x03 - Stackframe relative (XCP_ADDR_EXT_REL) (Not event based address enoding, with i32 offset) + */ -// --- Event based addressing mode without asynchronous access -#ifdef XCPLIB_FOR_RUST +// @@@@ TODO: Move the Rust xcp-lite addressing mode configuration to xcplib_cfg.h +#ifdef XCPLIB_FOR_RUST // XCPLIB_FOR_RUST is set by the Rust build script + +// Rust xcp-lite uses only relative addressing (0x03) and dynamic addressing (0x02) +// Since version 1.0.0, calibration segment management and calibration access are handled by xcplib +#define XCP_ADDRESS_MODE_XCPLITE__C_DR +#define XCP_ADDRESS_MODE "XCPLITE__C_DR" +// #define XCP_ENABLE_APP_ADDRESSING +// #define XCP_ADDR_EXT_APP 0x00 +#define XCP_ENABLE_SEG_ADDRESSING +#define XCP_ADDR_EXT_SEG 0x00 +// #define XCP_ENABLE_ABS_ADDRESSING +// #define XCP_ADDR_EXT_ABS 0x01 +#define XCP_ENABLE_DYN_ADDRESSING +#define XCP_ADDR_EXT_DYN 0x02 +#define XCP_ADDR_EXT_DYN_MAX 0x02 #define XCP_ENABLE_REL_ADDRESSING +#define XCP_ADDR_EXT_REL 0x03 + +#else + +// C/C++ XCPlite uses absolute, dynamic and calibration segment relative addressing +#if !defined(XCP_ENABLE_CALSEG_LIST) || defined(OPTION_CAL_SEGMENTS_ABS) +// Absolute calibration segment addressing mode +#define XCP_ADDRESS_MODE_XCPLITE__ACSDD +#define XCP_ADDRESS_MODE "XCPLITE__ACSDD" +#define XCP_ENABLE_ABS_ADDRESSING +#define XCP_ADDR_EXT_ABS 0x00 +#define XCP_ENABLE_SEG_ADDRESSING +#define XCP_ADDR_EXT_SEG 0x01 +#else +// Relative calibration segment addressing mode +#define XCP_ADDRESS_MODE_XCPLITE__CASDD +#define XCP_ADDRESS_MODE "XCPLITE__CASDD" +#define XCP_ENABLE_SEG_ADDRESSING +#define XCP_ADDR_EXT_SEG 0x00 +#define XCP_ENABLE_ABS_ADDRESSING +#define XCP_ADDR_EXT_ABS 0x01 +#endif +#define XCP_ENABLE_DYN_ADDRESSING +#define XCP_ADDR_EXT_DYN 0x02 +#define XCP_ADDR_EXT_DYN_MAX 0x04 + #endif + +// --- Relative addressing modes without asynchronous access and i32 offset #ifdef XCP_ENABLE_REL_ADDRESSING // Use addr_ext XCP_ADDR_EXT_REL to indicate relative addr format (rel_base + (offset as int32_t)) // Used for stack frame relative addressing -#define XCP_ADDR_EXT_REL 0x03 // Event relative address format #define XcpAddrIsRel(addr_ext) ((addr_ext) == XCP_ADDR_EXT_REL) #define XcpAddrEncodeRel(signed_int32_offset) ((uint32_t)(signed_int32_offset & 0xFFFFFFFF)) #define XcpAddrDecodeRelOffset(addr) (int32_t)(addr) // signed address offset #endif // XCP_ENABLE_REL_ADDRESSING -// --- Event based addressing modes with asynchronous access -#define XCP_ENABLE_DYN_ADDRESSING +// --- Event based relative addressing modes with asynchronous access and i16 offset #ifdef XCP_ENABLE_DYN_ADDRESSING -// Use addr_ext DYN to indicate relative addr format (dyn_base + (((event as uint16_t) <<16) | offset as int16_t)) -#define XCP_ADDR_EXT_DYN 0x02 // Relative address format 0x02..0x04 (stack, base_addr1, base_addr2) -#ifdef XCPLIB_FOR_RUST -#define XCP_ADDR_EXT_DYN_MAX 0x02 -#else -#define XCP_ADDR_EXT_DYN_MAX 0x03 -#endif - +// Relative addr format (dyn_base + (((event as uint16_t) <<16) | offset as int16_t)) #define XcpAddrIsDyn(addr_ext) (((addr_ext) >= XCP_ADDR_EXT_DYN && (addr_ext) <= XCP_ADDR_EXT_DYN_MAX)) #define XcpAddrEncodeDyn(signed_int16_offset, event) (((uint32_t)(event) << 16) | ((signed_int16_offset) & 0xFFFF)) #define XcpAddrDecodeDynEvent(addr) (uint16_t)((addr) >> 16) // event @@ -88,12 +139,10 @@ Address extensions: #endif // XCP_ENABLE_DYN_ADDRESSING // --- Asynchronous absolute addressing mode (not thread safe) -#define XCP_ENABLE_ABS_ADDRESSING #ifdef XCP_ENABLE_ABS_ADDRESSING -// Use addr_ext XCP_ADDR_EXT_ABS to indicate absolute addr format (ApplXcpGetBaseAddr() + (addr as uint32_t)) +// Absolute addr format (xcp_get_base_addr() + (addr as uint32_t)) // Used for global data -#define XCP_ADDR_EXT_ABS 0x01 // Absolute address format #define XcpAddrIsAbs(addr_ext) ((addr_ext) == XCP_ADDR_EXT_ABS) #define XcpAddrEncodeAbs(p) ApplXcpGetAddr(p) // Calculate absolute address encoding from a pointer, application specific function #define XcpAddrDecodeAbsOffset(addr) (uint32_t)(addr) @@ -101,23 +150,30 @@ Address extensions: #endif // XCP_ENABLE_ABS_ADDRESSING // --- Calibration segment relative addressing mode -#ifdef XCP_ENABLE_CALSEG_LIST // If calibration segments are enabled +#ifdef XCP_ENABLE_SEG_ADDRESSING + +#ifndef XCP_ENABLE_CALSEG_LIST +#error "XCP_ENABLE_SEG_ADDRESSING requires XCP_ENABLE_CALSEG_LIST" +#endif + +#define XcpAddrIsSeg(addr_ext) ((addr_ext) == XCP_ADDR_EXT_SEG) // Enable the EPK calibration segment to detect HEX file incompatibility #ifdef OPTION_CAL_SEGMENT_EPK #define XCP_ENABLE_EPK_CALSEG #endif -#define XCP_ADDR_EXT_SEG 0x00 // Segment relative address format, must be 0, CANape does not support memory segment address extensions -#define XcpAddrIsSeg(addr_ext) ((addr_ext) == XCP_ADDR_EXT_SEG) +#if defined(XCP_ENABLE_EPK_CALSEG) && XCP_ADDR_EXT_SEG == 0 + +#define XCP_ADDR_EPK 0x80000000 // Segment relative EPK address +#define XcpAddrEncodeSegIndex(seg_index, offset) (uint32_t)(0x80000000 + ((uint32_t)((seg_index)) << 16) + (offset)) +// Assuming the EPK calibration segment has the lowest segment index (0) -#ifdef XCP_ENABLE_EPK_CALSEG -#define XCP_ADDR_EPK 0x80000000 -#define XcpAddrEncodeSegIndex(seg_index, offset) \ - (0x80000000 + (((uint32_t)((seg_index) + 1)) << 16) + (offset)) // +1, because 0x80000000 is used to access the virtual A2L EPK segment #else -#define XCP_ADDR_EPK 0xFFFF0000 -#define XcpAddrEncodeSegIndex(seg_index, offset) (0x80000000 + (((uint32_t)(seg_index)) << 16) + (offset)) // +1, because 0x80000000 is used to access the virtual A2L EPK segment + +#define XCP_ADDR_EPK 0xFFFFFF00 // Absolute EPK address +#define XcpAddrEncodeSegIndex(seg_index, offset) (0x80000000 + (((uint32_t)(seg_index)) << 16) + (offset)) + #endif #define XcpAddrEncodeSegNumber(seg_number, offset) (0x80000000 + (((uint32_t)((seg_number))) << 16) + (offset)) @@ -126,9 +182,12 @@ Address extensions: #else +#define XCP_ADDR_EPK 0xFFFFFF00 + +#endif // XCP_ENABLE_SEG_ADDRESSING + // --- Application specific addressing mode for external calibration segment management and memory access // If built-in calibration segment management is disabled -#define XCP_ENABLE_APP_ADDRESSING #ifdef XCP_ENABLE_APP_ADDRESSING // Use addr_ext XCP_ADDR_EXT_APP/SEG to indicate application specific addr format or segment relative address format @@ -139,10 +198,6 @@ Address extensions: #endif // XCP_ENABLE_APP_ADDRESSING -#define XCP_ADDR_EPK 0xFFFF0000 - -#endif // !defined(XCP_ENABLE_CALSEG_LIST) - // --- Internally used address extensions // Use addr_ext XCP_ADDR_EXT_EPK to indicate EPK upload memory space // A2L specification does not allow to specify the address extension for the EPK address, we use a virtual calibration segment (number 0, address ext 0) @@ -159,19 +214,55 @@ Address extensions: /*----------------------------------------------------------------------------*/ /* Protocol features and commands */ -#define XCP_ENABLE_CAL_PAGE // Enable calibration page commands -#ifdef XCP_ENABLE_CAL_PAGE +// Enable calibration page commands (GET/SET_CAL_PAGE and COPY_CAL_PAGE) and 2 explicit pages (reference and working page) per segment +#ifndef OPTION_CAL_SEGMENTS_SINGLE_PAGE -// Enable calibration page initialization (FLASH->RAM copy) +// Enable calibration page management with 2 pages (reference and working) +#define XCP_ENABLE_CAL_PAGE #define XCP_ENABLE_COPY_CAL_PAGE -// Enable calibration page freeze request +// Enable calibration page initialization (COPY_CAL_PAGE, FLASH->RAM copy only) +// Activate workaround for CANape issue with COPY_CAL_PAGE command +// COPY_CAL_PAGE always copies all segments from default to working, this is not compliant to the XCP specification +#define XCP_ENABLE_COPY_CAL_PAGE_WORKAROUND + +#endif +#ifdef XCP_ENABLE_CAL_PAGE + +#ifdef OPTION_CAL_SEGMENTS_START_ON_REFERENCE_PAGE +#define XCP_START_ON_REFERENCE_PAGE +#endif + +// Single page mode +#else + +#ifdef OPTION_CAL_SEGMENTS_START_ON_REFERENCE_PAGE +#error "START_ON_REFERENCE_PAGE is not supported in single page mode!" +#endif + +#endif // XCP_ENABLE_CAL_PAGE + +// Enable working page freeze request +// There are 2 modes: +// 1. A persisted working page will become the new reference page (this requires segment relative addressing mode) +// 2. Just persist the working page #ifdef OPTION_CAL_PERSISTENCE + +// Enable persistence of calibration segments +#define XCP_ENABLE_CAL_PERSISTENCE + +// Enable the FREEZE_CAL_PAGE command #define XCP_ENABLE_FREEZE_CAL_PAGE -#endif +// #define XCP_ENABLE_FREEZE_ON_DISCONNECT +// Enable persistence of reference (default) page, instead of working page +// This requires segment relative addressing mode ! +#ifdef OPTION_CAL_REFERENCE_PAGE_PERSISTENCE +#define XCP_ENABLE_REFERENCE_PAGE_PERSISTENCE #endif +#endif // OPTION_CAL_PERSISTENCE + // Enable checksum calculation command #define XCP_ENABLE_CHECKSUM #define XCP_CHECKSUM_TYPE XCP_CHECKSUM_TYPE_CRC16CCITT @@ -208,21 +299,24 @@ Address extensions: #ifdef OPTION_DAQ_MEM_SIZE #define XCP_DAQ_MEM_SIZE OPTION_DAQ_MEM_SIZE #else -#define XCP_DAQ_MEM_SIZE (1024 * 5) // Amount of memory for DAQ tables, each ODT entry (e.g. measurement variable or memory block) needs 5 bytes +#define XCP_DAQ_MEM_SIZE (1024 * 6) // Amount of memory for DAQ tables, each ODT entry (e.g. measurement variable or memory block) needs 5 bytes #endif -// Enable DAQ resume mode -#define XCP_ENABLE_DAQ_RESUME +// Enable DAQ resume mode, requires XCP_ENABLE_DAQ_EVENT_LIST +// #define XCP_ENABLE_DAQ_RESUME + +// Enable prescaler for DAQ events, requires XCP_ENABLE_DAQ_EVENT_LIST +#define XCP_ENABLE_DAQ_PRESCALER // Overrun indication via PID -// Not needed for Ethernet, client detects data loss via transport layer counters +// Not needed for Ethernet, client detects data loss via transport layer counter gaps // #define XCP_ENABLE_OVERRUN_INDICATION_PID /*----------------------------------------------------------------------------*/ /* DAQ event management */ // Enable event list -#ifndef XCPLIB_FOR_RUST // Not needed for Rust xcp-lite, has its own event management +#ifndef XCPLIB_FOR_RUST // // Set by the Rust build script, not needed for Rust xcp-lite, currently has its own event management #define XCP_ENABLE_DAQ_EVENT_LIST #endif diff --git a/test/a2l_test/src/main.c b/test/a2l_test/src/main.c index e8ce8ede..b3f5e868 100644 --- a/test/a2l_test/src/main.c +++ b/test/a2l_test/src/main.c @@ -11,24 +11,19 @@ #include "xcpLite.h" -// Not public API -extern bool A2lCheckFinalizeOnConnect(void); - -// static bool file_exists(const char *path) { -// FILE *file = fopen(path, "r"); -// if (file) { -// fclose(file); -// return true; -// } -// return false; -// } +// Not public API, external linkage for testing +extern bool A2lCheckFinalizeOnConnect(uint8_t connect_mode); + +// a2ltool from crates.io +// Set the correct path or install it +#define A2lTOOL_PATH "a2ltool" #define OPTION_PROJECT_NAME "a2l_test" // A2L project name +#define OPTION_PROJECT_EPK __TIME__ // EPK version string #define OPTION_LOG_LEVEL 4 // Log level, 0 = no log, 1 = error, 2 = warning, 3 = info, 4 = debugs #define OPTION_USE_TCP false // TCP or UDP #define OPTION_SERVER_PORT 5555 // Port #define OPTION_SERVER_ADDR {0, 0, 0, 0} // Bind addr, 0.0.0.0 = ANY -#define OPTION_QUEUE_SIZE 1024 * 32 // Size of the measurement queue in bytes, must be a multiple of 8 //----------------------------------------------------------------------------------------------------- // Measurements @@ -239,13 +234,13 @@ int main() { // XCP must be initialized and activated before A2L generation // Initialize the XCP singleton, activate XCP // If XCP is not activated, the server will not start and all XCP instrumentation will be passive with minimal overhead - XcpInit(true); + XcpInit(OPTION_PROJECT_NAME, OPTION_PROJECT_EPK, true); XcpSetLogLevel(OPTION_LOG_LEVEL); // Set the log level for XCP // No need to start the XCP server // Initialize the XCP Server uint8_t addr[4] = OPTION_SERVER_ADDR; - if (!A2lInit(OPTION_PROJECT_NAME, "EPK", addr, OPTION_SERVER_PORT, OPTION_USE_TCP, A2L_MODE_WRITE_ALWAYS | A2L_MODE_AUTO_GROUPS)) { + if (!A2lInit(addr, OPTION_SERVER_PORT, OPTION_USE_TCP, A2L_MODE_WRITE_ALWAYS | A2L_MODE_AUTO_GROUPS)) { return 1; } @@ -277,7 +272,7 @@ int main() { A2lCreateMapWithSharedAxis(static_map2, 8, 4, "Global memory parameter", "", -128, 127, "static_map2_x_axis", "static_map2_y_axis"); A2lCreateAxis(static_map2_x_axis, 8, "Global memory parameter", "unit", 0, 1000.0); A2lCreateAxis(static_map2_y_axis, 4, "Global memory parameter", "unit", 0, 500.0); - A2lCreateMapWithSharedAxis(static_map3, 8, 4, "Global memory parameter", "", -128, 127, "static_map3_x_axis", NULL); + A2lCreateMapWithSharedAxis(static_map3, 8, 4, "Global memory parameter", "", 0, 10000, "static_map3_x_axis", NULL); A2lCreateAxis(static_map3_x_axis, 8, "Global memory parameter", "unit", 0, 1000.0); // Create parameters in the struct instance params in global memory @@ -298,7 +293,7 @@ int main() { A2lCreateMapWithSharedAxis(static_params.map2, 8, 4, "Global memory parameter struct field", "", -128, 127, "static_params.map2_x_axis", "static_params.map2_y_axis"); A2lCreateAxis(static_params.map2_x_axis, 8, "Global memory parameter struct field", "unit", 0, 1000.0); A2lCreateAxis(static_params.map2_y_axis, 4, "Global memory parameter struct field", "unit", 0, 500.0); - A2lCreateMapWithSharedAxis(static_params.map3, 8, 4, "Global memory parameter struct field", "", -128, 127, "static_params.map3_x_axis", NULL); + A2lCreateMapWithSharedAxis(static_params.map3, 8, 4, "Global memory parameter struct field", "", 0, 127, "static_params.map3_x_axis", NULL); A2lCreateAxis(static_params.map3_x_axis, 8, "Global memory parameter struct field", "unit", 0, 1000.0); A2lEndGroup(); @@ -309,26 +304,26 @@ int main() { // It supports XCP/ECU independent page switching, checksum calculation and reinitialization (copy reference page to working page) tXcpCalSegIndex calseg1 = XcpCreateCalSeg("params", (const void *)¶ms, sizeof(params)); assert(calseg1 != XCP_UNDEFINED_CALSEG); // Ensure the calibration segment was created successfully - A2lTypedefBegin(params_t, "comment"); - A2lTypedefParameterComponent(uint8, params_t, "Parameter typedef field", "unit", 0, 255); - A2lTypedefParameterComponent(uint16, params_t, "Parameter typedef field", "unit", 0, 65535); - A2lTypedefParameterComponent(uint32, params_t, "Parameter typedef field", "unit", 0, 4294967295); - A2lTypedefParameterComponent(uint_64, params_t, "Parameter typedef field", "unit", 0, 1e15); - A2lTypedefParameterComponent(int8, params_t, "Parameter typedef field", "unit", -128, 127); - A2lTypedefParameterComponent(int16, params_t, "Parameter typedef field", "unit", -32768, 32767); - A2lTypedefParameterComponent(int32, params_t, "Parameter typedef field", "unit", -2147483647 - 1, 2147483647); - A2lTypedefParameterComponent(int_64, params_t, "Parameter typedef field", "unit", -1e19, 1e19); - A2lTypedefParameterComponent(float4, params_t, "Parameter typedef field", "unit", -1000.0, 1000.0); - A2lTypedefParameterComponent(double8, params_t, "Parameter typedef field", "unit", -1000.0, 1000.0); - A2lTypedefCurveComponent(curve1, params_t, 8, "Parameter typedef field", "unit", -20, 20); - A2lTypedefCurveComponentWithSharedAxis(curve2, params_t, 8, "Parameter typedef field", "unit", 0, 1000.0, "curve2_axis"); - A2lTypedefAxisComponent(curve2_axis, params_t, 8, "Parameter typedef field", "unit", 0, 20); - A2lTypedefMapComponent(map1, params_t, 8, 8, "Parameter typedef field", "", -128, 127); - A2lTypedefMapComponentWithSharedAxis(map2, params_t, 8, 4, "Parameter typedef field", "", -128, 127, "map2_x_axis", "map2_y_axis"); - A2lTypedefAxisComponent(map2_x_axis, params_t, 8, "Parameter typedef field", "unit", 0, 1000.0); - A2lTypedefAxisComponent(map2_y_axis, params_t, 4, "Parameter typedef field", "unit", 0, 500.0); - A2lTypedefMapComponentWithSharedAxis(map3, params_t, 8, 4, "Parameter typedef field", "", -128, 127, "map3_x_axis", NULL); - A2lTypedefAxisComponent(map3_x_axis, params_t, 8, "Parameter typedef field", "unit", 0, 1000.0); + A2lTypedefBegin(params_t, ¶ms, "Calibration parameters typedef"); + A2lTypedefParameterComponent(uint8, "Parameter typedef field", "unit", 0, 255); + A2lTypedefParameterComponent(uint16, "Parameter typedef field", "unit", 0, 65535); + A2lTypedefParameterComponent(uint32, "Parameter typedef field", "unit", 0, 4294967295); + A2lTypedefParameterComponent(uint_64, "Parameter typedef field", "unit", 0, 1e15); + A2lTypedefParameterComponent(int8, "Parameter typedef field", "unit", -128, 127); + A2lTypedefParameterComponent(int16, "Parameter typedef field", "unit", -32768, 32767); + A2lTypedefParameterComponent(int32, "Parameter typedef field", "unit", -2147483647 - 1, 2147483647); + A2lTypedefParameterComponent(int_64, "Parameter typedef field", "unit", -1e6, 1e6); + A2lTypedefParameterComponent(float4, "Parameter typedef field", "unit", -1000.0, 1000.0); + A2lTypedefParameterComponent(double8, "Parameter typedef field", "unit", -1000.0, 1000.0); + A2lTypedefCurveComponent(curve1, 16, "Parameter typedef field", "unit", -20, 20); + A2lTypedefCurveComponentWithSharedAxis(curve2, 8, "Parameter typedef field", "unit", 0, 1000.0, "curve2_axis"); + A2lTypedefAxisComponent(curve2_axis, 8, "Parameter typedef field", "unit", 0, 20); + A2lTypedefMapComponent(map1, 8, 8, "Parameter typedef field", "", -128, 127); + A2lTypedefMapComponentWithSharedAxis(map2, 8, 4, "Parameter typedef field", "", -128, 127, "map2_x_axis", "map2_y_axis"); + A2lTypedefAxisComponent(map2_x_axis, 8, "Parameter typedef field", "unit", 0, 1000.0); + A2lTypedefAxisComponent(map2_y_axis, 4, "Parameter typedef field", "unit", 0, 500.0); + A2lTypedefMapComponentWithSharedAxis(map3, 4, 4, "Parameter typedef field", "", 0, 127, "map3_x_axis", NULL); + A2lTypedefAxisComponent(map3_x_axis, 4, "Parameter typedef field", "unit", 0, 1000.0); A2lTypedefEnd(); A2lSetSegmentAddrMode(calseg1, params); @@ -345,7 +340,7 @@ int main() { A2lCreateParameter(params.int8, "Parameter in calibration segment", "unit", -128, 127); A2lCreateParameter(params.int16, "Parameter in calibration segment", "unit", -32768, 32767); A2lCreateParameter(params.int32, "Parameter in calibration segment", "unit", -2147483647 - 1, 2147483647); - A2lCreateParameter(params.int_64, "Parameter in calibration segment", "unit", -1e19, 1e19); + A2lCreateParameter(params.int_64, "Parameter in calibration segment", "unit", -1e6, 1e6); A2lCreateParameter(params.float4, "Parameter in calibration segment", "unit", -1000.0, 1000.0); A2lCreateParameter(params.double8, "Parameter in calibration segment", "unit", -1000.0, 1000.0); A2lCreateCurve(params.curve1, 8, "Parameter in calibration segment", "unit", -20, 20); @@ -356,7 +351,7 @@ int main() { A2lCreateAxis(params.map3_x_axis, 8, "Comment", "unit", 0, 1000.0); A2lCreateCurveWithSharedAxis(params.curve2, 8, "Comment", "unit", 0, 1000.0, "params.curve2_axis"); A2lCreateMapWithSharedAxis(params.map2, 8, 4, "Comment", "", -128, 127, "params.map2_x_axis", "params.map2_y_axis"); - A2lCreateMapWithSharedAxis(params.map3, 8, 4, "Comment", "", -128, 127, "params.map3_x_axis", NULL); + A2lCreateMapWithSharedAxis(params.map3, 8, 4, "Comment", "", 0, 127, "params.map3_x_axis", NULL); //--------------------------------------------------------------------------------------------------------------------------------- // Measurement @@ -415,15 +410,17 @@ int main() { A2lCreatePhysMeasurementMatrix(local_matrix, "double matrix", "conv.linear_conversion", 0.0, 10.0); // Register measurement structs - A2lTypedefBegin(struct2_t, "A2L typedef for struct2_t"); - A2lTypedefMeasurementComponent(byte_field, struct2_t); - A2lTypedefMeasurementComponent(word_field, struct2_t); + + A2lTypedefBegin(struct2_t, &struct2, "A2L typedef for struct2_t"); + A2lTypedefMeasurementComponent(byte_field, "Byte field"); + A2lTypedefMeasurementComponent(word_field, "Word field"); A2lTypedefEnd(); - A2lTypedefBegin(struct1_t, "A2L typedef for struct1_t"); - A2lTypedefMeasurementComponent(byte_field, struct1_t); - A2lTypedefMeasurementComponent(word_field, struct1_t); - A2lTypedefMeasurementArrayComponent(array_field, struct1_t); - A2lTypedefComponent(struct_field, struct2_t, 1, struct1_t); + + A2lTypedefBegin(struct1_t, &struct1, "A2L typedef for struct1_t"); + A2lTypedefMeasurementComponent(byte_field, "Byte field"); + A2lTypedefMeasurementComponent(word_field, "Word field"); + A2lTypedefMeasurementArrayComponent(array_field, "Array field"); + A2lTypedefComponent(struct_field, struct1_t, 1); A2lTypedefEnd(); // Local (Stack) variables of struct type @@ -453,7 +450,7 @@ int main() { A2lCreateTypedefReference(heap_struct1, struct1_t, "Pointer to struct1_t on heap"); A2lFinalize(); - assert(A2lCheckFinalizeOnConnect()); // XCP connect is now allowed, the A2L file is finalized + assert(A2lCheckFinalizeOnConnect(0)); // XCP connect is now allowed, the A2L file is finalized // Execute A2L checker using Rust a2ltool https://github.com/DanielT/a2ltool /* @@ -474,7 +471,8 @@ int main() { Display the XCP settings in the a2l file, if they exist */ printf("Running A2L validation tool...\n"); - int result = system("../a2ltool/target/release/a2ltool -c -s a2l_test.a2l"); + // int result = system(A2lTOOL_PATH " --check --strict a2l_test.a2l"); + int result = system(A2lTOOL_PATH " --check a2l_test.a2l"); if (result == 0) { printf("A2L validation passed\n"); } else { @@ -482,19 +480,19 @@ int main() { } // Compare a2l_test.a2l to the expected output in test/a2l_test/a2l_test_expected.a2l - printf("Comparing generated A2L file with expected output...\n"); - result = system("diff a2l_test.a2l ./test/a2l_test/a2l_test_expected.a2l"); - if (result == 0) { - printf("A2L file matches expected output\n"); - } else if (result == 1) { - printf("A2L file does not match expected output\n"); - } else { - printf("Error comparing A2L file, exit code: %d\n", result); - } + // printf("Comparing generated A2L file with expected output...\n"); + // result = system("diff a2l_test.a2l ./test/a2l_test/a2l_test_expected.a2l"); + // if (result == 0) { + // printf("A2L file matches expected output\n"); + // } else if (result == 1) { + // printf("A2L file does not match expected output\n"); + // } else { + // printf("Error comparing A2L file, exit code: %d\n", result); + // } // Run A2l update // printf("Running A2L update tool...\n"); - // result = system("../a2ltool/target/release/a2ltool -v -e build/a2l_test.out --update -o a2l_test_updated.a2l a2l_test.a2l"); + // result = system(A2lTOOL_PATH " --verbose --elffile build/a2l_test.out --update --output a2l_test_updated.a2l a2l_test.a2l"); // if (result == 0) { // printf("A2L update passed\n"); // } else { diff --git a/test/cal_test/src/main.cpp b/test/cal_test/src/main.cpp index 45429cad..748a9c35 100644 --- a/test/cal_test/src/main.cpp +++ b/test/cal_test/src/main.cpp @@ -9,33 +9,45 @@ #include // for std::thread #include +// Public xcplib API #include "a2l.hpp" // for xcplib A2l generation application programming interface #include "xcplib.hpp" // for xcplib application programming interface -#include "xcp_cfg.h" +// Internal xcplib includes +// Note: Take care for include order, when using internal xcplib headers !! +// xcp_cfg.h would includes main_cfg.h and platform.h, which enables atomic emulation under Windows, we use in this file +#include "main_cfg.h" +#undef OPTION_ATOMIC_EMULATION +#include "dbg_print.h" +#include "platform.h" +#include "xcp_cfg.h" // For XcpAddrEncodeSegIndex // Internally used XCP functions for testing extern "C" { uint8_t XcpWriteMta(uint8_t size, const uint8_t *data); uint8_t XcpSetMta(uint8_t ext, uint32_t addr); uint8_t XcpCalSegCommand(uint8_t cmd); +uint8_t XcpCalSegSetCalPage(uint8_t segment, uint8_t page, uint8_t mode); } //----------------------------------------------------------------------------------------------------- // XCP parameters #define OPTION_PROJECT_NAME "cal_test" // A2L project name +#define OPTION_PROJECT_EPK __TIME__ // EPK version string #define OPTION_USE_TCP false // TCP or UDP #define OPTION_SERVER_PORT 5555 // Port #define OPTION_SERVER_ADDR {0, 0, 0, 0} // Bind addr, 0.0.0.0 = ANY #define OPTION_QUEUE_SIZE (1024 * 256) // Size of the measurement queue in bytes, must be a multiple of 8 #define OPTION_LOG_LEVEL 3 // Log level, 0 = no log, 1 = error, 2 = warning, 3 = info, 4 = debug -#define DEFAULT_THREAD_COUNT 10 // Default number of threads -#define DEFAULT_TEST_WRITE_COUNT 100000 // Default test writes -#define DEFAULT_TASK_LOOP_DELAY_US 250 // Task loop delay in us -#define DEFAULT_MAIN_LOOP_DELAY_US 50 // Write loop delay in us -#define DEFAULT_TEST_DATA_SIZE 16 // Default test data size +#define TEST_THREAD_COUNT 32 // Number of threads +#define TEST_WRITE_COUNT 20000 // Test writes +#define TEST_ATOMIC_CAL // Test with atomic begin/end calibration segment access +#define TEST_TASK_LOOP_DELAY_US 50 // Task loop delay in us +#define TEST_TASK_LOCK_DELAY_US 0 // Task lock delay in us +#define TEST_MAIN_LOOP_DELAY_US 200 // Write loop delay in us +#define TEST_DATA_SIZE 128 // Default test data size //----------------------------------------------------------------------------------------------------- // Demo calibration parameters @@ -43,13 +55,12 @@ uint8_t XcpCalSegCommand(uint8_t cmd); typedef struct { uint32_t checksum; bool run; - // Number of threads to create - uint8_t data[DEFAULT_TEST_DATA_SIZE]; + uint8_t data[TEST_DATA_SIZE]; } ParametersT; // Default parameters - make this global/static so the address is stable -static ParametersT kParameters = {.checksum = 0, .run = true, .data = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}}; +static ParametersT kParameters = {.checksum = 0, .run = true, .data = {0}}; // Global calibration segment handle static xcplib::CalSeg *calseg = nullptr; // Pointer to the calibration segment wrapper @@ -59,10 +70,13 @@ static xcplib::CalSeg *calseg = nullptr; // Pointer to the calibrat // Thread statistics struct ThreadStats { + + uint32_t thread_id{0}; + std::atomic read_count{0}; std::atomic change_count{0}; std::atomic read_time_ns{0}; - uint32_t thread_id{0}; + std::atomic max_read_time_ns{0}; // Delete copy and move constructors ThreadStats() = default; @@ -87,7 +101,7 @@ void worker_thread(uint32_t thread_id) { stats.thread_id = thread_id; uint32_t counter = 0; - uint8_t first_byte = 0; + uint16_t first_byte = 0x100; // Create thread-specific XCP event for measurements char event_name[32]; @@ -102,23 +116,23 @@ void worker_thread(uint32_t thread_id) { printf("Thread %u started with event ID %u\n", thread_id, event_id); - while (test_running.load()) { + while (test_running.load(std::memory_order_relaxed)) { uint64_t start_time = clockGetNs(); - // Read from calibration segment + // Lock and read from calibration segment { auto parameters = calseg->lock(); // Check the parameter data for consistency and change - if (first_byte != parameters->data[0]) { + if (first_byte != (uint16_t)parameters->data[0]) { stats.change_count++; } - first_byte = parameters->data[0]; + first_byte = (uint16_t)parameters->data[0]; for (size_t i = 0; i < sizeof(parameters->data); i++) { if (parameters->data[i] != (uint8_t)(first_byte + i)) { uint64_t errors = error_count.fetch_add(1); - printf("Thread %u: Data mismatch\n", thread_id); + printf("Thread %u: Fatal error - Data mismatch\n", thread_id); printf("At index %zu: expected %u, got: %u, errors=%llu\n", i, (uint8_t)(first_byte + i), parameters->data[i], errors); break; } @@ -126,25 +140,33 @@ void worker_thread(uint32_t thread_id) { // Check if test should continue if (!parameters->run) { - test_running.store(false); + test_running.store(false, std::memory_order_relaxed); break; } - } - stats.read_time_ns += clockGetNs() - start_time; - stats.read_count++; +#if defined(TEST_TASK_LOCK_DELAY_US) && TEST_TASK_LOCK_DELAY_US > 0 + sleepUs(TEST_TASK_LOCK_DELAY_US); // Simulate some work +#endif + } // unlock calibration segment + + uint64_t read_time_ns = clockGetNs() - start_time; + if (read_time_ns > stats.max_read_time_ns.load(std::memory_order_relaxed)) { // @@@@ Not threads safe, but good enough for max measurement + stats.max_read_time_ns.store(read_time_ns, std::memory_order_relaxed); + } + stats.read_time_ns.fetch_add(read_time_ns, std::memory_order_relaxed); + stats.read_count.fetch_add(1, std::memory_order_relaxed); counter++; - if (counter % 10000 == 0) { + if (counter % 0x10000 == 0) { printf("Thread %u: read_count=%llu, change_count=%llu, errors=%llu\n", thread_id, (unsigned long long)stats.read_count, (unsigned long long)stats.change_count, (unsigned long long)error_count.load()); } // Trigger XCP measurement event - DaqEvent_i(event_id); + DaqTriggerEvent_i(event_id); // Record timing - sleepUs(DEFAULT_TASK_LOOP_DELAY_US); + sleepUs(TEST_TASK_LOOP_DELAY_US); } printf("Thread %u finished: reads=%llu\n", thread_id, (unsigned long long)stats.read_count.load()); @@ -161,7 +183,7 @@ int main(int argc, char *argv[]) { XcpSetLogLevel(OPTION_LOG_LEVEL); // Initialize XCP - XcpInit(true); + XcpInit(OPTION_PROJECT_NAME, OPTION_PROJECT_EPK, true); // Initialize XCP Server uint8_t addr[4] = OPTION_SERVER_ADDR; @@ -171,35 +193,45 @@ int main(int argc, char *argv[]) { } // Initialize A2L generation - if (!A2lInit(OPTION_PROJECT_NAME, nullptr, addr, OPTION_SERVER_PORT, OPTION_USE_TCP, A2L_MODE_WRITE_ALWAYS | A2L_MODE_FINALIZE_ON_CONNECT | A2L_MODE_AUTO_GROUPS)) { + if (!A2lInit(addr, OPTION_SERVER_PORT, OPTION_USE_TCP, A2L_MODE_WRITE_ALWAYS | A2L_MODE_FINALIZE_ON_CONNECT | A2L_MODE_AUTO_GROUPS)) { printf("Failed to initialize A2L generation\n"); return 1; } // Create the test calibration segment - auto calseg1 = xcplib::CreateCalSeg("TestParameters", kParameters); + auto calseg1 = xcplib::CreateCalSeg("kParameters", &kParameters); // Add the calibration segment description as a typedef instance to the A2L file - A2lTypedefBegin(ParametersT, "A2L Typedef for ParametersT"); - A2lTypedefParameterComponent(run, ParametersT, "Run or stop test", "", 0, 1); - A2lTypedefMeasurementArrayComponent(data, ParametersT); + A2lTypedefBegin(ParametersT, &kParameters, "A2L Typedef for ParametersT"); + A2lTypedefParameterComponent(run, "Run or stop test", "", 0, 1); + A2lTypedefCurveComponent(data, TEST_DATA_SIZE, "Test data array", "", 0, 255); A2lTypedefEnd(); calseg1.CreateA2lTypedefInstance("test_params_t", "Test parameters"); // Store the pointer to the calibration segment wrapper calseg = &calseg1; - // Initialize thread statistics + // Initialize test data + uint8_t test_data[TEST_DATA_SIZE]; + for (size_t i = 0; i < sizeof(test_data); i++) { + test_data[i] = (uint8_t)(i); + } + XcpCalSegSetCalPage(1, 0, 0x83); + XcpSetMta(XCP_ADDR_EXT_SEG, XcpAddrEncodeSegIndex(1, offsetof(ParametersT, data))); + XcpWriteMta(TEST_DATA_SIZE, &test_data[0]); + sleepMs(100); + + // Initialize test statistics thread_stats.clear(); - thread_stats.reserve(DEFAULT_THREAD_COUNT); - for (uint32_t i = 0; i < DEFAULT_THREAD_COUNT; i++) { + thread_stats.reserve(TEST_THREAD_COUNT); + for (uint32_t i = 0; i < TEST_THREAD_COUNT; i++) { thread_stats.emplace_back(std::make_unique()); } - // Create and start worker threads - printf("Starting %u worker threads...\n", DEFAULT_THREAD_COUNT); + // Create and start test threads + printf("Starting %u worker threads...\n", TEST_THREAD_COUNT); std::vector threads; - for (uint32_t i = 0; i < DEFAULT_THREAD_COUNT; i++) { + for (uint32_t i = 0; i < TEST_THREAD_COUNT; i++) { threads.emplace_back(worker_thread, i); } @@ -208,31 +240,31 @@ int main(int argc, char *argv[]) { A2lFinalize(); // Let the test run for the specified duration - printf("Test running for %u ms...\n", DEFAULT_TEST_WRITE_COUNT); - + printf("Test running for %u ms...\n", TEST_WRITE_COUNT); for (;;) { // Sleep for the specified duration - sleepUs(DEFAULT_MAIN_LOOP_DELAY_US); + sleepUs(TEST_MAIN_LOOP_DELAY_US); // Simulate modification of calibration data - uint8_t test_data[DEFAULT_TEST_DATA_SIZE]; uint8_t d0 = (uint8_t)(write_count << 1); for (size_t i = 0; i < sizeof(test_data); i++) { test_data[i] = (uint8_t)(d0 + i); } - if (write_count & 1) { - XcpSetMta(XCP_ADDR_EXT_SEG, XcpAddrEncodeSegIndex(0, offsetof(ParametersT, data))); - XcpWriteMta(DEFAULT_TEST_DATA_SIZE, &test_data[0]); - - } else { +#ifdef TEST_ATOMIC_CAL + if ((write_count & 0xFF) == 0xFF) { XcpCalSegCommand(0x01); // Begin atomic calibration operation - XcpSetMta(XCP_ADDR_EXT_SEG, XcpAddrEncodeSegIndex(0, offsetof(ParametersT, data))); - XcpWriteMta(DEFAULT_TEST_DATA_SIZE / 2, &test_data[0]); + XcpSetMta(XCP_ADDR_EXT_SEG, XcpAddrEncodeSegIndex(1, offsetof(ParametersT, data))); + XcpWriteMta(TEST_DATA_SIZE / 2, &test_data[0]); sleepUs(100); - XcpSetMta(XCP_ADDR_EXT_SEG, XcpAddrEncodeSegIndex(0, offsetof(ParametersT, data) + DEFAULT_TEST_DATA_SIZE / 2)); - XcpWriteMta(DEFAULT_TEST_DATA_SIZE / 2, &test_data[DEFAULT_TEST_DATA_SIZE / 2]); + XcpSetMta(XCP_ADDR_EXT_SEG, XcpAddrEncodeSegIndex(1, offsetof(ParametersT, data) + TEST_DATA_SIZE / 2)); + XcpWriteMta(TEST_DATA_SIZE / 2, &test_data[TEST_DATA_SIZE / 2]); XcpCalSegCommand(0x02); // End atomic calibration operation + } else +#endif + { + XcpSetMta(XCP_ADDR_EXT_SEG, XcpAddrEncodeSegIndex(1, offsetof(ParametersT, data))); + XcpWriteMta(TEST_DATA_SIZE, &test_data[0]); } write_count++; @@ -241,11 +273,14 @@ int main(int argc, char *argv[]) { } // Check if the test should continue - if (!test_running.load() || write_count >= DEFAULT_TEST_WRITE_COUNT) { + if (!test_running.load(std::memory_order_relaxed) || write_count >= TEST_WRITE_COUNT) { break; } } + // Wait a moment before stopping, to let the threads observe the last changes + sleepUs(200000); + // Signal threads to stop printf("Stopping test...\n"); test_running.store(false); @@ -261,25 +296,35 @@ int main(int argc, char *argv[]) { uint64_t total_read_count = 0; uint64_t total_change_count = 0; uint64_t total_read_time_ns = 0; + uint64_t total_max_read_time_ns = 0; uint64_t total_errors = error_count.load(); - for (uint32_t i = 0; i < DEFAULT_THREAD_COUNT; i++) { + for (uint32_t i = 0; i < TEST_THREAD_COUNT; i++) { const auto &stats = *thread_stats[i]; total_read_count += stats.read_count.load(); total_change_count += stats.change_count.load(); total_read_time_ns += stats.read_time_ns.load(); - printf("Thread %u: reads=%llu, changes=%llu, avg_time=%.2fus\n", i, (unsigned long long)stats.read_count.load(), (unsigned long long)stats.change_count.load(), - stats.read_count.load() > 0 ? (double)stats.read_time_ns.load() / stats.read_count.load() / 1000.0 : 0.0); + if (stats.max_read_time_ns.load() > total_max_read_time_ns) { + total_max_read_time_ns = stats.max_read_time_ns; + } + printf("Thread %u: reads=%llu, changes=%llu, avg_time=%.2fus, max_time=%.2fus\n", i, (unsigned long long)stats.read_count.load(), + (unsigned long long)stats.change_count.load(), stats.read_count.load() > 0 ? (double)stats.read_time_ns.load() / stats.read_count.load() / 1000.0 : 0.0, + (double)stats.max_read_time_ns.load() / 1000.0); } - printf("\nTotals:\n"); - printf(" Total reads: %llu\n", (unsigned long long)total_read_count); - printf(" Total changes: %llu\n", (unsigned long long)total_change_count); + printf("\nTotal Results:\n"); printf(" Total writes: %llu\n", (unsigned long long)write_count); + printf(" Total reads: %llu\n", (unsigned long long)total_read_count); + printf(" Total changes observed: %llu\n", (unsigned long long)total_change_count); +#ifdef OPTION_ENABLE_DBG_METRICS + printf(" Total writes pending: %u\n", gXcpWritePendingCount); + printf(" Total publish all count: %u (expected %llu)\n", gXcpCalSegPublishAllCount, (unsigned long long)(write_count / 256) + gXcpWritePendingCount); +#endif printf(" Total errors: %llu\n", (unsigned long long)error_count.load()); - printf(" Average access time: %.2f us\n", total_read_count > 0 ? (double)total_read_time_ns / total_read_count / 1000.0 : 0.0); + printf(" Average lock time: %.2f us\n", total_read_count > 0 ? (double)total_read_time_ns / total_read_count / 1000.0 : 0.0); + printf(" Maximum lock time: %.2f us\n", (double)total_max_read_time_ns / 1000.0); if (total_errors > 0) { - printf(" ERROR: %llu errors occurred during the test!\n", (unsigned long long)total_errors); + printf("ERROR: %llu errors occurred during the test!\n", (unsigned long long)total_errors); } else { - printf(" SUCCESS: No errors occurred during the test\n"); + printf("SUCCESS: No errors occurred during the test\n"); } // Shutdown XCP diff --git a/test/daq_test/src/main.c b/test/daq_test/src/main.c new file mode 100644 index 00000000..07b282b7 --- /dev/null +++ b/test/daq_test/src/main.c @@ -0,0 +1,206 @@ +// daq_test + +#include // for assert +#include // for M_PI, sin +#include // for signal handling +#ifndef _WIN32 +#include // for atomic_ +#endif +#include // for bool +#include // for uintxx_t +#include // for printf +#include // for sprintf + +// Public xcplib API +#include "a2l.h" // for xcplib A2l generation application programming interface +#include "xcplib.h" // for xcplib application programming interface + +// Internal xcplib includes +// Note: Take care for include order, when using internal xcplib headers !! +// xcp_cfg.h would includes main_cfg.h and platform.h +#include "dbg_print.h" +#include "main_cfg.h" +#include "platform.h" +#include "xcp_cfg.h" + +//----------------------------------------------------------------------------------------------------- + +#define XCP_MAX_EVENT_NAME 15 +#define THREAD_COUNT 8 // Number of threads to create +#define THREAD_DELAY_US 1 // Delay in microseconds for the thread loops + +//----------------------------------------------------------------------------------------------------- +// XCP parameters + +#define OPTION_PROJECT_NAME "daq_test" // A2L project name +#define OPTION_PROJECT_EPK __TIME__ // EPK version string +#define OPTION_USE_TCP true // TCP or UDP +#define OPTION_SERVER_PORT 5555 // Port +#define OPTION_SERVER_ADDR {0, 0, 0, 0} // Bind addr, 0.0.0.0 = ANY +#define OPTION_QUEUE_SIZE (1024 * 1024 * 8) // Size of the measurement queue in bytes, must be a multiple of 8 +#define OPTION_LOG_LEVEL 3 // Log level, 0 = no log, 1 = error, 2 = warning, 3 = info, 4 = debug + +//----------------------------------------------------------------------------------------------------- +// Demo calibration parameters + +typedef struct params { + uint16_t counter_max; // Maximum value of the counter + uint32_t delay_us; // Delay in microseconds for the thread loops + bool run; // Stop flag for the task +} params_t; + +// Default parameters +static const params_t params = {.counter_max = 1024, .delay_us = THREAD_DELAY_US, .run = true}; + +// Global calibration segment handle +static tXcpCalSegIndex calseg = XCP_UNDEFINED_CALSEG; + +//----------------------------------------------------------------------------------------------------- + +// Signal handler for clean shutdown +static volatile bool gRun = true; +static void sig_handler(int sig) { gRun = false; } + +//----------------------------------------------------------------------------------------------------- + +// Task function that runs in a separate thread +// Calculates a sine wave, square wave, and sawtooth wave signal +#ifdef _WIN32 // Windows 32 or 64 bit +DWORD WINAPI task(LPVOID p) +#else +void *task(void *p) +#endif +{ + (void)p; + + bool run = true; + uint32_t delay_us = 1; + uint64_t start_time = clockGetUs(); // Get the start time + + // Task local measurement variables on stack + uint16_t counter = 0; + uint32_t array[256] = {0}; + + // Instrumentation: Events and measurement variables + // Register task local variables counter and channelx with stack addressing mode + DaqCreateEventInstance(task); + tXcpEventId task_event_id = DaqGetEventInstanceId(task); + + // Build the task name from the event index + uint16_t task_index = XcpGetEventIndex(task_event_id); // Get the event index of this event instance + char task_name[XCP_MAX_EVENT_NAME + 1]; + snprintf(task_name, sizeof(task_name), "task_%u", task_index); + + // Create measurement variables for this task instance + A2lLock(); + A2lSetStackAddrMode_i(task_event_id); + A2lCreateMeasurementInstance(task_name, counter, "Taskloop counter"); + A2lCreateMeasurementArrayInstance(task_name, array, "task array (to increase measurement workload)"); + A2lUnlock(); + + while (run && gRun) { + + { + const params_t *params = (params_t *)XcpLockCalSeg(calseg); + + counter++; + if (counter > params->counter_max) { + counter = 0; + } + + // Sleep time + delay_us = params->delay_us; + + // Stop + run = params->run; + + XcpUnlockCalSeg(calseg); + } + + // Instrumentation: Measurement event + DaqTriggerEvent_i(task_event_id); + + // Sleep for the specified delay parameter in microseconds, defines the approximate sampling rate + sleepUs(delay_us); + } + + return 0; // Exit the thread +} + +//----------------------------------------------------------------------------------------------------- + +// Demo main +int main(void) { + + printf("\nXCP on Ethernet multi thread xcplib demo\n"); + signal(SIGINT, sig_handler); + signal(SIGTERM, sig_handler); + + // Set log level (1-error, 2-warning, 3-info, 4-show XCP commands) + XcpSetLogLevel(OPTION_LOG_LEVEL); + + // Initialize the XCP singleton, activate XCP, must be called before starting the server + // If XCP is not activated, the server will not start and all XCP instrumentation will be passive with minimal overhead + XcpInit(OPTION_PROJECT_NAME, OPTION_PROJECT_EPK, true); + + // Initialize the XCP Server + uint8_t addr[4] = OPTION_SERVER_ADDR; + if (!XcpEthServerInit(addr, OPTION_SERVER_PORT, OPTION_USE_TCP, OPTION_QUEUE_SIZE)) { + return 1; + } + + // Enable A2L generation and prepare the A2L file, finalize the A2L file on XCP connect, auto grouping + if (!A2lInit(addr, OPTION_SERVER_PORT, OPTION_USE_TCP, A2L_MODE_WRITE_ALWAYS | A2L_MODE_FINALIZE_ON_CONNECT | A2L_MODE_AUTO_GROUPS)) { + return 1; + } + + // Create a calibration segment for the calibration parameter struct + // This segment has a working page (RAM) and a reference page (FLASH), it creates a MEMORY_SEGMENT in the A2L file + // It provides safe (thread safe against XCP modifications), lock-free and consistent access to the calibration parameters + // It supports XCP/ECU independant page switching, checksum calculation and reinitialization (copy reference page to working page) + calseg = XcpCreateCalSeg("params", ¶ms, sizeof(params)); + assert(calseg != XCP_UNDEFINED_CALSEG); // Ensure the calibration segment was created successfully + + // Register calibration parameters in the calibration segment + A2lSetSegmentAddrMode(calseg, params); + A2lCreateParameter(params.counter_max, "Max counter value, wrap around", "", 0, 65535); + A2lCreateParameter(params.delay_us, "task delay time in us", "us", 0, 1000000); + A2lCreateParameter(params.run, "stop task", "", 0, 1); + + // Create multiple instances of task + THREAD t[THREAD_COUNT]; + for (int i = 0; i < THREAD_COUNT; i++) { + t[i] = 0; + create_thread(&t[i], task); + } + + sleepUs(200000); + A2lFinalize(); // @@@@ TEST: Manually finalize the A2L file to make it visible without XCP tool connect + + // Wait for signal to stop + uint16_t counter = 0; + while (gRun) { + counter++; + sleepUs(100000); // 100ms + } + + // Wait for all threads to finish + for (int i = 0; i < THREAD_COUNT; i++) { + if (t[i]) + join_thread(t[i]); + } + +#ifdef OPTION_ENABLE_DBG_METRICS + printf(" Total DAQ events: %u\n", gXcpDaqEventCount); + printf(" Total TX packets: %u\n", gXcpTxPacketCount); + printf(" Total RX packets: %u\n", gXcpRxPacketCount); +#endif + + // Force disconnect the XCP client + XcpDisconnect(); + + // Stop the XCP server + XcpEthServerShutdown(); + + return 0; +} diff --git a/test/fixtures/c_demo.a2l b/test/fixtures/c_demo.a2l new file mode 100644 index 00000000..fb586e7b --- /dev/null +++ b/test/fixtures/c_demo.a2l @@ -0,0 +1,208 @@ +ASAP2_VERSION 1 71 +/begin PROJECT c_demo "" + +/begin HEADER "" VERSION "1.0" PROJECT_NO XCPLITE__CASDD /end HEADER + +/begin MODULE c_demo "" + +/include "XCP_104.aml" + +/begin MOD_COMMON "" +BYTE_ORDER MSB_LAST +ALIGNMENT_BYTE 1 +ALIGNMENT_WORD 1 +ALIGNMENT_LONG 1 +ALIGNMENT_FLOAT16_IEEE 1 +ALIGNMENT_FLOAT32_IEEE 1 +ALIGNMENT_FLOAT64_IEEE 1 +ALIGNMENT_INT64 1 +/end MOD_COMMON + + + +/begin TYPEDEF_STRUCTURE params_t "Calibration parameters typedef" 0x8C + /begin STRUCTURE_COMPONENT test_byte1 C_test_byte1 0x8 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT test_byte2 C_test_byte2 0x9 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT counter_max C_counter_max 0x0 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT delay_us C_delay_us 0x4 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT map C_map 0xA /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT curve C_curve 0x4C /end STRUCTURE_COMPONENT +/end TYPEDEF_STRUCTURE + +/* Segment relative addressing mode: calseg=params */ +/begin INSTANCE params "Calibration parameters" params_t 0x80010000 /end INSTANCE + +/* Absolute addressing mode: default_event=mainloop (1), addr_ext=1 */ +/begin MEASUREMENT counter "Mainloop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x6E51EBA6 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT g_counter8 "Measurement variable" UBYTE NO_COMPU_METHOD 0 0 0 255 ECU_ADDRESS 0x28088 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT g_counter16 "Measurement variable" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x2808A ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT g_counter32 "Measurement variable" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x2808C ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT g_counter64 "Measurement variable" A_UINT64 NO_COMPU_METHOD 0 0 0 1e+12 ECU_ADDRESS 0x28090 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT g_counter8s "Measurement variable" SBYTE NO_COMPU_METHOD 0 0 -128 127 ECU_ADDRESS 0x28098 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT g_counter16s "Measurement variable" SWORD NO_COMPU_METHOD 0 0 -32768 32767 ECU_ADDRESS 0x2809A ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT g_counter32s "Measurement variable" SLONG NO_COMPU_METHOD 0 0 -2.14748e+09 2.14748e+09 ECU_ADDRESS 0x2809C ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT g_counter64s "Measurement variable" A_INT64 NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x280A0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT + +/* Stack frame relative addressing mode: event=mainloop (1), addr_ext=2 */ +/begin MEASUREMENT counter8 "Measurement variable" UBYTE NO_COMPU_METHOD 0 0 0 255 ECU_ADDRESS 0x1FEA5 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT counter16 "Measurement variable" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x1FEA2 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT counter32 "Measurement variable" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x1FE9C ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT counter64 "Measurement variable" A_UINT64 NO_COMPU_METHOD 0 0 0 1e+12 ECU_ADDRESS 0x1FE90 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT counter8s "Measurement variable" SBYTE NO_COMPU_METHOD 0 0 -128 127 ECU_ADDRESS 0x1FE8F ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT counter16s "Measurement variable" SWORD NO_COMPU_METHOD 0 0 -32768 32767 ECU_ADDRESS 0x1FE8C ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT counter32s "Measurement variable" SLONG NO_COMPU_METHOD 0 0 -2.14748e+09 2.14748e+09 ECU_ADDRESS 0x1FE88 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT counter64s "Measurement variable" A_INT64 NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x1FE80 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin CHARACTERISTIC array_f32 "array float[8]" VAL_BLK 0x1FFC0 F32 0 NO_COMPU_METHOD -1e+12 1e+12 MATRIX_DIM 8 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC +/begin CHARACTERISTIC matrix_f32 "matrix float[4][8]" VAL_BLK 0x1FF40 F32 0 NO_COMPU_METHOD -1e+12 1e+12 MATRIX_DIM 8 4 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC + +/begin TYPEDEF_STRUCTURE params_measurement_t "The calibration parameter struct as measurement typedef" 0x8C + /begin STRUCTURE_COMPONENT test_byte1 M_test_byte1 0x8 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT test_byte2 M_test_byte2 0x9 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT counter_max M_counter_max 0x0 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT delay_us M_delay_us 0x4 /end STRUCTURE_COMPONENT +/end TYPEDEF_STRUCTURE + +/* Absolute addressing mode: default_event=mainloop (1), addr_ext=1 */ +/begin INSTANCE params_copy "A copy of the current calibration parameters" params_measurement_t 0x2A2A0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end INSTANCE + +/* Typedefs */ +/begin RECORD_LAYOUT U8 FNC_VALUES 1 UBYTE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U8 AXIS_PTS_X 1 UBYTE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U8 "" UBYTE NO_COMPU_METHOD 0 0 0 255 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U8 "" VALUE U8 0 NO_COMPU_METHOD 0 255 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT U16 FNC_VALUES 1 UWORD ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U16 AXIS_PTS_X 1 UWORD INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U16 "" UWORD NO_COMPU_METHOD 0 0 0 65535 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U16 "" VALUE U16 0 NO_COMPU_METHOD 0 65535 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT U32 FNC_VALUES 1 ULONG ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U32 AXIS_PTS_X 1 ULONG INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U32 "" ULONG NO_COMPU_METHOD 0 0 0 4294967295 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U32 "" VALUE U32 0 NO_COMPU_METHOD 0 4.29497e+09 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT U64 FNC_VALUES 1 A_UINT64 ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U64 AXIS_PTS_X 1 A_UINT64 INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U64 "" A_UINT64 NO_COMPU_METHOD 0 0 0 1000000000000 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U64 "" VALUE U64 0 NO_COMPU_METHOD 0 1e+12 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I8 FNC_VALUES 1 SBYTE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I8 AXIS_PTS_X 1 SBYTE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I8 "" SBYTE NO_COMPU_METHOD 0 0 -128 127 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I8 "" VALUE I8 0 NO_COMPU_METHOD -128 127 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I16 FNC_VALUES 1 SWORD ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I16 AXIS_PTS_X 1 SWORD INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I16 "" SWORD NO_COMPU_METHOD 0 0 -32768 32767 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I16 "" VALUE I16 0 NO_COMPU_METHOD -32768 32767 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I32 FNC_VALUES 1 SLONG ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I32 AXIS_PTS_X 1 SLONG INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I32 "" SLONG NO_COMPU_METHOD 0 0 -2147483648 2147483647 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I32 "" VALUE I32 0 NO_COMPU_METHOD -2.14748e+09 2.14748e+09 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I64 FNC_VALUES 1 A_INT64 ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I64 AXIS_PTS_X 1 A_INT64 INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I64 "" A_INT64 NO_COMPU_METHOD 0 0 -1000000000000 1000000000000 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I64 "" VALUE I64 0 NO_COMPU_METHOD -1e+12 1e+12 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT F32 FNC_VALUES 1 FLOAT32_IEEE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_F32 AXIS_PTS_X 1 FLOAT32_IEEE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_F32 "" FLOAT32_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_F32 "" VALUE F32 0 NO_COMPU_METHOD -1e+12 1e+12 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT F64 FNC_VALUES 1 FLOAT64_IEEE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_F64 AXIS_PTS_X 1 FLOAT64_IEEE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_F64 "" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_F64 "" VALUE F64 0 NO_COMPU_METHOD -1e+12 1e+12 /end TYPEDEF_CHARACTERISTIC + +/begin TYPEDEF_CHARACTERISTIC C_test_byte1 "Test byte for calibration consistency test" VALUE I8 0 NO_COMPU_METHOD -128 127 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC C_test_byte2 "Test byte for calibration consistency test" VALUE I8 0 NO_COMPU_METHOD -128 127 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC C_counter_max "" VALUE U16 0 NO_COMPU_METHOD 0 2000 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC C_delay_us "Mainloop sleep time in us" VALUE U32 0 NO_COMPU_METHOD 0 1e+06 PHYS_UNIT "us" /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC C_map "Demo map" MAP I8 0 NO_COMPU_METHOD -128 127 /begin AXIS_DESCR FIX_AXIS NO_INPUT_QUANTITY NO_COMPU_METHOD 8 0 7 FIX_AXIS_PAR_DIST 0 1 8 /end AXIS_DESCR /begin AXIS_DESCR FIX_AXIS NO_INPUT_QUANTITY NO_COMPU_METHOD 8 0 7 FIX_AXIS_PAR_DIST 0 1 8 /end AXIS_DESCR /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC C_curve "Demo curve with fixed axis" CURVE F32 0 NO_COMPU_METHOD 0 1000 /begin AXIS_DESCR FIX_AXIS NO_INPUT_QUANTITY NO_COMPU_METHOD 8 0 7 FIX_AXIS_PAR_DIST 0 1 8 /end AXIS_DESCR PHYS_UNIT "Volt" /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_MEASUREMENT M_test_byte1 "Test byte for calibration consistency test" SBYTE NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT M_test_byte2 "Test byte for calibration consistency test" SBYTE NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT M_counter_max "Maximum counter value" UWORD NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT M_delay_us "Mainloop delay time in us" ULONG NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT + +/* Groups */ +/begin GROUP params "Calibration Segment" ROOT /begin REF_CHARACTERISTIC params /end REF_CHARACTERISTIC /end GROUP +/begin GROUP mainloop "Measurement event group" /begin REF_MEASUREMENT counter g_counter8 g_counter16 g_counter32 g_counter64 g_counter8s g_counter16s g_counter32s g_counter64s counter8 counter16 counter32 counter64 counter8s counter16s counter32s counter64s array_f32 matrix_f32 params_copy /end REF_MEASUREMENT /end GROUP +/begin GROUP Events "Events" ROOT /begin SUB_GROUP mainloop /end SUB_GROUP /end GROUP + +/* Conversions */ +/begin COMPU_METHOD conv.bool "" TAB_VERB "%.0" "" COMPU_TAB_REF conv.bool.table /end COMPU_METHOD +/begin COMPU_VTAB conv.bool.table "" TAB_VERB 2 0 "false" 1 "true" /end COMPU_VTAB +/begin COMPU_METHOD conv.events "" TAB_VERB "%.0 " "" COMPU_TAB_REF conv.events.table /end COMPU_METHOD +/begin COMPU_VTAB conv.events.table "" TAB_VERB 2 + 0 "async" 1 "mainloop" +/end COMPU_VTAB + +/begin MOD_PAR "" +EPK "20_28_34" ADDR_EPK 0x80000000 +/begin MEMORY_SEGMENT epk "" DATA FLASH INTERN 0x80000000 8 -1 -1 -1 -1 -1 +/begin IF_DATA XCP + /begin SEGMENT 0 2 0 0 0 + /begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM + /begin PAGE 0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_DONT_CARE /end PAGE + /begin PAGE 1 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_NOT_ALLOWED /end PAGE + /end SEGMENT +/end IF_DATA +/end MEMORY_SEGMENT +/begin MEMORY_SEGMENT params "" DATA FLASH INTERN 0x80010000 140 -1 -1 -1 -1 -1 +/begin IF_DATA XCP + /begin SEGMENT 1 2 0 0 0 + /begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM + /begin PAGE 0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_DONT_CARE /end PAGE + /begin PAGE 1 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_NOT_ALLOWED /end PAGE + /end SEGMENT +/end IF_DATA +/end MEMORY_SEGMENT +/end MOD_PAR + + +/begin IF_DATA XCP +/begin PROTOCOL_LAYER + 0x104 1000 2000 0 0 0 0 0 248 1024 BYTE_ORDER_MSB_LAST ADDRESS_GRANULARITY_BYTE +OPTIONAL_CMD GET_COMM_MODE_INFO +OPTIONAL_CMD GET_ID +OPTIONAL_CMD SET_REQUEST +OPTIONAL_CMD SET_MTA +OPTIONAL_CMD UPLOAD +OPTIONAL_CMD SHORT_UPLOAD +OPTIONAL_CMD DOWNLOAD +OPTIONAL_CMD SHORT_DOWNLOAD +OPTIONAL_CMD GET_CAL_PAGE +OPTIONAL_CMD SET_CAL_PAGE +OPTIONAL_CMD COPY_CAL_PAGE +OPTIONAL_CMD GET_PAG_PROCESSOR_INFO +OPTIONAL_CMD GET_SEGMENT_INFO +OPTIONAL_CMD GET_PAGE_INFO +OPTIONAL_CMD GET_SEGMENT_MODE +OPTIONAL_CMD SET_SEGMENT_MODE +OPTIONAL_CMD BUILD_CHECKSUM +OPTIONAL_CMD USER_CMD +OPTIONAL_CMD GET_DAQ_RESOLUTION_INFO +OPTIONAL_CMD GET_DAQ_PROCESSOR_INFO +OPTIONAL_CMD GET_DAQ_EVENT_INFO +OPTIONAL_CMD FREE_DAQ +OPTIONAL_CMD ALLOC_DAQ +OPTIONAL_CMD ALLOC_ODT +OPTIONAL_CMD ALLOC_ODT_ENTRY +OPTIONAL_CMD SET_DAQ_PTR +OPTIONAL_CMD WRITE_DAQ +OPTIONAL_CMD GET_DAQ_LIST_MODE +OPTIONAL_CMD SET_DAQ_LIST_MODE +OPTIONAL_CMD START_STOP_SYNCH +OPTIONAL_CMD START_STOP_DAQ_LIST +OPTIONAL_CMD GET_DAQ_CLOCK +OPTIONAL_CMD WRITE_DAQ_MULTIPLE +OPTIONAL_CMD TIME_CORRELATION_PROPERTIES +OPTIONAL_LEVEL1_CMD GET_VERSION +/end PROTOCOL_LAYER +/begin DAQ +DYNAMIC 0 2 0 OPTIMISATION_TYPE_DEFAULT ADDRESS_EXTENSION_FREE IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE 0xF8 OVERLOAD_INDICATION_PID PRESCALER_SUPPORTED +/begin TIMESTAMP_SUPPORTED 0x1 SIZE_DWORD UNIT_1NS TIMESTAMP_FIXED /end TIMESTAMP_SUPPORTED +/begin EVENT "async" "async" 0x0 DAQ 0xFF 100 4 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "mainloop" "mainloop" 0x1 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/end DAQ +/begin XCP_ON_UDP_IP + 0x104 5555 ADDRESS "192.168.0.101" +/end XCP_ON_UDP_IP +/end IF_DATA + +/end MODULE +/end PROJECT diff --git a/test/fixtures/cpp_demo.a2l b/test/fixtures/cpp_demo.a2l new file mode 100644 index 00000000..9e52f173 --- /dev/null +++ b/test/fixtures/cpp_demo.a2l @@ -0,0 +1,240 @@ +ASAP2_VERSION 1 71 +/begin PROJECT cpp_demo "" + +/begin HEADER "" VERSION "1.0" PROJECT_NO XCPLITE__CASDD /end HEADER + +/begin MODULE cpp_demo "" + +/include "XCP_104.aml" + +/begin MOD_COMMON "" +BYTE_ORDER MSB_LAST +ALIGNMENT_BYTE 1 +ALIGNMENT_WORD 1 +ALIGNMENT_LONG 1 +ALIGNMENT_FLOAT16_IEEE 1 +ALIGNMENT_FLOAT32_IEEE 1 +ALIGNMENT_FLOAT64_IEEE 1 +ALIGNMENT_INT64 1 +/end MOD_COMMON + + + +/begin TYPEDEF_STRUCTURE ParametersT "A2L Typedef for ParametersT" 0x8 + /begin STRUCTURE_COMPONENT counter_max C_counter_max 0x0 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT delay_us C_delay_us 0x4 /end STRUCTURE_COMPONENT +/end TYPEDEF_STRUCTURE + +/* Segment relative addressing mode: calseg=kParameters */ +/begin INSTANCE kParameters "Main parameters" ParametersT 0x80010000 /end INSTANCE + +/* Absolute addressing mode: default_event=mainloop (1), addr_ext=1 */ +/begin MEASUREMENT temperature "Motor temperature in °C" UBYTE conv.temperature 0 0 -50 200 ECU_ADDRESS 0x28000 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT speed "Speed in km/h" FLOAT64_IEEE NO_COMPU_METHOD 0 0 0 250 ECU_ADDRESS 0x280D0 ECU_ADDRESS_EXTENSION 1 PHYS_UNIT "km/h" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT + +/* Stack frame relative addressing mode: event=mainloop (1), addr_ext=2 */ +/begin MEASUREMENT counter "Mainloop loop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x1FBCE ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT loop_cycletime "Mainloop cycle time" A_UINT64 conv.clock_ticks 0 0 0 0.05 ECU_ADDRESS 0x1FBB8 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin CHARACTERISTIC loop_histogram "Mainloop cycle time histogram" VAL_BLK 0x1FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC +/begin MEASUREMENT sum "Sum of SigGen1 and SigGen2 value" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x1FBA8 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT + +/begin TYPEDEF_STRUCTURE LookupTableT "A2L typedef for LookupTableT" 0x2C + /begin STRUCTURE_COMPONENT values C_values 0x0 /end STRUCTURE_COMPONENT +/end TYPEDEF_STRUCTURE + +/begin TYPEDEF_STRUCTURE SignalParametersT "A2L typedef for SignalParametersT" 0x58 + /begin STRUCTURE_COMPONENT signal_type C_signal_type 0x50 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT ampl C_ampl 0x0 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT phase C_phase 0x8 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT offset C_offset 0x10 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT period C_period 0x18 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT delay_us C_delay_us 0x4C /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT lookup LookupTableT 0x20 /end STRUCTURE_COMPONENT +/end TYPEDEF_STRUCTURE + +/* Segment relative addressing mode: calseg=SigGen1 */ +/begin INSTANCE SigGen1 "Signal parameters for the signal generator" SignalParametersT 0x80020000 /end INSTANCE + +/* Segment relative addressing mode: calseg=SigGen2 */ +/begin INSTANCE SigGen2 "Signal parameters for the signal generator" SignalParametersT 0x80030000 /end INSTANCE + +/* Relative addressing mode: event=SigGen2 (2), addr_ext=3 */ +/begin MEASUREMENT SigGen2.value_ "Signal generator output" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -100 100 ECU_ADDRESS 0x20018 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT + +/* Stack frame relative addressing mode: event=SigGen2 (2), addr_ext=2 */ +/begin MEASUREMENT SigGen2.time "Signal generator time" FLOAT64_IEEE NO_COMPU_METHOD 0 0 0 3600 ECU_ADDRESS 0x2FFE0 ECU_ADDRESS_EXTENSION 2 PHYS_UNIT "s" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT + +/* Relative addressing mode: event=SigGen1 (3), addr_ext=3 */ +/begin MEASUREMENT SigGen1.value_ "Signal generator output" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -100 100 ECU_ADDRESS 0x30018 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT + +/* Stack frame relative addressing mode: event=SigGen1 (3), addr_ext=2 */ +/begin MEASUREMENT SigGen1.time "Signal generator time" FLOAT64_IEEE NO_COMPU_METHOD 0 0 0 3600 ECU_ADDRESS 0x3FFE0 ECU_ADDRESS_EXTENSION 2 PHYS_UNIT "s" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT + +/* Typedefs */ +/begin RECORD_LAYOUT U8 FNC_VALUES 1 UBYTE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U8 AXIS_PTS_X 1 UBYTE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U8 "" UBYTE NO_COMPU_METHOD 0 0 0 255 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U8 "" VALUE U8 0 NO_COMPU_METHOD 0 255 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT U16 FNC_VALUES 1 UWORD ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U16 AXIS_PTS_X 1 UWORD INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U16 "" UWORD NO_COMPU_METHOD 0 0 0 65535 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U16 "" VALUE U16 0 NO_COMPU_METHOD 0 65535 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT U32 FNC_VALUES 1 ULONG ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U32 AXIS_PTS_X 1 ULONG INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U32 "" ULONG NO_COMPU_METHOD 0 0 0 4294967295 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U32 "" VALUE U32 0 NO_COMPU_METHOD 0 4.29497e+09 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT U64 FNC_VALUES 1 A_UINT64 ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U64 AXIS_PTS_X 1 A_UINT64 INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U64 "" A_UINT64 NO_COMPU_METHOD 0 0 0 1000000000000 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U64 "" VALUE U64 0 NO_COMPU_METHOD 0 1e+12 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I8 FNC_VALUES 1 SBYTE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I8 AXIS_PTS_X 1 SBYTE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I8 "" SBYTE NO_COMPU_METHOD 0 0 -128 127 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I8 "" VALUE I8 0 NO_COMPU_METHOD -128 127 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I16 FNC_VALUES 1 SWORD ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I16 AXIS_PTS_X 1 SWORD INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I16 "" SWORD NO_COMPU_METHOD 0 0 -32768 32767 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I16 "" VALUE I16 0 NO_COMPU_METHOD -32768 32767 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I32 FNC_VALUES 1 SLONG ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I32 AXIS_PTS_X 1 SLONG INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I32 "" SLONG NO_COMPU_METHOD 0 0 -2147483648 2147483647 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I32 "" VALUE I32 0 NO_COMPU_METHOD -2.14748e+09 2.14748e+09 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I64 FNC_VALUES 1 A_INT64 ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I64 AXIS_PTS_X 1 A_INT64 INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I64 "" A_INT64 NO_COMPU_METHOD 0 0 -1000000000000 1000000000000 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I64 "" VALUE I64 0 NO_COMPU_METHOD -1e+12 1e+12 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT F32 FNC_VALUES 1 FLOAT32_IEEE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_F32 AXIS_PTS_X 1 FLOAT32_IEEE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_F32 "" FLOAT32_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_F32 "" VALUE F32 0 NO_COMPU_METHOD -1e+12 1e+12 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT F64 FNC_VALUES 1 FLOAT64_IEEE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_F64 AXIS_PTS_X 1 FLOAT64_IEEE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_F64 "" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_F64 "" VALUE F64 0 NO_COMPU_METHOD -1e+12 1e+12 /end TYPEDEF_CHARACTERISTIC + +/begin TYPEDEF_CHARACTERISTIC C_counter_max "Maximum counter value" VALUE U16 0 NO_COMPU_METHOD 0 2000 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC C_delay_us "Mainloop delay time in us" VALUE U32 0 NO_COMPU_METHOD 0 999999 PHYS_UNIT "us" /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC C_values "Lookup table" CURVE F32 0 NO_COMPU_METHOD -1 1 /begin AXIS_DESCR FIX_AXIS NO_INPUT_QUANTITY NO_COMPU_METHOD 11 0 10 FIX_AXIS_PAR_DIST 0 1 11 /end AXIS_DESCR /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC C_signal_type "Signal type" VALUE U8 0 conv.signal_type_enum 0 4 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC C_ampl "Amplitude" VALUE F64 0 NO_COMPU_METHOD 0 100 PHYS_UNIT "Volt" /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC C_phase "Phase" VALUE F64 0 NO_COMPU_METHOD 0 6.28319 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC C_offset "Offset" VALUE F64 0 NO_COMPU_METHOD -100 100 PHYS_UNIT "Volt" /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC C_period "Period" VALUE F64 0 NO_COMPU_METHOD 0.01 10 PHYS_UNIT "s" /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC C_delay_us "Delay time in us" VALUE U32 0 NO_COMPU_METHOD 0 100000 PHYS_UNIT "us" /end TYPEDEF_CHARACTERISTIC + +/* Groups */ +/begin GROUP kParameters "Calibration Segment" ROOT /begin REF_CHARACTERISTIC kParameters /end REF_CHARACTERISTIC /end GROUP +/begin GROUP mainloop "Measurement event group" /begin REF_MEASUREMENT temperature speed counter loop_cycletime loop_histogram sum /end REF_MEASUREMENT /end GROUP +/begin GROUP SigGen1 "Calibration Segment" ROOT /begin REF_CHARACTERISTIC SigGen1 /end REF_CHARACTERISTIC /end GROUP +/begin GROUP SigGen2 "Calibration Segment" ROOT /begin REF_CHARACTERISTIC SigGen2 /end REF_CHARACTERISTIC /end GROUP +/begin GROUP SigGen2 "Measurement event group" /begin REF_MEASUREMENT SigGen2.value_ SigGen2.time /end REF_MEASUREMENT /end GROUP +/begin GROUP SigGen1 "Measurement event group" /begin REF_MEASUREMENT SigGen1.value_ SigGen1.time /end REF_MEASUREMENT /end GROUP +/begin GROUP Events "Events" ROOT /begin SUB_GROUP mainloop SigGen2 SigGen1 /end SUB_GROUP /end GROUP + +/* Conversions */ +/begin COMPU_METHOD conv.bool "" TAB_VERB "%.0" "" COMPU_TAB_REF conv.bool.table /end COMPU_METHOD +/begin COMPU_VTAB conv.bool.table "" TAB_VERB 2 0 "false" 1 "true" /end COMPU_VTAB +/begin COMPU_METHOD conv.temperature "Temperature in °C from unsigned byte" LINEAR "%6.3" "°C" COEFFS_LINEAR 1 -50 /end COMPU_METHOD +/begin COMPU_METHOD conv.clock_ticks "Conversion from clock ticks to milliseconds" LINEAR "%6.3" "ms" COEFFS_LINEAR 0.001 0 /end COMPU_METHOD +/begin COMPU_METHOD conv.signal_type_enum "" TAB_VERB "%.0 " "" COMPU_TAB_REF conv.signal_type_enum.table /end COMPU_METHOD +/begin COMPU_VTAB conv.signal_type_enum.table "" TAB_VERB 5 0 "SINE" 1 "SQUARE" 2 "TRIANGLE" 3 "SAWTOOTH" 4 "ARBITRARY" /end COMPU_VTAB +/begin COMPU_METHOD conv.events "" TAB_VERB "%.0 " "" COMPU_TAB_REF conv.events.table /end COMPU_METHOD +/begin COMPU_VTAB conv.events.table "" TAB_VERB 4 + 0 "async" 1 "mainloop" 2 "SigGen2" 3 "SigGen1" +/end COMPU_VTAB + +/begin MOD_PAR "" +EPK "13_17_18" ADDR_EPK 0x80000000 +/begin MEMORY_SEGMENT epk "" DATA FLASH INTERN 0x80000000 8 -1 -1 -1 -1 -1 +/begin IF_DATA XCP +/begin SEGMENT 0 2 0 0 0 +/begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM +/begin PAGE 0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_DONT_CARE /end PAGE +/begin PAGE 1 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_NOT_ALLOWED /end PAGE +/end SEGMENT +/end IF_DATA +/end MEMORY_SEGMENT +/begin MEMORY_SEGMENT kParameters "" DATA FLASH INTERN 0x80010000 8 -1 -1 -1 -1 -1 +/begin IF_DATA XCP +/begin SEGMENT 1 2 0 0 0 +/begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM +/begin PAGE 0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_DONT_CARE /end PAGE +/begin PAGE 1 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_NOT_ALLOWED /end PAGE +/end SEGMENT +/end IF_DATA +/end MEMORY_SEGMENT +/begin MEMORY_SEGMENT SigGen1 "" DATA FLASH INTERN 0x80020000 88 -1 -1 -1 -1 -1 +/begin IF_DATA XCP +/begin SEGMENT 2 2 0 0 0 +/begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM +/begin PAGE 0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_DONT_CARE /end PAGE +/begin PAGE 1 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_NOT_ALLOWED /end PAGE +/end SEGMENT +/end IF_DATA +/end MEMORY_SEGMENT +/begin MEMORY_SEGMENT SigGen2 "" DATA FLASH INTERN 0x80030000 88 -1 -1 -1 -1 -1 +/begin IF_DATA XCP +/begin SEGMENT 3 2 0 0 0 +/begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM +/begin PAGE 0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_DONT_CARE /end PAGE +/begin PAGE 1 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_NOT_ALLOWED /end PAGE +/end SEGMENT +/end IF_DATA +/end MEMORY_SEGMENT +/end MOD_PAR + + +/begin IF_DATA XCP +/begin PROTOCOL_LAYER + 0x104 1000 2000 0 0 0 0 0 248 1024 BYTE_ORDER_MSB_LAST ADDRESS_GRANULARITY_BYTE +OPTIONAL_CMD GET_COMM_MODE_INFO +OPTIONAL_CMD GET_ID +OPTIONAL_CMD SET_REQUEST +OPTIONAL_CMD SET_MTA +OPTIONAL_CMD UPLOAD +OPTIONAL_CMD SHORT_UPLOAD +OPTIONAL_CMD DOWNLOAD +OPTIONAL_CMD SHORT_DOWNLOAD +OPTIONAL_CMD GET_CAL_PAGE +OPTIONAL_CMD SET_CAL_PAGE +OPTIONAL_CMD COPY_CAL_PAGE +OPTIONAL_CMD GET_PAG_PROCESSOR_INFO +OPTIONAL_CMD GET_SEGMENT_INFO +OPTIONAL_CMD GET_PAGE_INFO +OPTIONAL_CMD GET_SEGMENT_MODE +OPTIONAL_CMD SET_SEGMENT_MODE +OPTIONAL_CMD BUILD_CHECKSUM +OPTIONAL_CMD USER_CMD +OPTIONAL_CMD GET_DAQ_RESOLUTION_INFO +OPTIONAL_CMD GET_DAQ_PROCESSOR_INFO +OPTIONAL_CMD GET_DAQ_EVENT_INFO +OPTIONAL_CMD FREE_DAQ +OPTIONAL_CMD ALLOC_DAQ +OPTIONAL_CMD ALLOC_ODT +OPTIONAL_CMD ALLOC_ODT_ENTRY +OPTIONAL_CMD SET_DAQ_PTR +OPTIONAL_CMD WRITE_DAQ +OPTIONAL_CMD GET_DAQ_LIST_MODE +OPTIONAL_CMD SET_DAQ_LIST_MODE +OPTIONAL_CMD START_STOP_SYNCH +OPTIONAL_CMD START_STOP_DAQ_LIST +OPTIONAL_CMD GET_DAQ_CLOCK +OPTIONAL_CMD WRITE_DAQ_MULTIPLE +OPTIONAL_CMD TIME_CORRELATION_PROPERTIES +OPTIONAL_LEVEL1_CMD GET_VERSION +/end PROTOCOL_LAYER +/begin DAQ +DYNAMIC 0 4 0 OPTIMISATION_TYPE_DEFAULT ADDRESS_EXTENSION_FREE IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE 0xF8 OVERLOAD_INDICATION_PID PRESCALER_SUPPORTED +/begin TIMESTAMP_SUPPORTED 0x1 SIZE_DWORD UNIT_1NS TIMESTAMP_FIXED /end TIMESTAMP_SUPPORTED +/begin EVENT "async" "async" 0x0 DAQ 0xFF 100 4 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "mainloop" "mainloop" 0x1 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "SigGen2" "SigGen2" 0x2 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "SigGen1" "SigGen1" 0x3 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/end DAQ +/begin XCP_ON_UDP_IP + 0x104 5555 ADDRESS "192.168.0.101" +/end XCP_ON_UDP_IP +/end IF_DATA + +/end MODULE +/end PROJECT diff --git a/test/fixtures/hello_xcp.a2l b/test/fixtures/hello_xcp.a2l new file mode 100644 index 00000000..5aeb534a --- /dev/null +++ b/test/fixtures/hello_xcp.a2l @@ -0,0 +1,176 @@ +ASAP2_VERSION 1 71 +/begin PROJECT hello_xcp "" + +/begin HEADER "" VERSION "1.0" PROJECT_NO XCPLITE__CASDD /end HEADER + +/begin MODULE hello_xcp "" + +/include "XCP_104.aml" + +/begin MOD_COMMON "" +BYTE_ORDER MSB_LAST +ALIGNMENT_BYTE 1 +ALIGNMENT_WORD 1 +ALIGNMENT_LONG 1 +ALIGNMENT_FLOAT16_IEEE 1 +ALIGNMENT_FLOAT32_IEEE 1 +ALIGNMENT_FLOAT64_IEEE 1 +ALIGNMENT_INT64 1 +/end MOD_COMMON + + + +/* Segment relative addressing mode: calseg=params */ +/begin CHARACTERISTIC params.counter_max "Maximum counter value" VALUE 0x80010000 U16 0 NO_COMPU_METHOD 0 2000 /end CHARACTERISTIC +/begin CHARACTERISTIC params.delay_us "Mainloop delay time in us" VALUE 0x80010004 U32 0 NO_COMPU_METHOD 0 999999 PHYS_UNIT "us" /end CHARACTERISTIC +/begin CHARACTERISTIC params.flow_rate "Flow rate" VALUE 0x80010008 F32 0 NO_COMPU_METHOD 0 2 PHYS_UNIT "m3/h" /end CHARACTERISTIC + +/* Absolute addressing mode: default_event=mainloop (1), addr_ext=1 */ +/begin MEASUREMENT outside_temperature "Temperature in °C read from outside sensor" UBYTE conv.temperature 0 0 -20 50 ECU_ADDRESS 0x24002 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT inside_temperature "Temperature in °C read from inside sensor" UBYTE conv.temperature 0 0 0 40 ECU_ADDRESS 0x24003 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT heat_energy "Accumulated heat energy in kWh" FLOAT64_IEEE NO_COMPU_METHOD 0 0 0 10000 ECU_ADDRESS 0x240B8 ECU_ADDRESS_EXTENSION 1 PHYS_UNIT "kWh" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT global_counter "Global free running counter" ULONG NO_COMPU_METHOD 0 0 0 4.29497e+09 ECU_ADDRESS 0x240C0 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT + +/* Stack frame relative addressing mode: event=mainloop (1), addr_ext=2 */ +/begin MEASUREMENT counter "Loop counter, local measurement variable on stack" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x1FFF6 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT + +/* Stack frame relative addressing mode: event=calc_power (2), addr_ext=2 */ +/begin MEASUREMENT calc_power.t1 "Parameter t1 in function calc_power" UBYTE conv.temperature 0 0 -55 200 ECU_ADDRESS 0x2FFFF ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT calc_power.t2 "Parameter t2 in function calc_power" UBYTE conv.temperature 0 0 -55 200 ECU_ADDRESS 0x2FFFE ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT calc_power.diff_temp "Local variable diff temperature in function calc_power" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -100 100 ECU_ADDRESS 0x2FFF0 ECU_ADDRESS_EXTENSION 2 PHYS_UNIT "K" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT calc_power.heat_power "Local variable calculated heat power in function calc_power" FLOAT64_IEEE NO_COMPU_METHOD 0 0 0 10 ECU_ADDRESS 0x2FFE8 ECU_ADDRESS_EXTENSION 2 PHYS_UNIT "W" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT + +/* Typedefs */ +/begin RECORD_LAYOUT U8 FNC_VALUES 1 UBYTE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U8 AXIS_PTS_X 1 UBYTE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U8 "" UBYTE NO_COMPU_METHOD 0 0 0 255 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U8 "" VALUE U8 0 NO_COMPU_METHOD 0 255 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT U16 FNC_VALUES 1 UWORD ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U16 AXIS_PTS_X 1 UWORD INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U16 "" UWORD NO_COMPU_METHOD 0 0 0 65535 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U16 "" VALUE U16 0 NO_COMPU_METHOD 0 65535 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT U32 FNC_VALUES 1 ULONG ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U32 AXIS_PTS_X 1 ULONG INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U32 "" ULONG NO_COMPU_METHOD 0 0 0 4294967295 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U32 "" VALUE U32 0 NO_COMPU_METHOD 0 4.29497e+09 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT U64 FNC_VALUES 1 A_UINT64 ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U64 AXIS_PTS_X 1 A_UINT64 INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U64 "" A_UINT64 NO_COMPU_METHOD 0 0 0 1000000000000 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U64 "" VALUE U64 0 NO_COMPU_METHOD 0 1e+12 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I8 FNC_VALUES 1 SBYTE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I8 AXIS_PTS_X 1 SBYTE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I8 "" SBYTE NO_COMPU_METHOD 0 0 -128 127 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I8 "" VALUE I8 0 NO_COMPU_METHOD -128 127 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I16 FNC_VALUES 1 SWORD ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I16 AXIS_PTS_X 1 SWORD INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I16 "" SWORD NO_COMPU_METHOD 0 0 -32768 32767 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I16 "" VALUE I16 0 NO_COMPU_METHOD -32768 32767 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I32 FNC_VALUES 1 SLONG ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I32 AXIS_PTS_X 1 SLONG INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I32 "" SLONG NO_COMPU_METHOD 0 0 -2147483648 2147483647 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I32 "" VALUE I32 0 NO_COMPU_METHOD -2.14748e+09 2.14748e+09 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I64 FNC_VALUES 1 A_INT64 ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I64 AXIS_PTS_X 1 A_INT64 INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I64 "" A_INT64 NO_COMPU_METHOD 0 0 -1000000000000 1000000000000 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I64 "" VALUE I64 0 NO_COMPU_METHOD -1e+12 1e+12 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT F32 FNC_VALUES 1 FLOAT32_IEEE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_F32 AXIS_PTS_X 1 FLOAT32_IEEE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_F32 "" FLOAT32_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_F32 "" VALUE F32 0 NO_COMPU_METHOD -1e+12 1e+12 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT F64 FNC_VALUES 1 FLOAT64_IEEE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_F64 AXIS_PTS_X 1 FLOAT64_IEEE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_F64 "" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_F64 "" VALUE F64 0 NO_COMPU_METHOD -1e+12 1e+12 /end TYPEDEF_CHARACTERISTIC + + +/* Groups */ +/begin GROUP params "Calibration Segment" ROOT /begin REF_CHARACTERISTIC params.counter_max params.delay_us params.flow_rate /end REF_CHARACTERISTIC /end GROUP +/begin GROUP mainloop "Measurement event group" /begin REF_MEASUREMENT outside_temperature inside_temperature heat_energy global_counter counter /end REF_MEASUREMENT /end GROUP +/begin GROUP calc_power "Measurement event group" /begin REF_MEASUREMENT calc_power.t1 calc_power.t2 calc_power.diff_temp calc_power.heat_power /end REF_MEASUREMENT /end GROUP +/begin GROUP Events "Events" ROOT /begin SUB_GROUP mainloop calc_power /end SUB_GROUP /end GROUP + +/* Conversions */ +/begin COMPU_METHOD conv.bool "" TAB_VERB "%.0" "" COMPU_TAB_REF conv.bool.table /end COMPU_METHOD +/begin COMPU_VTAB conv.bool.table "" TAB_VERB 2 0 "false" 1 "true" /end COMPU_VTAB +/begin COMPU_METHOD conv.temperature "Temperature in °C from unsigned byte" LINEAR "%6.3" "C" COEFFS_LINEAR 1 -55 /end COMPU_METHOD +/begin COMPU_METHOD conv.events "" TAB_VERB "%.0 " "" COMPU_TAB_REF conv.events.table /end COMPU_METHOD +/begin COMPU_VTAB conv.events.table "" TAB_VERB 3 + 0 "async" 1 "mainloop" 2 "calc_power" +/end COMPU_VTAB + +/begin MOD_PAR "" +EPK "13_12_52" ADDR_EPK 0x80000000 +/begin MEMORY_SEGMENT epk "" DATA FLASH INTERN 0x80000000 8 -1 -1 -1 -1 -1 +/begin IF_DATA XCP +/begin SEGMENT 0 2 0 0 0 +/begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM +/begin PAGE 0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_DONT_CARE /end PAGE +/begin PAGE 1 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_NOT_ALLOWED /end PAGE +/end SEGMENT +/end IF_DATA +/end MEMORY_SEGMENT +/begin MEMORY_SEGMENT params "" DATA FLASH INTERN 0x80010000 12 -1 -1 -1 -1 -1 +/begin IF_DATA XCP +/begin SEGMENT 1 2 0 0 0 +/begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM +/begin PAGE 0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_DONT_CARE /end PAGE +/begin PAGE 1 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_NOT_ALLOWED /end PAGE +/end SEGMENT +/end IF_DATA +/end MEMORY_SEGMENT +/end MOD_PAR + + +/begin IF_DATA XCP +/begin PROTOCOL_LAYER + 0x104 1000 2000 0 0 0 0 0 248 1024 BYTE_ORDER_MSB_LAST ADDRESS_GRANULARITY_BYTE +OPTIONAL_CMD GET_COMM_MODE_INFO +OPTIONAL_CMD GET_ID +OPTIONAL_CMD SET_REQUEST +OPTIONAL_CMD SET_MTA +OPTIONAL_CMD UPLOAD +OPTIONAL_CMD SHORT_UPLOAD +OPTIONAL_CMD DOWNLOAD +OPTIONAL_CMD SHORT_DOWNLOAD +OPTIONAL_CMD GET_CAL_PAGE +OPTIONAL_CMD SET_CAL_PAGE +OPTIONAL_CMD COPY_CAL_PAGE +OPTIONAL_CMD GET_PAG_PROCESSOR_INFO +OPTIONAL_CMD GET_SEGMENT_INFO +OPTIONAL_CMD GET_PAGE_INFO +OPTIONAL_CMD GET_SEGMENT_MODE +OPTIONAL_CMD SET_SEGMENT_MODE +OPTIONAL_CMD BUILD_CHECKSUM +OPTIONAL_CMD USER_CMD +OPTIONAL_CMD GET_DAQ_RESOLUTION_INFO +OPTIONAL_CMD GET_DAQ_PROCESSOR_INFO +OPTIONAL_CMD GET_DAQ_EVENT_INFO +OPTIONAL_CMD FREE_DAQ +OPTIONAL_CMD ALLOC_DAQ +OPTIONAL_CMD ALLOC_ODT +OPTIONAL_CMD ALLOC_ODT_ENTRY +OPTIONAL_CMD SET_DAQ_PTR +OPTIONAL_CMD WRITE_DAQ +OPTIONAL_CMD GET_DAQ_LIST_MODE +OPTIONAL_CMD SET_DAQ_LIST_MODE +OPTIONAL_CMD START_STOP_SYNCH +OPTIONAL_CMD START_STOP_DAQ_LIST +OPTIONAL_CMD GET_DAQ_CLOCK +OPTIONAL_CMD WRITE_DAQ_MULTIPLE +OPTIONAL_CMD TIME_CORRELATION_PROPERTIES +OPTIONAL_LEVEL1_CMD GET_VERSION +/end PROTOCOL_LAYER +/begin DAQ +DYNAMIC 0 3 0 OPTIMISATION_TYPE_DEFAULT ADDRESS_EXTENSION_FREE IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE 0xF8 OVERLOAD_INDICATION_PID PRESCALER_SUPPORTED +/begin TIMESTAMP_SUPPORTED 0x1 SIZE_DWORD UNIT_1NS TIMESTAMP_FIXED /end TIMESTAMP_SUPPORTED +/begin EVENT "async" "async" 0x0 DAQ 0xFF 100 4 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "mainloop" "mainloop" 0x1 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "calc_power" "calc_pow" 0x2 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/end DAQ +/begin XCP_ON_TCP_IP + 0x104 5555 ADDRESS "192.168.0.101" +/end XCP_ON_TCP_IP +/end IF_DATA + +/end MODULE +/end PROJECT diff --git a/test/fixtures/hello_xcp_cpp.a2l b/test/fixtures/hello_xcp_cpp.a2l new file mode 100644 index 00000000..d6fcdfcc --- /dev/null +++ b/test/fixtures/hello_xcp_cpp.a2l @@ -0,0 +1,191 @@ +ASAP2_VERSION 1 71 +/begin PROJECT hello_xcp_cpp "" + +/begin HEADER "" VERSION "1.0" PROJECT_NO XCPLITE__CASDD /end HEADER + +/begin MODULE hello_xcp_cpp "" + +/include "XCP_104.aml" + +/begin MOD_COMMON "" +BYTE_ORDER MSB_LAST +ALIGNMENT_BYTE 1 +ALIGNMENT_WORD 1 +ALIGNMENT_LONG 1 +ALIGNMENT_FLOAT16_IEEE 1 +ALIGNMENT_FLOAT32_IEEE 1 +ALIGNMENT_FLOAT64_IEEE 1 +ALIGNMENT_INT64 1 +/end MOD_COMMON + + + +/begin TYPEDEF_STRUCTURE ParametersT "Typedef for ParametersT" 0x10 + /begin STRUCTURE_COMPONENT min C_min 0x0 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT max C_max 0x8 /end STRUCTURE_COMPONENT +/end TYPEDEF_STRUCTURE + +/* Segment relative addressing mode: calseg=Parameters */ +/begin INSTANCE Parameters "Random number generator parameters" ParametersT 0x80010000 /end INSTANCE + +/begin TYPEDEF_STRUCTURE FloatingAverage "Typedef for FloatingAverage<128>" 0x418 + /begin STRUCTURE_COMPONENT current_index_ M_current_index_ 0x0 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT sample_count_ M_sample_count_ 0x8 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT sum_ M_sum_ 0x10 /end STRUCTURE_COMPONENT +/end TYPEDEF_STRUCTURE + +/* Relative addressing mode: event=average (1), addr_ext=3 */ +/begin INSTANCE average128 "Instance average128 of FloatingAverage<128>" FloatingAverage 0x10000 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end INSTANCE + +/* Auto addressing mode: event=avg_calc1 (2) */ +/begin MEASUREMENT input "Input value for floating average" FLOAT64_IEEE NO_COMPU_METHOD 0 0 0 1000 ECU_ADDRESS 0x2FFF0 ECU_ADDRESS_EXTENSION 2 PHYS_UNIT "V" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT average "Current calculated average" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x2FFE8 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT current_index_ "Current position in ring buffer" A_UINT64 NO_COMPU_METHOD 0 0 0 1e+12 ECU_ADDRESS 0x20000 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT sample_count_ "Number of samples collected" A_UINT64 NO_COMPU_METHOD 0 0 0 1e+12 ECU_ADDRESS 0x20008 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT sum_ "Running sum of all samples" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x20010 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT + +/* Stack frame relative addressing mode: event=mainloop (3), addr_ext=2 */ +/begin MEASUREMENT counter "Mainloop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x3FFD2 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT voltage "Input voltage" FLOAT64_IEEE NO_COMPU_METHOD 0 0 0 1000 ECU_ADDRESS 0x3FFC8 ECU_ADDRESS_EXTENSION 2 PHYS_UNIT "V" READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT average_voltage "Calculated voltage floating average" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x3FFC0 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT + +/* Typedefs */ +/begin RECORD_LAYOUT U8 FNC_VALUES 1 UBYTE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U8 AXIS_PTS_X 1 UBYTE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U8 "" UBYTE NO_COMPU_METHOD 0 0 0 255 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U8 "" VALUE U8 0 NO_COMPU_METHOD 0 255 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT U16 FNC_VALUES 1 UWORD ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U16 AXIS_PTS_X 1 UWORD INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U16 "" UWORD NO_COMPU_METHOD 0 0 0 65535 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U16 "" VALUE U16 0 NO_COMPU_METHOD 0 65535 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT U32 FNC_VALUES 1 ULONG ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U32 AXIS_PTS_X 1 ULONG INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U32 "" ULONG NO_COMPU_METHOD 0 0 0 4294967295 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U32 "" VALUE U32 0 NO_COMPU_METHOD 0 4.29497e+09 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT U64 FNC_VALUES 1 A_UINT64 ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U64 AXIS_PTS_X 1 A_UINT64 INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U64 "" A_UINT64 NO_COMPU_METHOD 0 0 0 1000000000000 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U64 "" VALUE U64 0 NO_COMPU_METHOD 0 1e+12 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I8 FNC_VALUES 1 SBYTE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I8 AXIS_PTS_X 1 SBYTE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I8 "" SBYTE NO_COMPU_METHOD 0 0 -128 127 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I8 "" VALUE I8 0 NO_COMPU_METHOD -128 127 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I16 FNC_VALUES 1 SWORD ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I16 AXIS_PTS_X 1 SWORD INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I16 "" SWORD NO_COMPU_METHOD 0 0 -32768 32767 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I16 "" VALUE I16 0 NO_COMPU_METHOD -32768 32767 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I32 FNC_VALUES 1 SLONG ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I32 AXIS_PTS_X 1 SLONG INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I32 "" SLONG NO_COMPU_METHOD 0 0 -2147483648 2147483647 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I32 "" VALUE I32 0 NO_COMPU_METHOD -2.14748e+09 2.14748e+09 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I64 FNC_VALUES 1 A_INT64 ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I64 AXIS_PTS_X 1 A_INT64 INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I64 "" A_INT64 NO_COMPU_METHOD 0 0 -1000000000000 1000000000000 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I64 "" VALUE I64 0 NO_COMPU_METHOD -1e+12 1e+12 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT F32 FNC_VALUES 1 FLOAT32_IEEE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_F32 AXIS_PTS_X 1 FLOAT32_IEEE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_F32 "" FLOAT32_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_F32 "" VALUE F32 0 NO_COMPU_METHOD -1e+12 1e+12 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT F64 FNC_VALUES 1 FLOAT64_IEEE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_F64 AXIS_PTS_X 1 FLOAT64_IEEE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_F64 "" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_F64 "" VALUE F64 0 NO_COMPU_METHOD -1e+12 1e+12 /end TYPEDEF_CHARACTERISTIC + +/begin TYPEDEF_CHARACTERISTIC C_min "Minimum random number value" VALUE F64 0 NO_COMPU_METHOD -100 100 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_CHARACTERISTIC C_max "Maximum random number value" VALUE F64 0 NO_COMPU_METHOD -100 100 /end TYPEDEF_CHARACTERISTIC +/begin TYPEDEF_MEASUREMENT M_current_index_ "Current position in the ring buffer" A_UINT64 NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT M_sample_count_ "Number of samples collected so far" A_UINT64 NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT M_sum_ "Running sum of all samples" FLOAT64_IEEE NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT + +/* Groups */ +/begin GROUP Parameters "Calibration Segment" ROOT /begin REF_CHARACTERISTIC Parameters /end REF_CHARACTERISTIC /end GROUP +/begin GROUP average "Measurement event group" /begin REF_MEASUREMENT average128 /end REF_MEASUREMENT /end GROUP +/begin GROUP avg_calc1 "Measurement event group" /begin REF_MEASUREMENT input average current_index_ sample_count_ sum_ /end REF_MEASUREMENT /end GROUP +/begin GROUP mainloop "Measurement event group" /begin REF_MEASUREMENT counter voltage average_voltage /end REF_MEASUREMENT /end GROUP +/begin GROUP Events "Events" ROOT /begin SUB_GROUP average avg_calc1 mainloop /end SUB_GROUP /end GROUP + +/* Conversions */ +/begin COMPU_METHOD conv.bool "" TAB_VERB "%.0" "" COMPU_TAB_REF conv.bool.table /end COMPU_METHOD +/begin COMPU_VTAB conv.bool.table "" TAB_VERB 2 0 "false" 1 "true" /end COMPU_VTAB +/begin COMPU_METHOD conv.events "" TAB_VERB "%.0 " "" COMPU_TAB_REF conv.events.table /end COMPU_METHOD +/begin COMPU_VTAB conv.events.table "" TAB_VERB 4 + 0 "async" 1 "average" 2 "avg_calc1" 3 "mainloop" +/end COMPU_VTAB + +/begin MOD_PAR "" +EPK "13_16_41" ADDR_EPK 0x80000000 +/begin MEMORY_SEGMENT epk "" DATA FLASH INTERN 0x80000000 8 -1 -1 -1 -1 -1 +/begin IF_DATA XCP +/begin SEGMENT 0 2 0 0 0 +/begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM +/begin PAGE 0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_DONT_CARE /end PAGE +/begin PAGE 1 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_NOT_ALLOWED /end PAGE +/end SEGMENT +/end IF_DATA +/end MEMORY_SEGMENT +/begin MEMORY_SEGMENT Parameters "" DATA FLASH INTERN 0x80010000 16 -1 -1 -1 -1 -1 +/begin IF_DATA XCP +/begin SEGMENT 1 2 0 0 0 +/begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM +/begin PAGE 0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_DONT_CARE /end PAGE +/begin PAGE 1 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_NOT_ALLOWED /end PAGE +/end SEGMENT +/end IF_DATA +/end MEMORY_SEGMENT +/end MOD_PAR + + +/begin IF_DATA XCP +/begin PROTOCOL_LAYER + 0x104 1000 2000 0 0 0 0 0 248 1024 BYTE_ORDER_MSB_LAST ADDRESS_GRANULARITY_BYTE +OPTIONAL_CMD GET_COMM_MODE_INFO +OPTIONAL_CMD GET_ID +OPTIONAL_CMD SET_REQUEST +OPTIONAL_CMD SET_MTA +OPTIONAL_CMD UPLOAD +OPTIONAL_CMD SHORT_UPLOAD +OPTIONAL_CMD DOWNLOAD +OPTIONAL_CMD SHORT_DOWNLOAD +OPTIONAL_CMD GET_CAL_PAGE +OPTIONAL_CMD SET_CAL_PAGE +OPTIONAL_CMD COPY_CAL_PAGE +OPTIONAL_CMD GET_PAG_PROCESSOR_INFO +OPTIONAL_CMD GET_SEGMENT_INFO +OPTIONAL_CMD GET_PAGE_INFO +OPTIONAL_CMD GET_SEGMENT_MODE +OPTIONAL_CMD SET_SEGMENT_MODE +OPTIONAL_CMD BUILD_CHECKSUM +OPTIONAL_CMD USER_CMD +OPTIONAL_CMD GET_DAQ_RESOLUTION_INFO +OPTIONAL_CMD GET_DAQ_PROCESSOR_INFO +OPTIONAL_CMD GET_DAQ_EVENT_INFO +OPTIONAL_CMD FREE_DAQ +OPTIONAL_CMD ALLOC_DAQ +OPTIONAL_CMD ALLOC_ODT +OPTIONAL_CMD ALLOC_ODT_ENTRY +OPTIONAL_CMD SET_DAQ_PTR +OPTIONAL_CMD WRITE_DAQ +OPTIONAL_CMD GET_DAQ_LIST_MODE +OPTIONAL_CMD SET_DAQ_LIST_MODE +OPTIONAL_CMD START_STOP_SYNCH +OPTIONAL_CMD START_STOP_DAQ_LIST +OPTIONAL_CMD GET_DAQ_CLOCK +OPTIONAL_CMD WRITE_DAQ_MULTIPLE +OPTIONAL_CMD TIME_CORRELATION_PROPERTIES +OPTIONAL_LEVEL1_CMD GET_VERSION +/end PROTOCOL_LAYER +/begin DAQ +DYNAMIC 0 4 0 OPTIMISATION_TYPE_DEFAULT ADDRESS_EXTENSION_FREE IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE 0xF8 OVERLOAD_INDICATION_PID PRESCALER_SUPPORTED +/begin TIMESTAMP_SUPPORTED 0x1 SIZE_DWORD UNIT_1NS TIMESTAMP_FIXED /end TIMESTAMP_SUPPORTED +/begin EVENT "async" "async" 0x0 DAQ 0xFF 100 4 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "average" "average" 0x1 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "avg_calc1" "avg_calc" 0x2 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "mainloop" "mainloop" 0x3 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/end DAQ +/begin XCP_ON_TCP_IP + 0x104 5555 ADDRESS "192.168.0.101" +/end XCP_ON_TCP_IP +/end IF_DATA + +/end MODULE +/end PROJECT diff --git a/test/fixtures/multi_thread_demo.a2l b/test/fixtures/multi_thread_demo.a2l new file mode 100644 index 00000000..009e4732 --- /dev/null +++ b/test/fixtures/multi_thread_demo.a2l @@ -0,0 +1,233 @@ +ASAP2_VERSION 1 71 +/begin PROJECT multi_thread_demo "" + +/begin HEADER "" VERSION "1.0" PROJECT_NO XCPLITE__CASDD /end HEADER + +/begin MODULE multi_thread_demo "" + +/include "XCP_104.aml" + +/begin MOD_COMMON "" +BYTE_ORDER MSB_LAST +ALIGNMENT_BYTE 1 +ALIGNMENT_WORD 1 +ALIGNMENT_LONG 1 +ALIGNMENT_FLOAT16_IEEE 1 +ALIGNMENT_FLOAT32_IEEE 1 +ALIGNMENT_FLOAT64_IEEE 1 +ALIGNMENT_INT64 1 +/end MOD_COMMON + + + +/* Segment relative addressing mode: calseg=params */ +/begin CHARACTERISTIC params.counter_max "Max counter value, wrap around" VALUE 0x80010000 U16 0 NO_COMPU_METHOD 0 10000 /end CHARACTERISTIC +/begin CHARACTERISTIC params.ampl "Amplitude" VALUE 0x80010008 F64 0 NO_COMPU_METHOD 0 100 PHYS_UNIT "Volt" /end CHARACTERISTIC +/begin CHARACTERISTIC params.period "Period" VALUE 0x80010010 F64 0 NO_COMPU_METHOD 0.1 10 PHYS_UNIT "s" /end CHARACTERISTIC +/begin CHARACTERISTIC params.filter "Filter coefficient" VALUE 0x80010018 F64 0 NO_COMPU_METHOD 0 1 /end CHARACTERISTIC +/begin CHARACTERISTIC params.clip_max "Maximum value for clipping function" VALUE 0x80010020 F64 0 NO_COMPU_METHOD -100 100 PHYS_UNIT "Volt" /end CHARACTERISTIC +/begin CHARACTERISTIC params.clip_min "Minimum value for clipping function" VALUE 0x80010028 F64 0 NO_COMPU_METHOD -100 100 PHYS_UNIT "Volt" /end CHARACTERISTIC +/begin CHARACTERISTIC params.delay_us "task delay time in us" VALUE 0x80010030 U32 0 NO_COMPU_METHOD 0 1e+06 PHYS_UNIT "us" /end CHARACTERISTIC +/begin CHARACTERISTIC params.run "stop task" VALUE 0x80010034 U8 0 NO_COMPU_METHOD 0 1 /end CHARACTERISTIC + +/* Stack frame relative addressing mode: event=task_1 (1), addr_ext=2 */ +/begin MEASUREMENT task_1.counter "Mainloop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x1FBBE ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_1.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x1FBA8 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_1.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x1FBA0 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_1.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x1FB98 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin CHARACTERISTIC task_1.array "task array (to increase measurement workload)" VAL_BLK 0x1FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC + +/* Stack frame relative addressing mode: event=task_4 (4), addr_ext=2 */ +/begin MEASUREMENT task_4.counter "Mainloop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x4FBBE ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x4 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_4.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x4FBA8 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x4 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_4.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x4FBA0 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x4 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_4.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x4FB98 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x4 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin CHARACTERISTIC task_4.array "task array (to increase measurement workload)" VAL_BLK 0x4FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x4 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC + +/* Stack frame relative addressing mode: event=task_3 (3), addr_ext=2 */ +/begin MEASUREMENT task_3.counter "Mainloop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x3FBBE ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_3.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x3FBA8 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_3.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x3FBA0 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_3.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x3FB98 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin CHARACTERISTIC task_3.array "task array (to increase measurement workload)" VAL_BLK 0x3FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x3 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC + +/* Stack frame relative addressing mode: event=task_2 (2), addr_ext=2 */ +/begin MEASUREMENT task_2.counter "Mainloop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x2FBBE ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_2.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x2FBA8 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_2.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x2FBA0 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_2.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x2FB98 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin CHARACTERISTIC task_2.array "task array (to increase measurement workload)" VAL_BLK 0x2FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC + +/* Stack frame relative addressing mode: event=task_5 (5), addr_ext=2 */ +/begin MEASUREMENT task_5.counter "Mainloop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x5FBBE ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x5 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_5.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x5FBA8 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x5 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_5.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x5FBA0 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x5 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_5.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x5FB98 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x5 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin CHARACTERISTIC task_5.array "task array (to increase measurement workload)" VAL_BLK 0x5FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x5 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC + +/* Stack frame relative addressing mode: event=task_6 (6), addr_ext=2 */ +/begin MEASUREMENT task_6.counter "Mainloop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x6FBBE ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x6 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_6.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x6FBA8 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x6 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_6.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x6FBA0 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x6 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_6.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x6FB98 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x6 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin CHARACTERISTIC task_6.array "task array (to increase measurement workload)" VAL_BLK 0x6FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x6 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC + +/* Stack frame relative addressing mode: event=task_7 (7), addr_ext=2 */ +/begin MEASUREMENT task_7.counter "Mainloop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x7FBBE ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x7 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_7.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x7FBA8 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x7 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_7.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x7FBA0 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x7 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_7.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x7FB98 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x7 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin CHARACTERISTIC task_7.array "task array (to increase measurement workload)" VAL_BLK 0x7FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x7 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC + +/* Stack frame relative addressing mode: event=task_8 (8), addr_ext=2 */ +/begin MEASUREMENT task_8.counter "Mainloop counter" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x8FBBE ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x8 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_8.channel1 "task sine wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x8FBA8 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x8 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_8.channel2 "task square wave signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x8FBA0 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x8 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin MEASUREMENT task_8.channel3 "task sawtooth signal" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 ECU_ADDRESS 0x8FB98 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x8 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin CHARACTERISTIC task_8.array "task array (to increase measurement workload)" VAL_BLK 0x8FBE8 U32 0 NO_COMPU_METHOD 0 4.29497e+09 MATRIX_DIM 256 1 ECU_ADDRESS_EXTENSION 2 /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x8 /end DAQ_EVENT /end IF_DATA /end CHARACTERISTIC + +/* Typedefs */ +/begin RECORD_LAYOUT U8 FNC_VALUES 1 UBYTE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U8 AXIS_PTS_X 1 UBYTE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U8 "" UBYTE NO_COMPU_METHOD 0 0 0 255 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U8 "" VALUE U8 0 NO_COMPU_METHOD 0 255 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT U16 FNC_VALUES 1 UWORD ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U16 AXIS_PTS_X 1 UWORD INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U16 "" UWORD NO_COMPU_METHOD 0 0 0 65535 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U16 "" VALUE U16 0 NO_COMPU_METHOD 0 65535 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT U32 FNC_VALUES 1 ULONG ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U32 AXIS_PTS_X 1 ULONG INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U32 "" ULONG NO_COMPU_METHOD 0 0 0 4294967295 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U32 "" VALUE U32 0 NO_COMPU_METHOD 0 4.29497e+09 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT U64 FNC_VALUES 1 A_UINT64 ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U64 AXIS_PTS_X 1 A_UINT64 INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U64 "" A_UINT64 NO_COMPU_METHOD 0 0 0 1000000000000 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U64 "" VALUE U64 0 NO_COMPU_METHOD 0 1e+12 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I8 FNC_VALUES 1 SBYTE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I8 AXIS_PTS_X 1 SBYTE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I8 "" SBYTE NO_COMPU_METHOD 0 0 -128 127 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I8 "" VALUE I8 0 NO_COMPU_METHOD -128 127 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I16 FNC_VALUES 1 SWORD ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I16 AXIS_PTS_X 1 SWORD INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I16 "" SWORD NO_COMPU_METHOD 0 0 -32768 32767 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I16 "" VALUE I16 0 NO_COMPU_METHOD -32768 32767 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I32 FNC_VALUES 1 SLONG ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I32 AXIS_PTS_X 1 SLONG INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I32 "" SLONG NO_COMPU_METHOD 0 0 -2147483648 2147483647 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I32 "" VALUE I32 0 NO_COMPU_METHOD -2.14748e+09 2.14748e+09 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I64 FNC_VALUES 1 A_INT64 ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I64 AXIS_PTS_X 1 A_INT64 INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I64 "" A_INT64 NO_COMPU_METHOD 0 0 -1000000000000 1000000000000 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I64 "" VALUE I64 0 NO_COMPU_METHOD -1e+12 1e+12 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT F32 FNC_VALUES 1 FLOAT32_IEEE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_F32 AXIS_PTS_X 1 FLOAT32_IEEE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_F32 "" FLOAT32_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_F32 "" VALUE F32 0 NO_COMPU_METHOD -1e+12 1e+12 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT F64 FNC_VALUES 1 FLOAT64_IEEE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_F64 AXIS_PTS_X 1 FLOAT64_IEEE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_F64 "" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_F64 "" VALUE F64 0 NO_COMPU_METHOD -1e+12 1e+12 /end TYPEDEF_CHARACTERISTIC + + +/* Groups */ +/begin GROUP params "Calibration Segment" ROOT /begin REF_CHARACTERISTIC params.counter_max params.ampl params.period params.filter params.clip_max params.clip_min params.delay_us params.run /end REF_CHARACTERISTIC /end GROUP +/begin GROUP task_1 "Measurement event group" /begin REF_MEASUREMENT task_1.counter task_1.channel1 task_1.channel2 task_1.channel3 task_1.array /end REF_MEASUREMENT /end GROUP +/begin GROUP task_4 "Measurement event group" /begin REF_MEASUREMENT task_4.counter task_4.channel1 task_4.channel2 task_4.channel3 task_4.array /end REF_MEASUREMENT /end GROUP +/begin GROUP task_3 "Measurement event group" /begin REF_MEASUREMENT task_3.counter task_3.channel1 task_3.channel2 task_3.channel3 task_3.array /end REF_MEASUREMENT /end GROUP +/begin GROUP task_2 "Measurement event group" /begin REF_MEASUREMENT task_2.counter task_2.channel1 task_2.channel2 task_2.channel3 task_2.array /end REF_MEASUREMENT /end GROUP +/begin GROUP task_5 "Measurement event group" /begin REF_MEASUREMENT task_5.counter task_5.channel1 task_5.channel2 task_5.channel3 task_5.array /end REF_MEASUREMENT /end GROUP +/begin GROUP task_6 "Measurement event group" /begin REF_MEASUREMENT task_6.counter task_6.channel1 task_6.channel2 task_6.channel3 task_6.array /end REF_MEASUREMENT /end GROUP +/begin GROUP task_7 "Measurement event group" /begin REF_MEASUREMENT task_7.counter task_7.channel1 task_7.channel2 task_7.channel3 task_7.array /end REF_MEASUREMENT /end GROUP +/begin GROUP task_8 "Measurement event group" /begin REF_MEASUREMENT task_8.counter task_8.channel1 task_8.channel2 task_8.channel3 task_8.array /end REF_MEASUREMENT /end GROUP +/begin GROUP Events "Events" ROOT /begin SUB_GROUP task_1 task_2 task_3 task_4 task_5 task_6 task_7 task_8 /end SUB_GROUP /end GROUP + +/* Conversions */ +/begin COMPU_METHOD conv.bool "" TAB_VERB "%.0" "" COMPU_TAB_REF conv.bool.table /end COMPU_METHOD +/begin COMPU_VTAB conv.bool.table "" TAB_VERB 2 0 "false" 1 "true" /end COMPU_VTAB +/begin COMPU_METHOD conv.events "" TAB_VERB "%.0 " "" COMPU_TAB_REF conv.events.table /end COMPU_METHOD +/begin COMPU_VTAB conv.events.table "" TAB_VERB 9 + 0 "async" 1 "task_1" 2 "task_2" 3 "task_3" 4 "task_4" 5 "task_5" 6 "task_6" 7 "task_7" 8 "task_8" +/end COMPU_VTAB + +/begin MOD_PAR "" +EPK "13_22_20" ADDR_EPK 0x80000000 +/begin MEMORY_SEGMENT epk "" DATA FLASH INTERN 0x80000000 8 -1 -1 -1 -1 -1 +/begin IF_DATA XCP +/begin SEGMENT 0 2 0 0 0 +/begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM +/begin PAGE 0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_DONT_CARE /end PAGE +/begin PAGE 1 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_NOT_ALLOWED /end PAGE +/end SEGMENT +/end IF_DATA +/end MEMORY_SEGMENT +/begin MEMORY_SEGMENT params "" DATA FLASH INTERN 0x80010000 56 -1 -1 -1 -1 -1 +/begin IF_DATA XCP +/begin SEGMENT 1 2 0 0 0 +/begin CHECKSUM XCP_CRC_16_CITT MAX_BLOCK_SIZE 0xFFFF EXTERNAL_FUNCTION "" /end CHECKSUM +/begin PAGE 0 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_DONT_CARE /end PAGE +/begin PAGE 1 ECU_ACCESS_DONT_CARE XCP_READ_ACCESS_DONT_CARE XCP_WRITE_ACCESS_NOT_ALLOWED /end PAGE +/end SEGMENT +/end IF_DATA +/end MEMORY_SEGMENT +/end MOD_PAR + + +/begin IF_DATA XCP +/begin PROTOCOL_LAYER + 0x104 1000 2000 0 0 0 0 0 248 1024 BYTE_ORDER_MSB_LAST ADDRESS_GRANULARITY_BYTE +OPTIONAL_CMD GET_COMM_MODE_INFO +OPTIONAL_CMD GET_ID +OPTIONAL_CMD SET_REQUEST +OPTIONAL_CMD SET_MTA +OPTIONAL_CMD UPLOAD +OPTIONAL_CMD SHORT_UPLOAD +OPTIONAL_CMD DOWNLOAD +OPTIONAL_CMD SHORT_DOWNLOAD +OPTIONAL_CMD GET_CAL_PAGE +OPTIONAL_CMD SET_CAL_PAGE +OPTIONAL_CMD COPY_CAL_PAGE +OPTIONAL_CMD GET_PAG_PROCESSOR_INFO +OPTIONAL_CMD GET_SEGMENT_INFO +OPTIONAL_CMD GET_PAGE_INFO +OPTIONAL_CMD GET_SEGMENT_MODE +OPTIONAL_CMD SET_SEGMENT_MODE +OPTIONAL_CMD BUILD_CHECKSUM +OPTIONAL_CMD USER_CMD +OPTIONAL_CMD GET_DAQ_RESOLUTION_INFO +OPTIONAL_CMD GET_DAQ_PROCESSOR_INFO +OPTIONAL_CMD GET_DAQ_EVENT_INFO +OPTIONAL_CMD FREE_DAQ +OPTIONAL_CMD ALLOC_DAQ +OPTIONAL_CMD ALLOC_ODT +OPTIONAL_CMD ALLOC_ODT_ENTRY +OPTIONAL_CMD SET_DAQ_PTR +OPTIONAL_CMD WRITE_DAQ +OPTIONAL_CMD GET_DAQ_LIST_MODE +OPTIONAL_CMD SET_DAQ_LIST_MODE +OPTIONAL_CMD START_STOP_SYNCH +OPTIONAL_CMD START_STOP_DAQ_LIST +OPTIONAL_CMD GET_DAQ_CLOCK +OPTIONAL_CMD WRITE_DAQ_MULTIPLE +OPTIONAL_CMD TIME_CORRELATION_PROPERTIES +OPTIONAL_LEVEL1_CMD GET_VERSION +/end PROTOCOL_LAYER +/begin DAQ +DYNAMIC 0 9 0 OPTIMISATION_TYPE_DEFAULT ADDRESS_EXTENSION_FREE IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE 0xF8 OVERLOAD_INDICATION_PID PRESCALER_SUPPORTED +/begin TIMESTAMP_SUPPORTED 0x1 SIZE_DWORD UNIT_1NS TIMESTAMP_FIXED /end TIMESTAMP_SUPPORTED +/begin EVENT "async" "async" 0x0 DAQ 0xFF 100 4 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "task_1" "task_1" 0x1 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "task_2" "task_2" 0x2 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "task_3" "task_3" 0x3 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "task_4" "task_4" 0x4 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "task_5" "task_5" 0x5 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "task_6" "task_6" 0x6 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "task_7" "task_7" 0x7 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "task_8" "task_8" 0x8 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/end DAQ +/begin XCP_ON_UDP_IP + 0x104 5555 ADDRESS "192.168.0.101" +/end XCP_ON_UDP_IP +/end IF_DATA + +/end MODULE +/end PROJECT diff --git a/test/fixtures/struct_demo.a2l b/test/fixtures/struct_demo.a2l new file mode 100644 index 00000000..b69ba499 --- /dev/null +++ b/test/fixtures/struct_demo.a2l @@ -0,0 +1,168 @@ +ASAP2_VERSION 1 71 +/begin PROJECT struct_demo "" + +/begin HEADER "" VERSION "1.0" PROJECT_NO XCPLITE__CASDD /end HEADER + +/begin MODULE struct_demo "" + +/include "XCP_104.aml" + +/begin MOD_COMMON "" +BYTE_ORDER MSB_LAST +ALIGNMENT_BYTE 1 +ALIGNMENT_WORD 1 +ALIGNMENT_LONG 1 +ALIGNMENT_FLOAT16_IEEE 1 +ALIGNMENT_FLOAT32_IEEE 1 +ALIGNMENT_FLOAT64_IEEE 1 +ALIGNMENT_INT64 1 +/end MOD_COMMON + + + +/begin TYPEDEF_STRUCTURE struct2_t "A2L typedef for struct2_t" 0x4 + /begin STRUCTURE_COMPONENT byte_field M_byte_field 0x0 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT word_field M_word_field 0x2 /end STRUCTURE_COMPONENT +/end TYPEDEF_STRUCTURE + +/begin TYPEDEF_STRUCTURE struct1_t "A2L typedef for struct1_t" 0x108 + /begin STRUCTURE_COMPONENT byte_field M_byte_field 0x0 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT word_field M_word_field 0x2 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT array_field M_array_field 0x4 MATRIX_DIM 256 /end STRUCTURE_COMPONENT + /begin STRUCTURE_COMPONENT struct_field struct2_t 0x104 /end STRUCTURE_COMPONENT +/end TYPEDEF_STRUCTURE + +/* Stack frame relative addressing mode: event=event (1), addr_ext=2 */ +/begin MEASUREMENT counter "Stack measurement variable" UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x1F686 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin INSTANCE local_struct2 "Instance of test_struct2_t" struct2_t 0x1F680 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end INSTANCE +/begin INSTANCE local_struct1 "Instance of test_struct1_t" struct1_t 0x1FEE0 ECU_ADDRESS_EXTENSION 2 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end INSTANCE +/begin INSTANCE local_struct1_array "Array [10] of struct1_t" struct1_t 0x1F6A0 ECU_ADDRESS_EXTENSION 2 MATRIX_DIM 8 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x1 /end DAQ_EVENT /end IF_DATA /end INSTANCE + +/* Absolute addressing mode: default_event=event (1), addr_ext=1 */ +/begin MEASUREMENT static_counter "Global measurement variable " UWORD NO_COMPU_METHOD 0 0 0 65535 ECU_ADDRESS 0x24C10 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end MEASUREMENT +/begin INSTANCE static_struct2 "Instance of test_struct2_t" struct2_t 0x24000 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end INSTANCE +/begin INSTANCE static_struct1 "Instance of test_struct1_t" struct1_t 0x24004 ECU_ADDRESS_EXTENSION 1 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end INSTANCE +/begin INSTANCE static_struct1_array "Array [10] of struct1_t" struct1_t 0x241C0 ECU_ADDRESS_EXTENSION 1 MATRIX_DIM 8 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT VARIABLE /begin DEFAULT_EVENT_LIST EVENT 0x1 /end DEFAULT_EVENT_LIST /end DAQ_EVENT /end IF_DATA /end INSTANCE + +/* Relative addressing mode: event=event2 (2), addr_ext=3 */ +/begin INSTANCE heap_struct1 "Pointer to struct1_t on heap" struct1_t 0x20000 ECU_ADDRESS_EXTENSION 3 READ_WRITE /begin IF_DATA XCP /begin DAQ_EVENT FIXED_EVENT_LIST EVENT 0x2 /end DAQ_EVENT /end IF_DATA /end INSTANCE + +/* Typedefs */ +/begin RECORD_LAYOUT U8 FNC_VALUES 1 UBYTE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U8 AXIS_PTS_X 1 UBYTE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U8 "" UBYTE NO_COMPU_METHOD 0 0 0 255 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U8 "" VALUE U8 0 NO_COMPU_METHOD 0 255 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT U16 FNC_VALUES 1 UWORD ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U16 AXIS_PTS_X 1 UWORD INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U16 "" UWORD NO_COMPU_METHOD 0 0 0 65535 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U16 "" VALUE U16 0 NO_COMPU_METHOD 0 65535 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT U32 FNC_VALUES 1 ULONG ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U32 AXIS_PTS_X 1 ULONG INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U32 "" ULONG NO_COMPU_METHOD 0 0 0 4294967295 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U32 "" VALUE U32 0 NO_COMPU_METHOD 0 4.29497e+09 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT U64 FNC_VALUES 1 A_UINT64 ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_U64 AXIS_PTS_X 1 A_UINT64 INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_U64 "" A_UINT64 NO_COMPU_METHOD 0 0 0 1000000000000 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_U64 "" VALUE U64 0 NO_COMPU_METHOD 0 1e+12 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I8 FNC_VALUES 1 SBYTE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I8 AXIS_PTS_X 1 SBYTE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I8 "" SBYTE NO_COMPU_METHOD 0 0 -128 127 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I8 "" VALUE I8 0 NO_COMPU_METHOD -128 127 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I16 FNC_VALUES 1 SWORD ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I16 AXIS_PTS_X 1 SWORD INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I16 "" SWORD NO_COMPU_METHOD 0 0 -32768 32767 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I16 "" VALUE I16 0 NO_COMPU_METHOD -32768 32767 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I32 FNC_VALUES 1 SLONG ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I32 AXIS_PTS_X 1 SLONG INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I32 "" SLONG NO_COMPU_METHOD 0 0 -2147483648 2147483647 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I32 "" VALUE I32 0 NO_COMPU_METHOD -2.14748e+09 2.14748e+09 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT I64 FNC_VALUES 1 A_INT64 ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_I64 AXIS_PTS_X 1 A_INT64 INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_I64 "" A_INT64 NO_COMPU_METHOD 0 0 -1000000000000 1000000000000 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_I64 "" VALUE I64 0 NO_COMPU_METHOD -1e+12 1e+12 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT F32 FNC_VALUES 1 FLOAT32_IEEE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_F32 AXIS_PTS_X 1 FLOAT32_IEEE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_F32 "" FLOAT32_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_F32 "" VALUE F32 0 NO_COMPU_METHOD -1e+12 1e+12 /end TYPEDEF_CHARACTERISTIC +/begin RECORD_LAYOUT F64 FNC_VALUES 1 FLOAT64_IEEE ROW_DIR DIRECT /end RECORD_LAYOUT +/begin RECORD_LAYOUT A_F64 AXIS_PTS_X 1 FLOAT64_IEEE INDEX_INCR DIRECT /end RECORD_LAYOUT +/begin TYPEDEF_MEASUREMENT M_F64 "" FLOAT64_IEEE NO_COMPU_METHOD 0 0 -1e+12 1e+12 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_CHARACTERISTIC C_F64 "" VALUE F64 0 NO_COMPU_METHOD -1e+12 1e+12 /end TYPEDEF_CHARACTERISTIC + +/begin TYPEDEF_MEASUREMENT M_byte_field "Byte field" UBYTE NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT M_word_field "Word field" SWORD NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT M_byte_field "Byte field" UBYTE NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT M_word_field "Word field" SWORD NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT +/begin TYPEDEF_MEASUREMENT M_array_field "Array field of 256 bytes" UBYTE NO_COMPU_METHOD 0 0 0 0 /end TYPEDEF_MEASUREMENT + +/* Groups */ +/begin GROUP event "Measurement event group" /begin REF_MEASUREMENT counter local_struct2 local_struct1 local_struct1_array static_counter static_struct2 static_struct1 static_struct1_array /end REF_MEASUREMENT /end GROUP +/begin GROUP event2 "Measurement event group" /begin REF_MEASUREMENT heap_struct1 /end REF_MEASUREMENT /end GROUP +/begin GROUP Events "Events" ROOT /begin SUB_GROUP event event2 /end SUB_GROUP /end GROUP + +/* Conversions */ +/begin COMPU_METHOD conv.bool "" TAB_VERB "%.0" "" COMPU_TAB_REF conv.bool.table /end COMPU_METHOD +/begin COMPU_VTAB conv.bool.table "" TAB_VERB 2 0 "false" 1 "true" /end COMPU_VTAB +/begin COMPU_METHOD conv.events "" TAB_VERB "%.0 " "" COMPU_TAB_REF conv.events.table /end COMPU_METHOD +/begin COMPU_VTAB conv.events.table "" TAB_VERB 3 + 0 "async" 1 "event" 2 "event2" +/end COMPU_VTAB + +/begin MOD_PAR "" +EPK "13_16_43" ADDR_EPK 0x80000000 +/end MOD_PAR + + +/begin IF_DATA XCP +/begin PROTOCOL_LAYER + 0x104 1000 2000 0 0 0 0 0 248 1024 BYTE_ORDER_MSB_LAST ADDRESS_GRANULARITY_BYTE +OPTIONAL_CMD GET_COMM_MODE_INFO +OPTIONAL_CMD GET_ID +OPTIONAL_CMD SET_REQUEST +OPTIONAL_CMD SET_MTA +OPTIONAL_CMD UPLOAD +OPTIONAL_CMD SHORT_UPLOAD +OPTIONAL_CMD DOWNLOAD +OPTIONAL_CMD SHORT_DOWNLOAD +OPTIONAL_CMD GET_CAL_PAGE +OPTIONAL_CMD SET_CAL_PAGE +OPTIONAL_CMD COPY_CAL_PAGE +OPTIONAL_CMD GET_PAG_PROCESSOR_INFO +OPTIONAL_CMD GET_SEGMENT_INFO +OPTIONAL_CMD GET_PAGE_INFO +OPTIONAL_CMD GET_SEGMENT_MODE +OPTIONAL_CMD SET_SEGMENT_MODE +OPTIONAL_CMD BUILD_CHECKSUM +OPTIONAL_CMD USER_CMD +OPTIONAL_CMD GET_DAQ_RESOLUTION_INFO +OPTIONAL_CMD GET_DAQ_PROCESSOR_INFO +OPTIONAL_CMD GET_DAQ_EVENT_INFO +OPTIONAL_CMD FREE_DAQ +OPTIONAL_CMD ALLOC_DAQ +OPTIONAL_CMD ALLOC_ODT +OPTIONAL_CMD ALLOC_ODT_ENTRY +OPTIONAL_CMD SET_DAQ_PTR +OPTIONAL_CMD WRITE_DAQ +OPTIONAL_CMD GET_DAQ_LIST_MODE +OPTIONAL_CMD SET_DAQ_LIST_MODE +OPTIONAL_CMD START_STOP_SYNCH +OPTIONAL_CMD START_STOP_DAQ_LIST +OPTIONAL_CMD GET_DAQ_CLOCK +OPTIONAL_CMD WRITE_DAQ_MULTIPLE +OPTIONAL_CMD TIME_CORRELATION_PROPERTIES +OPTIONAL_LEVEL1_CMD GET_VERSION +/end PROTOCOL_LAYER +/begin DAQ +DYNAMIC 0 3 0 OPTIMISATION_TYPE_DEFAULT ADDRESS_EXTENSION_FREE IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE 0xF8 OVERLOAD_INDICATION_PID PRESCALER_SUPPORTED +/begin TIMESTAMP_SUPPORTED 0x1 SIZE_DWORD UNIT_1NS TIMESTAMP_FIXED /end TIMESTAMP_SUPPORTED +/begin EVENT "async" "async" 0x0 DAQ 0xFF 100 4 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "event" "event" 0x1 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/begin EVENT "event2" "event2" 0x2 DAQ 0xFF 0 0 0 CONSISTENCY EVENT /end EVENT +/end DAQ +/begin XCP_ON_TCP_IP + 0x104 5555 ADDRESS "192.168.0.101" +/end XCP_ON_TCP_IP +/end IF_DATA + +/end MODULE +/end PROJECT diff --git a/test/test.sh b/test/test.sh new file mode 100755 index 00000000..2c847780 --- /dev/null +++ b/test/test.sh @@ -0,0 +1,597 @@ +#!/bin/bash + +# Script to test XCPlite examples +# Usage: ./test.sh [clean] [example_name] +# If example_name is provided, only that example will be tested +# If no parameter is given, all examples will be tested +# If 'clean' is given, all generated files (.a2l, .bin, .hex) will be deleted before running tests +# Examples: +# ./test.sh # Run all examples +# ./test.sh hello_xcp # Run only hello_xcp.out +# ./test.sh c_demo # Run only c_demo.out +# ./test.sh clean # Clean and run all examples +# ./test.sh clean hello_xcp # Clean and run only hello_xcp.out + +# Exit on error +set -e + + +# Color output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Function to log without color codes to file +log_plain() { + echo -e "$@" + echo -e "$@" | sed 's/\x1b\[[0-9;]*m//g' >> "$LOG_FILE" +} + +# Path to tools +BINTOOL="bintool" +A2LTOOL="a2ltool" +XCPCLIENT="xcp_client" + +# Get the workspace root directory +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +WORKSPACE_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" +BUILD_DIR="${WORKSPACE_ROOT}/build" +FIXTURES_DIR="${SCRIPT_DIR}/fixtures" + +# Parse command line arguments +SPECIFIC_EXAMPLE="" +DO_CLEAN=false + +if [ $# -gt 0 ]; then + # Check if the parameter is 'clean' + if [ "$1" = "clean" ]; then + DO_CLEAN=true + # Shift to check if there's a second parameter (example name) + shift + if [ $# -gt 0 ]; then + SPECIFIC_EXAMPLE="$1" + # Add .out extension if not provided + if [[ ! "$SPECIFIC_EXAMPLE" =~ \.out$ ]]; then + SPECIFIC_EXAMPLE="${SPECIFIC_EXAMPLE}.out" + fi + fi + else + SPECIFIC_EXAMPLE="$1" + # Add .out extension if not provided + if [[ ! "$SPECIFIC_EXAMPLE" =~ \.out$ ]]; then + SPECIFIC_EXAMPLE="${SPECIFIC_EXAMPLE}.out" + fi + fi +fi + +# Perform clean if requested +if [ "$DO_CLEAN" = true ]; then + echo -e "${BLUE}========================================${NC}" + echo -e "${BLUE} Cleaning generated files${NC}" + echo -e "${BLUE}========================================${NC}" + echo "" + echo -e "${YELLOW}Deleting all .a2l, .bin, and .hex files in workspace root...${NC}" + + # Count files before deletion + a2l_count=$(find "$WORKSPACE_ROOT" -maxdepth 1 -name "*.a2l" -type f 2>/dev/null | wc -l) + bin_count=$(find "$WORKSPACE_ROOT" -maxdepth 1 -name "*.bin" -type f 2>/dev/null | wc -l) + hex_count=$(find "$WORKSPACE_ROOT" -maxdepth 1 -name "*.hex" -type f 2>/dev/null | wc -l) + + # Delete files + find "$WORKSPACE_ROOT" -maxdepth 1 -name "*.a2l" -type f -delete 2>/dev/null || true + find "$WORKSPACE_ROOT" -maxdepth 1 -name "*.bin" -type f -delete 2>/dev/null || true + find "$WORKSPACE_ROOT" -maxdepth 1 -name "*.hex" -type f -delete 2>/dev/null || true + + echo -e "${GREEN} ✓ Deleted $a2l_count .a2l file(s)${NC}" + echo -e "${GREEN} ✓ Deleted $bin_count .bin file(s)${NC}" + echo -e "${GREEN} ✓ Deleted $hex_count .hex file(s)${NC}" + echo "" + echo -e "${GREEN}Clean complete! Starting tests...${NC}" + echo "" +fi + + + + +# Create log file based on what's being tested +if [ -n "$SPECIFIC_EXAMPLE" ]; then + # Remove .out extension for log filename + LOG_NAME="${SPECIFIC_EXAMPLE%.out}" + LOG_FILE="${SCRIPT_DIR}/test_${LOG_NAME}.log" +else + LOG_FILE="${SCRIPT_DIR}/test_all.log" +fi + +# Delete existing log file to start fresh +rm -f "$LOG_FILE" + + +# Function to log to both console and file +log() { + echo -e "$@" | tee -a "$LOG_FILE" +} + +log_plain "${BLUE}========================================${NC}" +if [ -n "$SPECIFIC_EXAMPLE" ]; then + log_plain "${BLUE} Testing XCPlite Example (2s)${NC}" +else + log_plain "${BLUE} Running All XCPlite Examples (2s each)${NC}" +fi +log_plain "${BLUE}========================================${NC}" +log_plain "" +log_plain "Log file: $LOG_FILE" +log_plain "Start time: $(date)" +log_plain "" + +# Check if build directory exists +if [ ! -d "$BUILD_DIR" ]; then + log_plain "${RED}Error: Build directory not found: $BUILD_DIR${NC}" + log_plain "Please run CMake build first" + exit 1 +fi + + + +# List of all available examples (order matters - simpler ones first) +ALL_EXAMPLES=( + "hello_xcp.out" + "hello_xcp_cpp.out" + "c_demo.out" + "cpp_demo.out" + "struct_demo.out" + "multi_thread_demo.out" + +) + +# Determine which examples to run +if [ -n "$SPECIFIC_EXAMPLE" ]; then + # Check if the specific example is in the list + if [[ " ${ALL_EXAMPLES[@]} " =~ " ${SPECIFIC_EXAMPLE} " ]]; then + EXAMPLES=("$SPECIFIC_EXAMPLE") + log_plain "${BLUE}Testing specific example: ${SPECIFIC_EXAMPLE}${NC}" + log_plain "" + else + log_plain "${RED}Error: Unknown example '${SPECIFIC_EXAMPLE}'${NC}" + log_plain "${YELLOW}Available examples:${NC}" + for ex in "${ALL_EXAMPLES[@]}"; do + log_plain " - ${ex%.out}" + done + exit 1 + fi +else + EXAMPLES=("${ALL_EXAMPLES[@]}") +fi + +# Function to get protocol for an example +# TCP examples: hello_xcp, hello_xcp_cpp, struct_demo +# UDP examples: c_demo, cpp_demo, multi_thread_demo +get_example_protocol() { + local example_name="$1" + case "$example_name" in + hello_xcp.out|hello_xcp_cpp.out|struct_demo.out) + echo "tcp" + ;; + c_demo.out|cpp_demo.out|multi_thread_demo.out) + echo "udp" + ;; + *) + echo "tcp" # Default to TCP + ;; + esac +} + + + +# Counter for results +TOTAL=0 +PASSED=0 +FAILED=0 +SKIPPED=0 + +# Counter for xcp_client tests +XCP_CRASHED=0 + +# Counter for hex file comparisons +HEX_COMPARED=0 +HEX_MATCHED=0 +HEX_MISMATCHED=0 + +# Counter for A2L file comparisons +A2L_COMPARED=0 +A2L_MATCHED=0 +A2L_MISMATCHED=0 + +# Arrays to track updated fixtures +UPDATED_HEX_FIXTURES=() +UPDATED_A2L_FIXTURES=() + +# Function to run an example +run_example() { + local example=$1 + local is_optional=$2 + local exe_path="${BUILD_DIR}/${example}" + + TOTAL=$((TOTAL + 1)) + + log_plain "${YELLOW}Running: ${example}${NC}" + + # Check if executable exists + if [ ! -f "$exe_path" ]; then + if [ "$is_optional" = true ]; then + log_plain "${YELLOW} Skipped: ${example} not found (optional)${NC}" + SKIPPED=$((SKIPPED + 1)) + else + log_plain "${RED} Failed: ${example} not found${NC}" + FAILED=$((FAILED + 1)) + fi + log_plain "" + return + fi + + # Check if executable is runnable + if [ ! -x "$exe_path" ]; then + log_plain "${RED} Failed: ${example} is not executable${NC}" + FAILED=$((FAILED + 1)) + log_plain "" + return + fi + + # Kill any existing XCP processes to free up ports + pkill -f "$example" || true + sleep 0.2 # Give processes time to terminate + + # Create temporary file for capturing output + local tmp_output=$(mktemp) + + # Run the example with timeout (using portable method for macOS/Linux) + # Start the process in background and capture its PID + # Change to WORKSPACE_ROOT so A2L file is created there + cd "$WORKSPACE_ROOT" + "$exe_path" > "$tmp_output" 2>&1 & + local pid=$! + # Stay in WORKSPACE_ROOT - don't change back yet so xcp_client runs in same directory + + # Run xcp_client test connect (foreground) if available + sleep 1.0 # Give the example more time to initialize - A2L file is created on first connect + + if command -v "$XCPCLIENT" &> /dev/null; then + # Determine protocol for this example + local protocol=$(get_example_protocol "$example") + local protocol_flag="--${protocol}" + local protocol_upper=$(echo "$protocol" | tr '[:lower:]' '[:upper:]') + + log_plain "${BLUE} Running xcp_client to test connection ($protocol_upper)...${NC}" + # Run xcp_client from current directory (WORKSPACE_ROOT) + # where the demo app is running and will create the A2L file + # Disable exit-on-error for this command + set +e + # Create a temp file for xcp_client output + local tmp_xcp=$(mktemp) + + # Run xcp_client - it will connect and the server will create the A2L file in current dir + # xcp_client will automatically find and use the A2L file from the current directory + "$XCPCLIENT" "$protocol_flag" > "$tmp_xcp" 2>&1 + local xcp_exit=$? + + # Append xcp_client output to main output file for logging + cat "$tmp_xcp" >> "$tmp_output" + + # Also log xcp_client output to log file with indentation for visibility + if [ -s "$tmp_xcp" ]; then + echo "" >> "$LOG_FILE" + echo " xcp_client output ($protocol_upper):" >> "$LOG_FILE" + echo " ........................................" >> "$LOG_FILE" + sed 's/^/ /' "$tmp_xcp" >> "$LOG_FILE" + echo " ........................................" >> "$LOG_FILE" + fi + + rm -f "$tmp_xcp" + set -e + + if [ $xcp_exit -eq 0 ]; then + log_plain "${GREEN} ✓ xcp_client test passed ($protocol_upper)${NC}" + elif [ $xcp_exit -eq 134 ]; then + # Exit code 134 is abort/panic - this is a serious error + log_plain "${RED} ✗ xcp_client CRASHED (abort/panic, exit code 134)${NC}" + log_plain "${RED} This indicates a bug in xcp_client - check the log file for details${NC}" + XCP_CRASHED=$((XCP_CRASHED + 1)) + else + log_plain "${YELLOW} ⚠ xcp_client exited with code $xcp_exit (connection may have failed)${NC}" + fi + + # Give the server a moment to finish writing the A2L file + sleep 0.2 + + # Run xcp_client a second time in test mode + # "$XCPCLIENT" "$protocol_flag" "--test" + + + fi + + + # Wait for up to 2 seconds for the process to complete + local counter=0 + local max_count=20 # 20 * 0.1s = 2s + local process_exited=false + + while [ $counter -lt $max_count ]; do + if ! kill -0 "$pid" 2>/dev/null; then + process_exited=true + break + fi + sleep 0.1 + counter=$((counter + 1)) + done + + if [ "$process_exited" = true ]; then + # Process exited before timeout - check exit code + wait "$pid" 2>/dev/null || true + EXIT_CODE=$? + if [ $EXIT_CODE -eq 0 ]; then + log_plain "${GREEN} Passed: ${example} completed successfully${NC}" + PASSED=$((PASSED + 1)) + else + log_plain "${RED} Failed: ${example} crashed with exit code $EXIT_CODE${NC}" + FAILED=$((FAILED + 1)) + fi + else + # Process is still running after 2s - kill it (this is expected/success) + kill "$pid" 2>/dev/null || true + wait "$pid" 2>/dev/null || true + log_plain "${GREEN} Passed: ${example} ran for 2s and was terminated${NC}" + PASSED=$((PASSED + 1)) + fi + + # Wait for kernel to flush buffered output to temp file + # When a process is killed abruptly without signal handler, buffered output may not be flushed + # Give the system time to flush buffers and sync the file + sleep 0.5 + + # Log the example output (always log, even if empty) + echo "" >> "$LOG_FILE" + echo " Output from ${example}:" >> "$LOG_FILE" + echo " ----------------------------------------" >> "$LOG_FILE" + + # Check if output file exists and has content + if [ -f "$tmp_output" ] && [ -s "$tmp_output" ]; then + # Strip ANSI color codes before logging + sed 's/\x1b\[[0-9;]*m//g' "$tmp_output" | sed 's/^/ /' >> "$LOG_FILE" + else + local file_size=0 + if [ -f "$tmp_output" ]; then + file_size=$(stat -f%z "$tmp_output" 2>/dev/null || stat -c%s "$tmp_output" 2>/dev/null || echo 0) + fi + echo " (no output captured - file size: ${file_size} bytes)" >> "$LOG_FILE" + fi + echo " ----------------------------------------" >> "$LOG_FILE" + rm -f "$tmp_output" + + # Check for .bin files created by this example + # Format: example_name_HH_MM_SS.bin (where HH_MM_SS is from __TIME__) + # Check both BUILD_DIR and WORKSPACE_ROOT (examples write to current directory) + # Each example creates exactly one BIN file + local example_basename="${example%.out}" + # Find BIN files matching the pattern and filter to exact matches (not substrings) + # Use grep to ensure the filename ends with _HH_MM_SS.bin pattern + local bin_files=$(find "$BUILD_DIR" "$WORKSPACE_ROOT" -maxdepth 1 -name "${example_basename}_*.bin" -type f 2>/dev/null | grep -E "/${example_basename}_[0-9]{2}_[0-9]{2}_[0-9]{2}\.bin$" | head -1) + + if [ -n "$bin_files" ]; then + log_plain "${BLUE} Found .bin file(s):${NC}" + for bin_file in $bin_files; do + local bin_filename=$(basename "$bin_file") + local bin_size=$(ls -lh "$bin_file" | awk '{print $5}') + log_plain "${BLUE} ${bin_filename} (${bin_size})${NC}" + + if [ -n "$BINTOOL" ]; then + # Dump content to log file only (not console) + + # Create temporary file for bintool output + local tmp_bintool=$(mktemp) + if "$BINTOOL" --dump --verbose "$bin_file" > "$tmp_bintool" 2>&1; then + # Success - log the output (but don't display to console) + echo " Dumping content:" >> "$LOG_FILE" + sed 's/^/ /' "$tmp_bintool" >> "$LOG_FILE" + else + # Failed - log error + echo " Warning: bintool failed to dump file (possible version mismatch)" >> "$LOG_FILE" + echo " bintool error output:" >> "$LOG_FILE" + sed 's/^/ /' "$tmp_bintool" >> "$LOG_FILE" + fi + rm -f "$tmp_bintool" + + # Create Intel-HEX file + local hex_file="${bin_file%.bin}.hex" + log_plain "${BLUE} Creating Intel-HEX file: $(basename "$hex_file")${NC}" + if "$BINTOOL" --hex "$hex_file" "$bin_file" 2>&1 | tee -a "$LOG_FILE" | grep -q "Conversion complete"; then + local hex_size=$(ls -lh "$hex_file" | awk '{print $5}') + log_plain "${GREEN} Successfully created Intel-HEX file (${hex_size})${NC}" + # Log a sample of the hex file (first 10 lines) + echo " Intel-HEX content (first 10 lines):" >> "$LOG_FILE" + head -n 10 "$hex_file" | sed 's/^/ /' >> "$LOG_FILE" + + # Compare with fixture if it exists + local fixture_hex="${FIXTURES_DIR}/${example_basename}.hex" + if [ -f "$fixture_hex" ]; then + HEX_COMPARED=$((HEX_COMPARED + 1)) + log_plain "${BLUE} Comparing with fixture: ${example_basename}.hex${NC}" + + # Create temporary files without the informational header lines + local tmp_current=$(mktemp) + local tmp_fixture=$(mktemp) + + # Skip the first few lines (conversion messages) and compare actual hex content + grep "^:" "$hex_file" > "$tmp_current" 2>/dev/null || true + grep "^:" "$fixture_hex" > "$tmp_fixture" 2>/dev/null || true + + if diff -q "$tmp_current" "$tmp_fixture" >/dev/null 2>&1; then + log_plain "${GREEN} ✓ HEX file matches fixture${NC}" + HEX_MATCHED=$((HEX_MATCHED + 1)) + else + log_plain "${RED} ✗ HEX file DOES NOT match fixture!${NC}" + HEX_MISMATCHED=$((HEX_MISMATCHED + 1)) + # Log the differences + echo " Differences:" >> "$LOG_FILE" + diff -u "$tmp_fixture" "$tmp_current" | head -20 | sed 's/^/ /' >> "$LOG_FILE" || true + # Update fixture and track it + cp "$hex_file" "$fixture_hex" + UPDATED_HEX_FIXTURES+=("${example_basename}.hex") + fi + + rm -f "$tmp_current" "$tmp_fixture" + else + log_plain "${YELLOW} Note: No fixture found - creating new fixture: ${example_basename}.hex${NC}" + # Create fixtures directory if it doesn't exist + mkdir -p "$FIXTURES_DIR" + # Copy the hex file to fixtures + cp "$hex_file" "$fixture_hex" + log_plain "${GREEN} ✓ Created fixture from current HEX file${NC}" + UPDATED_HEX_FIXTURES+=("${example_basename}.hex (new)") + fi + else + log_plain "${YELLOW} Warning: bintool failed to create Intel-HEX file${NC}" + fi + fi + done + fi + + # Check for .a2l files created by this example + # Format: example_name_HH_MM_SS.a2l (where HH_MM_SS is from __TIME__) + # Check both BUILD_DIR and WORKSPACE_ROOT (examples write to current directory) + # Each example creates exactly one A2L file + # Use grep to ensure the filename ends with _HH_MM_SS.a2l pattern or exact match + local a2l_files=$(find "$BUILD_DIR" "$WORKSPACE_ROOT" -maxdepth 1 \( -name "${example_basename}_*.a2l" -o -name "${example_basename}.a2l" \) -type f 2>/dev/null | grep -E "(/${example_basename}_[0-9]{2}_[0-9]{2}_[0-9]{2}\.a2l$|/${example_basename}\.a2l$)" | head -1) + + if [ -n "$a2l_files" ]; then + log_plain "${BLUE} Found .a2l file(s):${NC}" + for a2l_file in $a2l_files; do + local a2l_filename=$(basename "$a2l_file") + local a2l_size=$(ls -lh "$a2l_file" | awk '{print $5}') + log_plain "${BLUE} ${a2l_filename} (${a2l_size})${NC}" + + # Compare with fixture if it exists + local fixture_a2l="${FIXTURES_DIR}/${example_basename}.a2l" + if [ -f "$fixture_a2l" ]; then + A2L_COMPARED=$((A2L_COMPARED + 1)) + log_plain "${BLUE} Comparing with fixture: ${example_basename}.a2l${NC}" + + if diff -q "$a2l_file" "$fixture_a2l" >/dev/null 2>&1; then + log_plain "${GREEN} ✓ A2L file matches fixture${NC}" + A2L_MATCHED=$((A2L_MATCHED + 1)) + else + log_plain "${RED} ✗ A2L file DOES NOT match fixture!${NC}" + A2L_MISMATCHED=$((A2L_MISMATCHED + 1)) + # Log the differences (first 30 lines) + echo " Differences (first 30 lines):" >> "$LOG_FILE" + diff -u "$fixture_a2l" "$a2l_file" | head -30 | sed 's/^/ /' >> "$LOG_FILE" || true + log_plain "${YELLOW} Note: A2L files differ - this may be expected due to timestamps or memory addresses${NC}" + log_plain "${YELLOW} Copying new A2L file to fixtures directory...${NC}" + cp "$a2l_file" "$fixture_a2l" + log_plain "${GREEN} ✓ Updated fixture with new A2L file${NC}" + UPDATED_A2L_FIXTURES+=("${example_basename}.a2l") + fi + else + log_plain "${YELLOW} Note: No fixture found - creating new fixture: ${example_basename}.a2l${NC}" + # Create fixtures directory if it doesn't exist + mkdir -p "$FIXTURES_DIR" + # Copy the a2l file to fixtures + cp "$a2l_file" "$fixture_a2l" + log_plain "${GREEN} ✓ Created fixture from current A2L file${NC}" + UPDATED_A2L_FIXTURES+=("${example_basename}.a2l (new)") + fi + done + fi + + # Return to original directory + cd - > /dev/null + + log_plain "" +} + +# Run all regular examples +for example in "${EXAMPLES[@]}"; do + run_example "$example" false +done + + + +# Print summary +log_plain "${BLUE}========================================${NC}" +log_plain "${BLUE} Summary${NC}" +log_plain "${BLUE}========================================${NC}" +log_plain "Total: $TOTAL" +log_plain "${GREEN}Passed: $PASSED${NC}" +if [ $FAILED -gt 0 ]; then +log_plain "${RED}Failed: $FAILED${NC}" +fi +if [ $SKIPPED -gt 0 ]; then +log_plain "${YELLOW}Skipped: $SKIPPED${NC}" +fi +log_plain "" +if [ $XCP_CRASHED -gt 0 ]; then + log_plain "${RED}⚠ WARNING: xcp_client crashed $XCP_CRASHED time(s)${NC}" + log_plain "${RED} This indicates bugs in xcp_client that need to be fixed!${NC}" + log_plain "" +fi +if [ $HEX_COMPARED -gt 0 ]; then + log_plain "${BLUE}HEX File Comparisons:${NC}" + log_plain " Compared: $HEX_COMPARED" + log_plain "${GREEN} Matched: $HEX_MATCHED${NC}" + if [ $HEX_MISMATCHED -gt 0 ]; then + log_plain "${RED} Mismatched: $HEX_MISMATCHED${NC}" + fi + if [ ${#UPDATED_HEX_FIXTURES[@]} -gt 0 ]; then + log_plain "${YELLOW} Updated fixtures:${NC}" + for fixture in "${UPDATED_HEX_FIXTURES[@]}"; do + log_plain "${YELLOW} - $fixture${NC}" + done + fi + log_plain "" +fi +if [ $A2L_COMPARED -gt 0 ]; then + log_plain "${BLUE}A2L File Comparisons:${NC}" + log_plain " Compared: $A2L_COMPARED" + log_plain "${GREEN} Matched: $A2L_MATCHED${NC}" + if [ $A2L_MISMATCHED -gt 0 ]; then + log_plain "${YELLOW} Mismatched: $A2L_MISMATCHED${NC}" + fi + if [ ${#UPDATED_A2L_FIXTURES[@]} -gt 0 ]; then + log_plain "${YELLOW} Updated fixtures:${NC}" + for fixture in "${UPDATED_A2L_FIXTURES[@]}"; do + log_plain "${YELLOW} - $fixture${NC}" + done + fi + log_plain "" +fi +log_plain "End time: $(date)" +log_plain "" + +# Show updated fixtures even if no comparisons were made +if [ ${#UPDATED_HEX_FIXTURES[@]} -gt 0 ] || [ ${#UPDATED_A2L_FIXTURES[@]} -gt 0 ]; then + log_plain "${YELLOW}Updated/Created Fixtures:${NC}" + for fixture in "${UPDATED_HEX_FIXTURES[@]}"; do + log_plain "${YELLOW} - $fixture${NC}" + done + for fixture in "${UPDATED_A2L_FIXTURES[@]}"; do + log_plain "${YELLOW} - $fixture${NC}" + done + log_plain "" +fi + +log_plain "Full log saved to: $LOG_FILE" + +# Exit with appropriate code +if [ $FAILED -gt 0 ]; then + log_plain "${RED}Some examples failed!${NC}" + exit 1 +elif [ $HEX_MISMATCHED -gt 0 ]; then + log_plain "${RED}Some HEX files don't match their fixtures!${NC}" + exit 1 +else + if [ $A2L_MISMATCHED -gt 0 ]; then + log_plain "${YELLOW}Note: Some A2L files were updated in fixtures (this may be expected)${NC}" + fi + log_plain "${GREEN}All examples passed!${NC}" + exit 0 +fi diff --git a/test/test_bintool.sh b/test/test_bintool.sh new file mode 100755 index 00000000..8e7fbf42 --- /dev/null +++ b/test/test_bintool.sh @@ -0,0 +1,449 @@ +#!/bin/bash + +# BINTOOL Test Script for Raspberry Pi +# This script tests the complete bintool workflow: +# 1. Sync project to target +# 2. Build demo on target (has multiple calibration segments) +# 3. Start demo XCP server +# 4. Download A2L and BIN files using xcp_client +# 5. Convert BIN to HEX using bintool +# 6. Upload HEX file back to target to verify round-trip +# +# Usage: ./test_bin2hex_pi.sh [demo_name] +# demo_name: hello_xcp, c_demo, cpp_demo, multi_thread_demo, struct_demo (default: cpp_demo) + +set -e # Exit on error + +#====================================================================================================================== +# Configuration +#====================================================================================================================== + +# Demo to test (can be overridden by command line argument) +DEMO_NAME="${1:-cpp_demo}" + +# Determine XCP protocol based on demo +# TCP demos: bpf_demo, hello_xcp, no_a2l_demo, struct_demo +# UDP demos: c_demo, cpp_demo, multi_thread_demo +case "$DEMO_NAME" in + bpf_demo|hello_xcp|no_a2l_demo|struct_demo) + XCP_PROTOCOL="--tcp" + ;; + *) + XCP_PROTOCOL="--udp" + ;; +esac + +# Test target connection details +TARGET_USER="rainer" +TARGET_HOST="192.168.0.206" +TARGET_PATH="~/XCPlite-RainerZ" +TARGET_EXECUTABLE="$TARGET_PATH/build/${DEMO_NAME}.out" + +# Tools +XCPCLIENT="xcp_client" # Installed via: cargo install --path (in xcp-lite project) +BINTOOL="bintool" # Installed via: cargo install --path tools/bintool + + +# Local paths +TEST_DIR="./test_bintool" +LOGFILE="$TEST_DIR/test_bintool.log" + +# Test files created during the test +A2L_FILE="$TEST_DIR/${DEMO_NAME}.a2l" +BIN_FILE="$TEST_DIR/${DEMO_NAME}.bin" +HEX_FROM_BIN="$TEST_DIR/${DEMO_NAME}_from_bin.hex" +HEX_FROM_XCP="$TEST_DIR/${DEMO_NAME}_from_xcp.hex" +BIN_BACKUP="$TEST_DIR/${DEMO_NAME}_backup.bin" +BIN_RESTORED="$TEST_DIR/${DEMO_NAME}_restored.bin" + +# Build type for target executable +BUILD_TYPE="Debug" + +#====================================================================================================================== +# Helper Functions +#====================================================================================================================== + +cleanup_target() { + echo "Cleaning up target processes..." + ssh $TARGET_USER@$TARGET_HOST "pkill -f ${DEMO_NAME}.out" 2>/dev/null || true + sleep 1 +} + +cleanup_local() { + echo "Cleaning up local test directory..." + rm -rf $TEST_DIR + mkdir -p $TEST_DIR +} + +#====================================================================================================================== +# Main Test Flow +#====================================================================================================================== + +echo "========================================================================================================" +echo "BINTOOL Test Script" +echo "========================================================================================================" +echo "Target: $TARGET_USER@$TARGET_HOST" +echo "Demo: $DEMO_NAME" +echo "Log: $LOGFILE" +echo "" +echo "Test workflow:" +echo " 1. Sync and build $DEMO_NAME on target" +echo " 2. Start XCP server ($DEMO_NAME generates BIN file on startup)" +echo " 3. Download A2L via XCP" +echo " 4. Upload calibration data via XCP to create HEX file (xcp_client --upload-bin)" +echo " 5. Download BIN file via scp" +echo " 6. Convert BIN → HEX using bintool" +echo " 7. Compare both HEX files (from XCP vs from BIN)" +echo " 8. Test round-trip: HEX → BIN" +echo "" + +# Initialize +cleanup_local +echo "" > $LOGFILE + +#--------------------------------------------------- +# Step 1: Sync project to target +#--------------------------------------------------- +echo "Step 1: Syncing project to target..." +rsync -avz --delete \ + --exclude=build/ \ + --exclude=.git/ \ + --exclude="*.o" \ + --exclude="*.out" \ + --exclude="*.a" \ + ./ $TARGET_USER@$TARGET_HOST:$TARGET_PATH/ >> $LOGFILE 2>&1 + +if [ $? -ne 0 ]; then + echo "❌ FAILED: Rsync to target" + exit 1 +fi +echo "✅ Sync completed" + +#--------------------------------------------------- +# Step 2: Build demo on target +#--------------------------------------------------- +echo "" +echo "Step 2: Building $DEMO_NAME on target..." +ssh $TARGET_USER@$TARGET_HOST "cd $TARGET_PATH && ./build.sh $BUILD_TYPE" >> $LOGFILE 2>&1 + +if [ $? -ne 0 ]; then + echo "❌ FAILED: Build on target" + exit 1 +fi +echo "✅ Build completed" + +#--------------------------------------------------- +# Step 3: Start demo XCP server +#--------------------------------------------------- +echo "" +echo "Step 3: Starting $DEMO_NAME XCP server on target..." +cleanup_target +ssh $TARGET_USER@$TARGET_HOST "cd $TARGET_PATH && $TARGET_EXECUTABLE" >> $LOGFILE 2>&1 & +SSH_PID=$! +sleep 3 +echo "✅ XCP server started (PID: $SSH_PID)" + +#--------------------------------------------------- +# Step 4: Upload calibration data via XCP to create HEX file +#--------------------------------------------------- +echo "" +echo "Step 4: Uploading calibration data from target via XCP..." +echo "(xcp_client --upload-bin reads calibration segments and creates Intel-Hex file)" +echo "Using protocol: $XCP_PROTOCOL" + +# Check if xcp_client is available +if ! command -v $XCPCLIENT &> /dev/null; then + echo "❌ FAILED: xcp_client not found in PATH" + echo "Please install it first from the xcp-lite project" + cleanup_target + exit 1 +fi + +$XCPCLIENT \ + --dest-addr=$TARGET_HOST \ + $XCP_PROTOCOL \ + --upload-a2l \ + --upload-bin \ + >> $LOGFILE 2>&1 + +if [ $? -ne 0 ]; then + echo "❌ FAILED: xcp_client upload from target" + cleanup_target + exit 1 +fi + +# Move uploaded files to test directory +mv ${DEMO_NAME}.a2l $A2L_FILE 2>/dev/null || true +mv ${DEMO_NAME}.hex $HEX_FROM_XCP 2>/dev/null || true + +if [ ! -f "$HEX_FROM_XCP" ]; then + echo "❌ FAILED: HEX file not created by xcp_client" + cleanup_target + exit 1 +fi + +echo "✅ Created HEX file via XCP: $HEX_FROM_XCP ($(wc -l < "$HEX_FROM_XCP") lines)" + +#--------------------------------------------------- +# Step 5: Download BIN file from target +#--------------------------------------------------- +echo "" +echo "Step 5: Downloading BIN file from target using scp..." +echo "(BIN file is generated by $DEMO_NAME on startup with timestamp in name)" + +# Find the BIN file on target (name includes build time: ${DEMO_NAME}_v10_21_01_18.bin) +# BIN file is created by ${DEMO_NAME}.out in the project root directory +echo "Finding BIN file on target..." +TARGET_BIN_PATTERN="$TARGET_PATH/${DEMO_NAME}_v*.bin" +TARGET_BIN_FILE=$(ssh $TARGET_USER@$TARGET_HOST "ls -t $TARGET_BIN_PATTERN 2>/dev/null | head -1") + +if [ -z "$TARGET_BIN_FILE" ]; then + echo "❌ FAILED: Could not find BIN file on target matching pattern: $TARGET_BIN_PATTERN" + cleanup_target + exit 1 +fi + +echo "Found BIN file on target: $TARGET_BIN_FILE" + +# Download the BIN file +scp $TARGET_USER@$TARGET_HOST:$TARGET_BIN_FILE $BIN_FILE >> $LOGFILE 2>&1 + +if [ $? -ne 0 ]; then + echo "❌ FAILED: BIN file download from target" + cleanup_target + exit 1 +fi + +if [ ! -f "$BIN_FILE" ]; then + echo "❌ FAILED: BIN file not found after download" + cleanup_target + exit 1 +fi + +# Get just the filename for display +BIN_FILENAME=$(basename "$TARGET_BIN_FILE") +echo "✅ Downloaded BIN file from target: $BIN_FILENAME → $BIN_FILE ($(stat -f%z "$BIN_FILE" 2>/dev/null || stat -c%s "$BIN_FILE") bytes)" + +#--------------------------------------------------- +# Step 6: Check bintool availability +#--------------------------------------------------- +echo "" +echo "Step 6: Checking bintool availability..." +if ! command -v $BINTOOL &> /dev/null; then + echo "❌ FAILED: bintool not found in PATH" + echo "Please install it first: cargo install --path tools/bintool" + cleanup_target + exit 1 +fi +echo "✅ bintool ready ($(which $BINTOOL))" + +#--------------------------------------------------- +# Step 7: Convert BIN to HEX +#--------------------------------------------------- +echo "" +echo "Step 7: Converting BIN to HEX using bintool (new convenient syntax)..." +$BINTOOL $BIN_FILE --dump --verbose +$BINTOOL $BIN_FILE -o $HEX_FROM_BIN +if [ $? -ne 0 ]; then + echo "❌ FAILED: Reading BIN" + cleanup_target + exit 1 +fi +# Simple syntax: just provide BIN file, HEX is auto-derived +$BINTOOL $BIN_FILE -o $HEX_FROM_BIN +if [ $? -ne 0 ]; then + echo "❌ FAILED: BIN to HEX conversion" + cleanup_target + exit 1 +fi + + +if [ ! -f "$HEX_FROM_BIN" ]; then + echo "❌ FAILED: HEX file not created" + cleanup_target + exit 1 +fi + +echo "✅ Created HEX file from BIN: $HEX_FROM_BIN ($(wc -l < "$HEX_FROM_BIN") lines)" + +#--------------------------------------------------- +# Step 8: Compare HEX files +#--------------------------------------------------- +echo "" +echo "Step 8: Comparing HEX files (XCP vs BINTOOL)..." +echo "HEX from XCP: $HEX_FROM_XCP" +echo "HEX from BIN: $HEX_FROM_BIN" + +# Show first few lines of each +echo "" +echo "First 10 lines of HEX from XCP:" +head -10 $HEX_FROM_XCP + +echo "" +echo "First 10 lines of HEX from BIN:" +head -10 $HEX_FROM_BIN + +# Compare files +echo "" +if cmp -s $HEX_FROM_XCP $HEX_FROM_BIN; then + echo "✅ HEX files are IDENTICAL - bintool produces same output as xcp_client!" +else + echo "ℹ️ HEX files differ - comparing content..." + + # Count segments in each + SEGMENTS_XCP=$(grep -c "^:02000004" $HEX_FROM_XCP || echo "0") + SEGMENTS_BIN=$(grep -c "^:02000004" $HEX_FROM_BIN || echo "0") + + echo "Segments in XCP HEX: $SEGMENTS_XCP" + echo "Segments in BIN HEX: $SEGMENTS_BIN" + + # Show differences + echo "" + echo "Differences (if any):" + diff $HEX_FROM_XCP $HEX_FROM_BIN || true + + echo "" + echo "✅ Both HEX files created successfully (minor differences may be expected)" +fi + +#--------------------------------------------------- +# Step 9: Display HEX file info +#--------------------------------------------------- +echo "" +echo "Step 9: HEX file detailed info..." +echo "HEX from BIN file:" +echo "HEX from BIN file:" +echo "First 10 lines of HEX file:" +head -10 $HEX_FROM_BIN +echo "..." +echo "Last 2 lines of HEX file:" +tail -2 $HEX_FROM_BIN + +# Count segments +SEGMENT_COUNT=$(grep -c "^:02000004" $HEX_FROM_BIN || echo "0") +echo "" +echo "Number of segments (Extended Linear Address records): $SEGMENT_COUNT" + +#--------------------------------------------------- +# Step 10: Test round-trip conversion +#--------------------------------------------------- +echo "" +echo "Step 10: Testing round-trip conversion (HEX → BIN)..." + +# Backup original BIN +cp $BIN_FILE $BIN_BACKUP + +# Apply HEX to BIN (using HEX from BIN conversion) - new convenient syntax +$BINTOOL $BIN_FILE --apply-hex $HEX_FROM_BIN + +if [ $? -ne 0 ]; then + echo "❌ FAILED: HEX to BIN conversion" + cleanup_target + exit 1 +fi + +# Compare original and restored +echo "Comparing original and restored BIN files..." +if cmp -s $BIN_BACKUP $BIN_FILE; then + echo "✅ Round-trip successful: Files are identical" +else + echo "❌ FAILED: Round-trip produced different file" + cleanup_target + exit 1 +fi + +#--------------------------------------------------- +# Step 11: Test incomplete HEX rejection +#--------------------------------------------------- +echo "" +echo "Step 11: Testing incomplete segment data rejection..." + +# Create incomplete HEX file with truncated data in a segment (not just fewer lines) +# This creates a HEX with segment data that's too short +echo ":0200000480007A" > $TEST_DIR/incomplete.hex +echo ":0400007631305F3153" >> $TEST_DIR/incomplete.hex # EPK segment with only 4 bytes instead of 12 +echo ":00000001FF" >> $TEST_DIR/incomplete.hex + +# Try to apply incomplete HEX (should fail because segment 0 needs 12 bytes but only has 4) +# Try to apply incomplete HEX (should fail) +$BINTOOL $BIN_FILE --apply-hex $TEST_DIR/incomplete.hex 2>&1 | tee $TEST_DIR/incomplete_test.log + +if [ ${PIPESTATUS[0]} -eq 0 ]; then + echo "❌ FAILED: Incomplete segment data was accepted (should have been rejected)" + cleanup_target + exit 1 +fi + +# Verify BIN file unchanged +if cmp -s $BIN_BACKUP $BIN_FILE; then + echo "✅ Incomplete segment data correctly rejected, BIN file unchanged" +else + echo "❌ FAILED: BIN file was modified by incomplete segment data" + cleanup_target + exit 1 +fi + +#--------------------------------------------------- +# Step 12: Test partial HEX update (subset of segments) +#--------------------------------------------------- +echo "" +echo "Step 12: Testing partial HEX update (subset of segments)..." + +# Restore backup +cp $BIN_BACKUP $BIN_FILE + +# Create HEX file with only first 3 segments (not all 4) +head -n -5 $HEX_FROM_BIN > $TEST_DIR/partial.hex 2>/dev/null || \ + tail -r $HEX_FROM_BIN | tail -n +6 | tail -r > $TEST_DIR/partial.hex +echo ":00000001FF" >> $TEST_DIR/partial.hex + +# This should succeed and update only the 3 segments present +$BINTOOL $BIN_FILE --apply-hex $TEST_DIR/partial.hex 2>&1 | tee $TEST_DIR/partial_test.log + +if [ ${PIPESTATUS[0]} -ne 0 ]; then + echo "❌ FAILED: Partial HEX update failed" + cleanup_target + exit 1 +fi + +echo "✅ Partial HEX update successful (updated 3 of 4 segments)" + +#--------------------------------------------------- +# Step 13: Cleanup +#--------------------------------------------------- +echo "" +echo "Step 13: Cleanup..." +cleanup_target +echo "✅ Target processes stopped" + +#====================================================================================================================== +# Summary +#====================================================================================================================== + +echo "" +echo "========================================================================================================" +echo "✅ ALL TESTS PASSED" +echo "========================================================================================================" +echo "" +echo "Test Results:" +echo " - Demo tested: $DEMO_NAME" +echo " - Project synced and built on target" +echo " - XCP server started successfully" +echo " - HEX file created via XCP upload: $HEX_FROM_XCP" +echo " - BIN file downloaded from target via scp: $BIN_FILE" +echo " - HEX file created from BIN: $HEX_FROM_BIN ($SEGMENT_COUNT segments)" +echo " - HEX files comparison completed" +echo " - Round-trip conversion verified (BIN → HEX → BIN)" +echo " - Incomplete segment data rejection verified" +echo " - Partial HEX update tested (subset of segments)" +echo " - BIN file integrity maintained" +echo "" +echo "Files available in: $TEST_DIR/" +echo " - ${DEMO_NAME}.a2l : A2L file from target" +echo " - ${DEMO_NAME}.bin : Original BIN file from target (via scp)" +echo " - ${DEMO_NAME}_from_xcp.hex : HEX created by xcp_client --upload-bin" +echo " - ${DEMO_NAME}_from_bin.hex : HEX created by bintool" +echo " - ${DEMO_NAME}_backup.bin : Backup for comparison" +echo "" +echo "Log file: $LOGFILE" +echo "" diff --git a/test_bpf_demo_pi.sh b/test/test_bpf_demo_pi.sh similarity index 84% rename from test_bpf_demo_pi.sh rename to test/test_bpf_demo_pi.sh index 81b14bfc..4abd05c6 100755 --- a/test_bpf_demo_pi.sh +++ b/test/test_bpf_demo_pi.sh @@ -5,24 +5,24 @@ set -e -PI_HOST="rainer@192.168.0.206" +TARGET_HOST="rainer@192.168.0.206" PROJECT_DIR="~/XCPlite-RainerZ" echo "=== BPF Demo Test on Raspberry Pi ===" -echo "Target: $PI_HOST" +echo "Target: $TARGET_HOST" echo "Project: $PROJECT_DIR" echo # Function to run command on Pi run_on_pi() { echo "Running on Pi: $1" - ssh "$PI_HOST" "$1" + ssh "$TARGET_HOST" "$1" } # Function to run command on Pi with pseudo-tty (for interactive commands) run_on_pi_interactive() { echo "Running on Pi (interactive): $1" - ssh -t "$PI_HOST" "$1" + ssh -t "$TARGET_HOST" "$1" } echo "Step 1: Syncing project to Pi..." @@ -32,7 +32,7 @@ rsync -avz --delete \ --exclude="*.o" \ --exclude="*.out" \ --exclude="*.a" \ - ./ "$PI_HOST:$PROJECT_DIR/" + ./ "$TARGET_HOST:$PROJECT_DIR/" echo echo "Step 2: Configuring CMake on Pi..." @@ -54,10 +54,10 @@ echo echo "=== Build completed successfully! ===" echo echo "To run the BPF demo manually:" -echo " ssh -t $PI_HOST 'cd $PROJECT_DIR && sudo ./build/bpf_demo.out'" +echo " ssh -t $TARGET_HOST 'cd $PROJECT_DIR && sudo ./build/bpf_demo.out'" echo echo "To test process creation:" -echo " ssh $PI_HOST 'cd $PROJECT_DIR/examples/bpf_demo && ./test_processes.sh'" +echo " ssh $TARGET_HOST 'cd $PROJECT_DIR/examples/bpf_demo && ./test_processes.sh'" echo echo "Or run the automated test:" read -p "Do you want to run the BPF demo now? (y/N): " -n 1 -r diff --git a/tools/bintool/.gitignore b/tools/bintool/.gitignore new file mode 100644 index 00000000..2d94534e --- /dev/null +++ b/tools/bintool/.gitignore @@ -0,0 +1,14 @@ +# Rust build artifacts +target/ +Cargo.lock + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# OS +.DS_Store +Thumbs.db diff --git a/tools/bintool/Cargo.toml b/tools/bintool/Cargo.toml new file mode 100644 index 00000000..07f4e267 --- /dev/null +++ b/tools/bintool/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "bintool" +version = "0.2.0" +edition = "2021" +authors = ["RainerZ"] +description = "XCPlite BIN file tool - inspect, convert to Intel-Hex, and update calibration data" +license = "MIT" + +[dependencies] +clap = { version = "4.5", features = ["derive"] } +ihex = "3.0" +thiserror = "1.0" + +[[bin]] +name = "bintool" +path = "src/main.rs" diff --git a/tools/bintool/README.md b/tools/bintool/README.md new file mode 100644 index 00000000..b7e62c74 --- /dev/null +++ b/tools/bintool/README.md @@ -0,0 +1,220 @@ +# bintool - XCPlite BIN File Tool + +A command-line tool for XCPlite `.BIN` persistence files. +Persistence features in XCPlite are enabled with OPTION_CAL_PERSISTENCE. +For safety, it is essential to use the EPK version segment. This can be enabled with OPTION_CAL_SEGMENT_EPK. + +Disclaimer: This is an AI generated tool. Don't use it for production. Improper use may corrupt calibration data. + +## Overview + +This tool provides comprehensive management of XCPlite binary persistence files: +- **BIN to HEX**: Extract calibration segment data to Intel-Hex format +- **HEX to BIN**: Update calibration segment data in a BIN file from Intel-Hex files +- **Dump/Inspect**: View file structure, events, segments, and hex dumps + + +## Usage + +### Quick Start (Convenient Syntax) + +**Convert BIN to HEX** (output filename auto-derived): +```bash +bintool input.bin +# Creates: input.hex +``` + +**Inspect BIN file contents**: +```bash +bintool input.bin --dump +bintool input.bin --dump --verbose # With hex dump +``` + +**Apply HEX data back to BIN**: +```bash +bintool input.bin --apply-hex changes.hex +``` + + +### Arguments + +- `[BIN_FILE]` - Input .BIN file path (positional argument, or use `--bin`) +- `-b, --bin ` - Input .BIN file path (alternative to positional) +- `-o, --hex ` - Output .HEX file path (optional, auto-derived from input if omitted) +- `--apply-hex ` - Apply Intel-Hex file data to update the BIN file (HEX to BIN mode) +- `-d, --dump` - Dump BIN file header and segment information (does not convert) +- `-v, --verbose` - Enable verbose output (with `--dump`, shows hex data) +- `-h, --help` - Display help information +- `-V, --version` - Display version information + +**Note**: Options `--hex`, `--apply-hex`, and `--dump` are mutually exclusive. + + + +## Building + +```bash +cd tools/bintool +cargo build --release +# Optional, install to ~/.cargo/bin/bintool or use the compiled binary will be in `target/release/bintool` +cargo install --path . +``` + +### Examples + + +```bash + +bintool cpp_demo.bin + Converted 4 calibration segment(s) from 'cpp_demo.bin' + Output written to 'cpp_demo.hex' + + +bintool --apply-hex cpp_demo.hex cpp_demo.bin + Updated 4 of 4 segment(s) in 'cpp_demo.bin' + + +bintool cpp_demo.bin --dump --verbose + + +======================================== +BIN File: cpp_demo.bin +======================================== + +HEADER: + Signature: XCPLITE__BINARY + Version: 0x0204 + EPK: 21_41_01 + Event Count: 4 + CalSeg Count: 4 + +EVENTS: + +Event 0: + Name: async + ID: 0 + Index: 0 + Cycle Time: 1000000 ns + Priority: 0 + +Event 1: + Name: mainloop + ID: 1 + Index: 0 + Cycle Time: 0 ns + Priority: 0 + +Event 2: + Name: SigGen1 + ID: 2 + Index: 0 + Cycle Time: 0 ns + Priority: 0 + +Event 3: + Name: SigGen2 + ID: 3 + Index: 0 + Cycle Time: 0 ns + Priority: 0 + +CALIBRATION SEGMENTS: + +Segment 0: + Name: epk + Index: 0 + Size: 8 bytes + Address: 0x80000000 + + Data (hex dump): + 80000000: 32 31 5F 34 31 5F 30 31 |21_41_01| + +Segment 1: + Name: kParameters + Index: 1 + Size: 8 bytes + Address: 0x80010000 + + Data (hex dump): + 80010000: E8 03 00 00 E8 03 00 00 |........| + +Segment 2: + Name: SigGen1 + Index: 2 + Size: 88 bytes + Address: 0x80020000 + + Data (hex dump): + 80020000: 00 00 00 00 00 00 29 40 00 00 00 00 00 00 00 00 |......)@........| + 80020010: 00 00 00 00 00 00 00 00 9A 99 99 99 99 99 D9 3F |...............?| + 80020020: 00 00 00 00 00 00 00 3F 00 00 80 3F 00 00 00 3F |.......?...?...?| + 80020030: 00 00 00 00 00 00 00 BF 00 00 80 BF 00 00 00 BF |................| + 80020040: 00 00 00 00 00 00 00 00 00 00 00 00 E8 03 00 00 |................| + 80020050: 00 00 00 00 00 00 00 00 |........| + +Segment 3: + Name: SigGen2 + Index: 3 + Size: 88 bytes + Address: 0x80030000 + + Data (hex dump): + 80030000: 00 00 00 00 00 00 54 40 18 2D 44 54 FB 21 F9 3F |......T@.-DT.!.?| + 80030010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 40 |..............$@| + 80030020: 00 00 00 00 CD CC CC 3D 9A 99 99 3E 9A 99 19 3F |.......=...>...?| + 80030030: CD CC 4C 3F 00 00 80 3F CD CC 4C 3F 9A 99 19 3F |..L?...?..L?...?| + 80030040: 9A 99 99 3E CD CC CC 3D 00 00 00 00 E8 03 00 00 |...>...=........| + 80030050: 00 00 00 00 00 00 00 00 |........| + + +``` + + + +## Intel-Hex Output + +The tool generates Intel-Hex files with: +- Extended Linear Address records for 32-bit addressing +- Data records (32 bytes per record) +- End-of-file record + + + +## HEX to BIN Update Safety Features + +When updating a BIN file from Intel-Hex data (`--apply-hex`), the tool enforces strict validation: + +### 1. EPK Segment Protection +If the first segment is named "epk", its size and content must exactly match between BIN and HEX files. This prevents incompatible firmware updates. + +### 2. Complete Segment Coverage +HEX data must completely cover each BIN segment. Partial segment updates are rejected to prevent calibration data corruption. +- HEX segment size must be ≥ BIN segment size +- If HEX has more data, only the required bytes are written + +### 3. Atomic Updates +All validations occur **before** any file modifications: +1. **Phase 1**: Read all segment descriptors +2. **Phase 2**: Validate all segments completely +3. **Phase 3**: Only if all validations pass, write the data + +This ensures the original BIN file remains completely unchanged if any validation fails. + +## Dependencies + +- [clap](https://crates.io/crates/clap) - Command-line argument parsing +- [ihex](https://crates.io/crates/ihex) - Intel-Hex file format support +- [thiserror](https://crates.io/crates/thiserror) - Error handling + + + + + +## License + +MIT License - See LICENSE file in the project root. + +## Author + +RainerZ + diff --git a/tools/bintool/hex_diff.py b/tools/bintool/hex_diff.py new file mode 100644 index 00000000..c87cd1bd --- /dev/null +++ b/tools/bintool/hex_diff.py @@ -0,0 +1,185 @@ +#!/usr/bin/env python3 +""" +Detailed comparison of Intel HEX files - reconstructs segments and compares byte-by-byte. +""" + +import sys +from collections import defaultdict + +def parse_hex_file(filename): + """Parse Intel HEX file and return dict of address -> data""" + memory = {} + extended_addr = 0 + + with open(filename, 'r') as f: + for line_num, line in enumerate(f, 1): + line = line.strip() + if not line: + continue + + if not line.startswith(':'): + print(f"Warning: Line {line_num} doesn't start with ':'") + continue + + # Parse record + byte_count = int(line[1:3], 16) + address = int(line[3:7], 16) + record_type = int(line[7:9], 16) + + if record_type == 0x00: # Data record + full_addr = extended_addr | address + data_bytes = bytes.fromhex(line[9:9+byte_count*2]) + # Store each byte individually to handle overlapping/fragmented records + for i, byte in enumerate(data_bytes): + memory[full_addr + i] = byte + + elif record_type == 0x01: # End of file + break + + elif record_type == 0x02: # Extended Segment Address + seg = int(line[9:13], 16) + extended_addr = seg << 4 + + elif record_type == 0x04: # Extended Linear Address + ela = int(line[9:13], 16) + extended_addr = ela << 16 + + elif record_type == 0x05: # Start Linear Address + pass # Ignore + + return memory + +def reconstruct_segments(memory): + """Reconstruct contiguous segments from memory map""" + if not memory: + return [] + + segments = [] + sorted_addrs = sorted(memory.keys()) + + start_addr = sorted_addrs[0] + data = bytearray([memory[start_addr]]) + + for i in range(1, len(sorted_addrs)): + addr = sorted_addrs[i] + if addr == sorted_addrs[i-1] + 1: + # Contiguous + data.append(memory[addr]) + else: + # Gap found, save current segment and start new one + segments.append((start_addr, bytes(data))) + start_addr = addr + data = bytearray([memory[addr]]) + + # Don't forget the last segment + segments.append((start_addr, bytes(data))) + + return segments + +def compare_segments(file1, file2): + """Compare two hex files segment by segment""" + print(f"Parsing {file1}...") + memory1 = parse_hex_file(file1) + segments1 = reconstruct_segments(memory1) + + print(f"Parsing {file2}...") + memory2 = parse_hex_file(file2) + segments2 = reconstruct_segments(memory2) + + print(f"\n{'='*80}") + print(f"Segment Analysis:") + print(f"{'='*80}\n") + + print(f"File 1: {file1}") + total_bytes1 = sum(len(data) for _, data in segments1) + print(f" Segments: {len(segments1)}") + print(f" Total bytes: {total_bytes1}") + for addr, data in segments1: + print(f" 0x{addr:08X}: {len(data):4d} bytes") + + print(f"\nFile 2: {file2}") + total_bytes2 = sum(len(data) for _, data in segments2) + print(f" Segments: {len(segments2)}") + print(f" Total bytes: {total_bytes2}") + for addr, data in segments2: + print(f" 0x{addr:08X}: {len(data):4d} bytes") + + # Create maps for easier comparison + seg_map1 = {addr: data for addr, data in segments1} + seg_map2 = {addr: data for addr, data in segments2} + + all_addrs = sorted(set(seg_map1.keys()) | set(seg_map2.keys())) + + print(f"\n{'='*80}") + print(f"Detailed Comparison:") + print(f"{'='*80}\n") + + identical = True + + for addr in all_addrs: + in1 = addr in seg_map1 + in2 = addr in seg_map2 + + if in1 and in2: + data1 = seg_map1[addr] + data2 = seg_map2[addr] + + if data1 == data2: + print(f"✓ Segment at 0x{addr:08X}: IDENTICAL ({len(data1)} bytes)") + else: + print(f"✗ Segment at 0x{addr:08X}: DIFFERENT") + print(f" File1: {len(data1)} bytes") + print(f" File2: {len(data2)} bytes") + + # Show first difference + min_len = min(len(data1), len(data2)) + for i in range(min_len): + if data1[i] != data2[i]: + print(f" First difference at offset {i} (0x{addr+i:08X}):") + start = max(0, i-4) + end = min(min_len, i+12) + print(f" File1[{start}:{end}]: {data1[start:end].hex()}") + print(f" File2[{start}:{end}]: {data2[start:end].hex()}") + break + + if len(data1) != len(data2): + print(f" Length mismatch: File1={len(data1)}, File2={len(data2)}") + + identical = False + + elif in1: + print(f"✗ Segment at 0x{addr:08X}: Only in {file1} ({len(seg_map1[addr])} bytes)") + # Show content if small + if len(seg_map1[addr]) <= 32: + print(f" Data: {seg_map1[addr].hex()}") + # Try to decode as ASCII + try: + ascii_str = seg_map1[addr].decode('ascii') + if all(32 <= ord(c) < 127 or c == '\n' for c in ascii_str): + print(f" ASCII: {ascii_str}") + except: + pass + identical = False + + else: + print(f"✗ Segment at 0x{addr:08X}: Only in {file2} ({len(seg_map2[addr])} bytes)") + if len(seg_map2[addr]) <= 32: + print(f" Data: {seg_map2[addr].hex()}") + identical = False + + print(f"\n{'='*80}") + if identical: + print(f"✓✓✓ FILES ARE IDENTICAL! ✓✓✓") + else: + print(f"✗✗✗ FILES DIFFER ✗✗✗") + print(f"{'='*80}\n") + + return identical + +if __name__ == '__main__': + if len(sys.argv) != 3: + print("Usage: compare_hex_detailed.py ") + sys.exit(1) + + result = compare_segments(sys.argv[1], sys.argv[2]) + sys.exit(0 if result else 1) diff --git a/tools/bintool/src/bin_format.rs b/tools/bintool/src/bin_format.rs new file mode 100644 index 00000000..0dc186a4 --- /dev/null +++ b/tools/bintool/src/bin_format.rs @@ -0,0 +1,203 @@ +#![allow(dead_code)] + +use std::fs::File; +use std::io::Read; +use std::mem; + +use crate::Bin2HexError; + +// Compatibility with C code in persistence.h +// The BIN_VERSION check at runtime is the actual protection against format mismatches. +// If the C code changes the format, it should bump BIN_VERSION, and this tool will reject the file. +const BIN_SIGNATURE: &str = "XCPLITE__BINARY"; +const BIN_VERSION: u16 = 0x0204; + +/// BIN file header - corresponds to tHeader in C +#[repr(C, packed)] +struct BinHeaderRaw { + signature: [u8; 16], // "XCPLITE__BINARY" + version: u16, // 0x0203 + event_count: u16, // Number of event descriptors + calseg_count: u16, // Number of calibration segment descriptors + reserved: [u8; 128 - 16 - 2 - 2 - 2], // Reserved for future use + epk: [u8; 128], // EPK string, null terminated (106 bytes remaining) +} + +/// Safe wrapper for BinHeaderRaw +#[derive(Debug, Clone)] +pub struct BinHeader { + pub signature: String, + pub version: u16, + pub event_count: u16, + pub calseg_count: u16, + pub epk: String, +} + +impl BinHeader { + pub fn read_from(file: &mut File) -> Result { + // Read raw struct directly from file using unsafe + let raw: BinHeaderRaw = unsafe { + let mut raw: BinHeaderRaw = mem::zeroed(); + let raw_ptr = &mut raw as *mut BinHeaderRaw as *mut u8; + let raw_slice = std::slice::from_raw_parts_mut(raw_ptr, mem::size_of::()); + file.read_exact(raw_slice)?; + raw + }; + + // Extract and verify signature + let signature = String::from_utf8_lossy(&raw.signature) + .trim_end_matches('\0') + .to_string(); + + if signature != BIN_SIGNATURE { + return Err(Bin2HexError::InvalidFormat(format!( + "Invalid signature: expected '{}', got '{}'", + BIN_SIGNATURE, signature + ))); + } + + // Extract EPK + let epk = String::from_utf8_lossy(&raw.epk) + .trim_end_matches('\0') + .to_string(); + + // Copy values from packed struct to avoid unaligned access + let version = raw.version; + let event_count = raw.event_count; + let calseg_count = raw.calseg_count; + + // Check version - only 0x0203 is supported + if version != BIN_VERSION { + return Err(Bin2HexError::InvalidFormat(format!( + "Unsupported file version 0x{:04X}. This tool only supports version 0x{:04X}.", + version, BIN_VERSION + ))); + } + + Ok(BinHeader { + signature, + version, + event_count, + calseg_count, + epk, + }) + } +} + +/// Event descriptor - corresponds to tEventDescriptor in C +#[repr(C, packed)] +struct EventDescriptorRaw { + id: u16, // Event ID + index: u16, // Event index + cycle_time_ns: u32, // Cycle time in nanoseconds + priority: u8, // Priority (0=queued, 1=pushing, 2=realtime) + reserved: [u8; 128 - 2 - 2 - 4 - 1], // Reserved for future use + name: [u8; 128], // Event name, null terminated +} + +/// Safe wrapper for EventDescriptorRaw +#[derive(Debug, Clone)] +pub struct EventDescriptor { + pub id: u16, + pub index: u16, + pub cycle_time_ns: u32, + pub priority: u8, + pub name: String, +} + +impl EventDescriptor { + pub fn read_from(file: &mut File) -> Result { + // Read raw struct directly from file using unsafe + let raw: EventDescriptorRaw = unsafe { + let mut raw: EventDescriptorRaw = mem::zeroed(); + let raw_ptr = &mut raw as *mut EventDescriptorRaw as *mut u8; + let raw_slice = + std::slice::from_raw_parts_mut(raw_ptr, mem::size_of::()); + file.read_exact(raw_slice)?; + raw + }; + + // Extract name + let name = String::from_utf8_lossy(&raw.name) + .trim_end_matches('\0') + .to_string(); + + // Copy values from packed struct to avoid unaligned access + let id = raw.id; + let index = raw.index; + let cycle_time_ns = raw.cycle_time_ns; + let priority = raw.priority; + + Ok(EventDescriptor { + id, + index, + cycle_time_ns, + priority, + name, + }) + } +} + +/// Calibration segment descriptor - corresponds to tCalSegDescriptor in C +#[repr(C, packed)] +struct CalSegDescriptorRaw { + index: u16, // Index in calibration segment list + size: u16, // Size in bytes, multiple of 4 + addr: u32, // Address of the calibration segment + reserved: [u8; 128 - 2 - 2 - 4], // Reserved for future use + name: [u8; 128], // Calibration segment name, null terminated (120 bytes remaining) +} + +/// Safe wrapper for CalSegDescriptorRaw +#[derive(Debug, Clone)] +pub struct CalSegDescriptor { + pub index: u16, + pub size: u16, + pub addr: u32, + pub name: String, +} + +impl CalSegDescriptor { + pub fn read_from(file: &mut File) -> Result { + // Read raw struct directly from file using unsafe + let raw: CalSegDescriptorRaw = unsafe { + let mut raw: CalSegDescriptorRaw = mem::zeroed(); + let raw_ptr = &mut raw as *mut CalSegDescriptorRaw as *mut u8; + let raw_slice = + std::slice::from_raw_parts_mut(raw_ptr, mem::size_of::()); + file.read_exact(raw_slice)?; + raw + }; + + // Extract name + let name = String::from_utf8_lossy(&raw.name) + .trim_end_matches('\0') + .to_string(); + + // Copy values from packed struct to avoid unaligned access + let index = raw.index; + let size = raw.size; + let addr = raw.addr; + + Ok(CalSegDescriptor { + index, + size, + addr, + name, + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_struct_sizes() { + // Verify struct sizes match C definitions for version 0x0203 + // All structs must be exactly 256 bytes + assert_eq!(mem::size_of::(), 256); + assert_eq!(mem::size_of::(), 256); + assert_eq!(mem::size_of::(), 256); + } +} diff --git a/tools/bintool/src/main.rs b/tools/bintool/src/main.rs new file mode 100644 index 00000000..2984e707 --- /dev/null +++ b/tools/bintool/src/main.rs @@ -0,0 +1,612 @@ +// bintool - XCPlite BIN File Tool +// +// Inspect BIN file: +// bintool cpp_demo.bin --dump --verbose +// +// Convert BIN to HEX: +// bintool cpp_demo.bin +// +// Apply HEX to BIN: +// bintool cpp_demo.bin --apply-hex cpp_demo.hex + +#![allow(clippy::type_complexity)] + +use clap::Parser; +use std::fs::File; +use std::io::{self, Read}; +use std::path::PathBuf; +use thiserror::Error; + +mod bin_format; +use bin_format::{BinHeader, CalSegDescriptor, EventDescriptor}; + +#[derive(Error, Debug)] +pub enum Bin2HexError { + #[error("I/O error: {0}")] + Io(#[from] io::Error), + + #[error("Invalid file format: {0}")] + InvalidFormat(String), + + #[error("Intel-Hex write error: {0}")] + IntelHexWrite(#[from] ihex::WriterError), + + #[error("Intel-Hex read error: {0}")] + IntelHexRead(#[from] ihex::ReaderError), + + #[error("Segment mismatch: {0}")] + SegmentMismatch(String), +} + +#[derive(Parser, Debug)] +#[command(name = "bintool")] +#[command(author = "RainerZ")] +#[command(version)] // Automatically uses version from Cargo.toml +#[command(about = "XCPlite BIN file tool - inspect, convert, and update calibration data", long_about = None)] +struct Args { + /// Input .BIN file path (can be specified as positional argument or with --bin) + #[arg(value_name = "BIN_FILE")] + bin_file: Option, + + /// Input .BIN file path (alternative to positional argument) + #[arg(short, long, value_name = "FILE")] + bin: Option, + + /// Output .HEX file path (optional, defaults to input with .hex extension) + #[arg(short = 'o', long, value_name = "FILE", conflicts_with = "apply_hex")] + hex: Option, + + /// Apply Intel-Hex file data to update the BIN file (HEX to BIN mode) + /// Can be specified as just the HEX filename - BIN file will be derived from it + #[arg(long, value_name = "FILE", conflicts_with = "hex")] + apply_hex: Option, + + /// Dump BIN file header and segment information (does not convert) + /// With --verbose, also shows hex dump of calibration data + #[arg(short, long, conflicts_with_all = ["hex", "apply_hex"])] + dump: bool, + + /// Verbose output + #[arg(short, long)] + verbose: bool, +} + +fn read_bin_file( + path: &PathBuf, + verbose: bool, +) -> Result< + ( + BinHeader, + Vec, + Vec<(CalSegDescriptor, Vec)>, + ), + Bin2HexError, +> { + let mut file = File::open(path)?; + + // Read header + let header = BinHeader::read_from(&mut file)?; + + if verbose { + println!("BIN File Header:"); + println!(" Signature: {}", header.signature); + println!(" Version: 0x{:04X}", header.version); + println!(" EPK: {}", header.epk); + println!(" Event Count: {}", header.event_count); + println!(" CalSeg Count: {}", header.calseg_count); + println!(); + } + + // Read events + let mut events = Vec::new(); + for i in 0..header.event_count { + let event = EventDescriptor::read_from(&mut file)?; + if verbose { + println!("Read Event {}: {}", i, event.name); + } + events.push(event); + } + + if verbose { + println!(); + } + + // Read calibration segments + let mut calseg_data = Vec::new(); + + for i in 0..header.calseg_count { + let calseg_desc = CalSegDescriptor::read_from(&mut file)?; + + if verbose { + println!("Calibration Segment {}:", i); + println!(" Name: {}", calseg_desc.name); + println!(" Size: {} bytes", calseg_desc.size); + println!(" Index: {}", calseg_desc.index); + } + + // Read calibration segment data + let mut data = vec![0u8; calseg_desc.size as usize]; + file.read_exact(&mut data)?; + + if verbose { + println!(" Data: {} bytes read", data.len()); + // Print first few bytes + if !data.is_empty() { + print!(" First bytes: "); + for (idx, byte) in data.iter().take(16).enumerate() { + print!("{:02X} ", byte); + if (idx + 1) % 16 == 0 { + println!(); + } + } + if data.len() < 16 { + println!(); + } + } + println!(); + } + + calseg_data.push((calseg_desc, data)); + } + + Ok((header, events, calseg_data)) +} + +fn dump_bin_file(path: &PathBuf, verbose: bool) -> Result<(), Bin2HexError> { + let (header, events, calseg_data) = read_bin_file(path, false)?; + + // Print header information + println!("========================================"); + println!("BIN File: {}", path.display()); + println!("========================================"); + println!(); + println!("HEADER:"); + println!(" Signature: {}", header.signature); + println!(" Version: 0x{:04X}", header.version); + println!(" EPK: {}", header.epk); + println!(" Event Count: {}", header.event_count); + println!(" CalSeg Count: {}", header.calseg_count); + println!(); + + // Print event information + if !events.is_empty() { + println!("EVENTS:"); + println!(); + + for (idx, event) in events.iter().enumerate() { + println!("Event {}:", idx); + println!(" Name: {}", event.name); + println!(" ID: {}", event.id); + println!(" Index: {}", event.index); + println!(" Cycle Time: {} ns", event.cycle_time_ns); + println!(" Priority: {}", event.priority); + println!(); + } + } + + // Print calibration segment information + println!("CALIBRATION SEGMENTS:"); + println!(); + + for (idx, (desc, data)) in calseg_data.iter().enumerate() { + println!("Segment {}:", idx); + println!(" Name: {}", desc.name); + println!(" Index: {}", desc.index); + println!(" Size: {} bytes", desc.size); + println!(" Address: 0x{:08X}", desc.addr); + + if verbose { + println!(); + println!(" Data (hex dump):"); + dump_hex_data(data, desc.addr); + } + + println!(); + } + + if !verbose { + println!("(Use --verbose to see hex dump of calibration data)"); + } + + Ok(()) +} + +fn dump_hex_data(data: &[u8], base_address: u32) { + const BYTES_PER_LINE: usize = 16; + + for (line_idx, chunk) in data.chunks(BYTES_PER_LINE).enumerate() { + let address = base_address + (line_idx * BYTES_PER_LINE) as u32; + + // Print full 32-bit address + print!(" {:08X}: ", address); + + // Print hex bytes + for (byte_idx, byte) in chunk.iter().enumerate() { + print!("{:02X} ", byte); + + // Add extra space in the middle for readability + if byte_idx == 7 { + print!(" "); + } + } + + // Pad if this is the last line and it's not complete + if chunk.len() < BYTES_PER_LINE { + for i in chunk.len()..BYTES_PER_LINE { + print!(" "); + if i == 7 { + print!(" "); + } + } + } + + // Print ASCII representation + print!(" |"); + for byte in chunk.iter() { + if *byte >= 0x20 && *byte <= 0x7E { + print!("{}", *byte as char); + } else { + print!("."); + } + } + print!("|"); + + println!(); + } +} + +fn write_hex_file( + path: &PathBuf, + calseg_data: &[(CalSegDescriptor, Vec)], + verbose: bool, +) -> Result<(), Bin2HexError> { + let mut records = Vec::new(); + + for (desc, data) in calseg_data { + // Use the address from the descriptor + let segment_address = desc.addr; + + if verbose { + println!( + "Writing segment '{}' (index {}) at address 0x{:08X}", + desc.name, desc.index, segment_address + ); + } + + // Create data records for this segment + // Split into chunks (typically 16 or 32 bytes per record) + const CHUNK_SIZE: usize = 32; + + for (chunk_idx, chunk) in data.chunks(CHUNK_SIZE).enumerate() { + let chunk_address = segment_address + (chunk_idx * CHUNK_SIZE) as u32; + + // Handle extended linear address (32-bit addressing) + let extended_addr = (chunk_address >> 16) as u16; + if chunk_idx == 0 || (chunk_address & 0xFFFF) < CHUNK_SIZE as u32 { + // Add Extended Linear Address record when upper 16 bits change + records.push(ihex::Record::ExtendedLinearAddress(extended_addr)); + } + + // Add data record + let lower_addr = (chunk_address & 0xFFFF) as u16; + records.push(ihex::Record::Data { + offset: lower_addr, + value: chunk.to_vec(), + }); + } + } + + // Add end-of-file record + records.push(ihex::Record::EndOfFile); + + // Write to file + let hex_content = ihex::create_object_file_representation(&records)?; + std::fs::write(path, hex_content)?; + + if verbose { + println!( + "\nIntel-Hex file written successfully to: {}", + path.display() + ); + println!("Total records: {}", records.len()); + } + + Ok(()) +} + +fn read_hex_file( + path: &PathBuf, + verbose: bool, +) -> Result>, Bin2HexError> { + use std::collections::HashMap; + + let hex_string = std::fs::read_to_string(path)?; + let records = ihex::Reader::new(&hex_string).collect::, _>>()?; + + if verbose { + println!("Reading Intel-Hex file: {}", path.display()); + println!(" Total records: {}", records.len()); + } + + let mut segments: HashMap> = HashMap::new(); + let mut current_extended_addr: u32 = 0; + + for record in records { + match record { + ihex::Record::Data { offset, value } => { + let full_address = current_extended_addr | (offset as u32); + + // Find which segment this address belongs to by checking if it falls + // within any existing segment's range + let mut found_segment = None; + for (&segment_base, segment_data) in segments.iter() { + let segment_end = segment_base + segment_data.len() as u32; + if full_address >= segment_base && full_address < segment_end + 0x100 { + // Allow small gap (256 bytes) for continuation + found_segment = Some(segment_base); + break; + } + } + + let segment_base = if let Some(base) = found_segment { + base + } else { + // New segment starts at this address + if verbose { + println!(" Found segment at 0x{:08X}", full_address); + } + full_address + }; + + let segment_data = segments.entry(segment_base).or_default(); + + // Calculate offset within segment (relative to segment base) + let offset_in_segment = (full_address - segment_base) as usize; + + // Extend vector if needed + if segment_data.len() < offset_in_segment + value.len() { + segment_data.resize(offset_in_segment + value.len(), 0); + } + + // Copy data + segment_data[offset_in_segment..offset_in_segment + value.len()] + .copy_from_slice(&value); + } + ihex::Record::ExtendedLinearAddress(addr) => { + current_extended_addr = (addr as u32) << 16; + if verbose { + println!(" Extended address: 0x{:08X}", current_extended_addr); + } + } + ihex::Record::EndOfFile => { + if verbose { + println!(" End of file"); + } + } + _ => { + // Ignore other record types + } + } + } + + if verbose { + println!(" Found {} segment(s)", segments.len()); + } + + Ok(segments) +} + +fn apply_hex_to_bin( + bin_path: &PathBuf, + hex_path: &PathBuf, + verbose: bool, +) -> Result<(), Bin2HexError> { + use std::io::{Seek, SeekFrom, Write}; + + if verbose { + println!("Applying Intel-Hex data to BIN file"); + println!(" BIN file: {}", bin_path.display()); + println!(" HEX file: {}", hex_path.display()); + println!(); + } + + // Read the hex file + let hex_segments = read_hex_file(hex_path, verbose)?; + + if hex_segments.is_empty() { + println!("Warning: No data found in HEX file"); + return Ok(()); + } + + // Open BIN file for reading and writing + let mut file = std::fs::OpenOptions::new() + .read(true) + .write(true) + .open(bin_path)?; + + // Read BIN header to get segment information + let header = BinHeader::read_from(&mut file)?; + + if verbose { + println!("BIN File Info:"); + println!(" EPK: {}", header.epk); + println!(" Segments: {}", header.calseg_count); + println!(); + } + + // Skip events + for _ in 0..header.event_count { + EventDescriptor::read_from(&mut file)?; + } + + // PHASE 1: Read all segment descriptors and validate completeness BEFORE any writes + let mut segment_info = Vec::new(); + for i in 0..header.calseg_count { + let calseg_desc = CalSegDescriptor::read_from(&mut file)?; + let data_position = file.stream_position()?; + + // Use the address from the descriptor + let segment_addr = calseg_desc.addr; + + // Skip the data for now - we'll come back to write it + file.seek(SeekFrom::Current(calseg_desc.size as i64))?; + + segment_info.push((i, calseg_desc, data_position, segment_addr)); + } + + // PHASE 2: Validate all segments that will be updated + for (i, calseg_desc, data_position, segment_addr) in &segment_info { + if let Some(hex_data) = hex_segments.get(segment_addr) { + if verbose { + println!( + "Validating segment {} '{}' at file offset 0x{:X}", + i, calseg_desc.name, data_position + ); + println!( + " Segment address: 0x{:08X}, size: {} bytes", + segment_addr, calseg_desc.size + ); + println!(" HEX data size: {} bytes", hex_data.len()); + } + + // Special check for EPK segment (first segment, name == "epk") + if *i == 0 && calseg_desc.name.trim() == "epk" { + // Read current BIN EPK data + let mut bin_epk_data = vec![0u8; calseg_desc.size as usize]; + file.seek(SeekFrom::Start(*data_position))?; + file.read_exact(&mut bin_epk_data)?; + + // Check size + if hex_data.len() != calseg_desc.size as usize { + return Err(Bin2HexError::SegmentMismatch(format!( + "EPK segment size mismatch: BIN={} HEX={}", + calseg_desc.size, + hex_data.len() + ))); + } + // Check content + if bin_epk_data != *hex_data { + return Err(Bin2HexError::SegmentMismatch( + "EPK segment content mismatch between BIN and HEX. Refusing to patch." + .to_string(), + )); + } + } + + // Validate size - HEX data must exactly match or exceed BIN segment size + if hex_data.len() < calseg_desc.size as usize { + return Err(Bin2HexError::SegmentMismatch(format!( + "HEX data for segment '{}' ({} bytes) does not completely cover BIN segment ({} bytes). Refusing to patch.", + calseg_desc.name, + hex_data.len(), + calseg_desc.size + ))); + } + + if verbose { + println!(" ✓ Validation passed"); + println!(); + } + } + } + + // PHASE 3: All validations passed, now write the data + let mut updated_count = 0; + for (i, calseg_desc, data_position, segment_addr) in &segment_info { + if let Some(hex_data) = hex_segments.get(segment_addr) { + // Seek to data position and write + file.seek(SeekFrom::Start(*data_position))?; + file.write_all(&hex_data[0..calseg_desc.size as usize])?; + + updated_count += 1; + + if verbose { + println!( + "Updated segment {} '{}' at file offset 0x{:X}", + i, calseg_desc.name, data_position + ); + } + } else if verbose { + println!( + "Skipped segment {} '{}' (not in HEX file)", + i, calseg_desc.name + ); + } + } + + if verbose { + println!(); + } + + if verbose { + println!("Update complete!"); + println!(" Updated {} segment(s)", updated_count); + } else { + println!( + "Updated {} of {} segment(s) in '{}'", + updated_count, + header.calseg_count, + bin_path.display() + ); + } + + Ok(()) +} + +fn main() -> Result<(), Bin2HexError> { + let args = Args::parse(); + + // Determine the BIN file path from positional arg or --bin flag + let bin_path = args.bin_file.or(args.bin).ok_or_else(|| { + Bin2HexError::InvalidFormat( + "BIN file must be specified (either as argument or with --bin)".to_string(), + ) + })?; + + // Helper function to derive HEX filename from BIN filename + let derive_hex_path = |bin_path: &PathBuf| -> PathBuf { + let mut hex_path = bin_path.clone(); + hex_path.set_extension("hex"); + hex_path + }; + + // Determine mode based on arguments + if args.dump { + // Dump mode: Show BIN file contents + dump_bin_file(&bin_path, args.verbose)?; + } else if let Some(hex_path) = args.apply_hex { + // HEX to BIN mode: Apply hex data to update BIN file + apply_hex_to_bin(&bin_path, &hex_path, args.verbose)?; + } else { + // BIN to HEX mode: Convert BIN to HEX + let hex_path = args.hex.unwrap_or_else(|| derive_hex_path(&bin_path)); + + if args.verbose { + println!("bintool - XCPlite BIN File Tool"); + println!("Input file: {}", bin_path.display()); + println!("Output file: {}", hex_path.display()); + println!(); + } + + // Read BIN file + let (_header, _events, calseg_data) = read_bin_file(&bin_path, args.verbose)?; + + if calseg_data.is_empty() { + println!("Warning: No calibration segments found in BIN file"); + return Ok(()); + } + + // Write Intel-Hex file + write_hex_file(&hex_path, &calseg_data, args.verbose)?; + + println!("Conversion complete!"); + println!( + " Converted {} calibration segment(s) from '{}'", + calseg_data.len(), + bin_path.display() + ); + println!(" Output written to '{}'", hex_path.display()); + } + + Ok(()) +} diff --git a/tools/cfa_lookup.sh b/tools/cfa_lookup.sh new file mode 100644 index 00000000..eb43f57b --- /dev/null +++ b/tools/cfa_lookup.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +# Simple CFA lookup script using objdump and nm +# Usage: ./cfa_lookup.sh + +if [ $# -lt 2 ]; then + echo "Usage: $0 " + echo " $0 --list-functions" + exit 1 +fi + +EXECUTABLE="$1" +FUNCTION="$2" + +if [ "$FUNCTION" = "--list-functions" ]; then + echo "Available functions:" + nm -n "$EXECUTABLE" | grep ' T ' | awk '{print $3 " (0x" $1 ")"}' + exit 0 +fi + +# Get function address from symbol table +FUNC_ADDR=$(nm "$EXECUTABLE" | grep " T $FUNCTION$" | awk '{print $1}') + +if [ -z "$FUNC_ADDR" ]; then + echo "Function '$FUNCTION' not found" + echo "Available functions:" + nm -n "$EXECUTABLE" | grep ' T ' | head -10 | awk '{print " " $3}' + exit 1 +fi + +echo "Function: $FUNCTION" +echo "Address: 0x$FUNC_ADDR" + +# Note: For actual CFA offset, we would need to parse .eh_frame section +# This requires more sophisticated tooling (like gimli in Rust) +echo "CFA Offset: [Requires .eh_frame parsing - use SSH to Pi with readelf for now]" +echo "" +echo "For manual lookup on Pi:" +echo " ssh rainer@192.168.0.206 \"cd ~/XCPlite-RainerZ && readelf -wF ./build/no_a2l_demo.out | grep -A3 -B3 '$FUNC_ADDR'\"" \ No newline at end of file