INTUITIVE INTERFACESON BAREMETAL

Polished embedded user interfaces for products that need to feel as good as they work.

Ankh engineers the full embedded interface stack: MIPI DSI and parallel RGB display bring-up, ILI9341/ST7789/RA8875 driver development, capacitive touch integration (FT5x46, GT911, CST816D), LVGL widget customization and animation, font rendering on low-RAM MCUs, rotary encoder with velocity-based acceleration, LED design with WS2812B/APA102, haptic feedback via DRV2605L, and robust UI state machine architecture — an interface that responds within 16 ms on a Cortex-M4 with 256 KB of RAM.

Service engineering
Service Domains

What We Build

Display Integration & Driver Development

Display bring-up across MIPI DSI, parallel RGB with LTDC/DMA2D on STM32, FMC/FSMC, and SPI — with custom drivers for ILI9341, ST7789, GC9A01, SSD1306, and RA8875, including pixel format conversion and DMA transfer optimization.

LVGL Framework Implementation

LVGL widget creation, theme customization, style cascading, and animation engine configuration — custom widgets where the standard library is insufficient, rendering optimization for available frame buffer memory, and port layer (display driver, touch, tick) integrated with the RTOS scheduler.

Capacitive Touch Controller Integration

I2C initialization, interrupt-driven touch event reporting, multi-touch tracking, and gesture recognition (swipe, pinch, long-press) for FT5x46, GT911, and CST816D — with sensitivity, report rate, and noise immunity characterization for gloved operation or thick cover glass.

Physical Button & Rotary Encoder Design

Hardware debounce circuits and software state machines for single-press, double-press, and long-press detection; rotary encoder quadrature decoding with velocity-based acceleration that increases scroll speed as rotation rate increases.

LED Indicator Design & Control

WS2812B and APA102 addressable LED systems, PCA9685 PWM controllers, and discrete RGB LEDs — LED pattern language design, animation engine firmware, and legibility validation in ambient lighting conditions.

Haptic Feedback Integration

DRV2605L with ERM and LRA actuators — type and resonant frequency selected for the form factor, waveform library implemented (TI's 123 built-in effects plus custom waveforms), amplitude and duration tuned for crisp feel in the target enclosure.

Display Dimming & Power Management

Backlight PWM dimming with gamma-corrected curves, ambient light sensor auto-brightness, and display sleep/wake sequencing — current characterized at multiple brightness levels with power policy implemented in the UI state machine.

UI State Machine Architecture

Hierarchical state machine with formal entry/exit/action semantics, transition guards for power state and permissions, and a documented screen graph so future maintainers can add screens without introducing regressions.

Rendering Optimization for Low-RAM MCUs

On ≤256 KB SRAM MCUs: partial rendering with dirty-region tracking, RLE and LZ4 compressed image assets, and heap allocation strategy preventing fragmentation — profiled with DWT cycle counters to achieve consistent 30+ FPS without tearing.

Engagement Process

How We Work

01

UI/UX Requirements & Hardware Constraints

SRAM, CPU/DMA bandwidth, display interface ceiling, and power budget are characterized first — these bound achievable UI complexity. User workflows, personas, and environmental conditions (sunlight legibility, gloved operation, orientation) are captured in a UI requirements document serving as the brief for graphic design and firmware.

02

Display & Touch Hardware Bring-Up

Display bring-up implements the controller's initialization sequence—often poorly documented—and validates operation with a test pattern before introducing any UI framework. Touch bring-up covers I2C address detection, interrupt configuration, optional firmware download (GT911), and raw coordinate validation, with oscilloscope captures documented as the production test reference.

03

UI Design & Asset Production

Screen layouts are designed in Figma at target resolution with pixel constraints: integer-pixel text, anti-aliasing budget, and indexed-color limits. Icons are bitmap sprites, fonts are subset and converted to LVGL format; design QA runs on actual hardware, not a desktop monitor.

04

LVGL Port & Widget Implementation

The LVGL port binds flush callback, touch read callback, and tick to the RTOS scheduler; frame buffer strategy is selected based on RAM budget and tear tolerance. Custom widgets are implemented as LVGL object classes with style support and animation hooks.

05

Interaction Model & State Machine

A hierarchical FSM routes all event sources (touch, encoder, buttons) through a unified queue on the UI task; screens are top-level states, modals and loading states are nested. Timeout states handle inactivity and errors that must interrupt any active screen without corrupting UI state.

06

Performance Profiling & Acceptance Testing

Frame time, touch-to-visual latency (target sub-16 ms), and CPU utilization are profiled with DWT cycle counters — typical bottlenecks are image blending and font cache misses. Acceptance testing covers all screen states, input edge cases, and power consumption at each brightness level.

Technical Depth

The Detail Behind Premium Embedded UI

01

LVGL Rendering Architecture on RAM-Constrained MCUs

A full RGB565 frame buffer for a 320×240 display costs 150 KB — more than the entire SRAM of many Cortex-M0+ targets. LVGL's partial rendering is essential, draw buffer sized to DMA bandwidth to eliminate CPU stalls at flush; on STM32 targets, DMA2D routes pixel blending to Chrom-ART while assets decompress from flash.

Firmware Development
02

Capacitive Touch: From Raw Coordinates to Gesture

The touch pipeline handles coordinate transformation, EMA jitter filtering, debounced lift-off detection, and gesture classification before events reach LVGL. Swipe velocity drives inertial scroll physics, two-finger pinch and long-press with visual progress are implemented, and the interrupt-driven vs. polling trade-off is managed to prevent LVGL re-entrancy during display flush.

Electronics Design
03

Haptic Feedback: Engineering the Feel

LRA actuators at resonant frequency (170–230 Hz) produce crisp tactile impulses preferred for UI confirmation; ERM actuators' longer spin-up makes sharp clicks difficult. Resonant frequency is characterized in the assembled enclosure with a swept-frequency accelerometer test; custom DRV2605L waveforms are validated with 10+ evaluators scoring click, buzz, and alert effects.

Audio Engineering

Polished embedded user interfaces for products that need to feel as good as they work.

01

Hardware and UI Co-Design

DMA2D support, SRAM headroom for the frame buffer, and touch interrupt routing cannot be corrected at the LVGL implementation stage. Hardware and UI are co-designed from kickoff — every hardware decision evaluated against the rendering pipeline.

02

Production-Quality LVGL Implementations

LVGL code is held to the same quality bar as safety-critical firmware: frame time profiling, multi-day heap fragmentation stress tests, edge case input handling, and static analysis — state machine architecture documented for long-term maintainability.

03

Multisensory Interface Design

Complete interaction language: which events produce haptic and with what waveform, which states drive LED color and animation, when audio tones supplement visual alerts, and how all channels degrade gracefully — products communicating through multiple sensory channels are genuinely easier to use in the field.

What You Receive

Deliverables

Display & Touch Hardware Bring-Up Package

Initialization source code, register configuration documentation, bring-up test procedure, and oscilloscope captures validating display and touch controller operation.

LVGL Port Layer & Theme Source Code

LVGL port including flush callback, touch read callback, tick source, theme configuration, and frame buffer allocation with memory layout diagram.

Screen & Widget Implementation

All screens as LVGL source files with documented widget hierarchy, style application, and event handler registration; custom widgets as reusable LVGL object classes with API documentation.

UI State Machine Documentation & Source

State machine source code with PlantUML/Mermaid state diagram, transition table, event source documentation, and guard condition logic for all transitions.

Asset Production Files

Figma design files at target resolution, LVGL-compatible bitmap sprites, font files subsetted to required code points, and icon sprite sheets.

LED & Haptic Firmware

WS2812B/APA102 DMA driver, PCA9685 driver, LED animation engine with pattern language documentation, DRV2605L haptic driver with waveform library and effect-to-event mapping.

Performance Characterization Report

Frame time at peak load, touch-to-visual latency, CPU utilization profile, and RAM usage breakdown — with pass/fail assessment against target performance requirements.

Production Test Procedure

Automated test sequence for display initialization, touch calibration, LED, and haptic — Python scripts with pass/fail criteria and visual inspection checklist.

All UI deliverables include source code in the target RTOS/bare-metal environment, asset production files, and documentation sufficient for your team to extend the interface independently.

Work That Demonstrates the Standard

Medical Infusion Pump Touch Interface

IEC 62366-1 usability validation passed with 0 critical use errors

Ankh redesigned the UI state machine for an infusion pump that had failed IEC 62366-1 — adding alarm escalation states, persistent alarm indicators, and mandatory 3-step confirmation for dose-critical changes. LVGL on STM32H7 achieved sub-12 ms touch-to-visual latency with DRV2605L haptic confirmation; the redesigned interface passed summative IEC 62366-1 with zero critical use errors across 15 users.

IEC 62366LVGLSTM32H7FT5x46MedicalDRV2605LUI State Machine
Read the Case Study

Industrial HMI on STM32H7 with LVGL

60 FPS sustained on 800×480 display with 12 simultaneous data widgets

Ankh implemented the LVGL port for an 800×480 HMI using STM32H7 DMA2D for alpha-blend acceleration, SDRAM double buffers, and per-widget partial-update optimization with lock-free ring buffers preventing RTOS priority inversion. The result was 60 FPS sustained with 35% CPU headroom, double the client's 30 FPS target.

LVGLSTM32H7DMA2DIndustrial HMI800x480Double BufferReal-Time Data
Read the Case Study
Quote your project

Ready to build a device interface people actually want to use?Premium feel on constrained hardware — that is the embedded UI/UX challenge we solve.

Share your display and MCU specs and Ankh will scope the hardware and firmware engagement together — from display bring-up to a complete multisensory interface with touch, haptic, and LED.