Repository navigation
Releases
Aether Term 1.2.0
Added
- KISS TNC mode: connect straight to a radio's built-in TNC, like
EasyTerm or VARA Terminal. Choose KISS TNC in the toolbar. The TNC can
be on a COM port (a Kenwood TH-D74/D75 paired over Bluetooth, or USB),
on Bluetooth LE (VR-N76, VR-N7600, Mobilinkd and similar; press Scan),
or on TCP (Direwolf, port 8001). Aether Term runs the AX.25 connection
itself (calls, acknowledgements, retries, digipeater paths) and can set
the TNC's TXDELAY, persistence and slot time. Settings are in
Settings → Modem Configuration → KISS TNC; profiles can use the mode.
Bluetooth LE has been tested only against a simulated radio so far.
Aether Term 1.1.11
Fixed
- Connect can't start a second call during a session. File → Connect
(Ctrl+Shift+C) stayed available while connected and opened a second
connection on top of the live one. It is now greyed out like the
Connect button. - The mode can't be changed in Settings during a call. The toolbar
already refused, but Settings did not, and pressing OK closed the modem
program mid-session. The mode buttons in Settings are greyed out while
a call is under way. - Hamlib's Dummy rig no longer passes for a radio. With the default
rig model (Hamlib Dummy), Aether Term reported "PTT connected" but
never keyed the radio. Connect now stops and asks you to choose your
radio's model. - A saved password is used for any SSID of your callsign. A password
saved for operator KK4ODA-7 was not used when you connected as KK4ODA
or KK4ODA-2. An entry for your exact callsign still comes first. - Automatic login turned off no longer says "No saved password". With
a password saved and Auto-respond to HMAC challenges off, the
terminal now says automatic login is off, and shows the BBS's password
prompt (it was hidden). - FM Bandwidth says what it does. VARA FM has no command for the
narrow/wide setting, so Aether Term only shows it in the status bar;
its tooltip now says to set the real bandwidth in VARA FM's setup. - Local test help: the BBS instance form has no Host field, so the
help no longer tells you to set one. - Tooltips: the VARA HF bandwidth default is 500 Hz, Soundmodem
auto-launch starts it with Aether Term and on switching modes, and
profile digipeaters work with Soundmodem too.
Aether Term 1.1.10
Fixed
> ;TRANSPORT VARA_FMno longer shows at the login prompt in local
test mode. With no radio in between, the BBS's>and its answer to
;TRANSPORT?arrived together and slipped past the filter. The same
applies to;AUTH OKarriving on the prompt's line.- "No saved password" says what it looked for: the station and the
operator callsign, so a mismatch with Settings → Security / Passwords is
easy to see. - A password typed by hand at the BBS's login prompt is masked. It was
echoed on screen and in the session log in clear; it shows as
********now.
Aether Term 1.1.9
Added
- Local test mode: talk to a BBS on this PC with no radio. Choose
Local test in the toolbar. Aether Term listens on 127.0.0.1 (ports
8500/8501 by default) as a VARA FM modem, and a BBS instance set up for
local test attaches to it; Connect then reports an inbound call to the
BBS and the session runs through the same code as on the air. The
callsign to connect as can be chosen (Settings → Modem Configuration →
Local test, which also says how to set the BBS up). The title bar and
status bar say it is local test.
Fixed
- The BBS's answer to
;TRANSPORT?is no longer shown. The screen
showed> ;TRANSPORT VARA_FM, a blank line and a second>. The
answer is now hidden (its link type is in the status bar) and the
prompt shows once. A;TRANSPORTline at any other time still shows. - Login is noted when
;AUTH OKfollows the hidden password prompt.
It arrived as> ;AUTH OKand was shown raw; the "Authentication
successful" message and the tactical address that follows it were lost.
Aether Term 1.1.8
A cleanup release: dead code removed, duplicated code merged, and the bugs
found along the way fixed. See CODEBASE_AUDIT.md for the full findings.
Fixed
- Settings and saved passwords are never overwritten after a read error.
Asettings.jsonthat failed to parse, or apasswords.encthat failed
to decrypt, used to be replaced at the next save, losing every profile or
password. The unreadable file is now kept as*.unreadable-<time>, startup
says so, and both files are written safely (temporary file, then rename). - VARA HF Disconnect keys the radio for the disconnect frames. PTT was
released before the DISCONNECT went to VARA, so the other station never
heard the link end. - Connecting from the Profiles window uses the profile. Closing the
window reset the profile just connected, so the call went out under the
global callsign, with the wrong saved password and no tactical address. - Soundmodem:
- If Soundmodem quits or crashes, the session now ends instead of showing as
connected. - An unanswered call is cancelled on the air after 60 s (it was 30 s, and
Soundmodem kept calling). - Disconnect while calling cancels the call.
- A timeout from an earlier call no longer fails the next one.
- If Soundmodem quits or crashes, the session now ends instead of showing as
- Radio PTT (OmniRig, Hamlib, FLrig):
- A rig that answers too slowly is reported as not connected instead of
"PTT connected". - Keying still queued when PTT stops can no longer key the radio afterwards.
- Hamlib: rigctld can no longer stall on its own messages, a late reply is
not taken as the answer to the next command, and a rigctld that fails to
start says why. - FLrig calls have their own timeout.
- A rig that answers too slowly is reported as not connected instead of
- Git installs:
- "Update & Restart" restarts again (it relaunched a relative path and
never came back). - A failed update gives local changes back.
- A clone ahead of GitHub is no longer told there is an update.
- "Update & Restart" restarts again (it relaunched a relative path and
- Installed builds:
- A failed installer download leaves no files behind.
- The update dialog can't be closed mid-download.
- A startup failure is shown in a dialog.
- Text and settings:
- "Enter password:" no longer shows during automatic login on slow links.
- Accented characters split between two radio frames display correctly.
- Settings → Max Retries now takes effect.
- A modem path you clear stays cleared.
- Hamlib download:
- Archive entries that point outside the install folder are refused.
- The download no longer falls back to unverified TLS.
- The rigctld path is filled in after an install.
Removed
- The "plaintext fallback" setting and auth mode. They said a password would
be sent in plaintext if HMAC failed; nothing ever did, and nothing should. - Unused code: the radio clients' frequency/mode API, unused signals,
methods and settings defaults, and the pyserial dependency.
Aether Term 1.1.7
Fixed
- Profiles in another mode swap the modem program. Choosing a
connection profile whose mode differs from the current one (say a
VARA FM profile while in Soundmodem) changed the mode but left the old
modem program running and didn't start the new one. It now does what the
mode dropdown does: closes the old modem's link and program, then starts
the new one, if that mode's auto-launch setting is on. Connect from the Profiles
window waits 5 seconds for a freshly started modem before calling.
(gui/main_window.py) - No mode or profile change mid-call. The profile dropdown is now locked
during a call, like the mode dropdown. Switching modes is refused with a
note until you disconnect. (gui/main_window.py) - A mode switch in the first half-second after startup could start the
new modem program twice. (gui/main_window.py)
Aether Term 1.1.6
Added
- FLrig and Hamlib PTT. Settings → Modem Configuration → HF PTT Control
now offers Hamlib (rigctld) and FLrig next to OmniRig and VOX, for
VARA HF and host-keyed Aether HF. Each method shows only its own
settings: OmniRig's rig number, FLrig's host and port, or the Hamlib
panel (rig model, serial port, rigctld address, auto-launch, and the
Hamlib download). The drivers were already in Aether Term but couldn't be
selected. (gui/settings_dialog.py, vara/ptt.py, config.py)
Changed
- Connect stops when PTT can't reach the radio. It used to go ahead with
a warning, and the call went out with the radio never keyed. Now, unless
the PTT method is None (VOX), Aether Term starts PTT before opening the
modem link. If that fails, the modem is never called, and a dialog says
why (for example "Cannot connect to FLrig … Is FLrig running?") and how
to fix it. VARA FM and Soundmodem are unaffected: they key the radio
themselves. (gui/main_window.py) - The startup "OmniRig not running" notice appears only when OmniRig is
the PTT method. (gui/main_window.py) - Soundmodem (AGWPE) traffic is logged. Every frame Aether Term sends to
or receives from Soundmodem goes intoaether-term.log(kind, port,
calls, PID, length, the first 80 bytes). Heard-traffic monitor frames are
logged at debug level only. This is for a Soundmodem session through a
digipeater that connected but passed no data: the log will show whether
the typed lines reached Soundmodem. (vara/agwpe.py, vara/agwpe_modem.py)
Aether Term 1.1.5
Fixed
-
The radio can no longer be left keyed by PTT commands running out of
order. Each VARA HFPTT ON/PTT OFFwas handed to its own
background thread. When keying the rig was slow (OmniRig, CAT), a
PTT OFFcould run before thePTT ONahead of it and leave the
transmitter keyed until the 90-second watchdog fired. Keying now runs on
one worker thread, in the order VARA asked, and the watchdog's forced
release queues behind it. (vara/ptt.py) -
PTT is released whenever the modem link closes. If VARA crashed or
its TCP link dropped mid-transmission, the radio stayed keyed until the
watchdog fired. A call that failed withWRONGorCANCELPENDINGalso
left the rig link open. Now any end of the modem link unkeys the radio
and closes the rig link at once. (gui/main_window.py) -
Via boxes show the whole callsign. In 1.1.4 the Via 1 / Via 2
dropdowns had only a maximum width, and the toolbar squeezed them to about
35 px: "None" read "one" and only two letters of a callsign were visible.
They now always have room for a full call with SSID (WD5EMA-15).
(gui/main_window.py)
Added
- VARA HF sends
P2P SESSION. VARA's command reference says
P2P SESSION"must be used for P2P connections, not for Gateways", and
VARA HF defaults toWINLINK SESSION, a 4-second retry cycle meant for
Winlink gateways. Calls to a BBS or station now use P2P. A new
Settings → Session Type option switches to Winlink gateway for RMS
calls. VARA FM, Aether HF and Soundmodem are unchanged.
(config.py, vara/modem.py, gui/settings_dialog.py) - Digipeaters with Soundmodem (AGWPE). Via 1 / Via 2 now work in
Soundmodem mode. The call goes out as AGWPE's "connect via" frame (v:
the digipeater count, then each call), so the path is set per call from
Aether Term. Soundmodem's ownDigisettings are for Soundmodem acting as
a digipeater, and do not route outgoing calls. VARA HF and Aether HF still
refuse a Via path. (vara/agwpe.py, vara/agwpe_modem.py, gui/main_window.py) - VARA HF end-to-end tests. A full session against the fake modem
covers the init commands,CONNECTED … 2300, PTT keying and unkeying
through a fake rig, release on disconnect, a refused call, a rejected
CONNECT, and a modem crash while keyed. The PTT controller has its own
tests for ordering, the watchdog and stop. Both modem drivers now ignore
initialization arguments they don't use, so a new argument can't crash
one of them again. (tests/test_vara_hf.py, vara/modem.py,
vara/agwpe_modem.py)
Aether Term 1.1.4
Changed
- Via 1 / Via 2 are dropdowns that remember. Both boxes offer None
plus the digipeaters you have used before, most recent first, up to 10. You
can still type a new one. Each call's choice, None included, is saved and
comes back the next time Aether Term starts, so a digipeated route is not
lost to an empty box. Picking a profile still fills both boxes.
(gui/main_window.py, config.py)
Fixed
- Soundmodem (AGWPE) connects no longer close the app. Since 1.1.0 the
window called the modem's initialization with an argument the Soundmodem
driver didn't accept, and the error inside a Qt event handler made PyQt6
abort the program the moment the TNC link came up. The driver now takes the
same arguments as the VARA one and reports its states, so the AX.25 connect
actually goes out. (vara/agwpe_modem.py, gui/main_window.py) - AGWPE frames match the spec. The frame header was packed as 40 bytes
instead of the AGWPE protocol's 36, which shifted the callsigns, the data
length and the data by 4 bytes, so Soundmodem could not have understood
any frame. (vara/agwpe.py) - Switching modes no longer kills the next call. When Connect replaced
the modem (for example VARA FM → Soundmodem), the old modem's final
"disconnected" reached the window after the new call had started, and the
idle-link cleanup closed the new link. The old modem is now silenced before
it is closed, and the Soundmodem driver no longer announces "disconnected"
at the start of a connect. PTT messages are also no longer doubled after a
mode switch. (gui/main_window.py, vara/agwpe_modem.py) - Unexpected errors are logged instead of closing the app. An error
inside a Qt event handler is written to the log with its traceback and
shown in a dialog, and Aether Term keeps running. Errors in background
threads are logged too. (main.py)
Aether Term 1.1.3
Fixed
- Commands to BPQ nodes work. Typed lines always ended in CR LF. A BPQ
node ends a command at the CR and keeps the LF as the first character of
the next one, so every command after the first arrived garbled. Aether Term
now answers in the BBS's own convention, learned from what the BBS sends:
a bare CR for BPQ and most packet nodes, CR LF for the Aether BBS. A BPQ
node says nothing until spoken to, so the first line goes out with a bare
CR. A BBS that greets first shows its CR LF before you type.
(gui/main_window.py) - Prompts without a line end are shown. BPQ applications wait at prompts
such as1 Check in 2 Check out 3 Roster 4 Back:with no line end, and
only short prompts ending in>or:used to appear. Now any unfinished
line is shown once the BBS has been quiet for a second. When the rest of the
line arrives, it continues on the same screen line, so a line VARA split
across radio frames still reads as one line. (gui/main_window.py) - No
;TRANSPORT?to BBSes that don't know it. The Aether BBS transport
query used to go out one second after every connect, and a BPQ node read it
as a bad command. It is now sent only once the BBS has shown CR LF line
ends, as the Aether BBS does. (gui/main_window.py)