„KISS protokoll” változatai közötti eltérés

Innen: HamWiki
Ugrás a navigációhoz Ugrás a kereséshez
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ő információt is hordoz. A KISS helyett gyakran a [[6PACK]] protokollt használják.
+
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 KISS csomagban található többlet információik ==
+
== 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)
  
<HIGHLIGHTSYNTAX language="c">/* SLIP/KISS protokol karakterek */
+
<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 jelenti az END adatkaraktert */
+
#define ESC_END        0334            /* ESC ESC_END helyettesíti az END karakterértékkel egyező adatkaraktert */
#define ESC_ESC        0335            /* ESC ESC_ESC jelenti az ESC adatkaraktert */
+
#define ESC_ESC        0335            /* ESC ESC_ESC helyettesíti az ESC karakterértékkel egyező adatkaraktert */
</HIGHLIGHTSYNTAX>
+
</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:Konstruktőri ismeretek]]
+
[[Kategória:Csomagrádió]]
[[Kategória:Rádióamatőr adatátviteli protokollok]]
 

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.

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 */

  1. define PARAM_DATA 0 /* adatcsomag következik */
  2. define PARAM_TXDELAY 1 /* TXdelay + 1 byte --> x * 10 ms, default x=50 */
  3. define PARAM_PERSIST 2 /* perzisztencia + 1 byte --> (x+1)/256 az esély, hogy ad. default: x=63 */
  4. define PARAM_SLOTTIME 3 /* slottime + 1 byte --> x * 10 ms, default x=10 */
  5. define PARAM_TXTAIL 4 /* TXtail + 1 byte --> x * 10 ms, elavult a paraméter így csak kompatibilitáási okokból van */
  6. define PARAM_FULLDUP 5 /* Fullduplex? igen(1)/nem(0) */
  7. define PARAM_HW 6 /* SetHardver - TNC függő. Például TNC-1 -nél sebességet állított */
  8. define PARAM_MUTE 7 /* TX letiltása/engedélyezése */

/* Innentől az interfész közös paraméterei */

  1. define PARAM_DTR 8
  2. define PARAM_RTS 9
  3. define PARAM_SPEED 10
  4. define PARAM_ENDDELAY 11
  5. define PARAM_GROUP 12
  6. define PARAM_CRCREQ 12
  7. define PARAM_IDLE 13
  8. define PARAM_MIN 14
  9. define PARAM_POLL 14
  10. define PARAM_MAXKEY 15
  11. define PARAM_WAIT 16
  12. define PARAM_DOWN 0x81
  13. define PARAM_UP 0x82
  14. define PARAM_BLIND 0x83
  15. define PARAM_RCV_MODE 0xfd
  16. define PARAM_RETURN2 0xfe
  17. 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) */

  1. define END 0300 /* jelzi a keretvéget */
  2. define ESC 0333 /* jelzi a byte beszúrást */
  3. define ESC_END 0334 /* ESC ESC_END helyettesíti az END karakterértékkel egyező adatkaraktert */
  4. define ESC_ESC 0335 /* ESC ESC_ESC helyettesíti az ESC karakterértékkel egyező adatkaraktert */

</source>

A kommunikáció menete

  1. END
  2. parancskód
  3. adat(ok)
  4. 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.

TNC-tokenring.png

Ebben az esetben a parancskód kiegészül egy eszközszám mezővel.

  1. END
  2. TNC szám (0 ... N)
  3. parancskód
  4. adat(ok)
  5. 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ó