Hi everyone,
I’m developing a SITL (Software In The Loop) / HITL (Hardware In The Loop) simulator for Daisy Seed development. I’d love to get the community’s feedback on my approach.
Why I Started This Project
When developing Daisy effects, I kept facing these issues:
-
Flashing firmware just to test small parameter tweaks
-
Difficulty debugging DSP code without hardware
-
No way to test OLED menus and knob interactions on PC
Solution: A PC-based simulator with two modes:
-
SITL: Complete software emulation (no hardware needed)
-
HITL: Daisy Seed connected via USB, PC provides virtual peripherals
Current Architecture
┌─────────────────────────────────────────────────────┐
│ Daisy SITL Simulator │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Dear ImGui │ │ PortAudio │ │ DaisySP │ │
│ │ (GUI) │ │ (Audio) │ │ (Effects) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │ │ │
│ └────────────────┼────────────────┘ │
│ ▼ │
│ ┌─────────────┐ │
│ │ SITL HAL │ │
│ └─────────────┘ │
│ │ (future: libserialport) │
│ ▼ │
│ ┌─────────────┐ │
│ │ Daisy Seed │ ← HITL Mode │
│ └─────────────┘ │
└─────────────────────────────────────────────────────┘
Tech Stack:
-
GUI: Dear ImGui + SDL2 + OpenGL
-
Audio: PortAudio (48kHz, 256 samples)
-
DSP: DaisySP wrapper
-
License: MIT (planned)
Why Dear ImGui Instead of JUCE
I evaluated JUCE but decided against it for HITL development:
| Issue | Impact |
|---|---|
| No native serial communication | Need external libs anyway |
| Audio thread blocks serial I/O | Complex async architecture required |
| GPL/Commercial license | Restrictive for free dev tools |
| Plugin-focused architecture | Overkill for firmware dev tools |
Dear ImGui provides direct C++ integration, simple threading model, and MIT license freedom.
Current Features
-
OLED emulation (128x64, pixel-accurate)
-
Interactive knobs (drag/wheel support)
-
Switches with LED indicators
-
Rotary encoder
-
DaisySP effects (Overdrive, Reverb, Chorus, Delay)
-
Waveform visualization
-
Console logging
Questions for the Community
-
HITL USB Communication: I’m considering
libserialportfor USB/serial communication with Daisy Seed. Any recommendations or alternatives? Has anyone implemented similar hardware communication? -
GUI Framework Choice: For building a simulator/development tool like this, what GUI language/framework would you recommend? I chose Dear ImGui for its simplicity and performance, but I’m curious about other approaches the community has used.
-
Architecture Feedback: Any opinions on the current configuration? Suggestions for improvement? Things I might be missing?
Thanks for reading - looking forward to your thoughts!