<p>fixeria <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-pcu/+/19786">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, but someone else must approve
  pespin: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">encoding: pass pdch slot directly to encoding functions<br><br>In order to be able to encode frequency hopping parameters, let's<br>pass a const pointer to 'gprs_rlcmac_pdch' (PDCH slot) directly,<br>instead of passing all related parameters separately.<br><br>Change-Id: I6bccad508f0fdccc4a763211008dd847a9111a8d<br>Related: SYS#4868, OS#4547<br>---<br>M src/bts.cpp<br>M src/encoding.cpp<br>M src/encoding.h<br>M tests/types/TypesTest.cpp<br>4 files changed, 34 insertions(+), 21 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/bts.cpp b/src/bts.cpp</span><br><span>index 76ca1b0..5cd2b1d 100644</span><br><span>--- a/src/bts.cpp</span><br><span>+++ b/src/bts.cpp</span><br><span>@@ -899,8 +899,9 @@</span><br><span>                  trx_no, m_bts.trx[trx_no].arfcn & ~ARFCN_FLAG_MASK,</span><br><span>                      ts_no, ta, tsc, tbf ? tbf->tfi() : -1, usf);</span><br><span>                 plen = Encoding::write_immediate_assignment(</span><br><span style="color: hsl(0, 100%, 40%);">-                    tbf, bv, false, rip->ra, Fn, ta, m_bts.trx[trx_no].arfcn,</span><br><span style="color: hsl(0, 100%, 40%);">-                    ts_no, tsc, usf, false, sb_fn, m_bts.alpha, m_bts.gamma, -1,</span><br><span style="color: hsl(120, 100%, 40%);">+                  &m_bts.trx[trx_no].pdch[ts_no], tbf, bv,</span><br><span style="color: hsl(120, 100%, 40%);">+                  false, rip->ra, Fn, ta, usf, false, sb_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                 m_bts.alpha, m_bts.gamma, -1,</span><br><span>                        rip->burst_type);</span><br><span>                 do_rate_ctr_inc(CTR_IMMEDIATE_ASSIGN_UL_TBF);</span><br><span>        }</span><br><span>@@ -967,8 +968,9 @@</span><br><span> </span><br><span> void BTS::snd_dl_ass(gprs_rlcmac_tbf *tbf, bool poll, uint16_t pgroup)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+    uint8_t trx_no = tbf->trx->trx_no;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint8_t ts_no = tbf->first_ts;</span><br><span>    int plen;</span><br><span style="color: hsl(0, 100%, 40%);">-       unsigned int ts = tbf->first_ts;</span><br><span> </span><br><span>      LOGPTBF(tbf, LOGL_INFO, "TX: START Immediate Assignment Downlink (PCH)\n");</span><br><span>        bitvec *immediate_assignment = bitvec_alloc(22, tall_pcu_ctx); /* without plen */</span><br><span>@@ -976,12 +978,12 @@</span><br><span>    /* use request reference that has maximum distance to current time,</span><br><span>   * so the assignment will not conflict with possible RACH requests. */</span><br><span>       LOGP(DRLCMAC, LOGL_DEBUG, " - TRX=%d (%d) TS=%d TA=%d pollFN=%d\n",</span><br><span style="color: hsl(0, 100%, 40%);">-           tbf->trx->trx_no, tbf->trx->arfcn,</span><br><span style="color: hsl(0, 100%, 40%);">-          ts, tbf->ta(), poll ? tbf->poll_fn : -1);</span><br><span style="color: hsl(0, 100%, 40%);">- plen = Encoding::write_immediate_assignment(tbf, immediate_assignment, true, 125,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                   (tbf->pdch[ts]->last_rts_fn + 21216) % GSM_MAX_FN, tbf->ta(),</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  tbf->trx->arfcn, ts, tbf->tsc(), 7, poll,</span><br><span style="color: hsl(0, 100%, 40%);">-                                              tbf->poll_fn, m_bts.alpha, m_bts.gamma, -1,</span><br><span style="color: hsl(120, 100%, 40%);">+            trx_no, tbf->trx->arfcn, ts_no, tbf->ta(), poll ? tbf->poll_fn : -1);</span><br><span style="color: hsl(120, 100%, 40%);">+     plen = Encoding::write_immediate_assignment(&m_bts.trx[trx_no].pdch[ts_no],</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   tbf, immediate_assignment, true, 125,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 (tbf->pdch[ts_no]->last_rts_fn + 21216) % GSM_MAX_FN,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   tbf->ta(), 7, poll, tbf->poll_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                                               m_bts.alpha, m_bts.gamma, -1,</span><br><span>                                                GSM_L1_BURST_TYPE_ACCESS_0);</span><br><span>     if (plen >= 0) {</span><br><span>          do_rate_ctr_inc(CTR_IMMEDIATE_ASSIGN_DL_TBF);</span><br><span>diff --git a/src/encoding.cpp b/src/encoding.cpp</span><br><span>index 15de6d7..76a1cec 100644</span><br><span>--- a/src/encoding.cpp</span><br><span>+++ b/src/encoding.cpp</span><br><span>@@ -439,9 +439,10 @@</span><br><span>  * see GSM 04.08, 9.1.18 and GSM 44.018, 9.1.18 + 10.5.2.16</span><br><span>  */</span><br><span> int Encoding::write_immediate_assignment(</span><br><span style="color: hsl(120, 100%, 40%);">+  const struct gprs_rlcmac_pdch *pdch,</span><br><span>         struct gprs_rlcmac_tbf *tbf,</span><br><span>         bitvec * dest, bool downlink, uint16_t ra,</span><br><span style="color: hsl(0, 100%, 40%);">-      uint32_t ref_fn, uint8_t ta, uint16_t arfcn, uint8_t ts, uint8_t tsc,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint32_t ref_fn, uint8_t ta,</span><br><span>         uint8_t usf, bool polling, uint32_t fn, uint8_t alpha,</span><br><span>       uint8_t gamma, int8_t ta_idx, enum ph_burst_type burst_type)</span><br><span> {</span><br><span>@@ -462,11 +463,12 @@</span><br><span>    bitvec_write_field(dest, &wp,0x0,4); // Page Mode</span><br><span> </span><br><span>    // GSM 04.08 10.5.2.25a Packet Channel Description</span><br><span style="color: hsl(0, 100%, 40%);">-      bitvec_write_field(dest, &wp,0x1,5);                               // Channel type</span><br><span style="color: hsl(0, 100%, 40%);">-  bitvec_write_field(dest, &wp,ts,3);     // TN</span><br><span style="color: hsl(0, 100%, 40%);">-       bitvec_write_field(dest, &wp,tsc,3);    // TSC</span><br><span style="color: hsl(0, 100%, 40%);">-      bitvec_write_field(dest, &wp,0x0,3);                               // non-hopping RF channel configuraion</span><br><span style="color: hsl(0, 100%, 40%);">-   bitvec_write_field(dest, &wp,arfcn,10); // ARFCN</span><br><span style="color: hsl(120, 100%, 40%);">+  bitvec_write_field(dest, &wp, 0x01, 5);                     // Channel type</span><br><span style="color: hsl(120, 100%, 40%);">+       bitvec_write_field(dest, &wp, pdch->ts_no, 3);           // TN</span><br><span style="color: hsl(120, 100%, 40%);">+ bitvec_write_field(dest, &wp, pdch->tsc, 3);             // TSC</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      bitvec_write_field(dest, &wp, 0x00, 3);                     // spare (non-hopping RF channel configuraion)</span><br><span style="color: hsl(120, 100%, 40%);">+        bitvec_write_field(dest, &wp, pdch->trx->arfcn, 10);  // ARFCN</span><br><span> </span><br><span>         //10.5.2.30 Request Reference</span><br><span>        if (((burst_type == GSM_L1_BURST_TYPE_ACCESS_1) ||</span><br><span>diff --git a/src/encoding.h b/src/encoding.h</span><br><span>index a556687..18392f7 100644</span><br><span>--- a/src/encoding.h</span><br><span>+++ b/src/encoding.h</span><br><span>@@ -42,10 +42,11 @@</span><br><span> class Encoding {</span><br><span> public:</span><br><span>         static int write_immediate_assignment(</span><br><span style="color: hsl(120, 100%, 40%);">+                        const struct gprs_rlcmac_pdch *pdch,</span><br><span>                         struct gprs_rlcmac_tbf *tbf,</span><br><span>                         bitvec * dest, bool downlink, uint16_t ra,</span><br><span style="color: hsl(0, 100%, 40%);">-                      uint32_t ref_fn, uint8_t ta, uint16_t arfcn, uint8_t ts,</span><br><span style="color: hsl(0, 100%, 40%);">-                        uint8_t tsc, uint8_t usf, bool polling,</span><br><span style="color: hsl(120, 100%, 40%);">+                       uint32_t ref_fn, uint8_t ta,</span><br><span style="color: hsl(120, 100%, 40%);">+                  uint8_t usf, bool polling,</span><br><span>                   uint32_t fn, uint8_t alpha, uint8_t gamma,</span><br><span>                   int8_t ta_idx,</span><br><span>                       enum ph_burst_type burst_type);</span><br><span>diff --git a/tests/types/TypesTest.cpp b/tests/types/TypesTest.cpp</span><br><span>index e1c894d..353d821 100644</span><br><span>--- a/tests/types/TypesTest.cpp</span><br><span>+++ b/tests/types/TypesTest.cpp</span><br><span>@@ -728,17 +728,25 @@</span><br><span> static void check_imm_ass(struct gprs_rlcmac_tbf *tbf, bool dl, enum ph_burst_type bt, const uint8_t *exp, uint8_t len,</span><br><span>                    const char *kind)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-        uint8_t alpha = 7, gamma = 8, ta = 35, ts = 5, tsc = 1, usf = 1, sz = sizeof(DUMMY_VEC) / 2, plen;</span><br><span style="color: hsl(120, 100%, 40%);">+    uint8_t alpha = 7, gamma = 8, ta = 35, usf = 1, sz = sizeof(DUMMY_VEC) / 2, plen;</span><br><span>    bitvec *immediate_assignment = bitvec_alloc(sz, tall_pcu_ctx);</span><br><span>       struct msgb *m = msgb_alloc(80, "test");</span><br><span>   bool poll = true;</span><br><span style="color: hsl(0, 100%, 40%);">-       uint16_t ra = 13, arfcn = 877;</span><br><span style="color: hsl(120, 100%, 40%);">+        uint16_t ra = 13;</span><br><span>    uint32_t ref_fn = 24, fn = 11;</span><br><span>       int8_t ta_idx = 0;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        /* HACK: tbf can be NULL, so we cannot use tbf->trx here */</span><br><span style="color: hsl(120, 100%, 40%);">+        struct gprs_rlcmac_trx trx = { };</span><br><span style="color: hsl(120, 100%, 40%);">+     trx.pdch[5].trx = &trx;</span><br><span style="color: hsl(120, 100%, 40%);">+   trx.pdch[5].ts_no = 5;</span><br><span style="color: hsl(120, 100%, 40%);">+        trx.pdch[5].tsc = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+  trx.arfcn = 877;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   bitvec_unhex(immediate_assignment, DUMMY_VEC);</span><br><span style="color: hsl(0, 100%, 40%);">-  plen = Encoding::write_immediate_assignment(tbf, immediate_assignment, dl,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  ra, ref_fn, ta, arfcn, ts, tsc, usf,</span><br><span style="color: hsl(120, 100%, 40%);">+      plen = Encoding::write_immediate_assignment(&trx.pdch[5], tbf,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                immediate_assignment,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 dl, ra, ref_fn, ta, usf,</span><br><span>                                                     poll, fn, alpha, gamma, ta_idx, bt);</span><br><span>     printf("[%u] %s Immediate Assignment <%s>:\n\t%s\n", plen, dl ? "DL" : "UL", kind,</span><br><span>              osmo_hexdump(immediate_assignment->data, sz));</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-pcu/+/19786">change 19786</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/c/osmo-pcu/+/19786"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-pcu </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I6bccad508f0fdccc4a763211008dd847a9111a8d </div>
<div style="display:none"> Gerrit-Change-Number: 19786 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>