Version History¶
All releases are available on GitHub Releases.
Latest Release¶
v1.20.1 - 2026-10-18
A patch release. Nine field reports from one week, fixed — and the Tab5 can now be powered off from the drawer and from the browser.
- ⭐ Power off the Tab5, from either screen (Randy N4OPI). Randy's QMX+ is headless and runs from 18650s inside the radio; when the radio shuts itself off on low volts the Tab5 keeps draining the same pack, and he has already lost a set to undervoltage. There is now a Power off the Tab5 button in the settings drawer, directly under Restart, and the same control in the browser's Miscellaneous section. Both ask twice. It is a real shutdown, not a sleep: the radio is put back into receive first, so a transmission in progress cannot be left keyed, and settings are flushed before the power goes. I measured that it stays off with 5 V still present on the USB-C input, which is Randy's exact setup. The drawer button is in the Advanced section.
- ⛔ The CAT pause banner was sitting on the QMX's own menu header (Bryan N0LUF). Going to Radio menus and then System Config on a QMX+, Bryan's TCXO frequency changed by itself when he moved off the setting, and twice he had to factory-reset the radio to get serial access back. The pause banner was drawn over the terminal's header. Fixed.
- The final re-send could only ever send "73", never RR73 (Don WB0LQW). Don's RR73 was missed, his partner properly repeated the signal report, and the machine did not put the RR73 back on the air — it sent a plain 73 instead. The tracker was reading a flag that is always cleared by the time it is read.
- "Exclude stations worked before" excluded nothing (Randy N4OPI). The box worked; the label was wrong, and wrong in the way that matters — it sat among filters that really do hide rows, so there was only one thing it could be read to mean. It gates who the machine calls automatically, and it is now labelled for that. Whether it should also hide the rows is a separate question and Randy's original request is still open.
- A station already worked showed as new, once the log passed about 1000 QSOs (Gyula HA3HZ). The worked-call cache held a fixed 1024 entries and its overflow did nothing at all — no log line, nothing on screen. Once it filled at boot, every new contact went to the file and never to the cache, so the decode row stayed green for a station just worked and "Never auto-call worked-before" stopped filtering it. Gyula found it by deleting his log and watching it come right.
- The browser's Listen button could spend its click before the audio existed (Bryan N0LUF). On Firefox the audio context was created after a round trip to the Tab5, and by then the browser no longer counted it as started by your click. Chrome forgave this and Firefox did not. ⚠ Bryan's silence was not reproduced here, so this is a candidate for his report rather than a proven cause — fixed because it is wrong either way.
- The web listen diagnostics could not show a stall (Samuel W7STF). Hovering the Listen button reports frame gaps, re-primes and chunks dropped to clock drift. Samuel heard the audio stall and speed up while all three numbers sat still. They now repaint when any of them moves.
- FT8 on the 3.5 mm jack never decoded anything (Tony, @tony1tf, #19). Audio into the jack, spectrum on the glass, WSPR decoding off that same input — and FT8 silent at every local-oscillator placement. The FT8 slot loop waited for the radio's CAT connection before it would start, and in line-in mode there is no radio to wait for, by design. It waited for something that cannot happen. WSPR has no such gate, which is why WSPR worked.
- Line-in no longer pretends it has a dial (Tony, @tony1tf, #19). Tony picked 80m and said it should be showing audio frequencies. He was right, and half the screen already agreed with him: the axis was in audio Hz while the top bar read 80m with a band-plan strip of CW and SSB segments under an audio spectrum, with no radio attached. It now says Line-in mode and nothing else.
- The decoded-CW pane gets a Clear button, and a 2-or-4-line choice (Bryan N0LUF). With enough wrapped text it got hard to find the boundary between fresh and old decode. A click inside the pane still tunes the radio — that is deliberate, the waterfall underneath stays click-to-tune — so Clear is its own button.
- AM widths above 6.0 kHz are withdrawn (Samuel W7STF, and my own measurements). 8.0, 9.6, 10.0 and 20.0 kHz are gone from both screens; the list now stops at 6.0 kHz. Two different reasons, and they are worth separating. 10.0 and 20.0 kHz needed the decimator run at half rate, and measured on the bench that pins a processor core with no idle left at all and the audio stutters — Samuel had already said the 20 kHz filter should go. 8.0 and 9.6 kHz cost nothing extra: matched 60-second windows measured AM at 4.0 and at 6.0 kHz at the same processor load, so width is free up to that point and those two would have been free as well. They are withdrawn because they were never run end to end — they entered the list on a filter measurement and a listening report, and nothing since has confirmed them. I would rather offer only the widths I have actually measured.
- RX audio's enable and volume are now on the web API too. Every knob around them was already there — gain, pan, AGC, AM bandwidth, headphone mute — but not the switch that decides whether any of them run. And enabling RX audio needs a restart, which until now was said only in the serial log: the box ticked, stayed ticked, and nothing played. The Tab5 now tells you. The restart itself is unavoidable — the audio codec is opened at boot, before the USB host claims the memory it needs.
- FT8 pile-up handling (Randy N4OPI). Randy reported the machine working the first caller and the next, then returning to CQ even with a highlighted caller still calling. The slot loop advanced early the moment a decode addressed to us appeared, and the pile-up capture then saw only the decodes published up to that instant rather than the whole slot. That is fixed, and the diagnostic log now says what the pile-up held and why a candidate was passed over, which it never did before — an empty list, a short one and one where everybody was refused all printed nothing. ⚠ Not yet confirmed on air. It needs a live pile-up to exercise and I have not had one since the change.
- Documentation. The browser's DTR column is now described — it shipped in v1.17.0 with nothing anywhere explaining it, while Randy was asked to report on it. DT is corrected against the band consensus and matches WSJT-X; DTR is the raw offset and is the number that moves when a transmitter's timing moves. The DT column's own entry also now says that it reads
--until two separate stations have been heard. And the audio guide opens with "Getting audio — start here if you hear nothing": mode first, because FT8, FT4, JS8 and WSPR all run in DiGi and DiGi produces no audio by design; then the restart that enabling RX audio needs; then the browser's play button, which two people reported as broken audio when the stream was working and the button had never been pressed; then which of the three volume controls acts where.
⚠ Everything v1.20.0 said still stands. This release adds no new features beyond the power-off button.
Previous Releases¶
v1.20.0 - 2026-10-15¶
You can listen to the radio in your browser, and AM reaches broadcast widths.
-
⭐⭐ Listen to the receiver in the browser (Samuel W7STF, asked 2026-07-15). Click the ▶ button at the top right of the web page, immediately right of F, and you hear the radio through your computer or your phone. What is streamed is the Tab5's own demodulated audio, tapped after the filter and the AGC, so the browser and the speaker cannot disagree about what the radio is doing. It works even on a Tab5 that booted with its speaker off.
-
The speaker and the browser are exclusive, deliberately. A browser listener mutes the Tab5's speaker and hands the audio back when it stops or the page closes. Audio in two places at once is not something I wanted to build, and one listener at a time is what the design says.
-
Hover the ■ button and it tells you how the stream is doing — frame gaps, re-primes, and chunks dropped to clock drift. On a quiet network all three stay at zero. CW, CW-R, USB, LSB and AM produce audio; in any other mode the button lights and nothing arrives, and the tooltip says so.
-
The card was interrupting the audio, not the network. Browser audio broke up about twice a minute, and the cause was the 30-second write that mirrors the diagnostic log to the SD card: measured at 150–700 ms per tick and once at 4.8 s, long enough to run the player dry. That tick is now held off while anybody is listening, and the backlog waits in RAM, which is what the RAM ring is for. The cost, stated plainly: a crash while you are listening loses the tail of the diagnostic log.
-
⛔ Superseded in v1.20.1: 10.0 kHz and 20.0 kHz were withdrawn, along with 8.0 and 9.6 kHz. The AM list now stops at 6.0 kHz. The original v1.20.0 text follows. ⭐ AM reaches 10.0 kHz and 20.0 kHz. The AM list already spanned 2.0 to 9.6 kHz; the two widest settings needed the decimator run at half the rate, which costs a whole core, so the rate now follows the width you chose rather than the mode. Below 4.8 kHz of half-bandwidth nothing changed.
-
⚠ The QMX has no AM bandwidth of its own to match. Its firmware reports a fixed 3200 Hz in every mode but CW, and the eight selectable filter widths are CW-only. The Tab5's own AM filter therefore both exceeds and undercuts anything the radio offers, and the widths above are the only ones that matter.
-
⛔ Every FT8 action button disabled itself the moment you hovered it (Randy N4OPI and Ryan KK6DZB, same day). A v1.19.0 regression: the rule that locks the dial on the WSPR page had been pasted into the list of hover selectors, so hovering any FT8 button greyed it out. Fixed, and the web checker now refuses that shape.
-
The CW decode strip is four rows, and the row count is one number rather than two that could disagree.
-
JS8 speed is pickable on the JS8 screen itself, not just in the drawer, and a non-Normal submode now says which one it is on the glass. ⛔ A JS8 submode other than Normal decodes nothing and survives a power cycle, so a radio left on Fast or Turbo looks like a dead receiver — the label is there to stop exactly that.
-
The JS8 transmit pane prints the words going out, not "frame 3 of 7", and the frame counter stops counting when the run ends. The JS8 page no longer offers what it cannot do and names what it is.
-
A Flush button in the web UI, and JS8 lines that are addressed to you are marked as such.
-
The SelfSpotter screen says why the feeds are empty when receive audio is holding them off, instead of showing nothing and explaining nothing.
v1.19.0 - 2026-10-15¶
AM is demodulated on the Tab5 itself, and the SWR limit now stops a WSPR burst the way it has always stopped an FT8 one.
-
⭐⭐ AM, on the Tab5, from the I/Q (Samuel W7STF). Put the radio in AM and you hear it. The demodulator runs on the Tab5 from the raw I/Q the radio already sends, which is why the bandwidth is yours rather than the radio's: the QMX's own AM filter is fixed at 3.2 kHz and sits in its audio, not in the I/Q path. Tap BW in the top bar while in AM and choose 4.0, 6.0, 8.0 or 9.6 kHz. 6.0 is the default. Proven on air on a broadcast station at 7.260 MHz. Until now AM was silent and an AM station meant listening to it in USB.
-
Why 6.0 kHz and not the widest. A shortwave broadcaster transmits about 4.5 kHz of audio, so 9.6 kHz carries the whole thing — but the channels are spaced only 5 kHz apart, and at 9.6 the filter edge sits about 45 Hz from the next station's carrier. On a quiet channel take 9.6 and hear the station in full; on a crowded evening 6.0 is the one that keeps the neighbour out. Your choice is remembered.
-
⭐ Your SWR limit now protects a WSPR transmission (Bryan N0LUF). Bryan's radio transmitted all night after his Tab5 restarted mid-burst, and looking into it showed that the SWR limit did nothing at all in WSPR — it cut an FT8 or FT4 burst, while WSPR measured the figure, wrote it in the log and carried on. His antenna reaches 5.1:1 in the rain. WSPR now samples through the burst and stops it where it stands, and refuses to arm the next one until you clear the latch. Proven on air: 2.4:1 against a 2.0:1 limit cut a transmission after 11 seconds instead of 110. ⚠ The WSPR chapter has promised this for some time; the firmware did not do it.
-
One limit, one latch, whatever the mode. A bad antenna is a fact about your station and not about the mode you were using, so a trip in WSPR stops FT8 as well and the other way round.
-
The panadapter now asserts receive when it reconnects to the radio. If the Tab5 restarted while the radio was keyed, it reconnected and left it keyed. ⚠ This would not have saved Bryan — his radio's USB had already locked up, so nothing sent could reach it — and nothing on the Tab5 can guarantee the radio stops when the Tab5 is what died. Your radio's own
CAT config → Timeoutis the protection for that case; it is enabled by default at 120 seconds, and it has to be off if you use VOX. -
⛔ The browser acted on the WSPR page's top bar while the Tab5 refused to (John W5JSS). On the Tab5, Band, Mode, BW and Zoom are greyed out on the WSPR page because that page owns the dial. The web page drew them grey and then acted on them anyway. Picking 20 m from the browser wrote the FT8 frequency to the radio while WSPR carried on labelling its spots 160 m — so John saw no spots, a mismatch warning he had to find on the glass, and his own signal reported on a band he was not on. Four of the six things he reported were this one defect. The browser now refuses those four controls there, with a reason, exactly as the Tab5 does. Freq stays live on purpose, so a beacon off the standard dial can still be chased.
-
⭐ JS8 Slow, Fast and Turbo are selectable, from the JS8 speed row in the drawer and from the JS8 tab in the browser. ⚠ Only Normal is proven on air — the others are built and they transmit, but no contact has been made on any of them. Turbo was thought to be out of reach over the control link; the tone command measures about 250 microseconds, so the Tab5's side of it is fast enough. The radio's side is not measured.
-
A tap on a JS8 station now selects it (Ryan KK6DZB), who held a real JS8 QSO on the Tab5 and sent a full UI draft back. Tapping a row selects that station; the SNR and GRID buttons send to it; free text opens with the pair of callsigns already in place; a CQ is sent once rather than repeating. Three smaller things from the same work: the conversation filter worked on the glass and not in the browser, the target chip truncated a station to "tap a stat...", and the "free text sent" line was overwritten within a second of appearing.
-
A finished FT8 QSO held the radio for a whole extra cycle (Bruce N9JCV). The check that closes a completed exchange ran once per slot, so a QSO that finished early stayed busy until the next slot boundary. It now closes when the final transmission leaves the air — measured at 19 milliseconds on a real contact.
-
The version in the firmware could be a release behind. The version string was baked in when the project was last configured rather than when it was built, so a binary could report a release it was not. If you ever compared the version on your screen against what you flashed and they disagreed, that is why.
-
Every path that can key the radio is now written down and checked — eleven places that can arm a transmission, six of which can do it unattended, verified against the code by a tool that runs every release. This exists because v1.18.0 went out without my knowing my own release answered JS8 callers by itself, and a user had to tell me.
v1.18.0 - 2026-10-12¶
Your radio can now be told a PA voltage it must never exceed, and the Output power control has stopped inventing one.
-
⭐ "Never exceed PA voltage", a new setting in the Output power section of the drawer. Set it and Calibrate Power's sweep stops there, and the window tells you how many steps it will key before you start. It is off by default, so nothing changes until you set one. This is the only PA-voltage setting that nothing but you writes - Declared power, Output power and WSPR all write the radio's own Max. PA voltage, which is exactly why that one cannot be used as a limit. Use it for a 9 V build, a radio with a known weakness in the finals, or any PA you do not want driven to 12 V. Proven on hardware: a sweep into a dummy load with the limit at 11.5 V ran 43 of the 45 steps and put the radio back where it started.
-
⛔ Opening the drawer could change your Max. PA voltage, and store the change (Bryan N0LUF). Bryan ran Calibrate Power and found his Max. PA voltage had gone from 11.5 V to 12. The sweep was not at fault - it reads the voltage, restores it and confirms that by read-back. What overwrote it was the Output power control on the next drawer open: calibration deliberately sets no target of its own, so that control found nothing stored, picked a calibrated step anyway, sent it to the radio and then saved it as Bryan's own per-band setting, where it survived a reboot. A control with nothing stored now displays and sends nothing.
-
⭐ Portable and special-event stations were invisible in JS8, and now they are not.
G0ABC/P,W1ABC/4and special-event calls travel in a frame that needs a different codec, and until now the Tab5 refused that frame rather than risk putting somebody else's callsign on your screen. It reads them now, proven on air:SV2BBO/Awas decoded twice on 20 m and appeared in the station list under its full callsign. Three of the 52 JS8 decodes in that three-hour listen were frames of this kind, so it was a steady trickle of stations you could not see rather than a rare corner. -
Calibrate Power promised 45 steps when it was going to run 43. The dummy-load warning was written once when the window was built and never looked at your limit. The step count is what you use to judge whether you have time for the sweep, so it now follows the limit.
-
The saved diagnostic log was quietly throwing away history.
qmx-log-saved.txtis the copy that survives a power-off, and it was set to hold two generations of 256 KB on a partition of 934 KB. SPIFFS cannot reclaim space without a whole free block to work in, so it ran out long before reaching that size and dropped a whole generation each time, a few hundred times over. What you actually got was smaller than the 512 KB it was aiming at, and unpredictable. It now holds 256 KB that it keeps. -
Your PA-voltage limit now survives a backup. It was missing from the configuration backup, so restoring one silently put you back to no limit - on the one setting that exists to protect the radio.
-
⭐ The manual had become two manuals, and the printed guide was printing both. The README and the guide pages had drifted into separate accounts of the same features, and the PDF builder pulled from both into the same chapter - about an eighth of the printed guide was a stale copy of itself. Receive-from-the-jack and the web API had no chapter at all. The checker meant to catch this had four blind spots and was reporting clean. All fixed.
⚠ If you have set "Never exceed PA voltage", remember it caps the calibration sweep too. A band calibrated under a limit only describes the radio up to that limit, so raise it and recalibrate if you later want the full curve.
⚠ Everything said about JS8 in v1.17.0 still stands: it is a beta, a full automatic two-way QSO has not been completed, and nothing has yet been decoded through the 3.5 mm jack.
v1.17.1 - 2026-10-11¶
The web page stopped reading the radio's status in v1.17.0. This fixes it, and fills in the documentation JS8 should have had when it shipped.
- ⛔ The web page showed no band, no mode and no bandwidth, and never followed the Tab5 (Randy N4OPI). The status poll threw an error on every tick, so everything it paints stuck at whatever it had. The spectrum and waterfall kept running because they arrive over a separate connection, which is exactly why it looked alive but stuck.
- A page that stops reading status now says so, with a banner naming the error.
- ⭐ JS8 is in the documentation now, with a chapter the manual actually points at, eleven missing glossary terms including DT, a Troubleshooting chapter in the PDF, and receive-from-the-jack, GPS Stats and CW keyer speed written up in the README where the rest of the features are.
v1.17.0 - 2026-10-10¶
JS8 Normal arrives: the Tab5 decodes JS8 off air and can send free text back, with a conversation page of its own. A GPS Stats page with a live sky view. And the 3.5 mm jack can now be the receive source instead of the radio's USB.
- ⭐⭐ JS8 Normal — receive. JS8 joins FT8 and FT4 in the preset picker, and the Tab5 decodes it on its own: sync, LDPC error correction and the CRC check, all on the device. Proven on air against real stations, including other people's free text arriving intact (
F6HCM: SQUARESDR2, 20W, EF ANTENNA 10/(15/)20). Directed messages and heartbeats are read and shown with the sender's callsign and grid. - ⭐⭐ JS8 Normal — transmit free text. Type a message, see what it will cost, and send it. There is a Free text button under Call CQ on the Tab5 and a composer under the conversation on the web page. Before anything is keyed both tell you how many frames the message takes and how many seconds it holds the frequency, and show the text exactly as it will go out — upper-cased, spaces collapsed, anything unsendable dropped. A twelve-frame message is three minutes of transmitting and is not something to find out afterwards. A real JS8Call at the other end reassembled a three-frame message of mine and showed it complete, with the end-of-message marker it draws for a finished transmission. A CQ from the Tab5 was decoded by a second station.
- ⭐ A JS8 page. Stations and Conversation as two tabs: who is on the band, and what has been said. Rows are tappable, and the same page is in the browser.
- ⭐ GPS Stats. A page of its own under Radio in the drawer, and on the web. It draws a live sky view — the satellites in use, elevation rings and the compass axes — alongside the fix, the satellite count and which receiver is answering. The clock itself now says whether time came from a GPS on the Tab5 or from the radio.
- ⭐ Your grid, filled in from the fix. If the GPS has a position, the station grid fills itself. It will never undo a correction you typed by hand.
- ⭐ Both GPS receivers now work, and both are confirmed on hardware. The Unit GPS v1.1 on PORT.A — contributed by Eric (@ericmoritz) — gives you UTC and the full date offline: plug it in and set Port mode (relay / Unit GPS) in the drawer to Unit GPS v1.1. And the Module GPS v2.1 on the 30-pin M-Bus is now actually running rather than supported on paper, which is what v1.16.12 had to say about it. For that one it is DIP switch 6 — the silkscreen group reads backwards until you realise it is named from the host's side, not the module's. Either receiver drives the clock, the date and the sky view below.
- ⭐ CW keyer speed, from the browser and the Tab5 (Ralph Hellmig). A slider in the drawer above IF calibration, and the same control on the web page. It sets the speed over CAT and reads back what the radio actually took, because the radio is the authority and does not store it.
- ⭐ The 3.5 mm jack as a receive source — declared beta (Tony, @tony1tf, #17). Tony asked for an audio input for digital modes, and then ran a test build on his own Tab5 to find out where the jack actually lands — the mic ring arrives on the audio chip's third channel, which is the fact the whole feature is built on. An input selector lets you feed the panadapter from the headphone jack instead of the radio's USB audio, with a level meter, a clip indicator and the jack wiring drawn on screen. The signal path is real and measured, built around a 255-tap filter that a test harness caught me getting 33 dB wrong at 300 Hz before any of it ran. ⚠ No signal has been decoded through it yet. The path runs, the samples flow and the levels read correctly with nothing plugged in; that is as far as it is proven. In this mode the USB radio connection is off by design.
- Tap and hold a frequency preset to highlight it, slide to the one you want, and release to tune. No more mis-taps on a moving train.
- +6% more decodes, by opening the top end of the waterfall the decoder searches. Signal reports are also recalibrated against the reference decoder
jt9, from 154 paired decodes rather than a guess. - One transmission is one line in the list again. A single station's call could appear up to 23 times in one slot. The decoder now recognises the same message found at several frequencies as one message.
- The S-meter read a whole S-unit high below S9, and the browser was right all along. Fixed on the glass.
- "DT" meant two different things under one heading (Randy N4OPI) — the Tab5 and the browser showed different numbers for it. They now agree, and it stays blank until at least two separate stations have been heard, because one station cannot tell you whether your clock or theirs is off.
- The battery percentage was wrong in two ways. A charge limit of 80% put "85% (limit)" on the bar, and the percentage truncated so 79.59% read as 79. Both fixed against a measured internal resistance on two packs rather than a guessed one. A failed battery-chip read also counted as a flat pack and restarted charging.
- A GPS-equipped Tab5 no longer writes its settings once a second. The Unit GPS was committing to flash and setting the clock every single second — 86,400 times a day.
- More room inside the firmware. 47 KB moved out of the scarce internal memory, and seven task stacks that were sized on measurements taken before their deepest code had ever run — two of them 87% and 91% full — given proper margins. None of this is visible; all of it is the difference between a unit that stays up and one that does not.
- In the browser, to match the Tab5: the RX audio settings, the dB-range presets, the JS8 conversation pane, and update downloads that continue in the background.
⚠ JS8 is new, and I am calling it a beta. Receiving is proven on air. Sending free text is proven on air. A full automatic two-way JS8 QSO has not been completed yet — that is the next piece of work. Compound callsigns are not handled.
⚠ If you are upgrading from v1.16.11 or older, your waterfall rate will read 10 rows/s once, because v1.16.12 changed how that setting is stored. Set it again and it stays.
⛔ The licence changed from MIT to GPL-3 on 2026-10-09. Nothing about using or flashing this firmware changes. The obligation falls on anyone distributing a modified build, who must publish their source. The reason was JS8: the coding tables it needs exist only inside JS8Call, which is GPL-3, and a permissive licence put them out of reach.
v1.16.12 - 2026-10-08¶
GPS time and date from a receiver on PORT.A or from a QMX+'s own GPS, and a check on the date before it is trusted. A GPS receiver on the Tab5 itself, contributed by Eric (@ericmoritz) (#15); a GPS-equipped QMX+ hands over the date over CAT; the Tab5 no longer sets the clock of a radio that has its own GPS (#174); three faults in the date check (royord, #18). SD Files on the web page works again. The waterfall is smoother and its speed is set in rows per second. FT8 decoding about twice as fast on a busy band.
v1.16.11 - 2026-10-03¶
The WiFi link no longer dies when the co-processor hands over a full queue (Randy N4OPI, Bryan N0LUF) - a guard of mine refused a genuinely full queue and advanced the counter anyway, so the Tab5 and the co-processor lost track of each other for good. The microSD card is released before any reset, and Eject microSD and Restart the Tab5 are in the settings drawer.
v1.16.10 - 2026-10-02¶
Connecting the Tab5 no longer moves your radio to 160 m, and WSPR transmits in the cycle it was scheduled for (John W5JSS). The band scan now saves and restores frequency and mode; WSPR arming moved to its own clock-driven task (5-49 ms into the cycle instead of 1,437). The time sync no longer interrupts a transmission. Show CQs in my run filter (Randy N4OPI); live TX tone panel; RX audio switch says it needs a restart (Samuel W7STF); hosted WiFi relink (Bryan N0LUF).
v1.16.9 - 2026-09-30¶
With WiFi on, SD card writes no longer stop about 30 seconds after boot (Gyula HA3HZ, Randy N4OPI) - a fault that had stood under ⚠ for five releases. RX audio's 24 KB buffer sat in the one kind of memory the SD driver competes for; moved to external memory. Confirmed in the field on three units.
v1.16.8 - 2026-09-29
Static IP finally does what it says, a screenshot that doesn't tear, WSPR that doesn't lie about transmitting, and FT8 that doesn't forget a pileup mid-QSO.
- ⭐ Static IP and preferred network are now genuinely reliable. Randy N4OPI spent several days field-testing one build after another to get this all the way through - each round found a real bug hiding under the last: the reset buttons erasing the wrong settings partition, a config import leaving the static address bound to nothing, a settings save re-triggering static-IP logic that hadn't changed, and switching networks from the web UI killing the very HTTP connection that asked for the switch. Confirmed on his bench: switching networks or setting a static address no longer needs a reboot, and an address never follows you onto the wrong network.
- Screenshots download as PNG and no longer tear -
/ss.bmpnow freezes the region before streaming it instead of capturing a screen still being drawn. - WSPR no longer reports "transmitted" on a burst where the radio was never keyed. A flaky CAT link could let the key-down silently fail while the tone sequence played out anyway. Verified before any tones go out; a failure says so on screen instead of logging a phantom burst.
- FT8's re-send-to-a-partner-who-never-heard-you now tracks up to four partners at once, not one - finishing with station A and immediately working B in a pileup no longer drops A's re-sends.
- The Audio Settings top-bar shortcut is gone (Gyula HA3HZ) - it was easy to trigger by accident while working the Band/Mode/BW/Frequency pickers. The drawer button is now the only way in.
⚠ SD writes can still stop about 30 seconds after boot with WiFi on. Audio still breaks up with a web page open. The WSPR waterfall shows nothing during the wait between cycles rather than a live band view, unlike WSJT-X (Samuel W7STF) - a real request, not attempted this cycle.
v1.16.7 - 2026-09-26
The idle abort is root-caused and fixed, and the cause was the web interface quietly eating the memory everything else needs.
- ⭐ The idle abort is solved, not merely reduced. Measuring it settled two things: there is no leak (20.5 hours untouched trends upward), and the internal pool was being emptied 24 times a minute for 60-360 ms at a time, down to 143 bytes - too briefly for the old ten-second instrument to see.
- ⭐ The cause was the JSON the web interface builds - 495 pieces of a single reply assembled in the scarce internal pool, caught taking 8.7 KB across 311 allocations, while 14 MB of external memory sat unused. It now builds there. 24.1 droughts per minute became none in nine minutes, and free internal memory at rest went from 28 KB to 56 KB.
- The retry that should have absorbed it was 80 ms - shorter than most of the droughts, and chosen before anyone measured them. Now two seconds.
- A static IP belongs to a network, not to the unit (Randy N4OPI). Take the Tab5 elsewhere and the old address was still applied: it joined, had no route, and the status just read Off. Now tied to the network it first works on; everywhere else uses DHCP.
- WSPR names the band it refused, and warns above 1 W before you lose the finals (John W5JSS). A burst is 110.6 s of continuous key-down and a lower PA voltage does not shorten it.
- Also: refused transmissions appear on screen, the top bar follows a WSPR retune, the date editor steps in months and years (John Dusek), the speaker turns on if the headphone detector cannot be read and the auto-mute can be switched off (Samuel W7STF).
⚠ SD writes can still stop about 30 seconds after boot with WiFi on - a separate shortage, confirmed again and untouched here.
v1.16.6 — 2026-09-25
A hotfix for a crash that is older than the release it was found on.
- The unit could abort while sitting idle. Found on the bench 400 seconds into an idle panadapter session: a background task asked the C library for a lock, the small internal memory pool had none left, and the firmware stopped. ⭐ Not new in v1.16.5 and not caused by it — that pool has run with a recorded minimum of zero on essentially every build since v1.16.0, and the same abort has happened twice before in other tasks. If you are on v1.16.4 or earlier you have the same exposure.
- What is fixed: v1.16.5 moved the headphone-jack check onto its own task — a large improvement to audio timing — and that task took 3 KB of the scarce internal pool. Its working memory now lives in the plentiful external memory instead.
⚠ This reduces the exposure, it does not remove it. Everything in v1.16.5 is unchanged and still applies.
v1.16.5 — 2026-09-25
The decoder stops taking two slots to do one slot's work, three things operators asked for while operating, and a crash nobody had hit yet.
- ⭐ Decoding is two to three times faster, and stops dropping stations. On a crowded band a slot's decode took 11-14 seconds — longer than an FT8 slot, nearly twice an FT4 one — so the answer that decides your next transmission arrived after the moment to send it had passed. Work is split across both processors, and the split was decided before either had run. The second processor also carries USB, WiFi and the display, and measured at 0.1% of its own capacity while drawing the spectrum, so one half finished in 1.4 seconds and waited nine more for the other. Work is now taken as each becomes free, and the slower one left out when it contributes nothing. 11-14 s → 2.7-5.9 s, nothing dropped where 56-68 candidates a slot were abandoned, 3-15 stations decoded per slot instead of 0-3. An FT4 decode now finishes inside its own 7.5 second slot.
- FT4 stops listening to an empty slot before deciding what to say. FT8 has cut its capture short since v1.14; FT4 never got it. FT4 transmits for 5.0 of its 7.5 seconds, so 2.5 seconds of silence were recorded before the decode could start — landing the result 2.0 seconds into the next slot against a 2.06 second deadline. Every reply was within 60 milliseconds of missing its turn.
- Pick your next station while the closing 73 is still going out (Randy N4OPI). Clicking a caller in that window answered "Busy: working …" and threw the choice away — and that window is most of a minute, long enough for the station to leave the list. The choice is held and acted on as soon as the machine is free, and the reply is built fresh when it is sent. Same for Auto Pounce on the Tab5.
- A station calling you out of the blue starts a full automatic QSO (Randy N4OPI). It armed one message and left the rest to be clicked by hand — the sequencer ran only when answering a CQ, which is backwards: someone calling while you are busy is exactly when nobody is at the screen.
- AGC presets — Fast, Med, Slow and Off (Samuel W7STF), in Audio Settings, with the sliders as Custom. Off is a real bypass, not a very slow setting, and makes AGC Ceiling a plain manual gain. ⚠ The AGC only regulates once a signal is strong enough; on a quiet band every preset correctly sounds the same.
- The WiFi page says which network you are actually on, and warns when a preferred network will take over at the next restart (Randy N4OPI).
- Switching between FT8 and FT4 could crash the unit. Buffers were freed after a four second wait whether or not the decoder had finished — and on a busy band it had not. Non-deterministic, which is why it survived.
- One bad reading no longer switches the speaker, and following the jack moved off the audio path — late writes to the sound hardware fell from about 7% to under 2%. Audio is measurably cleaner than v1.16.4 even with the jack untouched.
⚠ Still unfixed: audio breaks up while a web page is open; with WiFi on, SD writes stop within about 30 seconds of boot.
Previous Releases¶
v1.16.4 — 2026-09-25
Four faults operators found in their own shacks, headphones behaving as everyone expected, and the measurement that finally explains the SD card.
- A station answering your CQ is answered in the very next slot — every time, not half the time. Decoding is shared between the Tab5's two processors, and only one of them was allowed to act the moment it spotted somebody calling you. Which one found your caller was chance, so the identical situation replied immediately about half the time and a full 30-second cycle late the rest. "Sometimes it works well, other times the transmission is delayed" was exactly right, and that variability was the fault (Gyula HA3HZ). Tested on the air over three contacts.
- Waiting for a busy station really is capped at six minutes now. When the station you called is working somebody else the Tab5 stands by rather than transmit over them — and the six-minute limit it claimed never worked: the counter reset instead of stopping, so it could wait over half an hour. Each held slot also cancelled the call it had just queued, so it never got back to calling them either. One fault, both symptoms — including "it continues to wait rather than calling again after an RR73".
- Headphones silence the internal speaker (Roy KI0ER). Sound used to come out of both at once, which made headphones close to useless in a quiet shack. Plug in, the speaker stops; unplug, it comes back. Nothing to set.
- Resource Management is now Audio Settings, and has its own button in the settings drawer, just below SelfSpotter. It is volume, AGC, binaural and the panoramic split — the old name described the machinery rather than the purpose. The top-bar long-press still works, but it shared its area with the Band, Mode, BW and Frequency pickers, so it was easy to open the wrong thing.
- Preferred network actually decides which WiFi you join (Randy N4OPI). Added in v1.16.3, it was only consulted after the Tab5 had failed to connect twice — so it worked when your usual network was down and did nothing in the case it was written for. It also needed a reboot. Both fixed. A Network name typed with the password left blank is no longer silently discarded either, and both fields now list the networks your Tab5 actually remembers.
- A restart caused by a power brownout now says so (Samuel W7STF). His unit rebooted repeatedly while he listened, and he reasonably suspected his own hardware — his logs held ten brownout resets, which is the supply rail dipping, not a crash and not a fault in the Tab5. The firmware knew every time and told nobody. Now it is on screen at start-up.
- The FT8 transmit tone saves from the settings page. It said Saved, wrote the value down, and never told the radio.
⭐ The SD card was never the problem. The recurring "SD dot goes yellow and writes stop" is root-caused: the card driver is refused a memory buffer, so the write never reaches a card that is mounted and perfectly healthy. This is why reformatting, reseating and replacing cards has never helped anybody. Every diagnostic log now opens with a start-up memory ledger showing where that memory went — the audio output stage alone accounts for 46.5 KB of it. The same shortage is what silently stops Bluetooth starting when the symbol reads grey with the box still ticked. Diagnosed and documented; not yet reduced, because the remedy trades against audio quality and deserves proper testing first.
Audio and binaural CW remain a beta, and audio still breaks up while a web page is open — close it while you listen.
Previous Releases¶
v1.16.3 — 2026-09-23
The audio fix v1.16.2 was meant to be, all four audio controls on one page, and three things that were quietly misreporting their own state.
- The crackle really is gone this time. v1.16.2 said the break-ups were fixed, and they were — but what shipped was the first of five attempts at the correction, and you could still hear it working. The real fault was a buffer with room for one extra sample where the corrector needed dozens, and a counter that ran backwards when it hit that wall and started inventing waveform. That is why it crackled even on an empty band with no signal at all.
- Every audio control is now in one window. RX Volume has moved out of the settings drawer and into Resource Management, next to the gain controls that decide the same thing your ears hear. ⚠ The drawer's RX Audio section is gone completely, including its on/off tick box — long-press the top bar to reach it now.
- "Gain" is now called AGC Ceiling, and goes up to 1500. It was never a plain gain: it sets how hard the automatic gain is allowed to lift a weak signal. The old name had people hunting for an AGC that was already there. The extra range is for the Tab5's own speaker, which needs more than the old ceiling of 800 allowed.
- Attack and Release are yours to set now — 1–50 ms and 10–500 ms. Shorter attack catches sharp CW edges; longer release is steadier on CW, shorter follows speech better. Both are remembered and travel in a config backup.
- A GPS that takes a while to lock is no longer missed (John W5JSS). Detection ran once, about 45 seconds after switching on, and whatever it decided then stuck for the rest of the session — so a receiver still hunting for satellites was written off as "no GPS" until you rebooted. A QMX+ here locked 25 minutes after boot and is now picked up automatically. If yours still says NTP, check the radio's own GPS viewer: the panadapter only accepts a fix that genuinely agrees with network time.
- WSPR hands the radio back. WSPR has to transmit in Digi, and it was leaving the radio there afterwards — every cycle, for ever. Since the QMX remembers its mode, it then powered up in Digi too, which looked like the mode failing to save. It now puts back whatever mode it interrupted. ⚠ Built and reasoned through, but not yet watched through a live WSPR cycle.
- Preferred network (Randy N4OPI). The Tab5 remembers up to six networks, but when it fell back it always took the loudest — wrong if you have a DMZ next to a house network. Name the one you want in the web page's WiFi settings and it wins whenever it is in range. Leave it blank and nothing changes.
- The SD dot tells the truth. It turned yellow about ten seconds into any WiFi session and stayed yellow regardless — the same colour on a perfectly healthy card and on one where every single write was failing. Green now means a write actually reached the card in the last 90 seconds.
Audio and binaural CW remain a beta, and audio still breaks up while a web page is open — close it while you listen. That one was measured again this cycle and the most likely cause was tested and ruled out, so it is still open.
⚠ With WiFi on, writes to the microSD card stop about 30 seconds after start-up on at least one bench unit — the memory the card driver needs is taken by WiFi and never comes back. Your start-up backup always lands; nothing after it does. Known, measured, not yet fixed.
Previous Releases¶
v1.16.2 — 2026-09-22
Audio you can listen to for an hour, and a microSD card that stops being thrown away.
- A strong signal can no longer take your ears off. The automatic gain lifted everything to within a hair of full scale, so a loud station arrived at maximum and anything faster than the gain could follow ran into a hard clip — loud and harsh at once. A proper peak limiter now holds the peaks and leaves the average level alone, so quiet stations are as loud as they were.
- The break-ups in the audio are gone, and they were never the CPU. Your QMX sends about 47,885 samples a second; the Tab5's codec plays exactly 48,000, from its own crystal. Nothing reconciled the two, so the buffer emptied a little every second and a fragment of silence was played instead — roughly every three seconds, with no error recorded anywhere. The output is now locked to the clock.
- LSB is fixed (Gyula HA3HZ). The audio was taken from the wrong side of the dial, so you heard whatever was mirrored there instead of the station on screen. The spectrum had always been right; only the audio was wrong.
- If your audio is too quiet, check which control you are on (Samuel W7STF). The sliders marked Volume stop at 100. Gain — the one that lifts weak signals — is on the RX Audio line in Resource Management and runs 50 to 800.
- A working microSD card is no longer discarded (Dennis WN4FLA). The card mounted, the first diagnostic-log write failed, and after five tries the Tab5 decided the card had been pulled — green dot, then yellow, then grey, for the rest of the session. The card was never gone; every other file on it wrote perfectly at the same moment. The log also never rotated at its 5 MB limit on any unit with WiFi on, and the Tab5 now tells you how full the card is when a write fails.
- Pause is on the web page (Randy N4OPI), with play/pause symbols, and pressing it again takes the pause back. Pausing no longer costs you the contact (Gyula HA3HZ) — the quiet slot it creates was being counted against the six cycles before giving up.
- Reboot the Tab5 from the browser (Randy N4OPI) — Miscellaneous menu.
- KM and AGE no longer collide on the decode list (Gyula HA3HZ).
Audio and binaural CW remain a beta. Audio still stutters while a browser has the panadapter open — that is the Tab5's first processor running out of room, it is measured, and it is next. Close the web page while you listen.
Previous Releases¶
v1.16.1 — 2026-09-22
The fixes you asked for after v1.16.0 — and one thing v1.16.0's notes promised but never actually shipped.
- The Pause button is there now. It was written up in the v1.16.0 notes and then drawn just off the edge of its panel, so nobody could find it — Randy N4OPI reported it missing and he was right. It is the fourth button in the mid-QSO row, it works while calling CQ as well as mid-exchange, and it reads Paused while armed so you can see it is doing something. Skipping a slot on purpose also no longer counts against giving up on the contact.
- A Gain control for the audio. Several of you said the audio was very quiet even at full volume (Samuel W7STF, Bruce N9JCV) — that was the automatic gain's ceiling, not your volume control, and there was no way to reach it. It is now a slider on the RX Audio line in Resource Management.
- The three panoramic CW controls are real controls. Pan Width, Blend and Overlap were described as adjustable while you listen, and had no control anywhere on the device. They sit under Binaural CW now. All four settings are remembered across a restart and are carried in a config backup.
- SSB is intelligible again. (Gyula HA3HZ) The automatic gain was reacting about eight times too slowly for speech, clipping the start of every syllable and then staying ducked through the ones after. Morse never showed it, because a steady tone never tests how fast the control moves.
- WSPR keeps to its minutes. (John W5JSS) A 20-minute schedule could walk off the minutes it started on after a few hours. The schedule is now anchored to the clock, so "2 transmits in every 20 minutes" means the same minutes every time, and a missed cycle or a restart no longer shifts it.
- Resource Management is easier to read — Binaural CW sits with RX Audio, the network feeds are grouped together, and controls that cannot do anything yet are greyed out properly instead of looking live.
!!! warning "Switch the QMX on after the Tab5 has settled"
Wait until the spectrum is running and WiFi shows a network, then power the radio.
Switching it on while the Tab5 is still starting up leaves the Tab5 short of memory
for the rest of the session — most visibly, the web interface may stop responding.
This is a firmware limitation and it is being worked on.
Audio remains a beta. It is there to be tried and reported on. Binaural CW works best at 300 Hz bandwidth and up; below 200 Hz there is little separation to be had.
v1.16.0 — 2026-09-21
Audio on the Tab5, as a beta — and a Pause button during a QSO.
- You can listen to the radio through the Tab5. The I/Q the QMX already sends is turned into sound on the device. This is new ground, and the whole audio part is a beta: it is there to be tried and reported on, not to be relied on yet.
- Panoramic CW split. Two stations on different frequencies are placed left and right across the stereo image instead of landing on top of each other. Three controls are live while you listen — pan width (how far apart they sit), pan blend (how much of the effect is mixed in) and overlap (how wide a slice each side takes). You adjust them by ear, mid-QSO, not in a menu.
- Binaural CW is a first implementation. Use it at 300 Hz bandwidth and up. Below 200 Hz do not expect much separation — at that point the two signals share too much of the audio passband for any amount of panning to pull them apart. That is a limit of the bandwidth, not of the setting.
- Audio costs resources, so not everything can be on at once. Long-press the top bar on the Panadapter page to open Resource Management — that is where audio is switched on and off, and where you can see what it is competing with. Expect to turn something else down to make room.
- What is planned next: the same audio features in the web interface, with only the I/Q channels sent to the PC and the processing done there — so your computer does the work instead of the Tab5. Full detail, limits and the reasoning are in the Audio guide.
- I am looking forward to the feedback. What works, what does not, which bandwidth you actually use, and where you hit the resource limits.
- A Pause button during a QSO (Randy N4OPI). Skip a single transmission to check whether your slot is still clear, then carry on with the same message. Cancel breaks the exchange; Pause does not. It sits alongside Re-send / RR73 / 73 and appears only while an exchange is running.
v1.15.1 — 2026-09-19
More working memory for WSPR, one file for the diagnostic download, and the same column order on every list.
- WSPR has more room to work in. The routine that picks out signals needs a large block of memory, and on a busy page it could be left with only just enough. When it came up short it simply reported nothing found for that cycle — so a cycle could come back empty with traces plainly visible on the waterfall, most often after moving between pages. Freeing 2.8 MB removes the squeeze, and if it is ever short again it now says so instead of going quiet.
- The diagnostic download is a single zip file. Both logs now arrive as one
qmx-diag-….zipyou can attach to an email, instead of two separate downloads your browser had to be persuaded to accept. Behind that single file the browser still fetches the two logs from the Tab5, and it now does so one at a time: downloading the live log clears it from the Tab5, so a transfer that failed used to take the log with it. (John W5JSS.) - One column order on every list. FT8, the SelfSpotter list and WSPR now read left to right the same way, with capitalised headings, so your eye lands in the same place on each screen. The SelfSpotter list gains a GRID column — the locator the receiving station actually sent.
- Calibrate Power warns if your radio is turned down. It never sweeps past the Max PA voltage your radio is holding, which is right — but if a WSPR session left that at 6 V, the calibration measured only as far as 6 V and then held you there. It now says "Radio max is only 6.0V — raise it first!" in amber before you start. (Rick W5NR.)
- WSPR will not beacon on a band you have not calibrated. The power figure travels inside the transmitted message and is published worldwide, so a burst on an uncalibrated band would tell everyone a number the Tab5 cannot stand behind. Switching transmit on now says which band needs calibrating instead of starting a countdown.
- The WSPR panel has room to breathe. The stations-per-cycle strip is gone — the list already tells you the same thing — and the transmit-tone line explains itself in two lines rather than shorthand.
- Spur removal stays on the panadapter. It works by shifting your dial 25 Hz and putting it back, and if you changed page or band mid-measurement it could put the old frequency back. It now runs only where it is useful, and never writes a frequency it has not re-checked.
- The recovery flasher no longer erases before it checks. If you ever need
flash-recovery, it now confirms every file is present before touching the chip. It previously erased first and could then fail, taking your settings and LoTW certificate with it.
!!! info "Over the air, from v1.15.0"
If you are on **v1.15.0**, this updates normally over WiFi. If you are still
on **v1.14.x or earlier**, you need the one-time USB-C flasher first — see
the v1.15.0 notes below. Pressing update on an older build will fail
harmlessly; on v1.14.0–v1.14.3 the message will not be helpful, because
those builds predate the size check.
v1.15.0 — 2026-09-18
!!! warning "This release needs a USB-C cable, once"
**v1.15.0 rewrites the partition table**, and an over-the-air update cannot
do that — it can only ever write the app, never the map of the flash. That
limit is deliberate: it is what stops a failed download taking the layout
with it.
So v1.15.0 arrives as a **flasher download**, over the same USB-C data cable
and the same script you used to install the firmware the first time. It is
the only release that needs it, and everything after it is over the air again
— with more than twice the room.
**There is no over-the-air image attached to this release, on purpose.** If
you tap the update notice it will say the download could not be reached. That
is the release refusing to be installed the wrong way, not a fault.
**Your settings, memory channels, QSO log and LoTW certificate are kept.**
Press **Enter** at the flash-type prompt — never **E**, which erases the whole
chip including your LoTW private key. **New users are unaffected**: a first
install already uses the flasher.
The band-plan slider is a window you drag, the settings backup was missing thirty-one settings, and WSPR will not beacon in split.
- What the cable buys. The firmware had 47 KB left in its 4 MB slot — about one feature from refusing to build. Dropping a third, never-used copy of the firmware leaves two slots of 6.81 MB with 2.87 MB free. Over-the-air updates work exactly as before afterwards, alternating between the two.
- The band-plan slider moves the window, not a dial. Grab the framed block and the whole picture travels with it — block, frequency marker and filter passband together — and it stays where you let go, with the radio following. It used to write a frequency and let the display decide where to land, so the box sprang back the moment you lifted your finger. The grab area is about 8 mm tall now rather than 4, because the strip alone was never a finger, and the passband fades back twice as fast on release.
- Your Config download was missing 31 settings, including the power calibration (found from a question by Bruce N9JCV). That calibration is an hour at a dummy load per band and was the one thing in the file nobody could recreate from memory — it had never been included. Also added: the per-band power target, the WSPR schedule and band hopping, Field Day class and section, the activation reference, the FT8 transmit tone and twenty more. Two of them were worse than missing — the file would accept the transmit tone and its hold but never wrote them, so saving and restoring quietly reverted both.
- Three settings reached the web page that had been Tab5-only: waterfall speed, WSPR band hopping, and whether your QMX has GPS. The last is not cosmetic — claiming it stops the Tab5 keeping the radio's clock.
- WSPR will not beacon while the radio is in split (John W5JSS). In split the radio transmits on VFO B while still reporting VFO A, so every spot you publish names a frequency your signal was never on. The Tab5 asks the radio before each transmission and holds the burst, saying so on screen. It will not clear the split for you — that is your setting, and on the QMX it cannot be cleared over the cable anyway.
- The WSPR transmit block was unreadable (John W5JSS): red text on an orange background, a contrast ratio of 1.15 to 1. Black on orange now. The same block sometimes kept the orange of a finished transmission while merely counting down.
- The on-screen keyboard came back on a second tap (Samuel W7STF). Tapping a field that was already selected did nothing — nine fields across seven windows.
- A missing SD card says so: the indicator is crossed out in grey, and tapping it explains what a card is for. A tap anywhere on the bottom bar used to open the updater.
- The WSPR transmit schedule is two plain counts — transmit cycles and receive cycles in a repeating group — with the result written out in words as you change it. "1 in 5" meant different things to different people.
Previous Releases¶
v1.14.4 — 2026-09-18
The reboots are fixed, countries are spelled out, and 79 callsign prefixes named the wrong country.
- The reboots. Fifteen bench runs before the fix lasted a median of 15 minutes; with it the same bench ran 14.7 hours with none. Three rarely-read arrays sat in the small internal RAM that USB, WiFi and the SD card all need — moving them freed 17 KB. One exhaustion, arriving wherever the next allocation happened to be.
- Opening the settings drawer cut your transmit power to WSPR's declared level and left it there.
- Countries spelled out on the FT8 and WSPR lists, 79 prefixes corrected (Taiwan as China, Ukraine as Russia, sixteen UK prefixes as England), and stations with no grid now show an approximate distance.
- WSPR bursts per transmission (John W5JSS), Antenna Tune shows SWR, watts and seconds left (Randy N4OPI), Calibrate Power stops at your own Max PA voltage (Bruce N9JCV), and a Flush button in the SelfSpotter header (Uwe DL8UG).
Previous Releases¶
v1.14.3 — 2026-09-17
Fixed a v1.14.2 crash: picking a new TX tone from the web UI while a QSO or CQ run was armed could reboot the Tab5.
- Reproduced 100% on two benches (Randy N4OPI) - it never happened while actually transmitting, only while armed and waiting. Same underlying bug as the v1.14.0 crash - a whole settings structure copied onto a task's stack just to read one value - reached this time from the web server's own task instead of the display or CAT tasks. Fixed the same way: read one setting at a time. Reproduced and confirmed fixed on the bench before release.
- The TX Hold checkbox not applying, reported in the same message, was very likely the same crash: tone and hold travel in one web request, and the device rebooted while handling the tone half, before hold was ever reached. Confirmed applying and reading back correctly now.
- Output power stuck at WSPR's level after a reboot. Max. PA voltage lives in the radio and a Tab5 restart does not reset it - so if WSPR had turned it down for its declared power (as low as 2.3 V, about 200 mW) and the Tab5 was then restarted straight into FT8, everything went out at that level while the Output power slider showed the figure it was meant to be at. Handing the power back only ever happened when you left the WSPR page live, and a reboot has no such moment. The radio is now told the correct level again whenever the CAT link comes up.
Previous Releases¶
v1.14.2 — 2026-09-17
General sluggishness since v1.13.0, root-caused — plus a web UI hang, an output-power surprise after calibration, and a SelfSpotter map bug.
- Sluggishness some users saw starting with v1.13.0 (Randy N4OPI), including with the SelfSpotter map screen closed, root-caused: SelfSpotter's PSK Reporter feed connects over its own background task from boot regardless of whether the map is ever opened, and that task was running at a higher scheduling priority than the display, with no core assigned to it — so it could hold the display up on every incoming report. It now runs at a lower priority, pinned to the second core. Not yet confirmed fixed on Randy's own hardware.
- The web UI's "find open slot" tool could hang on "Applying..." and lose contact with the QMX, needing a power cycle, only mid-QSO or CQ run (Randy N4OPI): a frequency-mode command could collide with an in-progress FT8/WSPR transmit burst on the radio's own control link. It now waits its turn. The page's warning text was also backwards (said it would be refused while transmitting; it actually applies automatically once the burst ends) and Apply now gives up cleanly after 8 seconds if this ever recurs.
- Output power reading near-zero right after Calibrate Power finishes (Gyula HA3HZ) — a slider defaulted to its lowest setting and wrote that to the radio unconditionally. It now reads the radio's actual level when nothing has been chosen yet.
- SelfSpotter: countries like Italy, Denmark and Greece drew as boxes on the map, from a coastline-simplification bug — fixed. Zoom raised 10x → 50x. The settings drawer's own content was taller than the panel and silently hid the Flush button — fixed. A screenshot of the map now carries your callsign, dial frequency and UTC time in its own header line (Gyula HA3HZ), and every screenshot download gets a timestamped filename.
- Colour cleanup: the map, the Live Spots lane and the network drawer's spot checkboxes now share one colour scheme instead of three that had drifted apart.
- Waterfall scroll speed is now a real setting (1x–4x) instead of a fixed rate.
Previous Releases¶
v1.14.1 — 2026-09-16
A fix for a v1.14.0 crash on tuning or QMX power-on.
- Fixed a crash reported by Martin Howard and Rick Trommer W5NR - thanks to both for the quick reports.
spots_any_source_enabled()copied the whole settings struct onto a task stack as small as 4096 bytes — the render task, and independently the CAT poll task, either of which runs on nearly every frequency change — overflowing it on almost any tuning motion, or the frequency update an immediate QMX reconnect sends. Fixed by Uwe DL8UG: four narrow getters reading one bool each, instead of the whole struct. If you are running v1.14.0, please update.
Previous Releases¶
v1.14.0 — 2026-09-16
Calibrate Power: WSPR Declared power now fits what the QMX actually does, as closely as its own protocol allows.
- Calibrate Power, a new drawer feature: sweeps the QMX's Max. PA voltage through 45 points (1.0–12.0 V) on a dummy load, keying a real DiGi TX;/TA;/RX; carrier at each point — the same primitives a WSPR/FT8 burst is built from — and recording the real measured RF output from the radio's own
PC;readback. Two earlier designs measured the wrong thing entirely before this one: QMX SWR Tune mode scales power independently of Max. PA voltage, and a bare CWTX;with no audio tone produces no RF at all. Reached from a "Calibrate this band" / "Recalibrate this band" button wherever it's needed. - WSPR Declared power now only offers standard dBm steps the current band's calibration genuinely reaches, each labelled with the real measured wattage — not the textbook figure a step's name implies. A step that measures 3.6 W now reads "(3.6 W)", never a stale "(5 W)". The matching is a real classification (the nearest legal WSPR dBm step for a given measurement, the only rounding the WSPR protocol itself can transmit) rather than a fuzzy tolerance window, so a step's label can no longer disagree with why it was offered.
- The old fixed "hold the finals at 6.0 V for the whole WSPR beacon" guard is retired. Protecting the finals over WSPR's long key-down is now simply picking a low declared level — the same choice as any other row on that dropdown — with a plain warning above 1 W. The WSPR page's own live "PA X.X V" line now also states the real wattage and is coloured with the same thresholds as the Declared power dropdown.
- General "Output power", a new slider sharing Calibrate Power's own data, sets output for every mode other than WSPR (FT8, CW, SSB, ...) — genuinely independent of WSPR's declared level, and hidden entirely on the WSPR page since Declared power always owns the radio there. The standalone "Calibrate Power" button beside Antenna Tune is gone, replaced everywhere by the inline calibrate/recalibrate buttons.
- SelfSpotter's callsign-to-country table rebuilt from an authoritative source (Uwe DL8UG): ~580 hand-curated prefixes replaced by ~4,100 generated from a cty.dat-style reference, plus a new sortable ISO country-code column on the map's LIST tab.
- Every drawer dropdown now unfolds its full option list with no scrollbar.
Previous Releases¶
v1.13.0 — 2026-09-14
SelfSpotter ships to users for the first time, and a release-night audit of its own documentation.
- SelfSpotter (Uwe DL8UG, who wrote the whole thing and sent it as a patch), a full-screen map and list answering "who is hearing me right now" from PSK Reporter, wsprnet, and RBN's self-spot feed, opened from the settings drawer. Ships off by default. Land is filled in, not just outlined — LVGL has no polygon fill, so this is a small even-odd scanline rasteriser of my own, reusing the same per-ring point budget already tuned to keep this screen from freezing. Land colour and the coastline's own contour both went through several rounds against the real screen — too bright, then eating the historic traces, then right — and the trace colours and line widths went up too, for contrast against the new fill.
- A deterministic "Power-cycle QMX" sequence (Randy N4OPI), for the web UI's remote relay: pulse off, wait, pulse on, wait, then confirm over CAT and report whether the radio actually came back. A single pulse toggles the radio with no way to know which state it left it in — this one does.
- Diagnostic log volume cut from roughly 300 lines a minute to under 50 on a quiet bench. Several sources were logging every second, or every message-window, with nothing new to say each time.
- The "Need guidance?" panel and the manual caught up with what the firmware actually does. Seven real features — Radio Menus, Still Spectrum, FT8 Simulation Mode, SWR protection, Antenna Tune, RIT, and "Release radio" — had no way in from the guidance panel at all; they do now. Two guidance bugs are fixed: the WSPR page was showing the panadapter's own trouble rows, and the SelfSpotter map (an overlay, not its own screen) was leaking whichever page it was opened from. And the manual's own description of how to reach the spot map — a swipe gesture and an opt-in setting, both removed a while back — is corrected throughout.
Previous Releases¶
v1.12.4 — 2026-09-10
One bug, twelve releases old: tapping a spot moved the spectrum away from it.
-
Tap a spot after tuning away with the dial, and the spectrum and waterfall jumped several kHz while the spot line itself stayed where it was. The overlays were the half that worked — the frequency axis, the spots lane, the VFO cursor, the passband tint and the RIT marker all moved to the new window, while the FFT carried on extracting the old one, so the trace was displaced by exactly the distance you had dialled away before the tap. It reads as the radio having tuned somewhere else, which is the worst possible shape for it.
The routine that re-frames the display has five exits, and four of them publish the new position to the FFT. The fifth — a jump whose passband still fits the current view, so the picture holds still — set the position and returned without publishing it. That is the exit a spot tap normally takes.
⚠ Only reachable above ×1 zoom, since at ×1 the view is the whole capture window and there is nothing to publish. The still display is a ×2-and-up feature and the fault also needs a jump whose passband still fits, which is how it survived from v1.10.6 through v1.12.3 unnoticed. Found and fixed from the Waveshare port branch, then verified on the Tab5 and independently on a second board.
Previous Releases¶
v1.12.3 — 2026-09-10
Everything reported in the first day of v1.12.2, and one of them was making the web page look broken.
- The web spectrum stopped for up to half a minute at a time (Gyula HA3HZ). Writing the microSD card holds the spectrum stream while it happens, and on this hardware that write can take a very long time — measured on the bench at 3, 10, 15 and once 29 seconds, for four kilobytes. The spot list kept updating throughout, because it arrives a different way, which is what made it look like a fault rather than a pause. Background card writes now wait while a browser is actually watching, and go through anyway after three minutes so a crash still reaches the card — about six times rarer rather than gone, since the underlying slowness is the card-and-WiFi contention this hardware has always had. It was not the CW transcript added in v1.12.2, which is where I first looked; the diagnostic log has been doing it every 30 seconds since long before.
- ⛔ WSPR band hopping no longer retunes the radio while you are in FT8 (Dirk DK7CVD). With a hop list set, it kept hopping after you left the WSPR page and wrote WSPR frequencies to the radio mid-session. It now runs only while WSPR is actually receiving — which still includes having the drawer or a window open over the page.
- The PA voltage is properly restored when you leave WSPR (Dirk DK7CVD). The guard reduces transmit voltage for WSPR's long key-down and puts it back afterwards; the "put it back" was sent once and never checked, so a single lost command left the radio reduced for the rest of the session and everything else transmitted at about a watt. The radio now has to confirm, and it is retried until it does.
- Coming back to the WSPR page no longer looks like a dead page (Gyula HA3HZ). A capture can only start on an even minute, so arriving part-way through a cycle means up to about 110 seconds with the previous cycle's picture still on screen. The waterfall now dims and says "waiting for the next cycle — N s".
- The settings drawer sits above the decoded-CW line (Michael K Johnson KZ4LY), instead of the CW line drawing over the drawer.
- The QSO log opens showing contacts (Gyula HA3HZ), rather than two counts over an empty list. The button is a straight Today / All toggle.
Previous Releases¶
v1.12.2 — 2026-09-10
A fixes release, and two of them are things earlier releases said were working when they were not.
- ⛔ The decoded CW transcript was never written to the microSD card while WiFi was on (Uwe DL8UG, and Gyula HA3HZ). Switch it on, work a session, pull the card, and
cw-decode.txtheld only whatever the first few seconds after boot had caught: the code that writes it had one caller, inside the background burst that stops the moment WiFi comes up, so the text kept accumulating in memory and nothing ever emptied it onto the card. v1.12.1 "fixed" this by adding a warning that said it was not happening. It now writes on the same 30-second cycle as the diagnostic log, a failed write no longer throws the characters away — they stay in memory until the write has actually landed — and a restart no longer welds two sessions onto one line. The fix is Uwe's, sent as a patch and applied nearly as written. - The card no longer gives up for the rest of the session. Three failed background writes in a row used to stop the mirror permanently, sometimes within four minutes of switching on, after which nothing in memory reached the card again until a restart. It now waits longer between attempts, up to five minutes, and keeps trying — the interference it is working around comes and goes, so stopping forever threw away every later chance (Uwe DL8UG).
- WSPR was quietly costing the receiver its own audio. Under load the decoder ran on the same processor core as the USB audio service, and audio the radio had already sent was being lost with nothing to show for it — up to 1.4 % of it, which across a two-minute transmission is more than a whole symbol of drift and enough to stop a cycle decoding at all. It now runs on the other core, where there is room. The decoder itself was never at fault.
- A three-minute WSPR waterfall, with marks that stay on their own cycle. Every visible cycle is labelled with its own time and each letter is drawn against the cycle it belongs to instead of drifting into open carpet. Letters appear as each line decodes rather than all at once at the end, the alphabet rolls on across cycles so two neighbouring cycles cannot both have an "A", and a crowded mark steps down a row instead of being nudged sideways onto the wrong signal. Clear now clears.
- The decoded CW line really does go away when you leave CW (Gyula HA3HZ). v1.12.1 addressed this and did not finish the job — the line is five separate things on screen and only two were being taken down.
- The Tab5 wakes up on the page it was left on, instead of always returning to the panadapter.
- The manual reads properly again, in the printable guide and on the device. Notes and warnings were coming out as literal
!!! notemarkup in the PDF and as unlabelled boxes on the Tab5, a bullet split across two lines became a bullet plus a stray sentence, and a sub-heading could read as part of the paragraph above it. The Reader also drew the page underneath itself when opened from the WSPR page. - The remote power-switch schematic is corrected (Randy N4OPI, who spotted his own error and sent a new drawing). The jack on the interface module is a plain 3.5 mm stereo audio jack; it was written up with a 2.5 mm part number. The jack that goes inside the radio is still 2.5 mm, and the lead between them is unchanged.
Previous Releases¶
v1.12.1 — 2026-09-09
A feedback release: seven things testers reported in a day, and the remote power-switch modification documented properly.
- ⛔ The WSPR page's Band button opened the panadapter's band list and retuned the radio. The top bar's own Band area sits above the WSPR panel and was winning the touch, so picking a band from it wrote an FT8 frequency straight to the QMX — leaving the radio on one band while WSPR carried on capturing and labelling its spots with another. If you have used the WSPR page on v1.12.0, check which band your radio is actually on. The top bar is now inert and greyed there, except the frequency, which stays live so a beacon found off the standard dial can still be chased. A Tab5 that woke up on the WSPR page was missed by the first fix and is covered too.
- Letters on the WSPR waterfall, and an
Scolumn to read them by. Every trace the decoder looks at gets a letter — A, B, C… left to right by tone — drawn on the carpet in the decode list's own font, with the cycle's UTC time at the left of the row; the same letter appears in a new first column of the list. A trace it tried and could not read is marked?, so a signal that is present but too weak is visible rather than simply absent (from Samuel W7STF's request to be able to name a trace). A?has to earn its place — most of them were the finder's own noise floor — and a mark too crowded to place honestly is left out rather than nudged somewhere it does not belong. - An FT8 reply can now make its own slot (Gyula HA3HZ). After a slot ends the decoder works through every candidate it found, often well over a hundred, and only then did the QSO logic look at what had decoded — so a message addressed to you could sit unread while the rest of the band was ground through, and missing the reply window by any amount costs a full fifteen seconds. It now acts the moment a message for you decodes.
- A band change during a transmission is no longer lost (Randy N4OPI). A burst owns the link to the radio for its whole 12.7 seconds; a frequency sent into that was rejected and silently discarded while the dropdown had already moved. It is now held and sent as soon as the link is free.
- WSPR band hopping stopped whenever you looked at another screen (Dirk DK7CVD). A beacon's schedule is not a property of what is on the display.
- The remote power-switch modification is in the manual, with a schematic (designed, built and documented by Randy N4OPI, published with his permission). The relay control has been in the web UI since v1.10.9, but the hardware it drives was described only as "wire it to PWR_ON and GND" — and the QMX has no such connector to wire to. The manual now carries the whole job: the 2.5 mm jack you fit to the radio, the two-component optoisolator interface, the parts, the settings that work, and why only GPIO53 and GPIO54 are offered. See Web UI -> Power-cycle relay.
- Smaller things: the web TX tone button names the tone (Gyula HA3HZ), and the screenshot endpoint says when it is out of memory rather than reporting an unexpected error.
v1.12.0 — 2026-09-08
CW profiles, a WSPR page that answers more questions, and a CAT link that could die while reporting itself healthy.
- CW profiles (Uwe DL8UG: "it would save all the tedious fiddling on the QMX"). The radio holds one CW centre and one set of filter widths, and changing them means walking two separate menus. Four profiles now live on the Tab5 — a name, a centre frequency, and which of the eight filter widths to offer with it — edited on the web settings page and applied from there or from a picker in the settings drawer. Applying one writes the radio's own configuration, so each write is read back and retried, and the filter list is re-read from the radio afterwards rather than assumed.
- The bandwidth list offers only the filters your radio has (Uwe DL8UG). The QMX lets you enable any subset of its eight CW filters; the Tab5 offered all eight regardless, so picking one the radio did not have did nothing. A radio that does not answer still gets the full list — never an empty one.
- A CAT link could die and go on reporting itself healthy (Samuel W7STF). One transient USB error could stop the Tab5 hearing the radio for good while the poll kept saying the link was fine, so the screen asked you to restart a radio that was working perfectly. Caught in a soak at four hours fifty-six minutes, with the link then dead for four hours. A watchdog now forces a reconnect after five seconds of silence.
- WSPR (Samuel W7STF): a DT column on both screens — how far into the cycle each transmission started, nominally +1.0 s, so a value far from that is the other station's clock. Distances follow the km/miles setting, which they never did. A Clear button for the decode list, which asks first because the list is also the upload queue. One capture countdown instead of two. "xx/yy confirmed" now reads "N of M publishable", which is what it always meant — a station reaches wsprnet only after being heard more than once, and that also explains why a site like wspr.rocks shows fewer unique calls than the Tab5 reports hearing. Point at a trace on the waterfall and it names the station, with the tone and the report. And the band picker is a list you drag through, not a dropdown that commits wherever your finger lifts.
- Tune snap can be switched off (Samuel W7STF, who asked twice) — Off / 250 Hz / 500 Hz / 1 kHz, in the drawer under Advanced and in the web settings, defaulting to the present behaviour.
- Every field in a QSO can be corrected (Gyula HA3HZ), not the four the previous release allowed. Which record a logbook matches is a decision for the logbook.
- The web spectrum above ×1 zoom had no frequency scale at all, which is why clicking a signal tuned to the wrong place, the passband overlay sat elsewhere than on the Tab5, and the band-plan slider came apart as it was dragged — one missing answer behind all three. The dB scale labels were fixed values only correct for the default range, the zoom list now offers ×24, a frequency typed twice quickly keeps the second one, and a mode or band change from the browser is no longer silently dropped.
- The two screens no longer disagree about spots — the mode filter was applied on the Tab5 and not in the browser, and the browser was sent a truncated list on a busy band.
- Flat spectrum is one setting shared with the browser, the dB controls grey out while it is on because flat mode ignores them, the settings drawer remembers where you scrolled to, and every checkbox in it now reflects a change made from the browser — there were twenty that did not.
v1.11.3 — 2026-09-06
Two things a user told me were still broken after I had said they were fixed. Both of them were right.
- The power-cycle relay was held closed from boot for anyone using an active level of Low (Randy N4OPI). The two pins were driven Low at every startup, under a comment reasoning that closing a contact should require a deliberate pulse — which is right, and is the opposite of what that did for an active-Low station, because Low is their asserted level. On a line wired to a radio's power input the relay therefore sat closed from power-on until the first pulse released it. The pins now rest on the inactive side of the polarity you chose, and follow it the moment you change it.
- A corrected log file can now be imported (Gyula HA3HZ: "the corrected file cannot be installed, the previous incorrect version remains"). Restoring a log merges on callsign, date and time — exactly the three fields a correction does not change — so a record fixed in another logger looked like a duplicate, was skipped, and was reported as "already in the log". Choose corrections at the first prompt and an incoming record replaces the one already logged; the result says how many were replaced, and those contacts go to QRZ, eQSL and LoTW again, since the copy held there is the one carrying the error.
- The web page tells you when it is older than the Tab5. A browser tab left open across an update keeps working perfectly while missing every control added since it loaded — which is indistinguishable from a feature that was never shipped, and cost a round trip about an editor that was present all along. It now offers a Reload when the firmware version changes underneath it.
v1.11.2 — 2026-09-06
A QSO log quick enough to use, a check-my-log pass before you submit an activation, and a choice of frequency punctuation.
- The QSO log opens in 0.13 s instead of 2.2 (Gyula HA3HZ: "it takes so long for it to appear that it is not worth searching for it"). Measuring first changed the fix — reading the file was only 70 ms of it, building the rows was the rest — so it builds a screenful and adds the rest as you scroll. Nothing is capped; every record is still reachable.
- The log's search covers the whole log, not just today (Gyula HA3HZ). Searching a log asks "have I ever worked this", not "did I work it today".
- "Check log" in the web QSO log (Don Adams WB0LQW). It lists what each record is missing before you submit an activation — a callsign, a malformed date, no station callsign, a reference that does not look like one, or none of your own. It can only say a record is not obviously incomplete: the Tab5 cannot see POTA's rules or their database, and it never says a file will be accepted. The Tab5's Activation panel shows the same count, so it can be read at the park without a laptop.
- A station could be logged with another station's grid square, and that is fixed. A recycled entry in the decode table kept the previous callsign's locator, so a new station could inherit it and keep it if its own messages never carried one — exactly a QRP contact that finishes on reports and RR73.
- A grid square can be corrected by hand in the web log (Gyula HA3HZ, who was editing them in ADIFMaster), joining the two reports and the park reference as the fields that may be changed.
- A choice of frequency punctuation (Don N2VGU) —
14.074.000, the default and what the QMX shows on its own LCD, or14,074,000. It applies to the readout, the preset buttons and lists, the WSPR band picker, the keypad and the spectrum scale. - Decoded CW is written to the microSD card with timestamps (Michael K Johnson KZ4LY), so a half-caught callsign can be resolved afterwards.
- A download that failed partway was served as a file that looked complete (Gyula HA3HZ: "the website shows 220 lines of LOG data"), with 462 in his log. The same fault was in the diagnostic-log download and the SD file browser.
- The power-cycle relay's settings survive a reboot (Randy N4OPI).
- "Lost contact with the Tab5" no longer appears over a spectrum that is drawing perfectly (Dave KX3DX), and web spot labels carry the mode as the Tab5's always have.
- Three crashes fixed, including one that could abort the firmware when a browser reached the web server in the moment it started — present and unrecognised for many versions. Three tasks that were within a few hundred bytes of overrunning their stacks have been given room, and an overrun is now trapped as it happens.
v1.11.1 — 2026-09-05¶
Decoded CW along the bottom of the panadapter, from the radio's own decoder.
- Decoded CW along the bottom of the panadapter (suggested by Uwe DL8UG). In CW or CW-R, a single line shows the Morse the radio is decoding, with an estimate of the sending speed — on the Tab5 and in the browser alike. The QMX decodes it itself and hands the text over the CAT link, so this costs the panadapter no processing at all: it does not touch the spectrum, the waterfall or FT8. Works on QMX firmware 1.03 and later, and on most radios there is nothing to switch on.
- Noise is filtered before it reaches the screen. With no signal the decoder produces a stream of rubbish; measured on a live band,
*— its marker for a symbol it could not resolve — was the single most common thing arriving, and it is dropped outright. Long runs of E and T, the two shortest Morse symbols, are dropped as well, while short ones are kept so that real words survive. - The line wraps and overwrites itself rather than scrolling, so a callsign you are half-way through reading stays where it is. Two spaces travel ahead of the writing position to show where the new text is landing.
- The speed is a throughput figure, not the other operator's keying speed: it counts the gaps between words, so it reads low during a real exchange. Shown with a
~for that reason, and??when there is not enough to go on. - Turn it off in the settings drawer under Radio, beside CW centre and the transmit offset. On by default, and the setting is shared with the browser.
- Restore from SD now reads both logs on the card (Gyula HA3HZ). It only ever read
qso.adi, so putting a backup on the card asqso.prev.adi— the name the firmware itself writes — was met with "nothing to restore". It reads both now. - The Tab5's QSO log gains a Grid column, beside the callsign.
- The power-cycle relay's help text no longer names a connector that does not exist (Randy N4OPI). The QMX has no PWR_ON/GND jack — those signals have to be brought out to a connector of your own — so the control now says so, and says it is an experimenter feature.
v1.11.0 — 2026-09-05¶
Your QSO log, recoverable from the card it was already backed up to — and searchable on both screens.
- Restore your QSO log straight from the microSD card (Gyula HA3HZ). The card has always held a copy of the log, and until now the Tab5 could only ever write to it. Gyula lost his log to a firmware reinstall with 432 contacts sitting on the card, inside the radio's own screen, and no way to reach them without a computer — he reasonably assumed the device would notice them. It does now: Restore from SD in the Tab5's log window, or ↳ Restore from SD card in the browser's QSO Logs menu. It merges, so contacts already logged are skipped and pressing it twice does nothing.
- The card keeps the previous log as
qso.prev.adi. The card mirrors the present, so a QSO deleted before a restart used to be gone from the card as well at the next start-up. Whenever the log about to be written is smaller than the one already there, the older copy is kept first — normal logging never disturbs it, so it holds the last larger version for as long as it takes you to notice. - Search the QSO log, on both screens (Gyula HA3HZ). Type any part of a callsign, country, band, mode, date or park reference and the list filters as you type; several words must all match. If nothing matches it says so — "so this one has not been worked" — which is the question worth asking of a log. The decode list already greys out a station you have worked, but only while that station is on the air; this asks the same question whenever you like.
- Export just the contacts you pick (Gyula HA3HZ). In the browser's log viewer, tick rows and press Export selected to save them as their own ADIF file. The tick box in the header takes everything currently shown, so a search plus one tick gives you a single day, band or park. Each record is exported exactly as the Tab5 wrote it, so nothing the table does not display is lost.
- A finished QSO now waits for you in the browser (Randy N4OPI).
<callsign> QSO completestays on screen in green until you do something else, instead of clearing itself after twenty seconds like every other message there — so stepping away and coming back still tells you the contact finished. The radio does not wait; only the message does. - A restore or a delete on the Tab5 reports in a window with an OK button, not a message that fades on its own. The result of something you asked for is worth reading. Clearing the whole log now says "This cannot be undone" in as many words.
- The Tab5's log gains a Ref column — the park or summit the other station was activating — because the new search offered to find it while the list never showed it.
- An import that could not read a file no longer claims everything was already logged. It now reports how many contacts were found, added, already present and unreadable. A file too large gives a plain sentence instead of a raw browser error, the size limit is four times higher, and a slow upload is retried rather than abandoned.
v1.10.9 — 2026-09-05¶
The web decode-list jump, root-caused for real this time; WSPR's PA-voltage guard made reliable; a remote QMX power-cycle relay.
- The decode list no longer jumps, for real this time (Randy N4OPI). v1.10.8's fix sized the status box against one "worst case" message and still moved on an armed transmit or a busy exchange — the real cause was the box disappearing from the page entirely while idle and reappearing at full size once there was something to show. Every hide path now leaves its space reserved instead. The countdown shown while armed is its own small figure that can't be cut off, Cancel clears immediately with no leftover text, and the box no longer runs wider than the slot occupancy strip below it.
- The "Calling you" pileup list ages out and clears on a band change (Randy N4OPI). It previously had no expiry at all.
- WSPR's finals-protection PA-voltage guard is confirmed and retried, not fire-and-forget (Dirk DK7CVD). Restoring the radio's power on leaving WSPR was a single CAT write with nothing checking it landed; a background check now confirms and resends if needed. Verified on real hardware with an 11.5 V -> 6.0 V -> 11.5 V round trip against the radio's own read-back.
- The WSPR countdown no longer appears to hit zero and restart on the first cycle. The PA-voltage question is now asked the moment WSPR transmit is turned on, giving it the full two minutes to be answered instead of a few hundred milliseconds.
- New: a remote relay pulse for power-cycling the QMX (Randy N4OPI). "Power-cycle relay" under the web UI's Miscellaneous menu — wire a home-automation relay to it and the QMX's PWR_ON/GND signals, and a remote firmware upgrade no longer needs someone at the bench. The QMX has no PWR_ON/GND jack — those signals have to be brought out of the radio to a connector of your own first, so this is an experimenter feature (Randy N4OPI).
v1.10.8 — 2026-09-03¶
A crash introduced and fixed in the same release cycle, plus more groups.io reports.
- A settings-drawer scroll could crash the device. v1.10.7's "while the drawer is scrolling, nothing else in it acts" fix forced the touch driver to treat a finger as already lifted the moment a scroll began, and that collided with LVGL's own built-in momentum-scroll animation on the same object — every reproduction crashed the display task at the identical point. Found with a diagnostic build that confirmed the cause before anything was changed, not guessed at. The offending call is gone; the drawer's scroll-vs-tap protection is unchanged and still works.
- Restore your worked-station history from a downloaded ADIF file (Randy N4OPI). A clean erase-and-reinstall used to leave no way back to it — restoring settings has never touched the QSO log, on purpose — so ADIF restore in the web UI's QSO Logs menu now merges a previously downloaded (or any logger's) file in, skipping anything already logged.
- The web decode list no longer jumps up and down during an exchange (Randy N4OPI). The status box above it used to grow and shrink with the message text, pushing the list around while you were trying to click a row.
- The web spectrum could go on drawing against a stale frequency axis (Samuel W7STF). If the once-a-second status poll missed a beat after a band change or mode switch, the picture kept looking normal while every signal sat at the wrong frequency — it now blanks itself and says why instead. Not yet confirmed on the air.
- A WSPR spot hopped to a new band could be published to wsprnet.org under the wrong band (Kevin KQ4DTX) — the upload read the dial at send time rather than at decode time. Not yet confirmed on the air.
- The "QMX cannot display this" caption is gone from the hatched dead-band on both screens — the hatching alone says what it needs to.
v1.10.7 — 2026-09-02¶
User reports, and one crash that had been in the firmware for months.
- A crash that rebooted the Tab5 during FT8 is fixed — and it was our own leftover debugging code. A routine from earlier weak-signal development was still trying to open a log file once per decoded signal, up to 140 times a slot, every slot, on a path that could never be created. Each attempt asked for a small piece of memory the device was short of, and eventually one failed and the firmware stopped. It looked like a cyan screen and a restart, usually a minute or two into an FT8 session.
- Static IP addressing works. It did not in v1.10.6 — the address was always rejected and the Tab5 fell back to DHCP without saying so.
- The browser's band dropdown no longer switches you to FT4 by mistake (Steve KX7R). Its FT4 list had been filled with the FT8 frequencies, so any preset you picked switched the radio to FT4, with no way back from the browser. There are separate FT8 and FT4 groups now, and the mode shown comes from the radio.
- A timed-out contact no longer blocks the station. It stayed on screen until tapped, and while it was there the automatic answering would not start anything new. It clears itself after 20 seconds, counting down as it goes.
- WSPR transmit is off every time you open the page, rather than resuming because of how you left it last time.
- The WSPR countdown counts down to a real transmission (Roy KI0ER). It used to count to the next opportunity and restart whenever the duty cycle decided not to transmit.
- The first WSPR burst of a session can no longer go out at full power (Roy KI0ER), and an interrupted session no longer leaves the radio at a quarter power in every mode — the PA voltage is restored when the radio reconnects, and only if that radio is still sitting at the reduced value, so one radio's setting can never be pushed onto another (Michael KZ4LY).
- The web page gains a large MODE heading, the slot occupancy strip and slot countdown on FT8, and the whole WSPR left-hand panel — band, transmit state, finals-guard voltage, best DX, stations per cycle and wsprnet status. Both panels also stop shifting about as decodes arrive.
v1.10.6 — 2026-09-01¶
A release of things users found — almost every item here came from a report on the air.
- WSPR: the waterfall no longer goes blank for two cycles around a transmission (Dirk DK7CVD). Only the transmitting cycle is dark now. The transmitter was being armed up to two minutes before its slot and the receiver stood down for that whole wait as well, so at a 50% duty cycle the band went unheard about half the time it looked like it was listening.
- WSPR: the TX button stops a transmission at once (Roy KI0ER), instead of doing nothing visible until the end of the cycle.
- WSPR: leaving the mode gives the radio its power back (Roy KI0ER). With "Protect finals" on, the reduced PA voltage was being left behind, so CW and FT8 ran at a quarter power with nothing on the Tab5 to say so — visible only on the radio's own Protection menu.
- WSPR: the spot list fits the screen. The right-hand column was running off the edge. Headings now sit over their own columns, M is headed BAND, and long country names are shortened rather than replaced by a two-letter code.
- Picking a spot brings it into view (Roy KI0ER). With the still display on, a chosen spot could land right at the screen edge — reliably so, given the view only re-frames when something reaches an edge.
- The still display holds completely still, then jumps (Dirk DK7CVD). It used to hold, then be dragged along by the tuning, then jump, so the empty edge kept changing size. At most half your filter width now slides off before it re-frames.
- A static IP that would lock you out is refused, and blank mask/gateway/DNS are filled from the current DHCP lease rather than assumed. There is also a "Use DHCP" button on the Tab5 (Michael KZ4LY), shown only when a static address is set — until now the only way back was the web page the wrong address had just made unreachable.
- A QMX restart could reboot the Tab5. Worth knowing if you have seen this: the reboot also disturbs the radio, so what looks like the QMX wedging can be the Tab5 restarting underneath it.
- The microSD card is handled better. Its first write no longer collides with WiFi starting up, a failed background write no longer unmounts a working card, and the card is retried for an hour after start-up — so a card inserted while the Tab5 is running is now picked up within about five minutes instead of being ignored until the next restart.
v1.10.5 — 2026-09-01¶
The spectrum holds still while you tune across it, and a quarter of the ×1 view stops lying about where signals are.
- A still spectrum and waterfall. The panadapter now behaves the way a Flex does: the spectrum and waterfall stay where they are and the VFO marker moves over them, so a signal stays put on screen while you tune towards it. It also makes the waterfall readable as history — a signal's past sits directly above its present, under the frequency it belongs to, instead of the whole picture sliding sideways every time you touch the dial. The view re-frames only when you tune far enough to need it: a dead band where nothing moves, a small push so a station sitting at the screen edge can still be worked, then a page carrying part of the old screen across so you can see where you came from. What triggers it is your filter passband reaching the edge of the screen rather than a fixed percentage of the view — the passband is not centred on the dial, so a percentage rule re-frames too early at one edge and too late at the other, and mirrors itself in LSB. On by default; switch it off under Settings -> Radio & display -> Still spectrum.
- ⚠ At ×1 the display stays centred on the dial, whatever that setting says. Holding a view still needs somewhere for it to stay while the capture window slides underneath, and at ×1 the view is already the whole 48 kHz the radio sends. Zoom to ×2 or beyond for the still display.
- The right-hand quarter of the ×1 view was showing real signals at the wrong frequency. The QMX's local oscillator sits 12 kHz below the dial, so the 48 kHz it delivers covers dial−36 kHz to dial+12 kHz and there is nothing at all above dial+12. The display filled that quarter by wrapping the bottom of the band into it, and the frequency scale labelled it as dial+12 to +24 — so the signals shown there were real, but about 48 kHz from where the scale claimed, and tapping one tuned you to the wrong place entirely. That region is now hatched and inert on the Tab5 and in the browser, with a caption saying why it is empty.
- Leaving FT8 or FT4 could reboot the device a few seconds later. Switching back to the panadapter tore down the decoder while one of its two decode tasks was still working on the last slot, and the memory it was reading was freed underneath it. The window is easy to hit precisely because you are going back to the panadapter: that puts the display work back on the same processor core the decoder shares, so the decode finishes more slowly at exactly the moment the teardown is waiting for it. The decoder now abandons the final slot's work as soon as you leave — those decodes were about to be discarded anyway — and the teardown refuses to free anything it cannot prove is finished with. This bug is older than v1.10.5; it was found while testing this release.
- Changing band ends a contact in progress (Randy N4OPI). Switching bands used to stop the automatic picker choosing a new station but leave any exchange already running untouched — so it kept sending its next message on the new band, to a station no longer there. Changing band now ends the contact as well.
- The WSPR transmit button has moved clear of the left edge (Randy N4OPI). It overlapped the edge-swipe strip used to reach the panadapter, so a swipe that started a little high could land on a control that keys the radio for about 110 seconds.
- WSPR spots show the band they were heard on (Roy KI0ER), in a new M column. With band hopping on, a list of spots from several bands could not be read otherwise.
- The WSPR waterfall marks a transmit cycle (Dirk). On a cycle you transmit, the receiver is stood down for the whole two minutes and there is nothing to draw — so the previous cycle's picture used to sit there looking frozen. The display now lays down its cycle-boundary marker and keeps the last received image below it.
- The browser gets the FT8/FT4 band preset list (Randy N4OPI) that the Tab5 has always had.
- A LoTW upload now shows LoTW's own reply (Randy N4OPI). The count reported before was our count of what was sent — LoTW accepts a file and processes the contacts afterwards — so an upload could report success while nothing appeared in the log. The server's own message is now shown, which is what says whether anything was actually rejected.
- The LoTW certificate can be replaced from a visible button. Re-importing it used to need a Ctrl-click nobody would guess at, and a certificate expires about every three years.
- A static IP address can be set under Settings -> WiFi — address, mask, gateway and DNS. Leave the address empty for DHCP, which is what every unit does today, so nothing changes unless you fill it in. ⚠ Get the subnet right: an address that is valid but on the wrong subnet leaves the Tab5 unreachable, and the web page is the only place to change the setting back.
v1.10.4 — 2026-08-30¶
FT4 replies are quick again, and the Tab5 stops inventing an FT4 power reading.
- FT4 answers in the right slot (Gyula HA3HZ). FT4 now waits for the current slot to finish decoding before it transmits, the same rule FT8 has used since v0.21.0, so a reply goes out in the slot it belongs to instead of a cycle later. It should feel at least as quick as FT8. This was tried in v1.10.2, broke FT4 transmit entirely, and was withdrawn in v1.10.3 — it is back, this time with the transmit timing checked by an automatic test rather than by eye.
- FT4 no longer reports a made-up 5.0 W (Gyula HA3HZ). An FT4 symbol is 48 ms and asking the radio for its power can take 50 ms, so the power cannot be sampled during an FT4 transmission the way it is in FT8 — and the display was filling that gap with a fixed 5.0 W. The radio's own reading was the correct one. FT4 now shows no power rather than a wrong one; FT8 is unaffected and still measures properly.
- Auto-work pileup leaves busy stations alone (Gyula HA3HZ). A station who had called you could be answered a couple of minutes later, by which time they were already in a contact with somebody else — and then called repeatedly. If their last message shows them working another station, they are now skipped until they are free.
v1.10.3 — 2026-08-30¶
FT4 transmits again — update if you use FT4.
- FT4 would not transmit at all (Gyula HA3HZ). In v1.10.2 an FT4 transmission was held back at the start of its slot and then never sent: the countdown ran normally, the message was armed, and nothing went on the air — on a CQ and on a call alike. FT8 was unaffected throughout. Fixed, and FT4 now transmits at the start of its slot as it did in v1.10.1.
- The FT4 reply timing from v1.10.2 is withdrawn with it. That release made FT4 wait for the current slot to finish decoding before transmitting, so a reply landed in the right slot instead of a cycle later — and that is exactly the change that broke transmitting. FT4 replies can again be a cycle late. It needs a transmit window sized for FT4's shorter slot, which is being done properly rather than quickly.
v1.10.2 — 2026-08-30¶
Bluetooth keyboards work, and two logging faults are fixed.
- A Bluetooth keyboard now types into every field (Don N2VGU). Pair one and it works everywhere the snap-on keyboard already did: every text field, Enter and Esc in every window, Tab to move between fields, and the arrow keys. The on-screen keyboard steps aside while a Bluetooth keyboard is connected, which is the point of having one - it gives you back the screen space it was covering.
- A keyboard and a mouse can be connected at the same time. Either one first, the other after, and both keep working. If your keyboard sleeps, it reconnects on the first keypress and anything you typed while it was waking is delivered rather than lost.
- ⚠ US keyboard layout only for now. A Bluetooth keyboard reports key positions rather than characters, so letters, digits, Enter and the arrows are correct on any keyboard, but punctuation on a non-US layout will not be. National layouts are coming.
- A logged contact could be missing the received signal report (Gyula HA3HZ). If the other station's message already carried their report of you, the Tab5 replied and moved straight to the roger step - and their report, which was sitting in that very message, was never written to the log. It is recorded now. Contacts already in your log are unaffected; this applies to new ones.
- FT4 replies no longer go out a cycle late (Gyula HA3HZ). FT8 waits for the current slot to finish decoding before it transmits, so a fresh reply lands in the right slot. That had never been switched on for FT4, which is why FT4 exchanges took roughly twice as long as they should. Now on for both.
- The RIT indicator says what it is doing (Don N2VGU). With no offset engaged it read simply "RIT", which is easy to mistake for switched on. It now reads RIT OFF in grey with a line through it, so all four states - off, armed, engaged, and parked - state what they are rather than naming the feature.
- Declared WSPR power set from the browser now shows on the Tab5. The Tab5's own dropdown kept the value it was built with, so the two screens could disagree about a figure that is published with every spot.
v1.10.1 — 2026-08-29¶
WSPR now protects your radio's finals, and the declared power stops being a guess.
- Protect finals, on by default. A WSPR transmission keys the radio for about 110 seconds out of every 120 - an FT8 burst is about 12 - and running a QMX flat out on that cycle puts sustained heat through the PA transistors. QRP Labs warn about exactly this in the QMX manual, and the radio's own built-in WSPR beacon turns its PA down for the same reason. The Tab5 now does the same: it sets the QMX's Max. PA voltage to about 6 V for as long as WSPR transmit is enabled, and restores your setting afterwards. Measured on a QMX at 12 V: 5.4 W -> 1.6 W out, and 76% less heat in the finals.
- You can always see which state you are in. The control is a full-width button reading green "ON - about 1 W" or red "OFF - FULL POWER, finals at risk". Turning protection off takes two deliberate taps; turning it back on takes one. While it is off the TX block on the WSPR page reads FULL PWR in red.
- ⚠ It reduces the heat in the finals; it does not remove it from the radio. The excess is dropped inside the QMX instead, so total heat fell only 18% in the same measurements. If you intend to beacon for hours, feed the radio from a lower supply - the QMX accepts 6.0-12.0 V, and around 9 V leaves far less to throw away as heat. That is the one thing no firmware setting can do for you, and it is now in the manual.
- Declared power is advised by measurement. During each transmission the Tab5 asks the radio what it is actually producing and shows the answer under the setting. Switching protection on or off also moves the declared figure to the value that setting normally gives. Both are suggestions - the number is a claim about your station and stays yours to choose. The list runs to 37 dBm again: a declared power never commanded the radio, so limiting it could only have prevented an honest declaration.
- The FT8 Options checkboxes are easy to hit (Don WB0LQW). The touch target was the small box alone, a tap that drifted a few pixels was swallowed by the panel behind it, and the word beside each box did nothing. The touch area is much larger now, the tap cannot be stolen, and tapping the word toggles the setting.
- The WSPR settings are reachable from the browser for the first time, and the web and Tab5 lists agree.
v1.10.0 — 2026-08-28¶
WSPR, and a settings drawer you decide the shape of.
- WSPR — a third page. Swipe now cycles Panadapter -> FT8/FT4 -> WSPR. WSPR is a propagation beacon rather than a contact mode: you transmit a very slow, very weak signal carrying only your callsign, grid and power, and stations worldwide report hearing it. Over an evening you get a picture of where your antenna and your band actually reach, at power levels where nothing else would be heard at all. Nobody replies, and nothing goes in your log.
- The page shows the stations heard in each two-minute cycle with distance and bearing, the furthest of the session, a per-cycle history so an opening band looks different from a closing one, and the captured 200 Hz window. Receiving is the default and is worth doing on its own; transmitting is opt-in and, like FT8, refuses to key without your callsign and grid.
- Its settings live in the drawer, under WSPR, and appear only on that page: allow transmitting, declared power, duty cycle, band hopping, and whether to publish what you hear to wsprnet.org. The page itself keeps only the TX switch — duty cycle and band hopping are decisions made once for a session, not controls you reach while watching spots arrive. Ticking two or more bands in the picker is what turns hopping on.
- Declared power is a claim, not a measurement. The Tab5 cannot know what your radio delivers, and every spot publishes that number worldwide into a database other operators reason from. Set it to what your transmitter really produces.
- The Tab5 now wakes up on the page you left it on, including after a firmware update. If that page is WSPR with transmitting enabled, the station resumes beaconing on power-up — which is what a beacon is for, but worth knowing before you leave the shack.
- Basic and Advanced. The drawer's EXPERT button is now ADVANCED, which names the contents rather than the reader. More usefully, which settings appear in which view is no longer fixed: the web UI's Settings window has a Tab5 config button opening a table of every section with Basic and Advanced ticks. Basic holds the things an operating session actually reaches; everything remains in Advanced. A firmware update that adds a setting will show it rather than hiding it behind a layout saved before it existed.
- Two field reports from Gyula HA3HZ, both fixed. A station you had just worked could be called again within minutes — the decode list greyed the callsign while the engine ignored it unless a filter was ticked, so the screen and the machine disagreed. The automatic pickers now leave a station alone for 30 minutes after working it, whatever the filter says. And the red FREQ BUSY warning had no signal-strength test at all, so a barely-audible station on the other side of the world raised the same alarm as a loud neighbour; it is now graded by strength, and hidden entirely during an exchange, where your transmit tone is deliberately locked to your partner.
- Also: the Tab5's frame rate and redraw load are now in the diagnostic log, Bluetooth's host task moved off the display core, several task stacks were returned to the pool, and a WSPR session no longer leaves the FT8 page tuned to the WSPR frequency.
v1.9.6 — 2026-08-26¶
POTA and SOTA logging put right, the mouse wheel tunes, and the phone menus work again.
- Your callsign is now written as
STATION_CALLSIGN, the field POTA reads (Don Adams WB0LQW). It used to warn "No station_callsign field, assuming operator …" on every upload and guess. - Park-to-Park and Summit-to-Summit contacts can be entered afterwards — a new P2P ref column in the web log editor, where you type just the reference and the Tab5 works out the programme.
- FT4 is logged the way the ADIF specification defines it (
MODE=MFSK,SUBMODE=FT4), so editors like ADIFMaster will open the file. LoTW uploads are unchanged. - The mouse wheel tunes the radio over the spectrum and waterfall — 10 Hz a click in CW and the digital modes, 100 Hz in SSB (Roy KI0ER, John Dusek) — and it no longer scrolls panels into blank space.
- The bottom-bar menus work on an iPhone again — a line added for portrait mode in v1.9.4 hid them behind the page in Safari (Travis AK6TB, Randy N4OPI).
- "Check for updates" stops saying you are up to date while it is still asking (Michael KZ4LY, Samuel W7STF), and background downloading is now a switch you can turn off while still being told a new version exists.
- Coming back from the radio's own menus restores your frequency and mode — they could leave the radio on 160 m (Randy N4OPI) — and Basic/Expert is remembered (Samuel W7STF).
v1.9.5 — 2026-08-25¶
A fast-follow patch: two ADIF logging bugs, no new features.
- A duplicate contact could falsely claim your park was activated (Eric, GitHub issue). Working the same station twice made the device say "10 contacts, park activated" while POTA.app credited only 9 unique stations and rejected the upload - cost three activations in one outing before it was noticed. A station now counts once toward the 10-QSO (SOTA 4-QSO) minimum no matter how many times you work them.
- Deleting a single QSO record could silently do nothing. The delete never checked whether its rewrite actually succeeded before committing it, so a storage write failure looked like the delete "worked" while the record stayed put. It now verifies the rewrite, refuses to touch the log if it can't, and automatically repairs/reclaims space from storage that's become fragmented over a long uptime - so a delete that would previously have failed now just works.
v1.9.4 — 2026-08-25¶
The FT8-specific settings get their own home, and the web page finally works on a phone held upright.
- FT8 Options. The Tab5's Filter button is renamed Options (Roy KI0ER) - it already held real behaviour toggles, not just filters, so the old name undersold it. The web UI gets the equivalent for the first time: CQ message presets and the FT8 filters, previously buried in one long general Settings list, now live behind their own Options button next to TX tone, shown only in FT8 mode. The button carries a count of currently-active settings instead of a plain colour (Dirk DK7CVD, Roy KI0ER - a colour would always read "active" for anyone who runs filters permanently and tell them nothing new), and hovering it lists which ones. Inside the panel, an active checkbox gets a coloured border in addition to its own tick mark, so nothing depends on colour alone (Don N2VGU).
- The TX tone picker stops going stale. It used to read the band's occupancy once, on open - a slow decision could cross a 15-second slot boundary and land you on a slot that filled in while you were choosing. It now re-checks every 3 seconds while the picker is open, without disturbing your own in-progress pick.
- The web page works on a phone held upright. In portrait, the top and bottom bars could lose controls off the edge of the screen with no way to reach them - landscape was always fine (Randy N4OPI, iPhone Safari). Both bars now scroll sideways, the same swipe as the decode list.
- Battery reading simplified. The raw cell voltage is gone from both screens - the percentage already carries the level. In its place: once your charge limit trips, the reading says
(limit), on the Tab5 and the web page (Don N2VGU). - The snap-on keyboard can be attached - or reattached - any time, not just at boot. It's found within a couple of seconds whenever it's plugged in, and a detach-then-reattach mid-session works the same way. Its two LEDs stay dark once it's found.
- The macOS/Linux flasher script is guaranteed clean line endings regardless of what machine builds the release (Michael K Johnson KZ4LY, Fedora).
v1.9.3 — 2026-08-23¶
Updating is now one decision instead of a procedure.
- The update downloads quietly in the background and only asks you once, at the end. On by default; switch it off under Settings -> Network -> Download updates automatically if you are on a metered connection, since each update is about 3.3 MB. Downloading never installs anything - only a restart does, and only you can ask for that.
- A proper window in the middle of the screen, with the version, what will happen, and two buttons: Restart now or Later. The bottom bar breathes gently while an update waits for you and goes quiet once you have said "later" - a signal that never stops being a signal.
- The long-press is gone. A plain tap opens the window. The hold only ever existed so a stray brush could not start a download; now that a press just opens something you can dismiss, it does not need to be defended against. (Don N2VGU spotted that the old wording described the wrong action at the wrong moment - he was right about the cause, not just the words.)
- The band-plan strip is far easier to hit. It is only 22 px tall with the bottom bar hard against it below and the waterfall above; its touch area now reaches 50 px up into the waterfall while it still draws the same size.
- The spectrum, waterfall and FT8 decoding keep running while an update downloads. Previously everything stopped for the whole download. Expect a slight stutter and one brief pause right at the end.
- Audio is no longer dropped while a log upload is running. Uploading to QRZ, eQSL or LoTW quietly interrupted the audio feed, which could cost you FT8 decodes at the time.
- TXCQ ANY / EVEN / ODD on the web FT8 page (Randy N4OPI) - choose which 15-second slot your CQ goes out in, from the browser. Same setting as the Tab5's own button, so the two always agree.
- SSB tune snap is now 500 Hz (Dave KX3DX) - stations that stray off an integer kHz sit at 0.5, and a 1 kHz grid cannot reach them. Also half as many stops across a drag.
v1.9.2 — 2026-08-22¶
A field-report release: five things fixed or added, three of them from Randy N4OPI.
- A stuck exchange that never logged is fixed (Roy KI0ER, working K7FD). When a caller's own first message back to us was already a signal report (not a fresh CQ), the QSO machine correctly built the reply but started itself in the wrong state - "waiting for their first report" instead of "waiting for RR73" - so it had no idea what to do with a bare RRR and kept re-sending the same reply for over ten minutes. Fixed at the single choke point all three ways of starting this kind of exchange share.
- The SWR-protection fault is visible from the web page now (Randy N4OPI). Before this, tripping SWR protection stopped transmission with no explanation anywhere but the Tab5's own prompt, and no way to clear it remotely - the web page showed only a bare "QSO Cancelled". It now shows the same fault message and clears the same way a tap on the Tab5 does.
- "Who is hearing me" gets time windows and sortable columns. 15 min / 30 min / 6 h / 24 h chips, and every column header sorts by clicking it - both pure re-slices of the one fetch the device already makes. The FT8/FT4 decode list in the browser gets the same sortable columns, with a "CQ callers on top" link back to the device's own priority ordering.
- Working an older pileup caller from the web page now actually works (Randy N4OPI). Clicking a "Calling you:" entry used to refuse outright the moment the caller's row aged out of the live decode table, even though the Tab5's own pileup screen could work the identical caller fine. It now falls back to the same report-first reply the Tab5 has always used. Pileup entries show their age on both screens now, and the Tab5's decode-list HRD column is now AGE in seconds - a more useful number for judging how much to trust a row. How long a row survives before it drops off the list is now operator-tunable too: a "Max age:" dropdown in the Options modal, 30 to 90 seconds.
- Simulation mode no longer leaves real stations flickering on screen. Turning it on now clears the decode list and pileup immediately, same as turning it off already did, and real decodes are suppressed from the shared list for as long as sim mode is on - a QMX still attached and receiving can no longer keep re-populating a practice session with genuine stations.
v1.9.1 — 2026-08-21¶
A hotfix: updating from the device did not work over a real download, on any version, ever, until this fix.
- v1.9.0 was meant to be the first release where the OTA offer could actually be used; testing it for real for the first time turned up two bugs.
- The device could not even open the connection. GitHub's own redirect response carries more header data than the firmware's HTTP client was sized to receive - every download failed instantly. This is why v1.9.0's offer downloaded nothing for anyone who tried it.
- Once that was fixed, a second bug appeared: the device could crash and reboot right at the end of a successful download. The same fix made each downloaded chunk larger, and the download loop never yielded control back to the rest of the firmware while processing it - audio and FFT were starved badly enough, for long enough, to eventually trip a hardware reset.
- Both fixed and verified on hardware: a real download against the live release completed twice, with a full serial capture proving zero crashes and zero audio interruption throughout.
- If you are on v1.8.9 or v1.9.0, this needs one cable flash. Your device's own broken download code cannot fetch any release, including this one - it fails the same way regardless of what is on the other end. After that one flash, OTA works normally from then on.
- Everything else is unchanged from v1.9.0 - the faster web page, WiFi power saving, the WebSocket eviction fix, and the snap-on keyboard shortcuts. This release exists solely to fix the OTA download path.
v1.9.0 — 2026-08-21¶
The web page is fast again, the snap-on keyboard drives the whole app, and updating from the device can finally be seen working.
- Try the update. v1.8.9 added updating from the device, but the offer only appears when a newer release exists — and at the time there was none. Now there is. Hold the version at the bottom of the Tab5, or tap it in the web page. Do not want to wait for the 30-minute check? Hold the version even while it says you are up to date and it checks there and then, showing
checking...while it does. - The web page loads in under two seconds instead of about ninety. It was being sent uncompressed — 263 KB, on a link shared with the live spectrum stream — and is now 83 KB with a tag so a reload costs almost nothing.
- WiFi power saving is off. It is right for a battery sensor and wrong for something serving web pages: the radio slept between beacons and relied on the access point to hold anything arriving. Outbound traffic was never affected, which is why the spot feeds always worked while the web page did not. Measured over 500 samples, requests that failed outright went from 14.4% to 0.4%.
- The web page was killing the very stream it displayed. The web server evicts its least-recently-used connection when it runs short of slots, and a connection's place in that queue is only refreshed when it receives something — the spectrum stream only ever sends. The browser's own polling was enough to get it thrown out every few seconds. That is the "reconnecting" some of you have seen for a long time.
- The snap-on keyboard drives the app. It works in the radio's own menus (arrows, Enter, digits, backspace, Esc to leave), Enter and Escape work in every window with buttons, arrows and Page Up/Down scroll the drawer and the manual, and Ctrl+R / M / L / K / P / F / S / H / D open the common screens. You can reassign all of it from the web page — 25 actions, with Alt left free for your own. (Don N2VGU)
- Five fixes from Randy N4OPI. The TX power and SWR readout was hidden behind the exchange status, and that whole strip is rebuilt to sit across the panel instead of stacked down it. The TX tone picker picked a slot one or two to the left of the click. "Busy: working …" and "QSO cancelled" never cleared. A worked station stayed green in the decode list. And "Who is hearing me" was quietly discarding reports — it stopped after 64 and said nothing; it now handles 128 and says when there were more.
- The decode list shows the country, spelled out, where it used to repeat the grid square already in the message. (Randy N4OPI)
- The web page no longer asks you to confirm ordinary operating actions — calling CQ, cancelling mid-QSO, working a station, starting Antenna Tune. Deleting things and installing firmware still ask.
v1.8.9 — 2026-08-20¶
The Tab5 updates itself now, and a transmitter that could be left keyed no longer can.
- The radio can no longer be left transmitting. (Roy KI0ER) His QMX transmitted continuously until he power-cycled it, with the Tab5 running normally throughout. A USB timeout mid-burst made every command fail — including the two that stop transmission — the burst finished, and although the link recovered two seconds later nothing ever re-sent them. The stop command is now retried immediately, and if it still cannot get through it is handed to the radio-control task, which keeps re-sending it on every cycle that works until the radio is demonstrably back in receive.
- Updating from the device. The version at the bottom of the screen tells you when a newer release exists and installs it if you ask: touch it, hold for a second, let go. It downloads in the background and never restarts on its own — you choose when. The web page says the same in the same words. Nothing is downloaded unless you ask, your settings and logs are untouched, and the previous firmware is kept as a fallback. Install this release with the flasher as usual; after that the cable is only for emergencies.
- A crash now survives the reboot. An unexpected restart can finally be diagnosed from a diagnostic download — the next boot records what happened, which part of the firmware, and how far into the session.
- The microSD card keeps the diagnostic log again while WiFi is on. Previously it only received a backup at start-up, so the log was not there when it was needed.
- The flasher download is 2.9 MB instead of 44 MB. (Gyula HA3HZ) It had been quietly carrying every previous version inside it.
- FT8 can move off an occupied frequency mid-QSO — to the nearest clear slot only. (Roy KI0ER, Gyula HA3HZ) Far enough to escape whoever is on top of you, near enough that a station using a narrow receive filter still hears you.
- Bandwidth stayed on a CW filter after switching to LSB. (Samuel W7STF)
- The out-of-band tuner now works in the browser too. (Samuel W7STF)
- Browser display stalls. (Samuel W7STF) The message telling a second browser it had lost the live view was malformed, so browsers hung up and grabbed it straight back.
- The frequency readout could stick on an old value while the spectrum and the radio were both correct.
- Spur suppression has been withdrawn from the settings drawer. It only ever worked at ×1 zoom, which is not where anyone looks at spurs, and with a real antenna the problem is far smaller than bench measurements suggested. The work is kept for a future release.
- Every web API command is documented, and the error behaviour is now described correctly.
v1.8.8 — 2026-08-20¶
If the Tab5 ever restarts on you, the diagnostic download now says why.
- A crash now survives the reboot. Until now a crash left nothing on the device — the details went straight out of the serial port and were gone, so if you sent a diagnostic download it contained everything except the one thing needed. The next boot now reports the previous crash: what happened, which part of the firmware, how far into the session, and where. If your Tab5 restarts unexpectedly, just send the diagnostic download. A restart with no crash record is also positive evidence it was not a crash — a power cut looks identical otherwise.
- An FT8 reboot open since v1.3.0, root-caused. Entering FT8 could start the decoder twice, and the second copy freed memory the first was still using. The cause was an internal "is it running yet" flag that answered a moment too late.
- FT8 was quietly discarding decodes — 99 out of 54,142 in a measured run. A dropped decode never reaches the list, the busy-frequency map, or the check for a reply addressed to you, and a lost reply looks exactly like the other station going quiet.
- Bandwidth stayed on a CW filter after switching CW -> LSB. (Samuel W7STF)
- The out-of-band tuner now exists in the browser too. (Samuel W7STF) Out of band the Tab5 turns the band strip into a centre-detented coarse tuner; the browser simply hid it, so the one place you most want a way back to a band had no control at all.
- Browser stalls — a real cause, and it was not your PC. (Samuel W7STF) The message that tells a displaced browser "another browser took the live view" was a malformed frame, so browsers hung up instead of reading it and took the view straight back. Measured: 16 tug-of-war takeovers in ten seconds, down to 2 in twenty-five.
- The frequency readout could stick on an old value while the spectrum, waterfall and radio were all correct.
- Radio Menus / Diagnostics colour is not fixed yet, deliberately. The colours the menus use are all handled; the Diagnostics screen sends something else. Rather than guess, the firmware now reports exactly which codes it did not understand — if you can open Diagnostics and send that reading, it is the fix.
v1.8.7 — 2026-08-19¶
The browser panadapter stops freezing, and your logs can go to your own Cloudlog.
- The web panadapter no longer hangs for seconds at a time. Reported as getting worse with every release, and it was. Measured over 9.6 hours, the browser session was being torn down 545 times — roughly every 14 seconds in bursts — each costing about 2.2 seconds of frozen display while the browser reconnected. Between the drops the stream ran at full speed, which is why it looked like stalling rather than slowness. The cause is a partial WebSocket write being reported as a complete one: a half-sent frame corrupted the stream, and the browser hung up. The background feeds only made it more likely, which is exactly why it worsened as more feeds were added. (Samuel W7STF)
- Upload to your own Cloudlog or Wavelog. The fourth logbook, and the only one you host yourself. Plain
http://is allowed when the server is on the same network as the Tab5, so a home server needs no certificate — checked at every upload rather than once at setup, so it refuses from a field site instead of sending your API key across a network you do not control. Usehttps://for anything remote or for a hostname. Records go in batches and Cloudlog does its own duplicate checking. If your server is on your own network this is the only upload that needs no internet at all. (Mark G4MEM) - Radio menus show the radio's colours. Everything rendered white while PuTTY showed the same screens in red and green. The colour was being read from the radio all along and simply thrown away by both the Tab5 and the browser. (Samuel W7STF)
- The battery no longer reads 100% then 0% with no pack fitted. Running from USB-C with no NP-F550, the display alternated between the two extremes. The detector for a missing battery was flapping in time with the supply rather than latching. (Randy N4OPI)
- Waking from the screensaver no longer acts on the tap that woke it. Sleep switched off the mouse pointer and left the touchscreen live. (Randy N4OPI)
- A radio left receiving on VFO B is put back on A, and tells you. Frequency changes only ever go to VFO A, so with the radio on B nothing you tuned had any effect — while band select still worked, which is what makes it look like your own mistake. (Markus DL8MBY)
- The browser's spot and frequency labels are readable again on a high-resolution display, where they were being drawn at about half size. (Randy N4OPI)
- A warning that blamed the wrong thing. After a cable swap you could be told to set the radio to two USB serial ports when it already was. The port is now retried, and the setting is only mentioned when the radio is definitely connected. (Samuel W7STF)
- Pick callers myself. New option in the FT8 Options modal. While you are calling CQ, a station answering does not start the exchange - they wait in the pile-up until you tap them, and the exchange then runs itself as usual. Only the choice becomes manual. It keeps calling CQ while you pick, and it overrides Auto-work pileup. Off unless you turn it on. (Eric K3FNB)
- A Bluetooth mouse whose pointer moved erratically. Connected and scrolled perfectly, but the pointer jumped about. The mouse fix in v1.8.4 went into the USB path and this mouse is Bluetooth, so it never applied; and the movement itself was being read with the wrong layout, turning a small movement into a large jump the wrong way. Diagnosed entirely from the diagnostic log that was sent in. (Kevin KW6E)
- Entering FT8 could reboot the device. A shared decoder buffer could be released twice if the decoder was set up twice without being torn down in between. Caught on the bench while testing this release, and almost certainly the unexplained heap crash that had been on the list since v1.3.0.
- Under the surface: a crash after about seven hours of healthy operation is fixed, the flash-persisted diagnostic log no longer stops writing with space still free, and two silent USB workarounds now count what they catch so it is possible to tell "never happened" from "happened and was handled".
Investigated, no change: the first entry into Radio menus after a flash drawing blank could not be reproduced — the first open after flashing plus six more were all clean, and the same thing is seen in PuTTY, which points at the radio's own redraw. (Samuel W7STF, Randy N4OPI)
v1.8.6 — 2026-08-18¶
A same-day fix release. v1.8.5 shipped with the browser interface completely dead.
- The web UI works again. One broken text string stopped the entire page script running, so the browser drew its controls and then did nothing at all — no spectrum, no waterfall, no working buttons, "disconnected" in the corner, in both Chrome and Firefox. If you use the browser at all, v1.8.5 gave you nothing. The build now refuses to compile a page whose script does not parse, so this particular mistake cannot ship again. (Randy N4OPI, Michael KZ4LY)
- A crash that looked like a radio fault. An overnight test of v1.8.5 aborted inside the USB driver after about two hours of healthy operation. The reboot is not the expensive part: it happens with the radio still plugged in, which is the one situation that leaves the QMX unable to reconnect — so the radio then stayed dead until morning. The report was "the QMX wedged during the night"; the QMX was fine. Now the driver reports the error instead of restarting.
- CW: the displayed frequency and tap-to-tune are corrected. A signal transmitted on 7.060.000 appeared at 7.060.040, and tapping it tuned you 40 Hz off, so the other station heard you shifted. Two things added up: a calibration figure that has defaulted to the wrong value since before the panadapter read your CW offset from the radio, and the display rounding to whole analysis bins (47 Hz each). ⚠ Corrected by calculation that matches the reported measurements exactly, but not yet confirmed on the air — please measure and report. (Roy KI0ER)
- Radio menus: you can see what you are typing. Editing messages past number 9 meant typing blind behind the on-screen keyboard; the screen now scrolls so the radio's cursor stays visible. The help for a radio with no second serial port now tells you to power-cycle it. And the two-finger tap to blank the screen works properly instead of about one attempt in ten — two fingers never leave the glass at the same instant, and the one left behind was being treated as a deliberate touch. (Michael KZ4LY)
- Also documented: in the band config table, Enable/Disable entries accept E and D typed directly, and the arrows change the value rather than moving between columns — step onto a numeric column first to move across. That is the radio's own behaviour. (Stan Dye KC7XE)
Not a bug: auto-answer is off after every restart by design — a radio that started transmitting the moment the Tab5 powered on might be feeding an untuned antenna. WSJT-X arms transmit per startup for the same reason. (asked by Brian WA6JFK, answered by Roy KI0ER)
v1.8.5 — 2026-08-17¶
Mostly the things people had already been told were fixed, plus two found on the bench.
Six of these were described as done in replies sent before v1.8.4 shipped, so anyone who believed those replies went looking for them in a build that did not contain them. That is the main reason this release exists.
- Radio menus: you can see what you are typing, and type. A cursor is drawn — it was tracked internally all along and simply never shown. BS deletes leftward: land on a value, backspace away what you don't want and type the rest. There is an on-screen QWERTY on a keyboard button in the top row, which matters on a Tab5 without the snap-on keyboard — there was otherwise no way to enter a value at all. "Exit terminal" no longer re-opens the session, and when the radio has no second serial port the full menu path is on screen —
System config -> GPS & Ser. ports -> USB serial ports -> 2— instead of a message that disappears. Values longer than two digits, and values in tables, are backspace-and-retype rather than arrow-adjust; that is how the radio has always behaved. (Randy N4OPI, Michael KZ4LY) - The web log viewer can correct a report. It is called View / edit log and could only delete. The two report columns are now click-to-edit, and leaving one empty records that no report was exchanged. Only the reports can change — callsign, band, mode, date and time are what QRZ, eQSL and LoTW match a contact on. An edit corrects the Tab5's log only; a copy a logbook already holds cannot be amended by re-uploading. Related: a report is now logged only if it was actually transmitted, where before an armed message that got replaced could still reach the log. (Gyula HA3HZ)
- The station you are working never disappears from the list. With Show only CQ callers on, your own exchange vanished — two filters were stacking. The contact in progress is now exempt from all of them. (Roy KI0ER)
- Leaving Radio menus hands the radio back properly. After a menu visit the waterfall could misbehave until you paused and resumed by hand; closing the terminal now does that for you. A QMX's IQ mode is session state that a trip through its own menus can drop. (Roy KI0ER)
- A pileup caller is answered from what they actually sent rather than always a bare report — the last of a family of bugs where the manual Transmit button was right and the automatic path lagged.
- The clock no longer says
UTC(GPS)on a radio with no GPS. The Tab5 decided a radio was GPS-disciplined when its second-tick agreed closely with internet time — but the Tab5 also sets that clock on a radio without GPS, so it was reading back its own handiwork. Measured across four pushes, the agreement landed anywhere from 12 ms to 834 ms, so the same firmware would say GPS on one unit and not on another for no reason at all. It was not only a wrong label: once it believed there was GPS it stopped keeping that radio's clock right, and a QMX loses its clock every time it is switched off. A clock the Tab5 set is no longer treated as evidence about itself. - In CW the display follows the offset you actually set. The dial agreed with the radio but the waterfall did not, and tapping a signal tuned you about 30 Hz off — so you transmitted off frequency as though XIT were on. The radio's CW offset was read once, when the Tab5 connected, and never again, so changing it on the radio left the display correcting by the old figure for the rest of the session. It is now re-read every few seconds while you are in CW. (Roy KI0ER)
- A caller who answers your CQ with a report instead of a grid is followed properly. Someone who already knows they have you often skips the grid and reports you straight away; the reply should acknowledge that with
Rplus your report, not send another bare report and lose a cycle. Tapping Transmit by hand always did this correctly — it was only the automatic run that was a step behind. (Gyula HA3HZ) - A dated, day-at-a-time ADIF export. A Today only, dated file link beside the ADIF download gives just that day's contacts, named
qso-YYYY-MM-DD.adi, so a daily file already says which day it is. (Gyula HA3HZ) - The red transmitting banner no longer covers the text under it. The panel was 99 pixels tall and holding 406 pixels of content with nothing to contain it. It can now shrink and scroll, and the status line no longer wraps onto three lines. (Gyula HA3HZ)
Known limitation, unchanged: in Radio menus, values longer than two digits and values inside a table still do not change with the ◀ ▶ keys — Max PA Voltage, the band-config columns, CAT timeout, TCXO and the Virtual U3S fields. They need some key other than left/right, and the question has gone to QRP Labs rather than a guess going into a release. Everything else in the menus edits normally.
v1.8.4 — 2026-08-16¶
Your radio's own menus on the Tab5, and a batch of fixes that stop it doing things you did not ask for.
- The QMX's own menu system, on the Tab5 and in the browser. Settings -> Radio -> Radio menus shows the radio's 80×24 menu screen with arrow keys, Enter and Back. For a QMX+ with no control panel this is the only way in — everything the front panel would reach, including Band config and System config. It runs on the radio's second USB serial port, so the panadapter keeps decoding while you are in the menus; enable that once on the radio under System config -> GPS & Ser. ports -> USB serial ports -> 2. Closing walks the radio back out through its own Exit terminal item, and if you close the browser tab or leave it two minutes it hands the radio back by itself. (Randy N4OPI, seconded by Michael KZ4LY)
- Auto-answer now stands down when you would not expect it to be running. It waits until it has heard both transmit windows before its first call, instead of picking a frequency from nothing after a band change. Cancelling a transmission switches it off — so halting a transmission to go and check your antenna does what you expect, rather than the radio starting again a cycle later. A band change switches it off, whichever way you changed band, because the antenna is usually not tuned for the new one yet. And it is off at every startup. (Roy KI0ER)
- A transmit offset you choose during a QSO is used. It was refused whenever a burst happened to be on the air — which, since a transmission fills most of every other slot, was about four attempts in ten. The exchange then carried on at the offset it started with, exactly when you were trying to move out from under someone. It is now accepted immediately and applied the moment the burst ends. (Roy KI0ER)
- Spur suppression offers the setting that works first. Both were there, but the weaker one was offered first: measured on 20 m, Erase spur bins takes the spur columns down about 78% against Subtract's 28%. Erase now comes first. It does not leave dark holes — it ramps between the neighbouring bins — and what it learns is remembered per frequency, so the two-second measurement happens once. (Samuel W7STF, who reported it as not seeming effective, and was right.)
- A USB mouse is read from its own description instead of an assumption. A mouse reporting 16-bit movement had it read as 8-bit, so the pointer flew sideways, jumped between points, and barely moved vertically. (Kevin KW6E)
- A WiFi hiccup can no longer restart the Tab5. The WiFi transport used to restart the whole device rather than drop a single frame — and because it was a clean restart there was no crash report, so it looked like a mystery. It now drops the frame and keeps going.
- Smaller, all reported by users: the Close button in the QSO log is no longer red — it was a brighter red than Delete all, which is exactly backwards (Gyula HA3HZ); a QSO that could not be saved is no longer reported as logged (found while answering Gyula's question about how much the log holds — about two thousand contacts); and the top bar no longer gets stuck showing the wrong mode or band.
v1.8.3 — 2026-08-14¶
A field-report release: every fix in it was found by someone using the radio.
- Your QRZ and eQSL logins can be changed from the browser. The prompt only ever appeared when nothing was stored, so a key typed wrongly — or one the service later reissued — could not be replaced from the page at all, and the only ways out were editing the config file by hand or a full erase-and-reflash. There is now a Change QRZ API key and a Change eQSL login row under the upload links, which appear once something is stored. (Brian WA6JFK)
- The dB scale labels follow the range you set. They were fixed at −40 down to −120 and ignored your Min and Max completely, so any range other than the default was described by labels that did not belong to it. They are now worked out from whatever range you choose, with a finer step for a narrow range. At the default range they are unchanged. (Samuel W7STF)
- The "Adaptive floor" slider has been removed. It could not change anything — the per-bin noise floor it blends towards is re-seeded many times a second, so both ends of the slider produced the same picture. It was already absent from the browser; a control that cannot do anything is worse than a missing one. The stored value is kept, so it can return if the underlying tracking is ever fixed. (Samuel W7STF asked why there were so many handles — this was the answer.)
- The filtered part of the spectrum is drawn where the radio actually filters. There was a gap of about 250 Hz between the dial frequency and the start of the shaded passband, because that edge was a fixed number that never came from the radio. In the digital modes the QMX uses one fixed filter of 150 to 3200 Hz, and it reports 3200 as the top edge rather than as a width — so the shading was drawn at 200 to 2900. Corrected, and measured on the screen afterwards. (Samuel W7STF)
- RF gain no longer sticks on "reading…". It displayed the answer to the previous question, so the first time you opened the drawer there was nothing to show and nothing repainted it when the answer arrived — it cleared only when you next opened the drawer, and a single unanswered query left it stuck for the whole session. Since the gain is stored per band, it came back on every band change. It also now says "radio not connected" when the radio is not there, instead of implying it is being read. (Samuel W7STF)
- The dark bands at the edges of a zoomed view are about half as wide. Zooming filters the signal before re-analysing it, and that filter began rolling off just inside the edge of what is drawn. The filter is now twice as long. Widening it instead was rejected deliberately: that would have traded the dark edge for false signals appearing where nothing is transmitting. (Samuel W7STF, whose own estimate of the width was accurate.)
- Out of band, the band strip is now a coarse tuner. Inside a band the strip is a map — where you touch is where you go. Outside one there is nothing to map, so a handle sits in the middle and you drag it off centre to move the dial; let go and it springs back. A full pull moves by half of what is on screen, so two drags overlap instead of skipping a gap, and it gets finer as you zoom in. (Samuel W7STF, who rightly pointed out that a row saying only "out of band" earns nothing.)
- The browser's decode list shows distance and bearing. KM and BRG columns after the audio tone, in the same order the Tab5 uses, switching to MI if you have Distance in miles ticked. The Tab5 works it out and sends it, so the two screens cannot disagree, and a station that has not sent a grid shows a dash rather than a made-up number. (Tony Abbey)
v1.8.2 — 2026-08-13¶
Your radio's own spurs can be removed from the display, and a POTA clock that stopped being stolen.
- The spurs your radio makes itself can now be taken off the display. If you have ever seen evenly spaced signals that are always in the same place, do not move when you tune, and are still there with the antenna unplugged — those come from the QMX's own synthesizer. On the bench at 14.074 MHz, the FT8 calling frequency, the strongest sat nearly 40 dB above the noise floor. The panadapter finds them by nudging the dial 25 Hz for about two seconds: a real signal stays where it is, while these move sixteen to fifty times further. Off by default — Settings -> Waterfall -> Spur suppression, with Subtract (can never hide a real signal) or Erase (they disappear completely). Wherever something is being removed, the line under the frequency labels turns teal, so you can always see what is being touched.
- A QMX without GPS no longer overwrites an accurate clock. Set the Tab5's RTC at home, arrive at a POTA site, switch the radio on — and your accurate UTC was replaced by the radio's power-on 00:00, after which FT8 stopped decoding. The clock was only protected while the network time was fresh, and offline it never is. The Tab5's own RTC now wins, and it sets the radio's clock instead. (Don WB0LQW)
- RIT can be parked instead of cleared. Long-press the RIT button and the offset is remembered while RIT switches off; long-press again and it comes back unchanged. For a net or a round robin where one station is off frequency, the offset comes and goes as the turn passes, without re-dialling it. The button reads
RIT (+250)while an offset is parked. (Roy KI0ER) - The RIT offset is shown on the waterfall, beside its own marker, so you can read how far off you are listening without looking at the corner. (Samuel W7STF)
- The band strip no longer vanishes when you are out of band. It reads "Out of band" in one flat colour and comes back to normal as soon as you are inside a band, so the row is never just empty and the coarse-tune drag stays where your thumb expects it. (Samuel W7STF)
- The Operator Identity window no longer appears for unrelated faults. Calling CQ with a message that would not build sent you to check a callsign that was perfectly fine. The real error is now shown. (Don WB0LQW)
- The panadapter no longer switches your radio off trying to fix something it cannot. After certain restarts the QMX stops answering on USB until it is power-cycled. The recovery meant for a stuck USB port was firing at that and cutting the port's 5 V — switching the radio off in front of you, for nothing. It now recognises the difference and leaves the radio alone.
- "Adaptive floor" is documented as having no effect. Both ends of the slider produce the same picture. It was already absent from the browser for that reason; now the manual says so rather than describing a control that does nothing. (Removed outright in v1.8.3.)
v1.8.1 — 2026-08-12¶
The fixes from the first day of v1.8.0 in the field.
- The spectrum is tunable again wherever you can see it. Most of the spectrum had stopped responding to tap-to-tune — only a window in the middle worked, so it felt as though tuning only worked near the centre frequency while the waterfall was fine. The touch areas behind the top bar had been made shallower without the tune code being told, leaving a strip that belonged to nobody. The rule now is simply that if the mouse pointer is white, clicking tunes, and a finger behaves the same.
- CW centre reaches the value your radio actually uses. The radio offers 500–950 Hz in 25 Hz steps and the slider offered 600–800 in 50 Hz steps. It also could never agree with the radio, because the Tab5 pushed its stored value about thirteen seconds before the CAT link exists — so it now reads the centre from the radio at connect. (Samuel W7STF, Roy KI0ER)
- The CW transmit offset puts VFO B back. Switching it off did return the radio to simplex — FT8 was never transmitting off frequency — but VFO B was left at your frequency plus the offset for the rest of the session. It is now restored and simplex is confirmed by reading it back. Your QMX may still show both VFOs; that is on the radio's side and is reported to QRP Labs. Switching band and back clears it. (Roy KI0ER)
- RF gain and volume agree between the Tab5 and the browser. Whichever screen you opened second used to show the value from before your change. (Samuel W7STF)
- Browser spot labels no longer swallow clicks meant for a signal. A callsign can be 3–4 kHz wide on screen, and clicking anywhere in it took you to that station. A label is now a target only close to the frequency it marks. (Samuel W7STF)
- The seconds can be set again. Hours and minutes were editable and the seconds were not, so with no WiFi and no GPS there was no way to get the clock inside the second FT8 needs. Hold the SS box and release on the minute. (Don WB0LQW, gesture by Roy KI0ER)
- The RIT button can be hidden — Settings -> Radio -> Show RIT button, on by default. An offset that is actually engaged still shows itself. (Samuel W7STF)
- Saving settings from the browser could fail with "HTTP 400" once the form grew past 1 KB.
- The manual now says a Bluetooth mouse must be BLE 4.0 or later. The Tab5's Bluetooth has no Classic radio, so an older Classic mouse never appears at all and no firmware change can help. (Roy KI0ER)
- Bluetooth mouse decoding is unchanged this release. The real fault was found — only the first 22 bytes of the layout description every mouse publishes were being read — but the fix broke something else and was reverted. It will be redone.
v1.8.0 — 2026-08-11¶
RIT you set by tapping, summit spots, and a browser that finally matches the Tab5.
- RIT — receive off your transmit frequency. A caller answering slightly off your frequency can be pulled in without moving transmit. Tap RIT at the top right of the spectrum to arm it, then tap the caller: a dashed magenta marker shows where you are listening, in the spectrum and down the waterfall, while the gold line goes on meaning the dial — and therefore transmit. The filter window moves onto the caller too. It stays armed, so the next caller is another tap, and retuning clears it. Works from the browser as well. (Roy KI0ER, shaped with Michael KZ4LY and Bill Carver)
- SOTA spots. Summit activations join POTA, RBN and the DX cluster on the spectrum, from spothole.app with Ian Renton M0TRT's permission. Off by default — it is a volunteer-run server.
- Fox/Hound (DXpedition) mode, hound side. Off / Guided / Automatic. Calls from above 1000 Hz, moves onto the Fox's frequency when answered, and stops on its
RR73. Simulation-verified only — no real DXpedition has seen it yet. - The browser caught up with the Tab5, control by control. RIT; starting and stopping a POTA/SOTA activation, with a badge while one is running so it cannot be forgotten; CW pitch, IF calibration, the battery charge limit, the 180° screen flip, Fox/Hound, simulation mode and the spot mode filter; and a "Prepare for flashing" item. Only the clock-sync window is still Tab5-only.
- The browser's spectrum and waterfall now look like the Tab5's rather than approximating them — same colour maps, same floor arithmetic, and the black level, contrast, colour scheme and smoothing settings finally reach it.
- Spot mode filter. Hides spots you cannot work in the mode you are in, since tapping a spot sets the mode as well as the frequency. (Michael KZ4LY)
- Mouse and pointer. A proper arrow that turns bright green over anything a click would act on, clickable edge grips, and tappable handles on the drawer and Memory Channels.
- CW transmit offset narrowed to ±300 Hz, and the guidance corrected: earlier releases suggested 400–600 Hz, which is outside many operators' filters. Around 100 Hz or less is what works.
⚠ Two things to check if you use the browser. SWR protection set from the browser was never saved on any v1.7.x build — check it on the Tab5 (Settings -> "SWR protection (transmit)") if you set it there. And spot labels were stealing clicks: a callsign's clickable area was wide enough to swallow several kHz, so clicking a signal near one tuned you to that station instead. Both fixed, along with Bluetooth mice that send a different byte layout than the one on the bench, and two browsers fighting over the live spectrum.
v1.7.2 — 2026-08-10 — bug-fix patch
- A Bluetooth mouse could stop reconnecting until you restarted the Tab5: a part-way failed attempt stopped it trying again, and the mouse sleeps after about half a minute, so it happened routinely.
v1.7.1 — 2026-08-10 — bug-fix patch
Tried a Bluetooth mouse on v1.7.0? Install this so your WiFi doesn't go flaky.
- The Bluetooth mouse was making WiFi unstable. Switching the mouse on could leave the web UI flapping between Connected and Disconnected, with the link dropping and recovering for as long as it stayed on. The two look unrelated, which is why it took days to find: WiFi and Bluetooth share one link to the wireless co-processor, and the Tab5 was listening for every Bluetooth device in the building, continuously — thousands of advertisements a minute in a busy room, all of it crowding WiFi off the same pipe. It now listens in short bursts, and once your mouse is paired the co-processor ignores everything else, so that traffic never reaches the Tab5 at all. On the bench the underlying link errors went from about five a minute to none, with the mouse still connecting by itself. If you have not used a Bluetooth mouse, nothing changes for you.
- The settings drawer would not close. The swipe only worked if your finger started on bare background, so it felt random. Tap anywhere outside the drawer. (Michael KZ4LY)
- CW transmit offset by the hertz — −50 / −10 / +10 / +50 buttons under the slider, which covers 2000 Hz in two-pixel steps. Range deliberately unchanged. (Michael KZ4LY)
- DX cluster spots stop vanishing. A cluster with nobody typing was treated as a dead connection and dropped about every 70 seconds, losing its held spots. Quiet is normal on a cluster.
- The browser said GPS with no radio attached — the clock fault Don N2VGU reported, fixed on the Tab5 in v1.7.0 but missed in the web page.
- A failed WiFi scan says why, and one that never returns no longer sits on "Scanning..." forever.
v1.7.0 — 2026-08-09
A mouse, the phone spots that were missing, and knowing who hears you.
- A Bluetooth mouse, with the radio still plugged in. A USB mouse cannot do this: the QMX occupies the Tab5's only USB port, and sharing it through a hub does not work on this hardware. A Bluetooth mouse never touches that port. Pair it once — it reconnects by itself afterwards, across reboots and updates — and you get a pointer, a left click, and a wheel that scrolls whatever is under it. For anyone whose hands are cold or unsteady, every control becomes a click instead of a precise tap on glass. A symbol in the bottom bar shows off, scanning or connected. Off by default; see Settings.
- DX cluster spots — the phone activity RBN cannot see. RBN is automated skimmers, and no machine recognises a callsign spoken into a microphone, so every SSB station on the band was invisible to it. A cluster is people typing. Mode is worked out from the spotter's comment or your band plan, park and summit references are picked out of the text, and skimmer spots relayed onto the cluster are dropped so they cannot double what RBN already shows. See Live Spots.
- Activation mode for POTA and SOTA. Start an activation and every logged contact carries the reference automatically, with the count shown against the threshold — ten for POTA, four for SOTA — read from the log itself so it survives a reboot. Chases are tagged too, from spots already on screen. The ADIF download can be limited to one reference, so you upload that park's log rather than your whole file. Stopping is as prominent as starting, because the mistake that actually happens is driving home with it still on.
- SWR protection while transmitting. The QMX reports SWR over the control link; above your limit — 3.0:1 by default — the transmission is cut short and the transmitter latched off until you clear it. An FT8 burst is nearly thirteen seconds of continuous key-down, so a disconnected or wrong-band antenna has real time to do damage.
- Who is hearing me. Asks PSK Reporter which receivers have copied your callsign, listing distance, bearing and the report they gave you. The valuable case is the mismatch: stations you can hear that cannot hear you is a transmit-side fault, and from the receiving side alone that looks exactly like a dead band.
- Spots appear once. An activator spotted on POTA and heard by RBN was drawn twice, in two colours, almost on top of each other; RBN also doubled itself where two skimmers rounded the same signal differently. One station is now one entry, and the RBN sighting is folded in as corroboration — meaning a receiver actually copied them just now, rather than a self-spot typed an hour ago.
- Fixes: the clock claimed GPS time with no radio attached (Don N2VGU) — the Tab5 has no GPS of its own, and it was trusting a remembered verdict; each spot source checkbox is now genuinely its own source, where switching off POTA used to blank the whole lane and leave its spots behind; a tune started from the web UI now says so on the Tab5; and Antenna Tune no longer cancels itself after a second while leaving the radio keyed.
Not yet confirmed on the air: SWR protection has never seen a real mismatch, and the DX cluster lane has been verified as a feed but not watched drawing on a busy band. Reports welcome.
Installing v1.7.0¶
- Use the one-click flasher from the Releases page
- Or follow Build from Source
Your settings are preserved during a normal flash.
v1.6.0 — 2026-08-09 — the browser became a second operating position: reply to a station, pick your TX tone, edit settings and memories and read the manual from any browser; qmx.local; CW transmit offset, RF gain and Release radio; self-recovering audio; the manual gained an A-Z index and drawn diagrams; the settings drawer was grouped with a Basic/Expert toggle.
v1.5.0 — 2026-08-06 — Context-sensitive help: the User Manual button opens the chapter for the screen you are on, warning banners are tappable, and a Need guidance? panel lists symptoms in plain words with the ones the device can see highlighted. Plus Call CQ from the browser (Dennis WN4FLA) and the station you are working held at the top of the decode list (Don WB0LQW).
v1.4.0 — 2026-08-05 — Live spots on the spectrum (POTA, with RBN as an opt-in second source): callsigns drawn on the trace at the frequency the station is actually using, grey when you have already worked them on that band, press-and-drag to pick one and lift to tune it with the right mode; spots fade with age and go after 30 minutes, and corner counts take you to the ones just off-screen. Behind that, three long-standing causes of instability root-caused rather than patched around: all internet uploads were failing (QRZ, eQSL, LoTW and the update check — a hardware crypto engine starved of memory), 52 KB of internal memory was being held by the firmware's own tables (low-water mark 0 KB -> 32 KB — one cause covering the SD remount failures, USB not re-opening after a radio power-cycle, and reboots after an hour of FT8), and power-cycling the QMX could freeze the Tab5 on the dead USB connection. Plus WiFi remembers up to six networks and moves between them itself (Roy KI0ER), four of Roy KI0ER's five FT8 findings fixed, and the QRZ / eQSL / LoTW setup no longer hidden until you have logged a contact (Brian WA6JFK).
v1.3.6 — 2026-08-03 — A pure fixes release, two of them closing problems as old as the project: the "restart the QMX again and again" USB mystery solved as two separate bugs (the Tab5-side one fixed with self-healing; the QMX-side one detected and explained on screen, reported to QRP Labs), a crash on radio power-on fixed (Dennis WN4FLA), WiFi Scan working away from home, live TX status on the web page, and the "Diag(saved)" download delivering the crash log with an SD card inserted.
v1.3.5 — 2026-07-31 — Don WB0LQW's three requests, Roy KI0ER's bug report and the drawer touch fix: CQ stops calling after a limit you set (long-press Call CQ -> CQ stop, never/1-5/10, live "call 2 of 4" counter, one extra listening slot after the final call), the QSO log opens in your browser (QSO Logs -> View / edit log — sortable columns, per-row delete, type-DELETE Delete-all) with Delete all on the Tab5 too (two-tap, "ALL 34?"), an escape for the busy-station hold (TAP TO CANCEL), the settings drawer stops stealing your finger mid-drag, QMX volume verified identical to the radio's own LCD and capped at 50 dB (Randy N4OPI), and a latent bug fixed before it bit anyone: clearing the log would have silently disabled all future QRZ/eQSL/LoTW uploads.
v1.3.4 — 2026-07-29 — The same-day field reports on v1.3.3, almost all from Roy KI0ER: a partner who never decoded your final now gets it re-sent (up to three times in four minutes) instead of the Tab5 moving on without ever making their log, finishing by hand no longer writes duplicate log entries, the fabricated 599 signal reports nobody sent are gone from the ADIF log, and the occupancy map is filtered by time window — a tone busy only in the opposite slot no longer reads as busy for you. The TX frequency became a permanent button on the FT8 screen with a live mini occupancy strip under the slot countdown, TX Hold (WSJT-X's "Hold Tx Freq") pins your tone, the parity choice is one cycling TXCQ ANY / EVEN / ODD button, and WiFi strength in the bottom bar is a fan icon with the freed width going to the network name.
v1.3.3 — 2026-07-29 — Your TX audio frequency became visible and adjustable for the first time: a tone picker with a live occupancy strip across the 200-2800 Hz window, drag-to-pick, ±50 Hz, Find clear slot, changeable mid-QSO but never mid-burst (Roy KI0ER). The Tab5 also stopped calling stations already working someone else — which additionally stopped a merely-popular station being grey-listed for it — an incoming RRR began closing a QSO like RR73 (it used to deadlock), a QMX volume slider in dB matching the radio's own LCD arrived for control-panel-less QMX+ builds (Randy N4OPI), and LoTW uploads gained US state and county, whose absence had been costing US operators their Worked All States and county credit (found via Paul N8HM's CardSat).
v1.3.2 — 2026-07-26 — Grid squares are logged again (almost every QSO was missing GRIDSQUARE — John W5JSS), PSK Reporter spotting on by default (since confirmed working: "QMX Panadapter v1.3.2" is listed under "Software in use" at pskreporter.info with spots from six stations — note the 5½-minute delay before the first report, and that PSK Reporter never acknowledges anything, so that page is the only place to check), the User Manual built into the firmware so it needs no WiFi and no SD card and the "Save offline" button is gone, an explicit microSD backup contract (continuous with WiFi off and a green dot; one complete backup per start-up with WiFi on and a yellow dot — insert the card before switching on), grey-listing for stations that never answer (opt-in), and pileup replies using the intelligent-Transmit laddering (both Roy KI0ER).
v1.3.1 — 2026-07-24 — Two decode-list columns requested by Roy KI0ER (DT, the station's slot-timing offset, and HZ, its audio tone, with the country column compacted to a 3-letter code), a boot-diagnostics fix so ST7121 units report the hardware actually detected (Paul VE3PIK), and UI alignment polish (QMX prompt placement, FT8 left-pane grid, settings-drawer dropdowns and sliders).
v1.3.0 — 2026-07-23
Smarter manual FT8 operation — built around field feedback from Roy KI0ER — plus a rebuilt practice simulator, USB mouse support, and a web file browser for the microSD card.
- Intelligent Transmit. Tapping a decoded station's Transmit now sends the correct next message for that exchange — their CQ gets your grid (or your report with Skip-TX1 on), their grid gets your report, their report gets your roger, and so on — the same behaviour as a WSJT-X double-click. You can run a whole QSO by hand, one tap per step, and it logs to ADIF like any other contact when you send the closing RR73/73.
- Faster replies. The mid-slot reply window is wider and hand-armed exchanges now land on the beat instead of a cycle late. A subtle bug that made every exchange step transmit twice in some cases is fixed.
- Fast pounce (early decode) — new toggle, on by default. Decodes appear before the slot boundary (the way WSJT-X works), so answering a fresh CQ can transmit in the very next slot instead of waiting 30 s. ⚠️ Honest note: this specific feature hasn't been verified on a live band yet (no antenna at the development QTH until mid-August). The known trade-off is that a station transmitting late in the slot can occasionally be missed. If your decode counts drop with it on, switch it off in the FT8 settings drawer — and please report your before/after numbers on the groups.io thread; that's exactly the field data we need.
- Pileup no longer hides the log. While callers are waiting the ADIF-log button reads "Pileup" — holding it now always opens the ADIF log (a one-time hint teaches the gesture). Auto-work pileup also starts draining immediately when you enable it with callers already waiting, and worked-before stations only vanish from the pileup when you've actually checked "Exclude worked-before".
- Practice simulator, rebuilt. FT8 Simulation Mode now needs no radio at all — six phantom stations (US + DX) call CQ, four of them answer your CQ at once (a real pileup to practice on), and they're patient like real operators: each repeats its message up to four times before giving up. They answer manual step-by-step Transmit, Auto Pounce, and CQ-runs alike. When you're done, a "Del N test" button in the ADIF viewer (only visible while practice contacts exist) wipes them from the log in two taps.
- USB mouse. Plug a mouse into the USB-A port — a cursor appears and clicks drive everything. (Limitation: the mouse and QMX can't share the port, and a USB hub can't bridge them on this hardware — so it's for setup, log review and manual reading with the radio unplugged.)
- microSD file browser. Files -> SD Files in the web page opens a browser for the card — download logs and backups, upload, delete — without pulling the card out.
- User Manual on a fresh boot now waits for WiFi instead of asking for a reboot.
v1.2.0 — 2026-07-20 — A built-in User Manual on the Tab5 itself (Settings drawer -> User Manual): native markdown reader with a drag-to-pick two-column Contents page, offline copies to microSD (Save offline), and a quiet GitHub firmware-update check. (The Save-offline mechanism was superseded in v1.3.2 — the manual now ships inside the firmware.) Plus the FT8 pileup fix: a worked (or late-answering) station no longer lingers in the pileup. (Thanks to Dirk DK7CVD.)
v1.1.0 — 2026-07-19 — A years-old FT8 decode mystery solved: the panadapter used to hear 60+ stations in its first slots then collapse to a fraction; the cause was ~200–350 ms of QMX audio lost at the USB wire every slot (invisible to every counter). Fixed — full decode rate every slot now. Plus the microSD card promoted to a full grab-and-go station backup (QSO log + settings + LoTW cert/key), automatic GPS time sync (~10 ms, no toggle), a band-plan drag from the bottom bar, and an ADIF-viewer crash fix.
v1.0.1 — 2026-07-17 — Point fix: when you answer a CQ, the report you send back is your own measurement of their signal, not an echo of theirs. (Reported by Steve N0SZ, Jonathan KN6LFB.)
v1.0.0 — 2026-07-16¶
The 1.0. The beta label is gone: the QMX Panadapter is a complete, self-contained FT8/FT4 station — receive, transmit, auto-QSO, logging, and upload to all three major logbooks — with no PC anywhere in the loop.
- LoTW upload — the final piece. QSOs are signed on the device with your own ARRL callsign certificate and uploaded directly to Logbook of the World. One-time guided setup from the web page (step-by-step TQSL certificate export, then import — your certificate passphrase never leaves your browser). Live-verified against lotw.arrl.org. Certificate renewal: Ctrl-click the LoTW button
- The FT8 "everything sent twice" behaviour is fixed. Replies used to miss their own slot by ~2 seconds and go out again next cycle, doubling QSO duration; the transmitter now holds ~2 seconds for the fresh reply and fires it on the same slot. Field-verified on air
- Nonstandard callsigns work now: special/compound calls (special-event stations,
PJ4/...) no longer show as<...>once heard in full, and their answers to your CQ are recognized - Correct received reports in the log: the partner's
R-06-style roger is their real measurement of your signal and is now logged as such — no more 599 placeholders from CQ runs. (Old 599 rows can be deleted — see next) - QSO log viewer grows up: a Today/All filter with a POTA activation counter (title turns green at 10 QSOs today), and single-record delete — long-press a row, drag to the right line, release, confirm. Deletions keep all three logbook upload positions consistent
- Broken QSOs resume: if a station fades mid-exchange and comes back within a few minutes, the exchange continues where it stopped (automatically, or by tapping their row) instead of restarting from scratch
- Steadier decode list during CQ runs: stations you can't currently hear (they transmit when you do) no longer vanish mid-run, and the list keeps entries for 2 minutes instead of 1
- Display sleep: set an idle timeout and the screen turns off while everything keeps running (FT8, radio link, web UI). Tap to wake — the wake tap can't press anything. Two-finger double-tap blanks immediately. A real battery win for unattended and web-only use
- Reorganized settings drawer: setup items (WiFi, callsign, band-plan region, brightness, battery care, display sleep) grouped at the top, display-tuning controls below
- Web page polish: the bottom bar's many buttons are now three tidy menus (QSO Logs / Files / Miscellaneous); a congested WiFi link can no longer freeze the page for seconds
- A rare crash fixed: a momentary USB glitch on the radio-control link could reboot the whole device; it now just retries
- Full writeup in Version History Document
v0.21.0¶
- FT4 returned — the panadapter no longer redraws itself behind the FT8/FT4 screen, freeing the processor headroom FT4's 7.5-second cadence needs; verified end-to-end (RX + TX)
- Fixed a full-screen display flash (mostly in FT4); QRZ upload no longer gets stuck on already-logged contacts; reset settings or Wi-Fi from the web page; QMX VOX switched off automatically at link time
v0.20.1 / v0.20.0¶
- Robustness release. WiFi "dies after a few minutes" fault now self-heals instead of needing a reboot; opening a window no longer freezes the device; the radio-control (CAT) link rides out USB glitches; the web UI pauses its stream while FT8 runs
- FT8 decode timing anchored to the exact slot boundary; FT8 pile-up list + "Skip TX1" quick pounce; 11 m/CB band; memory-channel overhaul; battery-care charge limit; web-UI whole-band plan strip, draggable split, better screenshots and keypad
- microSD now on its own bus (SD auto-archive still off — it squeezed memory needed by FT8)
- v0.20.1 hot-fix: fixed a reboot on every pounce (a scratch table overflowed a small task stack; moved to PSRAM)
- (FT4 was switched off across v0.20.x for the memory pressure now resolved in v0.21.0.)
v0.19.5¶
- AM mode + Antenna Tune for QMX 1_04+ firmware (invisible on stable 1_03_002)
- Fixed a crash on leaving FT8 mode; WiFi on/off now applies live and no longer wipes a saved password; FT8/FT4 remembers its own frequency
- Band picker shows all bands in two columns; band-plan strip is a see-through framed window with 6 m segments; steadier point-to-tune; settings-drawer slider/scroll fixes; DiGi-gated memory recall in FT8/FT4
v0.19.4¶
- FT4 usability — four stacked faults fixed: a capture buffer's FFT workspace in slow memory (every other slot decoded nothing), a mis-firing stuck-decoder watchdog wiping the list mid-QSO, an uncapped per-slot clock nudge, and slot-parity computed on FT8's grid in FT4
- QMX IQ-mode confirmation hardened (readback no longer fooled by the command echo)
- See-through frequency keypad; settings-drawer declutter (removed Snap-to-signal + FT8 sync lines, moved Band-plan region)
v0.19.3¶
- QMX IQ-mode handshake retried automatically (up to 4 attempts), with a red on-screen banner if all attempts fail — a silent failure could leave a whole session without I/Q data (spectrum shifted, tunable across the full 48 kHz window)
- Band-plan strip: tracks zoom/pan live, shows the filter passband at band scale, drag-to-tune and tap-to-jump directly on the strip
- Memory channel drag-to-move; tap an empty slot to create; out-of-band frequencies rejected immediately
- Frequency entry popup: draggable, resizable (pinch/swipe), position remembered across reboots
- ADIF log viewer rebuilt: real column alignment, sticky header, Country and Mode columns, Sent/Rcvd split, zebra rows
- FT8/FT4 TX confirm dialog: up/down nudge buttons; FT4 countdown and title corrected for 7.5-second slots
- FT4 clock-sync fix (timing offset was using FT8's block geometry, ~3.3× wrong) and FT4 decode-quality fix (FT8's iteration cut no longer applied to FT4)
- QRZ/eQSL uploads more reliable (SD auto-archive paused during uploads); web UI stale-connection freeze capped at 5 s
v0.19.2¶
- microSD auto-archive: diagnostic log, ADIF log, and a config export are mirrored automatically to a microSD card when one is inserted
- Diagnostic log is now always-on and survives a power loss (a rolling copy persists to internal flash, downloadable even with no SD card)
- USB reconnect fix: power-cycling the QMX after WiFi is up no longer breaks audio/CAT
- Crash fix: a USB disconnect race that could reboot the Tab5 when the QMX dropped off USB
- QMX IQ mode is now verified, not assumed — the panadapter checks the radio actually accepted the I/Q-mode command instead of just checking the USB write succeeded
- FT8 continuation messages (report, RR73, 73) resend less often during an active QSO — decode time on busy slots cut by ~25-30%
v0.19.1¶
- New project homepage at tab5.lav.dk — the user guide and reference as plain web pages
- Logbook uploads (QRZ / eQSL) and log downloads now work reliably while FT8 is running — no more reboots or dropped WiFi during a transfer
v0.19.0¶
- FT4 transmit and receive (7.5-second slots, 105 symbols, 48 ms cadence) — CAT cadence verified on real QMX hardware
- Per-mode sticky frequency/bandwidth/filter recall between FT8 and FT4
v0.18.8¶
- ARRL Field Day FT8 exchange mode (class + section in message, special TX sequence, ADIF logging)
- FT8 simulation mode (practice QSOs with phantom stations, no radio keyed)
- FT8 decode yield investigation closed (found and fixed 3 separate CPU contention issues)
v0.18.7¶
- Decode-yield gap closed (controlled A/B with v0.18.0 confirmed fixes sufficient)
- Auto-answer robot mode un-shelved (live TX, full disclaimer on-screen)
- CQ tone auto-relocation on clash
- SNTP/QMX time-priority fix + FT8-derived auto-sync
- Flasher recovery mode + auto port detection
v0.18.6¶
- FT8 sparse-decode investigation: found 3 separate regressions since v0.18.0
- Fixed:
cw_audio_init()ghost task, missing poll-task CDC tolerance, waterfall style-set loop - RST_SENT fix in CQ-run QSO
- Distance-in-miles display toggle
- Diag-log dot + firmware version in bottom bar
v0.18.5¶
- Band-aid for FT8 decode regression (incomplete; issue fully addressed in v0.18.6)
- Critical bootloader-corruption hotfix (flasher wrote to 0x0 instead of 0x10000)
- FT8 double-spawn crash guard restored
v0.18.4¶
- Band-nav strip (CW/Digi/Phone color zones below frequency axis)
- One-finger pan/stroll (spectrum scroll + center-freq readout)
- Snap-to-signal peak detection
- Band-aware worked-before (callsign + band memory)
- Robot mode (complete but shelved — greyed out, disabled)
v0.18.3¶
- Waterfall live controls (black level, contrast, adaptive floor, FFT window selector)
- Display 180° flip toggle
- Image rejection investigation (reverted — not a firmware issue)
v0.18.2¶
- Idle reboot resolved (WiFi SDIO RX streaming -> mempool recycled buffer)
- Web UI freeze/reconnect fix
- BW from web (CW passband)
v0.18.1¶
- Config backup/restore (settings + memory channels + ADIF log as INI file)
- Flasher clean-flash option
- Memory recall fix (CAT race condition -> optimistic display + deferred writes)
- Fast Panadapter<->FT8 toggle crash fix
v0.18.0¶
- FT8 decode rework: streaming STFT + dual-core + reply-on-immediate-slot
- dBm scale restored on spectrum
- Multiple field-reported fixes (memory freq, tap-to-tune reversal, band lockout)
v0.15.x and Earlier¶
See Full Version History for detailed notes on all earlier releases.
Roadmap¶
Next up (post-v1.0.0)¶
- CW page — canned-message CW TX memories, then decoded-CW display
- Binaural CW audio — a stereo sound stage so two stations a few tens of hertz apart land in different places in your head (asked for by Roy KI0ER; shaped by Don N2VGU and Michael KZ4LY, whose point that the stage width should be a setting rather than a fixed angle is now the plan). Waits on the same audio-output rework as the CW page
- Live microSD mirroring while WiFi is up — continuous mirroring currently only runs with WiFi off; v1.3.2 made that explicit and reliable (one complete backup per start-up with WiFi on). This was believed to be bus contention between the card and the WiFi co-processor. v1.4.0 found that a large part of it was actually a memory shortage — the pool the card needs to mount had been squeezed to almost nothing, and now has room again — so this may already behave better than documented. Needs a retest before the behaviour is changed
Future Additions¶
- CW audio (shelved since v0.18.5 due to CPU contention; needs pipeline redesign)
- Offline maps (grid squares, distance visualization)
- Video tutorials & regional quick-start guides
Download & Documentation¶
- Source code: GitHub Repository
- Releases: GitHub Releases
- User Guide: PDF or Web
- Build Guide: Build from Source
- Technical Details: CLAUDE.md
Have a question? Check Quick Start or Troubleshooting.