\doxysection{src/trxc\+\_\+client.c File Reference}
\label{trxc__client_8c}\index{src/trxc\_client.c@{src/trxc\_client.c}}


TRXC client command queue engine\+: queue, retransmission, RSP matching.  


{\ttfamily \#include $<$errno.\+h$>$}\newline
{\ttfamily \#include $<$stdio.\+h$>$}\newline
{\ttfamily \#include $<$string.\+h$>$}\newline
{\ttfamily \#include $<$stdarg.\+h$>$}\newline
{\ttfamily \#include $<$stdbool.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/talloc.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/timer.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/logging.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/linuxlist.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/utils.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/trx/trxc.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/trx/trxc\+\_\+client.\+h$>$}\newline
\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item 
struct \textbf{ trxc\+\_\+cmd\+\_\+entry}
\begin{DoxyCompactList}\small\item\em A single command in the queue. \end{DoxyCompactList}\item 
struct \textbf{ osmo\+\_\+trxc\+\_\+client}
\item 
struct \textbf{ trxc\+\_\+setformat\+\_\+ctx}
\begin{DoxyCompactList}\small\item\em Per-\/call SETFORMAT negotiation state, passed as cb\+\_\+data through \doxyref{osmo\+\_\+trxc\+\_\+client\+\_\+send\+\_\+cmd()}{p.}{trxc__client_8h_a3d4feb3973983d442b06358d3beffc90} and freed in \doxyref{setformat\+\_\+rsp\+\_\+cb()}{p.}{trxc__client_8c_a6b828b6f965ee2e131f858e2630c08dc} \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \textbf{ TRXC\+\_\+\+CLIENT\+\_\+\+RETRANS\+\_\+\+SEC}~2
\begin{DoxyCompactList}\small\item\em Default retransmit timeout (in seconds) \end{DoxyCompactList}\item 
\#define \textbf{ LOGCL}(client,  level,  fmt,  args...)~ LOGP((client)-\/$>$log\+\_\+cat, level, \char`\"{}\%s\+: \char`\"{} fmt, (client)-\/$>$name, \#\# args)
\item 
\#define \textbf{ CMD\+\_\+\+NAME\+\_\+\+FMT}~\char`\"{}CMD \%s\%s\%s\char`\"{}
\item 
\#define \textbf{ CMD\+\_\+\+NAME\+\_\+\+ARGS}(e)~ (e)-\/$>$msg.\+cmd, (e)-\/$>$msg.\+params[0] != \textquotesingle{}\textbackslash{}0\textquotesingle{} ? \char`\"{} \char`\"{} \+: \char`\"{}\char`\"{}, (e)-\/$>$msg.\+params
\end{DoxyCompactItemize}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
static int \textbf{ trxc\+\_\+client\+\_\+fatal} (struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, const struct \textbf{ osmo\+\_\+trxc\+\_\+msg} $\ast$rsp)
\item 
static void \textbf{ trxc\+\_\+client\+\_\+send\+\_\+next} (struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client)
\item 
static void \textbf{ trxc\+\_\+client\+\_\+retrans\+\_\+timer\+\_\+cb} (void $\ast$data)
\item 
struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$ \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+alloc} (void $\ast$ctx)
\begin{DoxyCompactList}\small\item\em Allocate a TRXC client instance. \end{DoxyCompactList}\item 
void \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+free} (struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client)
\begin{DoxyCompactList}\small\item\em Free the given TRXC client instance (flushes the command queue). \end{DoxyCompactList}\item 
void \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+set\+\_\+priv} (struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, void $\ast$priv)
\begin{DoxyCompactList}\small\item\em Set the application-\/private data. \end{DoxyCompactList}\item 
void $\ast$ \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+get\+\_\+priv} (const struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client)
\begin{DoxyCompactList}\small\item\em Obtain the application-\/private data. \end{DoxyCompactList}\item 
void \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+set\+\_\+tx\+\_\+msg\+\_\+cb} (struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+tx\+\_\+msg\+\_\+cb} $\ast$cb)
\begin{DoxyCompactList}\small\item\em Set the tx\+\_\+msg call-\/back (mandatory before the first command is sent) \end{DoxyCompactList}\item 
void \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+set\+\_\+fatal\+\_\+error\+\_\+cb} (struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+fatal\+\_\+error\+\_\+cb} $\ast$cb)
\begin{DoxyCompactList}\small\item\em Set the fatal\+\_\+error call-\/back (optional; default\+: log) \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+set\+\_\+name} (struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, const char $\ast$fmt,...)
\begin{DoxyCompactList}\small\item\em Set the name (log prefix) of the given instance, e.\+g. \end{DoxyCompactList}\item 
void \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+set\+\_\+log\+\_\+cat} (struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, int log\+\_\+cat)
\begin{DoxyCompactList}\small\item\em Set the logging category (e.\+g. \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+set\+\_\+retrans} (struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, unsigned int sec)
\begin{DoxyCompactList}\small\item\em Set the retransmit timeout in seconds (default\+: 2). \end{DoxyCompactList}\item 
void \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+set\+\_\+max\+\_\+retrans} (struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, unsigned int n)
\begin{DoxyCompactList}\small\item\em Set the maximum number of retransmissions of a command (default\+: 0). \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+send\+\_\+cmd} (struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, uint32\+\_\+t flags, \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+rsp\+\_\+cb} $\ast$cb, void $\ast$cb\+\_\+data, const char $\ast$cmd, const char $\ast$fmt,...)
\begin{DoxyCompactList}\small\item\em Enqueue a new command for transmission. \end{DoxyCompactList}\item 
void \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+flush} (struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client)
\begin{DoxyCompactList}\small\item\em Flush (drop) all pending commands. \end{DoxyCompactList}\item 
static bool \textbf{ cmd\+\_\+matches\+\_\+rsp} (const struct \textbf{ trxc\+\_\+cmd\+\_\+entry} $\ast$e, const struct \textbf{ osmo\+\_\+trxc\+\_\+msg} $\ast$rsp)
\item 
static int \textbf{ trxc\+\_\+client\+\_\+default\+\_\+rsp\+\_\+cb} (struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, const struct \textbf{ trxc\+\_\+cmd\+\_\+entry} $\ast$e, const struct \textbf{ osmo\+\_\+trxc\+\_\+msg} $\ast$rsp)
\item 
int \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+rx\+\_\+msg} (struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, const struct \textbf{ osmo\+\_\+trxc\+\_\+msg} $\ast$rsp)
\begin{DoxyCompactList}\small\item\em Feed a received (parsed) response message into the engine. \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+rx} (struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, const char $\ast$buf, size\+\_\+t len)
\begin{DoxyCompactList}\small\item\em Feed a datagram received on the ctrl socket into the engine. \end{DoxyCompactList}\item 
static int \textbf{ setformat\+\_\+rsp\+\_\+cb} (struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, const struct \textbf{ osmo\+\_\+trxc\+\_\+msg} $\ast$rsp, void $\ast$cb\+\_\+data)
\item 
int \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+negotiate\+\_\+format} (struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, uint8\+\_\+t ver\+\_\+max, \textbf{ osmo\+\_\+trxc\+\_\+setformat\+\_\+cb} $\ast$cb, void $\ast$cb\+\_\+data)
\begin{DoxyCompactList}\small\item\em Negotiate the TRXD PDU version with the transceiver (SETFORMAT). \end{DoxyCompactList}\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
TRXC client command queue engine\+: queue, retransmission, RSP matching. 

Based on the TRXC command queue logic in osmo-\/bts-\/trx (trx\+\_\+if.\+c). 

\doxysubsection{Macro Definition Documentation}
\mbox{\label{trxc__client_8c_a331034aa762e251da27d0acdb7dcc5e1}} 
\index{trxc\_client.c@{trxc\_client.c}!CMD\_NAME\_ARGS@{CMD\_NAME\_ARGS}}
\index{CMD\_NAME\_ARGS@{CMD\_NAME\_ARGS}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{CMD\_NAME\_ARGS}
{\footnotesize\ttfamily \#define CMD\+\_\+\+NAME\+\_\+\+ARGS(\begin{DoxyParamCaption}\item[{}]{e }\end{DoxyParamCaption})~ (e)-\/$>$msg.\+cmd, (e)-\/$>$msg.\+params[0] != \textquotesingle{}\textbackslash{}0\textquotesingle{} ? \char`\"{} \char`\"{} \+: \char`\"{}\char`\"{}, (e)-\/$>$msg.\+params}

\mbox{\label{trxc__client_8c_ac9fb51dfa9c93b78dfebe64c769a475c}} 
\index{trxc\_client.c@{trxc\_client.c}!CMD\_NAME\_FMT@{CMD\_NAME\_FMT}}
\index{CMD\_NAME\_FMT@{CMD\_NAME\_FMT}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{CMD\_NAME\_FMT}
{\footnotesize\ttfamily \#define CMD\+\_\+\+NAME\+\_\+\+FMT~\char`\"{}CMD \%s\%s\%s\char`\"{}}

\mbox{\label{trxc__client_8c_aa0ca7a7a2d7d028b57b282366e8987d5}} 
\index{trxc\_client.c@{trxc\_client.c}!LOGCL@{LOGCL}}
\index{LOGCL@{LOGCL}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{LOGCL}
{\footnotesize\ttfamily \#define LOGCL(\begin{DoxyParamCaption}\item[{}]{client,  }\item[{}]{level,  }\item[{}]{fmt,  }\item[{}]{args... }\end{DoxyParamCaption})~ LOGP((client)-\/$>$log\+\_\+cat, level, \char`\"{}\%s\+: \char`\"{} fmt, (client)-\/$>$name, \#\# args)}

\mbox{\label{trxc__client_8c_a247030337128f8d53153cba748734e73}} 
\index{trxc\_client.c@{trxc\_client.c}!TRXC\_CLIENT\_RETRANS\_SEC@{TRXC\_CLIENT\_RETRANS\_SEC}}
\index{TRXC\_CLIENT\_RETRANS\_SEC@{TRXC\_CLIENT\_RETRANS\_SEC}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{TRXC\_CLIENT\_RETRANS\_SEC}
{\footnotesize\ttfamily \#define TRXC\+\_\+\+CLIENT\+\_\+\+RETRANS\+\_\+\+SEC~2}



Default retransmit timeout (in seconds) 



\doxysubsection{Function Documentation}
\mbox{\label{trxc__client_8c_a62425b740cd7919cccea2106698db07f}} 
\index{trxc\_client.c@{trxc\_client.c}!cmd\_matches\_rsp@{cmd\_matches\_rsp}}
\index{cmd\_matches\_rsp@{cmd\_matches\_rsp}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{cmd\_matches\_rsp()}
{\footnotesize\ttfamily static bool cmd\+\_\+matches\+\_\+rsp (\begin{DoxyParamCaption}\item[{const struct \textbf{ trxc\+\_\+cmd\+\_\+entry} $\ast$}]{e,  }\item[{const struct \textbf{ osmo\+\_\+trxc\+\_\+msg} $\ast$}]{rsp }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+trxc\+\_\+msg\+::cmd}, \textbf{ trxc\+\_\+cmd\+\_\+entry\+::flags}, \textbf{ trxc\+\_\+cmd\+\_\+entry\+::msg}, \textbf{ OSMO\+\_\+\+TRXC\+\_\+\+F\+\_\+\+MATCH\+\_\+\+PARAMS}, and \textbf{ osmo\+\_\+trxc\+\_\+msg\+::params}.



Referenced by \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+rx\+\_\+msg()}.

\mbox{\label{trxc__client_8c_ad5a01234612e2a0c956db1332f704595}} 
\index{trxc\_client.c@{trxc\_client.c}!osmo\_trxc\_client\_alloc@{osmo\_trxc\_client\_alloc}}
\index{osmo\_trxc\_client\_alloc@{osmo\_trxc\_client\_alloc}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{osmo\_trxc\_client\_alloc()}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$ osmo\+\_\+trxc\+\_\+client\+\_\+alloc (\begin{DoxyParamCaption}\item[{void $\ast$}]{ctx }\end{DoxyParamCaption})}



Allocate a TRXC client instance. 

The tx\+\_\+msg call-\/back must be set via \doxyref{osmo\+\_\+trxc\+\_\+client\+\_\+set\+\_\+tx\+\_\+msg\+\_\+cb()}{p.}{trxc__client_8c_a81f80a083903952dc287aa78de0b5c6d} before the first command is sent. 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em ctx} & talloc context to allocate from \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
pointer to the allocated instance; NULL on error 
\end{DoxyReturn}


References \textbf{ osmo\+\_\+trxc\+\_\+client\+::cmd\+\_\+queue}, \textbf{ osmo\+\_\+trxc\+\_\+client\+::log\+\_\+cat}, \textbf{ osmo\+\_\+trxc\+\_\+client\+::name}, \textbf{ osmo\+\_\+trxc\+\_\+client\+::retrans\+\_\+sec}, \textbf{ osmo\+\_\+trxc\+\_\+client\+::retrans\+\_\+timer}, \textbf{ TRXC\+\_\+\+CLIENT\+\_\+\+RETRANS\+\_\+\+SEC}, and \textbf{ trxc\+\_\+client\+\_\+retrans\+\_\+timer\+\_\+cb()}.

\mbox{\label{trxc__client_8c_aabbbfe101ec9116c96e746bf6fe75834}} 
\index{trxc\_client.c@{trxc\_client.c}!osmo\_trxc\_client\_flush@{osmo\_trxc\_client\_flush}}
\index{osmo\_trxc\_client\_flush@{osmo\_trxc\_client\_flush}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{osmo\_trxc\_client\_flush()}
{\footnotesize\ttfamily void osmo\+\_\+trxc\+\_\+client\+\_\+flush (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$}]{client }\end{DoxyParamCaption})}



Flush (drop) all pending commands. 

May be called from within a response call-\/back. 

References \textbf{ osmo\+\_\+trxc\+\_\+client\+::cmd\+\_\+queue}, \textbf{ osmo\+\_\+trxc\+\_\+client\+::flushed\+\_\+in\+\_\+rx}, \textbf{ osmo\+\_\+trxc\+\_\+client\+::in\+\_\+rx}, \textbf{ osmo\+\_\+trxc\+\_\+client\+::last\+\_\+acked}, \textbf{ trxc\+\_\+cmd\+\_\+entry\+::list}, and \textbf{ osmo\+\_\+trxc\+\_\+client\+::retrans\+\_\+timer}.



Referenced by \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+free()}.

\mbox{\label{trxc__client_8c_ae3bb29129e6c28d0dfd6737d16360be0}} 
\index{trxc\_client.c@{trxc\_client.c}!osmo\_trxc\_client\_free@{osmo\_trxc\_client\_free}}
\index{osmo\_trxc\_client\_free@{osmo\_trxc\_client\_free}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{osmo\_trxc\_client\_free()}
{\footnotesize\ttfamily void osmo\+\_\+trxc\+\_\+client\+\_\+free (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$}]{client }\end{DoxyParamCaption})}



Free the given TRXC client instance (flushes the command queue). 

Must not be called from within a response call-\/back. 

References \textbf{ osmo\+\_\+trxc\+\_\+client\+::in\+\_\+rx}, and \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+flush()}.

\mbox{\label{trxc__client_8c_aa9e71f7ac9ea19c3ec242fba88876c6c}} 
\index{trxc\_client.c@{trxc\_client.c}!osmo\_trxc\_client\_get\_priv@{osmo\_trxc\_client\_get\_priv}}
\index{osmo\_trxc\_client\_get\_priv@{osmo\_trxc\_client\_get\_priv}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{osmo\_trxc\_client\_get\_priv()}
{\footnotesize\ttfamily void $\ast$ osmo\+\_\+trxc\+\_\+client\+\_\+get\+\_\+priv (\begin{DoxyParamCaption}\item[{const struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$}]{client }\end{DoxyParamCaption})}



Obtain the application-\/private data. 



References \textbf{ osmo\+\_\+trxc\+\_\+client\+::priv}.

\mbox{\label{trxc__client_8c_ab31f5fca2e000ebac042384251349e24}} 
\index{trxc\_client.c@{trxc\_client.c}!osmo\_trxc\_client\_negotiate\_format@{osmo\_trxc\_client\_negotiate\_format}}
\index{osmo\_trxc\_client\_negotiate\_format@{osmo\_trxc\_client\_negotiate\_format}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{osmo\_trxc\_client\_negotiate\_format()}
{\footnotesize\ttfamily int osmo\+\_\+trxc\+\_\+client\+\_\+negotiate\+\_\+format (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$}]{client,  }\item[{uint8\+\_\+t}]{ver\+\_\+max,  }\item[{\textbf{ osmo\+\_\+trxc\+\_\+setformat\+\_\+cb} $\ast$}]{cb,  }\item[{void $\ast$}]{cb\+\_\+data }\end{DoxyParamCaption})}



Negotiate the TRXD PDU version with the transceiver (SETFORMAT). 

If the transceiver does not support the format negotiation at all, it rejects the command with \textquotesingle{}RSP ERR 1\textquotesingle{} and version 0 is assumed. If the requested version is not supported by the transceiver, the status code of the response indicates a preferred lower version.


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em client} & TRXC client instance \\
\hline
\mbox{\texttt{ in}}  & {\em ver\+\_\+max} & the maximum (desired) TRXD PDU version \\
\hline
\mbox{\texttt{ in}}  & {\em cb} & call-\/back invoked with the negotiated version \\
\hline
\mbox{\texttt{ in}}  & {\em cb\+\_\+data} & opaque data for the call-\/back \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success; negative on error 
\end{DoxyReturn}


References \textbf{ trxc\+\_\+setformat\+\_\+ctx\+::cb}, \textbf{ trxc\+\_\+setformat\+\_\+ctx\+::cb\+\_\+data}, \textbf{ LOGCL}, \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+send\+\_\+cmd()}, \textbf{ OSMO\+\_\+\+TRXC\+\_\+\+CMD\+\_\+\+SETFORMAT}, \textbf{ OSMO\+\_\+\+TRXC\+\_\+\+F\+\_\+\+MATCH\+\_\+\+PARAMS}, \textbf{ setformat\+\_\+rsp\+\_\+cb()}, and \textbf{ trxc\+\_\+setformat\+\_\+ctx\+::ver\+\_\+req}.

\mbox{\label{trxc__client_8c_a943c95be6750189cbbabd4e874a57ebf}} 
\index{trxc\_client.c@{trxc\_client.c}!osmo\_trxc\_client\_rx@{osmo\_trxc\_client\_rx}}
\index{osmo\_trxc\_client\_rx@{osmo\_trxc\_client\_rx}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{osmo\_trxc\_client\_rx()}
{\footnotesize\ttfamily int osmo\+\_\+trxc\+\_\+client\+\_\+rx (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$}]{client,  }\item[{const char $\ast$}]{buf,  }\item[{size\+\_\+t}]{len }\end{DoxyParamCaption})}



Feed a datagram received on the ctrl socket into the engine. 

A convenience wrapper around \doxyref{osmo\+\_\+trxc\+\_\+client\+\_\+rx\+\_\+msg()}{p.}{trxc__client_8c_a3d0d41044912e93557637be3dec55b58} for applications managing the TRXC socket themselves\+: parses the given datagram first.


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em client} & TRXC client instance \\
\hline
\mbox{\texttt{ in}}  & {\em buf} & received datagram (not necessarily zero-\/terminated) \\
\hline
\mbox{\texttt{ in}}  & {\em len} & length of the datagram \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success; negative on error 
\end{DoxyReturn}


References \textbf{ LOGCL}, \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+rx\+\_\+msg()}, and \textbf{ osmo\+\_\+trxc\+\_\+msg\+\_\+parse()}.

\mbox{\label{trxc__client_8c_a3d0d41044912e93557637be3dec55b58}} 
\index{trxc\_client.c@{trxc\_client.c}!osmo\_trxc\_client\_rx\_msg@{osmo\_trxc\_client\_rx\_msg}}
\index{osmo\_trxc\_client\_rx\_msg@{osmo\_trxc\_client\_rx\_msg}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{osmo\_trxc\_client\_rx\_msg()}
{\footnotesize\ttfamily int osmo\+\_\+trxc\+\_\+client\+\_\+rx\+\_\+msg (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$}]{client,  }\item[{const struct \textbf{ osmo\+\_\+trxc\+\_\+msg} $\ast$}]{rsp }\end{DoxyParamCaption})}



Feed a received (parsed) response message into the engine. 

The engine filters duplicate responses caused by retransmissions, matches the response against the command in flight, invokes its response call-\/back and transmits the next queued command (if any). E.\+g. an \doxyref{osmo\+\_\+trx\+\_\+ep}{p.}{structosmo__trx__ep} user calls this from \doxyref{osmo\+\_\+trx\+\_\+ep\+\_\+rx\+\_\+ctrl\+\_\+msg()}{p.}{ep_8h_a7f40e507f197982f743955c738c4ed9d}.


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em client} & TRXC client instance \\
\hline
\mbox{\texttt{ in}}  & {\em rsp} & received message (rsp-\/$>$type must be OSMO\+\_\+\+TRXC\+\_\+\+MT\+\_\+\+RSP) \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success; negative on error 
\end{DoxyReturn}


References \textbf{ trxc\+\_\+cmd\+\_\+entry\+::cb\+\_\+data}, \textbf{ cmd\+\_\+matches\+\_\+rsp()}, \textbf{ CMD\+\_\+\+NAME\+\_\+\+ARGS}, \textbf{ CMD\+\_\+\+NAME\+\_\+\+FMT}, \textbf{ osmo\+\_\+trxc\+\_\+client\+::cmd\+\_\+queue}, \textbf{ trxc\+\_\+cmd\+\_\+entry\+::flags}, \textbf{ osmo\+\_\+trxc\+\_\+client\+::flushed\+\_\+in\+\_\+rx}, \textbf{ osmo\+\_\+trxc\+\_\+client\+::in\+\_\+rx}, \textbf{ osmo\+\_\+trxc\+\_\+client\+::last\+\_\+acked}, \textbf{ trxc\+\_\+cmd\+\_\+entry\+::list}, \textbf{ LOGCL}, \textbf{ trxc\+\_\+cmd\+\_\+entry\+::n\+\_\+retrans}, \textbf{ OSMO\+\_\+\+TRXC\+\_\+\+F\+\_\+\+CRITICAL}, \textbf{ osmo\+\_\+trxc\+\_\+msg\+\_\+name()}, \textbf{ OSMO\+\_\+\+TRXC\+\_\+\+MT\+\_\+\+RSP}, \textbf{ osmo\+\_\+trxc\+\_\+client\+::retrans\+\_\+sec}, \textbf{ osmo\+\_\+trxc\+\_\+client\+::retrans\+\_\+timer}, \textbf{ trxc\+\_\+cmd\+\_\+entry\+::rsp\+\_\+cb}, \textbf{ trxc\+\_\+client\+\_\+default\+\_\+rsp\+\_\+cb()}, \textbf{ trxc\+\_\+client\+\_\+fatal()}, \textbf{ trxc\+\_\+client\+\_\+send\+\_\+next()}, and \textbf{ osmo\+\_\+trxc\+\_\+msg\+::type}.



Referenced by \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+rx()}.

\mbox{\label{trxc__client_8c_a3d4feb3973983d442b06358d3beffc90}} 
\index{trxc\_client.c@{trxc\_client.c}!osmo\_trxc\_client\_send\_cmd@{osmo\_trxc\_client\_send\_cmd}}
\index{osmo\_trxc\_client\_send\_cmd@{osmo\_trxc\_client\_send\_cmd}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{osmo\_trxc\_client\_send\_cmd()}
{\footnotesize\ttfamily int osmo\+\_\+trxc\+\_\+client\+\_\+send\+\_\+cmd (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$}]{client,  }\item[{uint32\+\_\+t}]{flags,  }\item[{\textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+rsp\+\_\+cb} $\ast$}]{cb,  }\item[{void $\ast$}]{cb\+\_\+data,  }\item[{const char $\ast$}]{cmd,  }\item[{const char $\ast$}]{fmt,  }\item[{}]{... }\end{DoxyParamCaption})}



Enqueue a new command for transmission. 

The new command is added to the end of the queue; there\textquotesingle{}s at most one command in flight at any time. Consecutive duplicate commands are not enqueued. Commands are retransmitted until a matching response is received (see \doxyref{osmo\+\_\+trxc\+\_\+client\+\_\+rx()}{p.}{trxc__client_8c_a943c95be6750189cbbabd4e874a57ebf}).


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em client} & TRXC client instance \\
\hline
\mbox{\texttt{ in}}  & {\em flags} & OSMO\+\_\+\+TRXC\+\_\+\+F\+\_\+$\ast$ \\
\hline
\mbox{\texttt{ in}}  & {\em cb} & call-\/back invoked on the response (optional); without it, a NACKed OSMO\+\_\+\+TRXC\+\_\+\+F\+\_\+\+CRITICAL command is escalated to the fatal\+\_\+error call-\/back, other responses are just logged \\
\hline
\mbox{\texttt{ in}}  & {\em cb\+\_\+data} & opaque data for the response call-\/back \\
\hline
\mbox{\texttt{ in}}  & {\em cmd} & command verb, e.\+g. \char`\"{}\+POWERON\char`\"{} \\
\hline
\mbox{\texttt{ in}}  & {\em fmt} & format string for the parameters (optional, may be NULL) \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success; negative on error 
\end{DoxyReturn}


References \textbf{ trxc\+\_\+cmd\+\_\+entry\+::cb\+\_\+data}, \textbf{ osmo\+\_\+trxc\+\_\+msg\+::cmd}, \textbf{ CMD\+\_\+\+NAME\+\_\+\+ARGS}, \textbf{ CMD\+\_\+\+NAME\+\_\+\+FMT}, \textbf{ osmo\+\_\+trxc\+\_\+client\+::cmd\+\_\+queue}, \textbf{ trxc\+\_\+cmd\+\_\+entry\+::flags}, \textbf{ osmo\+\_\+trxc\+\_\+client\+::in\+\_\+rx}, \textbf{ trxc\+\_\+cmd\+\_\+entry\+::list}, \textbf{ LOGCL}, \textbf{ trxc\+\_\+cmd\+\_\+entry\+::msg}, \textbf{ OSMO\+\_\+\+TRXC\+\_\+\+MT\+\_\+\+CMD}, \textbf{ osmo\+\_\+trxc\+\_\+msg\+::params}, \textbf{ trxc\+\_\+cmd\+\_\+entry\+::rsp\+\_\+cb}, \textbf{ trxc\+\_\+client\+\_\+send\+\_\+next()}, and \textbf{ osmo\+\_\+trxc\+\_\+msg\+::type}.



Referenced by \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+negotiate\+\_\+format()}, \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+poweroff()}, \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+poweron()}, \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+rxtune()}, and \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+txtune()}.

\mbox{\label{trxc__client_8c_a1b271ebc04eb5edfda4afeff18f63324}} 
\index{trxc\_client.c@{trxc\_client.c}!osmo\_trxc\_client\_set\_fatal\_error\_cb@{osmo\_trxc\_client\_set\_fatal\_error\_cb}}
\index{osmo\_trxc\_client\_set\_fatal\_error\_cb@{osmo\_trxc\_client\_set\_fatal\_error\_cb}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{osmo\_trxc\_client\_set\_fatal\_error\_cb()}
{\footnotesize\ttfamily void osmo\+\_\+trxc\+\_\+client\+\_\+set\+\_\+fatal\+\_\+error\+\_\+cb (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$}]{client,  }\item[{\textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+fatal\+\_\+error\+\_\+cb} $\ast$}]{cb }\end{DoxyParamCaption})}



Set the fatal\+\_\+error call-\/back (optional; default\+: log) 

set the fatal\+\_\+error call-\/back (optional; default\+: log) 

References \textbf{ osmo\+\_\+trxc\+\_\+client\+::fatal\+\_\+error\+\_\+cb}.

\mbox{\label{trxc__client_8c_a3ada10efa122ad7bc4e14fda47dc655e}} 
\index{trxc\_client.c@{trxc\_client.c}!osmo\_trxc\_client\_set\_log\_cat@{osmo\_trxc\_client\_set\_log\_cat}}
\index{osmo\_trxc\_client\_set\_log\_cat@{osmo\_trxc\_client\_set\_log\_cat}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{osmo\_trxc\_client\_set\_log\_cat()}
{\footnotesize\ttfamily void osmo\+\_\+trxc\+\_\+client\+\_\+set\+\_\+log\+\_\+cat (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$}]{client,  }\item[{int}]{log\+\_\+cat }\end{DoxyParamCaption})}



Set the logging category (e.\+g. 

DTRX in osmo-\/bts; default\+: DLGLOBAL) 

References \textbf{ osmo\+\_\+trxc\+\_\+client\+::log\+\_\+cat}.

\mbox{\label{trxc__client_8c_aa834d1912b41450f745946d8f37bc979}} 
\index{trxc\_client.c@{trxc\_client.c}!osmo\_trxc\_client\_set\_max\_retrans@{osmo\_trxc\_client\_set\_max\_retrans}}
\index{osmo\_trxc\_client\_set\_max\_retrans@{osmo\_trxc\_client\_set\_max\_retrans}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{osmo\_trxc\_client\_set\_max\_retrans()}
{\footnotesize\ttfamily void osmo\+\_\+trxc\+\_\+client\+\_\+set\+\_\+max\+\_\+retrans (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$}]{client,  }\item[{unsigned int}]{n }\end{DoxyParamCaption})}



Set the maximum number of retransmissions of a command (default\+: 0). 

Once a command has been retransmitted the given number of times without a response, the engine gives up and escalates to the fatal\+\_\+error call-\/back (with rsp == NULL); the command queue remains frozen. The special value 0 means no limit\+: retransmit indefinitely. 

References \textbf{ osmo\+\_\+trxc\+\_\+client\+::max\+\_\+retrans}.

\mbox{\label{trxc__client_8c_a13e5b9de0a928360d1f82a9597ede5a1}} 
\index{trxc\_client.c@{trxc\_client.c}!osmo\_trxc\_client\_set\_name@{osmo\_trxc\_client\_set\_name}}
\index{osmo\_trxc\_client\_set\_name@{osmo\_trxc\_client\_set\_name}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{osmo\_trxc\_client\_set\_name()}
{\footnotesize\ttfamily int osmo\+\_\+trxc\+\_\+client\+\_\+set\+\_\+name (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$}]{client,  }\item[{const char $\ast$}]{fmt,  }\item[{}]{... }\end{DoxyParamCaption})}



Set the name (log prefix) of the given instance, e.\+g. 

\char`\"{}phy0.\+trx0\char`\"{} 

References \textbf{ osmo\+\_\+trxc\+\_\+client\+::name}.

\mbox{\label{trxc__client_8c_a9d398e1561b81f93761f90b20b794115}} 
\index{trxc\_client.c@{trxc\_client.c}!osmo\_trxc\_client\_set\_priv@{osmo\_trxc\_client\_set\_priv}}
\index{osmo\_trxc\_client\_set\_priv@{osmo\_trxc\_client\_set\_priv}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{osmo\_trxc\_client\_set\_priv()}
{\footnotesize\ttfamily void osmo\+\_\+trxc\+\_\+client\+\_\+set\+\_\+priv (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$}]{client,  }\item[{void $\ast$}]{priv }\end{DoxyParamCaption})}



Set the application-\/private data. 



References \textbf{ osmo\+\_\+trxc\+\_\+client\+::priv}.

\mbox{\label{trxc__client_8c_ab67fd7760f57c0e86dc1b6cc13d7fe1e}} 
\index{trxc\_client.c@{trxc\_client.c}!osmo\_trxc\_client\_set\_retrans@{osmo\_trxc\_client\_set\_retrans}}
\index{osmo\_trxc\_client\_set\_retrans@{osmo\_trxc\_client\_set\_retrans}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{osmo\_trxc\_client\_set\_retrans()}
{\footnotesize\ttfamily int osmo\+\_\+trxc\+\_\+client\+\_\+set\+\_\+retrans (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$}]{client,  }\item[{unsigned int}]{sec }\end{DoxyParamCaption})}



Set the retransmit timeout in seconds (default\+: 2). 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em client} & TRXC client instance \\
\hline
\mbox{\texttt{ in}}  & {\em sec} & retransmit timeout; 0 is not allowed \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success; -\/EINVAL if sec == 0 
\end{DoxyReturn}


References \textbf{ osmo\+\_\+trxc\+\_\+client\+::retrans\+\_\+sec}.

\mbox{\label{trxc__client_8c_a81f80a083903952dc287aa78de0b5c6d}} 
\index{trxc\_client.c@{trxc\_client.c}!osmo\_trxc\_client\_set\_tx\_msg\_cb@{osmo\_trxc\_client\_set\_tx\_msg\_cb}}
\index{osmo\_trxc\_client\_set\_tx\_msg\_cb@{osmo\_trxc\_client\_set\_tx\_msg\_cb}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{osmo\_trxc\_client\_set\_tx\_msg\_cb()}
{\footnotesize\ttfamily void osmo\+\_\+trxc\+\_\+client\+\_\+set\+\_\+tx\+\_\+msg\+\_\+cb (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$}]{client,  }\item[{\textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+tx\+\_\+msg\+\_\+cb} $\ast$}]{cb }\end{DoxyParamCaption})}



Set the tx\+\_\+msg call-\/back (mandatory before the first command is sent) 

set the tx\+\_\+msg call-\/back (mandatory before the first command is sent) 

References \textbf{ osmo\+\_\+trxc\+\_\+client\+::tx\+\_\+msg\+\_\+cb}.

\mbox{\label{trxc__client_8c_a6b828b6f965ee2e131f858e2630c08dc}} 
\index{trxc\_client.c@{trxc\_client.c}!setformat\_rsp\_cb@{setformat\_rsp\_cb}}
\index{setformat\_rsp\_cb@{setformat\_rsp\_cb}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{setformat\_rsp\_cb()}
{\footnotesize\ttfamily static int setformat\+\_\+rsp\+\_\+cb (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$}]{client,  }\item[{const struct \textbf{ osmo\+\_\+trxc\+\_\+msg} $\ast$}]{rsp,  }\item[{void $\ast$}]{cb\+\_\+data }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ trxc\+\_\+setformat\+\_\+ctx\+::cb}, \textbf{ trxc\+\_\+setformat\+\_\+ctx\+::cb\+\_\+data}, \textbf{ osmo\+\_\+trxc\+\_\+msg\+::cmd}, \textbf{ LOGCL}, \textbf{ OSMO\+\_\+\+TRXC\+\_\+\+CMD\+\_\+\+SETFORMAT}, \textbf{ osmo\+\_\+trxc\+\_\+msg\+::status}, and \textbf{ trxc\+\_\+setformat\+\_\+ctx\+::ver\+\_\+req}.



Referenced by \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+negotiate\+\_\+format()}.

\mbox{\label{trxc__client_8c_ac0e89d0e32e6ff0ee77600c33dae4955}} 
\index{trxc\_client.c@{trxc\_client.c}!trxc\_client\_default\_rsp\_cb@{trxc\_client\_default\_rsp\_cb}}
\index{trxc\_client\_default\_rsp\_cb@{trxc\_client\_default\_rsp\_cb}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{trxc\_client\_default\_rsp\_cb()}
{\footnotesize\ttfamily static int trxc\+\_\+client\+\_\+default\+\_\+rsp\+\_\+cb (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$}]{client,  }\item[{const struct \textbf{ trxc\+\_\+cmd\+\_\+entry} $\ast$}]{e,  }\item[{const struct \textbf{ osmo\+\_\+trxc\+\_\+msg} $\ast$}]{rsp }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ CMD\+\_\+\+NAME\+\_\+\+ARGS}, \textbf{ CMD\+\_\+\+NAME\+\_\+\+FMT}, \textbf{ trxc\+\_\+cmd\+\_\+entry\+::flags}, \textbf{ LOGCL}, \textbf{ OSMO\+\_\+\+TRXC\+\_\+\+F\+\_\+\+CRITICAL}, \textbf{ osmo\+\_\+trxc\+\_\+msg\+\_\+name()}, and \textbf{ osmo\+\_\+trxc\+\_\+msg\+::status}.



Referenced by \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+rx\+\_\+msg()}.

\mbox{\label{trxc__client_8c_ad80879e1ffc786345b6947f8ef1fb937}} 
\index{trxc\_client.c@{trxc\_client.c}!trxc\_client\_fatal@{trxc\_client\_fatal}}
\index{trxc\_client\_fatal@{trxc\_client\_fatal}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{trxc\_client\_fatal()}
{\footnotesize\ttfamily static int trxc\+\_\+client\+\_\+fatal (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$}]{client,  }\item[{const struct \textbf{ osmo\+\_\+trxc\+\_\+msg} $\ast$}]{rsp }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+trxc\+\_\+client\+::fatal\+\_\+error\+\_\+cb}, \textbf{ LOGCL}, and \textbf{ osmo\+\_\+trxc\+\_\+msg\+\_\+name()}.



Referenced by \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+rx\+\_\+msg()}, and \textbf{ trxc\+\_\+client\+\_\+retrans\+\_\+timer\+\_\+cb()}.

\mbox{\label{trxc__client_8c_a2477a0382a6148450c95aa9d4d324f35}} 
\index{trxc\_client.c@{trxc\_client.c}!trxc\_client\_retrans\_timer\_cb@{trxc\_client\_retrans\_timer\_cb}}
\index{trxc\_client\_retrans\_timer\_cb@{trxc\_client\_retrans\_timer\_cb}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{trxc\_client\_retrans\_timer\_cb()}
{\footnotesize\ttfamily static void trxc\+\_\+client\+\_\+retrans\+\_\+timer\+\_\+cb (\begin{DoxyParamCaption}\item[{void $\ast$}]{data }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ CMD\+\_\+\+NAME\+\_\+\+ARGS}, \textbf{ CMD\+\_\+\+NAME\+\_\+\+FMT}, \textbf{ osmo\+\_\+trxc\+\_\+client\+::cmd\+\_\+queue}, \textbf{ trxc\+\_\+cmd\+\_\+entry\+::list}, \textbf{ LOGCL}, \textbf{ osmo\+\_\+trxc\+\_\+client\+::max\+\_\+retrans}, \textbf{ trxc\+\_\+cmd\+\_\+entry\+::n\+\_\+retrans}, \textbf{ trxc\+\_\+client\+\_\+fatal()}, and \textbf{ trxc\+\_\+client\+\_\+send\+\_\+next()}.



Referenced by \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+alloc()}.

\mbox{\label{trxc__client_8c_a07c8086522ba380d17b658d0190302f5}} 
\index{trxc\_client.c@{trxc\_client.c}!trxc\_client\_send\_next@{trxc\_client\_send\_next}}
\index{trxc\_client\_send\_next@{trxc\_client\_send\_next}!trxc\_client.c@{trxc\_client.c}}
\doxysubsubsection{trxc\_client\_send\_next()}
{\footnotesize\ttfamily static void trxc\+\_\+client\+\_\+send\+\_\+next (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$}]{client }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+trxc\+\_\+client\+::cmd\+\_\+queue}, \textbf{ trxc\+\_\+cmd\+\_\+entry\+::list}, \textbf{ LOGCL}, \textbf{ trxc\+\_\+cmd\+\_\+entry\+::msg}, \textbf{ osmo\+\_\+trxc\+\_\+msg\+\_\+name()}, \textbf{ osmo\+\_\+trxc\+\_\+client\+::retrans\+\_\+sec}, \textbf{ osmo\+\_\+trxc\+\_\+client\+::retrans\+\_\+timer}, and \textbf{ osmo\+\_\+trxc\+\_\+client\+::tx\+\_\+msg\+\_\+cb}.



Referenced by \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+rx\+\_\+msg()}, \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+send\+\_\+cmd()}, and \textbf{ trxc\+\_\+client\+\_\+retrans\+\_\+timer\+\_\+cb()}.

