library/GSM_RR_Types: add minimalistic HandoverCommand

Similar to [1], the existing implementation [2] is unfriendly
to use, so let's work this around by defining a minimalistic
implementation of (RR) Handover Command.

[1] If1a5244a688abed6e6de2bf3f6e19e0e28129ea5
[2] titan.ProtocolModules.MobileL3_v13.4.0
    MobileL3_RRM_Types.PDU_RRM_HandoverCommand_NW_MS

Change-Id: I08e6d33a725f99e2c92f93153b2369c4c764c012
Related: SYS#4868, OS#4545
diff --git a/library/GSM_RR_Types.ttcn b/library/GSM_RR_Types.ttcn
index c2c9d1b..2cb50bc 100644
--- a/library/GSM_RR_Types.ttcn
+++ b/library/GSM_RR_Types.ttcn
@@ -694,6 +694,36 @@
 		)"
 	};
 
+	/* 3GPP TS 44.018, section 9.1.15 (minimalistic implementation) */
+	type record HandoverCommand {
+		CellDescriptionV		cell_desc,
+		ChannelDescription		chan_desc,
+		OCT1				ho_ref,
+		PowerCommandAndAccesstype_V	power_cmd_acc_type,
+		FrequencyList_TLV		freq_list_at optional,
+		CellChannelDescription_TV	cell_chan_desc optional,
+		ChannelMode_TV			chan1_mode optional,
+		ChannelMode_TV			chan2_mode optional,
+		/* TODO: Mode of Channel Set 3..8 IE */
+		MobileAllocationTLV		mobile_allocation optional
+		/* TODO: more optional IEs... */
+	} with {
+		variant "TAG(
+			freq_list_at,		elementIdentifier = '05'O;
+			cell_chan_desc,		elementIdentifier = '62'O;
+			chan1_mode,		elementIdentifier = '63'O;
+			chan2_mode,		elementIdentifier = '11'O;
+			mobile_allocation,	iei = '72'O;
+		)"
+	};
+
+	/* 10.5.2.2 Cell Description IE */
+	type record CellDescriptionV {
+		uint3_t				bcc, /* PLMN colour code */
+		uint3_t				ncc, /* BS colour code */
+		uint10_t			bcch_arfcn
+	} with { variant "FIELDORDER(lsb)" };
+
 
 	/* 9.1.18 */
 	type record ImmediateAssignment {
@@ -853,6 +883,7 @@
 		PagingResponse		paging_response,
 		MeasurementReport	meas_rep,
 		AssignmentCommand	ass_cmd,
+		HandoverCommand		ho_cmd,
 		octetstring		other
 	};
 
@@ -863,6 +894,7 @@
 				paging_response, header.message_type = PAGING_RESPONSE;
 				meas_rep, header.message_type = MEASUREMENT_REPORT;
 				ass_cmd, header.message_type = ASSIGNMENT_COMMAND;
+				ho_cmd, header.message_type = HANDOVER_COMMAND;
 				other, OTHERWISE;
 		)" }