BTS: manually compose Rest Octets for SI Type 3 and 4

Finally, we can get rid of hard-coded octetstrings and control
every field of the Rest Octets we're sending to the IUT.

Note that template 'ts_SI4_default' did not contain any Rest
Octets at all, thus the GPRS indicator was (and still is)
absent. This will be fixed in a follow up change.

Change-Id: I0a95b34b495267edf1f48692e24fcd5ede8ccdd1
Signed-off-by: Vadim Yanitskiy <axilirator@gmail.com>
diff --git a/library/GSM_RestOctets.ttcn b/library/GSM_RestOctets.ttcn
index 045d177..531528c 100644
--- a/library/GSM_RestOctets.ttcn
+++ b/library/GSM_RestOctets.ttcn
@@ -142,4 +142,54 @@
 	with { extension "prototype(convert) decode(RAW)" };
 
 
+/* Basic templates to be extended in place */
+template (value) SI3RestOctets ts_SI3RestOctets := {
+	sel_params := {
+		presence := CSN1_L,
+		params := omit
+	},
+	pwr_offset := {
+		presence := CSN1_L,
+		offset := omit
+	},
+	si_2ter_ind := CSN1_L,
+	early_cm_ind := CSN1_L,
+	sched_where := {
+		presence := CSN1_L,
+		where := omit
+	},
+	gprs_ind := {
+		presence := CSN1_L,
+		ind := omit
+	},
+	umts_early_cm_ind := CSN1_L,
+	si2_quater_ind := {
+		presence := CSN1_L,
+		ind := omit
+	},
+	iu_mode_ind := omit,
+	si21_ind := {
+		presence := CSN1_L,
+		pos := omit
+	}
+}
+
+template (value) SI4RestOctets ts_SI4RestOctets := {
+	sel_params := {
+		presence := CSN1_L,
+		params := omit
+	},
+	pwr_offset := {
+		presence := CSN1_L,
+		offset := omit
+	},
+	gprs_ind := {
+		presence := CSN1_L,
+		ind := omit
+	},
+	s_presence := CSN1_L,
+	s := omit
+}
+
+
 } with { encode "RAW"; variant "FIELDORDER(msb)" }
diff --git a/library/Osmocom_Types.ttcn b/library/Osmocom_Types.ttcn
index 3b2ca17..16395df 100644
--- a/library/Osmocom_Types.ttcn
+++ b/library/Osmocom_Types.ttcn
@@ -40,6 +40,10 @@
 	const uint16_t c_UINT16_MAX := 65535;
 	const uint32_t c_UINT32_MAX := 4294967295;
 
+	/* CSN.1 L/H placeholders */
+	const BIT1 CSN1_L := '0'B;
+	const BIT1 CSN1_H := '1'B;
+
 	type record Arfcn {
 		boolean		pcs,
 		uint15_t	arfcn