Inspiration
What it does
How we built it
Challenges we ran into
Accomplishments that we're proud of
What we learned
What's next for QNX VitalPulse RT — Deterministic ICU & Infusion Microkernel
Inspiration
In an Intensive Care Unit (ICU), a patient's bedside hemodynamic monitor and closed-loop infusion pumps (titrating life-sustaining vasopressors like Norepinephrine, sedatives like Propofol, and Insulin) cannot tolerate operating-system scheduling jitter.
On general-purpose monolithic operating systems (such as standard Linux with Completely Fair Scheduler), when an edge AI model spikes CPU utilization or a hospital network flood triggers interrupt storms, priority inversion and unbounded thread contention can delay closed-loop drug titration by 13+ milliseconds (13,151 µs)—violating IEC 62304 Class C (< 250 µs) deterministic safety thresholds and risking dangerous blood-pressure overshoot or delayed arrhythmia alarms.
We built QNX VitalPulse RT to demonstrate why QNX Neutrino RTOS (SDP 8.0) is the gold standard for life-critical medical robotics and bedside patient care—and to make QNX 8.0 medical systems architecture accessible to every embedded developer through an interactive 5-Step QNX SDP 8.0 Medical RTOS Codelab.
What It Does
QNX VitalPulse RT is a hybrid QNX SDP 8.0 Native C Target Microkernel Suite (qnx-target/) + Host Safety Analyzer & Interactive Codelab Workbench (src/):
- POSIX Resource Manager (
/dev/medical/vitalpulse,vitalpulse_resmgr.c):- Registers a native QNX 8.0 device namespace using
dispatch_create_channel(),resmgr_attach(), andiofunc_attr_init(). - Processes deterministic
read()vitals frames anddevctl()(DCMD_VITALPULSE_SET_INFUSION,DCMD_VITALPULSE_EMERGENCY_STOP,DCMD_VITALPULSE_GET_TELEMETRY) over synchronousMsgSend()/MsgReceive()/MsgReply()IPC.
- Registers a native QNX 8.0 device namespace using
- Automatic Priority Inheritance (
MsgSendBoost Priority 10 -> Priority 63):- When the Priority-63 ECG/Arterial Crisis Detector sends a synchronous pulse or
DCMD_VITALPULSE_EMERGENCY_STOPto the resource manager while a Priority-10 background logger holds the channel, the QNX 8.0 microkernel automatically boosts the server thread to Priority 63 (SCHED_FIFO) in < 1.8 µs, eliminating priority inversion.
- When the Priority-63 ECG/Arterial Crisis Detector sends a synchronous pulse or
- QNX Adaptive Partitioning Scheduler (
APS,vitalpulse_ham_guardian.c):- Configures four deterministic CPU partitions via
SchedCtl(SCHED_APS_CREATE_PARTITION, ...):CriticalCare_APS(45% guaranteed CPU budget, hard real-time)WaveformDSP_APS(25% CPU budget)EdgeAICopilot_APS(15% CPU budget, capped during CPU spikes)SystemNet_APS(15% CPU budget, isolates network interrupt storms)
- Configures four deterministic CPU partitions via
- QNX High-Availability Manager (
HAM) Self-Healing Guardian (vitalpulse_ham_guardian.c):- Subscribes to
CONDDEATHviaham_connect(),ham_attach(),ham_condition(), andham_action_restart(). - If a fault crashes the user-space telemetry driver, QNX HAM restarts and rebinds
/dev/medical/vitalpulsein < 400 µs (380 µs) without rebooting the microkernel or interrupting bedside infusion.
- Subscribes to
- Compiled C Benchmark Binary (
vitalpulse_icu_benchmark.c):- Executes 500 closed-loop ICU drug-titration iterations under 8-thread CPU + L2 cache-thrash contention.
- Achieves 36.50 µs Worst-Case Execution Time (WCET) on QNX 8.0 vs. 13,151.58 µs under unpartitioned OS contention (360.3x determinism improvement, 0 missed deadlines).
- IEC 62304 Class C AI Safety Auditor & Interactive 5-Step QNX 8.0 Codelab:
- Audits live RTOS trace telemetry against IEC 62304 Class C and ISO 14971 medical safety standards.
- Guides developers step-by-step through IPC headers, POSIX resource managers, Adaptive Partitioning, HAM self-healing, and
mkifsAArch64 boot image construction (vitalpulse_qnx800_aarch64le.build) with an interactive certification quiz.
How We Built It
- QNX SDP 8.0 Target C Suite (
qnx-target/): Written in strict C11 with dual-target conditional compilation (#ifdef __QNXNTO__) so it cross-compiles cleanly withqcc -Vgcc_ntoaarch64lefor QNX SDP 8.0 AArch64 targets (Raspberry Pi 4 / QEMU ARM64) and compiles natively on macOS/Linux host toolchains (make test) for automated CI verification and live workbench benchmarking. - QNX 8.0 System Image Buildfile (
qnx-target/qnx-build/vitalpulse_qnx800_aarch64le.build): Configuresprocnto-smp-instr,slogger2,pipe,devc-pty,ham,vitalpulse_resmgr, andvitalpulse_ham_guardianinto a bootable QNX IFS image. - Host Safety Workbench & 5-Step Codelab (
src/): Built with Next.js 14, TypeScript, Tailwind CSS, HTML5 60 FPS Canvas ICU waveform rendering (ECG Lead II, SpO2 Photoplethysmography, Invasive Arterial Line, and Closed-Loop Infusion), and Vitest unit tests.
Challenges We Ran Into
- Modeling Priority Inheritance & Zero-Budget Borrowing Accurately: Ensuring that when
EdgeAICopilot_APSattempts to consume 95% CPU during a hypotension + VTach crisis,CriticalCare_APSdeterministically preempts at Priority 63 and completes infusion shutoff within the 250 µs IEC 62304 Class C window. - Dual-Target QNX 8.0 + Host Compilation: Designing
vitalpulse_resmgr.candvitalpulse_ham_guardian.cso developers with a QNX SDP 8.0 license can build a bootable ARM64 IFS image viamkifs, while evaluators on macOS/Linux can also compile and executevitalpulse_icu_benchmarkwith a singlemake testcommand.
Accomplishments That We're Proud Of
- 360.3x Worst-Case Latency Improvement: Demonstrated 36.50 µs WCET (0 missed deadlines) vs. 13,151.58 µs under unpartitioned OS contention.
- Complete QNX-Specific Stack: Integrated POSIX Resource Manager (
/dev/medical/vitalpulse), synchronousMsgSend/MsgReceive/MsgReplyIPC with Priority Inheritance, Adaptive Partitioning (APS), High-Availability Manager (HAM), andmkifs.buildimage specification. - Interactive 5-Step QNX 8.0 Medical RTOS Codelab: Built a complete hands-on tutorial directly inside the workbench so students and embedded engineers can learn QNX 8.0 medical device architecture interactively.
What We Learned
Building QNX VitalPulse RT reinforced how QNX Neutrino 8.0's microkernel architecture—where every driver, file system, and protocol stack runs in isolated user-space memory connected via priority-inherited message passing—fundamentally transforms medical device safety compared to monolithic kernels.
What's Next for QNX VitalPulse RT
- Deploying the AArch64 IFS image onto physical Raspberry Pi 4 bedside hardware connected to hardware syringe-pump stepper controllers over QNX SPI/CAN resource managers.
- Expanding the QNX 8.0 Medical Codelab with QNX Momentics System Profiler (
tracelogger).kevkernel trace visualization.
Built With
- c
- embedded-systems
- medical-devices
- nextjs
- posix
- qnx
- react
- rtos
- tailwindcss
- typescript