ATS Mini Controller
UTCFirmware
Reference

Alternative firmware: Monster and Berndt

Which ATS Mini firmware the app works with, why it sometimes asks you to confirm one, and what changes on screen when you flash the Monster fork or H. J. Berndt’s firmware.

Most owners run the official firmware and never need this page. It is for the rest: the app also recognises the Monster fork and the separate firmware written by H. J. Berndt (hjberndt.de). The three differ enough in how they talk over the cable that the app changes what it shows you — and on one of them it asks your permission first. Here is what it supports, what it asks, and what disappears.

The three firmwares

OfficialMonster forkBerndt
What it isThe project firmware, esp32-si4732/ats-miniA fork of the official one, adding features on top of itA separate project, not a fork — it does not speak the official firmware’s protocol at all
Recognised on its ownYes, silentlyYes, silentlyNo — the app always asks you first
Status readingsFullDeclared full, with a few extra fields in its status line; never seen on a working radioNone. This firmware sends no status frame
Controls the app offersEverythingEverything, plus two faster commands only this fork hasFour, and nothing else
Tested on a radio hereYes, two versionsNo — see belowPartly

Do I have to tell the app which firmware I have?

Usually not. Both the official firmware and the Monster fork identify themselves in the status data the radio streams, so the app adopts the right profile the moment a frame parses: no banner, no question, nothing to configure. That was confirmed here on official firmware 2.38 and 2.33.

The Connection panel keeps a guess and a finding visibly apart. It names the firmware only once the identity is actually established; until then it says Firmware not identified yet, because before detection settles the active profile is a default rather than a conclusion.

Berndt’s firmware is the exception. The app never switches to it by itself — every route to that profile goes through a confirmation you click, or one you already gave for the same radio.

Why is the app asking me to confirm, and is it safe to say yes?

If the replies look like Berndt’s, you get a banner headed This looks like H.J. Berndt firmware with a Switch to Berndt firmware button. In practice the radio tested here showed the No reply from the radio banner instead — the radio tested here answered nothing to the app’s probe — so the Actually, this is Berndt firmware button on that banner is the route most owners will take. It asks instead of switching because that firmware reuses several of the characters the official one uses, and for most of them what they do there has never been established. One of them has been traced all the way through a Berndt build’s own code, and it is the alarming one: the character the app sends for right writes raw rotary-encoder steps. A wrong guess would not fail loudly either — this firmware sends no acknowledgement of any kind, and produces nothing at all for input it does not recognise, so nothing comes back to tell you.

So yes, it is safe to confirm — confirming makes the app more cautious, not less. On the Berndt profile it sends four commands and nothing else, one at a time, and refuses anything that would need a burst of them. The riskier state is the one you are in while the app still thinks it is talking to the official firmware.

The question is asked once per radio, not once per session or per tab: your answer is remembered for that physical device. Said yes by mistake? Not this firmware? in the Connection panel clears the stored choice and re-detects on your next connection.

When the app cannot tell

No reply from the radio means nothing came back at all. The usual cause is the official firmware’s remote interface still being switched off, so the banner points you at Settings → USB Port → Ad hoc on the receiver. It deliberately does not read silence as an exotic firmware: telling a stock-firmware owner they are running an obscure German build is the worse mistake of the two.

Unrecognised replies from the radio means something answered and nothing matched. No firmware is selected and none is assumed. The banner shows you the actual lines the radio sent, word for word, so an owner who recognises their own firmware can act on it. Meanwhile everything you send goes out one at a time, about five seconds apart — the slowest pace any supported firmware needs — and the app sends nothing on its own initiative.

Both of those banners carry a quiet Actually, this is Berndt firmware button for exactly that reader. And if a radio the app already confirmed as official starts producing Berndt-shaped traffic, it asks again rather than switching silently — USB identifies a board revision, not an individual radio, so without that question one answer would follow you onto the next radio of the same revision.

Why have some controls disappeared since I flashed a different firmware?

Because on Berndt’s firmware they are not supported, and the app removes them rather than greying them out. On a radio confirmed as Berndt these are absent from the page: the memory sidebar, the theme editor, calibration, sleep, the spectrum scanner and the app’s own seek panel. That was checked on a real radio.

Absence is the deliberate choice. A greyed-out button would still carry its command mapping into the keyboard handler and every other caller in the app, so a key press could still send a character the button itself refuses. Dropping the control entirely closes the button, its keyboard shortcut and the automation path in one move — which is why the shortcut list in the help panel shrinks to match.

The frequency box in the Tune panel goes for the same reason: no command that sends this firmware to an absolute frequency has been established, so the app has nothing to send. Readings the firmware never reports show rather than 0, so an empty field cannot be mistaken for a measurement of zero.

Why is this firmware so slow to accept my clicks?

It is the firmware, not the app. Berndt’s console takes about one command every five seconds: its own code accepts a command only once the connection has been quiet that long, and a second one sent inside the window is swallowed with no reply and no error. So the app spaces every write out to match.

On screen you get a note saying so, and a live countdown — Next command in 4 s…. Buttons stay clickable while it runs, because your click is queued rather than lost. At most two commands may wait; a third is refused with a message instead of stacking up. And a change that would need a burst — walking the volume up dozens of steps, or sweeping a spectrum — is refused outright with its cost named, because at five seconds a step it would run for minutes and be indistinguishable from a hang.

The five-second figure was read out of the firmware’s own code, and the app leaves itself a small margin on top of it. It is not a stopwatch measurement from a radio, and it is the first number that will change if bench testing shows it can be tightened.

I flashed the Monster fork and my radio behaves oddly

Almost certainly the memory variant. The ATS Mini ships with two kinds of PSRAM chip — quad (QSPI) and octal (OSPI) — and Monster publishes only the octal build, so a quad board has no published image it can run. What that looks like is not a clean refusal. On the one radio this project has seen Monster run on, PSRAM failed to initialise: the radio printed the error over the serial port, never sent a single status frame, and left the app with nothing to control. A quad board running the octal build is the likely explanation, since it is the only build published — but the memory type of that particular board was never established. You can watch it happen either way: that error line appears in the app’s terminal as ordinary received text.

The fix is not in this app. Running Monster on a quad-PSRAM board means building the firmware from source with the quad setting enabled.

Which is also why this page will not promise you that Monster works. The app carries a full Monster profile — the wider status line, the extra slot-recall and parameter-set commands, 99 writable memory slots — but it was written from the fork’s documentation, and the published binary would not run on the radio available here. None of it has been exercised against a working Monster radio. The only Monster output this project has ever captured is an options listing, and it came from that radio with its memory chip already dead.

Can I still use my memory slots, the theme editor, the spectrum scanner?

OfficialMonster forkBerndt
Memory slots99, read and write — round-tripped on a radio hereDeclared the same 99 and writable; untestedNo. The app can ask the radio to print its memory dump, but it cannot write a slot
Theme editorYesDeclared; untestedNot offered
Spectrum scannerYesDeclared; untestedNot offered — even a 50-point sweep would run over four minutes at one command per five seconds
Screen captureYes — about four seconds over USB on the radio hereDeclared; untestedYes — it arrives as a raw image, about six seconds on the radio here
Seek, EiBi tuningYesDeclared; untestedNot offered: both need a tuning command this firmware has not been shown to have
LogbookYesDeclared; untestedThere, but an entry logged on it carries no frequency, mode or band — only whatever signal fragments the radio happened to send: the logbook fills itself from the status frame, and this firmware sends none

The Berndt memory line deserves the detail, because it is what owners ask about first. The dump command and the layout of a single row were recovered from the firmware’s own code, instruction by instruction, and the app can decode a row on that basis. But no Berndt radio has ever printed one. Every attempt here returned the dump’s header and nothing after it — including after two stations were stored using the radio’s own menu, which is still unexplained. Writing is blocked on top of that: the bulk-upload mode this firmware offers needs timing the app’s five-second pacing cannot meet, and a half-finished upload would leave the radio’s stored memories partly overwritten. So there is no write path, and there will not be one until that is settled on a radio whose contents are expendable.

Berndt: the rest of the honest list

On the official firmware, the differences that follow the version number rather than the firmware itself — fast tuning, Bluetooth, the CB band range — are in Firmware versions. For the connection itself see Connecting your ATS Mini, and for what the readings mean once you are in, Reading the status panel.

Getting any of the three onto a radio is covered separately, because the three are obtained in three quite different ways: Installing firmware for the official releases and the installer on this site, Installing the Monster fork for a project that publishes no releases at all, and Installing H. J. Berndt’s firmware for the one that comes as a single image from the author’s own page. Take a backup before any of them — Firmware backup and recovery.

Frequently asked questions

Which firmware does ATS Mini Controller work with?
Three: the official esp32-si4732/ats-mini firmware, the Monster fork, and H. J. Berndt’s separate firmware. The official firmware and the Monster fork are recognised automatically from the status data the radio streams. Berndt’s firmware is never selected without your confirmation.
Do I have to tell the app which firmware my ATS Mini runs?
No. It works it out from what the radio sends. The one exception is Berndt’s firmware, which the app asks about rather than adopting on its own — and it remembers your answer for that radio, so it asks once per radio rather than once per session.
Is it safe to confirm the Berndt firmware prompt?
Yes. Confirming makes the app more cautious: on that profile it sends only four commands, one at a time, and refuses anything that needs a burst of them. It asks first because Berndt reuses some of the official firmware’s characters and what they do there has not been established, and because this firmware never reports back whether a command was accepted.
Why did controls disappear after I flashed different firmware?
Because the app removes controls it cannot support instead of greying them out. On Berndt’s firmware the memory sidebar, theme editor, calibration, sleep, spectrum scanner and seek panel are absent from the page, along with their keyboard shortcuts. The radio’s own buttons still do all of it.
Why does the app wait about five seconds between commands on Berndt firmware?
The firmware accepts roughly one command every five seconds and silently ignores anything sent inside that window, so the app spaces its writes to match and shows a countdown while you wait. It is not a fault in the app or in the connection.
Does the Monster fork run on any ATS Mini?
No. Monster publishes only the octal-PSRAM build, so a quad-PSRAM board has no published image it can run, and the fix there is building the firmware from source with quad PSRAM enabled. On the one radio this project has seen Monster run on, PSRAM failed to initialise: the radio printed the error over the serial port and sent no status data, so remote control did not work.
Can the app save a station to a memory slot on Berndt firmware?
No. There is no write path. The app can ask the radio to print its memory dump and knows the layout of a row from the firmware’s code, but the bulk-upload mode this firmware offers needs timing the app’s pacing cannot meet, and a partial upload would overwrite stored memories.
What baud rate should I use for Berndt firmware?
115200, which is the app default. The firmware has no baud setting at all. The radio tested here answered at 115200 and stayed silent at 9600.