-\section{\acrlong{TOP}}
-\gls{TOP} is a recent new programming paradigm implemented as
-\gls{iTasks}~\cite{achten_introduction_2015} in
-the pure lazy functional language \gls{Clean}
-
-\todo{Main terms}
-The lazy functional programming language based on graph rewriting
-\gls{Clean}~\cite{brus_cleanlanguage_1987}
-
-\section{\acrlong{EDSL}s}
-\glspl{mTask} are expressed in a class based shallowly embedded \gls{EDSL}.
-There are two main types of \glspl{EDSL}.
-\todo{Small shallow embedded dsl intro}
-\todo{Small deep embedded dsl}
-\todo{Show that class based has the best of both worlds}
-
-\section{Devices}
+\input{methods.top.tex}
+
+\input{methods.dsl.tex}
+
+\section{Architecture}
+\subsection{Devices}
The client code for the devices is compiled from one codebase. For a device to
be eligible for \glspl{mTask} it must be able to compile the shared codebase
and implement (part of) the device specific interface. The shared codebase only
uses standard \gls{C} and no special libraries or tricks are used. Therefore
the code is compilable for almost any device or system. Note that it is not
-needed to implement a full interface\todo{handshake}. The full interface,
-listed in Appendix~\label{app:device-interface}\todo{update interface listing},
-also includes functions for accessing the peripherals that not every device
-might have. Devices can choose what to implement by setting the correct macros
-in the top of the file.
+needed to implement a full interface. The full interface, listed in
+Appendix~\label{app:device-interface}\todo{update interface listing}, also
+includes functions for accessing the peripherals that not every device might
+have. Devices can choose what to implement by setting the correct macros in the
+top of the file. When a server connects to a client the specifications are
+communicated.
+
+The current list of supported and tested devices is as follows:
+\begin{itemize}
+ \item $^*$\texttt{NIX} systems such as Linux
+ \item STM32 like development boards supported by \texttt{ChibiOS}.
+ \item \emph{Arduino} compatible microcontrollers
+\end{itemize}
\subsection{Specification}
Devices are stored in a record type and all devices in the system are stored in
\begin{lstlisting}[language=Clean,label={lst:devicespec},
caption={Device specification for \glspl{mTask}}]
:: MTaskDeviceSpec =
- {haveLed :: Bool
- ,haveAio :: Bool
- ,haveDio :: Bool
- ,taskSpace :: Int // Bytes
- ,sdsSpace :: Int // Bytes
+ {haveLed :: Bool
+ ,haveAio :: Bool
+ ,haveDio :: Bool
+ ,bytesMemory :: Int
}
\end{lstlisting}
\todo{Explain specification, combine task and share space}