1\section{Introduction}
2
3\subsection{Closure Data-Structures}
4
5Let assume we are defining an interface named \emph{if}, with the
6following \emph{call} messages:
7\begin{itemize}
8  \item \verb!init_device_irq!
9  \item \verb!init_device!
10  \item \verb!get_cap!
11\end{itemize}
12
13And the following \emph{response} messages:
14\begin{itemize}
15  \item \verb!transmit_next_cap_response!
16  \item \verb!transmit_next_cap_error!
17  \item \verb!init_device_error!
18  \item \verb!init_device_response!
19\end{itemize}
20
21This will generates the following data-structures in \verb!if.h!. 
22
23\subsubsection{Server-side}
24
25\begin{description}
26  \item \verb!if_service_response!:
27    \begin{itemize}
28    \item \verb!if_server_response_vtbl *! \verb!f!
29      \begin{description}
30        \item \verb!if_server_response_vtbl!: (auto-generated)
31          \begin{itemize}
32            \item \verb!if_transmit_next_cap_response_fn *! \verb!transmit_next_cap_response!
33            \item \verb!if_transmit_next_cap_error_fn *! \verb!transmit_next_cap_error!
34            \item \verb!if_init_device_error_fn *! \verb!init_device_error!
35            \item \verb!if_init_device_response_fn *! \verb!init_device_response!
36            \item \verb!chips_disconnect_handler_t! \verb!_disconnect!
37          \end{itemize}
38      \end{description}
39    \item \verb!chips_connection *! conn
40    \item \verb!if_service *! clp
41      \begin{description}
42        \item \verb!if_service!:
43          \begin{itemize}
44            \item \verb!if_server_call_vtbl *! \verb!f!
45              \begin{description}
46                \item \verb!if_server_call_vtbl!: (to be filled)
47                  \begin{itemize}
48                    \item \verb!if_init_device_fn *! \verb!init_device!
49                    \item \verb!if_get_cap_fn *! \verb!get_cap!
50                    \item \verb!chips_disconnect_handler_t! \verb!_disconnect!
51                    \item \verb!chips_listen_callback_t! \verb!_listening!
52                  \end{itemize}
53              \end{description}
54            \item \verb!void *! \verb!st!
55          \end{itemize}
56      \end{description}
57    \end{itemize}
58\end{description}
59
60
61\subsubsection{Client-side}
62
63\begin{description}
64  \item \verb!if_client_response!:
65    \begin{itemize}
66      \item \verb!if_client_response_vtbl *! \verb!f!
67        \begin{description}
68          \item \verb!if_client_response_vtbl!: (to be filled)
69            \begin{itemize}
70            \item \verb!if_transmit_next_cap_response_fn *! \verb!transmit_next_cap_response!
71            \item \verb!if_transmit_next_cap_error_fn *! \verb!transmit_next_cap_error!
72            \item \verb!if_init_device_error_fn *! \verb!init_device_error!
73            \item \verb!if_init_device_response_fn *! \verb!init_device_response!
74            \item \verb!chips_disconnect_handler_t! \verb!_disconnect!
75            \item \verb!if_connected_cb! \verb!_connected!
76            \end{itemize}
77        \end{description}
78      \item \verb!if_client_call_vtbl *! \verb!f!
79        \begin{description}
80        \item \verb!if_client_call_vtbl!: (auto-generated)
81          \begin{itemize}
82          \item \verb!if_init_device_fn *! \verb!init_device!
83          \item \verb!if_get_cap_fn *! \verb!get_cap!
84          \item \verb!chips_disconnect_handler! \verb!_disconnect!
85          \end{itemize}
86        \end{description}
87      \item \verb!chips_connection *! \verb!conn!
88      \item \verb!void *! \verb!st!
89    \end{itemize}
90\end{description}
91