<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Achievements on Systems &amp; Embedded Software Engineer</title><link>https://elvirh.com/en/projects/achievements/</link><description>Recent content in Achievements on Systems &amp; Embedded Software Engineer</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Thu, 12 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://elvirh.com/en/projects/achievements/index.xml" rel="self" type="application/rss+xml"/><item><title>IT Messe Wien — System Analysis Challenge (triscon)</title><link>https://elvirh.com/en/projects/achievements/it-messe-wien/</link><pubDate>Thu, 12 Feb 2026 00:00:00 +0000</pubDate><guid>https://elvirh.com/en/projects/achievements/it-messe-wien/</guid><description>&lt;div class="result-box"&gt;
 &lt;h2 id="-result"&gt;🏆 Result&lt;a class="anchor" href="#-result"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Reached maximum score in a browser-based challenge at IT Messe Wien&lt;/li&gt;
&lt;li&gt;Won: Nintendo Switch&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;section class="container-section section-accent"&gt;
&lt;h2 id="-what-made-this-interesting"&gt;🧠 What Made This Interesting&lt;a class="anchor" href="#-what-made-this-interesting"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The challenge imposed no restrictions on how the score could be achieved.&lt;/p&gt;
&lt;p&gt;Instead of optimizing gameplay, I treated it as a systems problem:&lt;/p&gt;
&lt;div class="question-list"&gt;
 &lt;p class="question"&gt;Where is validation actually enforced?&lt;/p&gt;
 &lt;p class="question"&gt;What does the backend really trust?&lt;/p&gt;
 &lt;p class="question"&gt;How does score flow through the system?&lt;/p&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;section class="container-section section-accent"&gt;
&lt;h2 id="-overview"&gt;📖 Overview&lt;a class="anchor" href="#-overview"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I analyzed the client-server interaction with a focus on trust boundaries and score flow rather than UI behavior. That turned a simple browser game into a systems analysis exercise.&lt;/p&gt;</description></item><item><title>USB-C PD Debugging &amp; Firmware Recovery</title><link>https://elvirh.com/en/projects/achievements/usb-c-repair/</link><pubDate>Tue, 10 Feb 2026 00:00:00 +0000</pubDate><guid>https://elvirh.com/en/projects/achievements/usb-c-repair/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;a class="anchor" href="#overview"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Laptop was stuck at 5 V over USB-C with no proper PD contract negotiation, making the system appear dead.&lt;/p&gt;
&lt;p&gt;Even after replacing a visibly damaged power-path component, behavior stayed unchanged, which indicated a deeper control-layer fault.&lt;/p&gt;
&lt;h2 id="technical-highlights"&gt;Technical Highlights&lt;a class="anchor" href="#technical-highlights"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Diagnosed NX20P5090 failure in the USB-C power path&lt;/li&gt;
&lt;li&gt;Measured CC and VBUS behavior during PD negotiation&lt;/li&gt;
&lt;li&gt;Verified behavior after TPS65988 replacement&lt;/li&gt;
&lt;li&gt;Identified external SPI configuration dependency&lt;/li&gt;
&lt;li&gt;Regenerated and reflashed TPS65988 configuration&lt;/li&gt;
&lt;li&gt;Restored full USB-C PD negotiation&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="key-lessons"&gt;Key Lessons&lt;a class="anchor" href="#key-lessons"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Hardware repair now includes firmware and configuration state&lt;/li&gt;
&lt;li&gt;A valid power rail set does not guarantee functional system behavior&lt;/li&gt;
&lt;li&gt;Controller configuration memory can be as critical as controller silicon&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="technologies"&gt;Technologies&lt;a class="anchor" href="#technologies"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;USB-C Power Delivery&lt;/li&gt;
&lt;li&gt;NX20P5090&lt;/li&gt;
&lt;li&gt;TPS65988&lt;/li&gt;
&lt;li&gt;Oscilloscope-based signal validation&lt;/li&gt;
&lt;li&gt;SPI flash reprogramming&lt;/li&gt;
&lt;li&gt;TI configuration tooling&lt;/li&gt;
&lt;/ul&gt;
&lt;details &gt;&lt;summary&gt;Flowchart&lt;/summary&gt;&lt;div class="markdown-inner"&gt;

&lt;div class="mermaid-block" data-mermaid-block id="mermaid-0a2dc6199f4db88c7acb843294786eec-0"&gt;
 &lt;div class="mermaid-source" hidden&gt;flowchart TD
 A[Laptop stuck at 5V over USB-C] --&amp;gt; B[Replaced NX20P5090 power switch]
 B --&amp;gt; C[PD negotiation still failed]
 C --&amp;gt; D[Measured CC and VBUS behavior]
 D --&amp;gt; E[Replaced TPS65988 controller]
 E --&amp;gt; F[Behavior unchanged]
 F --&amp;gt; G[Checked external SPI flash configuration]
 G --&amp;gt; H[Regenerated and reflashed TI configuration]
 H --&amp;gt; I[PD negotiation restored]&lt;/div&gt;
 &lt;div class="mermaid-target" aria-label="Mermaid diagram"&gt;&lt;/div&gt;
&lt;/div&gt;&lt;script src="https://elvirh.com/mermaid.min.js"&gt;&lt;/script&gt;
 &lt;script&gt;
 (() =&gt; {
 const config = {"theme":"neutral","flowchart":{"htmlLabels":true,"curve":"basis","useMaxWidth":true,"nodeSpacing":40,"rankSpacing":50,"padding":12}};

 const renderMermaidBlocks = async () =&gt; {
 if (!window.mermaid) return;

 if (!window.__mermaidConfigured) {
 mermaid.initialize({ startOnLoad: false, ...config });
 window.__mermaidConfigured = true;
 }

 const blocks = document.querySelectorAll("[data-mermaid-block]:not([data-rendered])");
 for (const block of blocks) {
 const source = block.querySelector(".mermaid-source");
 const target = block.querySelector(".mermaid-target");
 if (!source || !target) continue;

 const code = source.textContent || "";
 const renderId = "m-" + Math.random().toString(36).slice(2);

 try {
 const { svg, bindFunctions } = await mermaid.render(renderId, code);
 target.innerHTML = svg;
 if (typeof bindFunctions === "function") bindFunctions(target);
 block.dataset.rendered = "true";
 } catch (error) {
 console.error("Mermaid render failed", error);
 target.innerHTML = "&lt;pre&gt;" + code.replace(/[&amp;&lt;&gt;]/g, (ch) =&gt; ({ "&amp;": "&amp;amp;", "&lt;": "&amp;lt;", "&gt;": "&amp;gt;" }[ch])) + "&lt;/pre&gt;";
 block.dataset.rendered = "error";
 }
 }
 };

 if (!window.__mermaidRenderHooked) {
 window.__mermaidRenderHooked = true;
 if (document.readyState === "loading") {
 document.addEventListener("DOMContentLoaded", renderMermaidBlocks, { once: true });
 } else {
 renderMermaidBlocks();
 }
 window.addEventListener("load", renderMermaidBlocks);
 } else {
 renderMermaidBlocks();
 }
 })();
 &lt;/script&gt;
 &lt;style&gt;
 .mermaid-block {
 width: 100%;
 }
 .mermaid-target {
 width: 100%;
 overflow-x: auto;
 }
 .mermaid-target svg {
 display: block;
 max-width: 100%;
 height: auto;
 margin: 0 auto;
 }
 &lt;/style&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;details &gt;&lt;summary&gt;Details&lt;/summary&gt;&lt;div class="markdown-inner"&gt;

This repair started as a power-path failure and quickly turned into a mixed hardware and firmware fault analysis.

The first confirmed fault was the NX20P5090 USB-PD protection and switch device. Replacing it restored basic path integrity but did not recover PD contract negotiation.

Signal-level checks on CC and VBUS showed the policy engine was not completing valid negotiation states. Replacing the TPS65988 controller also produced no functional change.

That narrowed the fault domain to external dependencies, specifically the SPI flash used for TPS65988 configuration. After rebuilding and flashing the configuration image with TI tooling, the controller resumed normal policy behavior and negotiated correctly.

Key lesson: do not treat PD controllers as standalone silicon. Configuration memory is part of the active control plane.
&lt;/div&gt;&lt;/details&gt;
&lt;section class="x-media" data-gallery="gallery-0a2dc6199f4db88c7acb843294786eec"&gt;
 &lt;div class="x-media__head"&gt;
 &lt;h2&gt;Gallery&lt;/h2&gt;
 &lt;p&gt;4 images&lt;/p&gt;</description></item><item><title>Runtime Rendering and Client-Server Observability (PoC)</title><link>https://elvirh.com/en/projects/achievements/runtime-observability-poc/</link><pubDate>Thu, 12 Feb 2026 00:00:00 +0000</pubDate><guid>https://elvirh.com/en/projects/achievements/runtime-observability-poc/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;a class="anchor" href="#overview"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This proof-of-concept explores how modern SaaS applications expose structured system behavior at runtime, even when that structure is abstracted behind complex interfaces.&lt;/p&gt;
&lt;p&gt;Using browser-level instrumentation and execution tracing, the project demonstrates how client-side rendering pipelines and network interactions can be observed, analyzed, and modeled without modifying backend systems.&lt;/p&gt;
&lt;p&gt;The objective was not feature manipulation, but architectural understanding: identifying where authority resides, how state transitions occur, and how frontend abstractions relate to backend contracts.&lt;/p&gt;</description></item></channel></rss>