PCU: introduce f_rrbp_ack_fn(), fix poll frame number calculation

The resulting frame number shall be within the period of TDMA hyperframe.

Change-Id: I794a14f69293cbbc937d62d09dd5794956b882db
Signed-off-by: Vadim Yanitskiy <axilirator@gmail.com>
diff --git a/library/RLCMAC_Templates.ttcn b/library/RLCMAC_Templates.ttcn
index 38147f3..bcd2b23 100644
--- a/library/RLCMAC_Templates.ttcn
+++ b/library/RLCMAC_Templates.ttcn
@@ -29,6 +29,11 @@
 		return 0;
 	}
 
+	function f_rrbp_ack_fn(uint32_t current_fn, MacRrbp rrbp)
+	return uint32_t {
+		return (current_fn + f_rrbp_fn_delay(rrbp)) mod 2715648;
+	}
+
 	function f_rlcmac_mcs2headertype(CodingScheme mcs) return EgprsHeaderType {
 		select (mcs) {
 		case (MCS_0) { return RLCMAC_HDR_TYPE_3; }
diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn
index 32df39e..eff20f7 100644
--- a/pcu/PCU_Tests.ttcn
+++ b/pcu/PCU_Tests.ttcn
@@ -547,7 +547,7 @@
 		f_shutdown(__BFILE__, __LINE__);
 	}
 
-	poll_fn := dl_fn + f_rrbp_fn_delay(dl_block.ctrl.mac_hdr.rrbp);
+	poll_fn := f_rrbp_ack_fn(dl_fn, dl_block.ctrl.mac_hdr.rrbp);
 }
 
 private function f_rx_rlcmac_dl_block_exp_dummy(out RlcmacDlBlock dl_block)
@@ -571,7 +571,7 @@
 		f_shutdown(__BFILE__, __LINE__);
 	}
 
-	poll_fn := dl_fn + f_rrbp_fn_delay(dl_block.ctrl.mac_hdr.rrbp);
+	poll_fn := f_rrbp_ack_fn(dl_fn, dl_block.ctrl.mac_hdr.rrbp);
 }
 
 private function f_rx_rlcmac_dl_block_exp_pkt_ul_ass(out RlcmacDlBlock dl_block, out uint32_t poll_fn)
@@ -584,7 +584,7 @@
 		f_shutdown(__BFILE__, __LINE__);
         }
 
-        poll_fn := dl_fn + f_rrbp_fn_delay(dl_block.ctrl.mac_hdr.rrbp);
+	poll_fn := f_rrbp_ack_fn(dl_fn, dl_block.ctrl.mac_hdr.rrbp);
 }
 
 
@@ -606,7 +606,7 @@
 runs on RAW_PCU_Test_CT {
 	log("verifying dl data block (gprs): ", dl_block);
 
-	ack_fn := dl_fn + f_rrbp_fn_delay(dl_block.data.mac_hdr.mac_hdr.rrbp);
+	ack_fn := f_rrbp_ack_fn(dl_fn, dl_block.data.mac_hdr.mac_hdr.rrbp);
 
 	if (not match(dl_block.data.mac_hdr.hdr_ext.bsn, exp_bsn)) {
 		setverdict(fail, "DL block BSN doesn't match: ",
@@ -645,7 +645,7 @@
 runs on RAW_PCU_Test_CT {
 	log("verifying dl data block (egprs): ", dl_block);
 
-	ack_fn := dl_fn + f_rrbp_fn_delay(dl_block.data_egprs.mac_hdr.rrbp);
+	ack_fn := f_rrbp_ack_fn(dl_fn, dl_block.data_egprs.mac_hdr.rrbp);
 
 	if (not match(dl_block.data_egprs.mac_hdr.bsn1, exp_bsn)) {
 		setverdict(fail, "DL block BSN doesn't match: ",