X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=results.arch.tex;h=c4c2b22222b75fb59d2ffddc6bb1dd6c7011d9a8;hb=8c96bdcdd19c4c3cbe9f86357508f5efb7169cc5;hp=24abb0fc641b435ce09ae9a2c4e20276fa7134f7;hpb=9662cccfffecb70d621318b5f3a35e46b6029f3c;p=msc-thesis1617.git 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.