\chapter{Komunikačný protokol} \label{cha:komunikacny_protokol}
V tejto kapitole je stručne popísaný komunikačný protokol na riadenie a nastavovanie systému pomocou programu v PC. Ďalej je popísaná štruktúra UDP paketu na prenos audio signálu medzi SPU jednotkou a externými reproduktormi.

V ďalšom texte sa bude pre označovanie jednotlivých blokov (podľa obr. \ref{pic:SSU} na strane \pageref{pic:SSU}) používať špecifické názvoslovie. Pod pojmom \emph{master jednotka} (prípadne len \emph{master}) sa bude rozumieť SPU (Signal Processing Unit), pod pojmom \emph{slave jednotka} zase jeden DAS (Digital Active Speakers). Pre označenie vstupného audio kanálu pred spracovaním v SPU jednotke (napr. ľavý kanál z AD prevodníka) bude používaný termín \emph{input stream}. Pre označenie audio toku smerujúceho do konkrétneho reproduktoru (napr. ľavý predný) sa bude používať termín \emph{out\-put stream}. Skupina output streamov určená pre konkrétnu slave jednotku je označená termínom \emph{device}.

\section{Komunikácia s PC}
Medzi SPU a PC je vytvorené TCP/IP spojenie. Komunikácia je realizovaná formou textových správ s informáciami potrebnými pre nastavenie. Všetky nastavenia sú uložené v štruktúrach na to určených. Napr. v štruktúre typu BMaster\_t sú uložené informácie o master jednotke (čiže SPU), konkrétne jej IP adresa, sériové číslo, verzia firmware a verzia hardware. Takto sú uložené aj informácie o input streamoch (popisuje konkrétny kanál konkrétneho vstupu), output streamoch (popisuje stream smerujúci do konkrétneho reproduktoru slave jednotky) a slave jednotkách (systém reproduktorov  v nejakej miestnosti, napr. 2+1 alebo 5+1). Deklarácie štruktúr a komunikačné príkazy sa nachádzajú v súbore btypes.h, ktorého výpis je v prílohe \ref{app:btypes} na strane \pageref{app:btypes}.

Na vyžiadanie informácii z konkrétnej štruktúry slúžia príkazy typu GET\_x (napr. GET\_MASTER). Po obdržaní tohoto príkazu pošle SPU jednotka celú štruk\-tú\-ru naviazanú na tento príkaz. Príkazy tohto typu sa používajú prevažne po nadviazaní spojenia s PC softwarom, keďže software si po pripojení načítava informácie z SPU jednotky, kde sú permanentne uložené.

Pre zmenu nastavení sa používajú príkazy typu SET\_x (napr. SET\_OUT\-PUT\-STREAM). S týmto príkazom príde celá štruktúra, ktorou sa v SPU jednotke prepíše pôvodné nastavenie. Na tieto príkazy sa neposiela odpoveď.

Pre asynchrónne posielanie správ do PC sa používajú príkazy typu SEND\_x (napr. SEND\_INFRACOMMAND). Pomocou týchto príkazov sa aktualizujú nastavenia v PC, ak sa zmena udiala mimo PC softwaru (napr. prostredníctvom IrDA ovládača). Takisto sa používajú na posielanie informácií slúžiacich na logovanie do počítača (napr. teploty prijaté zo slave jednotky).

Posledná skupina príkazov typu GIVE\_x (napr. GIVE\_INPUTSTREAM) slúži na vyžiadanie , respektíve zrušenie (napr. GIVE\_STOPINPUTSTREAM), zasielania input alebo output streamu pre zobrazenie v PC formou grafu (časový priebeh audio signálu). Vtedy sa stream posiela ako broadcast.

Komunikačný protokol vymyslel Jakub Laník a jeho podrobný popis je možné nájsť v jeho diplomovej práci \cite{diplomka_lanik}.

\section{Štruktúra UDP paketu}
Každý paket, ktorý sa posiela do slave jednotky, je zložený z hlavičky a vzoriek vo formáte float (dáta). Na obr. \ref{pic:udp_paket} je znázornená štruktúra paketu.

\begin{figure}[hbtp]
	\centering
		\includegraphics[width=\columnwidth]{../obrazky/komunikacny_protokol/udp_paket}
	\caption{Štruktúra UDP paketu}
	\label{pic:udp_paket}
\end{figure}

Preambula je dlhá 4 bajty a je pevne nastavená na hodnotu 0xFFFFFFFF alebo 0xFFFFFFFE. LSB bit v preambule slúži na určenie typu streamu. Ak je nastavený na 1, tak sa jedná o input stream a ak je nastavený na 0, tak sa jedná o output stream. Zasielanie input streamu je len pre účely grafického zobrazenia signálu v PC, takže v slave jednotke sa kontroluje hlavička s 0xFFFFFFFF. Ak začína paket inou hodnotou, tak sa zahadzuje.

V nasledovnej dvojici dvoch bajtov sú uložené identifikačné čísla input a output streamu. Podľa UID output streamu smeruje slave jednotka audio signál do správneho reproduktoru.

V hlavičke je ešte uložené sériové číslo slave jednotky, pre ktorú je stream určený a časová známka. V časovej známke je uložený relatívny čas vyslania paketu. Používa sa preto, aby bolo možné prijaté pakety v slave jednotke správne usporiadať, keďže prenosové médium nezaručuje prenos správ v poradí vyslania.

Na konci paketu sa nachádzajú samotné dáta s veľkosťou 1344 bajtov. Celý paket má teda dĺžku 1360 B.