diff options
| author | Max <msuraev@sysmocom.de> | 2016-05-11 17:33:17 +0200 | 
|---|---|---|
| committer | Holger Freyther <holger@freyther.de> | 2016-05-17 16:10:31 +0000 | 
| commit | 764b022fc69c4bb9816e12801186f8fa25f8dd72 (patch) | |
| tree | adf301660c4fbedc31c820815d763949957fb47f /src | |
| parent | fe65fa7e36a400d362666e2c5bd0f289d45aa56a (diff) | |
Add function to make Uplink Measurement
It assembles RSL Uplink Measurement IE according to 3GPP TS 08.58
§9.3.25. The function is based on lchan_build_rsl_ul_meas() from OsmoBTS
but optionally includes DTX information.
Change-Id: Ib37107bcc9909e5105ea711de42d3fb1db7e8d9e
Reviewed-on: https://gerrit.osmocom.org/44
Tested-by: Jenkins Builder
Reviewed-by: Harald Welte <laforge@gnumonks.org>
Diffstat (limited to 'src')
| -rw-r--r-- | src/gsm/gsm_utils.c | 20 | ||||
| -rw-r--r-- | src/gsm/libosmogsm.map | 2 | 
2 files changed, 22 insertions, 0 deletions
diff --git a/src/gsm/gsm_utils.c b/src/gsm/gsm_utils.c index 50029479..7365ab7c 100644 --- a/src/gsm/gsm_utils.c +++ b/src/gsm/gsm_utils.c @@ -66,11 +66,13 @@  #include <osmocom/core/utils.h>  #include <osmocom/core/bitvec.h>  #include <osmocom/gsm/gsm_utils.h> +#include <osmocom/gsm/meas_rep.h>  #include <osmocom/gsm/protocol/gsm_04_08.h>  #include <stdlib.h>  #include <stdint.h>  #include <string.h> +#include <stdbool.h>  #include <stdio.h>  #include <errno.h>  #include <ctype.h> @@ -335,6 +337,24 @@ int gsm_7bit_encode_n_ussd(uint8_t *result, size_t n, const char *data, int *oct  	return y;  } +/*! \brief Build the RSL uplink measurement IE (3GPP TS 08.58 § 9.3.25) + *  \param[in] mru Unidirectional measurement report structure + *  \param[in] dtxd_used Indicates if DTXd was used during measurement report + *             period + *  \param[out] buf Pre-allocated bufer for storing IE + *  \returns Number of bytes filled in buf + */ +size_t gsm0858_rsl_ul_meas_enc(struct gsm_meas_rep_unidir *mru, bool dtxd_used, +			uint8_t *buf) +{ +	buf[0] = dtxd_used ? (1 << 6) : 0; +	buf[0] |= (mru->full.rx_lev & 0x3f); +	buf[1] = (mru->sub.rx_lev & 0x3f); +	buf[2] = ((mru->full.rx_qual & 7) << 3) | (mru->sub.rx_qual & 7); + +	return 3; +} +  /* convert power class to dBm according to GSM TS 05.05 */  unsigned int ms_class_gmsk_dbm(enum gsm_band band, int class)  { diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map index 834e5d66..1e2d3238 100644 --- a/src/gsm/libosmogsm.map +++ b/src/gsm/libosmogsm.map @@ -92,6 +92,8 @@ gsm0808_create_reset;  gsm0808_create_sapi_reject;  gsm0808_prepend_dtap_header; +gsm0858_rsl_ul_meas_enc; +  gsm338_get_sms_alphabet;  gsm340_gen_oa;  | 
