laforge submitted this change.

View Change

Approvals: Jenkins Builder: Verified laforge: Looks good to me, approved osmith: Looks good to me, but someone else must approve
library: add f_gsm_fn_{sum,sub,diff}()

Change-Id: Ie91ccef5d3f170f4a341a6cf9d3323a896b299e6
---
M bts/BTS_Tests.ttcn
M library/GSM_Types.ttcn
M library/RLCMAC_Templates.ttcn
M pcu/PCUIF_Components.ttcn
4 files changed, 31 insertions(+), 11 deletions(-)

diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index 54238f5..2830973 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -6063,9 +6063,8 @@
private function f_next_pcuif_time_ind_block(GsmFrameNumber fn) return GsmFrameNumber
{
var uint32_t bn := ((fn mod 13) / 4) + 1;
- fn := fn - (fn mod 13);
- fn := fn + bn * 4 + bn / 3;
- return fn mod GsmMaxFrameNumber;
+ return f_gsm_fn_sum(fn - (fn mod 13),
+ bn * 4 + bn / 3);
}
testcase TC_pcu_time_ind() runs on test_CT {
var integer num_time_ind := 0;
diff --git a/library/GSM_Types.ttcn b/library/GSM_Types.ttcn
index b3b6dc9..7caca43 100644
--- a/library/GSM_Types.ttcn
+++ b/library/GSM_Types.ttcn
@@ -434,6 +434,28 @@
return (fn / 51) mod 8;
}

+/* 45.002 4.3.3: TDMA frame number modular arithmetic */
+
+/* Return the sum of two given TDMA frame numbers, wrapping around the hyperframe */
+function f_gsm_fn_sum(GsmFrameNumber a, GsmFrameNumber b) return GsmFrameNumber {
+ return (a + b) mod GsmMaxFrameNumber;
+}
+
+/* Return the difference of two given TDMA frame numbers, wrapping around the hyperframe */
+function f_gsm_fn_sub(GsmFrameNumber a, GsmFrameNumber b) return GsmFrameNumber {
+ return (a - b + GsmMaxFrameNumber) mod GsmMaxFrameNumber;
+}
+
+/* Return the *minimum* distance between two given TDMA frame numbers */
+function f_gsm_fn_diff(GsmFrameNumber a, GsmFrameNumber b) return GsmFrameNumber {
+ var GsmFrameNumber d1 := f_gsm_fn_sub(a, b);
+ var GsmFrameNumber d2 := f_gsm_fn_sub(b, a);
+ if (d1 < d2) {
+ return d1;
+ }
+ return d2;
+}
+
type hexstring GsmBcdString with { variant "HEXORDER(low)" };
type GsmBcdString BcdMccMnc with { variant "FIELDLENGTH(6)" };

@@ -542,9 +564,8 @@
function f_next_pdtch_block(GsmFrameNumber fn) return GsmFrameNumber
{
var uint32_t bn := fn2bn(fn) + 1;
- fn := fn - (fn mod 52);
- fn := fn + bn * 4 + bn / 3;
- return fn mod GsmMaxFrameNumber;
+ return f_gsm_fn_sum(fn - (fn mod 52),
+ bn * 4 + bn / 3);
}

private function ptcch_fn2bn(GsmFrameNumber fn) return uint32_t {
@@ -553,9 +574,8 @@
function f_next_ptcch_dl_block(GsmFrameNumber fn) return GsmFrameNumber
{
var uint32_t bn := ptcch_fn2bn(fn) + 1;
- fn := fn - (fn mod 416);
- fn := fn + bn * 104 + 12;
- return fn mod GsmMaxFrameNumber;
+ return f_gsm_fn_sum(fn - (fn mod 416),
+ bn * 104 + 12);
}


diff --git a/library/RLCMAC_Templates.ttcn b/library/RLCMAC_Templates.ttcn
index 5e27341..08de136 100644
--- a/library/RLCMAC_Templates.ttcn
+++ b/library/RLCMAC_Templates.ttcn
@@ -35,7 +35,7 @@

function f_rrbp_ack_fn(uint32_t current_fn, MacRrbp rrbp)
return uint32_t {
- return (current_fn + f_rrbp_fn_delay(rrbp)) mod 2715648;
+ return f_gsm_fn_sum(current_fn, f_rrbp_fn_delay(rrbp));
}

function f_rlcmac_cs_mcs_is_mcs(CodingScheme cs_mcs) return boolean {
diff --git a/pcu/PCUIF_Components.ttcn b/pcu/PCUIF_Components.ttcn
index 75e7a35..2f75a6b 100644
--- a/pcu/PCUIF_Components.ttcn
+++ b/pcu/PCUIF_Components.ttcn
@@ -21,6 +21,7 @@

import from Osmocom_Types all;
import from General_Types all;
+import from GSM_Types all;
import from RLCMAC_Types all;
import from GSM_RR_Types all;

@@ -249,7 +250,7 @@
}

/* TDMA hyperframe period is (2048 * 51 * 26) frames */
- fn := (fn + 1) mod (2048 * 51 * 26);
+ fn := f_gsm_fn_sum(fn, 1);

/* (Re)start TDMA clock timer and wait */
T_TDMAClock.start;

To view, visit change 42915. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: merged
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ie91ccef5d3f170f4a341a6cf9d3323a896b299e6
Gerrit-Change-Number: 42915
Gerrit-PatchSet: 3
Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge@osmocom.org>
Gerrit-Reviewer: osmith <osmith@sysmocom.de>
Gerrit-CC: pespin <pespin@sysmocom.de>