Metadata-Version: 2.4
Name: qrss-ei
Version: 0.2.0
Summary: A simple QRSS CW (very slow Morse code) transmit software.
Author-email: "Dr. Andreas Krüger, DJ3EI" <dj3ei@famsik.de>
License-Expression: MIT
Project-URL: Homepage, https://codeberg.org/omwb/qrss-ei
Project-URL: Repository, https://codeberg.org/omwb/qrss-ei
Project-URL: Issues, https://codeberg.org/omwb/qrss-ei/issues
Keywords: ham,amateur radio
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Science/Research
Classifier: Topic :: Communications :: Ham Radio
Requires-Python: >=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: morse2sound~=1.0.7
Dynamic: license-file

# qrss-ei: Software to transmit QRSS CW signals

## Introduction

### What is QRSS CW?

Very slow Morse code. In normal Morse code, the beginner's slow speed
is 60 cpm (characters per minute), which is the same as 12 wpm (words
per minute).  At that speed, the fundamental unit, the "dot length",
is 100 ms.  In QRSS, the dot length is much longer, commonly 3 seconds
or more.  In other words, QRSS is Morse code with a speed of 2 cpm =
0.4 wpm or less.

Normal CW is on-off-keying. QRSS is commonly sent as
frequency-shift-keying, with the "key engaged" frequency typically
being 5 Hz above the "key released" frequency.

Finally, typical QRSS receiving software assumes that the QRSS
transmission is repeated a few times, once every 10 minutes,
preferably with exactly the same timing as 10 minutes earlier.  This
is used to "integrate" several transmissions, so the information can
be fished out of the noise better.

QRSS is also very much a QRP mode.  Typical transceivers put out a few
100 mW or so, some even less.

The waterholes for people interested in this mode seems to be

- To read up on it: [Scott Harden + Andy
  resources](https://swharden.com/qrss/plus/)
- To meet others doing it (and read up some more): [QRSS Knights
  mailing list](https://groups.io/g/qrssknights)

### What is this project?

This software enables me to transmit QRSS signals.

Management summary: This is a programm that talks to
[rigctld](https://hamlib.sourceforge.net/html/rigctld.1.html) from the
well-known [hamlib](https://hamlib.github.io/) software package.  The
rig should be set to RTTY mode, which will cause a carrier to be sent
whenever PTT is pressed. Alternatively, some other such mode can be
tried (AM and FM would work as well).

No actual characters are ever emitted to be sent via RTTY.  Also, this
uses the "data" variety of "PTT", and as no data comes in, AM and FM
should also send a bare, unmodulated carrier.

On each frequency shift, the PTT is briefly released, the frequency
shifted 5 Hz up or down, and the PTT again pressed.  I'm not sure
whether this is needed.  I fancy it reduces bandwidth occupied.  Not
sure.

This software is strictly a command-line utility.  It needs only plain
Python without any modules that need compilation.  It does make use of
the [morse2sound](https://gitlab.com/4ham/morse2sound) software by the
same author, which has the code to convert text into Morse code
characters.  But morse2sound is plain Python as well.

### What do I use to *receive* QRSS CW?

This software does not help you to receive QRSS CW.  To do that, I
presently use [Lopora](https://www.qsl.net/pa2ohh/11lop.htm).

#### Installation hints on Lopora:

The Lopora instructions address unconventional installation targets.
On my plain Python installation on my plain Linux Debian Laptop, I
found I just needed an active [virtual
environment](https://docs.python.org/3/library/venv.html#creating-virtual-environments)
with this pre-installation:

```
pip install numpy pillow pyaudio
```

On my Debian Linux Trixie box, I'm using "pipewire" as the "audio
device for input".  I then set the input device actually used via the
standard Gnome configuration.  This basically ties up audio while
Lopora is used.

## Installation of qrss_ei

The following steps should give you an executable script `qrss_ei`
intended to be run in a terminal.  To actually send QRSS, you will
also need to run
[rigctld](https://hamlib.sourceforge.net/html/rigctld.1.html) from the
well-known [hamlib](https://hamlib.github.io/) software package to
actually connect to your rig.  `qrss_ei` has no code to connect to your
radio, it only knows to connect to `rigctld`.

For further instructions, see the output `qrss_ei -h` gives you.

### Plain Python

- Construct a plain Python [virtual
  environment](https://docs.python.org/3/library/venv.html#creating-virtual-environments)
- activate it
- `pip install qrss-ei`

### uv

If you use the [uv](https://docs.astral.sh/uv/) Python dependency
manager:

- Construct a uv virtual environment with `uv venv`
- activate it
- `uv pip install qrss-ei`

## The name

Has two sections: The "qrss" part stands for what you can transmit
with this, the "ei" part is derived from the suffix of my, the
[author](https://dj3ei.famsik.de)'s, radio amateur call sign DJ3EI.

I do not seem to be able to make up my mind whether to separate the
two with `-` or `_`, so the Python project and the repo have `-`, but
the Python package and the script have `_`.
