Távíró kódok adattárolása
A távíró karakter rövid jelből ( ti ), hosszú jelből ( tá ) és a közöttük lévő szünetből állhat. Szünet ( space ) a jelek ( mark ) között van, ezért külön nem kell tárolni. Marad a rövid és a hosszú jel, ami mindössze kétféle lehet, így tárolásukhoz elegendő egy bit.
Legyen
rövid jel | = 0 |
hosszú jel | = 1 |
Például
= 0 | |
= 1 | |
= 110 | |
= 011010 |
A karakter változó hosszú, a legrövidebb 1 rövid jel, de van, ami 6 ( rövid és hosszú ) jelből áll. Valahogyan jelölni kell a kód végét. Legyen ez az 1 bit, amit kizárólag ₀ bitek követhetnek.
= 0 1 ₀..₀ | |
= 1 1 ₀..₀ | |
= 110 1 ₀..₀ | |
= 011010 1 ₀..₀ |
Egy távíró karakter tárolása történjen 2 byte-on, 16 biten. Ekkor
= 01₀₀ ₀₀₀₀ ₀₀₀₀ ₀₀₀₀ | = 0x4000 | |
= 11₀₀ ₀₀₀₀ ₀₀₀₀ ₀₀₀₀ | = 0xc000 | |
= 1101 ₀₀₀₀ ₀₀₀₀ ₀₀₀₀ | = 0xd000 | |
= 0110 101₀ ₀₀₀₀ ₀₀₀₀ | = 0x6a00 |
Speciális a szóköz karakter, ami legyen
szóköz = 1₀₀₀ ₀₀₀₀ ₀₀₀₀ ₀₀₀₀ = 0x8000 = cwcSpace
Ez azért is szerencsés, mert a 0x0000 kódú adat jelölheti a string végét, C-ben szokásos módon. Egyébként is, legalább egy vége-bitnek lennie kell távírókódban.
C mintaprogramok
Az egyik mintaprogram ( cwtest0.c ) egy ( UTF-8 ) szöveget kódol át távírókódra és ír ki. A másik ( cwtest1.c ) pedig billentyűzni tud LD-C103 illesztő kábellel.
A programok alapja két táblázat. Az egyik táblázat távíró adáshoz unicode karakterekhez rendeli hozzá távírókódjaikat ( cwTxMp[] ). Másik pedig a vételhez, távírókódokhoz UTF-8 szöveget ( cwRxMp[] ). Mindkettőhöz van keresőfüggvény ( CwcFromCu(), SzFromCwc() ). Mindkét táblázat rendezett, a keresés logaritmusos/bináris.
Nem egyforma hosszú a két táblázat, mert a távíró nem különbözteti meg a kis-, nagy- és nemzeti betűket, adáskor a 'g', 'G', 'Г', 'г', 'Γ', 'γ' egyaránt . Ugyanakkor a vett csak a 'G'.
Néhány függvény az UTF-8 - unicode átkódolást végzi a kényelmesebb használatért ( ggch.? ).
Szabványosan:
rövid jel ( mark ) hossza | 1 elemi jel |
hosszú jel hossza | 3 elemi jel |
karakteren belüli jeleket elválasztó szünet ( space ) hossza | 1 elemi jel |
két karaktert elválasztó szünet hossza | 3 elemi jel |
két szót elválasztó szóköz szünet hossza | 7 elemi jel |
Egy távírókarakter kiírásánál a kód bal szélső bitje ( maszk = 0x8000 = cwcBit ) szerint rövid ( 1 ) vagy hosszú ( 3 ) jelet ír ki. Ezt követi a karakteren belüli jelek közötti 1 hosszú szünet. A következő jel kiírásához a távírókódot egyel balra lépteti ( (cwc_) <<= 1 ). Amikor már csak a vége bit ( cwcEnd = 0x8000 ) marad, akkor vége.
Speciális eset a szóköz, amiből - ha több is lenne - csak egyet kell kiírni.
A modulációs sebesség fs ( [fs] = baud = Bd = s⁻¹ ), és elemi jel ideje Ts ( [Ts] = másodperc = s ) egymás reciprokai. Például 8 baud sebesség esetén az elemi idő 1/8 s = 125 ms.
Megjegyzem, a szóköz karakter ( ' ', 0x20 ), a bevezetett szóköz távíró kód ( cwcSpace, 0x8000 ) és a távíró adás szünet állapot ( space ) három különböző dolog.
Megjegyzem, a programokban használt azonosítókat a Magyar Jelölésmód stílusában adtam. Például cwcAct = CwcFromCu( cuAct );
ggstd.h | általános ( típusok, hibakódok ) |
ggbit.h | unalmas bitek |
ggch.h | karakter konvertálás ( UTF-8 - unicode ) |
ggfs.h | állománykezelés |
ggcw.h | távíró |
_ggcw.h | távírókód táblázatok |
ggch.c | karakter konvertálás |
ggcw.c | távírókód |
_ggcw.c | mérsékelten érdekes távírókód táblázatok |
cwtest0.c | mintaprogram karakteres |
cwtest1.c | mintaprogram LD-C103 billentyűzővel |
makefile | fordítás, szerkesztés |
Az esetlegesen szükséges telepítéseket a mintaprogramok elejére írtam.
gg630504.hg9ieg/cwtest0/Nov 19 2020 21:41:27
>=-=-=-=---=---=-===-=-=---=-===-=-=---===-===-===-------=-===-===---===-===-===---=-===-=---=-===-=-=---===-=-=---===-===-=-===-===<
Hibakód: 0
JavaScript mintaprogram
ggcw.js | távíró táblázatok, szöveg lejátszása és kirajzolása |
cwtest2.html | szöveg lejátszása és kirajzolása |
Experiment is the sole judge of scientific “truth”.
A (természet)tudományos igazság kizárólagos kritériuma a kísérlet.
Feynman Richard