Published: 29. 11. 2014   Category: Hamradio station OK2MNM

Provoz Kantronics KAM Plus v Linuxu

Nedávno jsem se po instalaci dlouhého drátu coby antény se vrátil na krátkovlnná pásma. Jedním ze starších zařízení, které jsem oprášil je i modem od firmy Kantronics s názvem KAM Plus, dále jen KAM+. Ačkoliv se článek týká předeším KAM+, pak část o přístupu na sériový port můžete využít jako návod pro přístup přes sériový port k dalším typům modemů.

Retrorecenze KAM+

KAM+ se vyráběl v letech 1988 až 98, poslední verze firmware je 8.2. Kdo se chtěl na začátku 90. let věnovat vážně digitálním módům na krátkých vlnách, pro toho byl KAM+ jasná volba. Tehdejší situace rozhodně nebyla tak růžová jako dnes, Internet pro domácnosti byl naprosto nedostupný, takže digitálním módům kralovalo packet rádio na VKV v rychlosti 1200 Bd (AX.25) a na KV to bylo RTTY, někdy vylepšené o delší kódování jako ASCII, packet rádio v 300 Bd a provozy s potvrzováním příjmu AMTOR a PACTOR I (tzv. ARQ módy). Digimódy také v té době měly společné to, že byly založeny, na nepříliš efektivní modulaci, dvoustavové klíčování kmitočtu (FSK/AFSK), tj. jednomu kmitočtu odpovídá 0 (SPACE), jinému patřičně vzdálenému zase 1 (MARK). KAM+ s firmware min. verze 8.0 také umožňuje připojení GPS přijímače, který komunikuje přes RS232 standardem NMEA-0183 (National Marine Electronic Association), ale je nutné mechanicky přepínat mezi komunikací s PC a GPS RX.

V době největší slávy KAM+ se modemy nebo TNC (terminal node controller) dělily na hloupé a chytré. Ty hloupé posílaly surová modulační data přímo na port PC, které softwarově, měřením času mezi průchody nulou detekovalo kmitočet a převádělo modulaci na data (Hamcomm, Baycom).

Chytré TNC měly procesor a A/D, D/A převodníky, někdy i DSP procesor, a centrální procesor který se postaral o zpracování signálu už v sobě. Ke zpracovaným datům se pak člověk dostal nejčastěji připojením k TNC po sériové lince (RS232) buď z počítače nebo terminálu. KAM+ je zástupcem chytrých TNC.

Jeho unikátnost spočívá v tom, že se jedná o dvouportové TNC, s jedním portem pro KV a druhým pro VKV, které je možné se speciálním software běžícím v tzv. host módu, obsluhovat souběžně. Je tedy možné např. sledovat DX cluster na packet rádiu a zároveň komunikovat digi na KV. Je také možné mezi těmito porty přeposílat data. KAM+ umí pracovat i jako samostatná BBS a zprávy ukládat do své interní paměti 128 kB. BBS je dostupná jak pro KV/VKV packet, tak i pro *TOR módy. Případně funguje jako digipeater a připojené stanice mohou přes něj komunikovat (jiné TNC od firmy Kantronics, KPC-9612 takto dlouhá léta fungovalo na vesmírné stanici Mir). V 90. letech byla na KV dostupná řada BBS jak pro packet nebo PACTOR a např. bylo možné přes ně posílat a přijímat emaily, což oceňovali jachtaři nebo radioamatéři mimo dosah VKV packetu. KAM+ se ve své době prodával okolo $350.

A teď k tomu, co se s KAM+ dá dělat i po 20. letech. V radioamatérské praxi se vývoj přesunul především k použití zvukové karty jako modemu a nadupané PC pak obstará zpracování dat, ať už audiosignálu a nebo přes softwarově definované rádio z širší oblasti vf. pásma. To dalo za vznik novým druhům digimódů s lepšími modulacemi než je FSK, např. PSK31. Tady si KAM+ už nevrzne, takže zbývá pouze RTTY v radioamatérských pásmech, při poslechu profesionálních služeb se kromě RTTY dá vyžít i ASCII, AMTOR/SITOR a příjem WEFAX ve dvou barvách, na VKV se pak dá využít pro APRS. Ostatní módy jsou na pásmech zdá se historií.

Další věc, kde KAM+ zaostává je ladící indikátor, který tvoří LED bar s 10 diodami, při ladění pak blikání dvou krajních diod značí správně naladění na AFSK kmitočty MARK/SPACE. Např. u monitoringu RTTY služeb, kde je použitý odlišný zdvih se pak dá zdvih odhadnout pouze pokusem-omylem (navíc např. zdvih 450 Hz už KAM+ nedekóduje a je nutné nastavit MARK/SPACE ručně). Na spektrálním analyzátoru nebo vodopádu v programech pro zvukovku jsou tyto parametry okamžitě k vidění.

Na druhou stranu přístup přes terminál v GNU/Linuxu umožňuje provádět různá kouzla jako např. přesměrování přijatých dat a rovnou je zpracovat dalším programem (který si ale člověk musí umět napsat sám :). Dále je možné KAM+ různě přeprogramovat a nastavit si svoje vlastí parametry MARK, SPACE, zdvih a modulační rychlosti pro RTTY, ASCII, SITOR/NAVTEX (u software se člověk musí většinou spolehnout, co mu tvůrce SW naservíruje). Pro RTTY jsou dostupné i další kódy, takže kromě ITA-2, je možné použít i LCRTTY (obsahuje jak velké tak i malé znakyú), MARS (Military Affiliate Radio System), je možné vymaskovat určité bity u „scramblovaných“ RTTY/ASCII kódů. KAM+ umí dále dekódovat i vysílat i telegrafii, je ovšem nutné ručně nastavit rychlost slov za minutu, u příjmu pak s přesností ±20 WPM.

Díky tomu, že KAM+ je léty prověřené zařízení s odladěným firmware nestává se u něj, že by náhodně klíčovalo, odčas mu ustřelil samplovací kmitočet nebo vydávalo různé nechtěné zvuky, což je nešvar za který uživatelé Windows většinou nemohou, ale stává se to a na pásmu je občas k vidění :(

KAM+ možnosti

Zapojení HF konektoru v manuálu je dost zmatečné, takto je to mnohem pochopitelnější:

Zapojení HF portu.
Pin Označení  Funkce
1   AFSK      Transmit audio 
2   GND       Ground
3   PTT       Push-to-Talk
4   KEY       CW Key line
5   FSK       FSK output
6   RCV       Receive audio
7   RCV       Receive audio
8   XCD       External carrier detect

Originální manuály

Přístup na sériový port v GNU/Linuxu

Přístup k periferiím a hardwarovým zařízením je v linuxu řešen přes speciální soubory, které se nacházejí v adresáři /dev. Soubor pro seriový port má název /dev/ttyS*, jemu odpovídající rozhraní:
označení GNU/Linuxoznačení DOS, Windows
/dev/ttyS0COM1
/dev/ttyS1COM2
/dev/ttyS2COM3
/dev/ttyS4COM4

Pokud používáte převodník USB/RS-232, zařízení je označeno jako /dev/ttyUSB*.

Jednou z podstatných věcí je, zda uživatel pracující v systému má právo čtení a zápisu do souboru odpovídajícímu seriovému portu. Zjistit práva je možné příkazem ll /dev/tty{U*,S*}, po jeho provedení může být výpis na terminálu např. tento:

crw-rw----. 1 root dialout   4, 64 Nov 22 15:56 /dev/ttyS0
crw-rw----. 1 root dialout   4, 65 Nov 20 22:58 /dev/ttyS1
crw-rw----. 1 root dialout   4, 66 Nov 22 14:32 /dev/ttyS2
crw-rw----. 1 root dialout   4, 67 Oct 18 14:39 /dev/ttyS3
crw-rw----. 1 root dialout 188,  0 Nov 22 16:07 /dev/ttyUSB0

Ve výpisu je vidět, že právo čtení a zápis (rw) má pouze uživatel root a uživatelé ze skupiny dialout. Pokud uživatel nepatří ani k jednomu musí root nastavit práva pro čtení a zápis ostatním, pro COM1 pomocí:

chmod 666 /dev/ttyS0

Lepší způsob je přidat uživatele do skupiny, ale změna skupiny se projeví až po opětovném přihlášení do X11 a nebo shellu. Příkaz pro přídání uživatele bruxy do skupiny dialout je:

usermod -a -G dialout bruxy

Pomocí příkazu id bruxy ověříte uživatelovy údaje.

Informace jádra o seriových portech

Výpis souboru /proc/tty/driver/serial:

serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:2 rx:0
1: uart:ST16650V2 port:0000C800 irq:16 tx:14 rx:0 RTS|DTR
2: uart:ST16650V2 port:0000C400 irq:17 tx:14909 rx:447084 fe:22 brk:3311 RTS|CTS|DTR|DSR
3: uart:unknown port:000002E8 irq:3

V mém případě, ve výše uvedeném výpisu, položka 0 je COM1 umístěný na motherboardu, 1 a 2 jsou porty na PCI-E rozšiřující kartě MosChip Semiconductor Technology Ltd. PCIe 9912 Multi-I/O Controller.

USB/RS-232

Po připojení USB převodníku se ve výpisu dmesg objeví např.:

ch341 1-4.4.1:1.0: device disconnected
usb 1-4.4.1: new full-speed USB device number 36 using ehci-pci
usb 1-4.4.1: New USB device found, idVendor=1a86, idProduct=7523
usb 1-4.4.1: New USB device strings: Mfr=0, Product=2, SerialNumber=0
usb 1-4.4.1: Product: USB2.0-Ser!
ch341 1-4.4.1:1.0: ch341-uart converter detected
usb 1-4.4.1: ch341-uart converter now attached to ttyUSB0

Toto zařízení ve výpisu lsusb je levný převodník za $2 z DealExtreme:

Bus 001 Device 036: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter

Terminálové emulátory

PuTTY

Nejjednodušší cesta jak se připojit přes sériový terminál je pomocí linuxového PuTTY, protože je klikací a obejdete se bez manuálové stránky. Takže místo telnetu nebo SSH vyberte v menu Session serial, nastavte port a rychlost a je téměř hotovo. V kategorii Terminal->Keyboard ještě nastavte The Backspace key Control-H, on totiž Backspace pak sice správně maže písmenka na obrazovce, takže vše vypadá ok, ale do KAM+ jsou pak poslána chybná data. Případně v KAM+ je možné nastavit DELETE $7F, takže backspace pak funguje jak má. Při běžícím session, se menu vyvolá stiskem Ctrl+pravé tlačítko myši, takže některá nastavení pak můžete změnit v průběhu.

Screen

Screen podporuje také seriovou linku, připojení se provede pomocí:

screen -h 1000 /dev/ttyS2 9600,cs8 

Pomocí -h se nastaví počet řádku v historii výpisu. Listování v historii se pak vyvolá sekvencí Ctrl+a [ a skroluje se pomocí Ctrl+p a Ctrl+n nahoru a dolu. Screen se ukončí pomocí Ctrl+a k.

Ovládání sériového portu pomocí shellu

Linuxový přístup k hardwarovým zařízením jako k souborům funguje i pro sériový port. Parametry jako rychlost, počet bitů nebo parita se nastavuje pomocí stty. Následující skript čte a zapisuje na daný port, takže je možné ho použít také pro ovládání KAM+ v terminálovém režimu.

Stisk ENTER v terminálovém emulátoru posílá návrat vozíku (<CR> carriage return, $OD, decimal 13, <Ctrl-M>, ENTER key), takže, aby KAM+ zareagoval je nutné za příkazem odeslaným na port ještě přidat „\r“.


PORT=/dev/ttyS2
SPEED=9600
stty -F $PORT ispeed $SPEED ospeed $SPEED -ignpar cs8 -cstopb -echo
# ispeed -- vstupní rychlost
# ospeed -- výstupní rychlost
# -ignpar -- ignore parity error (odpovídá nastavení žádná parita)
# -cstopb -- posílá jeden stop bit
trap 'echo -e "\n- Ctrl-c disabled, press Ctrl-d for quit. -"' SIGINT
cat < "$PORT" &
RPID=$?
while read cmd; do
   printf "$cmd\r" > "$PORT"
done 
kill $RPID

Celé to funguje tak, že se nastaví parametry portu stty. Poté se odchytí stisk kombinace Ctrl+c (signál SIGINT), to proto aby se při stisku Ctrl+c program neukončil, při SIGINT se pak jen vypíše informační text. Poté se na pozadí pustí čtení z portu a uloží se PID tohoto ko-procesu. Ve smyčce se načítají řádky, které se posílají na port i se zmíněným „\r“. Pokud uživatel stiskne Ctrl+d, příkaz read to vyhodnotí jako ukončení vstupu, smyčka skončí a na závěr se ješte ukončí ko-proces ($RPID).

Přístup na sériový port přes DOSBox

V DOSBoxu je také možné využít programy přistupující na RS-232, v konfigurační souboru ~/.dosbox/dosbox-0.74.conf mám nastaveno:

[serial]
serial1=directserial realport:ttyS2
serial2=dummy
serial3=disabled
serial4=disabled

To znamená, že zařízení v DOSu budou nakonfigurována na COM1, který se fyzicky připojen na /dev/ttyS2. Další nastavení portu se už řeší přímo daném v dos. programu.

DOSové programy

Následující software bez problémů funguje v DOSBoxu:

Možné problémy

Automatické nastavení rychlosti sériového portu

KAM+ po studeném restartu (jumper K6) nebo prvním spuštění spustí Autobaud Routine, kdy na port posílá následující hlášku v různých rychlostech:

PRESS (*) TO SET BAUD RATE

Takže po připojení přes terminál, pokud uvidíte tuto hlášku, stačí stisknout tlačítko „*“ a KAM+ si nastaví parametr ABAUD. Na portu jsou podporované rychlosti: 300, 600, 1200, 2400, 4800, 9600.

Ruční vypnutí host módu

Pokus je KAM+ v HOST módu na obrazovce se objeví: └└S00└ (v kódování CP-437, odpovídá to posloupnosti bytů decimálně: 192, 192, 83, 48, 48, 192). Pro vypnutí je nutné odeslat: └Q└ (192, 81, 192), to se provádělo v DOSovém terminálu kombinací ALT+číslo na numerické klávesnici. Po odeslání posloupnosti se KAM+ vrátí do příkazového režimu.

V Linuxu je možné HOST mód vypnout posláním výše uvedených bytů přímo na port, v printf jsou zadány hexadecimálně:

#Nastavení portu 
stty -F /dev/ttyS2 ispeed 9600 ospeed 9600 -ignpar cs8 -cstopb -echo
# Odeslání sekvence pro vypnutí HOST módu
printf "\xc0\x51\xc0" > /dev/ttyS2

Další odkazy: