„KISS protokoll” változatai közötti eltérés
a |
a (syntax hightlight) |
||
(10 közbenső módosítás ugyanattól a szerkesztőtől nincs mutatva) | |||
1. sor: | 1. sor: | ||
− | A KISS protokoll a PC és a külső TNC közötti kommunikációját definiálja. A KISS csomag az AX.25 adatcsomagon kívül TNC vezérlő | + | A KISS ("Keep It Simple, Stupid" = "Hagyd meg egyszerűnek, butának") protokoll a PC és a külső TNC közötti kommunikációját definiálja. A KISS csomag az AX.25 adatcsomagon kívül TNC alacsonyszintű vezérlő információit is átviszi. A KISS helyett gyakran a többet tudó [[6PACK protokoll]]t használják. |
− | == A | + | == A TNC új feladata == |
− | == A KISS csomag felépítése == | + | Amíg régen a [[TNC]] (Terminal Node Controller) a megjelenítő terminált vezérelte, az új felállásban az alábbi funkciók maradtak neki: |
+ | * PC-től aszinkron RS232 (vagy egyéb) interfészen keresztül kapott adatcsomagból az elküldendő rész HDLC keretezését és bitbeszúrást ő végzi. | ||
+ | * A TNC végzi a full/half duplex csatorna kezelését. | ||
+ | * A TNC végzi a [[DAMA protokoll]]nál az adásengedélyezés figyelését. | ||
+ | |||
+ | Azaz elmondható, hogy a TNC-re kizárólag azok a feladatok maradtak, amik a valós idejű rádiócsatorna optimális használatához elengedhetetlenek. Ezáltal az operációs rendszernek nem kell 10-100 ms pontossággal csomagot időzíteni, csak az elküldendő információt kell bármely pillanatban a TNC számára átküldeni, illetve a TNC-t felprogramozni, vezérelni. | ||
+ | |||
+ | == A KISS csomag tulajdonsága és felépítése == | ||
+ | |||
+ | * A KISS csomag nem tartalmaz [[HDLC]] keretezést. | ||
+ | * A HDLC keret analógiájára a csomag elejét és végét egyaránt egy speciális karakter jelzi. Ha az adatban szerepel END karakter, azt az alábbi részben ismertetett módon helyettesítik (karakterbeszúrás) | ||
+ | * A PC-TNC átvitel során eredetileg nincs külön ellenőrzőkód (CRC), később lehetőséget adtak rá ('''KISS/SMACK''' verzió). | ||
+ | * Nincs handshake, azaz nincs visszajelzés a fogadó féltől a PC-TNC kapcsolat során. | ||
+ | * Adatcsomag illetve a vezérlőcsomag elkülönül. Első byte határozza meg, hogy adat (0x00) vagy parancs (0xff). | ||
+ | * Ha adatcsomag, akkor a felső 4 bit a csatorna számot határozza meg, azaz elviekben 16 adatcsatorna létezhet. | ||
+ | |||
+ | A csomag legelső byte-ja határozza meg, hogy mi van a csomagban illetve mely csatornára vonatkozik. | ||
+ | |||
+ | <source lang="c"> /* TNOS devparam.h */ | ||
+ | /* Alábbi értékek esetén a felső 4 bit a csatornaszám lesz */ | ||
+ | #define PARAM_DATA 0 /* adatcsomag következik */ | ||
+ | #define PARAM_TXDELAY 1 /* TXdelay + 1 byte --> x * 10 ms, default x=50 */ | ||
+ | #define PARAM_PERSIST 2 /* perzisztencia + 1 byte --> (x+1)/256 az esély, hogy ad. default: x=63 */ | ||
+ | #define PARAM_SLOTTIME 3 /* slottime + 1 byte --> x * 10 ms, default x=10 */ | ||
+ | #define PARAM_TXTAIL 4 /* TXtail + 1 byte --> x * 10 ms, elavult a paraméter így csak kompatibilitáási okokból van */ | ||
+ | #define PARAM_FULLDUP 5 /* Fullduplex? igen(1)/nem(0) */ | ||
+ | #define PARAM_HW 6 /* SetHardver - TNC függő. Például TNC-1 -nél sebességet állított */ | ||
+ | #define PARAM_MUTE 7 /* TX letiltása/engedélyezése */ | ||
+ | /* Innentől az interfész közös paraméterei */ | ||
+ | #define PARAM_DTR 8 | ||
+ | #define PARAM_RTS 9 | ||
+ | #define PARAM_SPEED 10 | ||
+ | #define PARAM_ENDDELAY 11 | ||
+ | #define PARAM_GROUP 12 | ||
+ | #define PARAM_CRCREQ 12 | ||
+ | #define PARAM_IDLE 13 | ||
+ | #define PARAM_MIN 14 | ||
+ | #define PARAM_POLL 14 | ||
+ | #define PARAM_MAXKEY 15 | ||
+ | #define PARAM_WAIT 16 | ||
+ | #define PARAM_DOWN 0x81 | ||
+ | #define PARAM_UP 0x82 | ||
+ | #define PARAM_BLIND 0x83 | ||
+ | #define PARAM_RCV_MODE 0xfd | ||
+ | #define PARAM_RETURN2 0xfe | ||
+ | #define PARAM_RETURN 0xff | ||
+ | </source> | ||
=== Escape-szekvenciák === | === Escape-szekvenciák === | ||
11. sor: | 57. sor: | ||
Alábbiakban látható az escape-szekvenciák valódi oktális értéke. (0100 oktális == 0x40 hexadecimális == 64 decimális érték) | Alábbiakban látható az escape-szekvenciák valódi oktális értéke. (0100 oktális == 0x40 hexadecimális == 64 decimális érték) | ||
− | < | + | <source lang="c">/* SLIP/KISS protokol karakterek (Linux kernel forráskódjából mellékelve) */ |
#define END 0300 /* jelzi a keretvéget */ | #define END 0300 /* jelzi a keretvéget */ | ||
#define ESC 0333 /* jelzi a byte beszúrást */ | #define ESC 0333 /* jelzi a byte beszúrást */ | ||
− | #define ESC_END 0334 /* ESC ESC_END | + | #define ESC_END 0334 /* ESC ESC_END helyettesíti az END karakterértékkel egyező adatkaraktert */ |
− | #define ESC_ESC 0335 /* ESC ESC_ESC | + | #define ESC_ESC 0335 /* ESC ESC_ESC helyettesíti az ESC karakterértékkel egyező adatkaraktert */ |
− | </ | + | </source> |
+ | |||
+ | == A kommunikáció menete == | ||
+ | |||
+ | # END | ||
+ | # parancskód | ||
+ | # adat(ok) | ||
+ | # END | ||
+ | |||
+ | == Több KISS eszköz egyazon soros porton: TRKISS == | ||
+ | |||
+ | Az idők folyamán igény mutatkozott arra, hogy több eszközt is fel lehessen fűzni ugyanarra a soros portra. Erre a ''Token Ring KISS'' nevet viselő megoldás terjedt el. | ||
+ | |||
+ | [[Kép:TNC-tokenring.png]] | ||
+ | |||
+ | Ebben az esetben a parancskód kiegészül egy eszközszám mezővel. | ||
+ | |||
+ | # END | ||
+ | # '''TNC szám''' (0 ... N) | ||
+ | # parancskód | ||
+ | # adat(ok) | ||
+ | # END | ||
+ | |||
+ | A TNC-k TRKISS azonosítóját sajnos előre fel kell programozni. | ||
+ | |||
+ | == Több KISS eszköz egyazon soros porton: SRPM == | ||
+ | |||
+ | Serial Ring Protokol (soros gyűrü protokol) vagy más néven TR2KISS a a fentiekhez hasonlóan ugyanúgy biztosítja a TNC-k felfűzési lehetőségét. A lényeges különbség abban áll, hogy itt a TNC-ket nem kell előre sorszámmal felprogramozni, a láncban levő elhelyezkedése alapján automatikusan lesz detektálva. | ||
+ | |||
+ | A láncban való elhelyezkedés alapján történő egyenlőre kérdés. Valószínüleg minden eszköz csökkenti eggyel az eszközszám mezőt, és ahol 0 értékű, az az eszköz fogja feldolgozni a parancsot. | ||
+ | |||
+ | == Bővebb információ == | ||
+ | |||
+ | * Linux kernel forráskódjában ( linux-2.6.xx/drivers/net/hamradio/mkiss.c - http://www.kernel.org ) | ||
+ | * TNOS forráskódjában ( kiss.c - http://tnos.sourceforge.net/ ) | ||
+ | * JNOS forráskódjában | ||
+ | |||
− | [[Kategória: | + | [[Kategória:Csomagrádió]] |
− |
A lap jelenlegi, 2009. június 25., 14:55-kori változata
A KISS ("Keep It Simple, Stupid" = "Hagyd meg egyszerűnek, butának") protokoll a PC és a külső TNC közötti kommunikációját definiálja. A KISS csomag az AX.25 adatcsomagon kívül TNC alacsonyszintű vezérlő információit is átviszi. A KISS helyett gyakran a többet tudó 6PACK protokollt használják.
Tartalomjegyzék
A TNC új feladata
Amíg régen a TNC (Terminal Node Controller) a megjelenítő terminált vezérelte, az új felállásban az alábbi funkciók maradtak neki:
- PC-től aszinkron RS232 (vagy egyéb) interfészen keresztül kapott adatcsomagból az elküldendő rész HDLC keretezését és bitbeszúrást ő végzi.
- A TNC végzi a full/half duplex csatorna kezelését.
- A TNC végzi a DAMA protokollnál az adásengedélyezés figyelését.
Azaz elmondható, hogy a TNC-re kizárólag azok a feladatok maradtak, amik a valós idejű rádiócsatorna optimális használatához elengedhetetlenek. Ezáltal az operációs rendszernek nem kell 10-100 ms pontossággal csomagot időzíteni, csak az elküldendő információt kell bármely pillanatban a TNC számára átküldeni, illetve a TNC-t felprogramozni, vezérelni.
A KISS csomag tulajdonsága és felépítése
- A KISS csomag nem tartalmaz HDLC keretezést.
- A HDLC keret analógiájára a csomag elejét és végét egyaránt egy speciális karakter jelzi. Ha az adatban szerepel END karakter, azt az alábbi részben ismertetett módon helyettesítik (karakterbeszúrás)
- A PC-TNC átvitel során eredetileg nincs külön ellenőrzőkód (CRC), később lehetőséget adtak rá (KISS/SMACK verzió).
- Nincs handshake, azaz nincs visszajelzés a fogadó féltől a PC-TNC kapcsolat során.
- Adatcsomag illetve a vezérlőcsomag elkülönül. Első byte határozza meg, hogy adat (0x00) vagy parancs (0xff).
- Ha adatcsomag, akkor a felső 4 bit a csatorna számot határozza meg, azaz elviekben 16 adatcsatorna létezhet.
A csomag legelső byte-ja határozza meg, hogy mi van a csomagban illetve mely csatornára vonatkozik.
<source lang="c"> /* TNOS devparam.h */ /* Alábbi értékek esetén a felső 4 bit a csatornaszám lesz */
- define PARAM_DATA 0 /* adatcsomag következik */
- define PARAM_TXDELAY 1 /* TXdelay + 1 byte --> x * 10 ms, default x=50 */
- define PARAM_PERSIST 2 /* perzisztencia + 1 byte --> (x+1)/256 az esély, hogy ad. default: x=63 */
- define PARAM_SLOTTIME 3 /* slottime + 1 byte --> x * 10 ms, default x=10 */
- define PARAM_TXTAIL 4 /* TXtail + 1 byte --> x * 10 ms, elavult a paraméter így csak kompatibilitáási okokból van */
- define PARAM_FULLDUP 5 /* Fullduplex? igen(1)/nem(0) */
- define PARAM_HW 6 /* SetHardver - TNC függő. Például TNC-1 -nél sebességet állított */
- define PARAM_MUTE 7 /* TX letiltása/engedélyezése */
/* Innentől az interfész közös paraméterei */
- define PARAM_DTR 8
- define PARAM_RTS 9
- define PARAM_SPEED 10
- define PARAM_ENDDELAY 11
- define PARAM_GROUP 12
- define PARAM_CRCREQ 12
- define PARAM_IDLE 13
- define PARAM_MIN 14
- define PARAM_POLL 14
- define PARAM_MAXKEY 15
- define PARAM_WAIT 16
- define PARAM_DOWN 0x81
- define PARAM_UP 0x82
- define PARAM_BLIND 0x83
- define PARAM_RCV_MODE 0xfd
- define PARAM_RETURN2 0xfe
- define PARAM_RETURN 0xff
</source>
Escape-szekvenciák
A csomag végét az END karakter jelzi. Azonban ez az érték a továbbítani kívánt bináris adatok közt is előfordulhat. Ha előfordul, akkor egy ESC ESC_END karakter páros lesz továbbítva. Azonban ezzel előkerül egy másik foglalt karakter is, az ESC. Ennek adatban való előfordulásakor ESC ESC_ESC karakterpáros lesz küldve, vevőoldalon pedig visszaállítva az eredeti bináris karakter.
Alábbiakban látható az escape-szekvenciák valódi oktális értéke. (0100 oktális == 0x40 hexadecimális == 64 decimális érték)
<source lang="c">/* SLIP/KISS protokol karakterek (Linux kernel forráskódjából mellékelve) */
- define END 0300 /* jelzi a keretvéget */
- define ESC 0333 /* jelzi a byte beszúrást */
- define ESC_END 0334 /* ESC ESC_END helyettesíti az END karakterértékkel egyező adatkaraktert */
- define ESC_ESC 0335 /* ESC ESC_ESC helyettesíti az ESC karakterértékkel egyező adatkaraktert */
</source>
A kommunikáció menete
- END
- parancskód
- adat(ok)
- END
Több KISS eszköz egyazon soros porton: TRKISS
Az idők folyamán igény mutatkozott arra, hogy több eszközt is fel lehessen fűzni ugyanarra a soros portra. Erre a Token Ring KISS nevet viselő megoldás terjedt el.
Ebben az esetben a parancskód kiegészül egy eszközszám mezővel.
- END
- TNC szám (0 ... N)
- parancskód
- adat(ok)
- END
A TNC-k TRKISS azonosítóját sajnos előre fel kell programozni.
Több KISS eszköz egyazon soros porton: SRPM
Serial Ring Protokol (soros gyűrü protokol) vagy más néven TR2KISS a a fentiekhez hasonlóan ugyanúgy biztosítja a TNC-k felfűzési lehetőségét. A lényeges különbség abban áll, hogy itt a TNC-ket nem kell előre sorszámmal felprogramozni, a láncban levő elhelyezkedése alapján automatikusan lesz detektálva.
A láncban való elhelyezkedés alapján történő egyenlőre kérdés. Valószínüleg minden eszköz csökkenti eggyel az eszközszám mezőt, és ahol 0 értékű, az az eszköz fogja feldolgozni a parancsot.
Bővebb információ
- Linux kernel forráskódjában ( linux-2.6.xx/drivers/net/hamradio/mkiss.c - http://www.kernel.org )
- TNOS forráskódjában ( kiss.c - http://tnos.sourceforge.net/ )
- JNOS forráskódjában