Skip to main content

← All posts

Release Notes

v1.0.0: First Stable Firmware for Torrent, Switchback, and Tapper

· 5 min read

Three modules just hit their first stable release. Torrent, Switchback, and Tapper are all tagged v1.0.0 on GitHub with pre-built firmware binaries ready to flash. These are the power distribution, relay switching, and control panel modules that form the backbone of any TrailCurrent vehicle build. If you've been waiting for a stable baseline before starting your install, this is it.

What shipped

All three modules share a common firmware foundation built on ESP-IDF and communicate over CAN bus at 500 kbps. Each one ships with the same set of infrastructure features (OTA updates, mDNS discovery, WiFi provisioning over CAN, multi-device addressing) on top of the hardware-specific functionality that makes each module useful.

Torrent: 8-Channel PWM Controller

Torrent drives eight independently dimmable MOSFET outputs at 5 kHz PWM. It runs on an ESP32-WROOM-32 and targets lighting and low-current accessory loads: interior LEDs, exterior floods, underbody accents, cabinet lights, reading lights, awning lights. Each channel accepts 8-bit brightness values (0–255) over CAN, and individual channels can be toggled on and off without losing their brightness setting.

Beyond simple on/off control, Torrent ships with built-in animated light sequences. A startup sequence runs a progressive wave across all eight channels when the module powers on. Interior and exterior sequence modes provide preset patterns like fading rotations for ambient cabin lighting and alternating patterns for exterior visibility. These are triggered by a single CAN message, so any controller on the bus (including Headwaters automation rules) can kick them off.

The release includes three pre-built binaries, one per address (0, 1, 2), so you can run up to three Torrent modules on a single bus, each controlling its own eight channels.

Switchback: 8-Channel Relay Module

Switchback handles the loads that need real switching power. It runs on a Waveshare ESP32-S3-ETH-8DI-8RO-C board and controls eight mechanical relays, each rated for 10A at 250V AC or 30V DC. Think water pumps, refrigerators, fans, heaters, inverters. The kind of loads you wouldn't run through a MOSFET.

The relays are driven through a TCA9554 I2C I/O expander, and the relay states are broadcast as a single-byte bitmask over CAN at 30 Hz. That keeps every device on the bus informed of which relays are on without any polling overhead. Toggle commands follow the same pattern as Torrent: send a channel number over CAN and the relay flips.

The board itself brings a few extras beyond the relays: onboard Ethernet via a W5500 chip, eight optocoupler-isolated digital inputs, an RTC with battery backup, an SD card slot, a buzzer, and an RGB LED. The 1.0.0 firmware focuses on rock-solid relay control and CAN integration; future releases will light up the remaining peripherals.

Like Torrent, three address variants ship in the release (0, 1, 2) for multi-module setups.

Tapper: 8-Button Control Panel

Tapper is the wall-mounted panel that people actually touch. Eight momentary buttons, each with an LED backlight, on a custom PCB running an ESP32-WROOM-32. Press a button, it sends a toggle command over CAN. The target device processes the toggle and broadcasts its new state. Tapper picks up that status message and updates its LEDs accordingly. The feedback loop is fast enough that the LED change feels instantaneous.

What makes the 1.0.0 release significant for Tapper is target device pairing. Each Tapper is built to talk to a specific device type (Torrent or Switchback) at a specific address (0, 1, or 2). The firmware adapts its status parsing based on the target: Torrent sends eight bytes of PWM values, Switchback sends a one-byte bitmask. Tapper handles both formats natively, lighting its LEDs to match whichever device it's paired with.

The release ships six pre-built binaries covering every combination:

  • tapper_torrent_addr0.bin, tapper_torrent_addr1.bin, tapper_torrent_addr2.bin
  • tapper_switchback_addr0.bin, tapper_switchback_addr1.bin, tapper_switchback_addr2.bin

Shared infrastructure

Every module in the 1.0.0 release shares the same underlying capabilities. That's by design. Any module you put on the bus can be discovered, updated, and provisioned the same way, regardless of what it does.

Over-the-air updates

All three modules support OTA firmware updates over WiFi. The update process uses dual OTA partitions, so if something goes wrong mid-flash the module boots back into the previous working firmware. WiFi credentials are provisioned over CAN. Headwaters sends the SSID and password in chunked messages, the module connects, and exposes an HTTP endpoint for the binary upload. No need to physically access the module once it's installed in the vehicle.

mDNS discovery

When Headwaters sends a discovery trigger on the CAN bus, each module spins up WiFi and registers itself as a _trailcurrent._tcp mDNS service. The TXT records include the module type, address, CAN IDs, and firmware version. Headwaters collects all of this and builds a map of what's on the bus: which modules exist, what addresses they use, what firmware they're running. The local dashboard and automation engine use this information directly, so you don't have to manually configure anything.

CAN bus resilience

The CAN driver in all three modules handles bus errors gracefully. If a module detects repeated transmit failures (no ACK from any peer), it drops from active 30 Hz broadcasting to a slow 2 Hz probe mode to avoid flooding the bus. Once a peer comes back online and acknowledges a frame, the module resumes normal operation. This matters in real installations where modules power on at different times and the bus topology can change.

How to get it

The fastest path is the web flasher. Pick the module, pick the address or pairing variant, pick the v1.0.0 release, plug in USB, and flash. The flasher pulls the binaries directly from the GitHub release, so you're always getting exactly what's tagged in the repo.

If you prefer the command line, the repos are on GitHub:

Clone the repo, install ESP-IDF, and run build-all.sh to generate every address variant locally. Each repo's build script outputs the same merged binaries that ship in the GitHub release.

What comes next

The 1.0.0 tag means these modules are stable and tested for daily use. It doesn't mean they're done. Switchback has onboard Ethernet, digital inputs, and an RTC that aren't yet exposed in the firmware. Torrent's light sequence library will grow as we add more patterns. Tapper may gain long-press and hold behaviors for secondary actions. Those are all future releases. Version 1.0.0 is the foundation they'll build on.

If you're building a TrailCurrent system, the hardware layer is now ready. Three modules, twelve pre-built firmware binaries, one CAN bus, and a browser-based flasher to get it all running. Start with one Torrent and one Tapper, expand from there.