Platforms¶
Joypad OS is a cross-platform firmware that builds against three different SDKs, each supporting different microcontroller families. The SDK determines what hardware features are available, how the build system works, and what RTOS (if any) is used.
Supported Platforms¶
| SDK | Chips | Boards | Apps | Build System |
|---|---|---|---|---|
| Pico SDK | RP2040, RP2350 | Pico, Pico 2, Pico W, Pico 2 W, KB2040, Feather RP2040, RP2040-Zero, MacroPad | All 30+ apps | CMake + gcc-arm-embedded |
| ESP-IDF | ESP32-S3 | Seeed XIAO ESP32-S3 | bt2usb | CMake + ESP-IDF toolchain |
| nRF Connect SDK | nRF52840 | Seeed XIAO nRF52840, Adafruit Feather nRF52840 | bt2usb, usb2usb | west + Zephyr + gcc-arm-zephyr |
How Platforms Work¶
Each platform implements the same Platform HAL (platform.h) providing time, identity, and reboot functions. Shared source code in src/ uses this HAL rather than calling SDK functions directly.
The key architectural differences:
Pico SDK (primary platform) -- Bare-metal dual-core. Core 0 runs the main loop (USB host, Bluetooth, input processing, services). Core 1 runs timing-critical console output via PIO. No RTOS. All console output protocols (GameCube, Dreamcast, PCEngine, etc.) are only available on this platform because they require PIO state machines.
ESP-IDF -- FreeRTOS with separate tasks for BTstack (BLE) and USB device output. BLE only (no Classic Bluetooth). Native USB OTG device support. No PIO, so no console protocol output -- USB HID output only.
nRF Connect SDK -- Zephyr RTOS with BTstack running in its own thread. BLE only. USB host requires external MAX3421E SPI chip (no native USB host). Raw HCI passthrough from Zephyr to BTstack.
Shared Code¶
All three platforms share the same core source files:
src/core/-- Router, profiles, players, storage, LEDs, buttonssrc/bt/-- BTstack integration and BT HID device driverssrc/usb/usbd/-- USB device output modes (TinyUSB)
Platform-specific code lives in:
src/platform/rp2040/-- Pico SDK platform implementationesp/main/-- ESP-IDF entry point and HAL gluenrf/src/-- Zephyr entry point and HAL glue
Choosing a Platform¶
- Building a console adapter? Use Pico SDK (RP2040/RP2350). It's the only platform with PIO for console protocols.
- Building a BLE-to-USB adapter? Any platform works. Pico W gives you Classic BT + BLE. ESP32-S3 and nRF52840 are BLE-only but more compact.
- Need USB host input? Pico SDK (native PIO-USB or RP2040 USB host) or nRF52840 (MAX3421E SPI).
- Need WiFi? Pico W only (JOCP protocol).