\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}
+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. Therefore the code is
+compilable for almost any device or system. Note that it is not needed to
+implement a full interface. The full interface, listed in
+Appendix~\label{app:device-interface}, also includes functions for accessing
+the peripherals that not every device might have. The interface headers also
+show which functionality is implemented and which functionality is not
+available. This information is exchanged during the setup of the communication.
\subsection{Specification}
+Devices are stored in a record type and all devices in the system are stored in
+a \gls{SDS} containing all devices.
\subsection{Communication}
-
+\todo{Handshake, device specification sending, spec.c}
+\todo{mTaskDevice class interface}
\section{mTasks}
\subsection{\gls{EDSL}}
+\todo{Show the classes}
\subsection{Shares}
+\todo{Show the types and why}
+
+Shares are used to store the values
+
+Shares all have
%\subsection{Serial port communication in Clean and iTasks}
%In the first exploration stage I added duplex serial port communication to
%iTasks in the same way as TCP is added. To make it work several changes had to