ReMapper DevLog
August 23, 2025
This entry marks the start of the ReMapper development log. I’m beginning at the point where the first schematics and prototype PCB are already complete, I didn’t capture the initial brainstorming phase, but going forward I’ll be documenting the design and development process here.
The project is intended to be fully open source, covering both hardware and software. The current PCB integrates an ESP32-S3 and an RP2040:
- The RP2040 operates primarily as a USB 1.1 Host, capturing HID input and forwarding packets to the ESP32 over an SPI link.
- The ESP32-S3 is responsible for acting as the output HID device, and was chosen for its built-in wireless connectivity, which will later enable a web-based configuration interface.
Rationale for the Chipset
The dual-MCU approach was chosen to simplify USB handling:
- I required two separate USB peripherals and wanted to avoid potential conflicts within TinyUSB (e.g., globals or singleton-style constructs). Splitting host and device functionality across two chips keeps the design clean.
- The ESP32-S3 provides Wi-Fi and is well-supported for web hosting, making it a natural fit for the configuration interface.
- The RP2040 is inexpensive, flexible, and easy to bring up with TinyUSB. (Admittedly, this choice was somewhat arbitrary but practical.)
Repository
The full source code and schematics are hosted here:
👉 https://github.com/cedarhacks/ReMapper
Current Software Status
At this stage, the firmware is minimal:
- ESP32-S3
- Acts as a USB device via TinyUSB.
- Hosts a basic web server (currently placeholder) and a rudimentary DHCP server (unreliable at this point).
- Runs its own Wi-Fi AP for device configuration.
- RP2040
- Acts as a USB 1.1 Host using TinyUSB.
- Forwards USB traffic to the ESP32 over SPI.
Challenges Ahead
Several technical areas need deeper investigation:
- SPI Throughput, ensuring the SPI bus can sustain the required transfer rates for forwarding USB HID traffic without introducing latency.
- Configuration Layer, implementing a usable web interface for remapping inputs to outputs.
- Protocol Emulation, generic HID gamepad emulation is straightforward, but accurate Xbox and PlayStation emulation will require handling proprietary protocols and descriptors. This will be deferred until later iterations.
PCB Design
There isn't much to the PCB design atm, I exposed a few extra peripherals for some debugging.
- Currently I program the ESP32 via serial and the RP2040 over USB.
- JLCPCB charges extra for assembly of back components, so I added only the ESP32 to the backside, which I hand solder.
- I added an extra QSPI memory chip for the esp32 thinking I might want to store site data / assets in it. I haven't tried to interact with that yet.
- I'm pretty sure every trace width I have is wrong. Choosing not to worry so much about that just yet since these are dev boards anyways, but it is something I need to consider soon, once the software is mapped out.
Here are some photos of the prototype progress so far: