\doxysection{bts\+\_\+features.\+h}
\label{bts__features_8h_source}\index{include/osmocom/gsm/bts\_features.h@{include/osmocom/gsm/bts\_features.h}}
\textbf{ Go to the documentation of this file.}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{preprocessor}{\#pragma once}}
\DoxyCodeLine{2 }
\DoxyCodeLine{3 \textcolor{preprocessor}{\#include <osmocom/core/utils.h>}}
\DoxyCodeLine{4 \textcolor{preprocessor}{\#include <osmocom/core/bitvec.h>}}
\DoxyCodeLine{5 }
\DoxyCodeLine{6 \textcolor{preprocessor}{\#define MAX\_BTS\_FEATURES 128}}
\DoxyCodeLine{7 }
\DoxyCodeLine{8 \textcolor{comment}{/* N. B: always add new features to the end of the list (right before \_NUM\_BTS\_FEAT) to avoid breaking compatibility}}
\DoxyCodeLine{9 \textcolor{comment}{   with BTS compiled against earlier version of this header. Also make sure that the description strings}}
\DoxyCodeLine{10 \textcolor{comment}{   osmo\_bts\_features\_\{descs,names\}[] in bts\_features.c are also updated accordingly! */}}
\DoxyCodeLine{11 \textcolor{keyword}{enum} osmo\_bts\_features \{}
\DoxyCodeLine{12         BTS\_FEAT\_HSCSD,}
\DoxyCodeLine{13         BTS\_FEAT\_GPRS,}
\DoxyCodeLine{14         BTS\_FEAT\_EGPRS,}
\DoxyCodeLine{15         BTS\_FEAT\_ECSD,}
\DoxyCodeLine{16         BTS\_FEAT\_HOPPING,}
\DoxyCodeLine{17         BTS\_FEAT\_MULTI\_TSC,}
\DoxyCodeLine{18         BTS\_FEAT\_OML\_ALERTS,}
\DoxyCodeLine{19         BTS\_FEAT\_AGCH\_PCH\_PROP,}
\DoxyCodeLine{20         BTS\_FEAT\_CBCH,}
\DoxyCodeLine{21         BTS\_FEAT\_SPEECH\_F\_V1,}
\DoxyCodeLine{22         BTS\_FEAT\_SPEECH\_H\_V1,}
\DoxyCodeLine{23         BTS\_FEAT\_SPEECH\_F\_EFR,}
\DoxyCodeLine{24         BTS\_FEAT\_SPEECH\_F\_AMR,}
\DoxyCodeLine{25         BTS\_FEAT\_SPEECH\_H\_AMR,}
\DoxyCodeLine{26         BTS\_FEAT\_ETWS\_PN,}
\DoxyCodeLine{27         BTS\_FEAT\_PAGING\_COORDINATION,       \textcolor{comment}{/* BTS hands CS paging to PCU/PACCH */}}
\DoxyCodeLine{28         BTS\_FEAT\_IPV6\_NSVC,}
\DoxyCodeLine{29         BTS\_FEAT\_ACCH\_REP,}
\DoxyCodeLine{30         BTS\_FEAT\_CCN, \textcolor{comment}{/* Is CCN supported by the cell? TS 44.060 sec 8.8.2 */}}
\DoxyCodeLine{31         BTS\_FEAT\_VAMOS, \textcolor{comment}{/* Is the BTS VAMOS capable? */}}
\DoxyCodeLine{32         BTS\_FEAT\_ABIS\_OSMO\_PCU, \textcolor{comment}{/* BTS supports forwarding data to PCUIF over IPA OML multiplex */}}
\DoxyCodeLine{33         BTS\_FEAT\_BCCH\_POWER\_RED,}
\DoxyCodeLine{34         BTS\_FEAT\_DYN\_TS\_SDCCH8, \textcolor{comment}{/* Osmo Dynamic TS supports configured as SDCCH8 */}}
\DoxyCodeLine{35         BTS\_FEAT\_ACCH\_TEMP\_OVP, \textcolor{comment}{/* FACCH/SACCH Temporary overpower */}}
\DoxyCodeLine{36         BTS\_FEAT\_OSMUX, \textcolor{comment}{/* Osmux (Osmocom RTP muxing) support */}}
\DoxyCodeLine{37         BTS\_FEAT\_VBS, \textcolor{comment}{/* Voice Broadcast Service support, 3GPP TS 43.069 */}}
\DoxyCodeLine{38         BTS\_FEAT\_VGCS, \textcolor{comment}{/* Voice Group Call Service support, 3GPP TS 44.068 */}}
\DoxyCodeLine{39         \_NUM\_BTS\_FEAT}
\DoxyCodeLine{40 \};}
\DoxyCodeLine{41 }
\DoxyCodeLine{42 \textcolor{keyword}{extern} \textcolor{keyword}{const} \textcolor{keyword}{struct }value\_string osmo\_bts\_features\_descs[];}
\DoxyCodeLine{43 }
\DoxyCodeLine{44 \textcolor{keyword}{static} \textcolor{keyword}{inline} \textcolor{keyword}{const} \textcolor{keywordtype}{char} *osmo\_bts\_features\_desc(\textcolor{keyword}{enum} osmo\_bts\_features val)}
\DoxyCodeLine{45 \{ \textcolor{keywordflow}{return} get\_value\_string(osmo\_bts\_features\_descs, val); \}}
\DoxyCodeLine{46 }
\DoxyCodeLine{47 \textcolor{keyword}{const} \textcolor{keywordtype}{char} *osmo\_bts\_feature\_name(\textcolor{keyword}{enum} osmo\_bts\_features feature)}
\DoxyCodeLine{48         OSMO\_DEPRECATED(\textcolor{stringliteral}{"{}Use osmo\_bts\_features\_desc() instead"{}});}
\DoxyCodeLine{49 }
\DoxyCodeLine{50 \textcolor{keyword}{extern} \textcolor{keyword}{const} \textcolor{keyword}{struct }value\_string osmo\_bts\_features\_names[];}
\DoxyCodeLine{51 }
\DoxyCodeLine{52 \textcolor{keyword}{static} \textcolor{keyword}{inline} \textcolor{keyword}{const} \textcolor{keywordtype}{char} *osmo\_bts\_features\_name(\textcolor{keyword}{enum} osmo\_bts\_features val)}
\DoxyCodeLine{53 \{ \textcolor{keywordflow}{return} get\_value\_string(osmo\_bts\_features\_names, val); \}}
\DoxyCodeLine{54 }
\DoxyCodeLine{55 \textcolor{keyword}{static} \textcolor{keyword}{inline} \textcolor{keywordtype}{int} osmo\_bts\_set\_feature(\textcolor{keyword}{struct} bitvec *features, \textcolor{keyword}{enum} osmo\_bts\_features feature)}
\DoxyCodeLine{56 \{}
\DoxyCodeLine{57         OSMO\_ASSERT(\_NUM\_BTS\_FEAT < MAX\_BTS\_FEATURES);}
\DoxyCodeLine{58         \textcolor{keywordflow}{return} bitvec\_set\_bit\_pos(features, feature, 1);}
\DoxyCodeLine{59 \}}
\DoxyCodeLine{60 }
\DoxyCodeLine{61 \textcolor{keyword}{static} \textcolor{keyword}{inline} \textcolor{keywordtype}{int} osmo\_bts\_unset\_feature(\textcolor{keyword}{struct} bitvec *features, \textcolor{keyword}{enum} osmo\_bts\_features feature)}
\DoxyCodeLine{62 \{}
\DoxyCodeLine{63         OSMO\_ASSERT(\_NUM\_BTS\_FEAT < MAX\_BTS\_FEATURES);}
\DoxyCodeLine{64         \textcolor{keywordflow}{return} bitvec\_set\_bit\_pos(features, feature, 0);}
\DoxyCodeLine{65 \}}
\DoxyCodeLine{66 }
\DoxyCodeLine{67 \textcolor{keyword}{static} \textcolor{keyword}{inline} \textcolor{keywordtype}{bool} osmo\_bts\_has\_feature(\textcolor{keyword}{const} \textcolor{keyword}{struct} bitvec *features, \textcolor{keyword}{enum} osmo\_bts\_features feature)}
\DoxyCodeLine{68 \{}
\DoxyCodeLine{69         OSMO\_ASSERT(\_NUM\_BTS\_FEAT < MAX\_BTS\_FEATURES);}
\DoxyCodeLine{70         \textcolor{keywordflow}{return} bitvec\_get\_bit\_pos(features, feature) == ONE;}
\DoxyCodeLine{71 \}}

\end{DoxyCode}
