elaborate on communication
authorMart Lubbers <mart@martlubbers.net>
Sun, 11 Jun 2017 08:59:26 +0000 (10:59 +0200)
committerMart Lubbers <mart@martlubbers.net>
Sun, 11 Jun 2017 08:59:26 +0000 (10:59 +0200)
.gitignore
Makefile
results.arch.tex
thesis.pre
thesis.tex

index d6686a7..48787c6 100644 (file)
@@ -10,6 +10,9 @@ img/fig-*
 *.glg
 *.glo
 *.gls
+*.idx
+*.ilg
+*.ind
 *.ist
 *.loa
 *.lof
index 410cb11..257238f 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -5,6 +5,7 @@ BIBTEX?=bibtex
 BIBTEXFLAGS:=
 MAKEGL?=makeglossaries
 MAKEGLFLAGS?=
+MAKEINDEX?=makeindex
 LATEXFLAGS:=-file-line-error -halt-on-error #-no-shell-escape
 
 FIGURES:=$(patsubst fig/%.dot,img/%.png,$(wildcard fig/*.dot))
@@ -27,6 +28,7 @@ all: $(DOCS:%=%.pdf)
        $(LATEX) $(LATEXFLAGS) $<
        if $(GREP) -q '^\\bibdata{' $(basename $<).aux; then $(BIBTEX) $(BIBTEXFLAGS) $(basename $<); fi
        if $(GREP) -q '\@istfilename' $(basename $<).aux; then $(MAKEGL) $(MAKEGLFLAGS) $(basename $<); fi
+       if [ -f $(basename $<).idx ]; then $(MAKEINDEX) $(basename $<); fi
        $(LATEX) $(LATEXFLAGS) $< | tee $@
 
 img/%.png: fig/%.dot
index 24abb0f..c4c2b22 100644 (file)
@@ -1,4 +1,4 @@
-\section{Devices}
+/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
@@ -152,6 +152,7 @@ the server with their device specification. This is detected by the processing
 function and the record is updated accordingly.
 
 \begin{figure}[H]
+       \centering
        \begin{sequencediagram}
                \newthread{s}{Server}
                \newinst[4]{c}{Client}
@@ -161,6 +162,63 @@ function and the record is updated accordingly.
        \caption{Connect a device}\label{fig:handshake}
 \end{figure}
 
-\subsection{\glspl{Task}}
-\subsection{\glspl{SDS}}
-\todo{Connectie, hoe gaat dat in zijn werk, andere berichtenuitwisselingen}
+\subsection{\glspl{Task} \& \glspl{SDS}}
+When a \gls{Task} is sent to the device it is added to the device record
+without an identifier. The actual identifier is added to the record when the
+acknowledgement of the task by the device is received. The connection diagram
+is shown in Figure~\ref{fig:tasksend}.
+
+\begin{figure}[H]
+       \centering
+       \begin{sequencediagram}
+               \newthread{s}{Server}
+               \newinst[4]{c}{Client}
+               \begin{call}{s}{MTSDS}{c}{MTSDSAck}
+               \end{call}
+               \begin{call}{s}{MTTask}{c}{MTTaskAck}
+               \end{call}
+       \end{sequencediagram}
+       \caption{Sending a \gls{Task} to a device}\label{fig:tasksend}
+\end{figure}
+
+The function for sending a task to the device is shown in
+Listing~\ref{lst:sendtask}. First the task is compiled into messages. The
+details of the compilation process are given in Section~\ref{sec:compiler}.
+The new shares that were made during compilation are added to the deviceshares
+that were made during the compilation are merged with the existing shares on
+the device. Furthermore the messages are placed in the channel share of the
+device. This will result in sending the actual \gls{SDS} and \gls{Task}
+specifications to the device. A \gls{Task} record is created with the
+identifier $-1$ to denote a \gls{Task} not yet acknowledged. Finally the device
+itself is updated with the new state and with the new \gls{Task}. When the
+device returns an acknowledgement the \gls{Task} is updated accordingly.
+
+\begin{lstlisting}[label={lst:sendtask},%
+       caption={Sending a \gls{Task} to a device}]
+makeTask :: String Int -> Task MTaskTask
+makeTask name ident = get currentDateTime @ \dt->{MTaskTask | name=name,ident=ident,dateAdded=dt}
+
+makeShare :: String Int BCValue -> MTaskShare
+makeShare withTask identifier value = {MTaskShare |withTask=[withTask], identifier=identifier,value=value}
+
+sendTaskToDevice :: String (Main (ByteCode a Stmt)) (MTaskDevice, MTaskInterval) -> Task [MTaskDevice]
+sendTaskToDevice wta mTask (device, timeout)
+# (msgs, newState) = toMessages timeout mTask device.deviceState
+# shares = [makeShare wta sdsi sdsval\\{sdsi,sdsval}<-newState.sdss, (MTSds sdsi` _)<-msgs | sdsi == sdsi`] 
+= updateShares device ((++) shares)
+       >>| sendMessages msgs device
+       >>| makeTask wta -1
+       >>= withDevices device o addTaskUpState newState
+       where
+               addTaskUpState :: BCState MTaskTask MTaskDevice -> MTaskDevice
+               addTaskUpState st task device = {MTaskDevice | device &
+                       deviceState=st, deviceTasks=[task:device.deviceTasks]}
+\end{lstlisting}
+
+\subsection{Miscellaneous Messages}
+There exists one special type of message that is sent to the device only when
+it needs to reboot. When the server wants to stop the bond with the device it
+sends the \CI{MTShutdown} message. The device will then clear his memory, thus
+losing all the \glspl{SDS} and \glspl{Task} that were stored and reset itself.
+Shortly after the shutdown message a new server can connect to the device
+because the device is back in listening mode.
index ffba314..5bce7f7 100644 (file)
@@ -2,6 +2,7 @@
 
 \usepackage[british]{babel}
 
+\usepackage{makeidx}                 % Index
 \usepackage{geometry}                % Papersize
 \usepackage[titletoc]{appendix}      % Appendices
 \usepackage{hyperref}                % Hyperlinks
@@ -20,6 +21,8 @@
 
 \usetikzlibrary{arrows,shadows}
 
+\makeindex%
+
 \graphicspath{{img/}}
 
 \urlstyle{tt}
index 9059d4c..d6d6e71 100644 (file)
 \addcontentsline{toc}{chapter}{Lists of \ldots}
 \begingroup
 \let\clearpage\relax
+\let\cleardoublepage\relax
 \listoffigures%
 \listoftables%
 \lstlistoflistings%
 \listofalgorithms%
 \endgroup
 
+\printindex
+
 \end{document}