blob: b6cd82ec7bedc1a7cd2d2b8cc0062286cc33d37c [file] [log] [blame]
Philipp Maier680acae2018-03-01 19:13:05 +01001/*! \file bts_features.c
2 * osmo-bts features. */
3/*
4 * (C) 2018 by sysmocom s.f.m.c. GmbH
5 *
6 * SPDX-License-Identifier: GPL-2.0+
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
Philipp Maier680acae2018-03-01 19:13:05 +010017 */
18
Vadim Yanitskiy82001eb2023-02-24 16:39:31 +070019#include <osmocom/core/utils.h>
Philipp Maier680acae2018-03-01 19:13:05 +010020#include <osmocom/gsm/bts_features.h>
21
22const struct value_string osmo_bts_features_descs[] = {
23 { BTS_FEAT_HSCSD, "HSCSD" },
24 { BTS_FEAT_GPRS, "GPRS" },
25 { BTS_FEAT_EGPRS, "EGPRS" },
26 { BTS_FEAT_ECSD, "ECSD" },
27 { BTS_FEAT_HOPPING, "Frequency Hopping" },
28 { BTS_FEAT_MULTI_TSC, "Multi-TSC" },
29 { BTS_FEAT_OML_ALERTS, "OML Alerts" },
30 { BTS_FEAT_AGCH_PCH_PROP, "AGCH/PCH proportional allocation" },
31 { BTS_FEAT_CBCH, "CBCH" },
32 { BTS_FEAT_SPEECH_F_V1, "Fullrate speech V1" },
33 { BTS_FEAT_SPEECH_H_V1, "Halfrate speech V1" },
34 { BTS_FEAT_SPEECH_F_EFR, "Fullrate speech EFR" },
35 { BTS_FEAT_SPEECH_F_AMR, "Fullrate speech AMR" },
36 { BTS_FEAT_SPEECH_H_AMR, "Halfrate speech AMR" },
Harald Welte994df262019-09-03 16:52:09 +020037 { BTS_FEAT_ETWS_PN, "ETWS Primary Notification via PCH" },
Harald Welte17933342020-06-21 15:32:41 +020038 { BTS_FEAT_PAGING_COORDINATION, "BSS Paging Coordination" },
Alexander Couzens03a42132020-06-07 22:53:31 +020039 { BTS_FEAT_IPV6_NSVC, "NSVC IPv6" },
Vadim Yanitskiy7e104d92021-01-07 14:22:45 +010040 { BTS_FEAT_ACCH_REP, "FACCH/SACCH Repetition" },
Pau Espin Pedrol3e3f3772021-01-29 17:12:14 +010041 { BTS_FEAT_CCN, "Cell Change Notification (CCN)" },
Neels Hofmeyr158bc792021-03-27 17:14:57 +010042 { BTS_FEAT_VAMOS, "VAMOS (Voice services over Adaptive Multi-user channels on One Slot)" },
Pau Espin Pedrol42bb1252021-05-31 17:11:45 +020043 { BTS_FEAT_ABIS_OSMO_PCU, "OsmoPCU over OML link IPA multiplex" },
Vadim Yanitskiy1c2a3292021-06-25 19:34:38 +020044 { BTS_FEAT_BCCH_POWER_RED, "BCCH carrier power reduction mode" },
Pau Espin Pedrold9825c02021-06-29 11:54:30 +020045 { BTS_FEAT_DYN_TS_SDCCH8, "Dynamic Timeslot configuration as SDCCH8" },
Philipp Maier58f76d82021-08-30 17:53:36 +020046 { BTS_FEAT_ACCH_TEMP_OVP, "FACCH/SACCH Temporary overpower" },
Pau Espin Pedrol30640072022-08-08 13:46:03 +020047 { BTS_FEAT_OSMUX, "Osmux (Osmocom RTP multiplexing)" },
Max812dfbf2023-01-23 21:19:12 +030048 { BTS_FEAT_VBS, "Voice Broadcast Service" },
49 { BTS_FEAT_VGCS, "Voice Group Call Service" },
Philipp Maier680acae2018-03-01 19:13:05 +010050 { 0, NULL }
51};
52
Vadim Yanitskiy82001eb2023-02-24 16:39:31 +070053/* Ensure that all BTS_FEAT_* entries are present in osmo_bts_features_descs[] */
54osmo_static_assert(ARRAY_SIZE(osmo_bts_features_descs) == _NUM_BTS_FEAT + 1, _bts_features_descs);
55
Neels Hofmeyr47c7b4f2021-04-02 23:20:09 +020056/*! return description string of a BTS feature (osmo_bts_features_descs).
57 * To get the plain feature name, use osmo_bts_features_name() instead. */
Philipp Maier680acae2018-03-01 19:13:05 +010058const char *osmo_bts_feature_name(enum osmo_bts_features feature)
59{
60 return get_value_string(osmo_bts_features_descs, feature);
61}
Neels Hofmeyr47c7b4f2021-04-02 23:20:09 +020062
63const struct value_string osmo_bts_features_names[] = {
64 { BTS_FEAT_HSCSD, "HSCSD" },
65 { BTS_FEAT_GPRS, "GPRS" },
66 { BTS_FEAT_EGPRS, "EGPRS" },
67 { BTS_FEAT_ECSD, "ECSD" },
68 { BTS_FEAT_HOPPING, "HOPPING" },
69 { BTS_FEAT_MULTI_TSC, "MULTI_TSC" },
70 { BTS_FEAT_OML_ALERTS, "OML_ALERTS" },
71 { BTS_FEAT_AGCH_PCH_PROP, "AGCH_PCH_PROP" },
72 { BTS_FEAT_CBCH, "CBCH" },
73 { BTS_FEAT_SPEECH_F_V1, "SPEECH_F_V1" },
74 { BTS_FEAT_SPEECH_H_V1, "SPEECH_H_V1" },
75 { BTS_FEAT_SPEECH_F_EFR, "SPEECH_F_EFR" },
76 { BTS_FEAT_SPEECH_F_AMR, "SPEECH_F_AMR" },
77 { BTS_FEAT_SPEECH_H_AMR, "SPEECH_H_AMR" },
78 { BTS_FEAT_ETWS_PN, "ETWS_PN" },
79 { BTS_FEAT_PAGING_COORDINATION, "PAGING_COORDINATION" },
80 { BTS_FEAT_IPV6_NSVC, "IPV6_NSVC" },
81 { BTS_FEAT_ACCH_REP, "ACCH_REP" },
82 { BTS_FEAT_CCN, "CCN" },
83 { BTS_FEAT_VAMOS, "VAMOS" },
Pau Espin Pedrol42bb1252021-05-31 17:11:45 +020084 { BTS_FEAT_ABIS_OSMO_PCU, "ABIS_OSMO_PCU" },
Vadim Yanitskiy1c2a3292021-06-25 19:34:38 +020085 { BTS_FEAT_BCCH_POWER_RED, "BCCH_PWR_RED" },
Pau Espin Pedrold9825c02021-06-29 11:54:30 +020086 { BTS_FEAT_DYN_TS_SDCCH8, "DYN_TS_SDCCH8" },
Pau Espin Pedrol18c6a812022-08-09 17:53:11 +020087 { BTS_FEAT_ACCH_TEMP_OVP, "ACCH_TEMP_OVP" },
88 { BTS_FEAT_OSMUX, "OSMUX" },
Vadim Yanitskiyf4f5d542023-02-24 16:27:59 +070089 { BTS_FEAT_VBS, "VBS" },
90 { BTS_FEAT_VGCS, "VGCS" },
Neels Hofmeyr47c7b4f2021-04-02 23:20:09 +020091 {}
92};
Vadim Yanitskiy82001eb2023-02-24 16:39:31 +070093
94/* Ensure that all BTS_FEAT_* entries are present in osmo_bts_features_names[] */
95osmo_static_assert(ARRAY_SIZE(osmo_bts_features_names) == _NUM_BTS_FEAT + 1, _bts_features_names);