Change in osmo-ttcn3-hacks[master]: RLCMAC_Templates: Add functions to convert HeaderType<->MCS<->CPS

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

pespin gerrit-no-reply at lists.osmocom.org
Thu Apr 30 18:16:16 UTC 2020


pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/17991 )


Change subject: RLCMAC_Templates: Add functions to convert HeaderType<->MCS<->CPS
......................................................................

RLCMAC_Templates: Add functions to convert HeaderType<->MCS<->CPS

They will be used by tests, templates and RLCMAC_EncDec.cc itself.

MCS HEader Type 1 and 2 to CPS conversion lefts as a TODO with
placeholder functions to easily implement when needed.

Change-Id: I18ff55a8067165bf081bf21473b4f88af955bf5b
---
M library/RLCMAC_Templates.ttcn
1 file changed, 176 insertions(+), 0 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/91/17991/1

diff --git a/library/RLCMAC_Templates.ttcn b/library/RLCMAC_Templates.ttcn
index 8fb6b0c..d2174d7 100644
--- a/library/RLCMAC_Templates.ttcn
+++ b/library/RLCMAC_Templates.ttcn
@@ -29,6 +29,22 @@
 		return 0;
 	}
 
+	function f_rlcmac_mcs2headertype(CodingScheme mcs) return EgprsHeaderType {
+		select (mcs) {
+		case (MCS_0) { return RLCMAC_HDR_TYPE_3; }
+		case (MCS_1) { return RLCMAC_HDR_TYPE_3; }
+		case (MCS_2) { return RLCMAC_HDR_TYPE_3; }
+		case (MCS_3) { return RLCMAC_HDR_TYPE_3; }
+		case (MCS_4) { return RLCMAC_HDR_TYPE_3; }
+		case (MCS_5) { return RLCMAC_HDR_TYPE_2; }
+		case (MCS_6) { return RLCMAC_HDR_TYPE_2; }
+		case (MCS_7) { return RLCMAC_HDR_TYPE_1; }
+		case (MCS_8) { return RLCMAC_HDR_TYPE_1; }
+		case (MCS_9) { return RLCMAC_HDR_TYPE_1; }
+		}
+		return RLCMAC_HDR_TYPE_3;
+	}
+
 	function f_rlcmac_cs_mcs2block_len(CodingScheme cs_mcs) return uint32_t {
 		select (cs_mcs) {
 		case (CS_1) { return 23; }
@@ -72,6 +88,166 @@
 		return CS_1;
 	}
 
+	/* Coding and Puncturing Scheme indicator field for Header type 1 in EGPRS TBF or EC TBF or downlink EGPRS2 TBF */
+	function f_rlcmac_cps_htype1_to_mcs(uint3_t cps) return CodingScheme {
+		var CodingSchemeArray egprs_Header_type1_coding_puncturing_scheme_to_mcs := {
+			MCS_9 /* 0x00, "(MCS-9/P1 ; MCS-9/P1)" */,
+			MCS_9 /* 0x01, "(MCS-9/P1 ; MCS-9/P2)" */,
+			MCS_9 /* 0x02, "(MCS-9/P1 ; MCS-9/P3)" */,
+			MCS_0 /* 0x03, "reserved" */,
+			MCS_9 /* 0x04, "(MCS-9/P2 ; MCS-9/P1)" */,
+			MCS_9 /* 0x05, "(MCS-9/P2 ; MCS-9/P2)" */,
+			MCS_9 /* 0x06, "(MCS-9/P2 ; MCS-9/P3)" */,
+			MCS_0 /* 0x07, "reserved" */,
+			MCS_9 /* 0x08, "(MCS-9/P3 ; MCS-9/P1)" */,
+			MCS_9 /* 0x09, "(MCS-9/P3 ; MCS-9/P2)" */,
+			MCS_9 /* 0x0A, "(MCS-9/P3 ; MCS-9/P3)" */,
+			MCS_8 /* 0x0B, "(MCS-8/P1 ; MCS-8/P1)" */,
+			MCS_8 /* 0x0C, "(MCS-8/P1 ; MCS-8/P2)" */,
+			MCS_8 /* 0x0D, "(MCS-8/P1 ; MCS-8/P3)" */,
+			MCS_8 /* 0x0E, "(MCS-8/P2 ; MCS-8/P1)" */,
+			MCS_8 /* 0x0F, "(MCS-8/P2 ; MCS-8/P2)" */,
+			MCS_8 /* 0x10, "(MCS-8/P2 ; MCS-8/P3)" */,
+			MCS_8 /* 0x11, "(MCS-8/P3 ; MCS-8/P1)" */,
+			MCS_8 /* 0x12, "(MCS-8/P3 ; MCS-8/P2)" */,
+			MCS_8 /* 0x13, "(MCS-8/P3 ; MCS-8/P3)" */,
+			MCS_7 /* 0x14, "(MCS-7/P1 ; MCS-7/P1)" */,
+			MCS_7 /* 0x15, "(MCS-7/P1 ; MCS-7/P2)" */,
+			MCS_7 /* 0x16, "(MCS-7/P1 ; MCS-7/P3)" */,
+			MCS_7 /* 0x17, "(MCS-7/P2 ; MCS-7/P1)" */,
+			MCS_7 /* 0x18, "(MCS-7/P2 ; MCS-7/P2)" */,
+			MCS_7 /* 0x19, "(MCS-7/P2 ; MCS-7/P3)" */,
+			MCS_7 /* 0x1A, "(MCS-7/P3 ; MCS-7/P1)" */,
+			MCS_7 /* 0x1B, "(MCS-7/P3 ; MCS-7/P2)" */,
+			MCS_7 /* 0x1C, "(MCS-7/P3 ; MCS-7/P3)" */,
+			MCS_0 /* 0x1D, "reserved" */,
+			MCS_0 /* 0x1E, "reserved" */,
+			MCS_0 /* 0x1F, "reserved" */
+		};
+		return egprs_Header_type1_coding_puncturing_scheme_to_mcs[cps];
+	}
+
+	/* Coding and Puncturing Scheme indicator field for Header type 2 in (EC-)EGPRS TBF or uplink EGPRS2-A TBF */
+	function f_rlcmac_cps_htype2_to_mcs(uint3_t cps) return CodingScheme {
+		var CodingSchemeArray egprs_Header_type2_coding_puncturing_scheme_to_mcs := {
+			MCS_6 /* {0x00, "MCS-6/P1"} */,
+			MCS_6 /* {0x01, "MCS-6/P2"} */,
+			MCS_6 /* {0x02, "MCS-6/P1 with 6 octet padding"} */,
+			MCS_6 /* {0x03, "MCS-6/P2 with 6 octet padding "} */,
+			MCS_5 /* {0x04, "MCS-5/P1"} */,
+			MCS_5 /* {0x05, "MCS-5/P2"} */,
+			MCS_5 /* {0x06, "MCS-6/P1 with 10 octet padding "} */,
+			MCS_5 /* {0x07, "MCS-6/P2 with 10 octet padding "} */
+		 };
+		 return egprs_Header_type2_coding_puncturing_scheme_to_mcs[cps];
+	}
+
+	/* Coding and Puncturing Scheme indicator field for Header type 3 */
+	function f_rlcmac_cps_htype3_to_mcs(uint3_t cps) return CodingScheme {
+		var CodingSchemeArray egprs_Header_type3_coding_puncturing_scheme_to_mcs := {
+			MCS_4 /* {0x00, "MCS-4/P1"} */,
+			MCS_4 /* {0x01, "MCS-4/P2"} */,
+			MCS_4 /* {0x02, "MCS-4/P3"} */,
+			MCS_3 /* {0x03, "MCS-3/P1"} */,
+			MCS_3 /* {0x04, "MCS-3/P2"} */,
+			MCS_3 /* {0x05, "MCS-3/P3"} */,
+			MCS_3 /* {0x06, "MCS-3/P1 with padding"} */,
+			MCS_3 /* {0x07, "MCS-3/P2 with padding"} */,
+			MCS_3 /* {0x08, "MCS-3/P3 with padding"} */,
+			MCS_2 /* {0x09, "MCS-2/P1"} */,
+			MCS_2 /* {0x0A, "MCS-2/P2"} */,
+			MCS_1 /* {0x0B, "MCS-1/P1"} */,
+			MCS_1 /* {0x0C, "MCS-1/P2"} */,
+			MCS_2 /* {0x0D, "MCS-2/P1 with padding"} */,
+			MCS_2 /* {0x0E, "MCS-2/P2 with padding"} */,
+			MCS_0 /* {0x0F, "MCS-0"} */
+		};
+		return egprs_Header_type3_coding_puncturing_scheme_to_mcs[cps];
+	}
+
+	function f_rlcmac_cps_htype_to_mcs(uint3_t cps, EgprsHeaderType htype) return CodingScheme {
+		select (htype) {
+		case (RLCMAC_HDR_TYPE_1) { return f_rlcmac_cps_htype1_to_mcs(cps); }
+		case (RLCMAC_HDR_TYPE_2) { return f_rlcmac_cps_htype2_to_mcs(cps); }
+		case (RLCMAC_HDR_TYPE_3) { return f_rlcmac_cps_htype3_to_mcs(cps); }
+		}
+		//TODO: return error here.
+		return CS_1;
+	}
+
+	function f_rlcmac_mcs_to_cps_htype1(CodingScheme mcs, uint2_t part, boolean with_padding) return uint5_t {
+		//TODO: implement similar to f_rlcmac_mcs_to_cps_htype3()
+		//TODO: return error here.
+		return 0;
+	}
+
+	function f_rlcmac_mcs_to_cps_htype2(CodingScheme mcs, uint2_t part, boolean with_padding) return uint5_t {
+		//TODO: implement similar to f_rlcmac_mcs_to_cps_htype3()
+		//TODO: return error here.
+		return 0;
+	}
+
+	function f_rlcmac_mcs_to_cps_htype3(CodingScheme mcs, uint2_t part, boolean with_padding) return uint5_t {
+		select (mcs) {
+		case (MCS_4) {
+				select (part) {
+				case (1) { return 0; /* {0x00, "MCS-4/P1"} */ }
+				case (2) { return 1; /* {0x01, "MCS-4/P2"} */ }
+				case (3) { return 2; /* {0x01, "MCS-4/P2"} */ }
+				}
+			}
+		case (MCS_3) {
+				if (not with_padding) {
+					select (part) {
+					case (1) { return 3; /* {0x03, "MCS-3/P1"} */ }
+					case (2) { return 4; /* {0x04, "MCS-3/P2"} */ }
+					case (3) { return 5; /* {0x05, "MCS-3/P3"} */ }
+					}
+				} else {
+					select (part) {
+					case (1) { return 6; /* {0x06, "MCS-3/P1 with padding"} */ }
+					case (2) { return 7; /* {0x07, "MCS-3/P2 with padding"} */ }
+					case (3) { return 8; /* {0x08, "MCS-3/P3 with padding"} */ }
+					}
+				}
+			}
+		case (MCS_2) {
+				if (not with_padding) {
+					select (part) {
+					case (1) { return 9; /* {0x09, "MCS-2/P1"} */ }
+					case (2) { return 10; /* {0x0A, "MCS-2/P2"} */ }
+					}
+				} else {
+					select (part) {
+					case (1) { return 13; /* {0x0D, "MCS-2/P1 with padding"} */ }
+					case (2) { return 14; /* {0x0E, "MCS-2/P2 with padding"} */}
+					}
+				}
+			}
+		case (MCS_1) {
+				select (part) {
+				case (1) { return 11; /* {0x0B, "MCS-1/P1"} */ }
+				case (2) { return 12; /* {0x0C, "MCS-1/P2"} */ }
+				}
+			}
+		case (MCS_0) { return 15;  /* {0x0F, "MCS-0"} */ }
+		}
+		//TODO: return error here.
+		return 0;
+	}
+
+	function f_rlcmac_mcs_to_cps(CodingScheme mcs, uint2_t part, boolean with_padding := false) return uint5_t {
+
+		var EgprsHeaderType htype := f_rlcmac_mcs2headertype(mcs);
+		select (htype) {
+		case (RLCMAC_HDR_TYPE_1) { return f_rlcmac_mcs_to_cps_htype1(mcs, part, with_padding); }
+		case (RLCMAC_HDR_TYPE_2) { return f_rlcmac_mcs_to_cps_htype2(mcs, part, with_padding); }
+		case (RLCMAC_HDR_TYPE_3) { return f_rlcmac_mcs_to_cps_htype3(mcs, part, with_padding); }
+		}
+		//TODO: return error here.
+		return 0;
+	}
+
 	template (value) RlcmacUlBlock ts_RLC_UL_CTRL_ACK(RlcmacUlCtrlMsg ctrl,
 							MacPayloadType pt := MAC_PT_RLCMAC_NO_OPT,
 							boolean retry := false) := {

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/17991
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I18ff55a8067165bf081bf21473b4f88af955bf5b
Gerrit-Change-Number: 17991
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200430/e03cd48e/attachment.htm>


More information about the gerrit-log mailing list