Release v1.0 — the C99 reference implementation of the IFP/2 protocol, plus the firmware implementation pack for the two Generation-2 reference boards (R1 and R2).
Two packages make up this release: the transport-neutral IFP/2 core SDK (verified on a host compiler) and the Fabric 2.0 firmware pack that ports it to the R1/R2 boards and maps IFP/2 services onto the Quectel and SIMCom modems. Both are reference implementations, distributed under the IMPSPRGM licence.
The SDK core is built and tested on a host compiler with the strictest flags. These are the real results of this release:
$ cc -std=c99 -Wall -Wextra -Werror -O2 -Iinclude src/*.c tests/test_main.c -o ifp2_tests
(clean — no warnings, no errors)
$ make test
IFP/2 SDK tests: PASS
$ python3 tools/verify_vectors.py
01_hello OK 02_heartbeat OK 03_socket_connect OK 04_binary_event OK
90_bad_header_crc OK 91_bad_payload_crc OK (6/6 vectors, incl. 2 negative-CRC)
$ ./ifp2_minimal
49 50 20 14 ... → MAGIC 0x4950 "IP", VERSION 0x20, HEADER_LEN 20 (spec-correct)
The firmware pack (R1/R2 board ports and modem providers) is a reference skeleton for on-target bring-up; its Generation-2 hardware qualification (72 h traffic, 1 000 resets, USB throughput, power budget) is a bench milestone in progress, not claimed as complete.
See also the frozen IFP/2 Specification v1.0 (PDF) and the Fabric 2.0 architecture.
A deterministic, dependency-free core. It performs no malloc() — every buffer is caller-owned or statically bounded — so it drops into a bare-metal loop, a cooperative scheduler or an RTOS task unchanged.
ifp2_frame.* — raw frame encode/decode, CRC16/CRC32, UART COBS envelope.ifp2_tlv.* — allocation-free TLV writer and iterator.ifp2_services.h — normative field IDs and transport bits.ifp2_registry.* — provider-side service registry.ifp2_state.* — protocol/recovery state skeleton.make # builds ifp2_tests + ifp2_minimal make test # -> IFP/2 SDK tests: PASS # or with CMake: cmake -S . -B build cmake --build build ctest --test-dir build --output-on-failure
For embedded integration, copy include/ifp2 and src into the firmware project and implement the platform hooks (platform_now_ms, platform_uart_send, platform_peer_reset, journal/power) separately. No vendor SDK header ever reaches the application layer — that is the core contract.
The layer above the SDK: it splits the node into a deterministic MCU side (control, measurement, safety, IFP/2 core, transaction journal) and a provider side (the modem, exposing only capabilities its firmware actually implements). It deliberately does not invent pin numbers or vendor SDK calls — those are bound to the exact board revision and vendor documentation.
| Reference | Control path | Providers included |
|---|---|---|
| R1 · STM32U575 + Quectel EC200U | UART control · optional qualified USB bulk | EC200U AT provider · QuecOpen provider skeleton |
| R2 · Renesas RA6M5 + SIMCom SIM7672 | SCI/UART control · optional qualified USB bulk | SIM7672 AT provider · Embedded-AT provider skeleton |
A service exists only when the selected modem firmware actually implements it. Nothing is inferred from a model name.
| IFP/2 service | EC200U baseline | SIM7672 baseline | Rule |
|---|---|---|---|
| SYSTEM · HEALTH | local provider | local provider | required |
| NETWORK · SOCKET | AT or QuecOpen | AT or Embedded AT | required |
| MQTT · HTTP · SMS · STORAGE | documented API / socket app | documented API / socket app | capability-gated |
| GNSS · BLUETOOTH | only supported variant | only supported variant | never infer |
| COMPUTE · FOTA | project-defined job | project-defined job | provider-specific |
Bring-up is staged from board control to full qualification:
M0 Board control (power, reset, boot, console) M4 Transactions (journal + query semantics) M1 AT-only connectivity (NETWORK + SOCKET) M5 Provider extension (QuecOpen / Embedded AT) M2 IFP/2 control plane (frame/TLV/session) M6 Bulk transport (USB qualification) M3 Recovery (reset injection, resync, degraded) M7 Qualification (72 h, 1000 resets, power/mem)
0x49 0x50 directly, not as a little-endian integer).IMPSPRGM™ is proprietary technology of LLC IMPSPRGM (Tashkent, Uzbekistan), distributed under a written Licence Agreement on a per-unit basis. The IFP/2 protocol, the reference SDK and the firmware pack remain the property of LLC IMPSPRGM; redistribution and derivative works require prior written consent. Commercial inquiries: impsprgm@umail.uz · International PCT application PCT/UZ2022/050001.