msc: introduce USSD helper functions

Change-Id: Ic528b968a9bc7c12e8395364e895400aa016c8f5
diff --git a/msc/USSD_Helpers.ttcn b/msc/USSD_Helpers.ttcn
new file mode 100644
index 0000000..6a71681
--- /dev/null
+++ b/msc/USSD_Helpers.ttcn
@@ -0,0 +1,63 @@
+module USSD_Helpers {
+
+/* USSD helpers for composing messages, building on top
+ * of both L3_Templates and USSD_Templates.
+ *
+ * (C) 2018 by Vadim Yanitskiy <axilirator@gmail.com>
+ * All rights reserved.
+ *
+ * Released under the terms of GNU General Public License, Version 2 or
+ * (at your option) any later version.
+ */
+
+import from General_Types all;
+import from TCCEncoding_Functions all;
+
+import from SS_Templates all;
+import from SS_Types all;
+
+function f_USSD_FACILITY_IE_INVOKE(
+	integer invoke_id := 1,
+	SS_Op_Code op_code := SS_OP_CODE_PROCESS_USS_REQ,
+	charstring ussd_string := "*#100#"
+) return octetstring {
+	var SS_FacilityInformation facility_ie;
+	var octetstring ussd_string_enc;
+
+	/* Encode input string with GSM 7-bit encoding */
+	ussd_string_enc := f_encGSM7bit(ussd_string);
+
+	/* Encode Facility IE */
+	facility_ie := valueof(ts_SS_USSD_FACILITY_INVOKE(
+		invoke_id := invoke_id,
+		op_code := op_code,
+		ussd_dcs := SS_USSD_DEFAULT_DCS,
+		ussd_string := ussd_string_enc
+	));
+
+	return enc_SS_FacilityInformation(facility_ie);
+}
+
+function f_USSD_FACILITY_IE_RETURN_RESULT(
+	integer invoke_id := 1,
+	SS_Op_Code op_code := SS_OP_CODE_PROCESS_USS_REQ,
+	charstring ussd_string := "Lorem Ipsum"
+) return octetstring {
+	var SS_FacilityInformation facility_ie;
+	var octetstring ussd_string_enc;
+
+	/* Encode input string with GSM 7-bit encoding */
+	ussd_string_enc := f_encGSM7bit(ussd_string);
+
+	/* Encode Facility IE */
+	facility_ie := valueof(ts_SS_USSD_FACILITY_RETURN_RESULT(
+		invoke_id := invoke_id,
+		op_code := op_code,
+		ussd_dcs := SS_USSD_DEFAULT_DCS,
+		ussd_string := ussd_string_enc
+	));
+
+	return enc_SS_FacilityInformation(facility_ie);
+}
+
+}