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. 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
+needed to implement a full interface. The full interface excluding the device
+specific settings is listed in Appendix~\ref{app:device-interface}. The
+interface works in a similar fashion as the \gls{EDSL}. Devices do not have to
+implement all functionality, this is analogous to the fact that views do not
+have to implement all type classes in the \gls{EDSL}. When the device connects
+for the first time with a server the specifications of what is implemented is
communicated.
-The current list of supported and tested devices is as follows:
+At the time of writing the following device families are supported and can run
+the device software.
\begin{itemize}
- \item $^*$\texttt{NIX} systems such as Linux
- \item STM32 like development boards supported by \texttt{ChibiOS}.
- \item \emph{Arduino} compatible microcontrollers
+ \item \texttt{POSIX} compatible systems
+
+ This includes systems running \emph{Linux} and \emph{MacOS}.
+ \item \texttt{STM32} family microcontrollers supported by \texttt{ChibiOS}.
+
+ This is tested in particular on the \texttt{STM32f7x} series \gls{ARM}
+ development board.
+ \item Microcontrollers programmable by the \emph{Arduino} \gls{IDE}.\\
+
+ This does not only include \emph{Arduino} compatible boards but also
+ other boards capable of running \emph{Arduino} code. The code
+ has been found working on the \texttt{ESP8266} powered \emph{NodeMCU}.
+ It is tested on devices as small as the regular \emph{Arduino UNO}
+ board that only boasts a meager \emph{2K} of \emph{RAM}.
\end{itemize}
\subsection{Specification}
a \gls{SDS} containing all devices. From the macro settings in the interface
file a profile is created for the device that describes the specification. When
a connection between the server and a client is established the server will
-send a request for specification. The client will serialize his specs and send
-it to the server so that the server knows what the client is capable of. The
-exact specification is listed in Listing~\ref{lst:devicespec}
+send a request for specification. The client will serialize his specification
+and send it to the server so that the server knows what the client is capable
+of. The exact specification is listed in Listing~\ref{lst:devicespec}
\begin{lstlisting}[language=Clean,label={lst:devicespec},
caption={Device specification for \glspl{mTask}}]
,bytesMemory :: Int
}
\end{lstlisting}
+
+\subsection{Memory Management}
\todo{Explain specification, combine task and share space}
\subsection{Communication}