/WinKeyerMMTY

WinKeyerMMTY FSK is an MMTTY extension for WinKeyer 3.1 or later

Primary LanguageC++GNU Lesser General Public License v3.0LGPL-3.0

WinKeyer FSK for MMTTY

This is a source code repository of WinKeyerMMTY FSK extension. It supports WinKeyer devices containing WinKeyer firmware revision 3.1 or later. Those devices are capable of keying RTTY FSK signal.

This extension also works with DXLog, a contest logger. You can use different decoders with DXLog: MMTTY, MMVARI, 2Tone, GRITTY. However, with this extension and a WinKeyer, you can dedicate MMTTY to do all the FSK sending.

Why?

If your transceiver supports FSK you may want to use it instead of generating audio-based AFSK and then modulating it using LSB. Why? Many reasons: to use your transceiver's special FSK filters, to avoid having to configure any Tx audio levels anywhere, not to have to think about frequency offsets (mark is mark), or just to have fun and see how good is your radio's FSK.

Ready? You need a way to key the radio's FSK input, i.e., to convert text into a perfectly-timed, jitter-free sequence of RTTY ITA2/Baudot mark and space symbols. There are a few hardware interfaces around, one of which is WinKeyer 3.1. You still need to interface it with MMTTY. This extension does exactly that. It is only for Tx, not for reception. To receive, you still rely on the demodulator in MMTTY or other programs, or in your radio.

You will also need a cable that connects your WinKeyer to your radio. Instructions are available from the K1EL page specific to your WinKeyer model. Your cable will use three wires: ground and two signals: FSK which keys the RTTY shift from Mark (off) to Space (on), and PTT which keys the transmitter on and off. You will probably find that your radio expects the Mark/Space to be the other way round. Also, depending how you make your cable, you may need to swap the K1EL suggested assignment of PTT on the WinKeyer's KEY1 output, and FSK on the PTT output. To accomplish all of that, try different combinations of the first two checkbox options shown in the extension's config window (see screenshot below).

How to Use

  1. Copy WinKeyer.fsk file to the directory containing your installation of MMTTY.
  2. Select WinKeyer from the PTT & FSK section of the MMTTY Tx configuration tab.
  3. When the extension starts, it will show a small config and status window. Select the COM port on which your WinKeyer is running.

It is advisable to disable diddles in MMTTY (set Options/TX/DIDDLE to NONE) but to enable them in the WinKeyer FSK window. This will improve the pacing/timing of the diddles because they will generated by WinKeyer and not depend on the state of the buffer or the timing of the PC.

Please note, the baud rate is taken from the MMTTY configuration settings. USOS (Unshift on Space) can be enabled either in MMTTY or in WinKeyer. It is not yet clear which is better—probably best to leave it on in MMTTY.

The remaining settings need to be configured in the WinKeyerFSK window, as they are not read from MMTTY.

WinKeyer FSK MMTTY Config

Limitations and Known Issues

  1. WinKeyer does not support all MMTTY options. Only 5-bit length is supported (6, 7, 8 are not). Only 1.5-bit and 2-bit stop lengths are supported (not 1). Only 45.45, 50, 75, and 100 baud speeds are supported. Hopefully this does not matter, as 45.45 baud, 5-bit length and 1.5 stop bits is the most popular, widely used RTTY configuration.
  2. WinKeyer does not accept explicitly sent CR, LF, FIGS, or LTRS codes. It automatically sends FIGS and LTRS as needed, including when diddling. When MMTTY or DXLog send a CR or LF, this extension translates that to WinKeyer's } character, which it then sends as a sequence of CR CR LF LTRS. There is some logic in the extension to take care of different scenarios in terms of the order in which CR or LF arrive from MMTTY or from DXLog. It should not affect operation, but it means that printing RTTY art is not possible, because there is no way to issue a CR without an LF.
  3. There is no way to send the BELL character at present.
  4. The characters being sent are being echoed back to the MMTTY window a little sooner than when actually sent. This is most noticeable with CR/LF which is echoed back almost immediately, even though it takes 4 characters to be sent. Overall, having things this way round is better for keeping the sending buffer full, even if a little disconcerting to the user. I will try to solve this issue, but it is a little non-trivial because of the way MMTTY predicts how long a character takes to send regardless of what happens in the real world. See issue #2.

If there are any known and unresolved issues they will be listed in the Issues section. Please report them there. Additional discussions are welcome on MMTTY Groups.io.

How to Build

Borland C++ Builder version 5.0 is needed to build this project. It is ancient, but it still works well if you can find it.

After a successful build, you will find WinKeyerMMTY.dll. Rename it to WinKeyer.fsk.

History

This project is based on the tinyFSK project by Nobuyuki Oba JA7UDE, who, in turn, based his work on the EXTFSK64 project. There is still much unnecessary code, and the overall code structure is much too complicated. Apologies from all contributors for a rather dirty source code.

Copyright and License

Copyright 2000-2022 Makoto Mori, Nobuyuki Oba, Rafal Lukawiecki

This file is part of WinKeyerMMTY FSK.

WinKeyerMMTTY FSK is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

WinKeyerMMTTY FSK is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with WinKeyer FSK for MMTTY, see files COPYING and COPYING.LESSER. If not, see http://www.gnu.org/licenses/.