\doxysection{src/trxd.c File Reference}
\label{trxd_8c}\index{src/trxd.c@{src/trxd.c}}


TRXD (burst data) protocol\+: I/\+O-\/free PDU codec.  


{\ttfamily \#include $<$errno.\+h$>$}\newline
{\ttfamily \#include $<$string.\+h$>$}\newline
{\ttfamily \#include $<$stdint.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/bits.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/msgb.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/utils.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gsm/gsm0502.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/trx/trxd.\+h$>$}\newline
\doxysubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \textbf{ TRXD\+\_\+\+IND\+\_\+\+V0\+HDR\+\_\+\+LEN}~(1 + 4 + 1 + 2)
\item 
\#define \textbf{ TRXD\+\_\+\+IND\+\_\+\+V1\+HDR\+\_\+\+LEN}~(\textbf{ TRXD\+\_\+\+IND\+\_\+\+V0\+HDR\+\_\+\+LEN} + 1 + 2)
\item 
\#define \textbf{ TRXD\+\_\+\+IND\+\_\+\+V2\+HDR\+\_\+\+LEN}~(1 + 1 + 1 + 1 + 2 + 2)
\item 
\#define \textbf{ TRXD\+\_\+\+REQ\+\_\+\+V01\+HDR\+\_\+\+LEN}~(1 + 4 + 1)
\item 
\#define \textbf{ TRXD\+\_\+\+REQ\+\_\+\+V2\+HDR\+\_\+\+LEN}~(1 + 1 + 1 + 1 + 1 + 3)
\end{DoxyCompactItemize}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
void \textbf{ osmo\+\_\+trxd\+\_\+parse\+\_\+state\+\_\+init} (struct \textbf{ osmo\+\_\+trxd\+\_\+parse\+\_\+state} $\ast$st)
\begin{DoxyCompactList}\small\item\em Initialize a parser state; call before parsing each datagram. \end{DoxyCompactList}\item 
static int \textbf{ burst\+\_\+len\+\_\+by\+\_\+mod} (enum \textbf{ osmo\+\_\+trxd\+\_\+mod\+\_\+type} mod)
\item 
static int \textbf{ mts\+\_\+parse} (uint32\+\_\+t $\ast$flags, enum \textbf{ osmo\+\_\+trxd\+\_\+mod\+\_\+type} $\ast$mod, uint8\+\_\+t $\ast$tsc\+\_\+set, uint8\+\_\+t $\ast$tsc, uint8\+\_\+t mts)
\item 
int \textbf{ trxd\+\_\+mts\+\_\+parse\+\_\+ind} (struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind} $\ast$bi, uint8\+\_\+t mts)
\item 
int \textbf{ trxd\+\_\+mts\+\_\+parse\+\_\+req} (struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req} $\ast$br, uint8\+\_\+t mts)
\item 
static int \textbf{ mts\+\_\+build} (uint8\+\_\+t $\ast$mts, uint32\+\_\+t flags, enum \textbf{ osmo\+\_\+trxd\+\_\+mod\+\_\+type} mod, uint8\+\_\+t tsc\+\_\+set, uint8\+\_\+t tsc)
\item 
int \textbf{ trxd\+\_\+mts\+\_\+build\+\_\+ind} (uint8\+\_\+t $\ast$mts, const struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind} $\ast$bi)
\item 
int \textbf{ trxd\+\_\+mts\+\_\+build\+\_\+req} (uint8\+\_\+t $\ast$mts, const struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req} $\ast$br)
\item 
static void \textbf{ soft\+\_\+bits\+\_\+parse} (sbit\+\_\+t $\ast$out, const uint8\+\_\+t $\ast$in, size\+\_\+t len)
\item 
static void \textbf{ soft\+\_\+bits\+\_\+build} (uint8\+\_\+t $\ast$out, const sbit\+\_\+t $\ast$in, size\+\_\+t len)
\item 
static void \textbf{ trxd\+\_\+burst\+\_\+ind\+\_\+parse\+\_\+hdr\+\_\+v0} (struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind} $\ast$bi, const uint8\+\_\+t $\ast$buf)
\item 
static int \textbf{ trxd\+\_\+burst\+\_\+ind\+\_\+parse\+\_\+v0} (struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind} $\ast$bi, const uint8\+\_\+t $\ast$buf, size\+\_\+t buf\+\_\+len)
\item 
static int \textbf{ trxd\+\_\+burst\+\_\+ind\+\_\+parse\+\_\+v1} (struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind} $\ast$bi, const uint8\+\_\+t $\ast$buf, size\+\_\+t buf\+\_\+len)
\item 
static int \textbf{ trxd\+\_\+burst\+\_\+ind\+\_\+parse\+\_\+v2} (struct \textbf{ osmo\+\_\+trxd\+\_\+parse\+\_\+state} $\ast$st, struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind} $\ast$bi, const uint8\+\_\+t $\ast$buf, size\+\_\+t buf\+\_\+len)
\item 
int \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+\_\+parse} (struct \textbf{ osmo\+\_\+trxd\+\_\+parse\+\_\+state} $\ast$st, struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind} $\ast$bi, const uint8\+\_\+t $\ast$buf, size\+\_\+t buf\+\_\+len)
\begin{DoxyCompactList}\small\item\em Parse one burst indication (TRX -\/$>$ L1) PDU from the given buffer. \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+\_\+build} (struct msgb $\ast$msg, uint8\+\_\+t pdu\+\_\+ver, const struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind} $\ast$bi)
\begin{DoxyCompactList}\small\item\em Append one encoded burst indication (TRX -\/$>$ L1) PDU to the given msgb. \end{DoxyCompactList}\item 
static int \textbf{ trxd\+\_\+burst\+\_\+req\+\_\+parse\+\_\+v01} (struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req} $\ast$br, const uint8\+\_\+t $\ast$buf, size\+\_\+t buf\+\_\+len)
\item 
static int \textbf{ trxd\+\_\+burst\+\_\+req\+\_\+parse\+\_\+v2} (struct \textbf{ osmo\+\_\+trxd\+\_\+parse\+\_\+state} $\ast$st, struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req} $\ast$br, const uint8\+\_\+t $\ast$buf, size\+\_\+t buf\+\_\+len)
\item 
int \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+\_\+parse} (struct \textbf{ osmo\+\_\+trxd\+\_\+parse\+\_\+state} $\ast$st, struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req} $\ast$br, const uint8\+\_\+t $\ast$buf, size\+\_\+t buf\+\_\+len)
\begin{DoxyCompactList}\small\item\em Parse one burst transmit request (L1 -\/$>$ TRX) PDU from the given buffer. \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+\_\+build} (struct msgb $\ast$msg, uint8\+\_\+t pdu\+\_\+ver, const struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req} $\ast$br)
\begin{DoxyCompactList}\small\item\em Append one encoded burst transmit request (L1 -\/$>$ TRX) PDU to the given msgb. \end{DoxyCompactList}\item 
void \textbf{ osmo\+\_\+trxd\+\_\+build\+\_\+fin} (struct msgb $\ast$msg, uint8\+\_\+t pdu\+\_\+ver)
\begin{DoxyCompactList}\small\item\em Finalize a datagram built by osmo\+\_\+trxd\+\_\+burst\+\_\+\{ind,req\}\+\_\+build(). \end{DoxyCompactList}\item 
const char $\ast$ \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+\_\+name} (const struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind} $\ast$bi)
\begin{DoxyCompactList}\small\item\em Compose a human-\/readable representation of the given burst indication (for logging), store into a thread-\/local static buffer. \end{DoxyCompactList}\item 
char $\ast$ \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+\_\+name\+\_\+buf} (char $\ast$buf, size\+\_\+t buf\+\_\+len, const struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind} $\ast$bi)
\begin{DoxyCompactList}\small\item\em Compose a human-\/readable representation of the given burst indication (for logging), store into the given buffer. \end{DoxyCompactList}\item 
const char $\ast$ \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+\_\+name} (const struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req} $\ast$br)
\begin{DoxyCompactList}\small\item\em Compose a human-\/readable representation of the given burst transmit request (for logging), store into a thread-\/local static buffer. \end{DoxyCompactList}\item 
char $\ast$ \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+\_\+name\+\_\+buf} (char $\ast$buf, size\+\_\+t buf\+\_\+len, const struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req} $\ast$br)
\begin{DoxyCompactList}\small\item\em Compose a human-\/readable representation of the given burst transmit request (for logging), store into the given buffer. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Variables}
\begin{DoxyCompactItemize}
\item 
const struct value\+\_\+string \textbf{ osmo\+\_\+trxd\+\_\+mod\+\_\+type\+\_\+names} [$\,$]
\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
TRXD (burst data) protocol\+: I/\+O-\/free PDU codec. 

Based on the TRXD implementation in osmo-\/bts-\/trx and osmo-\/trx. 

\doxysubsection{Macro Definition Documentation}
\mbox{\label{trxd_8c_af9ab6f5b0a59168ee4649fb51212ae4c}} 
\index{trxd.c@{trxd.c}!TRXD\_IND\_V0HDR\_LEN@{TRXD\_IND\_V0HDR\_LEN}}
\index{TRXD\_IND\_V0HDR\_LEN@{TRXD\_IND\_V0HDR\_LEN}!trxd.c@{trxd.c}}
\doxysubsubsection{TRXD\_IND\_V0HDR\_LEN}
{\footnotesize\ttfamily \#define TRXD\+\_\+\+IND\+\_\+\+V0\+HDR\+\_\+\+LEN~(1 + 4 + 1 + 2)}

\mbox{\label{trxd_8c_ae5aa9ee855a8952b2e79d6a4ef8f2ca1}} 
\index{trxd.c@{trxd.c}!TRXD\_IND\_V1HDR\_LEN@{TRXD\_IND\_V1HDR\_LEN}}
\index{TRXD\_IND\_V1HDR\_LEN@{TRXD\_IND\_V1HDR\_LEN}!trxd.c@{trxd.c}}
\doxysubsubsection{TRXD\_IND\_V1HDR\_LEN}
{\footnotesize\ttfamily \#define TRXD\+\_\+\+IND\+\_\+\+V1\+HDR\+\_\+\+LEN~(\textbf{ TRXD\+\_\+\+IND\+\_\+\+V0\+HDR\+\_\+\+LEN} + 1 + 2)}

\mbox{\label{trxd_8c_aa134448bcc328602cd4a7a1b26b7d3e2}} 
\index{trxd.c@{trxd.c}!TRXD\_IND\_V2HDR\_LEN@{TRXD\_IND\_V2HDR\_LEN}}
\index{TRXD\_IND\_V2HDR\_LEN@{TRXD\_IND\_V2HDR\_LEN}!trxd.c@{trxd.c}}
\doxysubsubsection{TRXD\_IND\_V2HDR\_LEN}
{\footnotesize\ttfamily \#define TRXD\+\_\+\+IND\+\_\+\+V2\+HDR\+\_\+\+LEN~(1 + 1 + 1 + 1 + 2 + 2)}

\mbox{\label{trxd_8c_ab70712a3c35f5728c3de8beda7898409}} 
\index{trxd.c@{trxd.c}!TRXD\_REQ\_V01HDR\_LEN@{TRXD\_REQ\_V01HDR\_LEN}}
\index{TRXD\_REQ\_V01HDR\_LEN@{TRXD\_REQ\_V01HDR\_LEN}!trxd.c@{trxd.c}}
\doxysubsubsection{TRXD\_REQ\_V01HDR\_LEN}
{\footnotesize\ttfamily \#define TRXD\+\_\+\+REQ\+\_\+\+V01\+HDR\+\_\+\+LEN~(1 + 4 + 1)}

\mbox{\label{trxd_8c_a706c293679c22b039c3af51d218ec38e}} 
\index{trxd.c@{trxd.c}!TRXD\_REQ\_V2HDR\_LEN@{TRXD\_REQ\_V2HDR\_LEN}}
\index{TRXD\_REQ\_V2HDR\_LEN@{TRXD\_REQ\_V2HDR\_LEN}!trxd.c@{trxd.c}}
\doxysubsubsection{TRXD\_REQ\_V2HDR\_LEN}
{\footnotesize\ttfamily \#define TRXD\+\_\+\+REQ\+\_\+\+V2\+HDR\+\_\+\+LEN~(1 + 1 + 1 + 1 + 1 + 3)}



\doxysubsection{Function Documentation}
\mbox{\label{trxd_8c_a2b794413c9eb9a4de0b019cf90013499}} 
\index{trxd.c@{trxd.c}!burst\_len\_by\_mod@{burst\_len\_by\_mod}}
\index{burst\_len\_by\_mod@{burst\_len\_by\_mod}!trxd.c@{trxd.c}}
\doxysubsubsection{burst\_len\_by\_mod()}
{\footnotesize\ttfamily static int burst\+\_\+len\+\_\+by\+\_\+mod (\begin{DoxyParamCaption}\item[{enum \textbf{ osmo\+\_\+trxd\+\_\+mod\+\_\+type}}]{mod }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+BURST\+\_\+\+LEN\+\_\+8\+PSK}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+BURST\+\_\+\+LEN\+\_\+\+GMSK}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+MOD\+\_\+\+T\+\_\+8\+PSK}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+MOD\+\_\+\+T\+\_\+\+AQPSK}, and \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+MOD\+\_\+\+T\+\_\+\+GMSK}.



Referenced by \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+\_\+parse()}, and \textbf{ trxd\+\_\+burst\+\_\+req\+\_\+parse\+\_\+v2()}.

\mbox{\label{trxd_8c_acbec512a4b51518fbc9a25426238eeef}} 
\index{trxd.c@{trxd.c}!mts\_build@{mts\_build}}
\index{mts\_build@{mts\_build}!trxd.c@{trxd.c}}
\doxysubsubsection{mts\_build()}
{\footnotesize\ttfamily static int mts\+\_\+build (\begin{DoxyParamCaption}\item[{uint8\+\_\+t $\ast$}]{mts,  }\item[{uint32\+\_\+t}]{flags,  }\item[{enum \textbf{ osmo\+\_\+trxd\+\_\+mod\+\_\+type}}]{mod,  }\item[{uint8\+\_\+t}]{tsc\+\_\+set,  }\item[{uint8\+\_\+t}]{tsc }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+ACCESS\+\_\+\+BURST}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+NOPE\+\_\+\+IND}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+MOD\+\_\+\+T\+\_\+8\+PSK}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+MOD\+\_\+\+T\+\_\+\+AQPSK}, and \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+MOD\+\_\+\+T\+\_\+\+GMSK}.



Referenced by \textbf{ trxd\+\_\+mts\+\_\+build\+\_\+ind()}, and \textbf{ trxd\+\_\+mts\+\_\+build\+\_\+req()}.

\mbox{\label{trxd_8c_a35a0c2125d37dfbba28dc52010b79622}} 
\index{trxd.c@{trxd.c}!mts\_parse@{mts\_parse}}
\index{mts\_parse@{mts\_parse}!trxd.c@{trxd.c}}
\doxysubsubsection{mts\_parse()}
{\footnotesize\ttfamily static int mts\+\_\+parse (\begin{DoxyParamCaption}\item[{uint32\+\_\+t $\ast$}]{flags,  }\item[{enum \textbf{ osmo\+\_\+trxd\+\_\+mod\+\_\+type} $\ast$}]{mod,  }\item[{uint8\+\_\+t $\ast$}]{tsc\+\_\+set,  }\item[{uint8\+\_\+t $\ast$}]{tsc,  }\item[{uint8\+\_\+t}]{mts }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+ACCESS\+\_\+\+BURST}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+MOD\+\_\+\+TYPE}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+NOPE\+\_\+\+IND}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+TS\+\_\+\+INFO}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+MOD\+\_\+\+T\+\_\+8\+PSK}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+MOD\+\_\+\+T\+\_\+\+AQPSK}, and \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+MOD\+\_\+\+T\+\_\+\+GMSK}.



Referenced by \textbf{ trxd\+\_\+mts\+\_\+parse\+\_\+ind()}, and \textbf{ trxd\+\_\+mts\+\_\+parse\+\_\+req()}.

\mbox{\label{trxd_8c_a2eb6ff22f0638eeaeea0e94d5dbfc893}} 
\index{trxd.c@{trxd.c}!osmo\_trxd\_build\_fin@{osmo\_trxd\_build\_fin}}
\index{osmo\_trxd\_build\_fin@{osmo\_trxd\_build\_fin}!trxd.c@{trxd.c}}
\doxysubsubsection{osmo\_trxd\_build\_fin()}
{\footnotesize\ttfamily void osmo\+\_\+trxd\+\_\+build\+\_\+fin (\begin{DoxyParamCaption}\item[{struct msgb $\ast$}]{msg,  }\item[{uint8\+\_\+t}]{pdu\+\_\+ver }\end{DoxyParamCaption})}



Finalize a datagram built by osmo\+\_\+trxd\+\_\+burst\+\_\+\{ind,req\}\+\_\+build(). 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in,out}}  & {\em msg} & message buffer holding the encoded PDU(s) \\
\hline
\mbox{\texttt{ in}}  & {\em pdu\+\_\+ver} & TRXD PDU version in use \\
\hline
\end{DoxyParams}


Referenced by \textbf{ trx\+\_\+ep\+\_\+data\+\_\+tx\+\_\+flush()}.

\mbox{\label{trxd_8c_ae8a9a0227af3d206a637c20d10f476a2}} 
\index{trxd.c@{trxd.c}!osmo\_trxd\_burst\_ind\_build@{osmo\_trxd\_burst\_ind\_build}}
\index{osmo\_trxd\_burst\_ind\_build@{osmo\_trxd\_burst\_ind\_build}!trxd.c@{trxd.c}}
\doxysubsubsection{osmo\_trxd\_burst\_ind\_build()}
{\footnotesize\ttfamily int osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+\_\+build (\begin{DoxyParamCaption}\item[{struct msgb $\ast$}]{msg,  }\item[{uint8\+\_\+t}]{pdu\+\_\+ver,  }\item[{const struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind} $\ast$}]{bi }\end{DoxyParamCaption})}



Append one encoded burst indication (TRX -\/$>$ L1) PDU to the given msgb. 

For TRXDv2, PDU batching works by calling this function repeatedly on the same msgb; call \doxyref{osmo\+\_\+trxd\+\_\+build\+\_\+fin()}{p.}{trxd_8c_a2eb6ff22f0638eeaeea0e94d5dbfc893} once the datagram is complete (it clears the BATCH.\+ind bit of the last PDU).


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in,out}}  & {\em msg} & destination message buffer \\
\hline
\mbox{\texttt{ in}}  & {\em pdu\+\_\+ver} & TRXD PDU version to encode \\
\hline
\mbox{\texttt{ in}}  & {\em bi} & burst indication to be encoded \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success; negative on error. Note that TRXDv0 has no MTS field, so a NOPE.\+ind is encoded as a header-\/only PDU with the burst payload omitted. 
\end{DoxyReturn}


References \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::burst}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::burst\+\_\+len}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::ci\+\_\+cb}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::flags}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::fn}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+NOPE\+\_\+\+IND}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+SHADOW\+\_\+\+IND}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::rssi}, \textbf{ soft\+\_\+bits\+\_\+build()}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::tn}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::toa256}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::trx\+\_\+num}, \textbf{ TRXD\+\_\+\+IND\+\_\+\+V0\+HDR\+\_\+\+LEN}, \textbf{ TRXD\+\_\+\+IND\+\_\+\+V1\+HDR\+\_\+\+LEN}, \textbf{ TRXD\+\_\+\+IND\+\_\+\+V2\+HDR\+\_\+\+LEN}, and \textbf{ trxd\+\_\+mts\+\_\+build\+\_\+ind()}.



Referenced by \textbf{ osmo\+\_\+trx\+\_\+ep\+\_\+send\+\_\+burst\+\_\+ind()}.

\mbox{\label{trxd_8c_a636994519470585d420b9a1568c98e20}} 
\index{trxd.c@{trxd.c}!osmo\_trxd\_burst\_ind\_name@{osmo\_trxd\_burst\_ind\_name}}
\index{osmo\_trxd\_burst\_ind\_name@{osmo\_trxd\_burst\_ind\_name}!trxd.c@{trxd.c}}
\doxysubsubsection{osmo\_trxd\_burst\_ind\_name()}
{\footnotesize\ttfamily const char $\ast$ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+\_\+name (\begin{DoxyParamCaption}\item[{const struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind} $\ast$}]{bi }\end{DoxyParamCaption})}



Compose a human-\/readable representation of the given burst indication (for logging), store into a thread-\/local static buffer. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em bi} & BURST.\+ind to get a human-\/readable representation of \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
pointer to a thread-\/local static buffer 
\end{DoxyReturn}


References \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+\_\+name\+\_\+buf()}.

\mbox{\label{trxd_8c_af76c68d609c9a237c864f9782be2a22d}} 
\index{trxd.c@{trxd.c}!osmo\_trxd\_burst\_ind\_name\_buf@{osmo\_trxd\_burst\_ind\_name\_buf}}
\index{osmo\_trxd\_burst\_ind\_name\_buf@{osmo\_trxd\_burst\_ind\_name\_buf}!trxd.c@{trxd.c}}
\doxysubsubsection{osmo\_trxd\_burst\_ind\_name\_buf()}
{\footnotesize\ttfamily char $\ast$ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+\_\+name\+\_\+buf (\begin{DoxyParamCaption}\item[{char $\ast$}]{buf,  }\item[{size\+\_\+t}]{buf\+\_\+len,  }\item[{const struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind} $\ast$}]{bi }\end{DoxyParamCaption})}



Compose a human-\/readable representation of the given burst indication (for logging), store into the given buffer. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em buf} & output buffer to store the result \\
\hline
\mbox{\texttt{ in}}  & {\em buf\+\_\+len} & size of the output buffer \\
\hline
\mbox{\texttt{ in}}  & {\em bi} & BURST.\+ind to get a human-\/readable representation of \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
pointer to the given buffer 
\end{DoxyReturn}


References \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::burst\+\_\+len}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::ci\+\_\+cb}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::flags}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::fn}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::mod}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+CI\+\_\+\+CB}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+MOD\+\_\+\+TYPE}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+NOPE\+\_\+\+IND}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+TRX\+\_\+\+NUM}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+TS\+\_\+\+INFO}, \textbf{ osmo\+\_\+trxd\+\_\+mod\+\_\+type\+\_\+name()}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::rssi}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::tn}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::toa256}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::trx\+\_\+num}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::tsc}, and \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::tsc\+\_\+set}.



Referenced by \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+\_\+name()}.

\mbox{\label{trxd_8c_a80d942d6b9d99393758415e6a775c245}} 
\index{trxd.c@{trxd.c}!osmo\_trxd\_burst\_ind\_parse@{osmo\_trxd\_burst\_ind\_parse}}
\index{osmo\_trxd\_burst\_ind\_parse@{osmo\_trxd\_burst\_ind\_parse}!trxd.c@{trxd.c}}
\doxysubsubsection{osmo\_trxd\_burst\_ind\_parse()}
{\footnotesize\ttfamily int osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+\_\+parse (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxd\+\_\+parse\+\_\+state} $\ast$}]{st,  }\item[{struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind} $\ast$}]{bi,  }\item[{const uint8\+\_\+t $\ast$}]{buf,  }\item[{size\+\_\+t}]{buf\+\_\+len }\end{DoxyParamCaption})}



Parse one burst indication (TRX -\/$>$ L1) PDU from the given buffer. 

The PDU version is parsed from the first PDU of a datagram and kept in {\itshape st}. Starting from TRXDv2, a datagram may batch multiple PDUs\+: call this function repeatedly on the remaining buffer as long as the parsed PDU has OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+BATCH\+\_\+\+IND set in bi-\/$>$flags.


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in,out}}  & {\em st} & parser state (see \doxyref{osmo\+\_\+trxd\+\_\+parse\+\_\+state\+\_\+init()}{p.}{trxd_8c_adbcdd7c1e4f0a54fbe0e8c6bf38fb46b}) \\
\hline
\mbox{\texttt{ out}}  & {\em bi} & parsed burst indication \\
\hline
\mbox{\texttt{ in}}  & {\em buf} & buffer positioned at the beginning of a PDU \\
\hline
\mbox{\texttt{ in}}  & {\em buf\+\_\+len} & remaining length of the buffer \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
number of consumed bytes on success; negative on error 
\end{DoxyReturn}


References \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::burst}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::burst\+\_\+len}, \textbf{ burst\+\_\+len\+\_\+by\+\_\+mod()}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::flags}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::fn}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::mod}, \textbf{ osmo\+\_\+trxd\+\_\+parse\+\_\+state\+::num\+\_\+pdus}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+NOPE\+\_\+\+IND}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+PDU\+\_\+\+VER\+\_\+\+MAX}, \textbf{ osmo\+\_\+trxd\+\_\+parse\+\_\+state\+::pdu\+\_\+ver}, \textbf{ soft\+\_\+bits\+\_\+parse()}, \textbf{ trxd\+\_\+burst\+\_\+ind\+\_\+parse\+\_\+v0()}, \textbf{ trxd\+\_\+burst\+\_\+ind\+\_\+parse\+\_\+v1()}, \textbf{ trxd\+\_\+burst\+\_\+ind\+\_\+parse\+\_\+v2()}, \textbf{ TRXD\+\_\+\+IND\+\_\+\+V0\+HDR\+\_\+\+LEN}, \textbf{ TRXD\+\_\+\+IND\+\_\+\+V1\+HDR\+\_\+\+LEN}, and \textbf{ TRXD\+\_\+\+IND\+\_\+\+V2\+HDR\+\_\+\+LEN}.



Referenced by \textbf{ trx\+\_\+ep\+\_\+data\+\_\+read\+\_\+cb()}.

\mbox{\label{trxd_8c_a7199886684425865643eee1569ccbc4f}} 
\index{trxd.c@{trxd.c}!osmo\_trxd\_burst\_req\_build@{osmo\_trxd\_burst\_req\_build}}
\index{osmo\_trxd\_burst\_req\_build@{osmo\_trxd\_burst\_req\_build}!trxd.c@{trxd.c}}
\doxysubsubsection{osmo\_trxd\_burst\_req\_build()}
{\footnotesize\ttfamily int osmo\+\_\+trxd\+\_\+burst\+\_\+req\+\_\+build (\begin{DoxyParamCaption}\item[{struct msgb $\ast$}]{msg,  }\item[{uint8\+\_\+t}]{pdu\+\_\+ver,  }\item[{const struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req} $\ast$}]{br }\end{DoxyParamCaption})}



Append one encoded burst transmit request (L1 -\/$>$ TRX) PDU to the given msgb. 

For TRXDv2, PDU batching works by calling this function repeatedly on the same msgb; call \doxyref{osmo\+\_\+trxd\+\_\+build\+\_\+fin()}{p.}{trxd_8c_a2eb6ff22f0638eeaeea0e94d5dbfc893} once the datagram is complete (it clears the BATCH.\+ind bit of the last PDU).


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in,out}}  & {\em msg} & destination message buffer \\
\hline
\mbox{\texttt{ in}}  & {\em pdu\+\_\+ver} & TRXD PDU version to encode \\
\hline
\mbox{\texttt{ in}}  & {\em br} & burst transmit request to be encoded \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success; negative on error 
\end{DoxyReturn}


References \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::att}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::burst}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::burst\+\_\+len}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::flags}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::fn}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+NOPE\+\_\+\+REQ}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::scpir}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::tn}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::trx\+\_\+num}, \textbf{ trxd\+\_\+mts\+\_\+build\+\_\+req()}, \textbf{ TRXD\+\_\+\+REQ\+\_\+\+V01\+HDR\+\_\+\+LEN}, and \textbf{ TRXD\+\_\+\+REQ\+\_\+\+V2\+HDR\+\_\+\+LEN}.



Referenced by \textbf{ osmo\+\_\+trx\+\_\+ep\+\_\+send\+\_\+burst\+\_\+req()}.

\mbox{\label{trxd_8c_a0926bc07f343708657ab00869e6e96cc}} 
\index{trxd.c@{trxd.c}!osmo\_trxd\_burst\_req\_name@{osmo\_trxd\_burst\_req\_name}}
\index{osmo\_trxd\_burst\_req\_name@{osmo\_trxd\_burst\_req\_name}!trxd.c@{trxd.c}}
\doxysubsubsection{osmo\_trxd\_burst\_req\_name()}
{\footnotesize\ttfamily const char $\ast$ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+\_\+name (\begin{DoxyParamCaption}\item[{const struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req} $\ast$}]{br }\end{DoxyParamCaption})}



Compose a human-\/readable representation of the given burst transmit request (for logging), store into a thread-\/local static buffer. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em br} & BURST.\+req to get a human-\/readable representation of \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
pointer to a thread-\/local static buffer 
\end{DoxyReturn}


References \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+\_\+name\+\_\+buf()}.

\mbox{\label{trxd_8c_a112447b6b61eea32af3542ada3b3febd}} 
\index{trxd.c@{trxd.c}!osmo\_trxd\_burst\_req\_name\_buf@{osmo\_trxd\_burst\_req\_name\_buf}}
\index{osmo\_trxd\_burst\_req\_name\_buf@{osmo\_trxd\_burst\_req\_name\_buf}!trxd.c@{trxd.c}}
\doxysubsubsection{osmo\_trxd\_burst\_req\_name\_buf()}
{\footnotesize\ttfamily char $\ast$ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+\_\+name\+\_\+buf (\begin{DoxyParamCaption}\item[{char $\ast$}]{buf,  }\item[{size\+\_\+t}]{buf\+\_\+len,  }\item[{const struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req} $\ast$}]{br }\end{DoxyParamCaption})}



Compose a human-\/readable representation of the given burst transmit request (for logging), store into the given buffer. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em buf} & output buffer to store the result \\
\hline
\mbox{\texttt{ in}}  & {\em buf\+\_\+len} & size of the output buffer \\
\hline
\mbox{\texttt{ in}}  & {\em br} & BURST.\+req to get a human-\/readable representation of \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
pointer to the given buffer 
\end{DoxyReturn}


References \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::att}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::burst\+\_\+len}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::flags}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::fn}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::mod}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+MOD\+\_\+\+TYPE}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+NOPE\+\_\+\+REQ}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+TRX\+\_\+\+NUM}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+TS\+\_\+\+INFO}, \textbf{ osmo\+\_\+trxd\+\_\+mod\+\_\+type\+\_\+name()}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::tn}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::trx\+\_\+num}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::tsc}, and \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::tsc\+\_\+set}.



Referenced by \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+\_\+name()}.

\mbox{\label{trxd_8c_aa035689c32908462a1fc24475e8b1ca4}} 
\index{trxd.c@{trxd.c}!osmo\_trxd\_burst\_req\_parse@{osmo\_trxd\_burst\_req\_parse}}
\index{osmo\_trxd\_burst\_req\_parse@{osmo\_trxd\_burst\_req\_parse}!trxd.c@{trxd.c}}
\doxysubsubsection{osmo\_trxd\_burst\_req\_parse()}
{\footnotesize\ttfamily int osmo\+\_\+trxd\+\_\+burst\+\_\+req\+\_\+parse (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxd\+\_\+parse\+\_\+state} $\ast$}]{st,  }\item[{struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req} $\ast$}]{br,  }\item[{const uint8\+\_\+t $\ast$}]{buf,  }\item[{size\+\_\+t}]{buf\+\_\+len }\end{DoxyParamCaption})}



Parse one burst transmit request (L1 -\/$>$ TRX) PDU from the given buffer. 

The PDU version is parsed from the first PDU of a datagram and kept in {\itshape st}. Starting from TRXDv2, a datagram may batch multiple PDUs\+: call this function repeatedly on the remaining buffer as long as the parsed PDU has OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+BATCH\+\_\+\+IND set in br-\/$>$flags.


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in,out}}  & {\em st} & parser state (see \doxyref{osmo\+\_\+trxd\+\_\+parse\+\_\+state\+\_\+init()}{p.}{trxd_8c_adbcdd7c1e4f0a54fbe0e8c6bf38fb46b}) \\
\hline
\mbox{\texttt{ out}}  & {\em br} & parsed burst transmit request \\
\hline
\mbox{\texttt{ in}}  & {\em buf} & buffer positioned at the beginning of a PDU \\
\hline
\mbox{\texttt{ in}}  & {\em buf\+\_\+len} & remaining length of the buffer \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
number of consumed bytes on success; negative on error 
\end{DoxyReturn}


References \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::fn}, \textbf{ osmo\+\_\+trxd\+\_\+parse\+\_\+state\+::num\+\_\+pdus}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+PDU\+\_\+\+VER\+\_\+\+MAX}, \textbf{ osmo\+\_\+trxd\+\_\+parse\+\_\+state\+::pdu\+\_\+ver}, \textbf{ trxd\+\_\+burst\+\_\+req\+\_\+parse\+\_\+v01()}, \textbf{ trxd\+\_\+burst\+\_\+req\+\_\+parse\+\_\+v2()}, \textbf{ TRXD\+\_\+\+REQ\+\_\+\+V01\+HDR\+\_\+\+LEN}, and \textbf{ TRXD\+\_\+\+REQ\+\_\+\+V2\+HDR\+\_\+\+LEN}.



Referenced by \textbf{ trx\+\_\+ep\+\_\+data\+\_\+read\+\_\+cb()}.

\mbox{\label{trxd_8c_adbcdd7c1e4f0a54fbe0e8c6bf38fb46b}} 
\index{trxd.c@{trxd.c}!osmo\_trxd\_parse\_state\_init@{osmo\_trxd\_parse\_state\_init}}
\index{osmo\_trxd\_parse\_state\_init@{osmo\_trxd\_parse\_state\_init}!trxd.c@{trxd.c}}
\doxysubsubsection{osmo\_trxd\_parse\_state\_init()}
{\footnotesize\ttfamily void osmo\+\_\+trxd\+\_\+parse\+\_\+state\+\_\+init (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxd\+\_\+parse\+\_\+state} $\ast$}]{st }\end{DoxyParamCaption})}



Initialize a parser state; call before parsing each datagram. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em st} & parser state to be initialized \\
\hline
\end{DoxyParams}


Referenced by \textbf{ trx\+\_\+ep\+\_\+data\+\_\+read\+\_\+cb()}.

\mbox{\label{trxd_8c_a84271faaa6965d817d16dae7150f2434}} 
\index{trxd.c@{trxd.c}!soft\_bits\_build@{soft\_bits\_build}}
\index{soft\_bits\_build@{soft\_bits\_build}!trxd.c@{trxd.c}}
\doxysubsubsection{soft\_bits\_build()}
{\footnotesize\ttfamily static void soft\+\_\+bits\+\_\+build (\begin{DoxyParamCaption}\item[{uint8\+\_\+t $\ast$}]{out,  }\item[{const sbit\+\_\+t $\ast$}]{in,  }\item[{size\+\_\+t}]{len }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



Referenced by \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+\_\+build()}.

\mbox{\label{trxd_8c_a4f30289754805335e526e2e8549bb68f}} 
\index{trxd.c@{trxd.c}!soft\_bits\_parse@{soft\_bits\_parse}}
\index{soft\_bits\_parse@{soft\_bits\_parse}!trxd.c@{trxd.c}}
\doxysubsubsection{soft\_bits\_parse()}
{\footnotesize\ttfamily static void soft\+\_\+bits\+\_\+parse (\begin{DoxyParamCaption}\item[{sbit\+\_\+t $\ast$}]{out,  }\item[{const uint8\+\_\+t $\ast$}]{in,  }\item[{size\+\_\+t}]{len }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



Referenced by \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+\_\+parse()}, and \textbf{ trxd\+\_\+burst\+\_\+ind\+\_\+parse\+\_\+v0()}.

\mbox{\label{trxd_8c_ae40576d5750e6b9be2443c5d23b5b480}} 
\index{trxd.c@{trxd.c}!trxd\_burst\_ind\_parse\_hdr\_v0@{trxd\_burst\_ind\_parse\_hdr\_v0}}
\index{trxd\_burst\_ind\_parse\_hdr\_v0@{trxd\_burst\_ind\_parse\_hdr\_v0}!trxd.c@{trxd.c}}
\doxysubsubsection{trxd\_burst\_ind\_parse\_hdr\_v0()}
{\footnotesize\ttfamily static void trxd\+\_\+burst\+\_\+ind\+\_\+parse\+\_\+hdr\+\_\+v0 (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind} $\ast$}]{bi,  }\item[{const uint8\+\_\+t $\ast$}]{buf }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::fn}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::rssi}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::tn}, and \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::toa256}.



Referenced by \textbf{ trxd\+\_\+burst\+\_\+ind\+\_\+parse\+\_\+v0()}, and \textbf{ trxd\+\_\+burst\+\_\+ind\+\_\+parse\+\_\+v1()}.

\mbox{\label{trxd_8c_a0556f9d3c8fec5c322a9a4150072d7e2}} 
\index{trxd.c@{trxd.c}!trxd\_burst\_ind\_parse\_v0@{trxd\_burst\_ind\_parse\_v0}}
\index{trxd\_burst\_ind\_parse\_v0@{trxd\_burst\_ind\_parse\_v0}!trxd.c@{trxd.c}}
\doxysubsubsection{trxd\_burst\_ind\_parse\_v0()}
{\footnotesize\ttfamily static int trxd\+\_\+burst\+\_\+ind\+\_\+parse\+\_\+v0 (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind} $\ast$}]{bi,  }\item[{const uint8\+\_\+t $\ast$}]{buf,  }\item[{size\+\_\+t}]{buf\+\_\+len }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::burst}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::burst\+\_\+len}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::flags}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::mod}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+BURST\+\_\+\+LEN\+\_\+8\+PSK}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+BURST\+\_\+\+LEN\+\_\+\+GMSK}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+MOD\+\_\+\+TYPE}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+NOPE\+\_\+\+IND}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+MOD\+\_\+\+T\+\_\+8\+PSK}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+MOD\+\_\+\+T\+\_\+\+GMSK}, \textbf{ soft\+\_\+bits\+\_\+parse()}, \textbf{ trxd\+\_\+burst\+\_\+ind\+\_\+parse\+\_\+hdr\+\_\+v0()}, and \textbf{ TRXD\+\_\+\+IND\+\_\+\+V0\+HDR\+\_\+\+LEN}.



Referenced by \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+\_\+parse()}.

\mbox{\label{trxd_8c_a42d8a190f7f97d12c181ba8713021b7f}} 
\index{trxd.c@{trxd.c}!trxd\_burst\_ind\_parse\_v1@{trxd\_burst\_ind\_parse\_v1}}
\index{trxd\_burst\_ind\_parse\_v1@{trxd\_burst\_ind\_parse\_v1}!trxd.c@{trxd.c}}
\doxysubsubsection{trxd\_burst\_ind\_parse\_v1()}
{\footnotesize\ttfamily static int trxd\+\_\+burst\+\_\+ind\+\_\+parse\+\_\+v1 (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind} $\ast$}]{bi,  }\item[{const uint8\+\_\+t $\ast$}]{buf,  }\item[{size\+\_\+t}]{buf\+\_\+len }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::ci\+\_\+cb}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::flags}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+CI\+\_\+\+CB}, \textbf{ trxd\+\_\+burst\+\_\+ind\+\_\+parse\+\_\+hdr\+\_\+v0()}, \textbf{ TRXD\+\_\+\+IND\+\_\+\+V0\+HDR\+\_\+\+LEN}, \textbf{ TRXD\+\_\+\+IND\+\_\+\+V1\+HDR\+\_\+\+LEN}, and \textbf{ trxd\+\_\+mts\+\_\+parse\+\_\+ind()}.



Referenced by \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+\_\+parse()}.

\mbox{\label{trxd_8c_a503b67902e62a710fe32dd6154832690}} 
\index{trxd.c@{trxd.c}!trxd\_burst\_ind\_parse\_v2@{trxd\_burst\_ind\_parse\_v2}}
\index{trxd\_burst\_ind\_parse\_v2@{trxd\_burst\_ind\_parse\_v2}!trxd.c@{trxd.c}}
\doxysubsubsection{trxd\_burst\_ind\_parse\_v2()}
{\footnotesize\ttfamily static int trxd\+\_\+burst\+\_\+ind\+\_\+parse\+\_\+v2 (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxd\+\_\+parse\+\_\+state} $\ast$}]{st,  }\item[{struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind} $\ast$}]{bi,  }\item[{const uint8\+\_\+t $\ast$}]{buf,  }\item[{size\+\_\+t}]{buf\+\_\+len }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::ci\+\_\+cb}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::flags}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::fn}, \textbf{ osmo\+\_\+trxd\+\_\+parse\+\_\+state\+::fn}, \textbf{ osmo\+\_\+trxd\+\_\+parse\+\_\+state\+::num\+\_\+pdus}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+BATCH\+\_\+\+IND}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+CI\+\_\+\+CB}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+SHADOW\+\_\+\+IND}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+TRX\+\_\+\+NUM}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::rssi}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::tn}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::toa256}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::trx\+\_\+num}, \textbf{ TRXD\+\_\+\+IND\+\_\+\+V2\+HDR\+\_\+\+LEN}, and \textbf{ trxd\+\_\+mts\+\_\+parse\+\_\+ind()}.



Referenced by \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+\_\+parse()}.

\mbox{\label{trxd_8c_a4b8e9c7c3db0c2f49c40f4986215dc66}} 
\index{trxd.c@{trxd.c}!trxd\_burst\_req\_parse\_v01@{trxd\_burst\_req\_parse\_v01}}
\index{trxd\_burst\_req\_parse\_v01@{trxd\_burst\_req\_parse\_v01}!trxd.c@{trxd.c}}
\doxysubsubsection{trxd\_burst\_req\_parse\_v01()}
{\footnotesize\ttfamily static int trxd\+\_\+burst\+\_\+req\+\_\+parse\+\_\+v01 (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req} $\ast$}]{br,  }\item[{const uint8\+\_\+t $\ast$}]{buf,  }\item[{size\+\_\+t}]{buf\+\_\+len }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::att}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::burst}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::burst\+\_\+len}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::flags}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::fn}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::mod}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+BURST\+\_\+\+LEN\+\_\+8\+PSK}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+BURST\+\_\+\+LEN\+\_\+\+GMSK}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+MOD\+\_\+\+TYPE}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+NOPE\+\_\+\+REQ}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+MOD\+\_\+\+T\+\_\+8\+PSK}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+MOD\+\_\+\+T\+\_\+\+GMSK}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::tn}, and \textbf{ TRXD\+\_\+\+REQ\+\_\+\+V01\+HDR\+\_\+\+LEN}.



Referenced by \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+\_\+parse()}.

\mbox{\label{trxd_8c_a0329ede5fa1c589a253f7dc4a5f11308}} 
\index{trxd.c@{trxd.c}!trxd\_burst\_req\_parse\_v2@{trxd\_burst\_req\_parse\_v2}}
\index{trxd\_burst\_req\_parse\_v2@{trxd\_burst\_req\_parse\_v2}!trxd.c@{trxd.c}}
\doxysubsubsection{trxd\_burst\_req\_parse\_v2()}
{\footnotesize\ttfamily static int trxd\+\_\+burst\+\_\+req\+\_\+parse\+\_\+v2 (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxd\+\_\+parse\+\_\+state} $\ast$}]{st,  }\item[{struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req} $\ast$}]{br,  }\item[{const uint8\+\_\+t $\ast$}]{buf,  }\item[{size\+\_\+t}]{buf\+\_\+len }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::att}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::burst}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::burst\+\_\+len}, \textbf{ burst\+\_\+len\+\_\+by\+\_\+mod()}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::flags}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::fn}, \textbf{ osmo\+\_\+trxd\+\_\+parse\+\_\+state\+::fn}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::mod}, \textbf{ osmo\+\_\+trxd\+\_\+parse\+\_\+state\+::num\+\_\+pdus}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+BATCH\+\_\+\+IND}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+NOPE\+\_\+\+REQ}, \textbf{ OSMO\+\_\+\+TRXD\+\_\+\+F\+\_\+\+TRX\+\_\+\+NUM}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::scpir}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::tn}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::trx\+\_\+num}, \textbf{ trxd\+\_\+mts\+\_\+parse\+\_\+req()}, and \textbf{ TRXD\+\_\+\+REQ\+\_\+\+V2\+HDR\+\_\+\+LEN}.



Referenced by \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+\_\+parse()}.

\mbox{\label{trxd_8c_a0aec920b841b78b1178722cec136c8e8}} 
\index{trxd.c@{trxd.c}!trxd\_mts\_build\_ind@{trxd\_mts\_build\_ind}}
\index{trxd\_mts\_build\_ind@{trxd\_mts\_build\_ind}!trxd.c@{trxd.c}}
\doxysubsubsection{trxd\_mts\_build\_ind()}
{\footnotesize\ttfamily int trxd\+\_\+mts\+\_\+build\+\_\+ind (\begin{DoxyParamCaption}\item[{uint8\+\_\+t $\ast$}]{mts,  }\item[{const struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind} $\ast$}]{bi }\end{DoxyParamCaption})}



References \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::flags}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::mod}, \textbf{ mts\+\_\+build()}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::tsc}, and \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::tsc\+\_\+set}.



Referenced by \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+\_\+build()}.

\mbox{\label{trxd_8c_a26521606265216884e6aa97681625ead}} 
\index{trxd.c@{trxd.c}!trxd\_mts\_build\_req@{trxd\_mts\_build\_req}}
\index{trxd\_mts\_build\_req@{trxd\_mts\_build\_req}!trxd.c@{trxd.c}}
\doxysubsubsection{trxd\_mts\_build\_req()}
{\footnotesize\ttfamily int trxd\+\_\+mts\+\_\+build\+\_\+req (\begin{DoxyParamCaption}\item[{uint8\+\_\+t $\ast$}]{mts,  }\item[{const struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req} $\ast$}]{br }\end{DoxyParamCaption})}



References \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::flags}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::mod}, \textbf{ mts\+\_\+build()}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::tsc}, and \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::tsc\+\_\+set}.



Referenced by \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+\_\+build()}.

\mbox{\label{trxd_8c_acb05188f1b240547a096e7ae1ce4e8c4}} 
\index{trxd.c@{trxd.c}!trxd\_mts\_parse\_ind@{trxd\_mts\_parse\_ind}}
\index{trxd\_mts\_parse\_ind@{trxd\_mts\_parse\_ind}!trxd.c@{trxd.c}}
\doxysubsubsection{trxd\_mts\_parse\_ind()}
{\footnotesize\ttfamily int trxd\+\_\+mts\+\_\+parse\+\_\+ind (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind} $\ast$}]{bi,  }\item[{uint8\+\_\+t}]{mts }\end{DoxyParamCaption})}



References \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::flags}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::mod}, \textbf{ mts\+\_\+parse()}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::tsc}, and \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+ind\+::tsc\+\_\+set}.



Referenced by \textbf{ trxd\+\_\+burst\+\_\+ind\+\_\+parse\+\_\+v1()}, and \textbf{ trxd\+\_\+burst\+\_\+ind\+\_\+parse\+\_\+v2()}.

\mbox{\label{trxd_8c_a95672eb490d551f13be2433f1e1e405c}} 
\index{trxd.c@{trxd.c}!trxd\_mts\_parse\_req@{trxd\_mts\_parse\_req}}
\index{trxd\_mts\_parse\_req@{trxd\_mts\_parse\_req}!trxd.c@{trxd.c}}
\doxysubsubsection{trxd\_mts\_parse\_req()}
{\footnotesize\ttfamily int trxd\+\_\+mts\+\_\+parse\+\_\+req (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req} $\ast$}]{br,  }\item[{uint8\+\_\+t}]{mts }\end{DoxyParamCaption})}



References \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::flags}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::mod}, \textbf{ mts\+\_\+parse()}, \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::tsc}, and \textbf{ osmo\+\_\+trxd\+\_\+burst\+\_\+req\+::tsc\+\_\+set}.



Referenced by \textbf{ trxd\+\_\+burst\+\_\+req\+\_\+parse\+\_\+v2()}.



\doxysubsection{Variable Documentation}
\mbox{\label{trxd_8c_aaa7ed6cc1dc0a6058c8efad137c0ed52}} 
\index{trxd.c@{trxd.c}!osmo\_trxd\_mod\_type\_names@{osmo\_trxd\_mod\_type\_names}}
\index{osmo\_trxd\_mod\_type\_names@{osmo\_trxd\_mod\_type\_names}!trxd.c@{trxd.c}}
\doxysubsubsection{osmo\_trxd\_mod\_type\_names}
{\footnotesize\ttfamily const struct value\+\_\+string osmo\+\_\+trxd\+\_\+mod\+\_\+type\+\_\+names[$\,$]}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \{ OSMO\_TRXD\_MOD\_T\_GMSK,             \textcolor{stringliteral}{"{}GMSK"{}} \},}
\DoxyCodeLine{        \{ OSMO\_TRXD\_MOD\_T\_8PSK,             \textcolor{stringliteral}{"{}8-\/PSK"{}} \},}
\DoxyCodeLine{        \{ OSMO\_TRXD\_MOD\_T\_AQPSK,   \textcolor{stringliteral}{"{}AQPSK"{}} \},}
\DoxyCodeLine{        \{ 0, NULL \}}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ osmo\+\_\+trxd\+\_\+mod\+\_\+type\+\_\+name()}.

