From 8c96bdcdd19c4c3cbe9f86357508f5efb7169cc5 Mon Sep 17 00:00:00 2001 From: Mart Lubbers Date: Sun, 11 Jun 2017 10:59:26 +0200 Subject: [PATCH] elaborate on communication --- .gitignore | 3 +++ Makefile | 2 ++ results.arch.tex | 66 +++++++++++++++++++++++++++++++++++++++++++++--- thesis.pre | 3 +++ thesis.tex | 3 +++ 5 files changed, 73 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index d6686a7..48787c6 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,9 @@ img/fig-* *.glg *.glo *.gls +*.idx +*.ilg +*.ind *.ist *.loa *.lof diff --git a/Makefile b/Makefile index 410cb11..257238f 100644 --- 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 diff --git a/results.arch.tex b/results.arch.tex index 24abb0f..c4c2b22 100644 --- a/results.arch.tex +++ b/results.arch.tex @@ -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. diff --git a/thesis.pre b/thesis.pre index ffba314..5bce7f7 100644 --- a/thesis.pre +++ b/thesis.pre @@ -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} diff --git a/thesis.tex b/thesis.tex index 9059d4c..d6d6e71 100644 --- a/thesis.tex +++ b/thesis.tex @@ -81,10 +81,13 @@ \addcontentsline{toc}{chapter}{Lists of \ldots} \begingroup \let\clearpage\relax +\let\cleardoublepage\relax \listoffigures% \listoftables% \lstlistoflistings% \listofalgorithms% \endgroup +\printindex + \end{document} -- 2.20.1