\doxysection{src/codec/ecu\+\_\+fr.c File Reference}
\label{ecu__fr_8c}\index{src/codec/ecu\_fr.c@{src/codec/ecu\_fr.c}}
{\ttfamily \#include $<$stdbool.\+h$>$}\newline
{\ttfamily \#include $<$string.\+h$>$}\newline
{\ttfamily \#include $<$stdint.\+h$>$}\newline
{\ttfamily \#include $<$errno.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/prbs.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/codec/codec.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/codec/ecu.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/linuxlist.\+h$>$}\newline
\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item 
struct \textbf{ fr\+\_\+ecu\+\_\+state}
\end{DoxyCompactItemize}
\doxysubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \textbf{ GSM611\+\_\+\+XMAXC\+\_\+\+REDUCE}~4
\item 
\#define \textbf{ SID\+\_\+\+PREFIX\+\_\+\+LEN}~5
\end{DoxyCompactItemize}
\doxysubsection*{Enumerations}
\begin{DoxyCompactItemize}
\item 
enum \textbf{ ecu\+\_\+principal\+\_\+state} \{ \newline
\textbf{ STATE\+\_\+\+NO\+\_\+\+DATA}
, \newline
\textbf{ STATE\+\_\+\+SPEECH}
, \newline
\textbf{ STATE\+\_\+\+SP\+\_\+\+MUTING}
, \newline
\textbf{ STATE\+\_\+\+SID}
, \newline
\textbf{ STATE\+\_\+\+SID\+\_\+\+MUTING}
 \}
\end{DoxyCompactItemize}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
static void \textbf{ fr\+\_\+ecu\+\_\+input} (struct \textbf{ fr\+\_\+ecu\+\_\+state} $\ast$fr, const uint8\+\_\+t $\ast$frame)
\item 
static bool \textbf{ reduce\+\_\+xmaxc} (uint8\+\_\+t $\ast$frame)
\item 
static void \textbf{ random\+\_\+grid\+\_\+pos} (struct \textbf{ fr\+\_\+ecu\+\_\+state} $\ast$fr, uint8\+\_\+t $\ast$frame)
\item 
static bool \textbf{ reduce\+\_\+xmaxc\+\_\+sid} (struct \textbf{ fr\+\_\+ecu\+\_\+state} $\ast$fr)
\item 
static void \textbf{ reemit\+\_\+sid} (struct \textbf{ fr\+\_\+ecu\+\_\+state} $\ast$fr, uint8\+\_\+t $\ast$frame)
\item 
static void \textbf{ fr\+\_\+ecu\+\_\+output} (struct \textbf{ fr\+\_\+ecu\+\_\+state} $\ast$fr, uint8\+\_\+t $\ast$frame)
\item 
static struct \textbf{ osmo\+\_\+ecu\+\_\+state} $\ast$ \textbf{ ecu\+\_\+fr\+\_\+init} (void $\ast$ctx, enum \textbf{ osmo\+\_\+ecu\+\_\+codec} codec)
\item 
static struct \textbf{ fr\+\_\+ecu\+\_\+state} $\ast$ \textbf{ \+\_\+osmo\+\_\+ecu\+\_\+state\+\_\+get\+\_\+fr} (struct \textbf{ osmo\+\_\+ecu\+\_\+state} $\ast$st)
\item 
static int \textbf{ ecu\+\_\+fr\+\_\+frame\+\_\+in} (struct \textbf{ osmo\+\_\+ecu\+\_\+state} $\ast$st, bool bfi, const uint8\+\_\+t $\ast$frame, unsigned int frame\+\_\+bytes)
\item 
static int \textbf{ ecu\+\_\+fr\+\_\+frame\+\_\+out} (struct \textbf{ osmo\+\_\+ecu\+\_\+state} $\ast$st, uint8\+\_\+t $\ast$frame\+\_\+out)
\item 
static bool \textbf{ ecu\+\_\+fr\+\_\+is\+\_\+dtx\+\_\+pause} (struct \textbf{ osmo\+\_\+ecu\+\_\+state} $\ast$st)
\item 
static \textbf{ \+\_\+\+\_\+attribute\+\_\+\+\_\+} ((constructor))
\end{DoxyCompactItemize}
\doxysubsection*{Variables}
\begin{DoxyCompactItemize}
\item 
static const struct \textbf{ osmo\+\_\+ecu\+\_\+ops} \textbf{ osmo\+\_\+ecu\+\_\+ops\+\_\+fr}
\end{DoxyCompactItemize}


\doxysubsection{Macro Definition Documentation}
\mbox{\label{ecu__fr_8c_a2cc7e120ef8ad19cff1e781781def58c}} 
\index{ecu\_fr.c@{ecu\_fr.c}!GSM611\_XMAXC\_REDUCE@{GSM611\_XMAXC\_REDUCE}}
\index{GSM611\_XMAXC\_REDUCE@{GSM611\_XMAXC\_REDUCE}!ecu\_fr.c@{ecu\_fr.c}}
\doxysubsubsection{GSM611\_XMAXC\_REDUCE}
{\footnotesize\ttfamily \#define GSM611\+\_\+\+XMAXC\+\_\+\+REDUCE~4}

\mbox{\label{ecu__fr_8c_aa3ea6251ea38fb9f752c54f02c02777b}} 
\index{ecu\_fr.c@{ecu\_fr.c}!SID\_PREFIX\_LEN@{SID\_PREFIX\_LEN}}
\index{SID\_PREFIX\_LEN@{SID\_PREFIX\_LEN}!ecu\_fr.c@{ecu\_fr.c}}
\doxysubsubsection{SID\_PREFIX\_LEN}
{\footnotesize\ttfamily \#define SID\+\_\+\+PREFIX\+\_\+\+LEN~5}



\doxysubsection{Enumeration Type Documentation}
\mbox{\label{ecu__fr_8c_ab8633cdd72708245e2988ca45b2ce643}} 
\index{ecu\_fr.c@{ecu\_fr.c}!ecu\_principal\_state@{ecu\_principal\_state}}
\index{ecu\_principal\_state@{ecu\_principal\_state}!ecu\_fr.c@{ecu\_fr.c}}
\doxysubsubsection{ecu\_principal\_state}
{\footnotesize\ttfamily enum \textbf{ ecu\+\_\+principal\+\_\+state}}

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{STATE\_NO\_DATA@{STATE\_NO\_DATA}!ecu\_fr.c@{ecu\_fr.c}}\index{ecu\_fr.c@{ecu\_fr.c}!STATE\_NO\_DATA@{STATE\_NO\_DATA}}}\mbox{\label{ecu__fr_8c_ab8633cdd72708245e2988ca45b2ce643afff998da1be8435f9c10e973453a91cf}} 
STATE\+\_\+\+NO\+\_\+\+DATA&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{STATE\_SPEECH@{STATE\_SPEECH}!ecu\_fr.c@{ecu\_fr.c}}\index{ecu\_fr.c@{ecu\_fr.c}!STATE\_SPEECH@{STATE\_SPEECH}}}\mbox{\label{ecu__fr_8c_ab8633cdd72708245e2988ca45b2ce643a7147d7d29e4038bf91facc70a64238f4}} 
STATE\+\_\+\+SPEECH&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{STATE\_SP\_MUTING@{STATE\_SP\_MUTING}!ecu\_fr.c@{ecu\_fr.c}}\index{ecu\_fr.c@{ecu\_fr.c}!STATE\_SP\_MUTING@{STATE\_SP\_MUTING}}}\mbox{\label{ecu__fr_8c_ab8633cdd72708245e2988ca45b2ce643a42cc195c9bf893532033aaeec6ea812d}} 
STATE\+\_\+\+SP\+\_\+\+MUTING&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{STATE\_SID@{STATE\_SID}!ecu\_fr.c@{ecu\_fr.c}}\index{ecu\_fr.c@{ecu\_fr.c}!STATE\_SID@{STATE\_SID}}}\mbox{\label{ecu__fr_8c_ab8633cdd72708245e2988ca45b2ce643a4c6f752ff07a2d7ac85dc2f77af43e98}} 
STATE\+\_\+\+SID&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{STATE\_SID\_MUTING@{STATE\_SID\_MUTING}!ecu\_fr.c@{ecu\_fr.c}}\index{ecu\_fr.c@{ecu\_fr.c}!STATE\_SID\_MUTING@{STATE\_SID\_MUTING}}}\mbox{\label{ecu__fr_8c_ab8633cdd72708245e2988ca45b2ce643a2c639004c3114a0b0b696ae982e68334}} 
STATE\+\_\+\+SID\+\_\+\+MUTING&\\
\hline

\end{DoxyEnumFields}


\doxysubsection{Function Documentation}
\mbox{\label{ecu__fr_8c_a9ed16867a9394d9ccf1132194edae298}} 
\index{ecu\_fr.c@{ecu\_fr.c}!\_\_attribute\_\_@{\_\_attribute\_\_}}
\index{\_\_attribute\_\_@{\_\_attribute\_\_}!ecu\_fr.c@{ecu\_fr.c}}
\doxysubsubsection{\_\_attribute\_\_()}
{\footnotesize\ttfamily static \+\_\+\+\_\+attribute\+\_\+\+\_\+ (\begin{DoxyParamCaption}\item[{(constructor)}]{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ OSMO\+\_\+\+ECU\+\_\+\+CODEC\+\_\+\+FR}, \textbf{ osmo\+\_\+ecu\+\_\+ops\+\_\+fr}, and \textbf{ osmo\+\_\+ecu\+\_\+register()}.

\mbox{\label{ecu__fr_8c_a0c639469aaaae7578d4b0e221dbbba1c}} 
\index{ecu\_fr.c@{ecu\_fr.c}!\_osmo\_ecu\_state\_get\_fr@{\_osmo\_ecu\_state\_get\_fr}}
\index{\_osmo\_ecu\_state\_get\_fr@{\_osmo\_ecu\_state\_get\_fr}!ecu\_fr.c@{ecu\_fr.c}}
\doxysubsubsection{\_osmo\_ecu\_state\_get\_fr()}
{\footnotesize\ttfamily static struct \textbf{ fr\+\_\+ecu\+\_\+state} $\ast$ \+\_\+osmo\+\_\+ecu\+\_\+state\+\_\+get\+\_\+fr (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+ecu\+\_\+state} $\ast$}]{st }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



References \textbf{ container\+\_\+of}, and \textbf{ fr\+\_\+ecu\+\_\+state\+::ecu\+\_\+state}.



Referenced by \textbf{ ecu\+\_\+fr\+\_\+frame\+\_\+in()}, \textbf{ ecu\+\_\+fr\+\_\+frame\+\_\+out()}, and \textbf{ ecu\+\_\+fr\+\_\+is\+\_\+dtx\+\_\+pause()}.

\mbox{\label{ecu__fr_8c_ac6a8270b458f72447d3d773090be396d}} 
\index{ecu\_fr.c@{ecu\_fr.c}!ecu\_fr\_frame\_in@{ecu\_fr\_frame\_in}}
\index{ecu\_fr\_frame\_in@{ecu\_fr\_frame\_in}!ecu\_fr.c@{ecu\_fr.c}}
\doxysubsubsection{ecu\_fr\_frame\_in()}
{\footnotesize\ttfamily static int ecu\+\_\+fr\+\_\+frame\+\_\+in (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+ecu\+\_\+state} $\ast$}]{st,  }\item[{bool}]{bfi,  }\item[{const uint8\+\_\+t $\ast$}]{frame,  }\item[{unsigned int}]{frame\+\_\+bytes }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ \+\_\+osmo\+\_\+ecu\+\_\+state\+\_\+get\+\_\+fr()}, \textbf{ fr\+\_\+ecu\+\_\+input()}, and \textbf{ GSM\+\_\+\+FR\+\_\+\+BYTES}.

\mbox{\label{ecu__fr_8c_a7a0275c62a6a488f0eb978b5abeb4e3a}} 
\index{ecu\_fr.c@{ecu\_fr.c}!ecu\_fr\_frame\_out@{ecu\_fr\_frame\_out}}
\index{ecu\_fr\_frame\_out@{ecu\_fr\_frame\_out}!ecu\_fr.c@{ecu\_fr.c}}
\doxysubsubsection{ecu\_fr\_frame\_out()}
{\footnotesize\ttfamily static int ecu\+\_\+fr\+\_\+frame\+\_\+out (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+ecu\+\_\+state} $\ast$}]{st,  }\item[{uint8\+\_\+t $\ast$}]{frame\+\_\+out }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ \+\_\+osmo\+\_\+ecu\+\_\+state\+\_\+get\+\_\+fr()}, \textbf{ fr\+\_\+ecu\+\_\+output()}, and \textbf{ GSM\+\_\+\+FR\+\_\+\+BYTES}.

\mbox{\label{ecu__fr_8c_ae0aff4382142122c91928de2c6ae8a5f}} 
\index{ecu\_fr.c@{ecu\_fr.c}!ecu\_fr\_init@{ecu\_fr\_init}}
\index{ecu\_fr\_init@{ecu\_fr\_init}!ecu\_fr.c@{ecu\_fr.c}}
\doxysubsubsection{ecu\_fr\_init()}
{\footnotesize\ttfamily static struct \textbf{ osmo\+\_\+ecu\+\_\+state} $\ast$ ecu\+\_\+fr\+\_\+init (\begin{DoxyParamCaption}\item[{void $\ast$}]{ctx,  }\item[{enum \textbf{ osmo\+\_\+ecu\+\_\+codec}}]{codec }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+ecu\+\_\+state\+::codec}, \textbf{ fr\+\_\+ecu\+\_\+state\+::ecu\+\_\+state}, \textbf{ osmo\+\_\+prbs15}, \textbf{ osmo\+\_\+prbs\+\_\+state\+\_\+init()}, \textbf{ fr\+\_\+ecu\+\_\+state\+::pr\+\_\+state}, \textbf{ fr\+\_\+ecu\+\_\+state\+::prng}, and \textbf{ STATE\+\_\+\+NO\+\_\+\+DATA}.

\mbox{\label{ecu__fr_8c_a3bf2b45aaa5c34d1896f2532a3a498fc}} 
\index{ecu\_fr.c@{ecu\_fr.c}!ecu\_fr\_is\_dtx\_pause@{ecu\_fr\_is\_dtx\_pause}}
\index{ecu\_fr\_is\_dtx\_pause@{ecu\_fr\_is\_dtx\_pause}!ecu\_fr.c@{ecu\_fr.c}}
\doxysubsubsection{ecu\_fr\_is\_dtx\_pause()}
{\footnotesize\ttfamily static bool ecu\+\_\+fr\+\_\+is\+\_\+dtx\+\_\+pause (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+ecu\+\_\+state} $\ast$}]{st }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ \+\_\+osmo\+\_\+ecu\+\_\+state\+\_\+get\+\_\+fr()}, and \textbf{ fr\+\_\+ecu\+\_\+state\+::last\+\_\+input\+\_\+was\+\_\+sid}.

\mbox{\label{ecu__fr_8c_a858a7d4f2a7a6e7f1283d77b4fe31640}} 
\index{ecu\_fr.c@{ecu\_fr.c}!fr\_ecu\_input@{fr\_ecu\_input}}
\index{fr\_ecu\_input@{fr\_ecu\_input}!ecu\_fr.c@{ecu\_fr.c}}
\doxysubsubsection{fr\_ecu\_input()}
{\footnotesize\ttfamily static void fr\+\_\+ecu\+\_\+input (\begin{DoxyParamCaption}\item[{struct \textbf{ fr\+\_\+ecu\+\_\+state} $\ast$}]{fr,  }\item[{const uint8\+\_\+t $\ast$}]{frame }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ GSM\+\_\+\+FR\+\_\+\+BYTES}, \textbf{ fr\+\_\+ecu\+\_\+state\+::last\+\_\+input\+\_\+was\+\_\+sid}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fr\+\_\+sid\+\_\+classify()}, \textbf{ OSMO\+\_\+\+GSM631\+\_\+\+SID\+\_\+\+CLASS\+\_\+\+INVALID}, \textbf{ OSMO\+\_\+\+GSM631\+\_\+\+SID\+\_\+\+CLASS\+\_\+\+SPEECH}, \textbf{ OSMO\+\_\+\+GSM631\+\_\+\+SID\+\_\+\+CLASS\+\_\+\+VALID}, \textbf{ fr\+\_\+ecu\+\_\+state\+::pr\+\_\+state}, \textbf{ fr\+\_\+ecu\+\_\+state\+::sid\+\_\+prefix}, \textbf{ SID\+\_\+\+PREFIX\+\_\+\+LEN}, \textbf{ fr\+\_\+ecu\+\_\+state\+::sid\+\_\+reemit\+\_\+count}, \textbf{ fr\+\_\+ecu\+\_\+state\+::sid\+\_\+xmaxc}, \textbf{ fr\+\_\+ecu\+\_\+state\+::speech\+\_\+frame}, \textbf{ STATE\+\_\+\+SID}, and \textbf{ STATE\+\_\+\+SPEECH}.



Referenced by \textbf{ ecu\+\_\+fr\+\_\+frame\+\_\+in()}.

\mbox{\label{ecu__fr_8c_abb79bac27cdb1eae24f9ea24160db13e}} 
\index{ecu\_fr.c@{ecu\_fr.c}!fr\_ecu\_output@{fr\_ecu\_output}}
\index{fr\_ecu\_output@{fr\_ecu\_output}!ecu\_fr.c@{ecu\_fr.c}}
\doxysubsubsection{fr\_ecu\_output()}
{\footnotesize\ttfamily static void fr\+\_\+ecu\+\_\+output (\begin{DoxyParamCaption}\item[{struct \textbf{ fr\+\_\+ecu\+\_\+state} $\ast$}]{fr,  }\item[{uint8\+\_\+t $\ast$}]{frame }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ GSM\+\_\+\+FR\+\_\+\+BYTES}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+gsm611\+\_\+silence\+\_\+frame}, \textbf{ fr\+\_\+ecu\+\_\+state\+::pr\+\_\+state}, \textbf{ random\+\_\+grid\+\_\+pos()}, \textbf{ reduce\+\_\+xmaxc()}, \textbf{ reduce\+\_\+xmaxc\+\_\+sid()}, \textbf{ reemit\+\_\+sid()}, \textbf{ fr\+\_\+ecu\+\_\+state\+::sid\+\_\+reemit\+\_\+count}, \textbf{ fr\+\_\+ecu\+\_\+state\+::speech\+\_\+frame}, \textbf{ STATE\+\_\+\+NO\+\_\+\+DATA}, \textbf{ STATE\+\_\+\+SID}, \textbf{ STATE\+\_\+\+SID\+\_\+\+MUTING}, \textbf{ STATE\+\_\+\+SP\+\_\+\+MUTING}, and \textbf{ STATE\+\_\+\+SPEECH}.



Referenced by \textbf{ ecu\+\_\+fr\+\_\+frame\+\_\+out()}.

\mbox{\label{ecu__fr_8c_a8fab04eb4d3d8e9007d2f85ffa57f8df}} 
\index{ecu\_fr.c@{ecu\_fr.c}!random\_grid\_pos@{random\_grid\_pos}}
\index{random\_grid\_pos@{random\_grid\_pos}!ecu\_fr.c@{ecu\_fr.c}}
\doxysubsubsection{random\_grid\_pos()}
{\footnotesize\ttfamily static void random\+\_\+grid\+\_\+pos (\begin{DoxyParamCaption}\item[{struct \textbf{ fr\+\_\+ecu\+\_\+state} $\ast$}]{fr,  }\item[{uint8\+\_\+t $\ast$}]{frame }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+prbs\+\_\+get\+\_\+ubit()}, and \textbf{ fr\+\_\+ecu\+\_\+state\+::prng}.



Referenced by \textbf{ fr\+\_\+ecu\+\_\+output()}.

\mbox{\label{ecu__fr_8c_a945a48d2305ab9d0b7b43bbe54062fa6}} 
\index{ecu\_fr.c@{ecu\_fr.c}!reduce\_xmaxc@{reduce\_xmaxc}}
\index{reduce\_xmaxc@{reduce\_xmaxc}!ecu\_fr.c@{ecu\_fr.c}}
\doxysubsubsection{reduce\_xmaxc()}
{\footnotesize\ttfamily static bool reduce\+\_\+xmaxc (\begin{DoxyParamCaption}\item[{uint8\+\_\+t $\ast$}]{frame }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ GSM611\+\_\+\+XMAXC\+\_\+\+REDUCE}.



Referenced by \textbf{ fr\+\_\+ecu\+\_\+output()}.

\mbox{\label{ecu__fr_8c_ac94301cb17966061bb5be657b1d999f7}} 
\index{ecu\_fr.c@{ecu\_fr.c}!reduce\_xmaxc\_sid@{reduce\_xmaxc\_sid}}
\index{reduce\_xmaxc\_sid@{reduce\_xmaxc\_sid}!ecu\_fr.c@{ecu\_fr.c}}
\doxysubsubsection{reduce\_xmaxc\_sid()}
{\footnotesize\ttfamily static bool reduce\+\_\+xmaxc\+\_\+sid (\begin{DoxyParamCaption}\item[{struct \textbf{ fr\+\_\+ecu\+\_\+state} $\ast$}]{fr }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ GSM611\+\_\+\+XMAXC\+\_\+\+REDUCE}, and \textbf{ fr\+\_\+ecu\+\_\+state\+::sid\+\_\+xmaxc}.



Referenced by \textbf{ fr\+\_\+ecu\+\_\+output()}.

\mbox{\label{ecu__fr_8c_afca8af4239463386555c0bacfc16fe94}} 
\index{ecu\_fr.c@{ecu\_fr.c}!reemit\_sid@{reemit\_sid}}
\index{reemit\_sid@{reemit\_sid}!ecu\_fr.c@{ecu\_fr.c}}
\doxysubsubsection{reemit\_sid()}
{\footnotesize\ttfamily static void reemit\+\_\+sid (\begin{DoxyParamCaption}\item[{struct \textbf{ fr\+\_\+ecu\+\_\+state} $\ast$}]{fr,  }\item[{uint8\+\_\+t $\ast$}]{frame }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ fr\+\_\+ecu\+\_\+state\+::sid\+\_\+prefix}, \textbf{ SID\+\_\+\+PREFIX\+\_\+\+LEN}, and \textbf{ fr\+\_\+ecu\+\_\+state\+::sid\+\_\+xmaxc}.



Referenced by \textbf{ fr\+\_\+ecu\+\_\+output()}.



\doxysubsection{Variable Documentation}
\mbox{\label{ecu__fr_8c_a190ac9f1b1f5a9265ceb5dc9c8b31715}} 
\index{ecu\_fr.c@{ecu\_fr.c}!osmo\_ecu\_ops\_fr@{osmo\_ecu\_ops\_fr}}
\index{osmo\_ecu\_ops\_fr@{osmo\_ecu\_ops\_fr}!ecu\_fr.c@{ecu\_fr.c}}
\doxysubsubsection{osmo\_ecu\_ops\_fr}
{\footnotesize\ttfamily const struct \textbf{ osmo\+\_\+ecu\+\_\+ops} osmo\+\_\+ecu\+\_\+ops\+\_\+fr\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        .init = ecu\_fr\_init,}
\DoxyCodeLine{        .frame\_in = ecu\_fr\_frame\_in,}
\DoxyCodeLine{        .frame\_out = ecu\_fr\_frame\_out,}
\DoxyCodeLine{        .is\_dtx\_pause = ecu\_fr\_is\_dtx\_pause,}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ \+\_\+\+\_\+attribute\+\_\+\+\_\+()}.

