<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/13089">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  Harald Welte: Looks good to me, approved

</div><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, 78 insertions(+), 19 deletions(-)<br><br></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 2552c08..e0cdaaf 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,16 @@</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 up to four 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 supplied 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) && fr)</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%);">+       else if (!(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 87f5d2a..8f1e299 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,27 @@</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%);">+     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 style="color: hsl(120, 100%, 40%);">+</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 = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+        test_gsm0808_sc_cfg_from_gsm48_mr_cfg_single(&cfg);</span><br><span style="color: hsl(120, 100%, 40%);">+       </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 9fce0e8..b620e36 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,7 +292,7 @@</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>  S15-S0 = 0717 = 0b0000011100010111</span><br><span> </span><br><span>@@ -310,6 +310,34 @@</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 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= 0</span><br><span style="color: hsl(120, 100%, 40%);">+Result (fr):</span><br><span style="color: hsl(120, 100%, 40%);">+ S15-S0 = 5715 = 0b0101011100010101</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: merged </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: 3 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>