diff --git a/Logsys-Linux.tex b/Logsys-Linux.tex
index 713b72778f5d360e22fc7f769348281e9aa74da0..f01690d497a2efa874e46e36f1c798edf501bd7a 100644
--- a/Logsys-Linux.tex
+++ b/Logsys-Linux.tex
@@ -360,7 +360,7 @@ Ha nincs a RST lábat használó átvitel megnyitva, lehetőségünk van aszinkr
 
 \subsection{Átviteli módok}
 \subsubsection{JTAG}
-% TODO
+\label{ssssec:JTAG xfer}
 Az első és talán legfontosabb implementált átviteli mód a JTAG. Ez a 0. interfész 0x01/0x82 enpoint-párját használja, valamint az LDC TDI, TDO, TMS, TCK és JTREF lábait. Ezen az interfészen keresztül lehetséges az LDC-hez illesztett elektronika konfigurálása és hibakövetése.
 
 \noindent\\A JTAG megnyitásához két Control blokkot kell kiadnunk:
@@ -409,6 +409,8 @@ A LDC kétféle módban tudja a JTAG interfészt kezelni:
 	\item Ellenőrzés mód: ekkor a számítógép a TDI-vel együtt a várt TDO értékeket is elküldi, majd a transzfer után egy Control blokkal lekérdezi, hogy történt-e hiba (várttal nem egyező TDO érték)
 \end{itemize}
 
+Visszaolvasás módban működik pl. a Boundary Scan, mert ott az eszköz ID code-ját vissza kell adnunk a számítógépnek. SVF fájlok letöltése (lásd lejjebb, az "FPGA konfigurációs fájlok" részben) során azonban tudjuk, hogy milyen TDO értéket várunk (ez benne van az SVF állományban). Így ahelyett, hogy visszaolvasnánk USB-n keresztül, és a számítógép hasonlítaná össze, használhatjuk az LDC ellenőrzéses módját, ezáltal USB sávszélességet takarítva meg.
+
 \noindent Az ellenőrzést a következő kéréssel végezzük:
 
 \noindent\textbf{URB Control blokk:}\\
@@ -517,7 +519,6 @@ Ellenőrzés módban a számítógépnek ugyanannyi bájtot kell visszaolvasnia,
 A visszaolvasott bájtok közül csak minden második a hasznos TDO adat, a többi bájt értéke 0.\cite{RT-dipterv}
 
 \noindent\textbf{FPGA konfigurációs fájlok}
-\label{ssssec:JTAG SVF}
 
 A libxsvf-nek köszönhetően SVF és XSVF formátumú fájlokat képes a program natívan kezelni. Azonban a BIT (és JED) formátumok nem nyíltak, így azok kezeléséhez a Xilinx egyik segédprogramjával (iMPACT) át kell konvertálnom SVF-re. (ugyanezt teszi egyébként a Logsys GUI is). A segédprogrammal való kommunikációhoz a libc \texttt{popen} metódusát használom, ami a Unix pipe-okat használja (a Logsys GUI pedig temporális fájlokat hoz létre ugyanerre a célra). Azonban az iMPACT-nak nem lehet megmondani, hogy ne hozzon létre logfájlt, így hogy ne szemetelje tele a munkakönyvtárat, a szubprocessz elindítása előtt átlépek a \texttt{/tmp} könyvtárba, ami Unix-szerű rendszereken általában bárki által írható és nem perzisztens tároló. Ennek következtében azonban elveszítjük a relatív útvonalak használatának lehetőségét (hiszen mappát váltunk, és az így a \texttt{/tmp}-hez képest értelmeződne). Valamint mivel a terminálból olvasáskor a parancsok paramétereit szóközzel választom el, problémás a szóközt tartalmazó útvonalak használata. Speciális esetként beletettem, hogy az aposztrófok vagy idézőjelek közötti szóköz ne törje az argumentumlistát, de pl. nem támogatom a "\texttt{\textbackslash~}" formátumú escape-lést. Valamint ha egy útvonal tartalmaz aposztrófot ÉS idézőjelet IS, akkor nem reprezentálható.
 
@@ -728,6 +729,9 @@ Az átvitelt lezárni pedig a következőképpen lehet:
 	\item Bitmaszkok: \texttt{enum LogsysSerialPin} (\textit{include/logsys/serio.h:18})
 \end{itemize}
 
+\subsubsection{Egyéb átviteli módok}
+Az LDC képes I\textsuperscript{2}C master és PIC ISP átvitelekre is, azonban ezekhez nem elérhető dokumentáció. Az I\textsuperscript{2}C átvitelhez létezett egy terminál app (az Interneten találni képet róla), azonban a futtatható állományt nem sikerült fellelnem, így ezeket nem tudtam beépíteni.
+
 \pagebreak
 \section{A driver felépítése}
 % TODO
@@ -751,7 +755,6 @@ A függvénykönyvtár a \textit{src/shared} mappa fájljaiból fordul, valamint
 \end{itemize}
 
 \subsection{JTAG implementáció}
-% TODO JTAG, libxsvf
 Az SVF fájlok feldolgozását a libxsvf végzi. A feldolgozást a \texttt{libxsvf\_play} függvény meghívásával indítjuk, aminek első paramétere egy \texttt{struct libxsvf\_host} típusú változó. Ez a struktúra definiálja a libxsvf számára a JTAG vonalak beállításához hívandó függvény-pointereket. Ezeket a callbackeket tartalmazza a \textit{src/shared/jconf.c} fájl. A függvény-implementációk neve szisztematikusan, a pointer nevéből egy "\texttt{lsvf\_host\_}" prefixszel képződik (azaz a \texttt{foo} metódust a \texttt{lsvf\_host\_foo} valósítaná meg). A továbbiakban ezekre a pointer nevével (a példámban a \texttt{foo}) hivatkozom.
 A struktúra tartalmaz még egy \texttt{struct udata\_s}-re mutató pointert is, ahol tetszőleges felhasználói adatot tárolhatunk. Az én esetemben ebben található a LibUSB eszközre, illetve a nyitott SVF fájlra mutató pointer, a kiírandó, de még ki nem írt (LDC-nek el nem küldött) JTAG adatokat tároló puffer, valamint egy flag, hogy a legutolsó tranzakció (LDC-vel való kommunikáció) során lépett-e fel TDO összehasonlítási hiba.
 
@@ -775,6 +778,35 @@ A \texttt{realloc} hívást változatlanul továbbítom a libc felé.
 \subsubsection{\texttt{pulse\_tck}}
 Ez a JTAG konfiguráció "lelke". Nevével ellentétben nem csupán egy TCK pulzust ad ki, hanem rögtön be is állítja a kívánt TDI/TMS értékeket, sőt, a várt TDO-t is ekkor kapjuk meg (ha van).
 
+Ezeket az adatokat eltároljuk a \texttt{struct udata\_s}-ban található pufferbe, és ha szükséges, meghívjuk a \texttt{lsvf\_flush\_iobuf} függvényt, ami majd kiküldi az LDC-nek.
+
+Visszatérési értékként a \texttt{struct udata\_s}-ban található hibaflaget adjuk. Ezáltal ugyan a libxsvf késleltetve értesül a TDO ellenőrzési hibáról, de a tapasztalat azt mutatja, hogy ez nem okoz problémát.
+
+\subsubsection{\texttt{lsvf\_flush\_iobuf} és \texttt{lsvf\_write\_pack}}
+A \texttt{lsvf\_flush\_iobuf} függvény végzi a munka oroszlánrészét: az ő dolga a pufferelt TMS, TDI, TDO és TDO maszk adatokból az LDC csomagformátumának megfelelő kérést előállítani.
+
+A függvény feladata "összevárni" a homogén adatokat (legfeljebb 8-at), majd őket egy keretbe tenni. Ezért először eldönti, hogy TMS vagy TDI írással valósítsa meg.
+
+\noindent\textbf{TMS írás}
+
+A TMS írás feltétele, hogy a TDI "Don't Care" legyen (a kódban -1), a TMS pedig 0 vagy 1. A \texttt{dbit} egy ring countert valósít meg, ami az éppen írandó bitet jelöli ki. A \texttt{data} tárolja a kiírandó adatot, a \texttt{chk} a várt TDO értékeket, a \texttt{cmask} pedig a TDO maszkot.
+
+Amíg a TMS írás feltétele fennáll, \texttt{data}-ban eltároljuk a kiírandó TMS értéket (a \texttt{dbit} által kijelölt biten), valamint ha TDO nem "Don't Care", akkor őt eltárojluk \texttt{chk}-ben és bebillentjük \texttt{cmask} megfelelő bitjét.
+
+Ha már összegyűjtöttünk 8 TCK pulzust, vagy már nem TMS írás történik, akkor \texttt{bulk\_out}-ban létrehozunk egy keretet a kiszámított értékek számára.
+
+\noindent\textbf{TDI írás}
+
+A TDI írás feltétele, hogy a TDI 0 vagy 1 legyen, a TMS pedig az utolsó bit kivételével 0 (az utolsó bitnél lehet más is, az lesz az 1. bájt 6. bitje, lást \ref{ssssec:JTAG xfer}/JTAG adatátvitel). A \texttt{dbit} itt is az éppen írandó bitet jelöli ki. A \texttt{data} tárolja a kiírandó adatot, a \texttt{chk} a várt TDO értékeket, a \texttt{cmask} pedig a TDO maszkot. Különbség csupán a \texttt{tmsAfter} változó jelenléte.
+
+Amíg a TDI írás feltétele fennáll, \texttt{data}-ban eltároljuk a kiírandó TDI értéket (a \texttt{dbit} által kijelölt biten), valamint ha TDO nem "Don't Care", akkor őt eltárojluk \texttt{chk}-ben és bebillentjük \texttt{cmask} megfelelő bitjét.
+
+Ha már összegyűjtöttünk 8 TCK pulzust, vagy már nem TDI írás történik, esetleg elértünk egy TDI+TMS íráshoz (ami csak a TDI írás utolsó bitjeként szerepelhet), akkor \texttt{bulk\_out}-ban létrehozunk egy keretet a kiszámított értékek számára.
+
+\noindent\textbf{Tranzakció}
+
+Ezek után \texttt{lsvf\_write\_pack} feladata a keretek tömbjéből összeállítani egy Bulk átvitelt. Ehhez csupán sorosítania kell a tömböt, kiküldeni a 0x01-es végpontra, majd megnézni, történt-e hiba az összehasonlítás során.
+
 \pagebreak
 \section{A parancssori alkalmazás felépítése}
 A konzolos teszt alkalmazás a \texttt{logsys-test} fájlnevet viseli. A programon belül különféle parancsokat adhatunk ki, amiket az LDC végre fog hajtani.
@@ -827,7 +859,7 @@ Ennek a kategóriának nincsenek operációi. Kiadáskor kiírja az LDC állapot
 \subsubsection{\texttt{conf}}
 \textbf{Operációk:}
 \begin{itemize}
-	\item \texttt{<formátum> <fájl>}: Konfiguráció letöltése. A \texttt{<formátum>} lehet \texttt{svf}, \texttt{xsvf}, \texttt{bit} vagy \texttt{jed}. A \texttt{<fájl>} egy \textbf{abszolút} elérési útvonal (lásd \ref{ssssec:JTAG SVF}/FPGA konfigurációs fájlok)
+	\item \texttt{<formátum> <fájl>}: Konfiguráció letöltése. A \texttt{<formátum>} lehet \texttt{svf}, \texttt{xsvf}, \texttt{bit} vagy \texttt{jed}. A \texttt{<fájl>} egy \textbf{abszolút} elérési útvonal (lásd \ref{ssssec:JTAG xfer}/FPGA konfigurációs fájlok)
 \end{itemize}
 
 \subsubsection{\texttt{quit}}