module LLC_Templates {

import from LLC_Types all;
import from Osmocom_Types all;
import from General_Types all;

template Address_field t_LLC_Addr(template BIT4 sapi, template BIT1 cr, template BIT1 pd := '0'B) := {
	sAPI := sapi,
	spare := '00'B,
	cR := cr,
	pD := '0'B
}
template (value) Address_field ts_LLC_Addr(template (value) BIT4 sapi,
					   template (value) BIT1 cr,
					   template (value) BIT1 pd := '0'B) := {
	sAPI := sapi,
	spare := '00'B,
	cR := cr,
	pD := '0'B
}

template (value) Control_field_UI ts_LLC_CtrlUI(uint9_t n_u, boolean encrypted := false,
					boolean protected := false) := {
	format := '110'B,
	spare := '00'B,
	nU := n_u,
	e := bool2bit(encrypted),
	pM := bool2bit(protected)
}

template (value) Control_field_U ts_LLC_CtrlU(template (value) BIT4 m_bits, template (value) BIT1 p_f) := {
	mBits := m_bits,
	pF := p_f,
	format := '111'B
}

template Control_field_UI tr_LLC_CtrlUI(template uint9_t n_u,
					template boolean encrypted := ?,
					template boolean protected := ?) := {
	format := '110'B,
	spare := '00'B,
	nU := n_u,
	e := bool2bit_tmpl(encrypted),
	pM := bool2bit_tmpl(protected)
}

template Control_field_U tr_LLC_CtrlU(template BIT4 m_bits := ?,
					template BIT1 p_f := ?) := {
	mBits := m_bits,
	pF := p_f,
	format := '111'B
}


template PDU_LLC ts_LLC_UI(octetstring payload, BIT4 sapi, BIT1 cr, uint9_t n_u,
			   boolean encrypted := false, boolean protected := false) := {
	pDU_LLC_UI := {
		address_field := ts_LLC_Addr(sapi, cr),
		control_field := ts_LLC_CtrlUI(n_u, encrypted, protected),
		information_field_UI := payload,
		fCS := omit /* causes encoder to generate FCS */
	}
}

template PDU_LLC tr_LLC_UI(template octetstring payload := ?, template BIT4 sapi := ?,
			   template BIT1 cr := ?, template uint9_t n_u := ?,
			   template boolean encrypted := ?, template boolean protected := ?) := {
	pDU_LLC_UI := {
		address_field := t_LLC_Addr(sapi, cr),
		control_field := tr_LLC_CtrlUI(n_u, encrypted, protected),
		information_field_UI := payload,
		fCS := '000000'O /* provided by decoder if FCS OK */
	}
}

template PDU_LLC tr_LLC_XID(template XID_Information xid, template BIT4 sapi := ?,
			    template BIT1 cr := ?, template BIT1 p_f := ?) := {
	pDU_LLC_U := {
		address_field := t_LLC_Addr(sapi, cr),
		control_field := tr_LLC_CtrlU('1011'B, p_f),
		information_field_U := {
			xID := xid
		},
		fCS := '000000'O /* provided by decoder if FCS OK */
	}
}
template PDU_LLC tr_LLC_XID_MO_CMD(template XID_Information xid, template BIT4 sapi) :=
	tr_LLC_XID(xid, sapi, LLC_CR_UL_CMD, '1'B);
template PDU_LLC tr_LLC_XID_MO_RSP(template XID_Information xid, template BIT4 sapi) :=
	tr_LLC_XID(xid, sapi, LLC_CR_UL_RSP, '1'B);
template PDU_LLC tr_LLC_XID_MT_CMD(template XID_Information xid, template BIT4 sapi) :=
	tr_LLC_XID(xid, sapi, LLC_CR_DL_CMD, '1'B);
template PDU_LLC tr_LLC_XID_MT_RSP(template XID_Information xid, template BIT4 sapi) :=
	tr_LLC_XID(xid, sapi, LLC_CR_DL_RSP, '1'B);
template (value) PDU_LLC ts_LLC_XID(template (value) XID_Information xid,
				    template (value) BIT4 sapi,
				    template (value) BIT1 cr,
				    template (value) BIT1 p_f) := {
	pDU_LLC_U := {
		address_field := ts_LLC_Addr(sapi, cr),
		control_field := ts_LLC_CtrlU('1011'B, p_f),
		information_field_U := {
			xID := xid
		},
		fCS := omit /* causes encoder to generate FCS */
	}
}

template (value) PDU_LLC ts_LLC_XID_MO_CMD(template (value) XID_Information xid, template (value) BIT4 sapi) :=
	ts_LLC_XID(xid, sapi, LLC_CR_UL_CMD, '1'B);
template (value) PDU_LLC ts_LLC_XID_MO_RSP(template (value) XID_Information xid, template (value) BIT4 sapi) :=
	ts_LLC_XID(xid, sapi, LLC_CR_UL_RSP, '1'B);
template (value) PDU_LLC ts_LLC_XID_MT_CMD(template (value) XID_Information xid, template (value) BIT4 sapi) :=
	ts_LLC_XID(xid, sapi, LLC_CR_DL_CMD, '1'B);
template (value) PDU_LLC ts_LLC_XID_MT_RSP(template (value) XID_Information xid, template (value) BIT4 sapi) :=
	ts_LLC_XID(xid, sapi, LLC_CR_DL_RSP, '1'B);


template PDU_LLC tr_LLC_U(template BIT4 m_bits, template BIT1 p_f, template Information_field_U u,
			  template BIT4 sapi, template BIT1 cr) := {
	pDU_LLC_U := {
		address_field := t_LLC_Addr(sapi, cr),
		control_field := tr_LLC_CtrlU(m_bits, p_f),
		information_field_U := u,
		fCS := '000000'O /* provided by decoder if FCS OK */
	}
}
template (value) PDU_LLC ts_LLC_U(template (value) BIT4 m_bits, template (value) BIT1 p_f,
				  template (value) Information_field_U u,
				  template (value) BIT4 sapi, template (value) BIT1 cr) := {
	pDU_LLC_U := {
		address_field := ts_LLC_Addr(sapi, cr),
		control_field := ts_LLC_CtrlU(m_bits, p_f),
		information_field_U := u,
		fCS := omit /* causes encoder to generate FCS */
	}
}

template PDU_LLC tr_LLC_SABM(template SABM_Information sabm_xid, template BIT1 p_f,
			     template BIT4 sapi, template BIT1 cr) :=
	tr_LLC_U('0111'B, p_f, Information_field_U:{sABM := sabm_xid}, sapi, cr);
template (value) PDU_LLC ts_LLC_SABM(template (value) SABM_Information sabm_xid,
				     template (value) BIT1 p_f,
				     template (value) BIT4 sapi, template (value) BIT1 cr) :=
	ts_LLC_U('0111'B, p_f, Information_field_U:{sABM := sabm_xid}, sapi, cr);

template PDU_LLC tr_LLC_UA(template UA_Information ua_xid, template BIT1 p_f,
			   template BIT4 sapi, template BIT1 cr) :=
	tr_LLC_U('0110'B, p_f, Information_field_U:{uA := ua_xid}, sapi, cr);
template (value) PDU_LLC ts_LLC_UA(template (value) UA_Information ua_xid,
				   template (value) BIT1 p_f,
				   template (value) BIT4 sapi, template (value) BIT1 cr) :=
	ts_LLC_U('0110'B, p_f, Information_field_U:{uA := ua_xid}, sapi, cr);

template PDU_LLC tr_LLC_FRMR(template FRMR_Information frmr, template BIT1 p_f,
			     template BIT4 sapi, template BIT1 cr) :=
	tr_LLC_U('1000'B, p_f, Information_field_U:{fRMR := frmr}, sapi, cr);
template (value) PDU_LLC ts_LLC_FRMR(template (value) FRMR_Information frmr,
				     template (value) BIT1 p_f,
				     template (value) BIT4 sapi, template (value) BIT1 cr) :=
	ts_LLC_U('1000'B, p_f, Information_field_U:{fRMR := frmr}, sapi, cr);

template PDU_LLC tr_LLC_DM(template BIT1 p_f, template BIT4 sapi, template BIT1 cr) :=
	tr_LLC_U('0001'B, p_f, Information_field_U:{dM := ''O}, sapi, cr);
template (value) PDU_LLC ts_LLC_DM(template (value) BIT1 p_f, template (value) BIT4 sapi,
				   template (value) BIT1 cr) :=
	ts_LLC_U('0001'B, p_f, Information_field_U:{dM := ''O}, sapi, cr);

template PDU_LLC tr_LLC_NULL(template BIT1 p_f, template BIT4 sapi, template BIT1 cr) :=
	tr_LLC_U('0000'B, p_f, Information_field_U:{nULL := ''O}, sapi, cr);
template (value) PDU_LLC ts_LLC_NULL(template (value) BIT1 p_f, template (value) BIT4 sapi,
				     template (value) BIT1 cr) :=
	ts_LLC_U('0000'B, p_f, Information_field_U:{nULL := ''O}, sapi, cr);

template PDU_LLC tr_LLC_DISC(template BIT1 p_f, template BIT4 sapi, template BIT1 cr) :=
	tr_LLC_U('0100'B, p_f, Information_field_U:{dISC := ''O}, sapi, cr);
template (value) PDU_LLC ts_LLC_DISC(template (value) BIT1 p_f, template (value) BIT4 sapi,
				     template (value) BIT1 cr) :=
	ts_LLC_U('0100'B, p_f, Information_field_U:{dISC := ''O}, sapi, cr);


const BIT4 c_LLC_SAPI_LLGMM := '0001'B;
const BIT4 c_LLC_SAPI_TOM2 := '0010'B;
const BIT4 c_LLC_SAPI_LL3 := '0011'B;
const BIT4 c_LLC_SAPI_LL5 := '0101'B;
const BIT4 c_LLC_SAPI_LLSMS := '0111'B;
const BIT4 c_LLC_SAPI_TOM8 := '1000'B;
const BIT4 c_LLC_SAPI_LL9 := '1001'B;
const BIT4 c_LLC_SAPI_LL11 := '1011'B;

const BIT1 LLC_CR_DL_CMD := '1'B;
const BIT1 LLC_CR_DL_RSP := '0'B;
const BIT1 LLC_CR_UL_CMD := '0'B;
const BIT1 LLC_CR_UL_RSP := '1'B;

/* LLC UI frame with SAPI for L3 payload */
template PDU_LLC tr_LLC_UI_L3 := ( tr_LLC_UI(?, c_LLC_SAPI_LLGMM) );

/* LLC UI frame with SAPI for User payload */
template PDU_LLC tr_LLC_UI_USER := tr_LLC_UI(?, (c_LLC_SAPI_LL3,
						 c_LLC_SAPI_LL5,
						 c_LLC_SAPI_LL9,
						 c_LLC_SAPI_LL11)
						);


template XID tr_XID(template XID_Data xd := ?) := {
	xl := ?,
	typefield := ?,
	xID_length := ?,
	xID_Data := xd
};
template (value) XID ts_XID(template (value) BIT5 tf, template (value) XID_Data xd) := {
	xl := '0'B,
	typefield := tf,
	xID_length := {
		short_len := 0
	},
	xID_Data := xd
};

template XID tr_XID_kU(template uint8_t ku) := tr_XID({kU := ku});
template (value) XID ts_XID_kU(template (value) uint8_t ku) := ts_XID('01010'B, {kU := ku});

template XID tr_XID_kD(template uint8_t kd) := tr_XID({kD := kd});
template (value) XID ts_XID_kD(template (value) uint8_t kd) := ts_XID('01001'B, {kD := kd});

template XID tr_XID_mD(template uint15_t md) := tr_XID({mD := {spare := '0'B, mDValue := md}});
template (value) XID ts_XID_mD(template (value) uint15_t md) := ts_XID('00111'B, {mD := { spare := '0'B, mDValue := md}});

template XID tr_XID_mU(template uint15_t mu) := tr_XID({mU := {spare := '0'B, mUValue := mu}});
template (value) XID ts_XID_mU(template (value) uint15_t mu) := ts_XID('01000'B, {mU := { spare := '0'B, mUValue := mu}});

template XID tr_XID_N201I(template uint11_t n201i) :=
	tr_XID({n201_I := {spare := '00000'B, n201IValue := n201i}});
template (value) XID ts_XID_N201I(template (value) uint11_t n201i) :=
	ts_XID('00110'B, {n201_I := { spare := '00000'B, n201IValue := n201i}});

template XID tr_XID_N201U(template uint11_t n201u) :=
	tr_XID({n201_U := {spare := '00000'B, n201UValue := n201u}});
template (value) XID ts_XID_N201U(template (value) uint11_t n201u) :=
	ts_XID('00101'B, {n201_U := { spare := '00000'B, n201UValue := n201u}});

template XID tr_XID_N200(template uint4_t n200) :=
	tr_XID({n200 := { retransmissions := n200, spare := '0000'B}});
template (value) XID ts_XID_N200(template (value) uint4_t n200) :=
	ts_XID('00100'B, {n200 := { retransmissions := n200, spare := '0000'B}});

template XID tr_XID_T200(template uint12_t t200) :=
	tr_XID({t200 := { spare := '0000'B, t200Value := t200}});
template (value) XID ts_XID_T200(template (value) uint12_t t200) :=
	ts_XID('00011'B, {t200 := { spare := '0000'B, t200Value := t200}});

template XID tr_XID_version(template uint4_t v) :=
	tr_XID({version := {version_value := v, spare := '0000'B}});
template (value) XID ts_XID_version(template (value) uint4_t v) :=
	ts_XID('00000'B, {version := {version_value := v, spare := '0000'B}});

template XID tr_XID_IOV_UI(template OCT4 iov) := tr_XID({iOV_UI := iov});
template (value) XID ts_XID_IOV_UI(template (value) OCT4 iov) := ts_XID('00001'B, {iOV_UI := iov});

template XID tr_XID_IOV_I(template OCT4 iov) := tr_XID({iOV_I := iov});
template (value) XID ts_XID_IOV_I(template (value) OCT4 iov) := ts_XID('00010'B, {iOV_I := iov});

template XID tr_XID_L3(template octetstring l3) := tr_XID({l3param := l3});
template (value) XID ts_XID_L3(template (value) octetstring l3) := ts_XID('01011'B, {l3param := l3});

template XID tr_XID_RESET := tr_XID({reset := ''O});
template (value) XID ts_XID_RESET := ts_XID('01100'B, {reset := ''O});


}
