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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">PCU_Tests_RAW.ttcn: fix ToA handling in as_ta_ptcch()<br><br>As it turns out, it was a bad idea to use a counter in altstep<br>as_ta_ptcch(), because its value is getting lost. Let's instead<br>introduce a new type PTCCH_TAI_ToA_MAP, which is basically a<br>list of ToA values for each PTCCH/U sub-slot (TA Index), and<br>pass it to the altstep.<br><br>Change-Id: I74252dfb929fcb32d07e8728d692674931fae727<br>---<br>M pcu/PCUIF_RAW_Components.ttcn<br>M pcu/PCU_Tests_RAW.ttcn<br>2 files changed, 65 insertions(+), 11 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/pcu/PCUIF_RAW_Components.ttcn b/pcu/PCUIF_RAW_Components.ttcn</span><br><span>index 465e398..ab8b3b7 100644</span><br><span>--- a/pcu/PCUIF_RAW_Components.ttcn</span><br><span>+++ b/pcu/PCUIF_RAW_Components.ttcn</span><br><span>@@ -133,6 +133,37 @@</span><br><span>       var integer fn := 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Derive PTCCH/U sub-slot from a given TDMA frame-number */</span><br><span style="color: hsl(120, 100%, 40%);">+function f_tdma_ptcch_fn2ss(integer fn) return integer</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        var integer ss := -1;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* See 3GPP TS 45.002, table 6 */</span><br><span style="color: hsl(120, 100%, 40%);">+     select (fn mod 416) {</span><br><span style="color: hsl(120, 100%, 40%);">+ case (12) { ss := 0; }</span><br><span style="color: hsl(120, 100%, 40%);">+        case (38) { ss := 1; }</span><br><span style="color: hsl(120, 100%, 40%);">+        case (64) { ss := 2; }</span><br><span style="color: hsl(120, 100%, 40%);">+        case (90) { ss := 3; }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      case (116) { ss := 4; }</span><br><span style="color: hsl(120, 100%, 40%);">+       case (142) { ss := 5; }</span><br><span style="color: hsl(120, 100%, 40%);">+       case (168) { ss := 6; }</span><br><span style="color: hsl(120, 100%, 40%);">+       case (194) { ss := 7; }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     case (220) { ss := 8; }</span><br><span style="color: hsl(120, 100%, 40%);">+       case (246) { ss := 9; }</span><br><span style="color: hsl(120, 100%, 40%);">+       case (272) { ss := 10; }</span><br><span style="color: hsl(120, 100%, 40%);">+      case (298) { ss := 11; }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    case (324) { ss := 12; }</span><br><span style="color: hsl(120, 100%, 40%);">+      case (350) { ss := 13; }</span><br><span style="color: hsl(120, 100%, 40%);">+      case (376) { ss := 14; }</span><br><span style="color: hsl(120, 100%, 40%);">+      case (402) { ss := 15; }</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   return ss;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> function f_ClckGen_CT_handler()</span><br><span> runs on RAW_PCU_ClckGen_CT {</span><br><span>   var integer fn104, fn52, fn13;</span><br><span>diff --git a/pcu/PCU_Tests_RAW.ttcn b/pcu/PCU_Tests_RAW.ttcn</span><br><span>index 0771cf9..af1ef99 100644</span><br><span>--- a/pcu/PCU_Tests_RAW.ttcn</span><br><span>+++ b/pcu/PCU_Tests_RAW.ttcn</span><br><span>@@ -766,16 +766,33 @@</span><br><span>  * indications to the PCU, checking the correctness of two received PTCCH/D</span><br><span>  * messages (period of PTCCH/D is two multi-frames).</span><br><span>  */</span><br><span style="color: hsl(0, 100%, 40%);">-private altstep as_ta_ptcch(uint8_t bts_nr := 0, integer toa_factor := 0)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* List of ToA values for Access Bursts to be sent on PTCCH/U,</span><br><span style="color: hsl(120, 100%, 40%);">+ * each ToA (Timing of Arrival) value is in units of 1/4 of</span><br><span style="color: hsl(120, 100%, 40%);">+ * a symbol (i.e. 1 symbol is 4 QTA units). */</span><br><span style="color: hsl(120, 100%, 40%);">+type record length(16) of int16_t PTCCH_TAI_ToA_MAP;</span><br><span style="color: hsl(120, 100%, 40%);">+const PTCCH_TAI_ToA_MAP ptcch_toa_map_def := {</span><br><span style="color: hsl(120, 100%, 40%);">+       0, 0, 0, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+   0, 0, 0, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+   0, 0, 0, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+   0, 0, 0, 0</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+private altstep as_ta_ptcch(uint8_t bts_nr := 0, /* TODO: TRX / TS number */</span><br><span style="color: hsl(120, 100%, 40%);">+                            in PTCCH_TAI_ToA_MAP toa_map := ptcch_toa_map_def)</span><br><span> runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-     var integer counter := 0;</span><br><span>    var RAW_PCU_Event event;</span><br><span style="color: hsl(120, 100%, 40%);">+      var integer ss;</span><br><span> </span><br><span>  /* Send Access Bursts on PTCCH/U for every TA Index */</span><br><span>       [] BTS.receive(tr_RAW_PCU_EV(TDMA_EV_PTCCH_UL_BURST)) -> value event {</span><br><span style="color: hsl(120, 100%, 40%);">+             ss := f_tdma_ptcch_fn2ss(event.data.tdma_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+         if (ss < 0) { mtc.stop; } /* Shall not happen */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>                log("Sending an Access Burst on PTCCH/U",</span><br><span style="color: hsl(120, 100%, 40%);">+               ", sub-slot=", ss, " (TAI)",</span><br><span>                     ", fn=", event.data.tdma_fn,</span><br><span style="color: hsl(0, 100%, 40%);">-                  ", ToA=", counter * toa_factor);</span><br><span style="color: hsl(120, 100%, 40%);">+                    ", ToA=", toa_map[ss], " (QTA)");</span><br><span>            /* TODO: do we care about RA and burst format? */</span><br><span>            BTS.send(ts_PCUIF_RACH_IND(bts_nr := bts_nr,</span><br><span>                                            ra := oct2int('3A'O),</span><br><span>@@ -783,14 +800,14 @@</span><br><span>                                        burst_type := BURST_TYPE_0,</span><br><span>                                          fn := event.data.tdma_fn,</span><br><span>                                            arfcn := 871,</span><br><span style="color: hsl(0, 100%, 40%);">-                                           qta := counter * toa_factor * 4,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      qta := toa_map[ss],</span><br><span>                                          sapi := PCU_IF_SAPI_PTCCH));</span><br><span style="color: hsl(0, 100%, 40%);">-         counter := counter + 1;</span><br><span>              repeat;</span><br><span>              }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private function f_TC_ta_ptcch_ul_multi_tbf(template PTCCHDownlinkMsg t_ta_msg)</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_ta_ptcch_ul_multi_tbf(in PTCCH_TAI_ToA_MAP ptcch_toa_map,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        template PTCCHDownlinkMsg t_ta_msg)</span><br><span> runs on RAW_PCU_Test_CT {</span><br><span>         var PTCCHDownlinkMsg ta_msg;</span><br><span>         var PCUIF_Message pcu_msg;</span><br><span>@@ -804,7 +821,7 @@</span><br><span>     alt {</span><br><span>        /* Keep sending of Access Bursts during two multi-frames (period of PTCCH/D)</span><br><span>          * with increasing ToA (Timing of Arrival) values: 0, 7, 14, 28, 35... */</span><br><span style="color: hsl(0, 100%, 40%);">-       [] as_ta_ptcch(bts_nr := 0, toa_factor := 7);</span><br><span style="color: hsl(120, 100%, 40%);">+ [] as_ta_ptcch(bts_nr := 0, toa_map := ptcch_toa_map);</span><br><span>       /* In the end of 2nd multi-frame we should receive a PTCCH/D block */</span><br><span>        [] BTS.receive(tr_PCUIF_DATA_REQ(bts_nr := 0, trx_nr := 0, ts_nr := 7,</span><br><span>                                        sapi := PCU_IF_SAPI_PTCCH)) -> value pcu_msg {</span><br><span>@@ -869,6 +886,13 @@</span><br><span>            }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* Prepare a list of ToA values for Access Bursts to be sent on PTCCH/U */</span><br><span style="color: hsl(120, 100%, 40%);">+    var PTCCH_TAI_ToA_MAP toa_map := ptcch_toa_map_def;</span><br><span style="color: hsl(120, 100%, 40%);">+   for (var integer i := 0; i < 7; i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+              /* ToA in units of 1/4 of a symbol */</span><br><span style="color: hsl(120, 100%, 40%);">+         toa_map[i] := (i + 1) * 7 * 4;</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  /* Now we have all 7 TBFs established in one-phase access mode,</span><br><span>       * however we will not be sending any data on them. Instead, we</span><br><span>       * will be sending RACH.ind on PTCCH/U during 4 multi-frame</span><br><span>@@ -877,15 +901,14 @@</span><br><span>   * Why not 4 TBFs at once? Because Uplink is delayed by 3 TDMA</span><br><span>        * time-slots, so at the moment of scheduling a PTCCH/D block</span><br><span>         * the PCU has odd number of PTCCH/U Access Bursts received. */</span><br><span style="color: hsl(0, 100%, 40%);">- f_TC_ta_ptcch_ul_multi_tbf(tr_PTCCHDownlinkMsg(</span><br><span style="color: hsl(120, 100%, 40%);">+       f_TC_ta_ptcch_ul_multi_tbf(toa_map, tr_PTCCHDownlinkMsg(</span><br><span>             tai0_ta :=  7, tai1_ta := 14, tai2_ta := 21,</span><br><span>                 /* Other values are not known (yet) */</span><br><span>               tai3_ta := ?));</span><br><span style="color: hsl(0, 100%, 40%);">- f_TC_ta_ptcch_ul_multi_tbf(tr_PTCCHDownlinkMsg(</span><br><span style="color: hsl(0, 100%, 40%);">-         /* Other values are out of our interest */</span><br><span style="color: hsl(120, 100%, 40%);">+    f_TC_ta_ptcch_ul_multi_tbf(toa_map, tr_PTCCHDownlinkMsg(</span><br><span>             tai0_ta :=  7, tai1_ta := 14, tai2_ta := 21,</span><br><span>                 tai3_ta := 28, tai4_ta := 35, tai5_ta := 42,</span><br><span style="color: hsl(0, 100%, 40%);">-            /* Other values are not known (yet) */</span><br><span style="color: hsl(120, 100%, 40%);">+                /* Other values are out of our interest */</span><br><span>           tai6_ta := ?));</span><br><span> }</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/15679">change 15679</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-ttcn3-hacks/+/15679"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I74252dfb929fcb32d07e8728d692674931fae727 </div>
<div style="display:none"> Gerrit-Change-Number: 15679 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <axilirator@gmail.com> </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>