\documentclass[../mainDocument.tex]{subfiles}
\begin{document}
	\section{Architektur und Integrationstests}
	\subsection{Systemarchitektur}
	
	\subsection{ODROID}
	\begin{landscape}
	\begin{figure}[h]
			\begin{center}
				\includegraphics[scale=0.5]{SystemArchitektur}
			\end{center}
			\caption{Systemarchitektur}
			\label{fig:hardware-sys}
		\end{figure}
		\begin{figure}[h]
			\begin{center}
				\includegraphics[scale=0.45]{Odroid}
			\end{center}
			\caption{ODROID-System}
			\label{fig:ODROID-sys}
		\end{figure}
		
	\end{landscape}
	
	\subsection{Object Oriented Analysis}
	\begin{figure}[h]
	\begin{tikzpicture}
		\begin{umlpackage}{Car}
			\begin{umlpackage}{ODROID}
				%classes
				\umlclass[scale = 0.5]
					{MAV-Link}
					{
						- $v_{new}$ : Integer\\
						- $\alpha_{new}$ : Integer\\
						- $v_O$ : Interger\\
						- $\alpha_O$ : Integer\\
						- RC-State : Integer
					}
					{
						+ set($v_{new}$, $\alpha_{new}$)\\
						+ RequestNewState(RC-State)\\
						+ updateOwn() : (Integer, Integer)
					}
				\umlclass[scale = 0.5, xshift = -8cm]
					{Lane-Keeping}
					{
						- Image/Path : ?\\
						- $\alpha_{new}$ : Integer
					}
					{
						+ Lanekeeping() : ?
					}
				\umlclass[scale = 0.5, xshift = 8cm, yshift = -4cm]
					{Cruise-Control}
					{
						- $d_O$ : Integer\\
						- $v_P$ : Integer\\
						- $IPD$ : Integer\\
						- $PS$ : Integer\\
						- PlatoonState : Integer\\
						- $v_s$ : Integer\\
						- $d_s$ : Integer\\
						+ $v_{new}$ Integer
					}
					{
						- CACC($d_O, v_P, IPD, PS$) : Integer\\
						- ACC($d_O, v_P, v_s, d_s$) : Integer\\
						- calcNewOptimalDistance($v_s$) : Integer\\
						+ setNewSpeed($v_{new}$)
					} (CruiseControl)
				\umlclass[scale = 0.5, xshift = -5.5cm, yshift = -9cm]
					{Egomotion}
					{
						- $d_O$ : Integer\\
						- $v_O$ : Integer\\
						- $v_R$ : Integer\\
						- $v_P$ : Integer\\
						- $\alpha_O$ : Integer\\
						- Path : ?\\
						+ $\alpha_{new}$ : Integer\\
						+ $v_{new}$ : Integer\\
					}
					{
						- calc\_$v_P$($v_R$) : Integer\\
						%- getEnvironment() : (Integer, Integer)\\
						%- getMavLink() : (Integer, Integer)\\
						%- getCurseControl : Integer
					} (EgoMotion)
				\umlclass[scale = 0.5, xshift = 6.7cm, yshift = -14cm]
					{PlatoonController}
					{
						- $IPD$ : Integer\\
						- $PS$ : Integer\\
						- PlatoonState : ENUM\\
						- $v_s$ : Integer\\
						- $CarID$ : Integer\\
						- PlatoonMemberList : ?\\
						- PlatoonPos : Integer\\
						- PlatoonPrevID : ?\\
						+ WantsPlatoon : Boolean
					}
					{
						- evaluate\_PlatoonState(PlatoonState : Integer) : ?\\
						- determine\_LV\_IPD-PS() : (Integer, Integer)\\
						- handle\_PBM() : ?\\
						- handle\_PCM() : ?\\
						- handle\_PHM() : ?\\
						- send\_PBM() : ?\\
						- send\_PCM() : ?\\
						- send\_PHM() : ?
					}
				\umlclass[scale = 0.5, xshift = -9cm, yshift = -20cm]
					{Environment}
					{
						- USS-Data : Integer\\
						+ $d_O$ : Integer\\
						+ $v_R$ : Integer\\
						+ PlatoonPrevID : ?
					}
					{
						- calc\_$v_R$
					}
				\umlclass[scale = 0.5, xshift = -4cm, yshift = -23cm]
					{Logging}
					{
						+ $d_O$ : Integer\\
						+ $v_O$ : Integer\\
						+ $\alpha_O$ : Integer\\
						+ $v_R$ : Integer\\
						+ $v_P$ : Integer\\
						+ Path : ?\\
						+ $\alpha_{new}$ : Integer\\
						+ $v_{new}$ : Integer\\
						+ WantsPlatoon : Boolean\\
						+ UpdateReady : Boolean\\
						+ $IPD$ : Integer\\
						+ $PS$ : Integer\\
						+ PlatoonState : ENUM\\
						+ $v_s$ : Integer\\
						+ $CarID$ : Integer\\
						+ PlatoonMemberList : ?\\
						+ PlatoonPos : Integer\\
						+ PlatoonPrevID : Integer
					}
					{
						- cacheDate() : ?\\
						+ sendToPC(ALL)
					}
				\umlclass[scale = 0.5, xshift = -11.5cm, yshift = -25cm]
					{Camera}
					{}
					{}
				\umlclass[scale = 0.5, xshift = -11.2cm, yshift = -28cm]
					{Ultrasonic}
					{}
					{}
				\umlclass[scale = 0.5, xshift = 9.5cm, yshift = -25cm]
					{Network}
					{
						+ $IPD$ : Integer\\
						+ $PS$ : Integer
					}
					{
						+ send\_PBM()\\
						+ send\_PCM()\\
						+ send\_PHM()\\
						+ send\_PLM()\\
						+ handle\_PBM()\\
						+ handle\_PCM()\\
						+ handle\_PHM()\\
						+ handle\_PLM()\\
						+ Car2PC-MSGs.
					}
				
				%arrows
				\umlinherit	[geometry=-|,  anchors =   0 and 250]	{Camera}{Environment}
				\umlinherit	[geometry=|-,  anchors =  90 and 180]	{Camera}{Lane-Keeping}
				\umlinherit	[geometry=|-,  anchors =  90 and  25]	{Cruise-Control}{MAV-Link}
				\umlinherit	[geometry=|-,  anchors = 217 and  50]	{Cruise-Control}{Egomotion}
				\umlinherit	[geometry=|-,  anchors =  50 and 217]	{Egomotion}{Cruise-Control}
				\umlinherit	[geometry=|-,  anchors = -35 and 152]	{Egomotion}{PlatoonController}
				\umlinherit	[geometry=-|,  anchors = 115 and 300]	{Egomotion}{Lane-Keeping}
				\umlinherit	[geometry=-|]							{Egomotion}{Logging}
				\umlinherit	[geometry=|-|, anchors = 90 and 245]	{Environment}{Egomotion}
				\umlinherit	[geometry=--]							{Lane-Keeping}{MAV-Link}
				\umlinherit	[geometry=-|,  anchors = 300 and 115]	{Lane-Keeping}{Egomotion}
				\umlinherit	[geometry=|- , anchors = -55 and 222]	{Logging}{Network}
				\umlinherit	[geometry=|-|, anchors = 235 and  70]	{MAV-Link}{Egomotion}
				\umlinherit	[geometry=-|,  anchors = 180 and 270]	{Network}{MAV-Link}
				\umlinherit	[geometry=-|]							{PlatoonController}{Cruise-Control}
				\umlinherit	[geometry=|-,  anchors = 240 and  25]	{PlatoonController}{Logging}
				\umlinherit	[geometry=-|,  anchors = 300 and  85]	{PlatoonController}{Network}
				\umlinherit	[geometry=-|,  anchors =  85 and 300]	{Network}{PlatoonController}
				\umlinherit	[geometry=-|,  anchors =   0 and 290]	{Ultrasonic}{Environment}
			\end{umlpackage}
		\end{umlpackage}
	\end{tikzpicture}
	\caption{Object Oriented Analysis}
	\label{fig:ooa}
	\end{figure}
	
	\subsection{Softwarearchitektur}
	\begin{landscape}
	\begin{figure}[h]
			\begin{center}
				%\includegraphics[width=\textwidth]{SoftwareArchitektur} %photo
				\includegraphics[width=0.8\textwidth]{sw_architektur} % some elements missing/ not recognizable
			\end{center}
			\caption{Softwarearchitektur}
			\label{fig:sw-arch}
		\end{figure}
	
	%uml-tikz stub TODO
	\begin{comment}
	\begin{tikzpicture}
		\begin{umlpackage}{Softwarearchitektur}
				%classes
				\umlclass[scale = 0.5, xshift = 8cm]
					{MAV-Link}
					{}
					{}
				\umlclass[scale = 0.5, xshift = 8cm, yshift = -4cm]
					{Lane-Keeping}
					{}
					{}
				\umlclass[scale = 0.5, xshift = 8cm, yshift = -8cm]
					{Kamera}
					{}
					{}
				\umlclass[scale = 0.5, xshift = 8cm, yshift = -12cm]
					{USS}
					{USS-Daten}
					{}
				%network
				\umlclass[scale = 0.5, xshift = -8cm]
					{C2C}
					{
						IPD, PS
					}
					{
						nach PC\\
						nP, NULL\\
						nP(FV)\\
						nP(LV)\\
						FV\\
						LV
					}
				\umlclass[scale = 0.5, xshift = -4cm]
					{PC2}
					{
					
					}
					{
						handle IPD aus
					}
				\umlclass[scale = 0.5]
					{Logging}
					{
					
					}
					{
					
					}
				\umlclass[scale = 0.5, yshift = -4cm]
					{Egomotion}
					{
						$v_p = v_0 + v_p$\\
						$d_0$
					}
					{
					
					} (EgoMotion)
				\umlclass[scale = 0.5, xshift = -6cm, yshift = -8cm]
					{PlatoonController}
					{
						IPD, PS, $d_0$, PlatSt, $v_s$
					}
					{
						noPlatoon:\\
						-wantsPlatoon\\
						- FV/LV\\
						- C2C initialisieren\\
						- IPD, PS bestimmen\\
						- $v_s$ weiterreichen\\
						- ACC fahren\\
						FV:\\
						- CACC fahren\\
						- leaveMsg\\
						LV:\\
						- ACC fahren\\
						- leaveMsg\\
						- IPD/PS update ($v_{new}$ vs. $v_{PC}$)
					}
				%Stuff: Pub $v_{new}$, Notify, für CC: PlatoonStat, IPD, PS, $v_s$
				\umlclass[scale = 0.5, yshift = -8cm]
					{CruiseControl}
					{
					
					}
					{
					
					}
				\umlclass[scale = 0.5, xshift = 4cm, yshift = -12cm]
					{Environment}
					{
						$d_0, v_r$
					}
					{
					
					}
				
				%arrows
				%\umlinherit	[geometry=-| ,anchors=   0 and 250]	{src}{dest}
			\end{umlpackage}
		\end{tikzpicture}
	\end{comment}
	\end{landscape}
	
\end{document}