The board I've built
Every component on this 3D board is a real project. Drag to turn it, then click a part to lift it off the board and read about it. The full list is in the bill of materials below.
Bill of materials
Every project I've built, listed the way parts are listed for a board. The two open-source ones have public code you can read and run.
foc-motor-control
A C99 field-oriented control library for BLDC and PMSM motors that tunes its own gains from the motor's parameters. A Python simulator runs the same C code against a motor model, with encoder steps, sensor noise and a one-cycle delay, before any hardware is powered. About 2 KB of flash on a Cortex-M4F.

ebpf-drvlat
An eBPF tool for embedded Linux that shows how long interrupt handlers run, how long threaded IRQs wait for the CPU, and how long each I2C and SPI transfer takes. Built on libbpf CO-RE with tracepoints only, so it runs on kernels without kprobes.
$ sudo drvlat -m softirq -n BLOCK -d 3 BLOCK count 80 avg 12.5 us max 56.5 us usecs : count |distribution | 2 -> 3 : 12 |********* | 4 -> 7 : 10 |******* | 8 -> 15 : 34 |**********************| 16 -> 31 : 23 |*************** | 32 -> 63 : 1 |* |
| Ref | Project | What I did | When |
|---|---|---|---|
| TP1 | eBPF driver latency tracerOpen source | Latency histograms for hard IRQs, softirqs, threaded IRQs, I2C and SPI, with a slow-event log and JSON output. CI builds it and loads it into a live kernel on every push. | 2026 |
| M2 | FOC motor-control libraryOpen source | Portable C99 FOC with model-based auto-tuning, decoupling feed-forward and SVPWM, verified in closed loop against a Python motor simulator. | 2026 |
| M1 | BLDC speed control proof of conceptClient PoC, delivered | MATLAB/Simulink simulation of FOC speed control for a BLDC motor, with an agentic workflow that automates controller tuning. Delivered and demonstrated to the client. | 2026 |
| U1 | CPR training manikinMobile Programming LLC | Time-of-flight and airflow sensors measure compressions and rescue breaths; live feedback streams to a tablet app over BLE. | 2026 |
| L1 | Auscultation trainerMobile Programming LLC | NFC tags mark chest positions; the firmware plays the matching heart or lung sound through an audio IC when the stethoscope is placed. | 2026 |
| D1 | Anatomical LED zone controllerMobile Programming LLC | Drives 33 WS2812 LEDs across heart, lung and bowel zones. Replaced a multi-packet text protocol with a binary one that fits a full frame in a single 136-byte BLE write, and pinned tasks across both cores. | 2026 |
| U4 | Shared firmware platformMobile Programming LLC | One hardware-abstracted ESP32 codebase for several training products. DMA offload, a dual-core task split, and OTA and bootloader fixes. | 2026 |
| J1 | Optical L1 control planeCiena | Carrier optical transport: channel provisioning and upgrade paths. Built an RPC test-injection hook that cut bug-reproduction time, and cleared Coverity findings before each monthly release. | 2025–26 |
| U2 | Cisco NCS platform firmwareCapgemini, for Cisco | AMI Aptio V UEFI updates with Intel security fixes, validated over JTAG. Yocto recipes and layers, BIOS and iPXE boot, secure boot, and CMocka tests in Jenkins CI. | 2023–25 |
| U3 | Grid data processor DSPChetu, for Micatu (USA) | Ported Python harmonic and noise filters to C for the M410B on ARM Cortex-A with Wind River real-time Linux, validated on QEMU and then on hardware. | 2021–23 |
| U5 | Telephone exchange product lineCopper Connections | Firmware for a 4-line, 32-extension exchange, a PAX, a digital PBX and key telephone sets, with SPI, UART and I2C drivers. | 2020–21 |
| K1 | 32-zone burglar alarmCopper Connections | Firmware for a commercial security panel with 32 wired zones. | 2020–21 |
| U6 | Pulse monitoring deviceLarkAI Healthcare | SPI and I2C sensor drivers, interrupt routines and sensor data processing. | 2020 |
| Q1 | Touch-free hand dispenserLarkAI Healthcare | IR and ultrasonic sensing firmware for an automatic dispenser. | 2020 |
| J2 | Raspberry Pi 3 custom LinuxPersonal, in progress | Kernel and device-driver development on the Cortex-A53, and a custom Linux image built with Yocto. | 2026 |
No projects in this area yet.
Career on a logic analyzer
Each channel is a skill. The signal goes high where I used it in production. Click a company to decode that capture.
How I can help
Freelance, contract or full-time. Remote worldwide, with on-site visits for key milestones.
Build the firmware
From first prototype to production release, for IoT, AIoT, robotics and medical devices. Sensors, BLE, OTA updates and a clean RTOS design.
Fix what's stuck
Random resets, timing bugs, BLE drops, boot or OTA failures. I take out the scope and the debugger and find the root cause.
Level up your team
Code reviews, unit tests in CI and hands-on mentoring, so your junior engineers ship with confidence.
Open a UART to me
Type your message and press Transmit. It opens in your email app, ready to send. I usually reply within a day.