<p>dexter has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/13089">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gsm0808_utils: fix gsm48 multirate to S-bit converter<br><br>The function gsm0808_sc_cfg_from_gsm48_mr_cfg() is used to convert a<br>gsm48 multirate struct into a set of S-bits (S0 to S15). However, the<br>conversion function currently does not take into account that bit S1<br>actually stands for four rates at once (Config-NB-Code = 1). Lets make<br>sure that S1 is only set when the multirate configuration permits all<br>four required rates.<br><br>Change-Id: I6ad531d4e70c2252e32e2bbaca8e14a7ec6d9840<br>Related: SYS#4470<br>---<br>M src/gsm/gsm0808_utils.c<br>M tests/gsm0808/gsm0808_test.c<br>M tests/gsm0808/gsm0808_test.ok<br>3 files changed, 53 insertions(+), 20 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/89/13089/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/gsm/gsm0808_utils.c b/src/gsm/gsm0808_utils.c</span><br><span>index 4c9c9a2..c5e08dc 100644</span><br><span>--- a/src/gsm/gsm0808_utils.c</span><br><span>+++ b/src/gsm/gsm0808_utils.c</span><br><span>@@ -1340,6 +1340,14 @@</span><br><span>    else</span><br><span>                 s15_s0 &= GSM0808_SC_CFG_DEFAULT_HR_AMR;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+      /* The mode that is encoded by S1 (Config-NB-Code = 1), takes a special</span><br><span style="color: hsl(120, 100%, 40%);">+        * role as it does not stand for a single rate, but for for rates</span><br><span style="color: hsl(120, 100%, 40%);">+      * at once (12.2, 7.4, 5.9, 4.75). We must check if the supllied cfg</span><br><span style="color: hsl(120, 100%, 40%);">+   * covers this mode. If not, we need to make sure that the related</span><br><span style="color: hsl(120, 100%, 40%);">+     * bit is removed. (See also 3GPP TS 28.062, Table 7.11.3.1.3-2) */</span><br><span style="color: hsl(120, 100%, 40%);">+   if (!(cfg->m12_2 && cfg->m7_40 && cfg->m5_90 && cfg->m4_75))</span><br><span style="color: hsl(120, 100%, 40%);">+              s15_s0 &= ~GSM0808_SC_CFG_AMR_4_75_5_90_7_40_12_20;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    return s15_s0;</span><br><span> }</span><br><span> </span><br><span>diff --git a/tests/gsm0808/gsm0808_test.c b/tests/gsm0808/gsm0808_test.c</span><br><span>index def7771..347898f 100644</span><br><span>--- a/tests/gsm0808/gsm0808_test.c</span><br><span>+++ b/tests/gsm0808/gsm0808_test.c</span><br><span>@@ -1902,6 +1902,17 @@</span><br><span>        cfg.m10_2 = 1;</span><br><span>       cfg.m12_2 = 1;</span><br><span>       test_gsm0808_sc_cfg_from_gsm48_mr_cfg_single(&cfg);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Test 3GPP TS 28.062, Table 7.11.3.1.3-2, Config-NB-Code = 1 */</span><br><span style="color: hsl(120, 100%, 40%);">+     cfg.m4_75 = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg.m5_15 = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg.m5_90 = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg.m6_70 = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg.m7_40 = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg.m7_95 = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg.m10_2 = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg.m12_2 = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+        test_gsm0808_sc_cfg_from_gsm48_mr_cfg_single(&cfg);</span><br><span> }</span><br><span> </span><br><span> static void test_gsm48_mr_cfg_from_gsm0808_sc_cfg_single(uint16_t s15_s0)</span><br><span>diff --git a/tests/gsm0808/gsm0808_test.ok b/tests/gsm0808/gsm0808_test.ok</span><br><span>index b749f14..f92c6b2 100644</span><br><span>--- a/tests/gsm0808/gsm0808_test.ok</span><br><span>+++ b/tests/gsm0808/gsm0808_test.ok</span><br><span>@@ -110,9 +110,9 @@</span><br><span>  m10_2= 0</span><br><span>  m12_2= 0</span><br><span> Result (fr):</span><br><span style="color: hsl(0, 100%, 40%);">- S15-S0 = 5703 = 0b0101011100000011</span><br><span style="color: hsl(120, 100%, 40%);">+ S15-S0 = 5701 = 0b0101011100000001</span><br><span> Result (hr):</span><br><span style="color: hsl(0, 100%, 40%);">- S15-S0 = 0703 = 0b0000011100000011</span><br><span style="color: hsl(120, 100%, 40%);">+ S15-S0 = 0701 = 0b0000011100000001</span><br><span> </span><br><span> Input:</span><br><span>  m4_75= 0   smod=  0</span><br><span>@@ -138,9 +138,9 @@</span><br><span>  m10_2= 0</span><br><span>  m12_2= 0</span><br><span> Result (fr):</span><br><span style="color: hsl(0, 100%, 40%);">- S15-S0 = 5706 = 0b0101011100000110</span><br><span style="color: hsl(120, 100%, 40%);">+ S15-S0 = 5704 = 0b0101011100000100</span><br><span> Result (hr):</span><br><span style="color: hsl(0, 100%, 40%);">- S15-S0 = 0706 = 0b0000011100000110</span><br><span style="color: hsl(120, 100%, 40%);">+ S15-S0 = 0704 = 0b0000011100000100</span><br><span> </span><br><span> Input:</span><br><span>  m4_75= 0   smod=  0</span><br><span>@@ -166,9 +166,9 @@</span><br><span>  m10_2= 0</span><br><span>  m12_2= 0</span><br><span> Result (fr):</span><br><span style="color: hsl(0, 100%, 40%);">- S15-S0 = 0412 = 0b0000010000010010</span><br><span style="color: hsl(120, 100%, 40%);">+ S15-S0 = 0410 = 0b0000010000010000</span><br><span> Result (hr):</span><br><span style="color: hsl(0, 100%, 40%);">- S15-S0 = 0412 = 0b0000010000010010</span><br><span style="color: hsl(120, 100%, 40%);">+ S15-S0 = 0410 = 0b0000010000010000</span><br><span> </span><br><span> Input:</span><br><span>  m4_75= 0   smod=  0</span><br><span>@@ -208,9 +208,9 @@</span><br><span>  m10_2= 0</span><br><span>  m12_2= 1</span><br><span> Result (fr):</span><br><span style="color: hsl(0, 100%, 40%);">- S15-S0 = 4082 = 0b0100000010000010</span><br><span style="color: hsl(120, 100%, 40%);">+ S15-S0 = 4080 = 0b0100000010000000</span><br><span> Result (hr):</span><br><span style="color: hsl(0, 100%, 40%);">- S15-S0 = 0002 = 0b0000000000000010</span><br><span style="color: hsl(120, 100%, 40%);">+ S15-S0 = 0000 = 0b0000000000000000</span><br><span> </span><br><span> Input:</span><br><span>  m4_75= 1   smod=  0</span><br><span>@@ -222,9 +222,9 @@</span><br><span>  m10_2= 0</span><br><span>  m12_2= 0</span><br><span> Result (fr):</span><br><span style="color: hsl(0, 100%, 40%);">- S15-S0 = 570f = 0b0101011100001111</span><br><span style="color: hsl(120, 100%, 40%);">+ S15-S0 = 570d = 0b0101011100001101</span><br><span> Result (hr):</span><br><span style="color: hsl(0, 100%, 40%);">- S15-S0 = 070f = 0b0000011100001111</span><br><span style="color: hsl(120, 100%, 40%);">+ S15-S0 = 070d = 0b0000011100001101</span><br><span> </span><br><span> Input:</span><br><span>  m4_75= 0   smod=  0</span><br><span>@@ -236,9 +236,9 @@</span><br><span>  m10_2= 1</span><br><span>  m12_2= 1</span><br><span> Result (fr):</span><br><span style="color: hsl(0, 100%, 40%);">- S15-S0 = 54f2 = 0b0101010011110010</span><br><span style="color: hsl(120, 100%, 40%);">+ S15-S0 = 54f0 = 0b0101010011110000</span><br><span> Result (hr):</span><br><span style="color: hsl(0, 100%, 40%);">- S15-S0 = 0432 = 0b0000010000110010</span><br><span style="color: hsl(120, 100%, 40%);">+ S15-S0 = 0430 = 0b0000010000110000</span><br><span> </span><br><span> Input:</span><br><span>  m4_75= 0   smod=  0</span><br><span>@@ -250,9 +250,9 @@</span><br><span>  m10_2= 1</span><br><span>  m12_2= 1</span><br><span> Result (fr):</span><br><span style="color: hsl(0, 100%, 40%);">- S15-S0 = 57ce = 0b0101011111001110</span><br><span style="color: hsl(120, 100%, 40%);">+ S15-S0 = 57cc = 0b0101011111001100</span><br><span> Result (hr):</span><br><span style="color: hsl(0, 100%, 40%);">- S15-S0 = 070e = 0b0000011100001110</span><br><span style="color: hsl(120, 100%, 40%);">+ S15-S0 = 070c = 0b0000011100001100</span><br><span> </span><br><span> Input:</span><br><span>  m4_75= 1   smod=  0</span><br><span>@@ -264,9 +264,9 @@</span><br><span>  m10_2= 0</span><br><span>  m12_2= 0</span><br><span> Result (fr):</span><br><span style="color: hsl(0, 100%, 40%);">- S15-S0 = 5733 = 0b0101011100110011</span><br><span style="color: hsl(120, 100%, 40%);">+ S15-S0 = 5731 = 0b0101011100110001</span><br><span> Result (hr):</span><br><span style="color: hsl(0, 100%, 40%);">- S15-S0 = 0733 = 0b0000011100110011</span><br><span style="color: hsl(120, 100%, 40%);">+ S15-S0 = 0731 = 0b0000011100110001</span><br><span> </span><br><span> Input:</span><br><span>  m4_75= 0   smod=  0</span><br><span>@@ -278,9 +278,9 @@</span><br><span>  m10_2= 0</span><br><span>  m12_2= 1</span><br><span> Result (fr):</span><br><span style="color: hsl(0, 100%, 40%);">- S15-S0 = 56aa = 0b0101011010101010</span><br><span style="color: hsl(120, 100%, 40%);">+ S15-S0 = 56a8 = 0b0101011010101000</span><br><span> Result (hr):</span><br><span style="color: hsl(0, 100%, 40%);">- S15-S0 = 062a = 0b0000011000101010</span><br><span style="color: hsl(120, 100%, 40%);">+ S15-S0 = 0628 = 0b0000011000101000</span><br><span> </span><br><span> Input:</span><br><span>  m4_75= 1   smod=  0</span><br><span>@@ -292,9 +292,9 @@</span><br><span>  m10_2= 1</span><br><span>  m12_2= 0</span><br><span> Result (fr):</span><br><span style="color: hsl(0, 100%, 40%);">- S15-S0 = 5757 = 0b0101011101010111</span><br><span style="color: hsl(120, 100%, 40%);">+ S15-S0 = 5755 = 0b0101011101010101</span><br><span> Result (hr):</span><br><span style="color: hsl(0, 100%, 40%);">- S15-S0 = 0717 = 0b0000011100010111</span><br><span style="color: hsl(120, 100%, 40%);">+ S15-S0 = 0715 = 0b0000011100010101</span><br><span> </span><br><span> Input:</span><br><span>  m4_75= 1   smod=  0</span><br><span>@@ -310,6 +310,20 @@</span><br><span> Result (hr):</span><br><span>  S15-S0 = 073f = 0b0000011100111111</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+Input:</span><br><span style="color: hsl(120, 100%, 40%);">+ m4_75= 1   smod=  0</span><br><span style="color: hsl(120, 100%, 40%);">+ m5_15= 0   spare= 0</span><br><span style="color: hsl(120, 100%, 40%);">+ m5_90= 1   icmi=  0</span><br><span style="color: hsl(120, 100%, 40%);">+ m6_70= 0   nscb=  0</span><br><span style="color: hsl(120, 100%, 40%);">+ m7_40= 1   ver=   0</span><br><span style="color: hsl(120, 100%, 40%);">+ m7_95= 0</span><br><span style="color: hsl(120, 100%, 40%);">+ m10_2= 0</span><br><span style="color: hsl(120, 100%, 40%);">+ m12_2= 1</span><br><span style="color: hsl(120, 100%, 40%);">+Result (fr):</span><br><span style="color: hsl(120, 100%, 40%);">+ S15-S0 = 5797 = 0b0101011110010111</span><br><span style="color: hsl(120, 100%, 40%);">+Result (hr):</span><br><span style="color: hsl(120, 100%, 40%);">+ S15-S0 = 0717 = 0b0000011100010111</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> Testing gsm48_mr_cfg_from_gsm0808_sc_cfg():</span><br><span> Input:</span><br><span>  S15-S0 = ff03 = 0b1111111100000011</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/13089">change 13089</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/13089"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I6ad531d4e70c2252e32e2bbaca8e14a7ec6d9840 </div>
<div style="display:none"> Gerrit-Change-Number: 13089 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>