CSVF2 - radio text/file modem      (version 1.4, 2026-09-21)
==========================================================

CSVF = client server via frequency.

Sends text or a file over a voice radio as audio tones, and receives it again.
Your callsign is spoken (NATO phonetics + numbers) at the start, at the end and often enough on
long transmissions to stay inside the 10 minute rule. audio/website.wav plays right after the
tones and before the closing callsign.

Long transmissions are sent in bursts of 2 minutes with a silent gap between them, so a radio
with a time-out timer (e.g. TYT MD-390, 180 s) un-keys and resets. Each burst starts with a
steady 400 Hz keying tone for VOX radios. Both are settings on the Transmit tab.

Quick start
  1. Install Python 3.10 or newer.
  2. pip install -r requirements.txt
  3. python radio_gui.py

radio_server.py runs a station that answers on its own: it listens all the time, and when it
hears the text "ping" it transmits "pong" (both texts are settings). It has the same settings
as the window and remembers them.
  python radio_server.py

The Server tab of the window talks to it: you give an 8-character path (like the part after
the / in a web address), send text or a file, and the tab starts listening the moment the send
is finished. After your last callsign it sends an end tone (450 Hz, 2 s) so the server knows you
are done and answers 1 s later, instead of waiting a fixed 30 s.

Transmit tab : pick Text or File, type your callsign, choose a Speed, Transmit.
Receive tab  : choose the radio's audio input, Start listening. The Sensitivity slider sets how
               weak a signal may be and still start a message (higher = weaker signals, but a
               greater chance of starting on noise). Messages appear
               in the log; when a file finishes you get a save prompt.

Files
  radio_gui.py     the window
  radio_server.py  the automatic ping/pong station
  radio_modem.py   the modem (encoder + decoder, no GUI, protocol described at the top)
  audio/           a-z (phonetic words) and 0-9 clips for the spoken callsign, and
                   website.wav (replace it with your own announcement, or delete it
                   to skip it). Keep this folder next to the .py files.

Full documentation: the CSVF2 page on the KE9GDP site.
You are responsible for operating within your licence and local rules.
