summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/osmocom/gsm/gsm_utils.h3
-rw-r--r--src/gsm/gsm_utils.c4
-rw-r--r--tests/gsm0408/gsm0408_test.c20
3 files changed, 23 insertions, 4 deletions
diff --git a/include/osmocom/gsm/gsm_utils.h b/include/osmocom/gsm/gsm_utils.h
index 38a3f6e0..de634348 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 365920fa..ae77a9dc 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 2488024a..96178237 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)