aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <vyanitskiy@sysmocom.de>2022-04-12 22:22:24 +0300
committerVadim Yanitskiy <vyanitskiy@sysmocom.de>2022-04-13 18:04:20 +0300
commit56585bb3516855cf64325fb05b299ca2fcc6d540 (patch)
treeed75159208b0b87f5824f22cb8220322c1bfe97a
parent4765a5d1951cc8cb6bbd4a2cd9cd51189f3f68fa (diff)
amr: fix parsing of threshold and hysteresis in amr_parse_mr_conf()
-rw-r--r--src/common/amr.c15
-rw-r--r--tests/amr/amr_test.ok6
2 files changed, 12 insertions, 9 deletions
diff --git a/src/common/amr.c b/src/common/amr.c
index 53ce24d6..acf1c370 100644
--- a/src/common/amr.c
+++ b/src/common/amr.c
@@ -200,19 +200,22 @@ int amr_parse_mr_conf(struct amr_multirate_conf *amr_mrc,
}
}
+ /* skip the first two octets of the IE */
+ mr_conf += 2;
+
if (num_codecs >= 2) {
- amr_mrc->bts_mode[0].threshold = mr_conf[1] & 0x3F;
- amr_mrc->bts_mode[0].hysteresis = mr_conf[2] >> 4;
+ amr_mrc->bts_mode[0].threshold = mr_conf[0] & 0x3F;
+ amr_mrc->bts_mode[0].hysteresis = mr_conf[1] >> 4;
}
if (num_codecs >= 3) {
amr_mrc->bts_mode[1].threshold =
- ((mr_conf[2] & 0xF) << 2) | (mr_conf[3] >> 6);
- amr_mrc->bts_mode[1].hysteresis = (mr_conf[3] >> 2) & 0xF;
+ ((mr_conf[1] & 0xF) << 2) | (mr_conf[2] >> 6);
+ amr_mrc->bts_mode[1].hysteresis = (mr_conf[2] >> 2) & 0xF;
}
if (num_codecs >= 4) {
amr_mrc->bts_mode[2].threshold =
- ((mr_conf[3] & 0x3) << 4) | (mr_conf[4] >> 4);
- amr_mrc->bts_mode[2].hysteresis = mr_conf[4] & 0xF;
+ ((mr_conf[2] & 0x3) << 4) | (mr_conf[3] >> 4);
+ amr_mrc->bts_mode[2].hysteresis = mr_conf[3] & 0xF;
}
return num_codecs;
diff --git a/tests/amr/amr_test.ok b/tests/amr/amr_test.ok
index 6b42e090..f0d1830e 100644
--- a/tests/amr/amr_test.ok
+++ b/tests/amr/amr_test.ok
@@ -152,9 +152,9 @@ Downlink, AMR AFS: fn_begin=95, CMI=0
Downlink, AMR AFS: fn_begin=99, CMI=1
amr_parse_mr_conf() <- 20 a5 0d 46 52 54
amr_parse_mr_conf() -> num_modes=4
- Mode[0] = 0/37/0
- Mode[1] = 2/53/1
- Mode[2] = 5/37/2
+ Mode[0] = 0/13/4
+ Mode[1] = 2/25/4
+ Mode[2] = 5/37/4
Mode[3] = 7/0/0
amr_parse_mr_conf() <- 20 ff 0d 46 52 54
amr_parse_mr_conf() <- ff ff 0d 46 52 54