add connection diagrams and add todo combinators
authorMart Lubbers <mart@martlubbers.net>
Sun, 4 Jun 2017 12:06:24 +0000 (14:06 +0200)
committerMart Lubbers <mart@martlubbers.net>
Sun, 4 Jun 2017 12:06:24 +0000 (14:06 +0200)
conclusion.tex
methods.top.tex
results.arch.tex
thesis.pre

index bde2501..94b75ff 100644 (file)
@@ -25,7 +25,7 @@ broken device without needing to recompile the code.
 
 \section{Discussion}
 \todo{class based shallow doesn't have multiple backend support}
-\todo{slow client software because of intepretation}
+\todo{slow client software because of interpretation}
 \todo{What happens if a device dies? Task resending, add to handshake}
 
 
@@ -67,7 +67,7 @@ given.
 
 This idea could be extended to the analysis of stack size and possibly
 communication bandwidth. With this functionality ever more reliable fail-over
-systems can be designed. When the system knows more precise bounds it can
+systems can be designed. When the system knows preciser bounds it can
 allocate more \glspl{Task} on a device whilst staying within safe memory
 bounds. The resource allocation can be done at runtime within the backend
 itself or a general backend can be devices that can calculate the resources
index e29f16d..3acfb17 100644 (file)
@@ -67,6 +67,7 @@ specialization instances for these functions and show an according interface.
 Generated interfaces can be modified with decoration operators.
 
 \section{Combinators}
+\todo{check and refine}
 \Glspl{Task} can be combined using so called \gls{Task}-combinators.
 Combinators describe relations between \glspl{Task}. \Glspl{Task} can be
 combined in parallel, sequenced and their result values can be converted to
index 626f0a4..30fbc7a 100644 (file)
@@ -64,16 +64,19 @@ occurs. All communication goes via these channels. If the system wants to send
 a message to the device it just puts it in the channels. Messages sent from the
 client to the server are also placed in there. In the case of the \gls{TCP}
 device type the \gls{Task} is just a simple wrapper around the existing
-\CI{tcpconnect} function in \gls{iTasks}. In case of the serial device type
-it uses the newly developed serial port library of \gls{Clean}\footnote{\url{%
+\CI{tcpconnect} function in \gls{iTasks}. In case of the serial device type it
+uses the newly developed serial port library of \gls{Clean}\footnote{\url{%
 https://gitlab.science.ru.nl/mlubbers/CleanSerial}}.
 
 Besides all the communication information the record also keeps track of the
 \glspl{Task} currently on the device and the according \glspl{SDS}. Finally it
 stores the specification of the device that is received when connecting.
-All of this is listed in Listing~\ref{lst:mtaskdevice}.
+All of this is listed in Listing~\ref{lst:mtaskdevice}. The definitions of the
+message format are explained in the following section.
 
 \begin{lstlisting}[language=Clean,caption={Device type},label={lst:mtaskdevice}]
+deviceStore :: Shared [MTaskDevice]
+
 :: Channels :== ([MTaskMSGRecv], [MTaskMSGSend], Bool)
 :: MTaskResource 
        = TCPDevice TCPSettings
@@ -96,4 +99,65 @@ class MTaskDuplex a where
 \end{lstlisting}
 
 \section{Communication}
+All \gls{mTask} messages are encoded following the specification given in
+Appendix~\ref{app:communication-protocol}. Available messages are:
+\begin{lstlisting}[language=Clean,caption={Available messages}]
+:: MTaskMSGRecv
+       = MTTaskAck Int Int           | MTTaskDelAck Int
+       | MTSDSAck Int                | MTSDSDelAck Int
+       | MTPub Int BCValue           | MTMessage String
+       | MTDevSpec MTaskDeviceSpec   | MTEmpty
+
+:: MTaskMSGSend
+       = MTTask MTaskInterval String | MTTaskDel Int
+       | MTShutdown                  | MTSds Int BCValue
+       | MTUpd Int BCValue           | MTSpec
+
+:: MTaskInterval = OneShot | OnInterval Int | OnInterrupt Int
+\end{lstlisting}
+
+\subsection{Add a device}
+A device can be added by filling in the \CI{MTaskDevice} record as much as
+possible and running the \CI{connectDevice} function. This function grabs the
+channels, starts the synchronization \gls{Task}, makes sure the errors are
+handled when needed and runs a processing function in parallel to react on the
+incoming messages. Moreover, it sends a specification request to the device in
+question to determine the details of the device and updates the record to
+contain the top-level \gls{Task}-id. All the device functionality heavily
+depends on the \CI{withDevices} function that applies a function a device in
+the \gls{SDS} when they are equal. Device equality is defined as equality on
+their channels. This allows you to give an old device record to the function
+and still update the latest instance. Listing~\ref{lst:connectDevice} shows the
+connection function.
+
+\begin{lstlisting}[language=Clean,label={lst:connectDevice},%
+       caption={Connect a device}]
+withDevices :: MTaskDevice (MTaskDevice -> MTaskDevice) -> Task [MTaskDevice]
+
+connectDevice :: (MTaskDevice (Shared Channels) -> Task ()) MTaskDevice -> Task Channels
+connectDevice procFun device = let ch = channels device
+       in appendTopLevelTask 'DM'.newMap True
+               (procFun device ch -||- catchAll (getSynFun d.deviceData ch) errHdl)
+               >>= \tid->withDevices device (\d->{d&deviceTask=Just tid,deviceError=Nothing})
+               >>| upd (\(r,s,ss)->(r,s++[MTSpec],ss)) ch
+       where
+               errHdl e = withDevices device (\d->{d & deviceTask=Nothing, deviceError=Just e}) @! ()
+\end{lstlisting}
+
+Figure~\ref{fig:handshake} shows the connection diagram. The client responds to
+the server with their device specification. This is detected by the processing
+function and the record is updated accordingly.
+
+\begin{figure}[H]
+       \begin{sequencediagram}
+               \newthread{c}{Server}
+               \newinst[4]{s}{Client}
+               \mess{c}{MTSpec}{s}
+               \mess{s}{MTDevSpec d}{c}
+       \end{sequencediagram}
+       \caption{Connect a device}\label{fig:handshake}
+\end{figure}
+
+\subsection{\glspl{Task}}
+\subsection{\glspl{SDS}}
 \todo{Connectie, hoe gaat dat in zijn werk}
index 896e0c5..7e46909 100644 (file)
@@ -15,6 +15,9 @@
 \usepackage{float}                   % floating images
 \usepackage{lmodern}                 % Better teletype fonts
 \usepackage{textcomp}                % Nice listings quotes
+\usepackage{pgf-umlsd}               % Connection diagrams
+
+\usetikzlibrary{arrows,shadows}
 
 \graphicspath{{img/}}