aboutsummaryrefslogtreecommitdiffstats
path: root/doc/api-ref/latex
diff options
context:
space:
mode:
Diffstat (limited to 'doc/api-ref/latex')
-rw-r--r--doc/api-ref/latex/annotated.tex5
-rw-r--r--doc/api-ref/latex/d0/d1e/homescreen_8c.tex518
-rw-r--r--doc/api-ref/latex/d0/d8a/libhomescreen_8cpp.tex236
-rw-r--r--doc/api-ref/latex/d3/d3d/hs-helper_8h.tex343
-rw-r--r--doc/api-ref/latex/dd/d1d/hs-helper_8c.tex238
-rw-r--r--doc/api-ref/latex/de/dd0/class_lib_home_screen.tex731
-rw-r--r--doc/api-ref/latex/df/d43/libhomescreen_8hpp.tex16
-rw-r--r--doc/api-ref/latex/df/d7d/structevent.tex44
-rw-r--r--doc/api-ref/latex/df/dac/test_8cpp.tex266
-rw-r--r--doc/api-ref/latex/dir_0f70dc74e67ded1ed6ea12b5a24cac83.tex7
-rw-r--r--doc/api-ref/latex/dir_65f76d62445e9e84c0450b12bf77c3bc.tex9
-rw-r--r--doc/api-ref/latex/dir_a01af9eb3c502936dfd53c3f8e45721d.tex11
-rw-r--r--doc/api-ref/latex/dir_d44c64559bbebec7f509842c48db8b23.tex7
-rw-r--r--doc/api-ref/latex/doxygen.sty503
-rw-r--r--doc/api-ref/latex/files.tex9
-rw-r--r--doc/api-ref/latex/refman.tex165
16 files changed, 3108 insertions, 0 deletions
diff --git a/doc/api-ref/latex/annotated.tex b/doc/api-ref/latex/annotated.tex
new file mode 100644
index 0000000..a2fba4c
--- /dev/null
+++ b/doc/api-ref/latex/annotated.tex
@@ -0,0 +1,5 @@
+\section{Class List}
+Here are the classes, structs, unions and interfaces with brief descriptions\+:\begin{DoxyCompactList}
+\item\contentsline{section}{\hyperlink{structevent}{event} }{\pageref{structevent}}{}
+\item\contentsline{section}{\hyperlink{class_lib_home_screen}{Lib\+Home\+Screen} }{\pageref{class_lib_home_screen}}{}
+\end{DoxyCompactList}
diff --git a/doc/api-ref/latex/d0/d1e/homescreen_8c.tex b/doc/api-ref/latex/d0/d1e/homescreen_8c.tex
new file mode 100644
index 0000000..93a1600
--- /dev/null
+++ b/doc/api-ref/latex/d0/d1e/homescreen_8c.tex
@@ -0,0 +1,518 @@
+\hypertarget{homescreen_8c}{}\section{homescreen\+\_\+service/homescreen.c File Reference}
+\label{homescreen_8c}\index{homescreen\+\_\+service/homescreen.\+c@{homescreen\+\_\+service/homescreen.\+c}}
+{\ttfamily \#include $<$afb/afb-\/binding.\+h$>$}\newline
+{\ttfamily \#include $<$stdio.\+h$>$}\newline
+{\ttfamily \#include $<$string.\+h$>$}\newline
+{\ttfamily \#include $<$stdlib.\+h$>$}\newline
+{\ttfamily \#include $<$stdint.\+h$>$}\newline
+{\ttfamily \#include $<$unistd.\+h$>$}\newline
+{\ttfamily \#include $<$json-\/c/json.\+h$>$}\newline
+{\ttfamily \#include $<$glib.\+h$>$}\newline
+{\ttfamily \#include $<$pthread.\+h$>$}\newline
+{\ttfamily \#include \char`\"{}hs-\/helper.\+h\char`\"{}}\newline
+\subsection*{Classes}
+\begin{DoxyCompactItemize}
+\item
+struct \hyperlink{structevent}{event}
+\end{DoxyCompactItemize}
+\subsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \hyperlink{homescreen_8c_a369266c24eacffb87046522897a570d5}{\+\_\+\+G\+N\+U\+\_\+\+S\+O\+U\+R\+CE}
+\item
+\#define \hyperlink{homescreen_8c_ad2c1fbc92ba364fcf83f15e6d0af66f0}{A\+F\+B\+\_\+\+B\+I\+N\+D\+I\+N\+G\+\_\+\+V\+E\+R\+S\+I\+ON}~2
+\item
+\#define \hyperlink{homescreen_8c_a09f43d9e7e1c5d2198c0d66024b4500e}{C\+O\+M\+M\+A\+N\+D\+\_\+\+E\+V\+E\+N\+T\+\_\+\+N\+UM}~3
+\item
+\#define \hyperlink{homescreen_8c_a9a68ed04201d9390bb85b2c6ab1d7250}{E\+V\+E\+N\+T\+\_\+\+S\+U\+B\+S\+C\+R\+I\+B\+E\+\_\+\+E\+R\+R\+O\+R\+\_\+\+C\+O\+DE}~100
+\end{DoxyCompactItemize}
+\subsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+static void \hyperlink{homescreen_8c_af48cab759d4ae0ddbfcdd60f4051ba05}{ping\+Sample} (struct afb\+\_\+req request)
+\item
+static void \hyperlink{homescreen_8c_a096eae5c8f297f9df142a406eea56227}{tap\+\_\+shortcut} (struct afb\+\_\+req request)
+\item
+static void \hyperlink{homescreen_8c_a640cf8ed97d804c5ed1c09a349056338}{on\+\_\+screen\+\_\+message} (struct afb\+\_\+req request)
+\item
+static void \hyperlink{homescreen_8c_a4ff0c8b506669e5622a6ee168134d8f1}{subscribe} (struct afb\+\_\+req request)
+\item
+static void \hyperlink{homescreen_8c_ab92621255d7370c6dd8a0f1a8e376ad3}{unsubscribe} (struct afb\+\_\+req request)
+\item
+static int \hyperlink{homescreen_8c_a83d646edf54a6a082f69121bc89a08de}{preinit} ()
+\item
+static int \hyperlink{homescreen_8c_a00cbbc0f3f4452db078ae511684a6adc}{init} ()
+\item
+static void \hyperlink{homescreen_8c_a1279893c0fe937311a81e0a98fb4cf1c}{onevent} (const char $\ast$\hyperlink{structevent}{event}, struct json\+\_\+object $\ast$object)
+\end{DoxyCompactItemize}
+\subsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+static struct \hyperlink{structevent}{event} \hyperlink{homescreen_8c_a1c3c5bfa861dcb58d9e9d216d893864c}{event\+\_\+list} \mbox{[}\hyperlink{homescreen_8c_a09f43d9e7e1c5d2198c0d66024b4500e}{C\+O\+M\+M\+A\+N\+D\+\_\+\+E\+V\+E\+N\+T\+\_\+\+N\+UM}\mbox{]}
+\item
+static struct afb\+\_\+event \hyperlink{homescreen_8c_a2af1ff5a4cbf03125e61e903832035f5}{ev\+\_\+tap\+\_\+shortcut}
+\item
+static struct afb\+\_\+event \hyperlink{homescreen_8c_af7cfc4f688bb898c09291252c4cb832c}{ev\+\_\+on\+\_\+screen\+\_\+message}
+\item
+static struct afb\+\_\+event \hyperlink{homescreen_8c_a25fbdcc4e5787e3f41d99f4a71e86611}{ev\+\_\+reserved}
+\item
+static const char \hyperlink{homescreen_8c_aed1c5296a2e6d34945507a0fca17a376}{\+\_\+error} \mbox{[}$\,$\mbox{]} = \char`\"{}error\char`\"{}
+\item
+static const char \hyperlink{homescreen_8c_a1f2c79fa6801b63751e270d67994fe81}{\+\_\+application\+\_\+name} \mbox{[}$\,$\mbox{]} = \char`\"{}application\+\_\+name\char`\"{}
+\item
+static const char \hyperlink{homescreen_8c_abfd6c1d6f316fa952b11553f8f275e92}{\+\_\+display\+\_\+message} \mbox{[}$\,$\mbox{]} = \char`\"{}display\+\_\+message\char`\"{}
+\item
+static const struct afb\+\_\+verb\+\_\+v2 \hyperlink{homescreen_8c_acad6dadf60fac3d701e488e4fcd11c89}{verbs} \mbox{[}$\,$\mbox{]}
+\item
+const struct afb\+\_\+binding\+\_\+v2 \hyperlink{homescreen_8c_ae2a62ab481a2922cbfc788193857a12e}{afb\+Binding\+V2}
+\end{DoxyCompactItemize}
+
+
+\subsection{Macro Definition Documentation}
+\mbox{\Hypertarget{homescreen_8c_a369266c24eacffb87046522897a570d5}\label{homescreen_8c_a369266c24eacffb87046522897a570d5}}
+\index{homescreen.\+c@{homescreen.\+c}!\+\_\+\+G\+N\+U\+\_\+\+S\+O\+U\+R\+CE@{\+\_\+\+G\+N\+U\+\_\+\+S\+O\+U\+R\+CE}}
+\index{\+\_\+\+G\+N\+U\+\_\+\+S\+O\+U\+R\+CE@{\+\_\+\+G\+N\+U\+\_\+\+S\+O\+U\+R\+CE}!homescreen.\+c@{homescreen.\+c}}
+\subsubsection{\texorpdfstring{\+\_\+\+G\+N\+U\+\_\+\+S\+O\+U\+R\+CE}{\_GNU\_SOURCE}}
+{\footnotesize\ttfamily \#define \+\_\+\+G\+N\+U\+\_\+\+S\+O\+U\+R\+CE}
+
+
+
+Definition at line 17 of file homescreen.\+c.
+
+\mbox{\Hypertarget{homescreen_8c_ad2c1fbc92ba364fcf83f15e6d0af66f0}\label{homescreen_8c_ad2c1fbc92ba364fcf83f15e6d0af66f0}}
+\index{homescreen.\+c@{homescreen.\+c}!A\+F\+B\+\_\+\+B\+I\+N\+D\+I\+N\+G\+\_\+\+V\+E\+R\+S\+I\+ON@{A\+F\+B\+\_\+\+B\+I\+N\+D\+I\+N\+G\+\_\+\+V\+E\+R\+S\+I\+ON}}
+\index{A\+F\+B\+\_\+\+B\+I\+N\+D\+I\+N\+G\+\_\+\+V\+E\+R\+S\+I\+ON@{A\+F\+B\+\_\+\+B\+I\+N\+D\+I\+N\+G\+\_\+\+V\+E\+R\+S\+I\+ON}!homescreen.\+c@{homescreen.\+c}}
+\subsubsection{\texorpdfstring{A\+F\+B\+\_\+\+B\+I\+N\+D\+I\+N\+G\+\_\+\+V\+E\+R\+S\+I\+ON}{AFB\_BINDING\_VERSION}}
+{\footnotesize\ttfamily \#define A\+F\+B\+\_\+\+B\+I\+N\+D\+I\+N\+G\+\_\+\+V\+E\+R\+S\+I\+ON~2}
+
+
+
+Definition at line 18 of file homescreen.\+c.
+
+\mbox{\Hypertarget{homescreen_8c_a09f43d9e7e1c5d2198c0d66024b4500e}\label{homescreen_8c_a09f43d9e7e1c5d2198c0d66024b4500e}}
+\index{homescreen.\+c@{homescreen.\+c}!C\+O\+M\+M\+A\+N\+D\+\_\+\+E\+V\+E\+N\+T\+\_\+\+N\+UM@{C\+O\+M\+M\+A\+N\+D\+\_\+\+E\+V\+E\+N\+T\+\_\+\+N\+UM}}
+\index{C\+O\+M\+M\+A\+N\+D\+\_\+\+E\+V\+E\+N\+T\+\_\+\+N\+UM@{C\+O\+M\+M\+A\+N\+D\+\_\+\+E\+V\+E\+N\+T\+\_\+\+N\+UM}!homescreen.\+c@{homescreen.\+c}}
+\subsubsection{\texorpdfstring{C\+O\+M\+M\+A\+N\+D\+\_\+\+E\+V\+E\+N\+T\+\_\+\+N\+UM}{COMMAND\_EVENT\_NUM}}
+{\footnotesize\ttfamily \#define C\+O\+M\+M\+A\+N\+D\+\_\+\+E\+V\+E\+N\+T\+\_\+\+N\+UM~3}
+
+
+
+Definition at line 31 of file homescreen.\+c.
+
+\mbox{\Hypertarget{homescreen_8c_a9a68ed04201d9390bb85b2c6ab1d7250}\label{homescreen_8c_a9a68ed04201d9390bb85b2c6ab1d7250}}
+\index{homescreen.\+c@{homescreen.\+c}!E\+V\+E\+N\+T\+\_\+\+S\+U\+B\+S\+C\+R\+I\+B\+E\+\_\+\+E\+R\+R\+O\+R\+\_\+\+C\+O\+DE@{E\+V\+E\+N\+T\+\_\+\+S\+U\+B\+S\+C\+R\+I\+B\+E\+\_\+\+E\+R\+R\+O\+R\+\_\+\+C\+O\+DE}}
+\index{E\+V\+E\+N\+T\+\_\+\+S\+U\+B\+S\+C\+R\+I\+B\+E\+\_\+\+E\+R\+R\+O\+R\+\_\+\+C\+O\+DE@{E\+V\+E\+N\+T\+\_\+\+S\+U\+B\+S\+C\+R\+I\+B\+E\+\_\+\+E\+R\+R\+O\+R\+\_\+\+C\+O\+DE}!homescreen.\+c@{homescreen.\+c}}
+\subsubsection{\texorpdfstring{E\+V\+E\+N\+T\+\_\+\+S\+U\+B\+S\+C\+R\+I\+B\+E\+\_\+\+E\+R\+R\+O\+R\+\_\+\+C\+O\+DE}{EVENT\_SUBSCRIBE\_ERROR\_CODE}}
+{\footnotesize\ttfamily \#define E\+V\+E\+N\+T\+\_\+\+S\+U\+B\+S\+C\+R\+I\+B\+E\+\_\+\+E\+R\+R\+O\+R\+\_\+\+C\+O\+DE~100}
+
+
+
+Definition at line 32 of file homescreen.\+c.
+
+
+
+\subsection{Function Documentation}
+\mbox{\Hypertarget{homescreen_8c_a00cbbc0f3f4452db078ae511684a6adc}\label{homescreen_8c_a00cbbc0f3f4452db078ae511684a6adc}}
+\index{homescreen.\+c@{homescreen.\+c}!init@{init}}
+\index{init@{init}!homescreen.\+c@{homescreen.\+c}}
+\subsubsection{\texorpdfstring{init()}{init()}}
+{\footnotesize\ttfamily static int init (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 238 of file homescreen.\+c.
+
+
+\begin{DoxyCode}
+239 \{
+240 AFB\_NOTICE(\textcolor{stringliteral}{"binding init"});
+241
+242 \hyperlink{homescreen_8c_a2af1ff5a4cbf03125e61e903832035f5}{ev\_tap\_shortcut} = afb\_daemon\_make\_event(\hyperlink{hs-helper_8h_a0cd84b1a2184c9b84d1b7bf24582f28e}{evlist}[0]);
+243 \hyperlink{homescreen_8c_af7cfc4f688bb898c09291252c4cb832c}{ev\_on\_screen\_message} = afb\_daemon\_make\_event(\hyperlink{hs-helper_8h_a0cd84b1a2184c9b84d1b7bf24582f28e}{evlist}[1]);
+244 \hyperlink{homescreen_8c_a25fbdcc4e5787e3f41d99f4a71e86611}{ev\_reserved} = afb\_daemon\_make\_event(\hyperlink{hs-helper_8h_a0cd84b1a2184c9b84d1b7bf24582f28e}{evlist}[2]);
+245
+246 \hyperlink{homescreen_8c_a1c3c5bfa861dcb58d9e9d216d893864c}{event\_list}[0].\hyperlink{structevent_a45c6cfb7961a21a3366db067e4cc59ab}{name} = \hyperlink{hs-helper_8h_a0cd84b1a2184c9b84d1b7bf24582f28e}{evlist}[0];
+247 \hyperlink{homescreen_8c_a1c3c5bfa861dcb58d9e9d216d893864c}{event\_list}[0].\hyperlink{structevent_a58726ebc551d36562ac3f9e1fe293214}{event} = &\hyperlink{homescreen_8c_a2af1ff5a4cbf03125e61e903832035f5}{ev\_tap\_shortcut};
+248
+249 \hyperlink{homescreen_8c_a1c3c5bfa861dcb58d9e9d216d893864c}{event\_list}[1].\hyperlink{structevent_a45c6cfb7961a21a3366db067e4cc59ab}{name} = \hyperlink{hs-helper_8h_a0cd84b1a2184c9b84d1b7bf24582f28e}{evlist}[1];
+250 \hyperlink{homescreen_8c_a1c3c5bfa861dcb58d9e9d216d893864c}{event\_list}[1].\hyperlink{structevent_a58726ebc551d36562ac3f9e1fe293214}{event} = &\hyperlink{homescreen_8c_af7cfc4f688bb898c09291252c4cb832c}{ev\_on\_screen\_message};
+251
+252 \hyperlink{homescreen_8c_a1c3c5bfa861dcb58d9e9d216d893864c}{event\_list}[2].\hyperlink{structevent_a45c6cfb7961a21a3366db067e4cc59ab}{name} = \hyperlink{hs-helper_8h_a0cd84b1a2184c9b84d1b7bf24582f28e}{evlist}[2];
+253 \hyperlink{homescreen_8c_a1c3c5bfa861dcb58d9e9d216d893864c}{event\_list}[2].\hyperlink{structevent_a58726ebc551d36562ac3f9e1fe293214}{event} = &\hyperlink{homescreen_8c_a25fbdcc4e5787e3f41d99f4a71e86611}{ev\_reserved};
+254
+255 \textcolor{keywordflow}{return} 0;
+256 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{homescreen_8c_a640cf8ed97d804c5ed1c09a349056338}\label{homescreen_8c_a640cf8ed97d804c5ed1c09a349056338}}
+\index{homescreen.\+c@{homescreen.\+c}!on\+\_\+screen\+\_\+message@{on\+\_\+screen\+\_\+message}}
+\index{on\+\_\+screen\+\_\+message@{on\+\_\+screen\+\_\+message}!homescreen.\+c@{homescreen.\+c}}
+\subsubsection{\texorpdfstring{on\+\_\+screen\+\_\+message()}{on\_screen\_message()}}
+{\footnotesize\ttfamily static void on\+\_\+screen\+\_\+message (\begin{DoxyParamCaption}\item[{struct afb\+\_\+req}]{request }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
+
+Home\+Screenの\+On\+Screenを表示する
+
+\subparagraph*{Parameters}
+
+Request key
+\begin{DoxyItemize}
+\item display\+\_\+message \+: 表示したい文字列
+\end{DoxyItemize}
+
+\subparagraph*{Return}
+
+Nothing
+
+Definition at line 113 of file homescreen.\+c.
+
+
+\begin{DoxyCode}
+114 \{
+115 AFB\_NOTICE(\textcolor{stringliteral}{"%s is called."}, \_\_FUNCTION\_\_);
+116
+117 \textcolor{keywordtype}{int} ret = 0;
+118 \textcolor{keyword}{const} \textcolor{keywordtype}{char}* value = afb\_req\_value(request, \hyperlink{homescreen_8c_abfd6c1d6f316fa952b11553f8f275e92}{\_display\_message});
+119 \textcolor{keywordflow}{if} (value) \{
+120
+121 AFB\_NOTICE(\textcolor{stringliteral}{"request params = %s."}, value);
+122
+123 \textcolor{keyword}{struct }json\_object* push\_obj = json\_object\_new\_object();
+124 \hyperlink{hs-helper_8c_a8777c53f1d4d5412f19b134ad85ffedf}{hs\_add\_object\_to\_json\_object\_str}( push\_obj, 2,
+125 \hyperlink{homescreen_8c_abfd6c1d6f316fa952b11553f8f275e92}{\_display\_message}, value);
+126 afb\_event\_push(\hyperlink{homescreen_8c_af7cfc4f688bb898c09291252c4cb832c}{ev\_on\_screen\_message}, push\_obj);
+127 \} \textcolor{keywordflow}{else} \{
+128 afb\_req\_fail\_f(request, \textcolor{stringliteral}{"failed"}, \textcolor{stringliteral}{"called %s, Unknown palameter"}, \_\_FUNCTION\_\_);
+129 \textcolor{keywordflow}{return};
+130 \}
+131
+132 \textcolor{comment}{// HomeScreenに返すレスポンス}
+133 \textcolor{keyword}{struct }json\_object *res = json\_object\_new\_object();
+134 \hyperlink{hs-helper_8c_ae83604a37134e7bdee3ce4f10bb0b47a}{hs\_add\_object\_to\_json\_object\_func}(res, \_\_FUNCTION\_\_, 2,
+135 \hyperlink{homescreen_8c_aed1c5296a2e6d34945507a0fca17a376}{\_error}, ret);
+136 afb\_req\_success(request, res, \textcolor{stringliteral}{"afb\_event\_push event [on\_screen\_message]"});
+137 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{homescreen_8c_a1279893c0fe937311a81e0a98fb4cf1c}\label{homescreen_8c_a1279893c0fe937311a81e0a98fb4cf1c}}
+\index{homescreen.\+c@{homescreen.\+c}!onevent@{onevent}}
+\index{onevent@{onevent}!homescreen.\+c@{homescreen.\+c}}
+\subsubsection{\texorpdfstring{onevent()}{onevent()}}
+{\footnotesize\ttfamily static void onevent (\begin{DoxyParamCaption}\item[{const char $\ast$}]{event, }\item[{struct json\+\_\+object $\ast$}]{object }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 258 of file homescreen.\+c.
+
+
+\begin{DoxyCode}
+259 \{
+260 AFB\_NOTICE(\textcolor{stringliteral}{"on\_event %s"}, \hyperlink{structevent}{event});
+261 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{homescreen_8c_af48cab759d4ae0ddbfcdd60f4051ba05}\label{homescreen_8c_af48cab759d4ae0ddbfcdd60f4051ba05}}
+\index{homescreen.\+c@{homescreen.\+c}!ping\+Sample@{ping\+Sample}}
+\index{ping\+Sample@{ping\+Sample}!homescreen.\+c@{homescreen.\+c}}
+\subsubsection{\texorpdfstring{ping\+Sample()}{pingSample()}}
+{\footnotesize\ttfamily static void ping\+Sample (\begin{DoxyParamCaption}\item[{struct afb\+\_\+req}]{request }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 55 of file homescreen.\+c.
+
+
+\begin{DoxyCode}
+56 \{
+57 \textcolor{keyword}{static} \textcolor{keywordtype}{int} pingcount = 0;
+58 afb\_req\_success\_f(request, json\_object\_new\_int(pingcount), \textcolor{stringliteral}{"Ping count = %d"}, pingcount);
+59 AFB\_NOTICE(\textcolor{stringliteral}{"Verbosity macro at level notice invoked at ping invocation count = %d"}, pingcount);
+60 pingcount++;
+61 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{homescreen_8c_a83d646edf54a6a082f69121bc89a08de}\label{homescreen_8c_a83d646edf54a6a082f69121bc89a08de}}
+\index{homescreen.\+c@{homescreen.\+c}!preinit@{preinit}}
+\index{preinit@{preinit}!homescreen.\+c@{homescreen.\+c}}
+\subsubsection{\texorpdfstring{preinit()}{preinit()}}
+{\footnotesize\ttfamily static int preinit (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 232 of file homescreen.\+c.
+
+
+\begin{DoxyCode}
+233 \{
+234 AFB\_NOTICE(\textcolor{stringliteral}{"binding preinit (was register)"});
+235 \textcolor{keywordflow}{return} 0;
+236 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{homescreen_8c_a4ff0c8b506669e5622a6ee168134d8f1}\label{homescreen_8c_a4ff0c8b506669e5622a6ee168134d8f1}}
+\index{homescreen.\+c@{homescreen.\+c}!subscribe@{subscribe}}
+\index{subscribe@{subscribe}!homescreen.\+c@{homescreen.\+c}}
+\subsubsection{\texorpdfstring{subscribe()}{subscribe()}}
+{\footnotesize\ttfamily static void subscribe (\begin{DoxyParamCaption}\item[{struct afb\+\_\+req}]{request }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
+
+Subscribe event
+
+\subparagraph*{Parameters}
+
+
+\begin{DoxyItemize}
+\item event \+: Event name. Event list is written in \hyperlink{libhomescreen_8cpp}{libhomescreen.\+cpp}
+\end{DoxyItemize}
+
+\subparagraph*{Return}
+
+Nothing
+
+\subparagraph*{Note}
+
+Definition at line 151 of file homescreen.\+c.
+
+
+\begin{DoxyCode}
+152 \{
+153 \textcolor{keyword}{const} \textcolor{keywordtype}{char} *value = afb\_req\_value(request, \textcolor{stringliteral}{"event"});
+154 AFB\_NOTICE(\textcolor{stringliteral}{"value is %s"}, value);
+155 \textcolor{keywordtype}{int} ret = 0;
+156 \textcolor{keywordflow}{if}(value) \{
+157 \textcolor{keywordtype}{int} index = \hyperlink{hs-helper_8c_a2ff1b894941c3b461ca8119079c4146a}{hs\_search\_event\_name\_index}(value);
+158 \textcolor{keywordflow}{if}(index < 0)
+159 \{
+160 AFB\_NOTICE(\textcolor{stringliteral}{"dedicated event doesn't exist"});
+161 ret = \hyperlink{homescreen_8c_a9a68ed04201d9390bb85b2c6ab1d7250}{EVENT\_SUBSCRIBE\_ERROR\_CODE};
+162 \}
+163 \textcolor{keywordflow}{else}
+164 \{
+165 afb\_req\_subscribe(request, *\hyperlink{homescreen_8c_a1c3c5bfa861dcb58d9e9d216d893864c}{event\_list}[index].\hyperlink{structevent}{event});
+166 \}
+167 \}
+168 \textcolor{keywordflow}{else}\{
+169 AFB\_NOTICE(\textcolor{stringliteral}{"Please input event name"});
+170 ret = \hyperlink{homescreen_8c_a9a68ed04201d9390bb85b2c6ab1d7250}{EVENT\_SUBSCRIBE\_ERROR\_CODE};
+171 \}
+172 \textcolor{comment}{/*create response json object*/}
+173 \textcolor{keyword}{struct }json\_object *res = json\_object\_new\_object();
+174 \hyperlink{hs-helper_8c_ae83604a37134e7bdee3ce4f10bb0b47a}{hs\_add\_object\_to\_json\_object\_func}(res, \_\_FUNCTION\_\_, 2,
+175 \hyperlink{homescreen_8c_aed1c5296a2e6d34945507a0fca17a376}{\_error}, ret);
+176 afb\_req\_success\_f(request, res, \textcolor{stringliteral}{"homescreen binder subscribe event name [%s]"}, value);
+177 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{homescreen_8c_a096eae5c8f297f9df142a406eea56227}\label{homescreen_8c_a096eae5c8f297f9df142a406eea56227}}
+\index{homescreen.\+c@{homescreen.\+c}!tap\+\_\+shortcut@{tap\+\_\+shortcut}}
+\index{tap\+\_\+shortcut@{tap\+\_\+shortcut}!homescreen.\+c@{homescreen.\+c}}
+\subsubsection{\texorpdfstring{tap\+\_\+shortcut()}{tap\_shortcut()}}
+{\footnotesize\ttfamily static void tap\+\_\+shortcut (\begin{DoxyParamCaption}\item[{struct afb\+\_\+req}]{request }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
+
+Home\+Screenから呼ばれる ショートカットがタップされたことをアプリケーションに通知するために使用する アプリケーションからは使用されない
+
+\subparagraph*{Parameters}
+
+Request key
+\begin{DoxyItemize}
+\item application\+\_\+name \+: アプリケーション名
+\end{DoxyItemize}
+
+\subparagraph*{Return}
+
+Nothing
+
+Definition at line 76 of file homescreen.\+c.
+
+
+\begin{DoxyCode}
+77 \{
+78 AFB\_NOTICE(\textcolor{stringliteral}{"%s is called."}, \_\_FUNCTION\_\_);
+79
+80 \textcolor{keywordtype}{int} ret = 0;
+81 \textcolor{keyword}{const} \textcolor{keywordtype}{char}* value = afb\_req\_value(request, \hyperlink{homescreen_8c_a1f2c79fa6801b63751e270d67994fe81}{\_application\_name});
+82 \textcolor{keywordflow}{if} (value) \{
+83
+84 AFB\_NOTICE(\textcolor{stringliteral}{"request params = %s."}, value);
+85
+86 \textcolor{keyword}{struct }json\_object* push\_obj = json\_object\_new\_object();
+87 \hyperlink{hs-helper_8c_a8777c53f1d4d5412f19b134ad85ffedf}{hs\_add\_object\_to\_json\_object\_str}( push\_obj, 2,
+88 \hyperlink{homescreen_8c_a1f2c79fa6801b63751e270d67994fe81}{\_application\_name}, value);
+89 afb\_event\_push(\hyperlink{homescreen_8c_a2af1ff5a4cbf03125e61e903832035f5}{ev\_tap\_shortcut}, push\_obj);
+90 \} \textcolor{keywordflow}{else} \{
+91 afb\_req\_fail\_f(request, \textcolor{stringliteral}{"failed"}, \textcolor{stringliteral}{"called %s, Unknown palameter"}, \_\_FUNCTION\_\_);
+92 \textcolor{keywordflow}{return};
+93 \}
+94
+95 \textcolor{comment}{// HomeScreenに返すレスポンス}
+96 \textcolor{keyword}{struct }json\_object *res = json\_object\_new\_object();
+97 \hyperlink{hs-helper_8c_ae83604a37134e7bdee3ce4f10bb0b47a}{hs\_add\_object\_to\_json\_object\_func}(res, \_\_FUNCTION\_\_, 2,
+98 \hyperlink{homescreen_8c_aed1c5296a2e6d34945507a0fca17a376}{\_error}, ret);
+99 afb\_req\_success(request, res, \textcolor{stringliteral}{"afb\_event\_push event [tap\_shortcut]"});
+100 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{homescreen_8c_ab92621255d7370c6dd8a0f1a8e376ad3}\label{homescreen_8c_ab92621255d7370c6dd8a0f1a8e376ad3}}
+\index{homescreen.\+c@{homescreen.\+c}!unsubscribe@{unsubscribe}}
+\index{unsubscribe@{unsubscribe}!homescreen.\+c@{homescreen.\+c}}
+\subsubsection{\texorpdfstring{unsubscribe()}{unsubscribe()}}
+{\footnotesize\ttfamily static void unsubscribe (\begin{DoxyParamCaption}\item[{struct afb\+\_\+req}]{request }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
+
+Unsubscribe event
+
+\subparagraph*{Parameters}
+
+
+\begin{DoxyItemize}
+\item event \+: Event name. Event list is written in \hyperlink{libhomescreen_8cpp}{libhomescreen.\+cpp}
+\end{DoxyItemize}
+
+\subparagraph*{Return}
+
+Nothing
+
+\subparagraph*{Note}
+
+Definition at line 191 of file homescreen.\+c.
+
+
+\begin{DoxyCode}
+192 \{
+193 \textcolor{keyword}{const} \textcolor{keywordtype}{char} *value = afb\_req\_value(request, \textcolor{stringliteral}{"event"});
+194 AFB\_NOTICE(\textcolor{stringliteral}{"value is %s"}, value);
+195 \textcolor{keywordtype}{int} ret = 0;
+196 \textcolor{keywordflow}{if}(value) \{
+197 \textcolor{keywordtype}{int} index = \hyperlink{hs-helper_8c_a2ff1b894941c3b461ca8119079c4146a}{hs\_search\_event\_name\_index}(value);
+198 \textcolor{keywordflow}{if}(index < 0)
+199 \{
+200 AFB\_NOTICE(\textcolor{stringliteral}{"dedicated event doesn't exist"});
+201 ret = \hyperlink{homescreen_8c_a9a68ed04201d9390bb85b2c6ab1d7250}{EVENT\_SUBSCRIBE\_ERROR\_CODE};
+202 \}
+203 \textcolor{keywordflow}{else}
+204 \{
+205 afb\_req\_unsubscribe(request, *\hyperlink{homescreen_8c_a1c3c5bfa861dcb58d9e9d216d893864c}{event\_list}[index].\hyperlink{structevent}{event});
+206 \}
+207 \}
+208 \textcolor{keywordflow}{else}\{
+209 AFB\_NOTICE(\textcolor{stringliteral}{"Please input event name"});
+210 ret = \hyperlink{homescreen_8c_a9a68ed04201d9390bb85b2c6ab1d7250}{EVENT\_SUBSCRIBE\_ERROR\_CODE};
+211 \}
+212 \textcolor{comment}{/*create response json object*/}
+213 \textcolor{keyword}{struct }json\_object *res = json\_object\_new\_object();
+214 \hyperlink{hs-helper_8c_ae83604a37134e7bdee3ce4f10bb0b47a}{hs\_add\_object\_to\_json\_object\_func}(res, \_\_FUNCTION\_\_, 2,
+215 \hyperlink{homescreen_8c_aed1c5296a2e6d34945507a0fca17a376}{\_error}, ret);
+216 afb\_req\_success\_f(request, res, \textcolor{stringliteral}{"homescreen binder unsubscribe event name [%s]"}, value);
+217 \}
+\end{DoxyCode}
+
+
+\subsection{Variable Documentation}
+\mbox{\Hypertarget{homescreen_8c_a1f2c79fa6801b63751e270d67994fe81}\label{homescreen_8c_a1f2c79fa6801b63751e270d67994fe81}}
+\index{homescreen.\+c@{homescreen.\+c}!\+\_\+application\+\_\+name@{\+\_\+application\+\_\+name}}
+\index{\+\_\+application\+\_\+name@{\+\_\+application\+\_\+name}!homescreen.\+c@{homescreen.\+c}}
+\subsubsection{\texorpdfstring{\+\_\+application\+\_\+name}{\_application\_name}}
+{\footnotesize\ttfamily const char \+\_\+application\+\_\+name\mbox{[}$\,$\mbox{]} = \char`\"{}application\+\_\+name\char`\"{}\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 48 of file homescreen.\+c.
+
+\mbox{\Hypertarget{homescreen_8c_abfd6c1d6f316fa952b11553f8f275e92}\label{homescreen_8c_abfd6c1d6f316fa952b11553f8f275e92}}
+\index{homescreen.\+c@{homescreen.\+c}!\+\_\+display\+\_\+message@{\+\_\+display\+\_\+message}}
+\index{\+\_\+display\+\_\+message@{\+\_\+display\+\_\+message}!homescreen.\+c@{homescreen.\+c}}
+\subsubsection{\texorpdfstring{\+\_\+display\+\_\+message}{\_display\_message}}
+{\footnotesize\ttfamily const char \+\_\+display\+\_\+message\mbox{[}$\,$\mbox{]} = \char`\"{}display\+\_\+message\char`\"{}\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 49 of file homescreen.\+c.
+
+\mbox{\Hypertarget{homescreen_8c_aed1c5296a2e6d34945507a0fca17a376}\label{homescreen_8c_aed1c5296a2e6d34945507a0fca17a376}}
+\index{homescreen.\+c@{homescreen.\+c}!\+\_\+error@{\+\_\+error}}
+\index{\+\_\+error@{\+\_\+error}!homescreen.\+c@{homescreen.\+c}}
+\subsubsection{\texorpdfstring{\+\_\+error}{\_error}}
+{\footnotesize\ttfamily const char \+\_\+error\mbox{[}$\,$\mbox{]} = \char`\"{}error\char`\"{}\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 46 of file homescreen.\+c.
+
+\mbox{\Hypertarget{homescreen_8c_ae2a62ab481a2922cbfc788193857a12e}\label{homescreen_8c_ae2a62ab481a2922cbfc788193857a12e}}
+\index{homescreen.\+c@{homescreen.\+c}!afb\+Binding\+V2@{afb\+Binding\+V2}}
+\index{afb\+Binding\+V2@{afb\+Binding\+V2}!homescreen.\+c@{homescreen.\+c}}
+\subsubsection{\texorpdfstring{afb\+Binding\+V2}{afbBindingV2}}
+{\footnotesize\ttfamily const struct afb\+\_\+binding\+\_\+v2 afb\+Binding\+V2}
+
+{\bfseries Initial value\+:}
+\begin{DoxyCode}
+= \{
+ .api = \textcolor{stringliteral}{"homescreen"},
+ .specification = NULL,
+ .verbs = \hyperlink{homescreen_8c_acad6dadf60fac3d701e488e4fcd11c89}{verbs},
+ .preinit = \hyperlink{homescreen_8c_a83d646edf54a6a082f69121bc89a08de}{preinit},
+ .init = \hyperlink{homescreen_8c_a00cbbc0f3f4452db078ae511684a6adc}{init},
+ .onevent = \hyperlink{homescreen_8c_a1279893c0fe937311a81e0a98fb4cf1c}{onevent}
+\}
+\end{DoxyCode}
+
+
+Definition at line 263 of file homescreen.\+c.
+
+\mbox{\Hypertarget{homescreen_8c_af7cfc4f688bb898c09291252c4cb832c}\label{homescreen_8c_af7cfc4f688bb898c09291252c4cb832c}}
+\index{homescreen.\+c@{homescreen.\+c}!ev\+\_\+on\+\_\+screen\+\_\+message@{ev\+\_\+on\+\_\+screen\+\_\+message}}
+\index{ev\+\_\+on\+\_\+screen\+\_\+message@{ev\+\_\+on\+\_\+screen\+\_\+message}!homescreen.\+c@{homescreen.\+c}}
+\subsubsection{\texorpdfstring{ev\+\_\+on\+\_\+screen\+\_\+message}{ev\_on\_screen\_message}}
+{\footnotesize\ttfamily struct afb\+\_\+event ev\+\_\+on\+\_\+screen\+\_\+message\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 43 of file homescreen.\+c.
+
+\mbox{\Hypertarget{homescreen_8c_a25fbdcc4e5787e3f41d99f4a71e86611}\label{homescreen_8c_a25fbdcc4e5787e3f41d99f4a71e86611}}
+\index{homescreen.\+c@{homescreen.\+c}!ev\+\_\+reserved@{ev\+\_\+reserved}}
+\index{ev\+\_\+reserved@{ev\+\_\+reserved}!homescreen.\+c@{homescreen.\+c}}
+\subsubsection{\texorpdfstring{ev\+\_\+reserved}{ev\_reserved}}
+{\footnotesize\ttfamily struct afb\+\_\+event ev\+\_\+reserved\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 44 of file homescreen.\+c.
+
+\mbox{\Hypertarget{homescreen_8c_a2af1ff5a4cbf03125e61e903832035f5}\label{homescreen_8c_a2af1ff5a4cbf03125e61e903832035f5}}
+\index{homescreen.\+c@{homescreen.\+c}!ev\+\_\+tap\+\_\+shortcut@{ev\+\_\+tap\+\_\+shortcut}}
+\index{ev\+\_\+tap\+\_\+shortcut@{ev\+\_\+tap\+\_\+shortcut}!homescreen.\+c@{homescreen.\+c}}
+\subsubsection{\texorpdfstring{ev\+\_\+tap\+\_\+shortcut}{ev\_tap\_shortcut}}
+{\footnotesize\ttfamily struct afb\+\_\+event ev\+\_\+tap\+\_\+shortcut\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 42 of file homescreen.\+c.
+
+\mbox{\Hypertarget{homescreen_8c_a1c3c5bfa861dcb58d9e9d216d893864c}\label{homescreen_8c_a1c3c5bfa861dcb58d9e9d216d893864c}}
+\index{homescreen.\+c@{homescreen.\+c}!event\+\_\+list@{event\+\_\+list}}
+\index{event\+\_\+list@{event\+\_\+list}!homescreen.\+c@{homescreen.\+c}}
+\subsubsection{\texorpdfstring{event\+\_\+list}{event\_list}}
+{\footnotesize\ttfamily struct \hyperlink{structevent}{event} event\+\_\+list\mbox{[}\hyperlink{homescreen_8c_a09f43d9e7e1c5d2198c0d66024b4500e}{C\+O\+M\+M\+A\+N\+D\+\_\+\+E\+V\+E\+N\+T\+\_\+\+N\+UM}\mbox{]}\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 40 of file homescreen.\+c.
+
+\mbox{\Hypertarget{homescreen_8c_acad6dadf60fac3d701e488e4fcd11c89}\label{homescreen_8c_acad6dadf60fac3d701e488e4fcd11c89}}
+\index{homescreen.\+c@{homescreen.\+c}!verbs@{verbs}}
+\index{verbs@{verbs}!homescreen.\+c@{homescreen.\+c}}
+\subsubsection{\texorpdfstring{verbs}{verbs}}
+{\footnotesize\ttfamily const struct afb\+\_\+verb\+\_\+v2 verbs\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [static]}}
+
+{\bfseries Initial value\+:}
+\begin{DoxyCode}
+= \{
+
+ \{ .verb = \textcolor{stringliteral}{"ping"}, .session = AFB\_SESSION\_NONE, .callback =
+ \hyperlink{homescreen_8c_af48cab759d4ae0ddbfcdd60f4051ba05}{pingSample}, .auth = NULL \},
+ \{ .verb = \textcolor{stringliteral}{"tap\_shortcut"}, .session = AFB\_SESSION\_NONE, .callback =
+ \hyperlink{homescreen_8c_a096eae5c8f297f9df142a406eea56227}{tap\_shortcut}, .auth = NULL \},
+ \{ .verb = \textcolor{stringliteral}{"on\_screen\_message"}, .session = AFB\_SESSION\_NONE, .callback =
+ \hyperlink{homescreen_8c_a640cf8ed97d804c5ed1c09a349056338}{on\_screen\_message}, .auth = NULL \},
+ \{ .verb = \textcolor{stringliteral}{"subscribe"}, .session = AFB\_SESSION\_NONE, .callback =
+ \hyperlink{homescreen_8c_a4ff0c8b506669e5622a6ee168134d8f1}{subscribe}, .auth = NULL \},
+ \{ .verb = \textcolor{stringliteral}{"unsubscribe"}, .session = AFB\_SESSION\_NONE, .callback =
+ \hyperlink{homescreen_8c_ab92621255d7370c6dd8a0f1a8e376ad3}{unsubscribe}, .auth = NULL \},
+ \{NULL \}
+\}
+\end{DoxyCode}
+
+
+Definition at line 222 of file homescreen.\+c.
+
diff --git a/doc/api-ref/latex/d0/d8a/libhomescreen_8cpp.tex b/doc/api-ref/latex/d0/d8a/libhomescreen_8cpp.tex
new file mode 100644
index 0000000..3e7f572
--- /dev/null
+++ b/doc/api-ref/latex/d0/d8a/libhomescreen_8cpp.tex
@@ -0,0 +1,236 @@
+\hypertarget{libhomescreen_8cpp}{}\section{libhomescreen/libhomescreen.cpp File Reference}
+\label{libhomescreen_8cpp}\index{libhomescreen/libhomescreen.\+cpp@{libhomescreen/libhomescreen.\+cpp}}
+{\ttfamily \#include $<$stdarg.\+h$>$}\newline
+{\ttfamily \#include $<$sys/socket.\+h$>$}\newline
+{\ttfamily \#include $<$iostream$>$}\newline
+{\ttfamily \#include $<$algorithm$>$}\newline
+{\ttfamily \#include $<$thread$>$}\newline
+{\ttfamily \#include $<$errno.\+h$>$}\newline
+{\ttfamily \#include $<$cassert$>$}\newline
+{\ttfamily \#include $<$cctype$>$}\newline
+{\ttfamily \#include $<$cerrno$>$}\newline
+{\ttfamily \#include $<$cstdio$>$}\newline
+{\ttfamily \#include $<$cstdlib$>$}\newline
+{\ttfamily \#include $<$cstring$>$}\newline
+{\ttfamily \#include $<$libhomescreen/libhomescreen.\+hpp$>$}\newline
+\subsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \hyperlink{libhomescreen_8cpp_a797aa3053bd6a29819d44f8fad8a5eca}{E\+L\+OG}(args, ...)~\hyperlink{libhomescreen_8cpp_af583e7770fe13e35089388a45eaf9d9d}{\+\_\+\+E\+L\+OG}(\+\_\+\+\_\+\+F\+U\+N\+C\+T\+I\+O\+N\+\_\+\+\_\+,\+\_\+\+\_\+\+L\+I\+N\+E\+\_\+\+\_\+,args,\#\#\+\_\+\+\_\+\+V\+A\+\_\+\+A\+R\+G\+S\+\_\+\+\_\+)
+\item
+\#define \hyperlink{libhomescreen_8cpp_a4e42b2f5af2174dd24f958351becf63d}{D\+L\+OG}(args, ...)~\hyperlink{libhomescreen_8cpp_a7639744c63851d916fb673963e234124}{\+\_\+\+D\+L\+OG}(\+\_\+\+\_\+\+F\+U\+N\+C\+T\+I\+O\+N\+\_\+\+\_\+,\+\_\+\+\_\+\+L\+I\+N\+E\+\_\+\+\_\+,args,\#\#\+\_\+\+\_\+\+V\+A\+\_\+\+A\+R\+G\+S\+\_\+\+\_\+)
+\end{DoxyCompactItemize}
+\subsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+static void \hyperlink{libhomescreen_8cpp_a7639744c63851d916fb673963e234124}{\+\_\+\+D\+L\+OG} (const char $\ast$func, const int line, const char $\ast$log,...)
+\item
+static void \hyperlink{libhomescreen_8cpp_af583e7770fe13e35089388a45eaf9d9d}{\+\_\+\+E\+L\+OG} (const char $\ast$func, const int line, const char $\ast$log,...)
+\item
+static bool \hyperlink{libhomescreen_8cpp_a7a2176c3d71fec0f09dcb2aa0866b17e}{has\+\_\+verb} (const string \&verb)
+\item
+static void \hyperlink{libhomescreen_8cpp_a73c05b96c151e5e46c28585ccb143c1c}{\+\_\+on\+\_\+hangup\+\_\+static} (void $\ast$closure, struct afb\+\_\+wsj1 $\ast$wsj)
+\item
+static void \hyperlink{libhomescreen_8cpp_a782a05fde0f1c17e0c4c8f972a3f53c8}{\+\_\+on\+\_\+call\+\_\+static} (void $\ast$closure, const char $\ast$api, const char $\ast$verb, struct afb\+\_\+wsj1\+\_\+msg $\ast$msg)
+\item
+static void \hyperlink{libhomescreen_8cpp_a3df86185aa9453726556da201d95a6f9}{\+\_\+on\+\_\+event\+\_\+static} (void $\ast$closure, const char $\ast$\hyperlink{structevent}{event}, struct afb\+\_\+wsj1\+\_\+msg $\ast$msg)
+\item
+static void \hyperlink{libhomescreen_8cpp_a7778933bffa862c63fa0a1b8219faa8b}{\+\_\+on\+\_\+reply\+\_\+static} (void $\ast$closure, struct afb\+\_\+wsj1\+\_\+msg $\ast$msg)
+\item
+static void $\ast$ \hyperlink{libhomescreen_8cpp_aa73353e1bf62c68b6b0aba7a1e4e275e}{event\+\_\+loop\+\_\+run} (void $\ast$args)
+\end{DoxyCompactItemize}
+\subsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+static const char \hyperlink{libhomescreen_8cpp_a1e2d6e77dd8f0162f830058579eab42f}{A\+PI} \mbox{[}$\,$\mbox{]} = \char`\"{}homescreen\char`\"{}
+\end{DoxyCompactItemize}
+
+
+\subsection{Macro Definition Documentation}
+\mbox{\Hypertarget{libhomescreen_8cpp_a4e42b2f5af2174dd24f958351becf63d}\label{libhomescreen_8cpp_a4e42b2f5af2174dd24f958351becf63d}}
+\index{libhomescreen.\+cpp@{libhomescreen.\+cpp}!D\+L\+OG@{D\+L\+OG}}
+\index{D\+L\+OG@{D\+L\+OG}!libhomescreen.\+cpp@{libhomescreen.\+cpp}}
+\subsubsection{\texorpdfstring{D\+L\+OG}{DLOG}}
+{\footnotesize\ttfamily \#define D\+L\+OG(\begin{DoxyParamCaption}\item[{}]{args, }\item[{}]{... }\end{DoxyParamCaption})~\hyperlink{libhomescreen_8cpp_a7639744c63851d916fb673963e234124}{\+\_\+\+D\+L\+OG}(\+\_\+\+\_\+\+F\+U\+N\+C\+T\+I\+O\+N\+\_\+\+\_\+,\+\_\+\+\_\+\+L\+I\+N\+E\+\_\+\+\_\+,args,\#\#\+\_\+\+\_\+\+V\+A\+\_\+\+A\+R\+G\+S\+\_\+\+\_\+)}
+
+
+
+Definition at line 33 of file libhomescreen.\+cpp.
+
+\mbox{\Hypertarget{libhomescreen_8cpp_a797aa3053bd6a29819d44f8fad8a5eca}\label{libhomescreen_8cpp_a797aa3053bd6a29819d44f8fad8a5eca}}
+\index{libhomescreen.\+cpp@{libhomescreen.\+cpp}!E\+L\+OG@{E\+L\+OG}}
+\index{E\+L\+OG@{E\+L\+OG}!libhomescreen.\+cpp@{libhomescreen.\+cpp}}
+\subsubsection{\texorpdfstring{E\+L\+OG}{ELOG}}
+{\footnotesize\ttfamily \#define E\+L\+OG(\begin{DoxyParamCaption}\item[{}]{args, }\item[{}]{... }\end{DoxyParamCaption})~\hyperlink{libhomescreen_8cpp_af583e7770fe13e35089388a45eaf9d9d}{\+\_\+\+E\+L\+OG}(\+\_\+\+\_\+\+F\+U\+N\+C\+T\+I\+O\+N\+\_\+\+\_\+,\+\_\+\+\_\+\+L\+I\+N\+E\+\_\+\+\_\+,args,\#\#\+\_\+\+\_\+\+V\+A\+\_\+\+A\+R\+G\+S\+\_\+\+\_\+)}
+
+
+
+Definition at line 32 of file libhomescreen.\+cpp.
+
+
+
+\subsection{Function Documentation}
+\mbox{\Hypertarget{libhomescreen_8cpp_a7639744c63851d916fb673963e234124}\label{libhomescreen_8cpp_a7639744c63851d916fb673963e234124}}
+\index{libhomescreen.\+cpp@{libhomescreen.\+cpp}!\+\_\+\+D\+L\+OG@{\+\_\+\+D\+L\+OG}}
+\index{\+\_\+\+D\+L\+OG@{\+\_\+\+D\+L\+OG}!libhomescreen.\+cpp@{libhomescreen.\+cpp}}
+\subsubsection{\texorpdfstring{\+\_\+\+D\+L\+O\+G()}{\_DLOG()}}
+{\footnotesize\ttfamily static void \+\_\+\+D\+L\+OG (\begin{DoxyParamCaption}\item[{const char $\ast$}]{func, }\item[{const int}]{line, }\item[{const char $\ast$}]{log, }\item[{}]{... }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 545 of file libhomescreen.\+cpp.
+
+
+\begin{DoxyCode}
+546 \{
+547 \textcolor{keywordtype}{char} *message;
+548 va\_list args;
+549 va\_start(args, log);
+550 \textcolor{keywordflow}{if} (log == NULL || vasprintf(&message, log, args) < 0)
+551 message = NULL;
+552 cout << \textcolor{stringliteral}{"[libhomescreen DEBUG]"} << func << \textcolor{stringliteral}{"("} << line << \textcolor{stringliteral}{"):"} << message << endl;
+553 va\_end(args);
+554 free(message);
+555 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{libhomescreen_8cpp_af583e7770fe13e35089388a45eaf9d9d}\label{libhomescreen_8cpp_af583e7770fe13e35089388a45eaf9d9d}}
+\index{libhomescreen.\+cpp@{libhomescreen.\+cpp}!\+\_\+\+E\+L\+OG@{\+\_\+\+E\+L\+OG}}
+\index{\+\_\+\+E\+L\+OG@{\+\_\+\+E\+L\+OG}!libhomescreen.\+cpp@{libhomescreen.\+cpp}}
+\subsubsection{\texorpdfstring{\+\_\+\+E\+L\+O\+G()}{\_ELOG()}}
+{\footnotesize\ttfamily static void \+\_\+\+E\+L\+OG (\begin{DoxyParamCaption}\item[{const char $\ast$}]{func, }\item[{const int}]{line, }\item[{const char $\ast$}]{log, }\item[{}]{... }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 533 of file libhomescreen.\+cpp.
+
+
+\begin{DoxyCode}
+534 \{
+535 \textcolor{keywordtype}{char} *message;
+536 va\_list args;
+537 va\_start(args, log);
+538 \textcolor{keywordflow}{if} (log == NULL || vasprintf(&message, log, args) < 0)
+539 message = NULL;
+540 cout << \textcolor{stringliteral}{"[libhomescreen ERROR]"} << func << \textcolor{stringliteral}{"("} << line << \textcolor{stringliteral}{"):"} << message << endl;
+541 va\_end(args);
+542 free(message);
+543 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{libhomescreen_8cpp_a782a05fde0f1c17e0c4c8f972a3f53c8}\label{libhomescreen_8cpp_a782a05fde0f1c17e0c4c8f972a3f53c8}}
+\index{libhomescreen.\+cpp@{libhomescreen.\+cpp}!\+\_\+on\+\_\+call\+\_\+static@{\+\_\+on\+\_\+call\+\_\+static}}
+\index{\+\_\+on\+\_\+call\+\_\+static@{\+\_\+on\+\_\+call\+\_\+static}!libhomescreen.\+cpp@{libhomescreen.\+cpp}}
+\subsubsection{\texorpdfstring{\+\_\+on\+\_\+call\+\_\+static()}{\_on\_call\_static()}}
+{\footnotesize\ttfamily static void \+\_\+on\+\_\+call\+\_\+static (\begin{DoxyParamCaption}\item[{void $\ast$}]{closure, }\item[{const char $\ast$}]{api, }\item[{const char $\ast$}]{verb, }\item[{struct afb\+\_\+wsj1\+\_\+msg $\ast$}]{msg }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 66 of file libhomescreen.\+cpp.
+
+
+\begin{DoxyCode}
+67 \{
+68 \textcolor{comment}{/* LibHomeScreen is not called from other process */}
+69 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{libhomescreen_8cpp_a3df86185aa9453726556da201d95a6f9}\label{libhomescreen_8cpp_a3df86185aa9453726556da201d95a6f9}}
+\index{libhomescreen.\+cpp@{libhomescreen.\+cpp}!\+\_\+on\+\_\+event\+\_\+static@{\+\_\+on\+\_\+event\+\_\+static}}
+\index{\+\_\+on\+\_\+event\+\_\+static@{\+\_\+on\+\_\+event\+\_\+static}!libhomescreen.\+cpp@{libhomescreen.\+cpp}}
+\subsubsection{\texorpdfstring{\+\_\+on\+\_\+event\+\_\+static()}{\_on\_event\_static()}}
+{\footnotesize\ttfamily static void \+\_\+on\+\_\+event\+\_\+static (\begin{DoxyParamCaption}\item[{void $\ast$}]{closure, }\item[{const char $\ast$}]{event, }\item[{struct afb\+\_\+wsj1\+\_\+msg $\ast$}]{msg }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 71 of file libhomescreen.\+cpp.
+
+
+\begin{DoxyCode}
+72 \{
+73 \textcolor{keyword}{static\_cast<}\hyperlink{class_lib_home_screen}{LibHomeScreen}*\textcolor{keyword}{>}(closure)->on\_event(NULL,\hyperlink{structevent}{event},msg);
+74 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{libhomescreen_8cpp_a73c05b96c151e5e46c28585ccb143c1c}\label{libhomescreen_8cpp_a73c05b96c151e5e46c28585ccb143c1c}}
+\index{libhomescreen.\+cpp@{libhomescreen.\+cpp}!\+\_\+on\+\_\+hangup\+\_\+static@{\+\_\+on\+\_\+hangup\+\_\+static}}
+\index{\+\_\+on\+\_\+hangup\+\_\+static@{\+\_\+on\+\_\+hangup\+\_\+static}!libhomescreen.\+cpp@{libhomescreen.\+cpp}}
+\subsubsection{\texorpdfstring{\+\_\+on\+\_\+hangup\+\_\+static()}{\_on\_hangup\_static()}}
+{\footnotesize\ttfamily static void \+\_\+on\+\_\+hangup\+\_\+static (\begin{DoxyParamCaption}\item[{void $\ast$}]{closure, }\item[{struct afb\+\_\+wsj1 $\ast$}]{wsj }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
+
+websocket
+
+Definition at line 61 of file libhomescreen.\+cpp.
+
+
+\begin{DoxyCode}
+62 \{
+63 \textcolor{keyword}{static\_cast<}\hyperlink{class_lib_home_screen}{LibHomeScreen}*\textcolor{keyword}{>}(closure)->on\_hangup(NULL,wsj);
+64 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{libhomescreen_8cpp_a7778933bffa862c63fa0a1b8219faa8b}\label{libhomescreen_8cpp_a7778933bffa862c63fa0a1b8219faa8b}}
+\index{libhomescreen.\+cpp@{libhomescreen.\+cpp}!\+\_\+on\+\_\+reply\+\_\+static@{\+\_\+on\+\_\+reply\+\_\+static}}
+\index{\+\_\+on\+\_\+reply\+\_\+static@{\+\_\+on\+\_\+reply\+\_\+static}!libhomescreen.\+cpp@{libhomescreen.\+cpp}}
+\subsubsection{\texorpdfstring{\+\_\+on\+\_\+reply\+\_\+static()}{\_on\_reply\_static()}}
+{\footnotesize\ttfamily static void \+\_\+on\+\_\+reply\+\_\+static (\begin{DoxyParamCaption}\item[{void $\ast$}]{closure, }\item[{struct afb\+\_\+wsj1\+\_\+msg $\ast$}]{msg }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 76 of file libhomescreen.\+cpp.
+
+
+\begin{DoxyCode}
+77 \{
+78 \textcolor{keyword}{static\_cast<}\hyperlink{class_lib_home_screen}{LibHomeScreen}*\textcolor{keyword}{>}(closure)->on\_reply(NULL,msg);
+79 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{libhomescreen_8cpp_aa73353e1bf62c68b6b0aba7a1e4e275e}\label{libhomescreen_8cpp_aa73353e1bf62c68b6b0aba7a1e4e275e}}
+\index{libhomescreen.\+cpp@{libhomescreen.\+cpp}!event\+\_\+loop\+\_\+run@{event\+\_\+loop\+\_\+run}}
+\index{event\+\_\+loop\+\_\+run@{event\+\_\+loop\+\_\+run}!libhomescreen.\+cpp@{libhomescreen.\+cpp}}
+\subsubsection{\texorpdfstring{event\+\_\+loop\+\_\+run()}{event\_loop\_run()}}
+{\footnotesize\ttfamily static void$\ast$ event\+\_\+loop\+\_\+run (\begin{DoxyParamCaption}\item[{void $\ast$}]{args }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 204 of file libhomescreen.\+cpp.
+
+
+\begin{DoxyCode}
+205 \{
+206 \textcolor{keyword}{struct }sd\_event* loop = (\textcolor{keyword}{struct }sd\_event*)(args);
+207 \hyperlink{libhomescreen_8cpp_a4e42b2f5af2174dd24f958351becf63d}{DLOG}(\textcolor{stringliteral}{"start eventloop"});
+208 \textcolor{keywordflow}{for}(;;)
+209 sd\_event\_run(loop, 30000000);
+210 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{libhomescreen_8cpp_a7a2176c3d71fec0f09dcb2aa0866b17e}\label{libhomescreen_8cpp_a7a2176c3d71fec0f09dcb2aa0866b17e}}
+\index{libhomescreen.\+cpp@{libhomescreen.\+cpp}!has\+\_\+verb@{has\+\_\+verb}}
+\index{has\+\_\+verb@{has\+\_\+verb}!libhomescreen.\+cpp@{libhomescreen.\+cpp}}
+\subsubsection{\texorpdfstring{has\+\_\+verb()}{has\_verb()}}
+{\footnotesize\ttfamily static bool has\+\_\+verb (\begin{DoxyParamCaption}\item[{const string \&}]{verb }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 557 of file libhomescreen.\+cpp.
+
+
+\begin{DoxyCode}
+558 \{
+559 \hyperlink{libhomescreen_8cpp_a4e42b2f5af2174dd24f958351becf63d}{DLOG}(\textcolor{stringliteral}{"verb is %s"}, verb.c\_str());
+560 \textcolor{keywordflow}{if}(find(\hyperlink{class_lib_home_screen_a5593ff5ac78f6495ccb649904cf0ab08}{LibHomeScreen::api\_list}.begin(),
+ \hyperlink{class_lib_home_screen_a5593ff5ac78f6495ccb649904cf0ab08}{LibHomeScreen::api\_list}.end(), verb) !=
+ \hyperlink{class_lib_home_screen_a5593ff5ac78f6495ccb649904cf0ab08}{LibHomeScreen::api\_list}.end())
+561 \textcolor{keywordflow}{return} \textcolor{keyword}{true};
+562 \textcolor{keywordflow}{else}
+563 \textcolor{keywordflow}{return} \textcolor{keyword}{false};
+564 \}
+\end{DoxyCode}
+
+
+\subsection{Variable Documentation}
+\mbox{\Hypertarget{libhomescreen_8cpp_a1e2d6e77dd8f0162f830058579eab42f}\label{libhomescreen_8cpp_a1e2d6e77dd8f0162f830058579eab42f}}
+\index{libhomescreen.\+cpp@{libhomescreen.\+cpp}!A\+PI@{A\+PI}}
+\index{A\+PI@{A\+PI}!libhomescreen.\+cpp@{libhomescreen.\+cpp}}
+\subsubsection{\texorpdfstring{A\+PI}{API}}
+{\footnotesize\ttfamily const char A\+PI\mbox{[}$\,$\mbox{]} = \char`\"{}homescreen\char`\"{}\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 40 of file libhomescreen.\+cpp.
+
diff --git a/doc/api-ref/latex/d3/d3d/hs-helper_8h.tex b/doc/api-ref/latex/d3/d3d/hs-helper_8h.tex
new file mode 100644
index 0000000..3cd4498
--- /dev/null
+++ b/doc/api-ref/latex/d3/d3d/hs-helper_8h.tex
@@ -0,0 +1,343 @@
+\hypertarget{hs-helper_8h}{}\section{homescreen\+\_\+service/hs-\/helper.h File Reference}
+\label{hs-helper_8h}\index{homescreen\+\_\+service/hs-\/helper.\+h@{homescreen\+\_\+service/hs-\/helper.\+h}}
+{\ttfamily \#include $<$afb/afb-\/binding.\+h$>$}\newline
+{\ttfamily \#include $<$stdint.\+h$>$}\newline
+{\ttfamily \#include $<$glib.\+h$>$}\newline
+{\ttfamily \#include $<$errno.\+h$>$}\newline
+\subsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \hyperlink{hs-helper_8h_ad2c1fbc92ba364fcf83f15e6d0af66f0}{A\+F\+B\+\_\+\+B\+I\+N\+D\+I\+N\+G\+\_\+\+V\+E\+R\+S\+I\+ON}~2
+\end{DoxyCompactItemize}
+\subsection*{Typedefs}
+\begin{DoxyCompactItemize}
+\item
+typedef enum \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899}{R\+E\+Q\+\_\+\+E\+R\+R\+OR} \hyperlink{hs-helper_8h_ab0d62ccfa9c3ab87f090f67c3d50adce}{R\+E\+Q\+\_\+\+E\+R\+R\+OR}
+\end{DoxyCompactItemize}
+\subsection*{Enumerations}
+\begin{DoxyCompactItemize}
+\item
+enum \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899}{R\+E\+Q\+\_\+\+E\+R\+R\+OR} \{ \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899a96a855966bc63045222b3dcac524cee1}{R\+E\+Q\+\_\+\+F\+A\+IL} = -\/1,
+\hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899ab093abb14c097b3b7719debb04d5e8ee}{R\+E\+Q\+\_\+\+OK} =0,
+\hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899aa223eed65c9bee2bf1f4cdecaf90d66a}{N\+O\+T\+\_\+\+N\+U\+M\+B\+ER},
+\hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899add1c84bf80c5f80741ee8f37fef1e12b}{O\+U\+T\+\_\+\+R\+A\+N\+GE}
+ \}
+\end{DoxyCompactItemize}
+\subsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899}{R\+E\+Q\+\_\+\+E\+R\+R\+OR} \hyperlink{hs-helper_8h_a649900645417f2df3a70b9ad67529f53}{get\+\_\+value\+\_\+uint16} (const struct afb\+\_\+req request, const char $\ast$source, uint16\+\_\+t $\ast$out\+\_\+id)
+\item
+\hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899}{R\+E\+Q\+\_\+\+E\+R\+R\+OR} \hyperlink{hs-helper_8h_a2e62366684e39ea94436bf017e416827}{get\+\_\+value\+\_\+int16} (const struct afb\+\_\+req request, const char $\ast$source, int16\+\_\+t $\ast$out\+\_\+id)
+\item
+\hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899}{R\+E\+Q\+\_\+\+E\+R\+R\+OR} \hyperlink{hs-helper_8h_ac5b0370643c520377afd3fd4891918d2}{get\+\_\+value\+\_\+int32} (const struct afb\+\_\+req request, const char $\ast$source, int32\+\_\+t $\ast$out\+\_\+id)
+\item
+void \hyperlink{hs-helper_8h_a1ba31a6a94515ff1730ba0043a67d59e}{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object} (struct json\+\_\+object $\ast$j\+\_\+obj, int count,...)
+\item
+void \hyperlink{hs-helper_8h_a8777c53f1d4d5412f19b134ad85ffedf}{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+str} (struct json\+\_\+object $\ast$j\+\_\+obj, int count,...)
+\item
+void \hyperlink{hs-helper_8h_ae83604a37134e7bdee3ce4f10bb0b47a}{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+func} (struct json\+\_\+object $\ast$j\+\_\+obj, const char $\ast$verb\+\_\+name, int count,...)
+\item
+int \hyperlink{hs-helper_8h_a2ff1b894941c3b461ca8119079c4146a}{hs\+\_\+search\+\_\+event\+\_\+name\+\_\+index} (const char $\ast$value)
+\end{DoxyCompactItemize}
+\subsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+static const char $\ast$ \hyperlink{hs-helper_8h_a0cd84b1a2184c9b84d1b7bf24582f28e}{evlist} \mbox{[}$\,$\mbox{]}
+\end{DoxyCompactItemize}
+
+
+\subsection{Macro Definition Documentation}
+\mbox{\Hypertarget{hs-helper_8h_ad2c1fbc92ba364fcf83f15e6d0af66f0}\label{hs-helper_8h_ad2c1fbc92ba364fcf83f15e6d0af66f0}}
+\index{hs-\/helper.\+h@{hs-\/helper.\+h}!A\+F\+B\+\_\+\+B\+I\+N\+D\+I\+N\+G\+\_\+\+V\+E\+R\+S\+I\+ON@{A\+F\+B\+\_\+\+B\+I\+N\+D\+I\+N\+G\+\_\+\+V\+E\+R\+S\+I\+ON}}
+\index{A\+F\+B\+\_\+\+B\+I\+N\+D\+I\+N\+G\+\_\+\+V\+E\+R\+S\+I\+ON@{A\+F\+B\+\_\+\+B\+I\+N\+D\+I\+N\+G\+\_\+\+V\+E\+R\+S\+I\+ON}!hs-\/helper.\+h@{hs-\/helper.\+h}}
+\subsubsection{\texorpdfstring{A\+F\+B\+\_\+\+B\+I\+N\+D\+I\+N\+G\+\_\+\+V\+E\+R\+S\+I\+ON}{AFB\_BINDING\_VERSION}}
+{\footnotesize\ttfamily \#define A\+F\+B\+\_\+\+B\+I\+N\+D\+I\+N\+G\+\_\+\+V\+E\+R\+S\+I\+ON~2}
+
+
+
+Definition at line 19 of file hs-\/helper.\+h.
+
+
+
+\subsection{Typedef Documentation}
+\mbox{\Hypertarget{hs-helper_8h_ab0d62ccfa9c3ab87f090f67c3d50adce}\label{hs-helper_8h_ab0d62ccfa9c3ab87f090f67c3d50adce}}
+\index{hs-\/helper.\+h@{hs-\/helper.\+h}!R\+E\+Q\+\_\+\+E\+R\+R\+OR@{R\+E\+Q\+\_\+\+E\+R\+R\+OR}}
+\index{R\+E\+Q\+\_\+\+E\+R\+R\+OR@{R\+E\+Q\+\_\+\+E\+R\+R\+OR}!hs-\/helper.\+h@{hs-\/helper.\+h}}
+\subsubsection{\texorpdfstring{R\+E\+Q\+\_\+\+E\+R\+R\+OR}{REQ\_ERROR}}
+{\footnotesize\ttfamily typedef enum \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899}{R\+E\+Q\+\_\+\+E\+R\+R\+OR} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899}{R\+E\+Q\+\_\+\+E\+R\+R\+OR}}
+
+
+
+\subsection{Enumeration Type Documentation}
+\mbox{\Hypertarget{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899}\label{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899}}
+\index{hs-\/helper.\+h@{hs-\/helper.\+h}!R\+E\+Q\+\_\+\+E\+R\+R\+OR@{R\+E\+Q\+\_\+\+E\+R\+R\+OR}}
+\index{R\+E\+Q\+\_\+\+E\+R\+R\+OR@{R\+E\+Q\+\_\+\+E\+R\+R\+OR}!hs-\/helper.\+h@{hs-\/helper.\+h}}
+\subsubsection{\texorpdfstring{R\+E\+Q\+\_\+\+E\+R\+R\+OR}{REQ\_ERROR}}
+{\footnotesize\ttfamily enum \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899}{R\+E\+Q\+\_\+\+E\+R\+R\+OR}}
+
+\begin{DoxyEnumFields}{Enumerator}
+\raisebox{\heightof{T}}[0pt][0pt]{\index{R\+E\+Q\+\_\+\+F\+A\+IL@{R\+E\+Q\+\_\+\+F\+A\+IL}!hs-\/helper.\+h@{hs-\/helper.\+h}}\index{hs-\/helper.\+h@{hs-\/helper.\+h}!R\+E\+Q\+\_\+\+F\+A\+IL@{R\+E\+Q\+\_\+\+F\+A\+IL}}}\mbox{\Hypertarget{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899a96a855966bc63045222b3dcac524cee1}\label{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899a96a855966bc63045222b3dcac524cee1}}
+R\+E\+Q\+\_\+\+F\+A\+IL&\\
+\hline
+
+\raisebox{\heightof{T}}[0pt][0pt]{\index{R\+E\+Q\+\_\+\+OK@{R\+E\+Q\+\_\+\+OK}!hs-\/helper.\+h@{hs-\/helper.\+h}}\index{hs-\/helper.\+h@{hs-\/helper.\+h}!R\+E\+Q\+\_\+\+OK@{R\+E\+Q\+\_\+\+OK}}}\mbox{\Hypertarget{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899ab093abb14c097b3b7719debb04d5e8ee}\label{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899ab093abb14c097b3b7719debb04d5e8ee}}
+R\+E\+Q\+\_\+\+OK&\\
+\hline
+
+\raisebox{\heightof{T}}[0pt][0pt]{\index{N\+O\+T\+\_\+\+N\+U\+M\+B\+ER@{N\+O\+T\+\_\+\+N\+U\+M\+B\+ER}!hs-\/helper.\+h@{hs-\/helper.\+h}}\index{hs-\/helper.\+h@{hs-\/helper.\+h}!N\+O\+T\+\_\+\+N\+U\+M\+B\+ER@{N\+O\+T\+\_\+\+N\+U\+M\+B\+ER}}}\mbox{\Hypertarget{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899aa223eed65c9bee2bf1f4cdecaf90d66a}\label{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899aa223eed65c9bee2bf1f4cdecaf90d66a}}
+N\+O\+T\+\_\+\+N\+U\+M\+B\+ER&\\
+\hline
+
+\raisebox{\heightof{T}}[0pt][0pt]{\index{O\+U\+T\+\_\+\+R\+A\+N\+GE@{O\+U\+T\+\_\+\+R\+A\+N\+GE}!hs-\/helper.\+h@{hs-\/helper.\+h}}\index{hs-\/helper.\+h@{hs-\/helper.\+h}!O\+U\+T\+\_\+\+R\+A\+N\+GE@{O\+U\+T\+\_\+\+R\+A\+N\+GE}}}\mbox{\Hypertarget{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899add1c84bf80c5f80741ee8f37fef1e12b}\label{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899add1c84bf80c5f80741ee8f37fef1e12b}}
+O\+U\+T\+\_\+\+R\+A\+N\+GE&\\
+\hline
+
+\end{DoxyEnumFields}
+
+
+Definition at line 25 of file hs-\/helper.\+h.
+
+
+\begin{DoxyCode}
+26 \{
+27 \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899a96a855966bc63045222b3dcac524cee1}{REQ\_FAIL} = -1,
+28 \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899ab093abb14c097b3b7719debb04d5e8ee}{REQ\_OK}=0,
+29 \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899aa223eed65c9bee2bf1f4cdecaf90d66a}{NOT\_NUMBER},
+30 \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899add1c84bf80c5f80741ee8f37fef1e12b}{OUT\_RANGE}
+31 \}\hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899}{REQ\_ERROR};
+\end{DoxyCode}
+
+
+\subsection{Function Documentation}
+\mbox{\Hypertarget{hs-helper_8h_a2e62366684e39ea94436bf017e416827}\label{hs-helper_8h_a2e62366684e39ea94436bf017e416827}}
+\index{hs-\/helper.\+h@{hs-\/helper.\+h}!get\+\_\+value\+\_\+int16@{get\+\_\+value\+\_\+int16}}
+\index{get\+\_\+value\+\_\+int16@{get\+\_\+value\+\_\+int16}!hs-\/helper.\+h@{hs-\/helper.\+h}}
+\subsubsection{\texorpdfstring{get\+\_\+value\+\_\+int16()}{get\_value\_int16()}}
+{\footnotesize\ttfamily \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899}{R\+E\+Q\+\_\+\+E\+R\+R\+OR} get\+\_\+value\+\_\+int16 (\begin{DoxyParamCaption}\item[{const struct afb\+\_\+req}]{request, }\item[{const char $\ast$}]{source, }\item[{int16\+\_\+t $\ast$}]{out\+\_\+id }\end{DoxyParamCaption})}
+
+
+
+Definition at line 48 of file hs-\/helper.\+c.
+
+
+\begin{DoxyCode}
+49 \{
+50 \textcolor{keywordtype}{char}* endptr;
+51 \textcolor{keyword}{const} \textcolor{keywordtype}{char}* tmp = afb\_req\_value (request, source);
+52 \textcolor{keywordflow}{if}(!tmp)
+53 \{
+54 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899a96a855966bc63045222b3dcac524cee1}{REQ\_FAIL};
+55 \}
+56 \textcolor{keywordtype}{long} tmp\_id = strtol(tmp,&endptr,10);
+57
+58 \textcolor{comment}{/* error check of range */}
+59 \textcolor{keywordflow}{if}( (tmp\_id > INT16\_MAX) || (tmp\_id < INT16\_MIN) )
+60 \{
+61 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899add1c84bf80c5f80741ee8f37fef1e12b}{OUT\_RANGE};
+62 \}
+63 \textcolor{keywordflow}{if}(*endptr != \textcolor{charliteral}{'\(\backslash\)0'})
+64 \{
+65 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899aa223eed65c9bee2bf1f4cdecaf90d66a}{NOT\_NUMBER};
+66 \}
+67
+68 *out\_id = (int16\_t)tmp\_id;
+69 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899ab093abb14c097b3b7719debb04d5e8ee}{REQ\_OK};
+70 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{hs-helper_8h_ac5b0370643c520377afd3fd4891918d2}\label{hs-helper_8h_ac5b0370643c520377afd3fd4891918d2}}
+\index{hs-\/helper.\+h@{hs-\/helper.\+h}!get\+\_\+value\+\_\+int32@{get\+\_\+value\+\_\+int32}}
+\index{get\+\_\+value\+\_\+int32@{get\+\_\+value\+\_\+int32}!hs-\/helper.\+h@{hs-\/helper.\+h}}
+\subsubsection{\texorpdfstring{get\+\_\+value\+\_\+int32()}{get\_value\_int32()}}
+{\footnotesize\ttfamily \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899}{R\+E\+Q\+\_\+\+E\+R\+R\+OR} get\+\_\+value\+\_\+int32 (\begin{DoxyParamCaption}\item[{const struct afb\+\_\+req}]{request, }\item[{const char $\ast$}]{source, }\item[{int32\+\_\+t $\ast$}]{out\+\_\+id }\end{DoxyParamCaption})}
+
+
+
+Definition at line 72 of file hs-\/helper.\+c.
+
+
+\begin{DoxyCode}
+73 \{
+74 \textcolor{keywordtype}{char}* endptr;
+75 \textcolor{keyword}{const} \textcolor{keywordtype}{char}* tmp = afb\_req\_value (request, source);
+76 \textcolor{keywordflow}{if}(!tmp)
+77 \{
+78 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899a96a855966bc63045222b3dcac524cee1}{REQ\_FAIL};
+79 \}
+80 \textcolor{keywordtype}{long} tmp\_id = strtol(tmp,&endptr,10);
+81
+82 \textcolor{comment}{/* error check of range */}
+83 \textcolor{keywordflow}{if}( (tmp\_id > INT32\_MAX) || (tmp\_id < INT32\_MIN) )
+84 \{
+85 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899add1c84bf80c5f80741ee8f37fef1e12b}{OUT\_RANGE};
+86 \}
+87 \textcolor{keywordflow}{if}(*endptr != \textcolor{charliteral}{'\(\backslash\)0'})
+88 \{
+89 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899aa223eed65c9bee2bf1f4cdecaf90d66a}{NOT\_NUMBER};
+90 \}
+91
+92 *out\_id = (int32\_t)tmp\_id;
+93 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899ab093abb14c097b3b7719debb04d5e8ee}{REQ\_OK};
+94 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{hs-helper_8h_a649900645417f2df3a70b9ad67529f53}\label{hs-helper_8h_a649900645417f2df3a70b9ad67529f53}}
+\index{hs-\/helper.\+h@{hs-\/helper.\+h}!get\+\_\+value\+\_\+uint16@{get\+\_\+value\+\_\+uint16}}
+\index{get\+\_\+value\+\_\+uint16@{get\+\_\+value\+\_\+uint16}!hs-\/helper.\+h@{hs-\/helper.\+h}}
+\subsubsection{\texorpdfstring{get\+\_\+value\+\_\+uint16()}{get\_value\_uint16()}}
+{\footnotesize\ttfamily \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899}{R\+E\+Q\+\_\+\+E\+R\+R\+OR} get\+\_\+value\+\_\+uint16 (\begin{DoxyParamCaption}\item[{const struct afb\+\_\+req}]{request, }\item[{const char $\ast$}]{source, }\item[{uint16\+\_\+t $\ast$}]{out\+\_\+id }\end{DoxyParamCaption})}
+
+
+
+Definition at line 24 of file hs-\/helper.\+c.
+
+
+\begin{DoxyCode}
+25 \{
+26 \textcolor{keywordtype}{char}* endptr;
+27 \textcolor{keyword}{const} \textcolor{keywordtype}{char}* tmp = afb\_req\_value (request, source);
+28 \textcolor{keywordflow}{if}(!tmp)
+29 \{
+30 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899a96a855966bc63045222b3dcac524cee1}{REQ\_FAIL};
+31 \}
+32 \textcolor{keywordtype}{long} tmp\_id = strtol(tmp,&endptr,10);
+33
+34 \textcolor{comment}{/* error check of range */}
+35 \textcolor{keywordflow}{if}( (tmp\_id > UINT16\_MAX) || (tmp\_id < 0) )
+36 \{
+37 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899add1c84bf80c5f80741ee8f37fef1e12b}{OUT\_RANGE};
+38 \}
+39 \textcolor{keywordflow}{if}(*endptr != \textcolor{charliteral}{'\(\backslash\)0'})
+40 \{
+41 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899aa223eed65c9bee2bf1f4cdecaf90d66a}{NOT\_NUMBER};
+42 \}
+43
+44 *out\_id = (uint16\_t)tmp\_id;
+45 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899ab093abb14c097b3b7719debb04d5e8ee}{REQ\_OK};
+46 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{hs-helper_8h_a1ba31a6a94515ff1730ba0043a67d59e}\label{hs-helper_8h_a1ba31a6a94515ff1730ba0043a67d59e}}
+\index{hs-\/helper.\+h@{hs-\/helper.\+h}!hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object@{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object}}
+\index{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object@{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object}!hs-\/helper.\+h@{hs-\/helper.\+h}}
+\subsubsection{\texorpdfstring{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object()}{hs\_add\_object\_to\_json\_object()}}
+{\footnotesize\ttfamily void hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object (\begin{DoxyParamCaption}\item[{struct json\+\_\+object $\ast$}]{j\+\_\+obj, }\item[{int}]{count, }\item[{}]{... }\end{DoxyParamCaption})}
+
+
+
+Definition at line 96 of file hs-\/helper.\+c.
+
+
+\begin{DoxyCode}
+97 \{
+98 va\_list args;
+99 va\_start(args, count);
+100 \textcolor{keywordflow}{for}(\textcolor{keywordtype}{int} i = 0; i < count; ++i )
+101 \{
+102 \textcolor{keywordtype}{char} *key = va\_arg(args, \textcolor{keywordtype}{char}*);
+103 \textcolor{keywordtype}{int} value = va\_arg(args, \textcolor{keywordtype}{int});
+104 json\_object\_object\_add(j\_obj, key, json\_object\_new\_int((int32\_t)value));
+105 ++i;
+106 \}
+107 va\_end(args);
+108 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{hs-helper_8h_ae83604a37134e7bdee3ce4f10bb0b47a}\label{hs-helper_8h_ae83604a37134e7bdee3ce4f10bb0b47a}}
+\index{hs-\/helper.\+h@{hs-\/helper.\+h}!hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+func@{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+func}}
+\index{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+func@{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+func}!hs-\/helper.\+h@{hs-\/helper.\+h}}
+\subsubsection{\texorpdfstring{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+func()}{hs\_add\_object\_to\_json\_object\_func()}}
+{\footnotesize\ttfamily void hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+func (\begin{DoxyParamCaption}\item[{struct json\+\_\+object $\ast$}]{j\+\_\+obj, }\item[{const char $\ast$}]{verb\+\_\+name, }\item[{int}]{count, }\item[{}]{... }\end{DoxyParamCaption})}
+
+
+
+Definition at line 125 of file hs-\/helper.\+c.
+
+
+\begin{DoxyCode}
+126 \{
+127 va\_list args;
+128 va\_start(args, count);
+129
+130 json\_object\_object\_add(j\_obj,\textcolor{stringliteral}{"verb"}, json\_object\_new\_string(verb\_name));
+131
+132 \textcolor{keywordflow}{for}(\textcolor{keywordtype}{int} i = 0; i < count; ++i )
+133 \{
+134 \textcolor{keywordtype}{char} *key = va\_arg(args, \textcolor{keywordtype}{char}*);
+135 \textcolor{keywordtype}{int} value = va\_arg(args, \textcolor{keywordtype}{int});
+136 json\_object\_object\_add(j\_obj, key, json\_object\_new\_int((int32\_t)value));
+137 ++i;
+138 \}
+139 va\_end(args);
+140 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{hs-helper_8h_a8777c53f1d4d5412f19b134ad85ffedf}\label{hs-helper_8h_a8777c53f1d4d5412f19b134ad85ffedf}}
+\index{hs-\/helper.\+h@{hs-\/helper.\+h}!hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+str@{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+str}}
+\index{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+str@{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+str}!hs-\/helper.\+h@{hs-\/helper.\+h}}
+\subsubsection{\texorpdfstring{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+str()}{hs\_add\_object\_to\_json\_object\_str()}}
+{\footnotesize\ttfamily void hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+str (\begin{DoxyParamCaption}\item[{struct json\+\_\+object $\ast$}]{j\+\_\+obj, }\item[{int}]{count, }\item[{}]{... }\end{DoxyParamCaption})}
+
+
+
+Definition at line 110 of file hs-\/helper.\+c.
+
+
+\begin{DoxyCode}
+111 \{
+112 va\_list args;
+113 va\_start(args, count);
+114 \textcolor{keywordflow}{for}(\textcolor{keywordtype}{int} i = 0; i < count; ++i )
+115 \{
+116 \textcolor{keywordtype}{char} *key = va\_arg(args, \textcolor{keywordtype}{char}*);
+117 \textcolor{keywordtype}{char} *value = va\_arg(args, \textcolor{keywordtype}{char}*);
+118 json\_object\_object\_add(j\_obj, key, json\_object\_new\_string(value));
+119 ++i;
+120 \}
+121 va\_end(args);
+122 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{hs-helper_8h_a2ff1b894941c3b461ca8119079c4146a}\label{hs-helper_8h_a2ff1b894941c3b461ca8119079c4146a}}
+\index{hs-\/helper.\+h@{hs-\/helper.\+h}!hs\+\_\+search\+\_\+event\+\_\+name\+\_\+index@{hs\+\_\+search\+\_\+event\+\_\+name\+\_\+index}}
+\index{hs\+\_\+search\+\_\+event\+\_\+name\+\_\+index@{hs\+\_\+search\+\_\+event\+\_\+name\+\_\+index}!hs-\/helper.\+h@{hs-\/helper.\+h}}
+\subsubsection{\texorpdfstring{hs\+\_\+search\+\_\+event\+\_\+name\+\_\+index()}{hs\_search\_event\_name\_index()}}
+{\footnotesize\ttfamily int hs\+\_\+search\+\_\+event\+\_\+name\+\_\+index (\begin{DoxyParamCaption}\item[{const char $\ast$}]{value }\end{DoxyParamCaption})}
+
+
+
+Definition at line 142 of file hs-\/helper.\+c.
+
+
+\begin{DoxyCode}
+143 \{
+144 \textcolor{keywordtype}{size\_t} buf\_size = 50;
+145 \textcolor{keywordtype}{size\_t} size = \textcolor{keyword}{sizeof} \hyperlink{hs-helper_8h_a0cd84b1a2184c9b84d1b7bf24582f28e}{evlist} / \textcolor{keyword}{sizeof} *\hyperlink{hs-helper_8h_a0cd84b1a2184c9b84d1b7bf24582f28e}{evlist};
+146 \textcolor{keywordtype}{int} ret = -1;
+147 \textcolor{keywordflow}{for}(\textcolor{keywordtype}{size\_t} i = 0 ; i < size ; ++i)
+148 \{
+149 \textcolor{keywordflow}{if}(!strncmp(value, \hyperlink{hs-helper_8h_a0cd84b1a2184c9b84d1b7bf24582f28e}{evlist}[i], buf\_size))
+150 \{
+151 ret = i;
+152 \textcolor{keywordflow}{break};
+153 \}
+154 \}
+155 \textcolor{keywordflow}{return} ret;
+156 \}
+\end{DoxyCode}
+
+
+\subsection{Variable Documentation}
+\mbox{\Hypertarget{hs-helper_8h_a0cd84b1a2184c9b84d1b7bf24582f28e}\label{hs-helper_8h_a0cd84b1a2184c9b84d1b7bf24582f28e}}
+\index{hs-\/helper.\+h@{hs-\/helper.\+h}!evlist@{evlist}}
+\index{evlist@{evlist}!hs-\/helper.\+h@{hs-\/helper.\+h}}
+\subsubsection{\texorpdfstring{evlist}{evlist}}
+{\footnotesize\ttfamily const char$\ast$ evlist\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [static]}}
+
+{\bfseries Initial value\+:}
+\begin{DoxyCode}
+= \{
+ \textcolor{stringliteral}{"tap\_shortcut"},
+ \textcolor{stringliteral}{"on\_screen\_message"},
+ \textcolor{stringliteral}{"reserved"}
+ \}
+\end{DoxyCode}
+
+
+Definition at line 33 of file hs-\/helper.\+h.
+
diff --git a/doc/api-ref/latex/dd/d1d/hs-helper_8c.tex b/doc/api-ref/latex/dd/d1d/hs-helper_8c.tex
new file mode 100644
index 0000000..74c26fb
--- /dev/null
+++ b/doc/api-ref/latex/dd/d1d/hs-helper_8c.tex
@@ -0,0 +1,238 @@
+\hypertarget{hs-helper_8c}{}\section{homescreen\+\_\+service/hs-\/helper.c File Reference}
+\label{hs-helper_8c}\index{homescreen\+\_\+service/hs-\/helper.\+c@{homescreen\+\_\+service/hs-\/helper.\+c}}
+{\ttfamily \#include \char`\"{}hs-\/helper.\+h\char`\"{}}\newline
+{\ttfamily \#include $<$stdlib.\+h$>$}\newline
+{\ttfamily \#include $<$string.\+h$>$}\newline
+{\ttfamily \#include $<$limits.\+h$>$}\newline
+{\ttfamily \#include $<$json-\/c/json.\+h$>$}\newline
+{\ttfamily \#include $<$stdarg.\+h$>$}\newline
+\subsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899}{R\+E\+Q\+\_\+\+E\+R\+R\+OR} \hyperlink{hs-helper_8c_a649900645417f2df3a70b9ad67529f53}{get\+\_\+value\+\_\+uint16} (const struct afb\+\_\+req request, const char $\ast$source, uint16\+\_\+t $\ast$out\+\_\+id)
+\item
+\hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899}{R\+E\+Q\+\_\+\+E\+R\+R\+OR} \hyperlink{hs-helper_8c_a2e62366684e39ea94436bf017e416827}{get\+\_\+value\+\_\+int16} (const struct afb\+\_\+req request, const char $\ast$source, int16\+\_\+t $\ast$out\+\_\+id)
+\item
+\hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899}{R\+E\+Q\+\_\+\+E\+R\+R\+OR} \hyperlink{hs-helper_8c_ac5b0370643c520377afd3fd4891918d2}{get\+\_\+value\+\_\+int32} (const struct afb\+\_\+req request, const char $\ast$source, int32\+\_\+t $\ast$out\+\_\+id)
+\item
+void \hyperlink{hs-helper_8c_a1ba31a6a94515ff1730ba0043a67d59e}{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object} (struct json\+\_\+object $\ast$j\+\_\+obj, int count,...)
+\item
+void \hyperlink{hs-helper_8c_a8777c53f1d4d5412f19b134ad85ffedf}{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+str} (struct json\+\_\+object $\ast$j\+\_\+obj, int count,...)
+\item
+void \hyperlink{hs-helper_8c_ae83604a37134e7bdee3ce4f10bb0b47a}{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+func} (struct json\+\_\+object $\ast$j\+\_\+obj, const char $\ast$verb\+\_\+name, int count,...)
+\item
+int \hyperlink{hs-helper_8c_a2ff1b894941c3b461ca8119079c4146a}{hs\+\_\+search\+\_\+event\+\_\+name\+\_\+index} (const char $\ast$value)
+\end{DoxyCompactItemize}
+
+
+\subsection{Function Documentation}
+\mbox{\Hypertarget{hs-helper_8c_a2e62366684e39ea94436bf017e416827}\label{hs-helper_8c_a2e62366684e39ea94436bf017e416827}}
+\index{hs-\/helper.\+c@{hs-\/helper.\+c}!get\+\_\+value\+\_\+int16@{get\+\_\+value\+\_\+int16}}
+\index{get\+\_\+value\+\_\+int16@{get\+\_\+value\+\_\+int16}!hs-\/helper.\+c@{hs-\/helper.\+c}}
+\subsubsection{\texorpdfstring{get\+\_\+value\+\_\+int16()}{get\_value\_int16()}}
+{\footnotesize\ttfamily \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899}{R\+E\+Q\+\_\+\+E\+R\+R\+OR} get\+\_\+value\+\_\+int16 (\begin{DoxyParamCaption}\item[{const struct afb\+\_\+req}]{request, }\item[{const char $\ast$}]{source, }\item[{int16\+\_\+t $\ast$}]{out\+\_\+id }\end{DoxyParamCaption})}
+
+
+
+Definition at line 48 of file hs-\/helper.\+c.
+
+
+\begin{DoxyCode}
+49 \{
+50 \textcolor{keywordtype}{char}* endptr;
+51 \textcolor{keyword}{const} \textcolor{keywordtype}{char}* tmp = afb\_req\_value (request, source);
+52 \textcolor{keywordflow}{if}(!tmp)
+53 \{
+54 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899a96a855966bc63045222b3dcac524cee1}{REQ\_FAIL};
+55 \}
+56 \textcolor{keywordtype}{long} tmp\_id = strtol(tmp,&endptr,10);
+57
+58 \textcolor{comment}{/* error check of range */}
+59 \textcolor{keywordflow}{if}( (tmp\_id > INT16\_MAX) || (tmp\_id < INT16\_MIN) )
+60 \{
+61 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899add1c84bf80c5f80741ee8f37fef1e12b}{OUT\_RANGE};
+62 \}
+63 \textcolor{keywordflow}{if}(*endptr != \textcolor{charliteral}{'\(\backslash\)0'})
+64 \{
+65 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899aa223eed65c9bee2bf1f4cdecaf90d66a}{NOT\_NUMBER};
+66 \}
+67
+68 *out\_id = (int16\_t)tmp\_id;
+69 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899ab093abb14c097b3b7719debb04d5e8ee}{REQ\_OK};
+70 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{hs-helper_8c_ac5b0370643c520377afd3fd4891918d2}\label{hs-helper_8c_ac5b0370643c520377afd3fd4891918d2}}
+\index{hs-\/helper.\+c@{hs-\/helper.\+c}!get\+\_\+value\+\_\+int32@{get\+\_\+value\+\_\+int32}}
+\index{get\+\_\+value\+\_\+int32@{get\+\_\+value\+\_\+int32}!hs-\/helper.\+c@{hs-\/helper.\+c}}
+\subsubsection{\texorpdfstring{get\+\_\+value\+\_\+int32()}{get\_value\_int32()}}
+{\footnotesize\ttfamily \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899}{R\+E\+Q\+\_\+\+E\+R\+R\+OR} get\+\_\+value\+\_\+int32 (\begin{DoxyParamCaption}\item[{const struct afb\+\_\+req}]{request, }\item[{const char $\ast$}]{source, }\item[{int32\+\_\+t $\ast$}]{out\+\_\+id }\end{DoxyParamCaption})}
+
+
+
+Definition at line 72 of file hs-\/helper.\+c.
+
+
+\begin{DoxyCode}
+73 \{
+74 \textcolor{keywordtype}{char}* endptr;
+75 \textcolor{keyword}{const} \textcolor{keywordtype}{char}* tmp = afb\_req\_value (request, source);
+76 \textcolor{keywordflow}{if}(!tmp)
+77 \{
+78 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899a96a855966bc63045222b3dcac524cee1}{REQ\_FAIL};
+79 \}
+80 \textcolor{keywordtype}{long} tmp\_id = strtol(tmp,&endptr,10);
+81
+82 \textcolor{comment}{/* error check of range */}
+83 \textcolor{keywordflow}{if}( (tmp\_id > INT32\_MAX) || (tmp\_id < INT32\_MIN) )
+84 \{
+85 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899add1c84bf80c5f80741ee8f37fef1e12b}{OUT\_RANGE};
+86 \}
+87 \textcolor{keywordflow}{if}(*endptr != \textcolor{charliteral}{'\(\backslash\)0'})
+88 \{
+89 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899aa223eed65c9bee2bf1f4cdecaf90d66a}{NOT\_NUMBER};
+90 \}
+91
+92 *out\_id = (int32\_t)tmp\_id;
+93 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899ab093abb14c097b3b7719debb04d5e8ee}{REQ\_OK};
+94 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{hs-helper_8c_a649900645417f2df3a70b9ad67529f53}\label{hs-helper_8c_a649900645417f2df3a70b9ad67529f53}}
+\index{hs-\/helper.\+c@{hs-\/helper.\+c}!get\+\_\+value\+\_\+uint16@{get\+\_\+value\+\_\+uint16}}
+\index{get\+\_\+value\+\_\+uint16@{get\+\_\+value\+\_\+uint16}!hs-\/helper.\+c@{hs-\/helper.\+c}}
+\subsubsection{\texorpdfstring{get\+\_\+value\+\_\+uint16()}{get\_value\_uint16()}}
+{\footnotesize\ttfamily \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899}{R\+E\+Q\+\_\+\+E\+R\+R\+OR} get\+\_\+value\+\_\+uint16 (\begin{DoxyParamCaption}\item[{const struct afb\+\_\+req}]{request, }\item[{const char $\ast$}]{source, }\item[{uint16\+\_\+t $\ast$}]{out\+\_\+id }\end{DoxyParamCaption})}
+
+
+
+Definition at line 24 of file hs-\/helper.\+c.
+
+
+\begin{DoxyCode}
+25 \{
+26 \textcolor{keywordtype}{char}* endptr;
+27 \textcolor{keyword}{const} \textcolor{keywordtype}{char}* tmp = afb\_req\_value (request, source);
+28 \textcolor{keywordflow}{if}(!tmp)
+29 \{
+30 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899a96a855966bc63045222b3dcac524cee1}{REQ\_FAIL};
+31 \}
+32 \textcolor{keywordtype}{long} tmp\_id = strtol(tmp,&endptr,10);
+33
+34 \textcolor{comment}{/* error check of range */}
+35 \textcolor{keywordflow}{if}( (tmp\_id > UINT16\_MAX) || (tmp\_id < 0) )
+36 \{
+37 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899add1c84bf80c5f80741ee8f37fef1e12b}{OUT\_RANGE};
+38 \}
+39 \textcolor{keywordflow}{if}(*endptr != \textcolor{charliteral}{'\(\backslash\)0'})
+40 \{
+41 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899aa223eed65c9bee2bf1f4cdecaf90d66a}{NOT\_NUMBER};
+42 \}
+43
+44 *out\_id = (uint16\_t)tmp\_id;
+45 \textcolor{keywordflow}{return} \hyperlink{hs-helper_8h_aa49f1dbbf26f01627a5737cf43aad899ab093abb14c097b3b7719debb04d5e8ee}{REQ\_OK};
+46 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{hs-helper_8c_a1ba31a6a94515ff1730ba0043a67d59e}\label{hs-helper_8c_a1ba31a6a94515ff1730ba0043a67d59e}}
+\index{hs-\/helper.\+c@{hs-\/helper.\+c}!hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object@{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object}}
+\index{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object@{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object}!hs-\/helper.\+c@{hs-\/helper.\+c}}
+\subsubsection{\texorpdfstring{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object()}{hs\_add\_object\_to\_json\_object()}}
+{\footnotesize\ttfamily void hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object (\begin{DoxyParamCaption}\item[{struct json\+\_\+object $\ast$}]{j\+\_\+obj, }\item[{int}]{count, }\item[{}]{... }\end{DoxyParamCaption})}
+
+
+
+Definition at line 96 of file hs-\/helper.\+c.
+
+
+\begin{DoxyCode}
+97 \{
+98 va\_list args;
+99 va\_start(args, count);
+100 \textcolor{keywordflow}{for}(\textcolor{keywordtype}{int} i = 0; i < count; ++i )
+101 \{
+102 \textcolor{keywordtype}{char} *key = va\_arg(args, \textcolor{keywordtype}{char}*);
+103 \textcolor{keywordtype}{int} value = va\_arg(args, \textcolor{keywordtype}{int});
+104 json\_object\_object\_add(j\_obj, key, json\_object\_new\_int((int32\_t)value));
+105 ++i;
+106 \}
+107 va\_end(args);
+108 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{hs-helper_8c_ae83604a37134e7bdee3ce4f10bb0b47a}\label{hs-helper_8c_ae83604a37134e7bdee3ce4f10bb0b47a}}
+\index{hs-\/helper.\+c@{hs-\/helper.\+c}!hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+func@{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+func}}
+\index{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+func@{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+func}!hs-\/helper.\+c@{hs-\/helper.\+c}}
+\subsubsection{\texorpdfstring{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+func()}{hs\_add\_object\_to\_json\_object\_func()}}
+{\footnotesize\ttfamily void hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+func (\begin{DoxyParamCaption}\item[{struct json\+\_\+object $\ast$}]{j\+\_\+obj, }\item[{const char $\ast$}]{verb\+\_\+name, }\item[{int}]{count, }\item[{}]{... }\end{DoxyParamCaption})}
+
+
+
+Definition at line 125 of file hs-\/helper.\+c.
+
+
+\begin{DoxyCode}
+126 \{
+127 va\_list args;
+128 va\_start(args, count);
+129
+130 json\_object\_object\_add(j\_obj,\textcolor{stringliteral}{"verb"}, json\_object\_new\_string(verb\_name));
+131
+132 \textcolor{keywordflow}{for}(\textcolor{keywordtype}{int} i = 0; i < count; ++i )
+133 \{
+134 \textcolor{keywordtype}{char} *key = va\_arg(args, \textcolor{keywordtype}{char}*);
+135 \textcolor{keywordtype}{int} value = va\_arg(args, \textcolor{keywordtype}{int});
+136 json\_object\_object\_add(j\_obj, key, json\_object\_new\_int((int32\_t)value));
+137 ++i;
+138 \}
+139 va\_end(args);
+140 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{hs-helper_8c_a8777c53f1d4d5412f19b134ad85ffedf}\label{hs-helper_8c_a8777c53f1d4d5412f19b134ad85ffedf}}
+\index{hs-\/helper.\+c@{hs-\/helper.\+c}!hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+str@{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+str}}
+\index{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+str@{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+str}!hs-\/helper.\+c@{hs-\/helper.\+c}}
+\subsubsection{\texorpdfstring{hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+str()}{hs\_add\_object\_to\_json\_object\_str()}}
+{\footnotesize\ttfamily void hs\+\_\+add\+\_\+object\+\_\+to\+\_\+json\+\_\+object\+\_\+str (\begin{DoxyParamCaption}\item[{struct json\+\_\+object $\ast$}]{j\+\_\+obj, }\item[{int}]{count, }\item[{}]{... }\end{DoxyParamCaption})}
+
+
+
+Definition at line 110 of file hs-\/helper.\+c.
+
+
+\begin{DoxyCode}
+111 \{
+112 va\_list args;
+113 va\_start(args, count);
+114 \textcolor{keywordflow}{for}(\textcolor{keywordtype}{int} i = 0; i < count; ++i )
+115 \{
+116 \textcolor{keywordtype}{char} *key = va\_arg(args, \textcolor{keywordtype}{char}*);
+117 \textcolor{keywordtype}{char} *value = va\_arg(args, \textcolor{keywordtype}{char}*);
+118 json\_object\_object\_add(j\_obj, key, json\_object\_new\_string(value));
+119 ++i;
+120 \}
+121 va\_end(args);
+122 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{hs-helper_8c_a2ff1b894941c3b461ca8119079c4146a}\label{hs-helper_8c_a2ff1b894941c3b461ca8119079c4146a}}
+\index{hs-\/helper.\+c@{hs-\/helper.\+c}!hs\+\_\+search\+\_\+event\+\_\+name\+\_\+index@{hs\+\_\+search\+\_\+event\+\_\+name\+\_\+index}}
+\index{hs\+\_\+search\+\_\+event\+\_\+name\+\_\+index@{hs\+\_\+search\+\_\+event\+\_\+name\+\_\+index}!hs-\/helper.\+c@{hs-\/helper.\+c}}
+\subsubsection{\texorpdfstring{hs\+\_\+search\+\_\+event\+\_\+name\+\_\+index()}{hs\_search\_event\_name\_index()}}
+{\footnotesize\ttfamily int hs\+\_\+search\+\_\+event\+\_\+name\+\_\+index (\begin{DoxyParamCaption}\item[{const char $\ast$}]{value }\end{DoxyParamCaption})}
+
+
+
+Definition at line 142 of file hs-\/helper.\+c.
+
+
+\begin{DoxyCode}
+143 \{
+144 \textcolor{keywordtype}{size\_t} buf\_size = 50;
+145 \textcolor{keywordtype}{size\_t} size = \textcolor{keyword}{sizeof} \hyperlink{hs-helper_8h_a0cd84b1a2184c9b84d1b7bf24582f28e}{evlist} / \textcolor{keyword}{sizeof} *\hyperlink{hs-helper_8h_a0cd84b1a2184c9b84d1b7bf24582f28e}{evlist};
+146 \textcolor{keywordtype}{int} ret = -1;
+147 \textcolor{keywordflow}{for}(\textcolor{keywordtype}{size\_t} i = 0 ; i < size ; ++i)
+148 \{
+149 \textcolor{keywordflow}{if}(!strncmp(value, \hyperlink{hs-helper_8h_a0cd84b1a2184c9b84d1b7bf24582f28e}{evlist}[i], buf\_size))
+150 \{
+151 ret = i;
+152 \textcolor{keywordflow}{break};
+153 \}
+154 \}
+155 \textcolor{keywordflow}{return} ret;
+156 \}
+\end{DoxyCode}
diff --git a/doc/api-ref/latex/de/dd0/class_lib_home_screen.tex b/doc/api-ref/latex/de/dd0/class_lib_home_screen.tex
new file mode 100644
index 0000000..5dba568
--- /dev/null
+++ b/doc/api-ref/latex/de/dd0/class_lib_home_screen.tex
@@ -0,0 +1,731 @@
+\hypertarget{class_lib_home_screen}{}\section{Lib\+Home\+Screen Class Reference}
+\label{class_lib_home_screen}\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+
+
+{\ttfamily \#include $<$libhomescreen.\+hpp$>$}
+
+\subsection*{Public Types}
+\begin{DoxyCompactItemize}
+\item
+enum \hyperlink{class_lib_home_screen_a82616c91ac211d2ad08e709b524bf154}{Event\+Type} \{ \hyperlink{class_lib_home_screen_a82616c91ac211d2ad08e709b524bf154a4b0a82d501e4db5fbfe25c254c92896f}{Event\+\_\+\+Tap\+Shortcut} = 1,
+\hyperlink{class_lib_home_screen_a82616c91ac211d2ad08e709b524bf154aea56fa32a124a8ddcbea127755280a1d}{Event\+\_\+\+On\+Screen\+Message}
+ \}
+\item
+using \hyperlink{class_lib_home_screen_ae99dee1e03d494d59d26c9f17078e01f}{handler\+\_\+func} = std\+::function$<$ void(const char $\ast$)$>$
+\end{DoxyCompactItemize}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{class_lib_home_screen_a724bd949c4154fad041f96a15ef0f5dc}{Lib\+Home\+Screen} ()
+\item
+\hyperlink{class_lib_home_screen_a249902aebf71a5383ca8ec6ae558d095}{$\sim$\+Lib\+Home\+Screen} ()
+\item
+\hyperlink{class_lib_home_screen_a0fff2f703c8ce184eb9edd133e0f4137}{Lib\+Home\+Screen} (const \hyperlink{class_lib_home_screen}{Lib\+Home\+Screen} \&)=delete
+\item
+\hyperlink{class_lib_home_screen}{Lib\+Home\+Screen} \& \hyperlink{class_lib_home_screen_a23bc17798453cfca50904562736f6b25}{operator=} (const \hyperlink{class_lib_home_screen}{Lib\+Home\+Screen} \&)=delete
+\item
+int \hyperlink{class_lib_home_screen_a6a57b573cc767725762ba9beab032220}{init} (const int port, const std\+::string \&token)
+\item
+int \hyperlink{class_lib_home_screen_a32d3282898d0f04151c24b4103511e00}{run\+Eventloop} ()
+\item
+int \hyperlink{class_lib_home_screen_afb571c9577087b47065eb23e7fdbc903}{tap\+Shortcut} (const char $\ast$application\+\_\+name)
+\item
+int \hyperlink{class_lib_home_screen_ac336482036a72b51a822725f1929523c}{on\+Screen\+Message} (const char $\ast$display\+\_\+message)
+\item
+void \hyperlink{class_lib_home_screen_ab1b0e08bf35415de9064afed899e9f85}{set\+\_\+event\+\_\+handler} (enum \hyperlink{class_lib_home_screen_a82616c91ac211d2ad08e709b524bf154}{Event\+Type} et, \hyperlink{class_lib_home_screen_ae99dee1e03d494d59d26c9f17078e01f}{handler\+\_\+func} f)
+\item
+void \hyperlink{class_lib_home_screen_a2789e8a5372202cc36f48e71dbb9b7cf}{register\+Callback} (void($\ast$event\+\_\+cb)(const std\+::string \&\hyperlink{structevent}{event}, struct json\+\_\+object $\ast$event\+\_\+contents), void($\ast$reply\+\_\+cb)(struct json\+\_\+object $\ast$reply\+\_\+contents), void($\ast$hangup\+\_\+cb)(void)=nullptr)
+\item
+int \hyperlink{class_lib_home_screen_a527b49dcfe581be6275d0eb2236ba37f}{call} (const std\+::string \&verb, struct json\+\_\+object $\ast$arg)
+\item
+int \hyperlink{class_lib_home_screen_ab5e8e8ab7d53e0f114e9e907fcbb7643}{call} (const char $\ast$verb, struct json\+\_\+object $\ast$arg)
+\item
+int \hyperlink{class_lib_home_screen_aa4c189807b75d070f567967f0d690738}{subscribe} (const std\+::string \&event\+\_\+name)
+\item
+int \hyperlink{class_lib_home_screen_aac03a45cbd453ba69ddb00c1016930a6}{unsubscribe} (const std\+::string \&event\+\_\+name)
+\item
+void \hyperlink{class_lib_home_screen_ab1c1fa69f24b981e824dd9fb810c4b74}{on\+\_\+hangup} (void $\ast$closure, struct afb\+\_\+wsj1 $\ast$wsj)
+\item
+void \hyperlink{class_lib_home_screen_a608638eb87b2772a3dcc92d8ca8f3596}{on\+\_\+call} (void $\ast$closure, const char $\ast$api, const char $\ast$verb, struct afb\+\_\+wsj1\+\_\+msg $\ast$msg)
+\item
+void \hyperlink{class_lib_home_screen_a9c4885b51b43ab24a548d49fb3ab2de3}{on\+\_\+event} (void $\ast$closure, const char $\ast$\hyperlink{structevent}{event}, struct afb\+\_\+wsj1\+\_\+msg $\ast$msg)
+\item
+void \hyperlink{class_lib_home_screen_a248d9648c6186287a7632ec1c75fc9c5}{on\+\_\+reply} (void $\ast$closure, struct afb\+\_\+wsj1\+\_\+msg $\ast$msg)
+\end{DoxyCompactItemize}
+\subsection*{Static Public Attributes}
+\begin{DoxyCompactItemize}
+\item
+static const std\+::vector$<$ std\+::string $>$ \hyperlink{class_lib_home_screen_a5593ff5ac78f6495ccb649904cf0ab08}{api\+\_\+list}
+\item
+static const std\+::vector$<$ std\+::string $>$ \hyperlink{class_lib_home_screen_a6a6d8a4d33a006a08652e7377a4c29e9}{event\+\_\+list}
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+
+
+Definition at line 32 of file libhomescreen.\+hpp.
+
+
+
+\subsection{Member Typedef Documentation}
+\mbox{\Hypertarget{class_lib_home_screen_ae99dee1e03d494d59d26c9f17078e01f}\label{class_lib_home_screen_ae99dee1e03d494d59d26c9f17078e01f}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!handler\+\_\+func@{handler\+\_\+func}}
+\index{handler\+\_\+func@{handler\+\_\+func}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\subsubsection{\texorpdfstring{handler\+\_\+func}{handler\_func}}
+{\footnotesize\ttfamily using \hyperlink{class_lib_home_screen_ae99dee1e03d494d59d26c9f17078e01f}{Lib\+Home\+Screen\+::handler\+\_\+func} = std\+::function$<$void(const char$\ast$)$>$}
+
+
+
+Definition at line 41 of file libhomescreen.\+hpp.
+
+
+
+\subsection{Member Enumeration Documentation}
+\mbox{\Hypertarget{class_lib_home_screen_a82616c91ac211d2ad08e709b524bf154}\label{class_lib_home_screen_a82616c91ac211d2ad08e709b524bf154}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!Event\+Type@{Event\+Type}}
+\index{Event\+Type@{Event\+Type}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\subsubsection{\texorpdfstring{Event\+Type}{EventType}}
+{\footnotesize\ttfamily enum \hyperlink{class_lib_home_screen_a82616c91ac211d2ad08e709b524bf154}{Lib\+Home\+Screen\+::\+Event\+Type}}
+
+\begin{DoxyEnumFields}{Enumerator}
+\raisebox{\heightof{T}}[0pt][0pt]{\index{Event\+\_\+\+Tap\+Shortcut@{Event\+\_\+\+Tap\+Shortcut}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!Event\+\_\+\+Tap\+Shortcut@{Event\+\_\+\+Tap\+Shortcut}}}\mbox{\Hypertarget{class_lib_home_screen_a82616c91ac211d2ad08e709b524bf154a4b0a82d501e4db5fbfe25c254c92896f}\label{class_lib_home_screen_a82616c91ac211d2ad08e709b524bf154a4b0a82d501e4db5fbfe25c254c92896f}}
+Event\+\_\+\+Tap\+Shortcut&\\
+\hline
+
+\raisebox{\heightof{T}}[0pt][0pt]{\index{Event\+\_\+\+On\+Screen\+Message@{Event\+\_\+\+On\+Screen\+Message}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!Event\+\_\+\+On\+Screen\+Message@{Event\+\_\+\+On\+Screen\+Message}}}\mbox{\Hypertarget{class_lib_home_screen_a82616c91ac211d2ad08e709b524bf154aea56fa32a124a8ddcbea127755280a1d}\label{class_lib_home_screen_a82616c91ac211d2ad08e709b524bf154aea56fa32a124a8ddcbea127755280a1d}}
+Event\+\_\+\+On\+Screen\+Message&\\
+\hline
+
+\end{DoxyEnumFields}
+
+
+Definition at line 43 of file libhomescreen.\+hpp.
+
+
+\begin{DoxyCode}
+43 \{
+44 \hyperlink{class_lib_home_screen_a82616c91ac211d2ad08e709b524bf154a4b0a82d501e4db5fbfe25c254c92896f}{Event\_TapShortcut} = 1,
+45 \hyperlink{class_lib_home_screen_a82616c91ac211d2ad08e709b524bf154aea56fa32a124a8ddcbea127755280a1d}{Event\_OnScreenMessage}
+46 \};
+\end{DoxyCode}
+
+
+\subsection{Constructor \& Destructor Documentation}
+\mbox{\Hypertarget{class_lib_home_screen_a724bd949c4154fad041f96a15ef0f5dc}\label{class_lib_home_screen_a724bd949c4154fad041f96a15ef0f5dc}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\subsubsection{\texorpdfstring{Lib\+Home\+Screen()}{LibHomeScreen()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily Lib\+Home\+Screen\+::\+Lib\+Home\+Screen (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+constructor
+
+Definition at line 85 of file libhomescreen.\+cpp.
+
+
+\begin{DoxyCode}
+86 \{
+87
+88 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{class_lib_home_screen_a249902aebf71a5383ca8ec6ae558d095}\label{class_lib_home_screen_a249902aebf71a5383ca8ec6ae558d095}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!````~Lib\+Home\+Screen@{$\sim$\+Lib\+Home\+Screen}}
+\index{````~Lib\+Home\+Screen@{$\sim$\+Lib\+Home\+Screen}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\subsubsection{\texorpdfstring{$\sim$\+Lib\+Home\+Screen()}{~LibHomeScreen()}}
+{\footnotesize\ttfamily Lib\+Home\+Screen\+::$\sim$\+Lib\+Home\+Screen (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+destructor
+
+Definition at line 93 of file libhomescreen.\+cpp.
+
+
+\begin{DoxyCode}
+94 \{
+95 \textcolor{keywordflow}{if}(mploop)
+96 \{
+97 sd\_event\_unref(mploop);
+98 \}
+99 \textcolor{keywordflow}{if}(sp\_websock != NULL)
+100 \{
+101 free(sp\_websock);
+102 \}
+103 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{class_lib_home_screen_a0fff2f703c8ce184eb9edd133e0f4137}\label{class_lib_home_screen_a0fff2f703c8ce184eb9edd133e0f4137}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\subsubsection{\texorpdfstring{Lib\+Home\+Screen()}{LibHomeScreen()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily Lib\+Home\+Screen\+::\+Lib\+Home\+Screen (\begin{DoxyParamCaption}\item[{const \hyperlink{class_lib_home_screen}{Lib\+Home\+Screen} \&}]{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [delete]}}
+
+
+
+\subsection{Member Function Documentation}
+\mbox{\Hypertarget{class_lib_home_screen_a527b49dcfe581be6275d0eb2236ba37f}\label{class_lib_home_screen_a527b49dcfe581be6275d0eb2236ba37f}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!call@{call}}
+\index{call@{call}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\subsubsection{\texorpdfstring{call()}{call()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily int Lib\+Home\+Screen\+::call (\begin{DoxyParamCaption}\item[{const std\+::string \&}]{verb, }\item[{struct json\+\_\+object $\ast$}]{arg }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{class_lib_home_screen_ab5e8e8ab7d53e0f114e9e907fcbb7643}\label{class_lib_home_screen_ab5e8e8ab7d53e0f114e9e907fcbb7643}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!call@{call}}
+\index{call@{call}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\subsubsection{\texorpdfstring{call()}{call()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily int Lib\+Home\+Screen\+::call (\begin{DoxyParamCaption}\item[{const char $\ast$}]{verb, }\item[{struct json\+\_\+object $\ast$}]{arg }\end{DoxyParamCaption})}
+
+This function calls the A\+PI of Home\+Screen via Web\+Socket This function is overload function of \char`\"{}call\char`\"{}
+
+\subparagraph*{Parameters}
+
+
+\begin{DoxyItemize}
+\item verb \mbox{[}in\mbox{]} \+: This argument should be specified to the A\+PI name (e.\+g. \char`\"{}tap\+\_\+shortcut\char`\"{})
+\item arg \mbox{[}in\mbox{]} \+: This argument should be specified to the argument of A\+PI. And this argument expects J\+S\+ON object
+\end{DoxyItemize}
+
+\subparagraph*{Return}
+
+
+\begin{DoxyItemize}
+\item Returns 0 on success or -\/1 in case of error.
+\end{DoxyItemize}
+
+\subparagraph*{Note}
+
+To call Home\+Screen\textquotesingle{}s A\+P\+Is, the application should set its function name, arguments to J\+S\+ON format.
+
+Definition at line 369 of file libhomescreen.\+cpp.
+
+
+\begin{DoxyCode}
+370 \{
+371 \textcolor{keywordtype}{int} ret;
+372 \textcolor{keywordflow}{if}(!sp\_websock)
+373 \{
+374 \textcolor{keywordflow}{return} -1;
+375 \}
+376 \textcolor{keywordflow}{if} (!\hyperlink{libhomescreen_8cpp_a7a2176c3d71fec0f09dcb2aa0866b17e}{has\_verb}(\textcolor{keywordtype}{string}(verb)))
+377 \{
+378 \hyperlink{libhomescreen_8cpp_a797aa3053bd6a29819d44f8fad8a5eca}{ELOG}(\textcolor{stringliteral}{"verb doesn't exit"});
+379 \textcolor{keywordflow}{return} -1;
+380 \}
+381 ret = afb\_wsj1\_call\_j(sp\_websock, \hyperlink{libhomescreen_8cpp_a1e2d6e77dd8f0162f830058579eab42f}{API}, verb, arg, \hyperlink{libhomescreen_8cpp_a7778933bffa862c63fa0a1b8219faa8b}{\_on\_reply\_static}, \textcolor{keyword}{this});
+382 \textcolor{keywordflow}{if} (ret < 0) \{
+383 \hyperlink{libhomescreen_8cpp_a797aa3053bd6a29819d44f8fad8a5eca}{ELOG}(\textcolor{stringliteral}{"Failed to call verb:%s"},verb);
+384 \}
+385 \textcolor{keywordflow}{return} ret;
+386 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{class_lib_home_screen_a6a57b573cc767725762ba9beab032220}\label{class_lib_home_screen_a6a57b573cc767725762ba9beab032220}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!init@{init}}
+\index{init@{init}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\subsubsection{\texorpdfstring{init()}{init()}}
+{\footnotesize\ttfamily int Lib\+Home\+Screen\+::init (\begin{DoxyParamCaption}\item[{const int}]{port, }\item[{const std\+::string \&}]{token }\end{DoxyParamCaption})}
+
+This function is initializer
+
+\subparagraph*{Parameters}
+
+
+\begin{DoxyItemize}
+\item port \mbox{[}in\mbox{]} \+: This argument should be specified to the port number to be used for websocket
+\item token \mbox{[}in\mbox{]} \+: This argument should be specified to the token to be used for websocket
+\end{DoxyItemize}
+
+\subparagraph*{Return}
+
+Nothing
+
+\subparagraph*{Note}
+
+Use this constructor
+
+Definition at line 119 of file libhomescreen.\+cpp.
+
+
+\begin{DoxyCode}
+120 \{
+121 \textcolor{keywordtype}{int} ret = 0;
+122 \textcolor{keywordflow}{if}(port > 0 && token.size() > 0)
+123 \{
+124 mport = port;
+125 mtoken = token;
+126 \}
+127 \textcolor{keywordflow}{else}
+128 \{
+129 \hyperlink{libhomescreen_8cpp_a797aa3053bd6a29819d44f8fad8a5eca}{ELOG}(\textcolor{stringliteral}{"port and token should be > 0, Initial port and token uses."});
+130 \}
+131
+132 ret = initialize\_websocket();
+133 \textcolor{keywordflow}{if}(ret != 0 )
+134 \{
+135 \hyperlink{libhomescreen_8cpp_a797aa3053bd6a29819d44f8fad8a5eca}{ELOG}(\textcolor{stringliteral}{"Failed to initialize websocket"});
+136 \}
+137 \textcolor{keywordflow}{else}\{
+138 \hyperlink{libhomescreen_8cpp_a4e42b2f5af2174dd24f958351becf63d}{DLOG}(\textcolor{stringliteral}{"Initialized"});
+139 \}
+140
+141 \textcolor{keywordflow}{return} ret;
+142 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{class_lib_home_screen_a608638eb87b2772a3dcc92d8ca8f3596}\label{class_lib_home_screen_a608638eb87b2772a3dcc92d8ca8f3596}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!on\+\_\+call@{on\+\_\+call}}
+\index{on\+\_\+call@{on\+\_\+call}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\subsubsection{\texorpdfstring{on\+\_\+call()}{on\_call()}}
+{\footnotesize\ttfamily void Lib\+Home\+Screen\+::on\+\_\+call (\begin{DoxyParamCaption}\item[{void $\ast$}]{closure, }\item[{const char $\ast$}]{api, }\item[{const char $\ast$}]{verb, }\item[{struct afb\+\_\+wsj1\+\_\+msg $\ast$}]{msg }\end{DoxyParamCaption})}
+
+
+
+Definition at line 457 of file libhomescreen.\+cpp.
+
+
+\begin{DoxyCode}
+458 \{
+459 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{class_lib_home_screen_a9c4885b51b43ab24a548d49fb3ab2de3}\label{class_lib_home_screen_a9c4885b51b43ab24a548d49fb3ab2de3}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!on\+\_\+event@{on\+\_\+event}}
+\index{on\+\_\+event@{on\+\_\+event}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\subsubsection{\texorpdfstring{on\+\_\+event()}{on\_event()}}
+{\footnotesize\ttfamily void Lib\+Home\+Screen\+::on\+\_\+event (\begin{DoxyParamCaption}\item[{void $\ast$}]{closure, }\item[{const char $\ast$}]{event, }\item[{struct afb\+\_\+wsj1\+\_\+msg $\ast$}]{msg }\end{DoxyParamCaption})}
+
+
+
+Definition at line 467 of file libhomescreen.\+cpp.
+
+
+\begin{DoxyCode}
+468 \{
+469 cout << \textcolor{stringliteral}{"[libhomescreen on\_event]: "} << \textcolor{keyword}{event} << \textcolor{stringliteral}{" ("} << afb\_wsj1\_msg\_object\_s(msg) << \textcolor{stringliteral}{")"} << endl;
+470
+471 \textcolor{keywordflow}{if} (strstr(\hyperlink{structevent}{event}, \hyperlink{libhomescreen_8cpp_a1e2d6e77dd8f0162f830058579eab42f}{API}) == NULL) \{
+472 \textcolor{keywordflow}{return};
+473 \}
+474
+475 \textcolor{keyword}{struct }json\_object* ev\_contents = afb\_wsj1\_msg\_object\_j(msg);
+476 \textcolor{keyword}{struct }json\_object *json\_data = json\_object\_object\_get(ev\_contents, \textcolor{stringliteral}{"data"});
+477
+478 \textcolor{keywordflow}{if}(onEvent != \textcolor{keyword}{nullptr})
+479 \{
+480 \textcolor{keyword}{const} \textcolor{keywordtype}{string} ev(\hyperlink{structevent}{event});
+481 onEvent(ev, ev\_contents);
+482 \}
+483
+484 \textcolor{keyword}{const} \textcolor{keywordtype}{char}* event\_only = strchr(\hyperlink{structevent}{event}, \textcolor{charliteral}{'/'});
+485 \textcolor{keywordflow}{if} (event\_only != \textcolor{keyword}{nullptr}) \{
+486 event\_only = event\_only + 1;
+487 \}
+488
+489 \textcolor{keywordflow}{if} (strcasecmp(event\_only, \hyperlink{class_lib_home_screen_a6a6d8a4d33a006a08652e7377a4c29e9}{LibHomeScreen::event\_list}[0].c\_str()) == 0) \{
+490 \textcolor{keyword}{auto} i = this->handlers.find(\hyperlink{class_lib_home_screen_a82616c91ac211d2ad08e709b524bf154a4b0a82d501e4db5fbfe25c254c92896f}{Event\_TapShortcut});
+491
+492 \textcolor{keyword}{struct }json\_object *json\_application\_name = json\_object\_object\_get(json\_data, \textcolor{stringliteral}{"application\_name"});
+493 \textcolor{keyword}{const} \textcolor{keywordtype}{char}* application\_name = json\_object\_get\_string(json\_application\_name);
+494
+495 \textcolor{keywordflow}{if} ( i != this->handlers.end() ) \{
+496 i->second(application\_name);
+497 \}
+498 \}
+499 \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (strcasecmp(event\_only, \hyperlink{class_lib_home_screen_a6a6d8a4d33a006a08652e7377a4c29e9}{LibHomeScreen::event\_list}[1].c\_str()) == 0) \{
+500
+501 \textcolor{keyword}{auto} i = this->handlers.find(\hyperlink{class_lib_home_screen_a82616c91ac211d2ad08e709b524bf154aea56fa32a124a8ddcbea127755280a1d}{Event\_OnScreenMessage});
+502
+503 \textcolor{keyword}{struct }json\_object *json\_display\_message = json\_object\_object\_get(json\_data, \textcolor{stringliteral}{"display\_message"});
+504 \textcolor{keyword}{const} \textcolor{keywordtype}{char}* display\_message = json\_object\_get\_string(json\_display\_message);
+505
+506 \textcolor{keywordflow}{if} ( i != this->handlers.end() ) \{
+507 i->second(display\_message);
+508 \}
+509
+510 \}
+511
+512 json\_object\_put(ev\_contents);
+513 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{class_lib_home_screen_ab1c1fa69f24b981e824dd9fb810c4b74}\label{class_lib_home_screen_ab1c1fa69f24b981e824dd9fb810c4b74}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!on\+\_\+hangup@{on\+\_\+hangup}}
+\index{on\+\_\+hangup@{on\+\_\+hangup}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\subsubsection{\texorpdfstring{on\+\_\+hangup()}{on\_hangup()}}
+{\footnotesize\ttfamily void Lib\+Home\+Screen\+::on\+\_\+hangup (\begin{DoxyParamCaption}\item[{void $\ast$}]{closure, }\item[{struct afb\+\_\+wsj1 $\ast$}]{wsj }\end{DoxyParamCaption})}
+
+
+
+Definition at line 448 of file libhomescreen.\+cpp.
+
+
+\begin{DoxyCode}
+449 \{
+450 \hyperlink{libhomescreen_8cpp_a4e42b2f5af2174dd24f958351becf63d}{DLOG}(\textcolor{stringliteral}{"%s called"}, \_\_FUNCTION\_\_);
+451 \textcolor{keywordflow}{if}(onHangup != \textcolor{keyword}{nullptr})
+452 \{
+453 onHangup();
+454 \}
+455 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{class_lib_home_screen_a248d9648c6186287a7632ec1c75fc9c5}\label{class_lib_home_screen_a248d9648c6186287a7632ec1c75fc9c5}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!on\+\_\+reply@{on\+\_\+reply}}
+\index{on\+\_\+reply@{on\+\_\+reply}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\subsubsection{\texorpdfstring{on\+\_\+reply()}{on\_reply()}}
+{\footnotesize\ttfamily void Lib\+Home\+Screen\+::on\+\_\+reply (\begin{DoxyParamCaption}\item[{void $\ast$}]{closure, }\item[{struct afb\+\_\+wsj1\+\_\+msg $\ast$}]{msg }\end{DoxyParamCaption})}
+
+msg is like (\{\char`\"{}response\char`\"{}\+:\{\char`\"{}verb\char`\"{}\+:\char`\"{}subscribe\char`\"{},\char`\"{}error\char`\"{}\+:0\},\char`\"{}jtype\char`\"{}\+:\char`\"{}afb-\/reply\char`\"{},\char`\"{}request\char`\"{}\+:\{\char`\"{}status\char`\"{}\+:\char`\"{}success\char`\"{},\char`\"{}info\char`\"{}\+:\char`\"{}homescreen binder subscribe event name \mbox{[}on\+\_\+screen\+\_\+message\mbox{]}\char`\"{}\}\}) msg is like (\{\char`\"{}response\char`\"{}\+:\{\char`\"{}verb\char`\"{}\+:\char`\"{}tap\+\_\+shortcut\char`\"{},\char`\"{}error\char`\"{}\+:0\},\char`\"{}jtype\char`\"{}\+:\char`\"{}afb-\/reply\char`\"{},\char`\"{}request\char`\"{}\+:\{\char`\"{}status\char`\"{}\+:\char`\"{}success\char`\"{},\char`\"{}info\char`\"{}\+:\char`\"{}afb\+\_\+event\+\_\+push event \mbox{[}tap\+\_\+shortcut\mbox{]}\char`\"{}\}\})
+
+Definition at line 519 of file libhomescreen.\+cpp.
+
+
+\begin{DoxyCode}
+520 \{
+521 cout << \textcolor{stringliteral}{"[libhomescreen on\_reply]: "} << \textcolor{stringliteral}{" ("} << afb\_wsj1\_msg\_object\_s(msg) << \textcolor{stringliteral}{")"} << endl;
+522 \textcolor{keywordflow}{if}(onReply != \textcolor{keyword}{nullptr})
+523 \{
+524 \textcolor{keyword}{struct }json\_object* reply = afb\_wsj1\_msg\_object\_j(msg);
+525 onReply(reply);
+526
+527 json\_object\_put(reply);
+528 \}
+529 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{class_lib_home_screen_ac336482036a72b51a822725f1929523c}\label{class_lib_home_screen_ac336482036a72b51a822725f1929523c}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!on\+Screen\+Message@{on\+Screen\+Message}}
+\index{on\+Screen\+Message@{on\+Screen\+Message}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\subsubsection{\texorpdfstring{on\+Screen\+Message()}{onScreenMessage()}}
+{\footnotesize\ttfamily int Lib\+Home\+Screen\+::on\+Screen\+Message (\begin{DoxyParamCaption}\item[{const char $\ast$}]{display\+\_\+message }\end{DoxyParamCaption})}
+
+Home\+Screenアプリに表示するメッセージイベントの発行
+
+各アプリから\+Home\+Screenアプリケーションの\+On\+Screenに表示するイベントを発行する
+
+\subparagraph*{Parameters}
+
+
+\begin{DoxyItemize}
+\item display\+\_\+message \mbox{[}in\mbox{]} \+: 表示するメッセージ
+\end{DoxyItemize}
+
+\subparagraph*{Return}
+
+
+\begin{DoxyItemize}
+\item Returns 0 on success or -\/1 in case of error.
+\end{DoxyItemize}
+
+Definition at line 280 of file libhomescreen.\+cpp.
+
+
+\begin{DoxyCode}
+281 \{
+282 \textcolor{keywordflow}{if}(!sp\_websock)
+283 \{
+284 \textcolor{keywordflow}{return} -1;
+285 \}
+286
+287 \textcolor{keyword}{struct }json\_object* j\_obj = json\_object\_new\_object();
+288 \textcolor{keyword}{struct }json\_object* val = json\_object\_new\_string(display\_message);
+289 json\_object\_object\_add(j\_obj, \textcolor{stringliteral}{"display\_message"}, val);
+290 \textcolor{keywordflow}{return} this->\hyperlink{class_lib_home_screen_a527b49dcfe581be6275d0eb2236ba37f}{call}(\textcolor{stringliteral}{"on\_screen\_message"}, j\_obj);
+291 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{class_lib_home_screen_a23bc17798453cfca50904562736f6b25}\label{class_lib_home_screen_a23bc17798453cfca50904562736f6b25}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!operator=@{operator=}}
+\index{operator=@{operator=}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\subsubsection{\texorpdfstring{operator=()}{operator=()}}
+{\footnotesize\ttfamily \hyperlink{class_lib_home_screen}{Lib\+Home\+Screen}\& Lib\+Home\+Screen\+::operator= (\begin{DoxyParamCaption}\item[{const \hyperlink{class_lib_home_screen}{Lib\+Home\+Screen} \&}]{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [delete]}}
+
+\mbox{\Hypertarget{class_lib_home_screen_a2789e8a5372202cc36f48e71dbb9b7cf}\label{class_lib_home_screen_a2789e8a5372202cc36f48e71dbb9b7cf}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!register\+Callback@{register\+Callback}}
+\index{register\+Callback@{register\+Callback}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\subsubsection{\texorpdfstring{register\+Callback()}{registerCallback()}}
+{\footnotesize\ttfamily void Lib\+Home\+Screen\+::register\+Callback (\begin{DoxyParamCaption}\item[{void($\ast$)(const std\+::string \&\hyperlink{structevent}{event}, struct json\+\_\+object $\ast$event\+\_\+contents)}]{event\+\_\+cb, }\item[{void($\ast$)(struct json\+\_\+object $\ast$reply\+\_\+contents)}]{reply\+\_\+cb, }\item[{void($\ast$)(void)}]{hangup\+\_\+cb = {\ttfamily nullptr} }\end{DoxyParamCaption})}
+
+This function register callback function for reply/event message from home screen
+
+\subparagraph*{Parameters}
+
+
+\begin{DoxyItemize}
+\item event\+\_\+cb \mbox{[}in\mbox{]} \+: This argument should be specified to the callback for subscribed event
+\item reply\+\_\+cb \mbox{[}in\mbox{]} \+: This argument should be specified to the reply callback for call function
+\end{DoxyItemize}
+
+\subparagraph*{Return}
+
+Nothing
+
+\subparagraph*{Note}
+
+Event callback is invoked by home screen for event you subscribed. If you would like to get event, please call subscribe function before/after this function
+
+Definition at line 158 of file libhomescreen.\+cpp.
+
+
+\begin{DoxyCode}
+162 \{
+163 onEvent = event\_cb;
+164 onReply = reply\_cb;
+165 onHangup = hangup\_cb;
+166 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{class_lib_home_screen_a32d3282898d0f04151c24b4103511e00}\label{class_lib_home_screen_a32d3282898d0f04151c24b4103511e00}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!run\+Eventloop@{run\+Eventloop}}
+\index{run\+Eventloop@{run\+Eventloop}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\subsubsection{\texorpdfstring{run\+Eventloop()}{runEventloop()}}
+{\footnotesize\ttfamily int Lib\+Home\+Screen\+::run\+Eventloop (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+This function start receiving the reply/event message from home screen
+
+\subparagraph*{Parameters}
+
+Nothing
+
+\subparagraph*{Return}
+
+
+\begin{DoxyItemize}
+\item Returns thread\+\_\+id on success or -\/1 in case of error.
+\end{DoxyItemize}
+
+\subparagraph*{Note}
+
+Definition at line 224 of file libhomescreen.\+cpp.
+
+
+\begin{DoxyCode}
+225 \{
+226 \textcolor{keywordflow}{if}(mploop && sp\_websock)
+227 \{
+228 pthread\_t thread\_id;
+229 \textcolor{keywordtype}{int} ret = pthread\_create(&thread\_id, NULL, \hyperlink{libhomescreen_8cpp_aa73353e1bf62c68b6b0aba7a1e4e275e}{event\_loop\_run}, mploop);
+230 \textcolor{keywordflow}{if}(ret != 0)
+231 \{
+232 \hyperlink{libhomescreen_8cpp_a797aa3053bd6a29819d44f8fad8a5eca}{ELOG}(\textcolor{stringliteral}{"Cannot run eventloop due to error:%d"}, errno);
+233 \textcolor{keywordflow}{return} -1;
+234 \}
+235 \textcolor{keywordflow}{else}
+236 \textcolor{keywordflow}{return} thread\_id;
+237 \}
+238 \textcolor{keywordflow}{else}
+239 \{
+240 \hyperlink{libhomescreen_8cpp_a797aa3053bd6a29819d44f8fad8a5eca}{ELOG}(\textcolor{stringliteral}{"Connecting is not established yet"});
+241 \textcolor{keywordflow}{return} -1;
+242 \}
+243 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{class_lib_home_screen_ab1b0e08bf35415de9064afed899e9f85}\label{class_lib_home_screen_ab1b0e08bf35415de9064afed899e9f85}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!set\+\_\+event\+\_\+handler@{set\+\_\+event\+\_\+handler}}
+\index{set\+\_\+event\+\_\+handler@{set\+\_\+event\+\_\+handler}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\subsubsection{\texorpdfstring{set\+\_\+event\+\_\+handler()}{set\_event\_handler()}}
+{\footnotesize\ttfamily void Lib\+Home\+Screen\+::set\+\_\+event\+\_\+handler (\begin{DoxyParamCaption}\item[{enum \hyperlink{class_lib_home_screen_a82616c91ac211d2ad08e709b524bf154}{Event\+Type}}]{et, }\item[{\hyperlink{class_lib_home_screen_ae99dee1e03d494d59d26c9f17078e01f}{handler\+\_\+func}}]{f }\end{DoxyParamCaption})}
+
+イベントハンドラの登録
+
+各アプリから\+Home\+Screenアプリケーションの\+On\+Screenに表示するイベントを発行する
+
+\subparagraph*{Parameters}
+
+
+\begin{DoxyItemize}
+\item et \mbox{[}in\mbox{]} \+: 対象のイベント
+\item f \mbox{[}in\mbox{]} \+: イベントハンドラ
+\end{DoxyItemize}
+
+\subparagraph*{Return}
+
+Nothing
+
+Definition at line 305 of file libhomescreen.\+cpp.
+
+
+\begin{DoxyCode}
+306 \{
+307 \textcolor{keywordflow}{if} (et >= 1 && et <= 2) \{
+308 \textcolor{keywordflow}{switch} (et) \{
+309 \textcolor{keywordflow}{case} \hyperlink{class_lib_home_screen_a82616c91ac211d2ad08e709b524bf154a4b0a82d501e4db5fbfe25c254c92896f}{Event\_TapShortcut}:
+310 this->\hyperlink{class_lib_home_screen_aa4c189807b75d070f567967f0d690738}{subscribe}(\hyperlink{class_lib_home_screen_a6a6d8a4d33a006a08652e7377a4c29e9}{LibHomeScreen::event\_list}[0]);
+311 \textcolor{keywordflow}{break};
+312 \textcolor{keywordflow}{case} \hyperlink{class_lib_home_screen_a82616c91ac211d2ad08e709b524bf154aea56fa32a124a8ddcbea127755280a1d}{Event\_OnScreenMessage}:
+313 this->\hyperlink{class_lib_home_screen_aa4c189807b75d070f567967f0d690738}{subscribe}(\hyperlink{class_lib_home_screen_a6a6d8a4d33a006a08652e7377a4c29e9}{LibHomeScreen::event\_list}[1]);
+314 \textcolor{keywordflow}{break};
+315 \}
+316
+317 this->handlers[et] = std::move(f);
+318 \}
+319 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{class_lib_home_screen_aa4c189807b75d070f567967f0d690738}\label{class_lib_home_screen_aa4c189807b75d070f567967f0d690738}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!subscribe@{subscribe}}
+\index{subscribe@{subscribe}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\subsubsection{\texorpdfstring{subscribe()}{subscribe()}}
+{\footnotesize\ttfamily int Lib\+Home\+Screen\+::subscribe (\begin{DoxyParamCaption}\item[{const std\+::string \&}]{event\+\_\+name }\end{DoxyParamCaption})}
+
+Register callback function for each event
+
+\subparagraph*{Parameters}
+
+
+\begin{DoxyItemize}
+\item event\+\_\+name \mbox{[}in\mbox{]} \+: This argument should be specified to the event name
+\end{DoxyItemize}
+
+\subparagraph*{Return}
+
+
+\begin{DoxyItemize}
+\item Returns 0 on success or -\/1 in case of error.
+\end{DoxyItemize}
+
+\subparagraph*{Note}
+
+This function enables to get an event to your callback function.
+
+Definition at line 401 of file libhomescreen.\+cpp.
+
+
+\begin{DoxyCode}
+402 \{
+403 \textcolor{keywordflow}{if}(!sp\_websock)
+404 \{
+405 \textcolor{keywordflow}{return} -1;
+406 \}
+407 \textcolor{keyword}{struct }json\_object* j\_obj = json\_object\_new\_object();
+408 json\_object\_object\_add(j\_obj, \textcolor{stringliteral}{"event"}, json\_object\_new\_string(event\_name.c\_str()));
+409
+410 \textcolor{keywordtype}{int} ret = afb\_wsj1\_call\_j(sp\_websock, \hyperlink{libhomescreen_8cpp_a1e2d6e77dd8f0162f830058579eab42f}{API}, \textcolor{stringliteral}{"subscribe"}, j\_obj,
+ \hyperlink{libhomescreen_8cpp_a7778933bffa862c63fa0a1b8219faa8b}{\_on\_reply\_static}, \textcolor{keyword}{this});
+411 \textcolor{keywordflow}{if} (ret < 0) \{
+412 \hyperlink{libhomescreen_8cpp_a797aa3053bd6a29819d44f8fad8a5eca}{ELOG}(\textcolor{stringliteral}{"Failed to call verb:%s"},\_\_FUNCTION\_\_);
+413 \}
+414 \textcolor{keywordflow}{return} ret;
+415 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{class_lib_home_screen_afb571c9577087b47065eb23e7fdbc903}\label{class_lib_home_screen_afb571c9577087b47065eb23e7fdbc903}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!tap\+Shortcut@{tap\+Shortcut}}
+\index{tap\+Shortcut@{tap\+Shortcut}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\subsubsection{\texorpdfstring{tap\+Shortcut()}{tapShortcut()}}
+{\footnotesize\ttfamily int Lib\+Home\+Screen\+::tap\+Shortcut (\begin{DoxyParamCaption}\item[{const char $\ast$}]{application\+\_\+name }\end{DoxyParamCaption})}
+
+ショートカットアイコンがタップされたイベントの発行
+
+Home\+Screenアプリケーションにて各アプリアイコンがタップされたときにイベントを発行する
+
+\subparagraph*{Parameters}
+
+
+\begin{DoxyItemize}
+\item application\+\_\+name \mbox{[}in\mbox{]} \+: タップされたアプリケーションの名前(label)
+\end{DoxyItemize}
+
+\subparagraph*{Return}
+
+
+\begin{DoxyItemize}
+\item Returns 0 on success or -\/1 in case of error.
+\end{DoxyItemize}
+
+Definition at line 256 of file libhomescreen.\+cpp.
+
+
+\begin{DoxyCode}
+257 \{
+258 \textcolor{keywordflow}{if}(!sp\_websock)
+259 \{
+260 \textcolor{keywordflow}{return} -1;
+261 \}
+262
+263 \textcolor{keyword}{struct }json\_object* j\_obj = json\_object\_new\_object();
+264 \textcolor{keyword}{struct }json\_object* val = json\_object\_new\_string(application\_name);
+265 json\_object\_object\_add(j\_obj, \textcolor{stringliteral}{"application\_name"}, val);
+266 \textcolor{keywordflow}{return} this->\hyperlink{class_lib_home_screen_a527b49dcfe581be6275d0eb2236ba37f}{call}(\textcolor{stringliteral}{"tap\_shortcut"}, j\_obj);
+267 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{class_lib_home_screen_aac03a45cbd453ba69ddb00c1016930a6}\label{class_lib_home_screen_aac03a45cbd453ba69ddb00c1016930a6}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!unsubscribe@{unsubscribe}}
+\index{unsubscribe@{unsubscribe}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\subsubsection{\texorpdfstring{unsubscribe()}{unsubscribe()}}
+{\footnotesize\ttfamily int Lib\+Home\+Screen\+::unsubscribe (\begin{DoxyParamCaption}\item[{const std\+::string \&}]{event\+\_\+name }\end{DoxyParamCaption})}
+
+Unregister callback function for each event
+
+\subparagraph*{Parameters}
+
+
+\begin{DoxyItemize}
+\item event\+\_\+name \mbox{[}in\mbox{]} \+: This argument should be specified to the event name
+\end{DoxyItemize}
+
+\subparagraph*{Return}
+
+
+\begin{DoxyItemize}
+\item Returns 0 on success or -\/1 in case of error.
+\end{DoxyItemize}
+
+\subparagraph*{Note}
+
+This function disables to get an event to your callback function.
+
+Definition at line 430 of file libhomescreen.\+cpp.
+
+
+\begin{DoxyCode}
+431 \{
+432 \textcolor{keywordflow}{if}(!sp\_websock)
+433 \{
+434 \textcolor{keywordflow}{return} -1;
+435 \}
+436 \textcolor{keyword}{struct }json\_object* j\_obj = json\_object\_new\_object();
+437 json\_object\_object\_add(j\_obj, \textcolor{stringliteral}{"event"}, json\_object\_new\_string(event\_name.c\_str()));
+438
+439 \textcolor{keywordtype}{int} ret = afb\_wsj1\_call\_j(sp\_websock, \hyperlink{libhomescreen_8cpp_a1e2d6e77dd8f0162f830058579eab42f}{API}, \textcolor{stringliteral}{"unsubscribe"}, j\_obj,
+ \hyperlink{libhomescreen_8cpp_a7778933bffa862c63fa0a1b8219faa8b}{\_on\_reply\_static}, \textcolor{keyword}{this});
+440 \textcolor{keywordflow}{if} (ret < 0) \{
+441 \hyperlink{libhomescreen_8cpp_a797aa3053bd6a29819d44f8fad8a5eca}{ELOG}(\textcolor{stringliteral}{"Failed to call verb:%s"},\_\_FUNCTION\_\_);
+442 \}
+443 \textcolor{keywordflow}{return} ret;
+444 \}
+\end{DoxyCode}
+
+
+\subsection{Member Data Documentation}
+\mbox{\Hypertarget{class_lib_home_screen_a5593ff5ac78f6495ccb649904cf0ab08}\label{class_lib_home_screen_a5593ff5ac78f6495ccb649904cf0ab08}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!api\+\_\+list@{api\+\_\+list}}
+\index{api\+\_\+list@{api\+\_\+list}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\subsubsection{\texorpdfstring{api\+\_\+list}{api\_list}}
+{\footnotesize\ttfamily const std\+::vector$<$ std\+::string $>$ Lib\+Home\+Screen\+::api\+\_\+list\hspace{0.3cm}{\ttfamily [static]}}
+
+{\bfseries Initial value\+:}
+\begin{DoxyCode}
+\{
+ std::string(\textcolor{stringliteral}{"ping"}),
+ std::string(\textcolor{stringliteral}{"tap\_shortcut"}),
+ std::string(\textcolor{stringliteral}{"on\_screen\_message"}),
+ std::string(\textcolor{stringliteral}{"subscribe"}),
+ std::string(\textcolor{stringliteral}{"unsubscribe"})
+\}
+\end{DoxyCode}
+
+
+Definition at line 48 of file libhomescreen.\+hpp.
+
+\mbox{\Hypertarget{class_lib_home_screen_a6a6d8a4d33a006a08652e7377a4c29e9}\label{class_lib_home_screen_a6a6d8a4d33a006a08652e7377a4c29e9}}
+\index{Lib\+Home\+Screen@{Lib\+Home\+Screen}!event\+\_\+list@{event\+\_\+list}}
+\index{event\+\_\+list@{event\+\_\+list}!Lib\+Home\+Screen@{Lib\+Home\+Screen}}
+\subsubsection{\texorpdfstring{event\+\_\+list}{event\_list}}
+{\footnotesize\ttfamily const std\+::vector$<$ std\+::string $>$ Lib\+Home\+Screen\+::event\+\_\+list\hspace{0.3cm}{\ttfamily [static]}}
+
+{\bfseries Initial value\+:}
+\begin{DoxyCode}
+\{
+ std::string(\textcolor{stringliteral}{"tap\_shortcut"}),
+ std::string(\textcolor{stringliteral}{"on\_screen\_message"}),
+ std::string(\textcolor{stringliteral}{"none"})
+\}
+\end{DoxyCode}
+
+
+Definition at line 49 of file libhomescreen.\+hpp.
+
+
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+include/libhomescreen/\hyperlink{libhomescreen_8hpp}{libhomescreen.\+hpp}\item
+libhomescreen/\hyperlink{libhomescreen_8cpp}{libhomescreen.\+cpp}\end{DoxyCompactItemize}
diff --git a/doc/api-ref/latex/df/d43/libhomescreen_8hpp.tex b/doc/api-ref/latex/df/d43/libhomescreen_8hpp.tex
new file mode 100644
index 0000000..aa4b996
--- /dev/null
+++ b/doc/api-ref/latex/df/d43/libhomescreen_8hpp.tex
@@ -0,0 +1,16 @@
+\hypertarget{libhomescreen_8hpp}{}\section{include/libhomescreen.hpp File Reference}
+\label{libhomescreen_8hpp}\index{include/libhomescreen/libhomescreen.\+hpp@{include/libhomescreen/libhomescreen.\+hpp}}
+{\ttfamily \#include $<$vector$>$}\newline
+{\ttfamily \#include $<$map$>$}\newline
+{\ttfamily \#include $<$string$>$}\newline
+{\ttfamily \#include $<$functional$>$}\newline
+{\ttfamily \#include $<$json-\/c/json.\+h$>$}\newline
+{\ttfamily \#include $<$systemd/sd-\/event.\+h$>$}\newline
+{\ttfamily \#include $<$afb/afb-\/binding.\+h$>$}\newline
+{\ttfamily \#include $<$afb/afb-\/wsj1.\+h$>$}\newline
+{\ttfamily \#include $<$afb/afb-\/ws-\/client.\+h$>$}\newline
+\subsection*{Classes}
+\begin{DoxyCompactItemize}
+\item
+class \hyperlink{class_lib_home_screen}{Lib\+Home\+Screen}
+\end{DoxyCompactItemize}
diff --git a/doc/api-ref/latex/df/d7d/structevent.tex b/doc/api-ref/latex/df/d7d/structevent.tex
new file mode 100644
index 0000000..5eb6636
--- /dev/null
+++ b/doc/api-ref/latex/df/d7d/structevent.tex
@@ -0,0 +1,44 @@
+\hypertarget{structevent}{}\section{event Struct Reference}
+\label{structevent}\index{event@{event}}
+\subsection*{Public Attributes}
+\begin{DoxyCompactItemize}
+\item
+const char $\ast$ \hyperlink{structevent_a45c6cfb7961a21a3366db067e4cc59ab}{name}
+\item
+struct afb\+\_\+event $\ast$ \hyperlink{structevent_a58726ebc551d36562ac3f9e1fe293214}{event}
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+
+
+Definition at line 35 of file homescreen.\+c.
+
+
+
+\subsection{Member Data Documentation}
+\mbox{\Hypertarget{structevent_a58726ebc551d36562ac3f9e1fe293214}\label{structevent_a58726ebc551d36562ac3f9e1fe293214}}
+\index{event@{event}!event@{event}}
+\index{event@{event}!event@{event}}
+\subsubsection{\texorpdfstring{event}{event}}
+{\footnotesize\ttfamily struct afb\+\_\+event$\ast$ event\+::event}
+
+
+
+Definition at line 37 of file homescreen.\+c.
+
+\mbox{\Hypertarget{structevent_a45c6cfb7961a21a3366db067e4cc59ab}\label{structevent_a45c6cfb7961a21a3366db067e4cc59ab}}
+\index{event@{event}!name@{name}}
+\index{name@{name}!event@{event}}
+\subsubsection{\texorpdfstring{name}{name}}
+{\footnotesize\ttfamily const char$\ast$ event\+::name}
+
+
+
+Definition at line 36 of file homescreen.\+c.
+
+
+
+The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize}
+\item
+homescreen\+\_\+service/\hyperlink{homescreen_8c}{homescreen.\+c}\end{DoxyCompactItemize}
diff --git a/doc/api-ref/latex/df/dac/test_8cpp.tex b/doc/api-ref/latex/df/dac/test_8cpp.tex
new file mode 100644
index 0000000..cbc5bce
--- /dev/null
+++ b/doc/api-ref/latex/df/dac/test_8cpp.tex
@@ -0,0 +1,266 @@
+\hypertarget{test_8cpp}{}\section{libhomescreen/test.cpp File Reference}
+\label{test_8cpp}\index{libhomescreen/test.\+cpp@{libhomescreen/test.\+cpp}}
+{\ttfamily \#include $<$libhomescreen/libhomescreen.\+hpp$>$}\newline
+{\ttfamily \#include $<$iostream$>$}\newline
+{\ttfamily \#include $<$glib-\/2.\+0/glib.\+h$>$}\newline
+{\ttfamily \#include $<$fcntl.\+h$>$}\newline
+{\ttfamily \#include $<$string$>$}\newline
+{\ttfamily \#include $<$sys/types.\+h$>$}\newline
+{\ttfamily \#include $<$sys/stat.\+h$>$}\newline
+{\ttfamily \#include $<$thread$>$}\newline
+{\ttfamily \#include $<$exception$>$}\newline
+{\ttfamily \#include $<$vector$>$}\newline
+{\ttfamily \#include $<$sstream$>$}\newline
+{\ttfamily \#include $<$functional$>$}\newline
+\subsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+static vector$<$ string $>$ \hyperlink{test_8cpp_aafb7f182b8bb6ba92354dde1658d86a4}{split} (const string \&str, char sep)
+\item
+static void \hyperlink{test_8cpp_a64a6014565bb3e03294ec4a952d5add0}{usage} ()
+\item
+static void \hyperlink{test_8cpp_aa9b3c43c212b49edee82ac30a11aa255}{call\+\_\+test} ()
+\item
+static void \hyperlink{test_8cpp_a6d3cb4886e7afd45bd56b49800da932d}{on\+Rep} (struct json\+\_\+object $\ast$reply\+\_\+contents)
+\item
+static void \hyperlink{test_8cpp_a6a2874c419fe5936fcccadc7e6cf268e}{on\+Ev} (const string \&\hyperlink{structevent}{event}, struct json\+\_\+object $\ast$event\+\_\+contents)
+\item
+int \hyperlink{test_8cpp_a3c04138a5bfe5d72780bb7e82a18e627}{main} (int argc, char $\ast$$\ast$argv)
+\end{DoxyCompactItemize}
+\subsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{class_lib_home_screen}{Lib\+Home\+Screen} $\ast$ \hyperlink{test_8cpp_a529acbd1fed9d98a587edfa62309fa8d}{hs}
+\end{DoxyCompactItemize}
+
+
+\subsection{Function Documentation}
+\mbox{\Hypertarget{test_8cpp_aa9b3c43c212b49edee82ac30a11aa255}\label{test_8cpp_aa9b3c43c212b49edee82ac30a11aa255}}
+\index{test.\+cpp@{test.\+cpp}!call\+\_\+test@{call\+\_\+test}}
+\index{call\+\_\+test@{call\+\_\+test}!test.\+cpp@{test.\+cpp}}
+\subsubsection{\texorpdfstring{call\+\_\+test()}{call\_test()}}
+{\footnotesize\ttfamily static void call\+\_\+test (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 51 of file test.\+cpp.
+
+
+\begin{DoxyCode}
+52 \{
+53 \textcolor{keywordtype}{string} command;
+54
+55 cout << \textcolor{stringliteral}{"input verb and argments"} << endl;
+56
+57 \textcolor{comment}{/* read the buffer */}
+58 \textcolor{keywordflow}{for}(;;)\{
+59 \textcolor{keywordtype}{char} line[1023];
+60 cin.getline(line, \textcolor{keyword}{sizeof}(line));
+61 command = line;
+62 \textcolor{keywordflow}{if}(command.empty())\{
+63 \textcolor{keywordflow}{continue};
+64 \}
+65
+66 vector<string> v\_command = \hyperlink{test_8cpp_aafb7f182b8bb6ba92354dde1658d86a4}{split}(command, \textcolor{charliteral}{' '});
+67 \textcolor{comment}{/*for(auto itr = v\_command.begin(); itr != v\_command.end(); ++itr)}
+68 \textcolor{comment}{ \{}
+69 \textcolor{comment}{ cout << *itr <<endl;}
+70 \textcolor{comment}{ \}*/}
+71 \textcolor{keywordtype}{size\_t} num = v\_command.size();
+72 \textcolor{keywordflow}{if}(num % 2 == 0)\{
+73 cout << \textcolor{stringliteral}{"If command contains args, please input <key,value> in argument part"} << endl;
+74 \textcolor{keywordflow}{continue};
+75 \}
+76 \textcolor{comment}{/* create json object */}
+77 \textcolor{keyword}{struct }json\_object* j\_obj = json\_object\_new\_object();
+78 \textcolor{keywordflow}{for}(\textcolor{keywordtype}{int} i = 1;i < (v\_command.size()) ;++i)\{
+79 \textcolor{keyword}{struct }json\_object* val = json\_object\_new\_string(v\_command[i+1].c\_str());
+80 json\_object\_object\_add(j\_obj, v\_command[i].c\_str(), val);
+81 ++i;
+82 \}
+83 \textcolor{comment}{/* call verb via LibHomeScreen */}
+84 \hyperlink{test_8cpp_a529acbd1fed9d98a587edfa62309fa8d}{hs}->\hyperlink{class_lib_home_screen_a527b49dcfe581be6275d0eb2236ba37f}{call}(v\_command[0], j\_obj);
+85 \textcolor{comment}{/* free vector */}
+86 vector<string>().swap(v\_command);
+87 string().swap(command);
+88 \}
+89 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{test_8cpp_a3c04138a5bfe5d72780bb7e82a18e627}\label{test_8cpp_a3c04138a5bfe5d72780bb7e82a18e627}}
+\index{test.\+cpp@{test.\+cpp}!main@{main}}
+\index{main@{main}!test.\+cpp@{test.\+cpp}}
+\subsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$$\ast$}]{argv }\end{DoxyParamCaption})}
+
+
+
+Definition at line 117 of file test.\+cpp.
+
+
+\begin{DoxyCode}
+118 \{
+119 \textcolor{keywordtype}{int} ret;
+120 \textcolor{keywordflow}{if}(argc == 1)
+121 \{
+122 printf(\textcolor{stringliteral}{"Please input port num in first argument, and token in second argument"});
+123 \hyperlink{test_8cpp_a64a6014565bb3e03294ec4a952d5add0}{usage}();
+124 \textcolor{keywordflow}{return} 0;
+125 \}
+126 \textcolor{keywordflow}{if}(argc == 2)
+127 \{
+128 \textcolor{keywordtype}{string} av(argv[1]);
+129 \textcolor{keywordflow}{if}( (av == \textcolor{stringliteral}{"-h"}) || (av == \textcolor{stringliteral}{"--help"}))
+130 \{
+131 \hyperlink{test_8cpp_a64a6014565bb3e03294ec4a952d5add0}{usage}();
+132 \textcolor{keywordflow}{return} 0;
+133 \}
+134 \}
+135
+136 \textcolor{keywordtype}{string} port\_string(argv[1]);
+137 \textcolor{keywordtype}{string} token(argv[2]);
+138 \textcolor{keywordtype}{char}* endptr;
+139 \textcolor{keywordtype}{long} port = strtol(port\_string.c\_str(),&endptr,10);
+140
+141 \textcolor{comment}{/* error check of range */}
+142 \textcolor{keywordflow}{if}( (port > 20000) || (port < 0) )
+143 \{
+144 printf(\textcolor{stringliteral}{"input under 20000(temporary number)"});
+145 \textcolor{keywordflow}{return} 0;
+146 \}
+147 \textcolor{keywordflow}{if}(*endptr != \textcolor{charliteral}{'\(\backslash\)0'})
+148 \{
+149 printf(\textcolor{stringliteral}{"not number"});
+150 \textcolor{keywordflow}{return} 0;
+151 \}
+152
+153 cout << \textcolor{stringliteral}{"Call test for LibHomeScreen"} << endl;
+154 \hyperlink{test_8cpp_a529acbd1fed9d98a587edfa62309fa8d}{hs} = \textcolor{keyword}{new} \hyperlink{class_lib_home_screen}{LibHomeScreen}();
+155 \hyperlink{test_8cpp_a529acbd1fed9d98a587edfa62309fa8d}{hs}->\hyperlink{class_lib_home_screen_a6a57b573cc767725762ba9beab032220}{init}(port, token);
+156
+157 \textcolor{comment}{// hs->registerCallback(&onEv, &onRep);}
+158 \textcolor{comment}{//}
+159 \textcolor{comment}{// hs->subscribe(event\_list[0]); // tap\_shortcut event subscribe}
+160 \textcolor{comment}{// hs->subscribe(event\_list[1]);}
+161
+162 \hyperlink{test_8cpp_a529acbd1fed9d98a587edfa62309fa8d}{hs}->\hyperlink{class_lib_home_screen_ab1b0e08bf35415de9064afed899e9f85}{set\_event\_handler}(\hyperlink{class_lib_home_screen_a82616c91ac211d2ad08e709b524bf154a4b0a82d501e4db5fbfe25c254c92896f}{LibHomeScreen::Event\_TapShortcut}
+ , [](\textcolor{keyword}{const} \textcolor{keywordtype}{char}* application\_name)\{
+163 cout << \textcolor{stringliteral}{"set\_event\_handler Event\_TapShortcut application\_name = "} << application\_name << endl;
+164 \});
+165
+166 \hyperlink{test_8cpp_a529acbd1fed9d98a587edfa62309fa8d}{hs}->\hyperlink{class_lib_home_screen_ab1b0e08bf35415de9064afed899e9f85}{set\_event\_handler}(\hyperlink{class_lib_home_screen_a82616c91ac211d2ad08e709b524bf154aea56fa32a124a8ddcbea127755280a1d}{LibHomeScreen::Event\_OnScreenMessage}
+ , [](\textcolor{keyword}{const} \textcolor{keywordtype}{char}* display\_message)\{
+167 cout << \textcolor{stringliteral}{"set\_event\_handler Event\_OnScreenMessage display\_message = "} << display\_message << endl;
+168 \});
+169
+170
+171 \textcolor{keywordflow}{if} (ret < 0) \{
+172 printf(\textcolor{stringliteral}{"failed to create event loop"});
+173 \textcolor{keywordflow}{return} -1;
+174 \}
+175 \hyperlink{test_8cpp_a529acbd1fed9d98a587edfa62309fa8d}{hs}->\hyperlink{class_lib_home_screen_a32d3282898d0f04151c24b4103511e00}{runEventloop}();
+176
+177 \hyperlink{test_8cpp_aa9b3c43c212b49edee82ac30a11aa255}{call\_test}();
+178
+179 \textcolor{keywordflow}{return} 0;
+180 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{test_8cpp_a6a2874c419fe5936fcccadc7e6cf268e}\label{test_8cpp_a6a2874c419fe5936fcccadc7e6cf268e}}
+\index{test.\+cpp@{test.\+cpp}!on\+Ev@{on\+Ev}}
+\index{on\+Ev@{on\+Ev}!test.\+cpp@{test.\+cpp}}
+\subsubsection{\texorpdfstring{on\+Ev()}{onEv()}}
+{\footnotesize\ttfamily static void on\+Ev (\begin{DoxyParamCaption}\item[{const string \&}]{event, }\item[{struct json\+\_\+object $\ast$}]{event\+\_\+contents }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 98 of file test.\+cpp.
+
+
+\begin{DoxyCode}
+99 \{
+100 \textcolor{keyword}{const} \textcolor{keywordtype}{char}* str = json\_object\_to\_json\_string(event\_contents);
+101 cout << \textcolor{stringliteral}{"test.cpp [CB onEvent]: event: "} << \textcolor{keyword}{event}.c\_str() << \textcolor{stringliteral}{" contents: "} << str << endl;
+102 \textcolor{comment}{//json\_object\_put(event\_contents); do not release!!!}
+103 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{test_8cpp_a6d3cb4886e7afd45bd56b49800da932d}\label{test_8cpp_a6d3cb4886e7afd45bd56b49800da932d}}
+\index{test.\+cpp@{test.\+cpp}!on\+Rep@{on\+Rep}}
+\index{on\+Rep@{on\+Rep}!test.\+cpp@{test.\+cpp}}
+\subsubsection{\texorpdfstring{on\+Rep()}{onRep()}}
+{\footnotesize\ttfamily static void on\+Rep (\begin{DoxyParamCaption}\item[{struct json\+\_\+object $\ast$}]{reply\+\_\+contents }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 91 of file test.\+cpp.
+
+
+\begin{DoxyCode}
+92 \{
+93 \textcolor{keyword}{const} \textcolor{keywordtype}{char}* str = json\_object\_to\_json\_string(reply\_contents);
+94 cout << \textcolor{stringliteral}{"test.cpp [CB onRep]: "} << str << endl;
+95 \textcolor{comment}{//json\_object\_put(reply\_contents); do not release!!!}
+96 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{test_8cpp_aafb7f182b8bb6ba92354dde1658d86a4}\label{test_8cpp_aafb7f182b8bb6ba92354dde1658d86a4}}
+\index{test.\+cpp@{test.\+cpp}!split@{split}}
+\index{split@{split}!test.\+cpp@{test.\+cpp}}
+\subsubsection{\texorpdfstring{split()}{split()}}
+{\footnotesize\ttfamily static vector$<$ string $>$ split (\begin{DoxyParamCaption}\item[{const string \&}]{str, }\item[{char}]{sep }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 105 of file test.\+cpp.
+
+
+\begin{DoxyCode}
+106 \{
+107 vector<string> v;
+108 stringstream ss(str);
+109 \textcolor{keywordtype}{string} buffer;
+110 \textcolor{keywordflow}{while}( getline(ss, buffer, sep) ) \{
+111 \textcolor{keywordflow}{if}(!buffer.empty())
+112 v.push\_back(buffer);
+113 \}
+114 \textcolor{keywordflow}{return} v;
+115 \}
+\end{DoxyCode}
+\mbox{\Hypertarget{test_8cpp_a64a6014565bb3e03294ec4a952d5add0}\label{test_8cpp_a64a6014565bb3e03294ec4a952d5add0}}
+\index{test.\+cpp@{test.\+cpp}!usage@{usage}}
+\index{usage@{usage}!test.\+cpp@{test.\+cpp}}
+\subsubsection{\texorpdfstring{usage()}{usage()}}
+{\footnotesize\ttfamily static void usage (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}
+
+
+
+Definition at line 35 of file test.\+cpp.
+
+
+\begin{DoxyCode}
+36 \{
+37 cout << \textcolor{stringliteral}{"verb "}<< \textcolor{stringliteral}{"key:arg"} << endl;
+38 cout << \textcolor{stringliteral}{"example:"} << endl;
+39 cout << \textcolor{stringliteral}{"ping"} << endl;
+40 cout << \textcolor{stringliteral}{"------- -------- --- "} << endl;
+41 cout << \textcolor{stringliteral}{" verb key value"} << endl;
+42 cout << \textcolor{stringliteral}{"verb list:"} << endl;
+43 \textcolor{keywordflow}{for}(\textcolor{keyword}{auto} itr = \hyperlink{class_lib_home_screen_a5593ff5ac78f6495ccb649904cf0ab08}{LibHomeScreen::api\_list}.begin(); itr !=
+ \hyperlink{class_lib_home_screen_a5593ff5ac78f6495ccb649904cf0ab08}{LibHomeScreen::api\_list}.end(); ++itr)
+44 \{
+45 cout << \textcolor{stringliteral}{" "} << *itr << endl;
+46 \}
+47 \textcolor{comment}{// Todo output api list}
+48 exit(0);
+49 \}
+\end{DoxyCode}
+
+
+\subsection{Variable Documentation}
+\mbox{\Hypertarget{test_8cpp_a529acbd1fed9d98a587edfa62309fa8d}\label{test_8cpp_a529acbd1fed9d98a587edfa62309fa8d}}
+\index{test.\+cpp@{test.\+cpp}!hs@{hs}}
+\index{hs@{hs}!test.\+cpp@{test.\+cpp}}
+\subsubsection{\texorpdfstring{hs}{hs}}
+{\footnotesize\ttfamily \hyperlink{class_lib_home_screen}{Lib\+Home\+Screen}$\ast$ hs}
+
+
+
+Definition at line 33 of file test.\+cpp.
+
diff --git a/doc/api-ref/latex/dir_0f70dc74e67ded1ed6ea12b5a24cac83.tex b/doc/api-ref/latex/dir_0f70dc74e67ded1ed6ea12b5a24cac83.tex
new file mode 100644
index 0000000..ddf11f0
--- /dev/null
+++ b/doc/api-ref/latex/dir_0f70dc74e67ded1ed6ea12b5a24cac83.tex
@@ -0,0 +1,7 @@
+\hypertarget{dir_0f70dc74e67ded1ed6ea12b5a24cac83}{}\section{include/libhomescreen Directory Reference}
+\label{dir_0f70dc74e67ded1ed6ea12b5a24cac83}\index{include/libhomescreen Directory Reference@{include/libhomescreen Directory Reference}}
+\subsection*{Files}
+\begin{DoxyCompactItemize}
+\item
+file \hyperlink{libhomescreen_8hpp}{libhomescreen.\+hpp}
+\end{DoxyCompactItemize}
diff --git a/doc/api-ref/latex/dir_65f76d62445e9e84c0450b12bf77c3bc.tex b/doc/api-ref/latex/dir_65f76d62445e9e84c0450b12bf77c3bc.tex
new file mode 100644
index 0000000..ae40678
--- /dev/null
+++ b/doc/api-ref/latex/dir_65f76d62445e9e84c0450b12bf77c3bc.tex
@@ -0,0 +1,9 @@
+\hypertarget{dir_65f76d62445e9e84c0450b12bf77c3bc}{}\section{libhomescreen Directory Reference}
+\label{dir_65f76d62445e9e84c0450b12bf77c3bc}\index{libhomescreen Directory Reference@{libhomescreen Directory Reference}}
+\subsection*{Files}
+\begin{DoxyCompactItemize}
+\item
+file \hyperlink{libhomescreen_8cpp}{libhomescreen.\+cpp}
+\item
+file \hyperlink{test_8cpp}{test.\+cpp}
+\end{DoxyCompactItemize}
diff --git a/doc/api-ref/latex/dir_a01af9eb3c502936dfd53c3f8e45721d.tex b/doc/api-ref/latex/dir_a01af9eb3c502936dfd53c3f8e45721d.tex
new file mode 100644
index 0000000..d46199f
--- /dev/null
+++ b/doc/api-ref/latex/dir_a01af9eb3c502936dfd53c3f8e45721d.tex
@@ -0,0 +1,11 @@
+\hypertarget{dir_a01af9eb3c502936dfd53c3f8e45721d}{}\section{homescreen\+\_\+service Directory Reference}
+\label{dir_a01af9eb3c502936dfd53c3f8e45721d}\index{homescreen\+\_\+service Directory Reference@{homescreen\+\_\+service Directory Reference}}
+\subsection*{Files}
+\begin{DoxyCompactItemize}
+\item
+file \hyperlink{homescreen_8c}{homescreen.\+c}
+\item
+file \hyperlink{hs-helper_8c}{hs-\/helper.\+c}
+\item
+file \hyperlink{hs-helper_8h}{hs-\/helper.\+h}
+\end{DoxyCompactItemize}
diff --git a/doc/api-ref/latex/dir_d44c64559bbebec7f509842c48db8b23.tex b/doc/api-ref/latex/dir_d44c64559bbebec7f509842c48db8b23.tex
new file mode 100644
index 0000000..ab82131
--- /dev/null
+++ b/doc/api-ref/latex/dir_d44c64559bbebec7f509842c48db8b23.tex
@@ -0,0 +1,7 @@
+\hypertarget{dir_d44c64559bbebec7f509842c48db8b23}{}\section{include Directory Reference}
+\label{dir_d44c64559bbebec7f509842c48db8b23}\index{include Directory Reference@{include Directory Reference}}
+\subsection*{Directories}
+\begin{DoxyCompactItemize}
+\item
+directory \hyperlink{dir_0f70dc74e67ded1ed6ea12b5a24cac83}{libhomescreen}
+\end{DoxyCompactItemize}
diff --git a/doc/api-ref/latex/doxygen.sty b/doc/api-ref/latex/doxygen.sty
new file mode 100644
index 0000000..e457acc
--- /dev/null
+++ b/doc/api-ref/latex/doxygen.sty
@@ -0,0 +1,503 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{doxygen}
+
+% Packages used by this style file
+\RequirePackage{alltt}
+\RequirePackage{array}
+\RequirePackage{calc}
+\RequirePackage{float}
+\RequirePackage{ifthen}
+\RequirePackage{verbatim}
+\RequirePackage[table]{xcolor}
+\RequirePackage{longtable}
+\RequirePackage{tabu}
+\RequirePackage{tabularx}
+\RequirePackage{multirow}
+
+%---------- Internal commands used in this style file ----------------
+
+\newcommand{\ensurespace}[1]{%
+ \begingroup%
+ \setlength{\dimen@}{#1}%
+ \vskip\z@\@plus\dimen@%
+ \penalty -100\vskip\z@\@plus -\dimen@%
+ \vskip\dimen@%
+ \penalty 9999%
+ \vskip -\dimen@%
+ \vskip\z@skip% hide the previous |\vskip| from |\addvspace|
+ \endgroup%
+}
+
+\newcommand{\DoxyLabelFont}{}
+\newcommand{\entrylabel}[1]{%
+ {%
+ \parbox[b]{\labelwidth-4pt}{%
+ \makebox[0pt][l]{\DoxyLabelFont#1}%
+ \vspace{1.5\baselineskip}%
+ }%
+ }%
+}
+
+\newenvironment{DoxyDesc}[1]{%
+ \ensurespace{4\baselineskip}%
+ \begin{list}{}{%
+ \settowidth{\labelwidth}{20pt}%
+ \setlength{\parsep}{0pt}%
+ \setlength{\itemsep}{0pt}%
+ \setlength{\leftmargin}{\labelwidth+\labelsep}%
+ \renewcommand{\makelabel}{\entrylabel}%
+ }%
+ \item[#1]%
+}{%
+ \end{list}%
+}
+
+\newsavebox{\xrefbox}
+\newlength{\xreflength}
+\newcommand{\xreflabel}[1]{%
+ \sbox{\xrefbox}{#1}%
+ \setlength{\xreflength}{\wd\xrefbox}%
+ \ifthenelse{\xreflength>\labelwidth}{%
+ \begin{minipage}{\textwidth}%
+ \setlength{\parindent}{0pt}%
+ \hangindent=15pt\bfseries #1\vspace{1.2\itemsep}%
+ \end{minipage}%
+ }{%
+ \parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}%
+ }%
+}
+
+%---------- Commands used by doxygen LaTeX output generator ----------
+
+% Used by <pre> ... </pre>
+\newenvironment{DoxyPre}{%
+ \small%
+ \begin{alltt}%
+}{%
+ \end{alltt}%
+ \normalsize%
+}
+
+% Used by @code ... @endcode
+\newenvironment{DoxyCode}{%
+ \par%
+ \scriptsize%
+ \begin{alltt}%
+}{%
+ \end{alltt}%
+ \normalsize%
+}
+
+% Used by @example, @include, @includelineno and @dontinclude
+\newenvironment{DoxyCodeInclude}{%
+ \DoxyCode%
+}{%
+ \endDoxyCode%
+}
+
+% Used by @verbatim ... @endverbatim
+\newenvironment{DoxyVerb}{%
+ \footnotesize%
+ \verbatim%
+}{%
+ \endverbatim%
+ \normalsize%
+}
+
+% Used by @verbinclude
+\newenvironment{DoxyVerbInclude}{%
+ \DoxyVerb%
+}{%
+ \endDoxyVerb%
+}
+
+% Used by numbered lists (using '-#' or <ol> ... </ol>)
+\newenvironment{DoxyEnumerate}{%
+ \enumerate%
+}{%
+ \endenumerate%
+}
+
+% Used by bullet lists (using '-', @li, @arg, or <ul> ... </ul>)
+\newenvironment{DoxyItemize}{%
+ \itemize%
+}{%
+ \enditemize%
+}
+
+% Used by description lists (using <dl> ... </dl>)
+\newenvironment{DoxyDescription}{%
+ \description%
+}{%
+ \enddescription%
+}
+
+% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
+% (only if caption is specified)
+\newenvironment{DoxyImage}{%
+ \begin{figure}[H]%
+ \begin{center}%
+}{%
+ \end{center}%
+ \end{figure}%
+}
+
+% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
+% (only if no caption is specified)
+\newenvironment{DoxyImageNoCaption}{%
+ \begin{center}%
+}{%
+ \end{center}%
+}
+
+% Used by @attention
+\newenvironment{DoxyAttention}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @author and @authors
+\newenvironment{DoxyAuthor}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @date
+\newenvironment{DoxyDate}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @invariant
+\newenvironment{DoxyInvariant}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @note
+\newenvironment{DoxyNote}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @post
+\newenvironment{DoxyPostcond}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @pre
+\newenvironment{DoxyPrecond}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @copyright
+\newenvironment{DoxyCopyright}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @remark
+\newenvironment{DoxyRemark}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @return and @returns
+\newenvironment{DoxyReturn}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @since
+\newenvironment{DoxySince}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @see
+\newenvironment{DoxySeeAlso}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @version
+\newenvironment{DoxyVersion}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @warning
+\newenvironment{DoxyWarning}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @internal
+\newenvironment{DoxyInternal}[1]{%
+ \paragraph*{#1}%
+}{%
+}
+
+% Used by @par and @paragraph
+\newenvironment{DoxyParagraph}[1]{%
+ \begin{list}{}{%
+ \settowidth{\labelwidth}{40pt}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \setlength{\parsep}{0pt}%
+ \setlength{\itemsep}{-4pt}%
+ \renewcommand{\makelabel}{\entrylabel}%
+ }%
+ \item[#1]%
+}{%
+ \end{list}%
+}
+
+% Used by parameter lists
+\newenvironment{DoxyParams}[2][]{%
+ \tabulinesep=1mm%
+ \par%
+ \ifthenelse{\equal{#1}{}}%
+ {\begin{longtabu} spread 0pt [l]{|X[-1,l]|X[-1,l]|}}% name + description
+ {\ifthenelse{\equal{#1}{1}}%
+ {\begin{longtabu} spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + name + desc
+ {\begin{longtabu} spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + type + name + desc
+ }
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu}%
+ \vspace{6pt}%
+}
+
+% Used for fields of simple structs
+\newenvironment{DoxyFields}[1]{%
+ \tabulinesep=1mm%
+ \par%
+ \begin{longtabu} spread 0pt [l]{|X[-1,r]|X[-1,l]|X[-1,l]|}%
+ \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu}%
+ \vspace{6pt}%
+}
+
+% Used for fields simple class style enums
+\newenvironment{DoxyEnumFields}[1]{%
+ \tabulinesep=1mm%
+ \par%
+ \begin{longtabu} spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu}%
+ \vspace{6pt}%
+}
+
+% Used for parameters within a detailed function description
+\newenvironment{DoxyParamCaption}{%
+ \renewcommand{\item}[2][]{\\ \hspace*{2.0cm} ##1 {\em ##2}}%
+}{%
+}
+
+% Used by return value lists
+\newenvironment{DoxyRetVals}[1]{%
+ \tabulinesep=1mm%
+ \par%
+ \begin{longtabu} spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu}%
+ \vspace{6pt}%
+}
+
+% Used by exception lists
+\newenvironment{DoxyExceptions}[1]{%
+ \tabulinesep=1mm%
+ \par%
+ \begin{longtabu} spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu}%
+ \vspace{6pt}%
+}
+
+% Used by template parameter lists
+\newenvironment{DoxyTemplParams}[1]{%
+ \tabulinesep=1mm%
+ \par%
+ \begin{longtabu} spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu}%
+ \vspace{6pt}%
+}
+
+% Used for member lists
+\newenvironment{DoxyCompactItemize}{%
+ \begin{itemize}%
+ \setlength{\itemsep}{-3pt}%
+ \setlength{\parsep}{0pt}%
+ \setlength{\topsep}{0pt}%
+ \setlength{\partopsep}{0pt}%
+}{%
+ \end{itemize}%
+}
+
+% Used for member descriptions
+\newenvironment{DoxyCompactList}{%
+ \begin{list}{}{%
+ \setlength{\leftmargin}{0.5cm}%
+ \setlength{\itemsep}{0pt}%
+ \setlength{\parsep}{0pt}%
+ \setlength{\topsep}{0pt}%
+ \renewcommand{\makelabel}{\hfill}%
+ }%
+}{%
+ \end{list}%
+}
+
+% Used for reference lists (@bug, @deprecated, @todo, etc.)
+\newenvironment{DoxyRefList}{%
+ \begin{list}{}{%
+ \setlength{\labelwidth}{10pt}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \addtolength{\leftmargin}{\labelsep}%
+ \renewcommand{\makelabel}{\xreflabel}%
+ }%
+}{%
+ \end{list}%
+}
+
+% Used by @bug, @deprecated, @todo, etc.
+\newenvironment{DoxyRefDesc}[1]{%
+ \begin{list}{}{%
+ \renewcommand\makelabel[1]{\textbf{##1}}%
+ \settowidth\labelwidth{\makelabel{#1}}%
+ \setlength\leftmargin{\labelwidth+\labelsep}%
+ }%
+}{%
+ \end{list}%
+}
+
+% Used by parameter lists and simple sections
+\newenvironment{Desc}
+{\begin{list}{}{%
+ \settowidth{\labelwidth}{20pt}%
+ \setlength{\parsep}{0pt}%
+ \setlength{\itemsep}{0pt}%
+ \setlength{\leftmargin}{\labelwidth+\labelsep}%
+ \renewcommand{\makelabel}{\entrylabel}%
+ }
+}{%
+ \end{list}%
+}
+
+% Used by tables
+\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}%
+\newenvironment{TabularC}[1]%
+{\tabulinesep=1mm
+\begin{longtabu} spread 0pt [c]{*#1{|X[-1]}|}}%
+{\end{longtabu}\par}%
+
+\newenvironment{TabularNC}[1]%
+{\begin{tabu} spread 0pt [l]{*#1{|X[-1]}|}}%
+{\end{tabu}\par}%
+
+% Used for member group headers
+\newenvironment{Indent}{%
+ \begin{list}{}{%
+ \setlength{\leftmargin}{0.5cm}%
+ }%
+ \item[]\ignorespaces%
+}{%
+ \unskip%
+ \end{list}%
+}
+
+% Used when hyperlinks are turned off
+\newcommand{\doxyref}[3]{%
+ \textbf{#1} (\textnormal{#2}\,\pageref{#3})%
+}
+
+% Used to link to a table when hyperlinks are turned on
+\newcommand{\doxytablelink}[2]{%
+ \ref{#1}%
+}
+
+% Used to link to a table when hyperlinks are turned off
+\newcommand{\doxytableref}[3]{%
+ \ref{#3}%
+}
+
+% Used by @addindex
+\newcommand{\lcurly}{\{}
+\newcommand{\rcurly}{\}}
+
+% Colors used for syntax highlighting
+\definecolor{comment}{rgb}{0.5,0.0,0.0}
+\definecolor{keyword}{rgb}{0.0,0.5,0.0}
+\definecolor{keywordtype}{rgb}{0.38,0.25,0.125}
+\definecolor{keywordflow}{rgb}{0.88,0.5,0.0}
+\definecolor{preprocessor}{rgb}{0.5,0.38,0.125}
+\definecolor{stringliteral}{rgb}{0.0,0.125,0.25}
+\definecolor{charliteral}{rgb}{0.0,0.5,0.5}
+\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0}
+\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43}
+\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0}
+\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0}
+
+% Color used for table heading
+\newcommand{\tableheadbgcolor}{lightgray}%
+
+% Version of hypertarget with correct landing location
+\newcommand{\Hypertarget}[1]{\Hy@raisedlink{\hypertarget{#1}{}}}
+
+% Define caption that is also suitable in a table
+\makeatletter
+\def\doxyfigcaption{%
+\refstepcounter{figure}%
+\@dblarg{\@caption{figure}}}
+\makeatother
diff --git a/doc/api-ref/latex/files.tex b/doc/api-ref/latex/files.tex
new file mode 100644
index 0000000..d076b5a
--- /dev/null
+++ b/doc/api-ref/latex/files.tex
@@ -0,0 +1,9 @@
+\section{File List}
+Here is a list of all files with brief descriptions\+:\begin{DoxyCompactList}
+\item\contentsline{section}{homescreen\+\_\+service/\hyperlink{homescreen_8c}{homescreen.\+c} }{\pageref{homescreen_8c}}{}
+\item\contentsline{section}{homescreen\+\_\+service/\hyperlink{hs-helper_8c}{hs-\/helper.\+c} }{\pageref{hs-helper_8c}}{}
+\item\contentsline{section}{homescreen\+\_\+service/\hyperlink{hs-helper_8h}{hs-\/helper.\+h} }{\pageref{hs-helper_8h}}{}
+\item\contentsline{section}{include/libhomescreen/\hyperlink{libhomescreen_8hpp}{libhomescreen.\+hpp} }{\pageref{libhomescreen_8hpp}}{}
+\item\contentsline{section}{libhomescreen/\hyperlink{libhomescreen_8cpp}{libhomescreen.\+cpp} }{\pageref{libhomescreen_8cpp}}{}
+\item\contentsline{section}{libhomescreen/\hyperlink{test_8cpp}{test.\+cpp} }{\pageref{test_8cpp}}{}
+\end{DoxyCompactList}
diff --git a/doc/api-ref/latex/refman.tex b/doc/api-ref/latex/refman.tex
new file mode 100644
index 0000000..2a03ade
--- /dev/null
+++ b/doc/api-ref/latex/refman.tex
@@ -0,0 +1,165 @@
+\documentclass[twoside]{book}
+
+% Packages required by doxygen
+\usepackage{fixltx2e}
+\usepackage{calc}
+\usepackage{doxygen}
+\usepackage[export]{adjustbox} % also loads graphicx
+\usepackage{graphicx}
+\usepackage[utf8]{inputenc}
+\usepackage{makeidx}
+\usepackage{multicol}
+\usepackage{multirow}
+\PassOptionsToPackage{warn}{textcomp}
+\usepackage{textcomp}
+\usepackage[nointegrals]{wasysym}
+\usepackage[table]{xcolor}
+
+% Font selection
+\usepackage[T1]{fontenc}
+\usepackage[scaled=.90]{helvet}
+\usepackage{courier}
+\usepackage{amssymb}
+\usepackage{sectsty}
+\renewcommand{\familydefault}{\sfdefault}
+\allsectionsfont{%
+ \fontseries{bc}\selectfont%
+ \color{darkgray}%
+}
+\renewcommand{\DoxyLabelFont}{%
+ \fontseries{bc}\selectfont%
+ \color{darkgray}%
+}
+\newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}}
+
+% Page & text layout
+\usepackage{geometry}
+\geometry{%
+ a4paper,%
+ top=2.5cm,%
+ bottom=2.5cm,%
+ left=2.5cm,%
+ right=2.5cm%
+}
+\tolerance=750
+\hfuzz=15pt
+\hbadness=750
+\setlength{\emergencystretch}{15pt}
+\setlength{\parindent}{0cm}
+\setlength{\parskip}{3ex plus 2ex minus 2ex}
+\makeatletter
+\renewcommand{\paragraph}{%
+ \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{%
+ \normalfont\normalsize\bfseries\SS@parafont%
+ }%
+}
+\renewcommand{\subparagraph}{%
+ \@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{%
+ \normalfont\normalsize\bfseries\SS@subparafont%
+ }%
+}
+\makeatother
+
+% Headers & footers
+\usepackage{fancyhdr}
+\pagestyle{fancyplain}
+\fancyhead[LE]{\fancyplain{}{\bfseries\thepage}}
+\fancyhead[CE]{\fancyplain{}{}}
+\fancyhead[RE]{\fancyplain{}{\bfseries\leftmark}}
+\fancyhead[LO]{\fancyplain{}{\bfseries\rightmark}}
+\fancyhead[CO]{\fancyplain{}{}}
+\fancyhead[RO]{\fancyplain{}{\bfseries\thepage}}
+\fancyfoot[LE]{\fancyplain{}{}}
+\fancyfoot[CE]{\fancyplain{}{}}
+\fancyfoot[RE]{\fancyplain{}{\bfseries\scriptsize Generated by Doxygen }}
+\fancyfoot[LO]{\fancyplain{}{\bfseries\scriptsize Generated by Doxygen }}
+\fancyfoot[CO]{\fancyplain{}{}}
+\fancyfoot[RO]{\fancyplain{}{}}
+\renewcommand{\footrulewidth}{0.4pt}
+\renewcommand{\chaptermark}[1]{%
+ \markboth{#1}{}%
+}
+\renewcommand{\sectionmark}[1]{%
+ \markright{\thesection\ #1}%
+}
+
+% Indices & bibliography
+\usepackage{natbib}
+\usepackage[titles]{tocloft}
+\setcounter{tocdepth}{3}
+\setcounter{secnumdepth}{5}
+\makeindex
+
+% Hyperlinks (required, but should be loaded last)
+\usepackage{ifpdf}
+\ifpdf
+ \usepackage[pdftex,pagebackref=true]{hyperref}
+\else
+ \usepackage[ps2pdf,pagebackref=true]{hyperref}
+\fi
+\hypersetup{%
+ colorlinks=true,%
+ linkcolor=blue,%
+ citecolor=blue,%
+ unicode%
+}
+
+% Custom commands
+\newcommand{\clearemptydoublepage}{%
+ \newpage{\pagestyle{empty}\cleardoublepage}%
+}
+
+\usepackage{caption}
+\captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top}
+
+%===== C O N T E N T S =====
+
+\begin{document}
+
+% Titlepage & ToC
+\hypersetup{pageanchor=false,
+ bookmarksnumbered=true,
+ pdfencoding=unicode
+ }
+\pagenumbering{alph}
+\begin{titlepage}
+\vspace*{7cm}
+\begin{center}%
+{\Large Home\+Screen\+Binding }\\
+\vspace*{1cm}
+{\large Generated by Doxygen 1.8.13}\\
+\end{center}
+\end{titlepage}
+\clearemptydoublepage
+\pagenumbering{roman}
+\tableofcontents
+\clearemptydoublepage
+\pagenumbering{arabic}
+\hypersetup{pageanchor=true}
+
+%--- Begin generated contents ---
+\chapter{Class Index}
+\input{annotated}
+\chapter{File Index}
+\input{files}
+\chapter{Class Documentation}
+\input{df/d7d/structevent}
+\input{de/dd0/class_lib_home_screen}
+\chapter{File Documentation}
+\input{d0/d1e/homescreen_8c}
+\input{dd/d1d/hs-helper_8c}
+\input{d3/d3d/hs-helper_8h}
+\input{df/d43/libhomescreen_8hpp}
+\input{d0/d8a/libhomescreen_8cpp}
+\input{df/dac/test_8cpp}
+%--- End generated contents ---
+
+% Index
+\backmatter
+\newpage
+\phantomsection
+\clearemptydoublepage
+\addcontentsline{toc}{chapter}{Index}
+\printindex
+
+\end{document}