\doxysection{trxc.\+h}
\label{trxc_8h_source}\index{include/osmocom/trx/trxc.h@{include/osmocom/trx/trxc.h}}
\textbf{ Go to the documentation of this file.}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 }
\DoxyCodeLine{3 \textcolor{preprocessor}{\#pragma once}}
\DoxyCodeLine{4 }
\DoxyCodeLine{5 \textcolor{preprocessor}{\#include <stdint.h>}}
\DoxyCodeLine{6 \textcolor{preprocessor}{\#include <stddef.h>}}
\DoxyCodeLine{7 \textcolor{preprocessor}{\#include <stdbool.h>}}
\DoxyCodeLine{8 }
\DoxyCodeLine{9 \textcolor{preprocessor}{\#include <osmocom/core/utils.h>}}
\DoxyCodeLine{10 }
\DoxyCodeLine{12 \textcolor{preprocessor}{\#define OSMO\_TRXC\_CMD\_LEN\_MAX           32}}
\DoxyCodeLine{14 \textcolor{preprocessor}{\#define OSMO\_TRXC\_MSG\_BUF\_SIZE          1500}}
\DoxyCodeLine{20 \textcolor{preprocessor}{\#define OSMO\_TRXC\_PARAMS\_LEN\_MAX        (OSMO\_TRXC\_MSG\_BUF\_SIZE -\/ OSMO\_TRXC\_CMD\_LEN\_MAX -\/ 32)}}
\DoxyCodeLine{21 }
\DoxyCodeLine{22 \textcolor{keyword}{enum} osmo\_trxc\_msg\_type \{}
\DoxyCodeLine{23         OSMO\_TRXC\_MT\_CMD,       }
\DoxyCodeLine{24         OSMO\_TRXC\_MT\_RSP,       }
\DoxyCodeLine{25         OSMO\_TRXC\_MT\_IND,       }
\DoxyCodeLine{26 \};}
\DoxyCodeLine{27 }
\DoxyCodeLine{32 \textcolor{keyword}{struct }osmo\_trxc\_msg \{}
\DoxyCodeLine{33         \textcolor{keyword}{enum} osmo\_trxc\_msg\_type type;}
\DoxyCodeLine{34         \textcolor{keywordtype}{char} cmd[OSMO\_TRXC\_CMD\_LEN\_MAX];        }
\DoxyCodeLine{35         \textcolor{keywordtype}{int} status;                               }
\DoxyCodeLine{36         \textcolor{keywordtype}{char} params[OSMO\_TRXC\_PARAMS\_LEN\_MAX];    }
\DoxyCodeLine{37 \};}
\DoxyCodeLine{38 }
\DoxyCodeLine{39 \textcolor{keywordtype}{int} osmo\_trxc\_msg\_parse(\textcolor{keyword}{struct} osmo\_trxc\_msg *msg, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *buf, \textcolor{keywordtype}{size\_t} len);}
\DoxyCodeLine{40 \textcolor{keywordtype}{int} osmo\_trxc\_msg\_build(\textcolor{keywordtype}{char} *buf, \textcolor{keywordtype}{size\_t} buf\_size, \textcolor{keyword}{const} \textcolor{keyword}{struct} osmo\_trxc\_msg *msg);}
\DoxyCodeLine{41 \textcolor{keywordtype}{int} osmo\_trxc\_msg\_params\_scan(\textcolor{keyword}{const} \textcolor{keyword}{struct} osmo\_trxc\_msg *msg, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *fmt, ...);}
\DoxyCodeLine{42 }
\DoxyCodeLine{43 \textcolor{keyword}{const} \textcolor{keywordtype}{char} *osmo\_trxc\_msg\_name(\textcolor{keyword}{const} \textcolor{keyword}{struct} osmo\_trxc\_msg *msg);}
\DoxyCodeLine{44 \textcolor{keywordtype}{char} *osmo\_trxc\_msg\_name\_buf(\textcolor{keywordtype}{char} *buf, \textcolor{keywordtype}{size\_t} buf\_size,}
\DoxyCodeLine{45                              \textcolor{keyword}{const} \textcolor{keyword}{struct} osmo\_trxc\_msg *msg);}
\DoxyCodeLine{46 }
\DoxyCodeLine{47 \textcolor{comment}{/* Well-\/known command verbs (the codec itself is verb-\/agnostic) */}}
\DoxyCodeLine{48 \textcolor{preprocessor}{\#define OSMO\_TRXC\_CMD\_POWERON           "{}POWERON"{}}}
\DoxyCodeLine{49 \textcolor{preprocessor}{\#define OSMO\_TRXC\_CMD\_POWEROFF          "{}POWEROFF"{}}}
\DoxyCodeLine{50 \textcolor{preprocessor}{\#define OSMO\_TRXC\_CMD\_RXTUNE            "{}RXTUNE"{}}}
\DoxyCodeLine{51 \textcolor{preprocessor}{\#define OSMO\_TRXC\_CMD\_TXTUNE            "{}TXTUNE"{}}}
\DoxyCodeLine{52 \textcolor{preprocessor}{\#define OSMO\_TRXC\_CMD\_SETSLOT           "{}SETSLOT"{}}}
\DoxyCodeLine{53 \textcolor{preprocessor}{\#define OSMO\_TRXC\_CMD\_SETTSC            "{}SETTSC"{}}}
\DoxyCodeLine{54 \textcolor{preprocessor}{\#define OSMO\_TRXC\_CMD\_SETBSIC           "{}SETBSIC"{}}}
\DoxyCodeLine{55 \textcolor{preprocessor}{\#define OSMO\_TRXC\_CMD\_SETPOWER          "{}SETPOWER"{}}}
\DoxyCodeLine{56 \textcolor{preprocessor}{\#define OSMO\_TRXC\_CMD\_ADJPOWER          "{}ADJPOWER"{}}}
\DoxyCodeLine{57 \textcolor{preprocessor}{\#define OSMO\_TRXC\_CMD\_NOMTXPOWER        "{}NOMTXPOWER"{}}}
\DoxyCodeLine{58 \textcolor{preprocessor}{\#define OSMO\_TRXC\_CMD\_SETRXGAIN         "{}SETRXGAIN"{}}}
\DoxyCodeLine{59 \textcolor{preprocessor}{\#define OSMO\_TRXC\_CMD\_SETMAXDLY         "{}SETMAXDLY"{}}}
\DoxyCodeLine{60 \textcolor{preprocessor}{\#define OSMO\_TRXC\_CMD\_SETMAXDLYNB       "{}SETMAXDLYNB"{}}}
\DoxyCodeLine{61 \textcolor{preprocessor}{\#define OSMO\_TRXC\_CMD\_SETFORMAT         "{}SETFORMAT"{}}}
\DoxyCodeLine{62 \textcolor{preprocessor}{\#define OSMO\_TRXC\_CMD\_HANDOVER          "{}HANDOVER"{}}}
\DoxyCodeLine{63 \textcolor{preprocessor}{\#define OSMO\_TRXC\_CMD\_NOHANDOVER        "{}NOHANDOVER"{}}}
\DoxyCodeLine{64 \textcolor{preprocessor}{\#define OSMO\_TRXC\_CMD\_RFMUTE            "{}RFMUTE"{}}}
\DoxyCodeLine{65 \textcolor{preprocessor}{\#define OSMO\_TRXC\_CMD\_NOISELEV          "{}NOISELEV"{}}}
\DoxyCodeLine{66 \textcolor{preprocessor}{\#define OSMO\_TRXC\_CMD\_SETFH             "{}SETFH"{}}}
\DoxyCodeLine{67 \textcolor{preprocessor}{\#define OSMO\_TRXC\_CMD\_ERR               "{}ERR"{}} }
\DoxyCodeLine{69 \textcolor{comment}{/* SETSLOT: "{}<tn> <chan\_comb> [C<tsc>/S<tsc\_set> ...]"{} */}}
\DoxyCodeLine{70 }
\DoxyCodeLine{73 \textcolor{keyword}{enum} osmo\_trxc\_chan\_comb \{}
\DoxyCodeLine{74         OSMO\_TRXC\_CHAN\_COMB\_UNUSED            = 0, }
\DoxyCodeLine{75         OSMO\_TRXC\_CHAN\_COMB\_TCHF                = 1,}
\DoxyCodeLine{76         OSMO\_TRXC\_CHAN\_COMB\_TCHH\_IDLE              = 2, }
\DoxyCodeLine{77         OSMO\_TRXC\_CHAN\_COMB\_TCHH                = 3,}
\DoxyCodeLine{78         OSMO\_TRXC\_CHAN\_COMB\_BCCH                = 4, }
\DoxyCodeLine{79         OSMO\_TRXC\_CHAN\_COMB\_BCCH\_SDCCH4  = 5, }
\DoxyCodeLine{80         OSMO\_TRXC\_CHAN\_COMB\_CCCH                = 6, }
\DoxyCodeLine{81         OSMO\_TRXC\_CHAN\_COMB\_SDCCH8            = 7, }
\DoxyCodeLine{82         OSMO\_TRXC\_CHAN\_COMB\_TCHF\_FACCH\_SACCHM      = 8,}
\DoxyCodeLine{83         OSMO\_TRXC\_CHAN\_COMB\_TCHF\_SACCHM  = 9,}
\DoxyCodeLine{84         OSMO\_TRXC\_CHAN\_COMB\_TCHFD\_SACCHMD      = 10,}
\DoxyCodeLine{85         OSMO\_TRXC\_CHAN\_COMB\_PBCCH              = 11, }
\DoxyCodeLine{86         OSMO\_TRXC\_CHAN\_COMB\_PCCCH              = 12, }
\DoxyCodeLine{87         OSMO\_TRXC\_CHAN\_COMB\_PDTCH              = 13, }
\DoxyCodeLine{88 \};}
\DoxyCodeLine{89 }
\DoxyCodeLine{90 \textcolor{keyword}{extern} \textcolor{keyword}{const} \textcolor{keyword}{struct }value\_string osmo\_trxc\_chan\_comb\_names[];}
\DoxyCodeLine{91 \textcolor{keyword}{static} \textcolor{keyword}{inline} \textcolor{keyword}{const} \textcolor{keywordtype}{char} *osmo\_trxc\_chan\_comb\_name(\textcolor{keyword}{enum} osmo\_trxc\_chan\_comb comb)}
\DoxyCodeLine{92 \{}
\DoxyCodeLine{93         \textcolor{keywordflow}{return} get\_value\_string(osmo\_trxc\_chan\_comb\_names, comb);}
\DoxyCodeLine{94 \}}
\DoxyCodeLine{95 }
\DoxyCodeLine{98 \textcolor{keyword}{enum} osmo\_trxc\_vamos\_comb \{}
\DoxyCodeLine{99         OSMO\_TRXC\_VAMOS\_COMB\_VFF = 1,   }
\DoxyCodeLine{100         OSMO\_TRXC\_VAMOS\_COMB\_VHH,       }
\DoxyCodeLine{101         OSMO\_TRXC\_VAMOS\_COMB\_VFH,       }
\DoxyCodeLine{102         OSMO\_TRXC\_VAMOS\_COMB\_HVHH,     }
\DoxyCodeLine{103 \};}
\DoxyCodeLine{104 }
\DoxyCodeLine{105 \textcolor{keyword}{extern} \textcolor{keyword}{const} \textcolor{keyword}{struct }value\_string osmo\_trxc\_vamos\_comb\_names[];}
\DoxyCodeLine{106 \textcolor{keyword}{static} \textcolor{keyword}{inline} \textcolor{keyword}{const} \textcolor{keywordtype}{char} *osmo\_trxc\_vamos\_comb\_name(\textcolor{keyword}{enum} osmo\_trxc\_vamos\_comb comb)}
\DoxyCodeLine{107 \{}
\DoxyCodeLine{108         \textcolor{keywordflow}{return} get\_value\_string(osmo\_trxc\_vamos\_comb\_names, comb);}
\DoxyCodeLine{109 \}}
\DoxyCodeLine{110 }
\DoxyCodeLine{111 \textcolor{preprocessor}{\#define OSMO\_TRXC\_SETSLOT\_TSC\_MAX       3 }}
\DoxyCodeLine{115 \textcolor{keyword}{struct }osmo\_trxc\_setslot\_tsc \{}
\DoxyCodeLine{116         uint8\_t tsc;}
\DoxyCodeLine{117         uint8\_t tsc\_set;}
\DoxyCodeLine{118 \};}
\DoxyCodeLine{119 }
\DoxyCodeLine{121 \textcolor{keyword}{struct }osmo\_trxc\_setslot \{}
\DoxyCodeLine{122         uint8\_t tn;}
\DoxyCodeLine{123         \textcolor{keywordtype}{bool} vamos;        }
\DoxyCodeLine{124         \textcolor{keyword}{union }\{}
\DoxyCodeLine{125                 \textcolor{keyword}{enum} osmo\_trxc\_chan\_comb chan\_comb;}
\DoxyCodeLine{126                 \textcolor{keyword}{enum} osmo\_trxc\_vamos\_comb vamos\_comb;}
\DoxyCodeLine{127         \};}
\DoxyCodeLine{128         \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{int} num\_tsc;    }
\DoxyCodeLine{129         \textcolor{keyword}{struct }osmo\_trxc\_setslot\_tsc tsc[OSMO\_TRXC\_SETSLOT\_TSC\_MAX];}
\DoxyCodeLine{130 \};}
\DoxyCodeLine{131 }
\DoxyCodeLine{132 \textcolor{keywordtype}{int} osmo\_trxc\_setslot\_parse(\textcolor{keyword}{struct} osmo\_trxc\_setslot *ss, \textcolor{keyword}{const} \textcolor{keyword}{struct} osmo\_trxc\_msg *msg);}
\DoxyCodeLine{133 \textcolor{keywordtype}{int} osmo\_trxc\_setslot\_build(\textcolor{keywordtype}{char} *buf, \textcolor{keywordtype}{size\_t} buf\_size, \textcolor{keyword}{const} \textcolor{keyword}{struct} osmo\_trxc\_setslot *ss);}
\DoxyCodeLine{134 }
\DoxyCodeLine{135 \textcolor{comment}{/* Clock socket: "{}IND CLOCK <fn>"{} */}}
\DoxyCodeLine{136 \textcolor{keywordtype}{int} osmo\_trxc\_clock\_ind\_parse(uint32\_t *fn, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *buf, \textcolor{keywordtype}{size\_t} len);}
\DoxyCodeLine{137 \textcolor{keywordtype}{int} osmo\_trxc\_clock\_ind\_build(\textcolor{keywordtype}{char} *buf, \textcolor{keywordtype}{size\_t} buf\_size, uint32\_t fn);}

\end{DoxyCode}
