PCU_Tests_RAW.ttcn: fix ToA handling in as_ta_ptcch()

As it turns out, it was a bad idea to use a counter in altstep
as_ta_ptcch(), because its value is getting lost. Let's instead
introduce a new type PTCCH_TAI_ToA_MAP, which is basically a
list of ToA values for each PTCCH/U sub-slot (TA Index), and
pass it to the altstep.

Change-Id: I74252dfb929fcb32d07e8728d692674931fae727
This commit is contained in:
Vadim Yanitskiy 2019-10-06 00:51:50 +07:00 committed by fixeria
parent b58b7308e5
commit 20f8700767
2 changed files with 65 additions and 11 deletions

View File

@ -133,6 +133,37 @@ type component RAW_PCU_ClckGen_CT {
var integer fn := 0;
}
/* Derive PTCCH/U sub-slot from a given TDMA frame-number */
function f_tdma_ptcch_fn2ss(integer fn) return integer
{
var integer ss := -1;
/* See 3GPP TS 45.002, table 6 */
select (fn mod 416) {
case (12) { ss := 0; }
case (38) { ss := 1; }
case (64) { ss := 2; }
case (90) { ss := 3; }
case (116) { ss := 4; }
case (142) { ss := 5; }
case (168) { ss := 6; }
case (194) { ss := 7; }
case (220) { ss := 8; }
case (246) { ss := 9; }
case (272) { ss := 10; }
case (298) { ss := 11; }
case (324) { ss := 12; }
case (350) { ss := 13; }
case (376) { ss := 14; }
case (402) { ss := 15; }
}
return ss;
}
function f_ClckGen_CT_handler()
runs on RAW_PCU_ClckGen_CT {
var integer fn104, fn52, fn13;

View File

@ -766,16 +766,33 @@ testcase TC_ta_ptcch_idle() runs on RAW_PCU_Test_CT {
* indications to the PCU, checking the correctness of two received PTCCH/D
* messages (period of PTCCH/D is two multi-frames).
*/
private altstep as_ta_ptcch(uint8_t bts_nr := 0, integer toa_factor := 0)
/* List of ToA values for Access Bursts to be sent on PTCCH/U,
* each ToA (Timing of Arrival) value is in units of 1/4 of
* a symbol (i.e. 1 symbol is 4 QTA units). */
type record length(16) of int16_t PTCCH_TAI_ToA_MAP;
const PTCCH_TAI_ToA_MAP ptcch_toa_map_def := {
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0
};
private altstep as_ta_ptcch(uint8_t bts_nr := 0, /* TODO: TRX / TS number */
in PTCCH_TAI_ToA_MAP toa_map := ptcch_toa_map_def)
runs on RAW_PCU_Test_CT {
var integer counter := 0;
var RAW_PCU_Event event;
var integer ss;
/* Send Access Bursts on PTCCH/U for every TA Index */
[] BTS.receive(tr_RAW_PCU_EV(TDMA_EV_PTCCH_UL_BURST)) -> value event {
ss := f_tdma_ptcch_fn2ss(event.data.tdma_fn);
if (ss < 0) { mtc.stop; } /* Shall not happen */
log("Sending an Access Burst on PTCCH/U",
", sub-slot=", ss, " (TAI)",
", fn=", event.data.tdma_fn,
", ToA=", counter * toa_factor);
", ToA=", toa_map[ss], " (QTA)");
/* TODO: do we care about RA and burst format? */
BTS.send(ts_PCUIF_RACH_IND(bts_nr := bts_nr,
ra := oct2int('3A'O),
@ -783,14 +800,14 @@ runs on RAW_PCU_Test_CT {
burst_type := BURST_TYPE_0,
fn := event.data.tdma_fn,
arfcn := 871,
qta := counter * toa_factor * 4,
qta := toa_map[ss],
sapi := PCU_IF_SAPI_PTCCH));
counter := counter + 1;
repeat;
}
}
private function f_TC_ta_ptcch_ul_multi_tbf(template PTCCHDownlinkMsg t_ta_msg)
private function f_TC_ta_ptcch_ul_multi_tbf(in PTCCH_TAI_ToA_MAP ptcch_toa_map,
template PTCCHDownlinkMsg t_ta_msg)
runs on RAW_PCU_Test_CT {
var PTCCHDownlinkMsg ta_msg;
var PCUIF_Message pcu_msg;
@ -804,7 +821,7 @@ runs on RAW_PCU_Test_CT {
alt {
/* Keep sending of Access Bursts during two multi-frames (period of PTCCH/D)
* with increasing ToA (Timing of Arrival) values: 0, 7, 14, 28, 35... */
[] as_ta_ptcch(bts_nr := 0, toa_factor := 7);
[] as_ta_ptcch(bts_nr := 0, toa_map := ptcch_toa_map);
/* In the end of 2nd multi-frame we should receive a PTCCH/D block */
[] BTS.receive(tr_PCUIF_DATA_REQ(bts_nr := 0, trx_nr := 0, ts_nr := 7,
sapi := PCU_IF_SAPI_PTCCH)) -> value pcu_msg {
@ -869,6 +886,13 @@ testcase TC_ta_ptcch_ul_multi_tbf() runs on RAW_PCU_Test_CT {
}
}
/* Prepare a list of ToA values for Access Bursts to be sent on PTCCH/U */
var PTCCH_TAI_ToA_MAP toa_map := ptcch_toa_map_def;
for (var integer i := 0; i < 7; i := i + 1) {
/* ToA in units of 1/4 of a symbol */
toa_map[i] := (i + 1) * 7 * 4;
}
/* Now we have all 7 TBFs established in one-phase access mode,
* however we will not be sending any data on them. Instead, we
* will be sending RACH.ind on PTCCH/U during 4 multi-frame
@ -877,15 +901,14 @@ testcase TC_ta_ptcch_ul_multi_tbf() runs on RAW_PCU_Test_CT {
* Why not 4 TBFs at once? Because Uplink is delayed by 3 TDMA
* time-slots, so at the moment of scheduling a PTCCH/D block
* the PCU has odd number of PTCCH/U Access Bursts received. */
f_TC_ta_ptcch_ul_multi_tbf(tr_PTCCHDownlinkMsg(
f_TC_ta_ptcch_ul_multi_tbf(toa_map, tr_PTCCHDownlinkMsg(
tai0_ta := 7, tai1_ta := 14, tai2_ta := 21,
/* Other values are not known (yet) */
tai3_ta := ?));
f_TC_ta_ptcch_ul_multi_tbf(tr_PTCCHDownlinkMsg(
/* Other values are out of our interest */
f_TC_ta_ptcch_ul_multi_tbf(toa_map, tr_PTCCHDownlinkMsg(
tai0_ta := 7, tai1_ta := 14, tai2_ta := 21,
tai3_ta := 28, tai4_ta := 35, tai5_ta := 42,
/* Other values are not known (yet) */
/* Other values are out of our interest */
tai6_ta := ?));
}