diff --git a/include/osmocom/gsm/gsm_utils.h b/include/osmocom/gsm/gsm_utils.h index 38a3f6e08..de6343487 100644 --- a/include/osmocom/gsm/gsm_utils.h +++ b/include/osmocom/gsm/gsm_utils.h @@ -115,8 +115,7 @@ int gsm_septet_encode(uint8_t *result, const char *data); uint8_t gsm_get_octet_len(const uint8_t sept_len); int gsm_7bit_decode_n_hdr(char *decoded, size_t n, const uint8_t *user_data, uint8_t length, uint8_t ud_hdr_ind); -unsigned int ms_class_gmsk_dbm(enum gsm_band band, int ms_class); - +int ms_class_gmsk_dbm(enum gsm_band band, int ms_class); int ms_pwr_ctl_lvl(enum gsm_band band, unsigned int dbm); int ms_pwr_dbm(enum gsm_band band, uint8_t lvl); diff --git a/src/gsm/gsm_utils.c b/src/gsm/gsm_utils.c index 365920fa5..ae77a9dca 100644 --- a/src/gsm/gsm_utils.c +++ b/src/gsm/gsm_utils.c @@ -501,8 +501,8 @@ size_t gsm0858_rsl_ul_meas_enc(struct gsm_meas_rep_unidir *mru, bool dtxd_used, /*! Convert power class to dBm according to GSM TS 05.05 * \param[in] band GSM frequency band * \param[in] class GSM power class - * \returns maximum transmit power of power class in dBm */ -unsigned int ms_class_gmsk_dbm(enum gsm_band band, int class) + * \returns maximum transmit power of power class in dBm, negative on error */ +int ms_class_gmsk_dbm(enum gsm_band band, int class) { switch (band) { case GSM_BAND_450: diff --git a/tests/gsm0408/gsm0408_test.c b/tests/gsm0408/gsm0408_test.c index 2488024a7..96178237c 100644 --- a/tests/gsm0408/gsm0408_test.c +++ b/tests/gsm0408/gsm0408_test.c @@ -1136,6 +1136,7 @@ static void test_si_range_helpers() static void test_power_ctrl() { int8_t rc8; + int rc; rc8 = osmo_gsm48_rfpowercap2powerclass(GSM_BAND_850, 0x00); VERIFY(rc8, ==, 1); @@ -1153,6 +1154,25 @@ static void test_power_ctrl() VERIFY(rc8, <, 0); rc8 = osmo_gsm48_rfpowercap2powerclass(GSM_BAND_900, 0xf2); VERIFY(rc8, <, 0); + + rc = ms_class_gmsk_dbm(GSM_BAND_850, 0); + VERIFY(rc, <, 0); + rc = ms_class_gmsk_dbm(GSM_BAND_850, 1); + VERIFY(rc, ==, 43); + rc = ms_class_gmsk_dbm(GSM_BAND_900, 3); + VERIFY(rc, ==, 37); + rc = ms_class_gmsk_dbm(GSM_BAND_1800, 2); + VERIFY(rc, ==, 24); + rc = ms_class_gmsk_dbm(GSM_BAND_1800, 3); + VERIFY(rc, ==, 36); + rc = ms_class_gmsk_dbm(GSM_BAND_1900, 3); + VERIFY(rc, ==, 33); + rc = ms_class_gmsk_dbm(GSM_BAND_1900, 4); + VERIFY(rc, <, 0); + rc = ms_class_gmsk_dbm(GSM_BAND_900, 5); + VERIFY(rc, ==, 29); + rc = ms_class_gmsk_dbm(GSM_BAND_900, 6); + VERIFY(rc, <, 0); } int main(int argc, char **argv)