Measurement from the running firmware
The device samples values in its own cycle with 1 µs timestamps. QInsight displays, logs and replays them — no debug probe, no halting the CPU.
QFW SDK
A library that adds the XCP protocol to your device firmware. QInsight then measures timestamped values from the running firmware, calibrates parameters, and stimulates signals — over Ethernet or CAN, without a communication protocol of your own.

Functions
The device samples values in its own cycle with 1 µs timestamps. QInsight displays, logs and replays them — no debug probe, no halting the CPU.
Change parameters from QInsight directly in the unit's memory. Stream signals from the PC into the firmware (STIM) in sync with your application cycle.
The engine implements ASAM MCD-1 XCP 1.4. You write neither a protocol nor a parser; you link the library and connect it to the transport.
SDK structure
A binary engine, a source glue layer, and a complete example project.
A static library with a single public header. No threads, sockets, heap or blocking calls: it receives transport data, returns data to transmit, and gets time, locking and logging through callbacks. That is why it runs bare-metal and on any RTOS.
A reference binding of the engine to a concrete environment, shipped as source: FreeRTOS + lwIP for Ethernet, a superloop for CAN (STM32H7 FDCAN). Adapt it to your project.
A complete NUCLEO-H723ZG project (CubeMX/CMake) that builds out of the box: from initialization to live measurement in QInsight.
Transports
The package contains the engine in two variants; an image links exactly one of them. Only the receive entry differs.
| XCP on TCP (Ethernet) | XCP on CAN | |
|---|---|---|
| When | devices with Ethernet, high data volumes | devices on a CAN bus, PC with a PEAK CAN adapter |
| Frames | up to 1024 B per DAQ packet | classic CAN, 8-byte frames (CAN FD planned) |
| Glue | FreeRTOS + lwIP, TCP server task | bare-metal superloop, STM32H7 FDCAN |
| Library | libqfw_xcp_eth.a | libqfw_xcp_can.a |
Integration
Initialization with callbacks, event creation, and its trigger in your task cycle. Variable addresses are taken from the map or ELF file; no A2L is needed.
qfw_xcp_config_t cfg = QFW_XCP_CONFIG_DEFAULT;
cfg.project_name = "MyEcu";
cfg.epk = "V1.0.0";
cfg.transmit = my_transmit; // TCP stream or CAN frame
cfg.get_clock = my_clock_us; // monotonic time in us
cfg.crit_enter = my_lock;
cfg.crit_leave = my_unlock;
cfg.queue_mem = queue_memory; // static memory, no allocations
cfg.queue_mem_size = sizeof(queue_memory);
qfw_xcp_init(&cfg);
uint16_t ev10ms = qfw_xcp_create_event("task10ms", 10000);
// in the 10 ms task / timer:
qfw_xcp_trigger_event(ev10ms); // samples DAQ lists, applies STIMCompatibility and requirements
Evaluation and licensing
The package without an activation key runs with full functionality; the engine stops 30 minutes after device start (until reboot). QInsight gets a clear message, not silence.
The QFW SDK has no separate price. A Commercial QInsight license comes with an activation key that removes the time limit; the library is then built for your company.
You may ship the library only as part of the firmware of your own product. Details in the QENEX Software License Agreement.
The QFW SDK package (evaluation and licensed build) is available after signing in at account.qenex.net — just like the QInsight installer and your license.
Further protocols
The same model — binary engine, source glue layer, example project — is ready for further protocols QInsight communicates with.