Philipp Maier | 680acae | 2018-03-01 19:13:05 +0100 | [diff] [blame] | 1 | #pragma once |
| 2 | |
| 3 | #include <osmocom/core/utils.h> |
| 4 | #include <osmocom/core/bitvec.h> |
| 5 | |
| 6 | #define MAX_BTS_FEATURES 128 |
| 7 | |
| 8 | /* N. B: always add new features to the end of the list (right before _NUM_BTS_FEAT) to avoid breaking compatibility |
| 9 | with BTS compiled against earlier version of this header. Also make sure that the description strings |
| 10 | gsm_bts_features_descs[] in gsm_data.c are also updated accordingly! */ |
| 11 | enum osmo_bts_features { |
| 12 | BTS_FEAT_HSCSD, |
| 13 | BTS_FEAT_GPRS, |
| 14 | BTS_FEAT_EGPRS, |
| 15 | BTS_FEAT_ECSD, |
| 16 | BTS_FEAT_HOPPING, |
| 17 | BTS_FEAT_MULTI_TSC, |
| 18 | BTS_FEAT_OML_ALERTS, |
| 19 | BTS_FEAT_AGCH_PCH_PROP, |
| 20 | BTS_FEAT_CBCH, |
| 21 | BTS_FEAT_SPEECH_F_V1, |
| 22 | BTS_FEAT_SPEECH_H_V1, |
| 23 | BTS_FEAT_SPEECH_F_EFR, |
| 24 | BTS_FEAT_SPEECH_F_AMR, |
| 25 | BTS_FEAT_SPEECH_H_AMR, |
| 26 | _NUM_BTS_FEAT |
| 27 | }; |
| 28 | |
| 29 | extern const struct value_string osmo_bts_features_descs[]; |
| 30 | |
| 31 | const char *osmo_bts_feature_name(enum osmo_bts_features feature); |
| 32 | |
Philipp Maier | bf86d71 | 2018-03-05 13:26:44 +0100 | [diff] [blame] | 33 | static inline int osmo_bts_set_feature(struct bitvec *features, enum osmo_bts_features feature) |
Philipp Maier | 680acae | 2018-03-01 19:13:05 +0100 | [diff] [blame] | 34 | { |
| 35 | OSMO_ASSERT(_NUM_BTS_FEAT < MAX_BTS_FEATURES); |
| 36 | return bitvec_set_bit_pos(features, feature, 1); |
| 37 | } |
| 38 | |
Philipp Maier | bf86d71 | 2018-03-05 13:26:44 +0100 | [diff] [blame] | 39 | static inline bool osmo_bts_has_feature(const struct bitvec *features, enum osmo_bts_features feature) |
Philipp Maier | 680acae | 2018-03-01 19:13:05 +0100 | [diff] [blame] | 40 | { |
| 41 | OSMO_ASSERT(_NUM_BTS_FEAT < MAX_BTS_FEATURES); |
| 42 | return bitvec_get_bit_pos(features, feature); |
| 43 | } |