rsl: Add SMSCB related RSL types / templates

Change-Id: I203e72a203ffa7538aadc7b96e1ae7e21956c160
diff --git a/library/RSL_Types.ttcn b/library/RSL_Types.ttcn
index 95a7b1f..7992132 100644
--- a/library/RSL_Types.ttcn
+++ b/library/RSL_Types.ttcn
@@ -577,6 +577,28 @@
 		RSL_ChanNeeded	chan_needed
 	}
 
+	/* 9.3.41 CB Command Type */
+	type enumerated RSL_CbCommand {
+		RSL_CB_CMD_NORMAL	('0000'B),
+		RSL_CB_CMD_SCHEDULE	('1000'B),
+		RSL_CB_CMD_DEFAULT	('1110'B),
+		RSL_CB_CMD_NULL		('1111'B)
+	} with { variant "FIELDLENGTH(4)" };
+	type record RSL_IE_CbCommandType {
+		RSL_CbCommand	command,
+		boolean		default_bcast_null,
+		BIT1		spare,
+		uint2_t		last_block
+	};
+	template (value) RSL_IE_CbCommandType ts_RSL_IE_CbCmdType(RSL_CbCommand cmd := RSL_CB_CMD_NORMAL,
+								  uint2_t last_block := 1,
+								  boolean def_bcast_null := true) := {
+		command := cmd,
+		default_bcast_null := def_bcast_null,
+		spare := '0'B,
+		last_block := last_block
+	}
+
 	/* 9.3.53 */
 	type record RSL_IE_MultirateCtrl {
 		uint3_t		spare,
@@ -678,6 +700,9 @@
 		uint16_t		paging_load,
 		uint8_t			paging_group,
 		RSL_IE_ChanNeeded	chan_needed,
+		RSL_IE_CbCommandType	cb_cmd_type,
+		RSL_LV			smscb_message,
+
 		RSL_IE_StartingTime	starting_time,
 		RSL_IE_EncryptionInfo	encr_info,
 		RSL_IE_RequestRef	req_ref,
@@ -726,6 +751,8 @@
 					paging_load, iei = RSL_IE_PAGING_LOAD;
 					paging_group, iei = RSL_IE_PAGING_GROUP;
 					chan_needed, iei = RSL_IE_CHAN_NEEDED;
+					cb_cmd_type, iei = RSL_IE_CB_CMD_TYPE;
+					smscb_message, iei = RSL_IE_SMSCB_MSG;
 					starting_time, iei = RSL_IE_STARTNG_TIME;
 					encr_info, iei = RSL_IE_ENCR_INFO;
 
@@ -1467,6 +1494,33 @@
 		ies := *
 	}
 
+	/* 8.5.8 BTS <- BSC SMS BROADCAST COMMAND */
+	template RSL_Message tr_RSL_SMSCB_CMD(template RSL_IE_CbCommandType cb_cmd := ?,
+					      template octetstring msg := ?,
+					      template RslChannelNr chan_nr := ?) := {
+		msg_disc := tr_RSL_MsgDisc(RSL_MDISC_CCHAN, false),
+		msg_type := RSL_MT_SMS_BC_CMD,
+		ies := {
+			tr_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
+			tr_RSL_IE(RSL_IE_Body:{cb_cmd_type := cb_cmd}),
+			tr_RSL_IE(RSL_IE_Body:{smscb_message := tr_RSL_LV(msg)}),
+			*
+		}
+	}
+	template (value) RSL_Message ts_RSL_SMSCB_CMD(template (value) RSL_IE_CbCommandType cb_cmd,
+						      template (value) octetstring msg,
+						      template (value) RslChannelNr chan_nr :=
+									ts_RslChanNr_SDCCH4(0, 2)) := {
+		msg_disc := ts_RSL_MsgDisc(RSL_MDISC_CCHAN, false),
+		msg_type := RSL_MT_SMS_BC_CMD,
+		ies := {
+			t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+			t_RSL_IE(RSL_IE_CB_CMD_TYPE, RSL_IE_Body:{cb_cmd_type := cb_cmd}),
+			t_RSL_IE(RSL_IE_SMSCB_MSG, RSL_IE_Body:{smscb_message := ts_RSL_LV(msg)})
+			/* optional channel type for extended CBCH */
+		}
+	}
+
 	/* 8.6.2 BTS <- BSC */
 	template (value) RSL_Message ts_RSL_SACCH_FILL(RSL_IE_SysinfoType si_type, octetstring l3_info) := {
 		msg_disc := ts_RSL_MsgDisc(RSL_MDISC_TRX_MGMT, false),