add devices supported
[msc-thesis1617.git] / methods.tex
index 8b5b1fe..1cf3b68 100644 (file)
@@ -1,30 +1,77 @@
 \section{\acrlong{TOP}}
 \section{\acrlong{TOP}}
+\subsection{\gls{iTasks}}
 \gls{TOP} is a recent new programming paradigm implemented as
 \gls{TOP} is a recent new programming paradigm implemented as
-\gls{iTasks}~\cite{achten_introduction_2015} in
-the pure lazy functional language \gls{Clean}
+\gls{iTasks}\cite{achten_introduction_2015} in the pure lazy functional
+language \gls{Clean}\cite{brus_cleanlanguage_1987}. \gls{iTasks} is a
+\gls{EDSL} to model workflow tasks in the broadest sense. A \CI{Task} is just
+a function that, given some state, returns the observable value of the
+\CI{TaskValue}. A simple example is shown in Listing~\ref{lst:taskex}
+accompanied with Figure~\ref{fig:taskex1},~\ref{fig:taskex2} and~%
+\ref{fig:taskex3}.
 
 
-\todo{Main terms}
-The lazy functional programming language based on graph rewriting
-\gls{Clean}~\cite{brus_cleanlanguage_1987}
+\begin{lstlisting}[language=Clean,label={lst:taskex},%
+       caption={An example \gls{Task} for entering a name}]
+:: Name         = { firstname :: String
+                  , lastname  :: String
+                                 }
+
+derive class iTask Name
+
+enterInformation :: String [EnterOption m] -> (Task m) | iTask m
+
+enterName :: Task Name
+enterName = enterInformation "Enter your name" []
+\end{lstlisting}
+
+\begin{figure}[H]
+       \begin{subfigure}{.25\textwidth}
+               \centering
+               \includegraphics[width=.9\linewidth]{taskex1}
+               \caption{Initial interface}\label{fig:taskex1}
+       \end{subfigure}
+       \begin{subfigure}{.25\textwidth}
+               \centering
+               \includegraphics[width=.9\linewidth]{taskex2}
+               \caption{Incomplete entrance}\label{fig:taskex2}
+       \end{subfigure}
+       \begin{subfigure}{.25\textwidth}
+               \centering
+               \includegraphics[width=.9\linewidth]{taskex3}
+               \caption{Complete entry}\label{fig:taskex3}
+       \end{subfigure}
+       \caption{Example of a generated user interface}
+\end{figure}
+
+\subsection{Combinators}
 
 \section{\acrlong{EDSL}s}
 
 \section{\acrlong{EDSL}s}
+\todo{while iTasks is also a DSL\ldots}
 \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}
 
 \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}
+\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
 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
 
 \subsection{Specification}
 Devices are stored in a record type and all devices in the system are stored in
@@ -38,11 +85,10 @@ exact specification is listed in Listing~\ref{lst:devicespec}
 \begin{lstlisting}[language=Clean,label={lst:devicespec},
        caption={Device specification for \glspl{mTask}}]
 :: MTaskDeviceSpec =
 \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}
        }
 \end{lstlisting}
 \todo{Explain specification, combine task and share space}
@@ -101,3 +147,18 @@ have a unique numeric identifier and an initial value.
 sdsStore :: Shared [MTaskShare]
 \end{lstlisting}
 \todo{Do something with the sharetype}
 sdsStore :: Shared [MTaskShare]
 \end{lstlisting}
 \todo{Do something with the sharetype}
+
+\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