\doxysection{include/osmocom/trx/trxc\+\_\+client.h File Reference}
\label{trxc__client_8h}\index{include/osmocom/trx/trxc\_client.h@{include/osmocom/trx/trxc\_client.h}}


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


{\ttfamily \#include $<$stdint.\+h$>$}\newline
{\ttfamily \#include $<$stddef.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/trx/trxc.\+h$>$}\newline
\doxysubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \textbf{ OSMO\+\_\+\+TRXC\+\_\+\+F\+\_\+\+CRITICAL}~(1 $<$$<$ 0)
\begin{DoxyCompactList}\small\item\em escalate to the fatal\+\_\+error call-\/back on NACK \end{DoxyCompactList}\item 
\#define \textbf{ OSMO\+\_\+\+TRXC\+\_\+\+F\+\_\+\+MATCH\+\_\+\+PARAMS}~(1 $<$$<$ 1)
\begin{DoxyCompactList}\small\item\em RSP params must echo CMD params (e.\+g. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Typedefs}
\begin{DoxyCompactItemize}
\item 
typedef int \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+rsp\+\_\+cb}(struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, const struct \textbf{ osmo\+\_\+trxc\+\_\+msg} $\ast$rsp, void $\ast$cb\+\_\+data)
\begin{DoxyCompactList}\small\item\em Response call-\/back, invoked when a response to a command is received. \end{DoxyCompactList}\item 
typedef int \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+tx\+\_\+msg\+\_\+cb}(struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, const struct \textbf{ osmo\+\_\+trxc\+\_\+msg} $\ast$msg)
\begin{DoxyCompactList}\small\item\em Transmit call-\/back, invoked to emit a parsed TRXC message (mandatory, see \doxyref{osmo\+\_\+trxc\+\_\+client\+\_\+set\+\_\+tx\+\_\+msg\+\_\+cb()}{p.}{trxc__client_8h_a81f80a083903952dc287aa78de0b5c6d}). \end{DoxyCompactList}\item 
typedef void \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+fatal\+\_\+error\+\_\+cb}(struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, const struct \textbf{ osmo\+\_\+trxc\+\_\+msg} $\ast$rsp)
\begin{DoxyCompactList}\small\item\em Fatal error call-\/back, invoked when a critical command definitively fails (optional; default\+: log), see \doxyref{osmo\+\_\+trxc\+\_\+client\+\_\+set\+\_\+fatal\+\_\+error\+\_\+cb()}{p.}{trxc__client_8h_a1b271ebc04eb5edfda4afeff18f63324}. \end{DoxyCompactList}\item 
typedef void \textbf{ osmo\+\_\+trxc\+\_\+setformat\+\_\+cb}(struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, uint8\+\_\+t ver\+\_\+use, void $\ast$cb\+\_\+data)
\begin{DoxyCompactList}\small\item\em TRXD PDU version negotiation result call-\/back. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\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 
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 
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\+\_\+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 
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 
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}\item 
static int \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+poweron} (struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+rsp\+\_\+cb} $\ast$cb, void $\ast$cb\+\_\+data)
\item 
static int \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+poweroff} (struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+rsp\+\_\+cb} $\ast$cb, void $\ast$cb\+\_\+data)
\item 
static int \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+rxtune} (struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, unsigned int freq\+\_\+khz, \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+rsp\+\_\+cb} $\ast$cb, void $\ast$cb\+\_\+data)
\item 
static int \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+txtune} (struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, unsigned int freq\+\_\+khz, \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+rsp\+\_\+cb} $\ast$cb, void $\ast$cb\+\_\+data)
\end{DoxyCompactItemize}


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



\doxysubsection{Macro Definition Documentation}
\mbox{\label{trxc__client_8h_a2ab1d33764ff4f2c16d7927f94aa35c3}} 
\index{trxc\_client.h@{trxc\_client.h}!OSMO\_TRXC\_F\_CRITICAL@{OSMO\_TRXC\_F\_CRITICAL}}
\index{OSMO\_TRXC\_F\_CRITICAL@{OSMO\_TRXC\_F\_CRITICAL}!trxc\_client.h@{trxc\_client.h}}
\doxysubsubsection{OSMO\_TRXC\_F\_CRITICAL}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+TRXC\+\_\+\+F\+\_\+\+CRITICAL~(1 $<$$<$ 0)}



escalate to the fatal\+\_\+error call-\/back on NACK 

\mbox{\label{trxc__client_8h_a7a3f49e82ccf6c1441230cf4e000a7a5}} 
\index{trxc\_client.h@{trxc\_client.h}!OSMO\_TRXC\_F\_MATCH\_PARAMS@{OSMO\_TRXC\_F\_MATCH\_PARAMS}}
\index{OSMO\_TRXC\_F\_MATCH\_PARAMS@{OSMO\_TRXC\_F\_MATCH\_PARAMS}!trxc\_client.h@{trxc\_client.h}}
\doxysubsubsection{OSMO\_TRXC\_F\_MATCH\_PARAMS}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+TRXC\+\_\+\+F\+\_\+\+MATCH\+\_\+\+PARAMS~(1 $<$$<$ 1)}



RSP params must echo CMD params (e.\+g. 

SETSLOT, SETFORMAT) 

\doxysubsection{Typedef Documentation}
\mbox{\label{trxc__client_8h_a84616853e92fd590de41db6fe3c467e6}} 
\index{trxc\_client.h@{trxc\_client.h}!osmo\_trxc\_client\_fatal\_error\_cb@{osmo\_trxc\_client\_fatal\_error\_cb}}
\index{osmo\_trxc\_client\_fatal\_error\_cb@{osmo\_trxc\_client\_fatal\_error\_cb}!trxc\_client.h@{trxc\_client.h}}
\doxysubsubsection{osmo\_trxc\_client\_fatal\_error\_cb}
{\footnotesize\ttfamily typedef void osmo\+\_\+trxc\+\_\+client\+\_\+fatal\+\_\+error\+\_\+cb(struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, const struct \textbf{ osmo\+\_\+trxc\+\_\+msg} $\ast$rsp)}



Fatal error call-\/back, invoked when a critical command definitively fails (optional; default\+: log), see \doxyref{osmo\+\_\+trxc\+\_\+client\+\_\+set\+\_\+fatal\+\_\+error\+\_\+cb()}{p.}{trxc__client_8h_a1b271ebc04eb5edfda4afeff18f63324}. 

The command queue remains frozen after this call. 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em client} & TRXC client instance \\
\hline
\mbox{\texttt{ in}}  & {\em rsp} & the offending response (NULL on a retransmission timeout, i.\+e. no response was ever received) \\
\hline
\end{DoxyParams}
\mbox{\label{trxc__client_8h_a387fdc95b1d4bd0c99538e062e7ac657}} 
\index{trxc\_client.h@{trxc\_client.h}!osmo\_trxc\_client\_rsp\_cb@{osmo\_trxc\_client\_rsp\_cb}}
\index{osmo\_trxc\_client\_rsp\_cb@{osmo\_trxc\_client\_rsp\_cb}!trxc\_client.h@{trxc\_client.h}}
\doxysubsubsection{osmo\_trxc\_client\_rsp\_cb}
{\footnotesize\ttfamily typedef int osmo\+\_\+trxc\+\_\+client\+\_\+rsp\+\_\+cb(struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, const struct \textbf{ osmo\+\_\+trxc\+\_\+msg} $\ast$rsp, void $\ast$cb\+\_\+data)}



Response call-\/back, invoked when a response to a command is received. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em client} & TRXC client instance \\
\hline
\mbox{\texttt{ in}}  & {\em rsp} & received response message \\
\hline
\mbox{\texttt{ in}}  & {\em cb\+\_\+data} & opaque data passed to \doxyref{osmo\+\_\+trxc\+\_\+client\+\_\+send\+\_\+cmd()}{p.}{trxc__client_8h_a3d4feb3973983d442b06358d3beffc90} \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 when done (the command gets dequeued); N $>$ 0 to re-\/send the same command after N seconds; negative to indicate a fatal error (like a NACKed critical command, ends up in the fatal\+\_\+error call-\/back) 
\end{DoxyReturn}
\mbox{\label{trxc__client_8h_ae3e89357aac6888171dab4875ec64723}} 
\index{trxc\_client.h@{trxc\_client.h}!osmo\_trxc\_client\_tx\_msg\_cb@{osmo\_trxc\_client\_tx\_msg\_cb}}
\index{osmo\_trxc\_client\_tx\_msg\_cb@{osmo\_trxc\_client\_tx\_msg\_cb}!trxc\_client.h@{trxc\_client.h}}
\doxysubsubsection{osmo\_trxc\_client\_tx\_msg\_cb}
{\footnotesize\ttfamily typedef int osmo\+\_\+trxc\+\_\+client\+\_\+tx\+\_\+msg\+\_\+cb(struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, const struct \textbf{ osmo\+\_\+trxc\+\_\+msg} $\ast$msg)}



Transmit call-\/back, invoked to emit a parsed TRXC message (mandatory, see \doxyref{osmo\+\_\+trxc\+\_\+client\+\_\+set\+\_\+tx\+\_\+msg\+\_\+cb()}{p.}{trxc__client_8h_a81f80a083903952dc287aa78de0b5c6d}). 

E.\+g. \doxyref{osmo\+\_\+trx\+\_\+ep\+\_\+send\+\_\+ctrl\+\_\+msg()}{p.}{ep_8h_a9f914cf1e2ca1214a091b4d127c716fc} for \doxyref{osmo\+\_\+trx\+\_\+ep}{p.}{structosmo__trx__ep} users, or \doxyref{osmo\+\_\+trxc\+\_\+msg\+\_\+build()}{p.}{trxc_8h_a342dad8454176839c10696e7fdba5c1a} + write() on a self-\/managed ctrl socket. 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em client} & TRXC client instance \\
\hline
\mbox{\texttt{ in}}  & {\em msg} & TRXC message to transmit \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success; negative on error (logged by the engine, otherwise ignored\+: the retransmit timer still governs delivery) 
\end{DoxyReturn}
\mbox{\label{trxc__client_8h_a31789d2c3cbdf2355e7e4dbcbfdbbefb}} 
\index{trxc\_client.h@{trxc\_client.h}!osmo\_trxc\_setformat\_cb@{osmo\_trxc\_setformat\_cb}}
\index{osmo\_trxc\_setformat\_cb@{osmo\_trxc\_setformat\_cb}!trxc\_client.h@{trxc\_client.h}}
\doxysubsubsection{osmo\_trxc\_setformat\_cb}
{\footnotesize\ttfamily typedef void osmo\+\_\+trxc\+\_\+setformat\+\_\+cb(struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$client, uint8\+\_\+t ver\+\_\+use, void $\ast$cb\+\_\+data)}



TRXD PDU version negotiation result call-\/back. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em client} & TRXC client instance \\
\hline
\mbox{\texttt{ in}}  & {\em ver\+\_\+use} & the negotiated version to be used \\
\hline
\mbox{\texttt{ in}}  & {\em cb\+\_\+data} & data that was passed to \doxyref{osmo\+\_\+trxc\+\_\+client\+\_\+negotiate\+\_\+format()}{p.}{trxc__client_8h_ab31f5fca2e000ebac042384251349e24} \\
\hline
\end{DoxyParams}


\doxysubsection{Function Documentation}
\mbox{\label{trxc__client_8h_ad5a01234612e2a0c956db1332f704595}} 
\index{trxc\_client.h@{trxc\_client.h}!osmo\_trxc\_client\_alloc@{osmo\_trxc\_client\_alloc}}
\index{osmo\_trxc\_client\_alloc@{osmo\_trxc\_client\_alloc}!trxc\_client.h@{trxc\_client.h}}
\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_8h_aabbbfe101ec9116c96e746bf6fe75834}} 
\index{trxc\_client.h@{trxc\_client.h}!osmo\_trxc\_client\_flush@{osmo\_trxc\_client\_flush}}
\index{osmo\_trxc\_client\_flush@{osmo\_trxc\_client\_flush}!trxc\_client.h@{trxc\_client.h}}
\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_8h_ae3bb29129e6c28d0dfd6737d16360be0}} 
\index{trxc\_client.h@{trxc\_client.h}!osmo\_trxc\_client\_free@{osmo\_trxc\_client\_free}}
\index{osmo\_trxc\_client\_free@{osmo\_trxc\_client\_free}!trxc\_client.h@{trxc\_client.h}}
\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_8h_aa9e71f7ac9ea19c3ec242fba88876c6c}} 
\index{trxc\_client.h@{trxc\_client.h}!osmo\_trxc\_client\_get\_priv@{osmo\_trxc\_client\_get\_priv}}
\index{osmo\_trxc\_client\_get\_priv@{osmo\_trxc\_client\_get\_priv}!trxc\_client.h@{trxc\_client.h}}
\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_8h_ab31f5fca2e000ebac042384251349e24}} 
\index{trxc\_client.h@{trxc\_client.h}!osmo\_trxc\_client\_negotiate\_format@{osmo\_trxc\_client\_negotiate\_format}}
\index{osmo\_trxc\_client\_negotiate\_format@{osmo\_trxc\_client\_negotiate\_format}!trxc\_client.h@{trxc\_client.h}}
\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_8h_a6d192a6a81abada9cca44ea1d95c627f}} 
\index{trxc\_client.h@{trxc\_client.h}!osmo\_trxc\_client\_poweroff@{osmo\_trxc\_client\_poweroff}}
\index{osmo\_trxc\_client\_poweroff@{osmo\_trxc\_client\_poweroff}!trxc\_client.h@{trxc\_client.h}}
\doxysubsubsection{osmo\_trxc\_client\_poweroff()}
{\footnotesize\ttfamily static int osmo\+\_\+trxc\+\_\+client\+\_\+poweroff (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$}]{client,  }\item[{\textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+rsp\+\_\+cb} $\ast$}]{cb,  }\item[{void $\ast$}]{cb\+\_\+data }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



References \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+send\+\_\+cmd()}, \textbf{ OSMO\+\_\+\+TRXC\+\_\+\+CMD\+\_\+\+POWEROFF}, and \textbf{ OSMO\+\_\+\+TRXC\+\_\+\+F\+\_\+\+CRITICAL}.

\mbox{\label{trxc__client_8h_a690e94836cb00899e433d6eb5339ec71}} 
\index{trxc\_client.h@{trxc\_client.h}!osmo\_trxc\_client\_poweron@{osmo\_trxc\_client\_poweron}}
\index{osmo\_trxc\_client\_poweron@{osmo\_trxc\_client\_poweron}!trxc\_client.h@{trxc\_client.h}}
\doxysubsubsection{osmo\_trxc\_client\_poweron()}
{\footnotesize\ttfamily static int osmo\+\_\+trxc\+\_\+client\+\_\+poweron (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$}]{client,  }\item[{\textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+rsp\+\_\+cb} $\ast$}]{cb,  }\item[{void $\ast$}]{cb\+\_\+data }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



References \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+send\+\_\+cmd()}, \textbf{ OSMO\+\_\+\+TRXC\+\_\+\+CMD\+\_\+\+POWERON}, and \textbf{ OSMO\+\_\+\+TRXC\+\_\+\+F\+\_\+\+CRITICAL}.

\mbox{\label{trxc__client_8h_a943c95be6750189cbbabd4e874a57ebf}} 
\index{trxc\_client.h@{trxc\_client.h}!osmo\_trxc\_client\_rx@{osmo\_trxc\_client\_rx}}
\index{osmo\_trxc\_client\_rx@{osmo\_trxc\_client\_rx}!trxc\_client.h@{trxc\_client.h}}
\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_8h_a3d0d41044912e93557637be3dec55b58}} 
\index{trxc\_client.h@{trxc\_client.h}!osmo\_trxc\_client\_rx\_msg@{osmo\_trxc\_client\_rx\_msg}}
\index{osmo\_trxc\_client\_rx\_msg@{osmo\_trxc\_client\_rx\_msg}!trxc\_client.h@{trxc\_client.h}}
\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_8h_a613ee76f686d89900fd48ced31a33e1c}} 
\index{trxc\_client.h@{trxc\_client.h}!osmo\_trxc\_client\_rxtune@{osmo\_trxc\_client\_rxtune}}
\index{osmo\_trxc\_client\_rxtune@{osmo\_trxc\_client\_rxtune}!trxc\_client.h@{trxc\_client.h}}
\doxysubsubsection{osmo\_trxc\_client\_rxtune()}
{\footnotesize\ttfamily static int osmo\+\_\+trxc\+\_\+client\+\_\+rxtune (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$}]{client,  }\item[{unsigned int}]{freq\+\_\+khz,  }\item[{\textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+rsp\+\_\+cb} $\ast$}]{cb,  }\item[{void $\ast$}]{cb\+\_\+data }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



References \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+send\+\_\+cmd()}, \textbf{ OSMO\+\_\+\+TRXC\+\_\+\+CMD\+\_\+\+RXTUNE}, and \textbf{ OSMO\+\_\+\+TRXC\+\_\+\+F\+\_\+\+CRITICAL}.

\mbox{\label{trxc__client_8h_a3d4feb3973983d442b06358d3beffc90}} 
\index{trxc\_client.h@{trxc\_client.h}!osmo\_trxc\_client\_send\_cmd@{osmo\_trxc\_client\_send\_cmd}}
\index{osmo\_trxc\_client\_send\_cmd@{osmo\_trxc\_client\_send\_cmd}!trxc\_client.h@{trxc\_client.h}}
\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_8h_a1b271ebc04eb5edfda4afeff18f63324}} 
\index{trxc\_client.h@{trxc\_client.h}!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.h@{trxc\_client.h}}
\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_8h_a3ada10efa122ad7bc4e14fda47dc655e}} 
\index{trxc\_client.h@{trxc\_client.h}!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.h@{trxc\_client.h}}
\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_8h_aa834d1912b41450f745946d8f37bc979}} 
\index{trxc\_client.h@{trxc\_client.h}!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.h@{trxc\_client.h}}
\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_8h_a13e5b9de0a928360d1f82a9597ede5a1}} 
\index{trxc\_client.h@{trxc\_client.h}!osmo\_trxc\_client\_set\_name@{osmo\_trxc\_client\_set\_name}}
\index{osmo\_trxc\_client\_set\_name@{osmo\_trxc\_client\_set\_name}!trxc\_client.h@{trxc\_client.h}}
\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_8h_a9d398e1561b81f93761f90b20b794115}} 
\index{trxc\_client.h@{trxc\_client.h}!osmo\_trxc\_client\_set\_priv@{osmo\_trxc\_client\_set\_priv}}
\index{osmo\_trxc\_client\_set\_priv@{osmo\_trxc\_client\_set\_priv}!trxc\_client.h@{trxc\_client.h}}
\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_8h_ab67fd7760f57c0e86dc1b6cc13d7fe1e}} 
\index{trxc\_client.h@{trxc\_client.h}!osmo\_trxc\_client\_set\_retrans@{osmo\_trxc\_client\_set\_retrans}}
\index{osmo\_trxc\_client\_set\_retrans@{osmo\_trxc\_client\_set\_retrans}!trxc\_client.h@{trxc\_client.h}}
\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_8h_a81f80a083903952dc287aa78de0b5c6d}} 
\index{trxc\_client.h@{trxc\_client.h}!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.h@{trxc\_client.h}}
\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_8h_a9fccea97d26fdeaa017b12f2b5f93cbe}} 
\index{trxc\_client.h@{trxc\_client.h}!osmo\_trxc\_client\_txtune@{osmo\_trxc\_client\_txtune}}
\index{osmo\_trxc\_client\_txtune@{osmo\_trxc\_client\_txtune}!trxc\_client.h@{trxc\_client.h}}
\doxysubsubsection{osmo\_trxc\_client\_txtune()}
{\footnotesize\ttfamily static int osmo\+\_\+trxc\+\_\+client\+\_\+txtune (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxc\+\_\+client} $\ast$}]{client,  }\item[{unsigned int}]{freq\+\_\+khz,  }\item[{\textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+rsp\+\_\+cb} $\ast$}]{cb,  }\item[{void $\ast$}]{cb\+\_\+data }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



References \textbf{ osmo\+\_\+trxc\+\_\+client\+\_\+send\+\_\+cmd()}, \textbf{ OSMO\+\_\+\+TRXC\+\_\+\+CMD\+\_\+\+TXTUNE}, and \textbf{ OSMO\+\_\+\+TRXC\+\_\+\+F\+\_\+\+CRITICAL}.

