diff options
author | Harald Welte <laforge@netfilter.org> | 2009-12-12 15:37:54 +0100 |
---|---|---|
committer | Harald Welte <laforge@netfilter.org> | 2009-12-12 15:37:54 +0100 |
commit | 4bb4738d217596582a689169d12fdd6eb1ed8785 (patch) | |
tree | bc7ebeffe4672ddfdfb7f0a84c2c77188d721c0e /openbsc | |
parent | 854b9b33afc1b9719ef91624fbb1f4861bfdc1f1 (diff) |
utility functions to convert RXLEV into dBm and vice versa
Diffstat (limited to 'openbsc')
-rw-r--r-- | openbsc/include/openbsc/gsm_utils.h | 4 | ||||
-rw-r--r-- | openbsc/src/gsm_utils.c | 22 |
2 files changed, 26 insertions, 0 deletions
diff --git a/openbsc/include/openbsc/gsm_utils.h b/openbsc/include/openbsc/gsm_utils.h index 1bd1bc55a..5809221a3 100644 --- a/openbsc/include/openbsc/gsm_utils.h +++ b/openbsc/include/openbsc/gsm_utils.h @@ -33,5 +33,9 @@ int gsm_7bit_encode(u_int8_t *result, const char *data); int ms_pwr_ctl_lvl(enum gsm_band band, unsigned int dbm); int ms_pwr_dbm(enum gsm_band band, u_int8_t lvl); +/* According to TS 08.05 Chapter 8.1.4 */ +int rxlev2dbm(u_int8_t rxlev); +u_int8_t dbm2rxlev(int dbm); + void generate_backtrace(); #endif diff --git a/openbsc/src/gsm_utils.c b/openbsc/src/gsm_utils.c index fe0b496bf..9439993db 100644 --- a/openbsc/src/gsm_utils.c +++ b/openbsc/src/gsm_utils.c @@ -160,6 +160,28 @@ int ms_pwr_dbm(enum gsm_band band, u_int8_t lvl) return -EINVAL; } +/* According to TS 08.05 Chapter 8.1.4 */ +int rxlev2dbm(u_int8_t rxlev) +{ + if (rxlev > 63) + rxlev = 63; + + return -110 + rxlev; +} + +/* According to TS 08.05 Chapter 8.1.4 */ +u_int8_t dbm2rxlev(int dbm) +{ + int rxlev = dbm + 110; + + if (rxlev > 63) + rxlev = 63; + else if (rxlev < 0) + rxlev = 0; + + return rxlev; +} + void generate_backtrace() { int i, nptrs; |