module SBC_AP_Templates {

import from General_Types all;
import from Osmocom_Types all;

import from SBC_AP_IEs all;
import from SBC_AP_Constants all;
import from SBC_AP_Containers all;
import from SBC_AP_PDU_Contents all;
import from SBC_AP_PDU_Descriptions all;

import from SBC_AP_Types all;

/* 3GPP TS 36.413 9.2.1.38 */
template (value) EUTRAN_CGI ts_SBCAP_ECGI(PLMNidentity plmn_id := '09F107'O, integer cell_id := 1) := {
	pLMNidentity := plmn_id,
	cell_ID := int2bit(cell_id, 28),
	iE_Extensions := omit
}

/* 3GPP TS 36.413 9.2.3.16 */
template (value) TAI ts_SBCAP_TAI(PLMNidentity plmn_id := '09F107'O, uint16_t tac := 1) := {
	pLMNidentity := plmn_id,
	tAC := int2oct(tac, 2),
	iE_Extensions := omit
}

/* 3GPP TS 36.413 9.2.1.54 */
template (value) CellId_Broadcast_List_Item ts_SBCAP_CellId_Broadcast_List_Item(
	template (value) EUTRAN_CGI ecgi := ts_SBCAP_ECGI()) := {
	eCGI := ecgi,
	iE_Extensions := omit
}
template (value) Broadcast_Scheduled_Area_List ts_SBCAP_Broadcast_Scheduled_Area_List(
		template (value) CellId_Broadcast_List cell_id_li := {ts_SBCAP_CellId_Broadcast_List_Item()})
:= {
	cellId_Broadcast_List := cell_id_li,
	tAI_Broadcast_List := omit,
	emergencyAreaID_Broadcast_List := omit,
	iE_Extensions := omit
}

template (value) SBC_AP_PDU
ts_SBCAP_PWS_RESTART(
			template (value) Restarted_Cell_List restart_cl,
			template (value) Global_ENB_ID global_enb_id) := {
	initiatingMessage := {
		procedureCode := id_PWS_Restart_Indication,
		criticality := reject,
		value_ := {
			PWS_Restart_Indication := {
				protocolIEs := {
					{
						id := SBC_AP_Constants.id_Restarted_Cell_List,
						criticality := reject,
						value_ := { Restarted_Cell_List := restart_cl }
					}, {
						id := SBC_AP_Constants.id_Global_ENB_ID,
						criticality := reject,
						value_ := { Global_ENB_ID := global_enb_id }
					}
					/* List of TAIs (mandatory) */
					/* List of EAIs (optional) */
				},
				protocolExtensions := omit
			}
		}
	}
}

template (value) SBC_AP_PDU
ts_SBCAP_PWS_FAILURE(
			template (value) Failed_Cell_List fail_cl,
			template (value) Global_ENB_ID global_enb_id) := {
	initiatingMessage := {
		procedureCode := id_PWS_Failure_Indication,
		criticality := reject,
		value_ := {
			PWS_Failure_Indication := {
				protocolIEs := {
					{
						id := SBC_AP_Constants.id_Failed_Cell_List,
						criticality := reject,
						value_ := { Failed_Cell_List := fail_cl }
					}, {
						id := SBC_AP_Constants.id_Global_ENB_ID,
						criticality := reject,
						value_ := { Global_ENB_ID := global_enb_id }
					}
				},
				protocolExtensions := omit
			}
		}
	}
}

/* 4.3.4.2.1 WRITE-REPLACE WARNING REQUEST */
template (value) SBC_AP_PDU
ts_SBCAP_WRITE_WARNING(template (value) BIT16 p_msg_id, template (value) BIT16 p_ser_nr,
		       template (value) uint12_t p_rep_per, template (value) uint16_t p_num_bcast,
		       template (value) OCT2 p_w_type, OCT1 p_dcs,
		       template (value) octetstring p_msg_content) := {
	initiatingMessage := {
		procedureCode := id_Write_Replace_Warning,
		criticality := reject,
		value_ := {
			write_Replace_Warning_Request := {
				protocolIEs := {
					{
						id := SBC_AP_Constants.id_Message_Identifier,
						criticality := reject,
						value_ := { Message_Identifier := p_msg_id }
					}, {
						id := SBC_AP_Constants.id_Serial_Number,
						criticality := reject,
						value_ := { Serial_Number := p_ser_nr }
						/* List of TAIs */
						/* Warning Area List */
					}, {
						id := SBC_AP_Constants.id_Repetition_Period,
						criticality := reject,
						value_ := { Repetition_Period := p_rep_per }
						/* Extended Repetition Period */
					}, {
						id := SBC_AP_Constants.id_Number_of_Broadcasts_Requested,
						criticality := reject,
						value_ := { Number_of_Broadcasts_Requested := p_num_bcast }
					}, {
						id := SBC_AP_Constants.id_Warning_Type,
						criticality := ignore,
						value_ := { Warning_Type := p_w_type }
					}, {
						/* Warning Security Info */
						/* Data Coding Scheme */
						id := SBC_AP_Constants.id_Data_Coding_Scheme,
						criticality := ignore,
						value_ := { Data_Coding_Scheme := oct2bit(p_dcs) }
					}, {
						/* Warning Message Content */
						id := SBC_AP_Constants.id_Warning_Message_Content,
						criticality := ignore,
						value_ := { Warning_Message_Content := p_msg_content }
					}
						/* OMC ID */
						/* Concurrent Warning Message Indicator */
						/* Send Write Replace Warning Indication */
						/* Global eNB ID */
						/* Warning Area Coordinates */
				},
				protocolExtensions := omit
			}
		}
	}
}

template (present) SBC_AP_PDU
tr_SBCAP_WRITE_WARNING(template (present) BIT16 p_msg_id, template (present) BIT16 p_ser_nr,
		       template (present) uint12_t p_rep_per,
		       template (present) uint16_t p_num_bcast,
		       template (present) BIT8 dcs := ?,
		       template (present) octetstring p_msg_content := ?,
		       template (present) Send_Write_Replace_Warning_Indication send_ind := ?,
		       template (present) Concurrent_Warning_Message_Indicator concurrent_ind := ?
		       ) := {
	initiatingMessage := {
		procedureCode := id_Write_Replace_Warning,
		criticality := reject,
		value_ := {
			write_Replace_Warning_Request := {
				protocolIEs := {
					{
						id := SBC_AP_Constants.id_Message_Identifier,
						criticality := reject,
						value_ := { Message_Identifier := p_msg_id }
					}, {
						id := SBC_AP_Constants.id_Serial_Number,
						criticality := reject,
						value_ := { Serial_Number := p_ser_nr }
						/* List of TAIs */
						/* Warning Area List */
					}, {
						id := SBC_AP_Constants.id_Repetition_Period,
						criticality := reject,
						value_ := { Repetition_Period := p_rep_per }
						/* Extended Repetition Period */
					}, {
						id := SBC_AP_Constants.id_Number_of_Broadcasts_Requested,
						criticality := reject,
						value_ := { Number_of_Broadcasts_Requested := p_num_bcast }
					}/*, {
						id := SBC_AP_Constants.id_Warning_Type,
						criticality := ignore,
						value_ := { Warning_Type := warn_type }
					}, {
						id := SBC_AP_Constants.id_Warning_Security_Information,
						criticality := reject,
						value_ := { Warning_Security_Information := ? }
					}*/, {
						id := SBC_AP_Constants.id_Data_Coding_Scheme,
						criticality := ignore,
						value_ := { Data_Coding_Scheme := dcs }
					}, {
						/* Warning Message Content */
						id := SBC_AP_Constants.id_Warning_Message_Content,
						criticality := ignore,
						value_ := { Warning_Message_Content := p_msg_content }
						/* OMC ID */
						/* Concurrent Warning Message Indicator */
					}, {
						id := SBC_AP_Constants.id_Concurrent_Warning_Message_Indicator,
						criticality := reject,
						value_ := { Concurrent_Warning_Message_Indicator := concurrent_ind }
					}, {
						id := SBC_AP_Constants.id_Send_Write_Replace_Warning_Indication,
						criticality := ignore,
						value_ := { Send_Write_Replace_Warning_Indication := send_ind }
					}
						/* Global eNB ID */
						/* Warning Area Coordinates */
				},
				protocolExtensions := omit
			}
		}
	}
}

/* 4.3.4.2.5 WRITE REPLACE WARNING INDICATION */
template (value) SBC_AP_PDU
ts_SBCAP_WRITE_WARNING_IND(template (value) BIT16 p_msg_id, template (value) BIT16 p_ser_nr,
		       template (value) SBC_AP_Cause cause := SBC_AP_Cause_message_accepted,
		       template (value) CellId_Broadcast_List bcast_cell_id_li := {ts_SBCAP_CellId_Broadcast_List_Item()}) := {
	initiatingMessage := {
		procedureCode := id_Write_Replace_Warning_Indication,
		criticality := ignore,
		value_ := {
			write_Replace_Warning_Indication := {
				protocolIEs := {
					{
						id := SBC_AP_Constants.id_Message_Identifier,
						criticality := reject,
						value_ := { Message_Identifier := p_msg_id }
					}, {
						id := SBC_AP_Constants.id_Serial_Number,
						criticality := reject,
						value_ := { Serial_Number := p_ser_nr }
					}, {
						id := SBC_AP_Constants.id_Broadcast_Scheduled_Area_List,
						criticality := reject,
						value_ := { broadcast_Scheduled_Area_List := ts_SBCAP_Broadcast_Scheduled_Area_List(bcast_cell_id_li) }
					}
				},
				protocolExtensions := omit
			}
		}
	}
}

/* 4.3.4.2.3 STOP WARNING REQUEST */
template (value) SBC_AP_PDU
ts_SBCAP_WRITE_WARNING_RESP(template (value) BIT16 p_msg_id, template (value) BIT16 p_ser_nr,
		       template (value) SBC_AP_Cause cause := SBC_AP_Cause_message_accepted) := {
	successfulOutcome := {
		procedureCode := id_Write_Replace_Warning,
		criticality := reject,
		value_ := {
			write_Replace_Warning_Response := {
				protocolIEs := {
					{
						id := SBC_AP_Constants.id_Message_Identifier,
						criticality := reject,
						value_ := { Message_Identifier := p_msg_id }
					}, {
						id := SBC_AP_Constants.id_Serial_Number,
						criticality := reject,
						value_ := { Serial_Number := p_ser_nr }
					}, {
						id := SBC_AP_Constants.id_Cause,
						criticality := reject,
						value_ := { Cause := enum2int(valueof(cause)) }
					}
				},
				protocolExtensions := omit
			}
		}
	}
}

template (value) SBC_AP_PDU
ts_SBCAP_WRITE_WARNING_RESP_UNKNOWN_TAI(template (value) BIT16 p_msg_id, template (value) BIT16 p_ser_nr,
		       template (value) SBC_AP_Cause cause := SBC_AP_Cause_message_accepted,
		       template (value) List_of_TAIs unknown_tai_list := {{ts_SBCAP_TAI}})
modifies ts_SBCAP_WRITE_WARNING_RESP := {
	successfulOutcome := {
		value_ := {
			write_Replace_Warning_Response := {
				protocolIEs := {
					{
						id := SBC_AP_Constants.id_Message_Identifier,
						criticality := reject,
						value_ := { Message_Identifier := p_msg_id }
					}, {
						id := SBC_AP_Constants.id_Serial_Number,
						criticality := reject,
						value_ := { Serial_Number := p_ser_nr }
					}, {
						id := SBC_AP_Constants.id_Cause,
						criticality := reject,
						value_ := { Cause := enum2int(valueof(cause)) }
					}, {
						id := SBC_AP_Constants.id_Unknown_Tracking_Area_List,
						criticality := ignore,
						value_ := { List_of_TAIs := unknown_tai_list }
					}
				}
			}
		}
	}
}

template (present) SBC_AP_PDU
tr_SBCAP_STOP_WARNING(template (present) BIT16 p_msg_id, template (present) BIT16 p_ser_nr) := {
	initiatingMessage := {
		procedureCode := id_Stop_Warning,
		criticality := reject,
		value_ := {
			stop_Warning_Request := {
				protocolIEs := {
					{
						id := SBC_AP_Constants.id_Message_Identifier,
						criticality := reject,
						value_ := { Message_Identifier := p_msg_id }
					}, {
						id := SBC_AP_Constants.id_Serial_Number,
						criticality := reject,
						value_ := { Serial_Number := p_ser_nr }
						/* List of TAIs */
						/* Warning Area List */
					}
				},
				protocolExtensions := omit
			}
		}
	}
}

/* 4.3.4.2.4 STOP WARNING RESPONSE */
template (value) SBC_AP_PDU
ts_SBCAP_STOP_WARNING_RESP(template (value) BIT16 p_msg_id, template (value) BIT16 p_ser_nr,
		       template (value) SBC_AP_Cause cause := SBC_AP_Cause_message_accepted) := {
	successfulOutcome := {
		procedureCode := id_Stop_Warning,
		criticality := reject,
		value_ := {
			stop_Warning_Response := {
				protocolIEs := {
					{
						id := SBC_AP_Constants.id_Message_Identifier,
						criticality := reject,
						value_ := { Message_Identifier := p_msg_id }
					}, {
						id := SBC_AP_Constants.id_Serial_Number,
						criticality := reject,
						value_ := { Serial_Number := p_ser_nr }
					}, {
						id := SBC_AP_Constants.id_Cause,
						criticality := reject,
						value_ := { Cause := enum2int(valueof(cause)) }
					}
				},
				protocolExtensions := omit
			}
		}
	}
}

}
