From fbb8bfa514284f9744809afba51dec716590090c Mon Sep 17 00:00:00 2001 From: Max Date: Fri, 15 Apr 2016 16:04:04 +0200 Subject: Add function to get osmo_earfcn bit size This function returns the number of bits necessary to pack osmo_earfcn into Repeated E-UTRAN Neighbour Cells IE (3GPP TS 44.018 Table 10.5.2.33b.1). --- src/gsm/libosmogsm.map | 1 + src/gsm/sysinfo.c | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) (limited to 'src/gsm') diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map index a3e4e146..6886a6c0 100644 --- a/src/gsm/libosmogsm.map +++ b/src/gsm/libosmogsm.map @@ -31,6 +31,7 @@ dbm2rxlev; osmo_earfcn_add; osmo_earfcn_del; +osmo_earfcn_bit_size; osmo_earfcn_init; gprs_cipher_gen_input_i; diff --git a/src/gsm/sysinfo.c b/src/gsm/sysinfo.c index 42e717fe..3ec54448 100644 --- a/src/gsm/sysinfo.c +++ b/src/gsm/sysinfo.c @@ -144,6 +144,30 @@ int osmo_earfcn_add(struct osmo_earfcn_si2q *e, uint16_t arfcn, uint8_t meas_bw) return -ENOMEM; } +/*! \brief Return number of bits necessary to represent earfcn struct as + * Repeated E-UTRAN Neighbour Cells IE from 3GPP TS 44.018 Table 10.5.2.33b.1 + * \param[in,out] e earfcn struct + * \returns number of bits + */ +size_t osmo_earfcn_bit_size(const struct osmo_earfcn_si2q *e) +{ + /* 1 stop bit + 5 bits for THRESH_E-UTRAN_high */ + size_t i, bits = 6; + for (i = 0; i < e->length; i++) { + if (e->arfcn[i] != OSMO_EARFCN_INVALID) { + bits += 17; + if (OSMO_EARFCN_MEAS_INVALID == e->meas_bw[i]) + bits++; + else + bits += 4; + } + } + bits += (e->prio_valid) ? 4 : 1; + bits += (e->thresh_lo_valid) ? 6 : 1; + bits += (e->qrxlm_valid) ? 6 : 1; + return bits; +} + /*! \brief Delete arfcn (and corresponding measurement bandwith) from earfcn * struct * \param[in,out] e earfcn struct -- cgit v1.2.3