diff src/g23m-gsm/alr2/alr_test/alr_dedicated_constraints.cpp @ 2:3a14ee9a9843

src/g23m-gsm: same alr2 & alr3 structure as in Selenite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 16 Oct 2020 06:29:12 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/g23m-gsm/alr2/alr_test/alr_dedicated_constraints.cpp	Fri Oct 16 06:29:12 2020 +0000
@@ -0,0 +1,1044 @@
+/*
+  +------------------------------------------------------------------------------
+  |  File:       alr_dedicated_constraints.cpp
+  +------------------------------------------------------------------------------
+  |              Copyright 2003 Texas Instruments
+  |              All rights reserved.
+  |
+  |              This file is confidential and a trade secret of Texas Instruments.
+  |              The receipt of or possession of this file does not convey
+  |              any rights to reproduce or disclose its contents or to
+  |              manufacture, use, or sell anything it may describe, in
+  |              whole, or in part, without the specific written consent of
+  |              Texas Instruments.
+  +------------------------------------------------------------------------------
+  | Purpose:     Contains test constraints for alr
+  |
+  +------------------------------------------------------------------------------
+*/
+#include "alr_constraints.h"
+
+const U16 CHLIST_14_23_69_115_FFFF_elements[5] = {
+ 	ARFCN_14,
+  ARFCN_23,
+  ARFCN_69,
+  ARFCN_115,
+  NOT_PRESENT_16BIT
+};
+T_ARRAY<U16> CHLIST_14_23_69_115_FFFF(CHLIST_14_23_69_115_FFFF_elements, SKIP_TO_END);
+
+T_start starting_time()
+{
+  T_start pstruct;
+  pstruct->v_start = 1;
+  pstruct->t1 = 11;
+  pstruct->t2 = 22;
+  pstruct->t3 = 33;
+  return pstruct;
+}
+T_starting_time s_time_mphc()
+{
+  T_starting_time pstruct;
+  pstruct->start_time_present = 1;
+  pstruct->start_time.t1=11;
+  pstruct->start_time.t2=22;
+  pstruct->start_time.t3=33;
+  return pstruct;
+}
+T_starting_time s_time_t1()
+{
+  T_starting_time pstruct;
+  pstruct->start_time_present = 1;
+  pstruct->start_time.t1 = 11;
+  pstruct->start_time.t2 = 22;
+  pstruct->start_time.t3 = 33;
+  return pstruct;
+}
+T_ch_type ch_type_tch2()
+{
+  T_ch_type pstruct;
+  pstruct->ch = 0x01;
+  pstruct->tn = 1;
+  pstruct->tsc = 0;
+  pstruct->h = 1;
+  pstruct->arfcn = 0;
+  pstruct->maio = 1;
+  pstruct->hsn = 0;
+  pstruct->ma = CHLIST_14_23_69_115_FFFF;
+  return pstruct;
+}
+T_ch_type ch_type_tch3()
+{
+  T_ch_type pstruct;
+  pstruct->ch = 0x01;
+  pstruct->tn = 3;
+  pstruct->tsc = 0;
+  pstruct->h = 1;
+  pstruct->arfcn = 0;
+  pstruct->maio = 1;
+  pstruct->hsn = 0;
+  pstruct->ma = CHLIST_14_23_69_115_FFFF;
+  return pstruct;
+}
+T_ho_param ho_param()
+{
+  T_ho_param pstruct;
+  pstruct->ho_ref = NCI_TA_OUT_OF_RANGE_OK;
+  pstruct->ho_pow = 0;
+  pstruct->ho_acc_type = 0;
+  pstruct->ho_nci = 0;
+  return pstruct;
+}
+T_ho_param ho_param_1()
+{
+  T_ho_param pstruct;
+  pstruct->ho_ref = HO_REF;
+  pstruct->ho_pow = HO_POW;
+  pstruct->ho_acc_type = 0;
+  pstruct->ho_nci = 0;
+  return pstruct;
+}
+T_tr_para tr_param()
+{
+  T_tr_para pstruct;
+  pstruct->power = 10;
+  pstruct->dtx = DTX_NOT_USED;
+  pstruct->rlt = 5;
+  pstruct->tav = 30;
+  pstruct->pwrc = PWRC_NOT_SET;
+  pstruct->mode = MODE_SPEECH_VER1;
+  return pstruct;
+}
+T_ciph ciph_param()
+{
+  const U8 CIPH_PARAM_KC[8] = {
+ 	  0,1,2,3,4,5,6,7
+  };
+
+  T_ciph pstruct;
+  pstruct->stat = STAT_CIPH_OFF;
+  pstruct->algo = ALGO_A5_1;
+  pstruct->kc = CIPH_PARAM_KC;
+  return pstruct;
+}
+T_channel_desc channel_desc_2_tch()
+{
+  T_channel_desc pstruct;
+  pstruct->chan_sel.h = 1;
+  pstruct->chan_sel.rf_channel.maio = 1;
+  pstruct->chan_sel.rf_channel.hsn = 0;
+  pstruct->channel_type = 0x01;
+  pstruct->sub_channel = 0;
+  pstruct->timeslot_no = 1;
+  pstruct->tsc = 0;
+  return pstruct;
+}
+T_channel_desc channel_desc_3_tch()
+{
+  T_channel_desc pstruct;
+  pstruct->chan_sel.h = 1;
+  pstruct->chan_sel.rf_channel.maio = 1;
+  pstruct->chan_sel.rf_channel.hsn = 0;
+  pstruct->channel_type = 0x01;
+  pstruct->sub_channel = 0;
+  pstruct->timeslot_no = 3;
+  pstruct->tsc = 0;
+  return pstruct;
+}
+T_cell_description cell_description_2()
+{
+  T_cell_description pstruct;
+  pstruct->ncc = 0;
+  pstruct->bcc = 1;
+  pstruct->bcch_carrier = 14;
+  return pstruct;
+}
+T_channel_desc channel_desc_ia()
+{
+  T_channel_desc pstruct;
+  pstruct->chan_sel.h = 1;
+  pstruct->chan_sel.rf_channel.maio = 0;
+  pstruct->chan_sel.rf_channel.hsn = 1;
+  pstruct->channel_type = CH_TCH_F;
+  pstruct->sub_channel = 0;
+  pstruct->timeslot_no = 1;
+  pstruct->tsc = 5;
+  return pstruct;
+}
+T_amr_conf s_amr_conf_4_icmi()
+{
+  T_amr_conf pstruct;
+  pstruct->nscb = NSCB;
+  pstruct->icmi = ICMI_S;
+  pstruct->st_mode = ST_MODE_1;
+  pstruct->acs = ACS_4;
+  pstruct->v_cod_prop = V_COD_PROP;
+  pstruct->c_cod_prop = C_COD_PROP_4;
+  pstruct->cod_prop[0].codec_hyst = 0x01;
+  pstruct->cod_prop[0].codec_thr  = 0x01;
+  pstruct->cod_prop[1].codec_hyst = 0x03;
+  pstruct->cod_prop[1].codec_thr  = 0x03;
+  pstruct->cod_prop[2].codec_hyst = 0x05;
+  pstruct->cod_prop[2].codec_thr  = 0x05;
+  // = sa_cod_prop_4();
+  return pstruct;
+}
+T_amr_configuration s_amr_configuration()
+{
+  T_amr_configuration pstruct;
+  pstruct->noise_suppression_control_bit = NSCB;
+  pstruct->initial_codec_mode_indicator = ICMI_S;
+  pstruct->initial_codec_mode = ST_MODE_1;
+  pstruct->active_codec_set = ACS_4;
+  pstruct->threshold [0] = 0x01;
+  pstruct->threshold [1] = 0x03;
+  pstruct->threshold [2] = 0x05;
+  pstruct->hysteresis[0] = 0x01;
+  pstruct->hysteresis[1] = 0x03;
+  pstruct->hysteresis[2] = 0x05;
+  return pstruct;
+}
+T_frequency_list freq_list_ia()
+{
+  const U16 FREQ_LIST_IA_FREQ_elements[5] = {
+ 	  26, 34, 	42, 52, 	59
+  };
+  T_ARRAY<U16> FREQ_LIST_IA_FREQ(FREQ_LIST_IA_FREQ_elements, SKIP_TO_END);
+
+  T_frequency_list pstruct;
+  pstruct->rf_chan_cnt = 5;
+  pstruct->rf_chan_no.radio_freq = FREQ_LIST_IA_FREQ;
+  return pstruct;
+}
+T_channel_desc channel_desc_fr()
+{
+  T_channel_desc pstruct;
+  pstruct->chan_sel.h = 1;
+  pstruct->chan_sel.rf_channel.maio = 1;
+  pstruct->chan_sel.rf_channel.hsn = 1;
+  pstruct->channel_type = CH_TCH_F;
+  pstruct->sub_channel = 0;
+  pstruct->timeslot_no = 1;
+  pstruct->tsc = 5;
+  return pstruct;
+}
+T_frequency_list freq_list_fr()
+{
+  const U16 CHLIST_10_52_59_73_108_114_elements[6] = {
+ 	  ARFCN_10,
+    ARFCN_52,
+    ARFCN_59,
+    ARFCN_73,
+    ARFCN_108,
+    ARFCN_114
+  };
+  T_ARRAY<U16> CHLIST_10_52_59_73_108_114(CHLIST_10_52_59_73_108_114_elements, SKIP_TO_END);
+
+  T_frequency_list pstruct;
+  pstruct->rf_chan_cnt = 6;
+  pstruct->rf_chan_no.radio_freq = CHLIST_10_52_59_73_108_114;
+  return pstruct;
+}
+
+T_PRIMITIVE_UNION mph_dedicated_req_1()
+{
+  const U16 CHLIST_0_elements[1] = {
+ 	  0x00
+  };
+  T_ARRAY<U16> CHLIST_0(CHLIST_0_elements, SKIP_TO_END);
+  T_MPH_DEDICATED_REQ prim;
+  prim->mod = MODE_IMM_ASSIGN;
+  prim->start = starting_time();
+  //   prim->ch_type = ch_type_hop();
+  prim->ch_type.ch = CH_SDCCH_8_0;
+  prim->ch_type.tn = 0;
+  prim->ch_type.tsc = 0;
+  prim->ch_type.h = 1;
+  prim->ch_type.arfcn = 0;
+  prim->ch_type.maio = 1;
+  prim->ch_type.hsn = 0;
+  prim->ch_type.ma = CHLIST_14_23_69_115_FFFF;
+  //   prim->ch_type2. = ch_type2();
+  prim->ch_type2.ch = 0x00;
+  prim->ch_type2.tn = 3;
+  prim->ch_type2.tsc = 6;
+  prim->ch_type2.h = 0;
+  prim->ch_type2.arfcn = 0;
+  prim->ch_type2.maio = 0;
+  prim->ch_type2.hsn = 0;
+  prim->ch_type2.ma = CHLIST_0;
+  prim->arfcn = ARFCN_23;
+  prim->bsic = BSIC_1;
+  prim->ho_param = ho_param();
+  prim->tr_para = tr_param();
+  prim->ciph = ciph_param();
+  prim->amr_conf._skip;
+  return prim;
+}
+T_PRIMITIVE_UNION mph_dedicated_req_2()
+{
+  T_MPH_DEDICATED_REQ prim;
+  prim->mod = MODE_ASYNC_HANDOVER;
+  prim->start._skip;
+  prim->ch_type = ch_type_tch2();
+  prim->ch_type2._skip;
+  prim->arfcn = ARFCN_14;
+  prim->bsic = BSIC_1;
+  prim->ho_param = ho_param_1();
+  prim->tr_para = tr_param();
+  prim->ciph = ciph_param();
+  prim->amr_conf._skip;
+  return prim;
+}
+T_PRIMITIVE_UNION mph_dedicated_req_3()
+{
+  const U16 CHLIST_26_34_42_52_59_FFFF_elements[6] = {
+ 	  ARFCN_26,
+    ARFCN_34,
+    ARFCN_42,
+    ARFCN_52,
+    ARFCN_59,
+    NOT_PRESENT_16BIT
+  };
+  T_ARRAY<U16> CHLIST_26_34_42_52_59_FFFF(CHLIST_26_34_42_52_59_FFFF_elements, SKIP_TO_END);
+
+  T_MPH_DEDICATED_REQ prim;
+  prim->mod = MODE_IMM_ASSIGN;
+  prim->start.v_start=0;
+  prim->start.t1._skip;
+  prim->start.t2._skip;
+  prim->start.t3._skip;
+  //   prim->ch_type. = ch_type_imm_ass();
+  prim->ch_type.ch = CH_TCH_F;
+  prim->ch_type.tn = 1;
+  prim->ch_type.tsc = 5;
+  prim->ch_type.h = H_FREQ;
+  prim->ch_type.arfcn = 0;
+  prim->ch_type.maio = 0;
+  prim->ch_type.hsn = 1;
+  prim->ch_type.ma = CHLIST_26_34_42_52_59_FFFF;
+  prim->ch_type2._skip;
+  prim->arfcn = ARFCN_14;
+  prim->bsic = BSIC_1;
+  prim->ho_param = ho_param();
+  prim->tr_para = tr_param();
+  prim->ciph = ciph_param();
+  prim->amr_conf._skip;
+  return prim;
+}
+T_PRIMITIVE_UNION mph_dedicated_req_4()
+{
+  const U16 CHLIST_73_74_75_76_FFFF_elements[5] = {
+ 	  ARFCN_73,
+	  ARFCN_74,
+	  ARFCN_75,
+	  ARFCN_76,
+    NOT_PRESENT_16BIT
+  };
+  T_ARRAY<U16> CHLIST_73_74_75_76_FFFF(CHLIST_73_74_75_76_FFFF_elements, SKIP_TO_END);
+  const U16 CHLIST_46_52_59_66_73_74_FFFF_elements[7] = {
+ 	  ARFCN_46,
+	  ARFCN_52,
+	  ARFCN_59,
+	  ARFCN_66,
+	  ARFCN_73,
+	  ARFCN_74,
+    NOT_PRESENT_16BIT
+  };
+  T_ARRAY<U16> CHLIST_46_52_59_66_73_74_FFFF(CHLIST_46_52_59_66_73_74_FFFF_elements, SKIP_TO_END);
+
+  T_MPH_DEDICATED_REQ prim;
+  prim->mod = MODE_CHAN_ASSIGN;
+  prim->start.v_start = 1;
+  prim->start.t1 = 45;
+  prim->start.t2 = 22;
+  prim->start.t3 = 33;
+  prim->ch_type.ch = CH_TCH_F;
+  prim->ch_type.tn = 0;
+  prim->ch_type.tsc = 5;
+  prim->ch_type.h = H_FREQ;
+  prim->ch_type.arfcn = 0;
+  prim->ch_type.maio = 0;
+  prim->ch_type.hsn = 1;
+  prim->ch_type.ma = CHLIST_73_74_75_76_FFFF;
+  /* before time */
+  prim->ch_type2.ch = CH_TCH_F;
+  prim->ch_type2.tn = 0;
+  prim->ch_type2.tsc = 5;
+  prim->ch_type2.h = H_FREQ;
+  prim->ch_type2.arfcn = 0;
+  prim->ch_type2.maio = 1;
+  prim->ch_type2.hsn = 7;
+  prim->ch_type2.ma = CHLIST_46_52_59_66_73_74_FFFF;
+  prim->arfcn = ARFCN_14;
+  prim->bsic = BSIC_1;
+  prim->ho_param._skip;
+  prim->tr_para = tr_param();
+  prim->ciph = ciph_param();
+  prim->amr_conf._skip;
+  return prim;
+}
+T_PRIMITIVE_UNION mph_dedicated_req_5()
+{
+  T_MPH_DEDICATED_REQ prim;
+  prim->mod = MODE_ASYNC_HANDOVER;
+  prim->start = starting_time();
+  prim->ch_type = ch_type_tch2();
+  prim->ch_type2 = ch_type_tch3();
+  prim->arfcn = ARFCN_14;
+  prim->bsic = BSIC_1;
+  prim->ho_param = ho_param_1();
+  prim->tr_para = tr_param();
+  prim->ciph = ciph_param();
+  prim->amr_conf._skip;
+  return prim;
+}
+T_PRIMITIVE_UNION mph_dedicated_req_6(CHAR variant)
+{
+  T_MPH_DEDICATED_REQ prim;
+  prim->mod = MODE_ASYNC_HANDOVER;
+  prim->start = starting_time();
+  prim->ch_type = ch_type_tch2();
+  prim->ch_type2 = ch_type_tch3();
+  if (variant == 'A') prim->arfcn = ARFCN_23;
+  if (variant == 'B') prim->arfcn = ARFCN_23;
+  if (variant == 'C') prim->arfcn = ARFCN_14;
+  if (variant == 'D') prim->arfcn = ARFCN_1;
+  if (variant == 'E') prim->arfcn = ARFCN_124;
+  prim->bsic = BSIC_1;
+  prim->ho_param = ho_param_1();
+  prim->tr_para = tr_param();
+  prim->ciph = ciph_param();
+  if (variant == 'A')   prim->amr_conf._skip;
+  if (variant == 'B')   prim->amr_conf = s_amr_conf_4_icmi();
+  if (variant == 'C')   prim->amr_conf._skip;
+  if (variant == 'D')   prim->amr_conf._skip;
+  if (variant == 'E')   prim->amr_conf._skip;
+  return prim;
+}
+
+
+
+T_PRIMITIVE_UNION mphc_immed_assign_req_1()
+{
+  T_MPHC_IMMED_ASSIGN_REQ prim;
+  //prim->channel_desc. = channel_desc_1();
+  prim->channel_desc.chan_sel.h = 1;
+  prim->channel_desc.chan_sel.rf_channel.maio = 1;
+  prim->channel_desc.chan_sel.rf_channel.hsn = 0;
+  prim->channel_desc.channel_type = 0x04;
+  prim->channel_desc.sub_channel = 0;
+  prim->channel_desc.timeslot_no = 0;
+  prim->channel_desc.tsc = 0;
+
+  prim->timing_advance = TIMING_ADVANCE;
+  prim->frequency_list = freq_list();
+  prim->starting_time = s_time_mphc();
+  prim->frequency_list_bef_sti._skip;
+  prim->maio_bef_sti._skip;
+  prim->dtx_allowed._skip;
+  prim->bcch_allocation._skip;
+  prim->ba_id._skip;
+  prim->pwrc._skip;
+  return prim;
+}
+T_PRIMITIVE_UNION mphc_immed_assign_req_2()
+{
+  T_MPHC_IMMED_ASSIGN_REQ prim;
+  prim->channel_desc = channel_desc_ia();
+  prim->timing_advance = TIMING_ADVANCE;
+  prim->frequency_list = freq_list_ia();
+  prim->starting_time.start_time_present = 0;
+  prim->starting_time.start_time._skip;
+  prim->frequency_list_bef_sti._skip;
+  prim->maio_bef_sti._skip;
+  prim->dtx_allowed._skip;
+  prim->bcch_allocation._skip;
+  prim->ba_id._skip;
+  prim->pwrc._skip;
+  return prim;
+}
+
+T_PRIMITIVE_UNION mphc_immed_assign_con_1()
+{
+  T_MPHC_IMMED_ASSIGN_CON prim;
+  prim->param._skip;
+  return prim;
+}
+
+T_PRIMITIVE_UNION mph_dedicated_cnf_1(CHAR success)
+{
+  T_MPH_DEDICATED_CNF prim;
+  prim->dedi_res = success;
+  return prim;
+}
+
+T_PRIMITIVE_UNION mphc_async_ho_req_1(U8 ho_type)
+{
+  T_MPHC_ASYNC_HO_REQ prim;
+  //prim->handover_command. = async_ho_cmd();
+  prim->handover_command.cell_description = cell_description_2();
+  prim->handover_command.channel_desc_1 = channel_desc_2_tch();
+  prim->handover_command.channel_mode_1 = MODE_SPEECH_VER1;
+  prim->handover_command.starting_time._skip;
+  prim->handover_command.ho_acc = HO_REF;
+  prim->handover_command.txpwr = HO_POW;
+  prim->handover_command.report_time_diff._skip;
+  prim->handover_command.frequency_list = freq_list();
+  prim->handover_command.channel_desc_2._skip;
+  prim->handover_command.channel_mode_2._skip;
+  prim->handover_command.frequency_list_bef_sti._skip;
+  prim->handover_command.channel_desc_1_bef_sti._skip;
+  prim->handover_command.channel_desc_2_bef_sti._skip;
+  prim->handover_command.cipher_mode._skip;
+  prim->handover_command.a5_algorithm._skip;
+
+  prim->fn_offset._skip;
+  prim->time_alignmnt._skip;
+  prim->cipher_key._skip;
+  prim->amr_configuration._skip;
+#ifdef  FF_EGPRS
+  prim->handover_type = ho_type;
+#endif  // FF_EGPRS
+  return prim;
+}
+T_PRIMITIVE_UNION mphc_async_ho_req_2()
+{
+  T_MPHC_ASYNC_HO_REQ prim;
+  //   prim->handover_command. = async_ho_cmd_2();
+  prim->handover_command.cell_description = cell_description_2();
+  prim->handover_command.channel_desc_1 = channel_desc_2_tch();
+  prim->handover_command.channel_mode_1 = MODE_SPEECH_VER1;
+  prim->handover_command.starting_time = s_time_mphc();
+  prim->handover_command.ho_acc = HO_REF;
+  prim->handover_command.txpwr = HO_POW;
+  prim->handover_command.report_time_diff._skip;
+  prim->handover_command.frequency_list = freq_list();
+  prim->handover_command.channel_desc_2._skip;
+  prim->handover_command.channel_mode_2._skip;
+  prim->handover_command.frequency_list_bef_sti = freq_list();
+  prim->handover_command.channel_desc_1_bef_sti = channel_desc_3_tch();
+  prim->handover_command.channel_desc_2_bef_sti._skip;
+  prim->handover_command.cipher_mode._skip;
+  prim->handover_command.a5_algorithm._skip;
+
+  prim->fn_offset._skip;
+  prim->time_alignmnt._skip;
+  prim->cipher_key._skip;
+  prim->amr_configuration._skip;
+#ifdef  FF_EGPRS
+  prim->handover_type = HOT_REGULAR;
+#endif  // FF_EGPRS
+  return prim;
+}
+T_PRIMITIVE_UNION mphc_async_ho_req_3(CHAR variant)
+{
+  T_MPHC_ASYNC_HO_REQ prim;
+  //prim->handover_command. = async_ho_cmd_3();
+  prim->handover_command.cell_description.ncc = 0;
+  prim->handover_command.cell_description.bcc = 1;
+  if (variant == 'A' || variant == 'B')
+    prim->handover_command.cell_description.bcch_carrier = ARFCN_23;
+  else if (variant == 'E')
+    prim->handover_command.cell_description.bcch_carrier = ARFCN_124;
+  else if (variant == 'D')
+    prim->handover_command.cell_description.bcch_carrier = ARFCN_1;
+  else
+    prim->handover_command.cell_description.bcch_carrier = ARFCN_14;
+  prim->handover_command.channel_desc_1 = channel_desc_2_tch();
+  prim->handover_command.channel_mode_1 = MODE_SPEECH_VER1;
+  prim->handover_command.starting_time = s_time_mphc();
+  prim->handover_command.ho_acc = HO_REF;
+  prim->handover_command.txpwr = HO_POW;
+  prim->handover_command.report_time_diff._skip;
+  prim->handover_command.frequency_list = freq_list();
+  prim->handover_command.channel_desc_2._skip;
+  prim->handover_command.channel_mode_2._skip;
+  prim->handover_command.frequency_list_bef_sti = freq_list();
+  prim->handover_command.channel_desc_1_bef_sti = channel_desc_3_tch();
+  prim->handover_command.channel_desc_2_bef_sti._skip;
+  prim->handover_command.cipher_mode._skip;
+  prim->handover_command.a5_algorithm._skip;
+
+  prim->fn_offset._skip;
+  prim->time_alignmnt._skip;
+  prim->cipher_key._skip;
+  if (variant == 'A')   prim->amr_configuration._skip;
+  if (variant == 'B')   prim->amr_configuration = s_amr_configuration();
+#ifdef  FF_EGPRS
+  if (variant == 'D')
+    prim->handover_type = HOT_BLIND;
+  else
+  prim->handover_type = HOT_REGULAR;
+#endif  // FF_EGPRS
+  return prim;
+}
+
+
+
+
+T_PRIMITIVE_UNION mph_freq_redef_req_1()
+{
+  const U16 CHLIST_10_52_59_73_108_114_FFFF_elements[7] = {
+ 	  ARFCN_10,
+    ARFCN_52,
+    ARFCN_59,
+    ARFCN_73,
+    ARFCN_108,
+    ARFCN_114,
+    NOT_PRESENT_16BIT
+  };
+  T_ARRAY<U16> CHLIST_10_52_59_73_108_114_FFFF(CHLIST_10_52_59_73_108_114_FFFF_elements, SKIP_TO_END);
+
+  T_MPH_FREQ_REDEF_REQ prim;
+  prim->start.v_start = 1;
+  prim->start.t1 = 11;
+  prim->start.t2 = 22;
+  prim->start.t3 = 33;
+  //   prim->ch_type. = ch_type_freq_redef();
+  prim->ch_type.ch = CH_TCH_F;
+  prim->ch_type.tn = 1;
+  prim->ch_type.tsc = 5;
+  prim->ch_type.h = H_FREQ;
+  prim->ch_type.arfcn = 0;
+  prim->ch_type.maio = 1;
+  prim->ch_type.hsn = 1;
+  prim->ch_type.ma = CHLIST_10_52_59_73_108_114_FFFF;
+  return prim;
+}
+T_PRIMITIVE_UNION mph_freq_redef_req_2()
+{
+  T_MPH_FREQ_REDEF_REQ prim;
+  prim->start = starting_time();
+  //prim->ch_type. = ch_type_sdcch4();
+  prim->ch_type.ch = CH_SDCCH_8_0;
+  prim->ch_type.tn = 4;
+  prim->ch_type.tsc = 0;
+  prim->ch_type.h = 1;
+  prim->ch_type.arfcn = 0;
+  prim->ch_type.maio = 1;
+  prim->ch_type.hsn = 0;
+  prim->ch_type.ma = CHLIST_14_23_69_115_FFFF;
+  return prim;
+}
+
+
+T_PRIMITIVE_UNION mphc_change_frequency_1()
+{
+  T_MPHC_CHANGE_FREQUENCY prim;
+  prim->channel_desc = channel_desc_fr();
+  prim->frequency_list = freq_list_fr();
+  prim->starting_time = s_time_t1();
+  return prim;
+}
+T_PRIMITIVE_UNION mphc_change_frequency_2()
+{
+  T_MPHC_CHANGE_FREQUENCY prim;
+  //prim->channel_desc. = channel_desc_4();
+  prim->channel_desc.chan_sel.h = 1;
+  prim->channel_desc.chan_sel.rf_channel.maio = 1;
+  prim->channel_desc.chan_sel.rf_channel.hsn = 0;
+  prim->channel_desc.channel_type = 0x04;
+  prim->channel_desc.sub_channel = 0;
+  prim->channel_desc.timeslot_no = 4;
+  prim->channel_desc.tsc = 0;
+
+  prim->frequency_list = freq_list();
+  prim->starting_time = s_time_mphc();
+  return prim;
+}
+
+
+T_PRIMITIVE_UNION mphc_channel_assign_req_1()
+{
+
+  T_MPHC_CHANNEL_ASSIGN_REQ prim;
+  prim->channel_desc_1.chan_sel.h = 1;
+  prim->channel_desc_1.chan_sel.rf_channel.maio = 0;
+  prim->channel_desc_1.chan_sel.rf_channel.hsn = 1;
+  prim->channel_desc_1.channel_type = CH_TCH_F;
+  prim->channel_desc_1.sub_channel = 0;
+  prim->channel_desc_1.timeslot_no = 0;
+  prim->channel_desc_1.tsc = 5;
+
+  const U16 CHLIST_73_74_75_76_elements[4] = {
+ 	  ARFCN_73,
+	  ARFCN_74,
+	  ARFCN_75,
+	  ARFCN_76
+  };
+  T_ARRAY<U16> CHLIST_73_74_75_76(CHLIST_73_74_75_76_elements, SKIP_TO_END);
+
+  prim->channel_mode_1._skip;
+  prim->txpwr = TXPWR0;
+  prim->frequency_list.rf_chan_cnt = 4;
+  prim->frequency_list.rf_chan_no.radio_freq = CHLIST_73_74_75_76;
+  prim->starting_time.start_time_present = 1;
+  prim->starting_time.start_time.t1 = 45;
+  prim->starting_time.start_time.t2 = 22;
+  prim->starting_time.start_time.t3 = 33;
+
+  const U16 CHLIST_46_52_59_66_73_74_elements[6] = {
+ 	  ARFCN_46,
+  	ARFCN_52,
+	  ARFCN_59,
+	  ARFCN_66,
+  	ARFCN_73,
+	  ARFCN_74
+  };
+  T_ARRAY<U16> CHLIST_46_52_59_66_73_74(CHLIST_46_52_59_66_73_74_elements, SKIP_TO_END);
+
+  prim->channel_desc_2._skip;
+  prim->channel_mode_2._skip;
+  prim->frequency_list_bef_sti.rf_chan_cnt = 6;
+  prim->frequency_list_bef_sti.rf_chan_no.radio_freq = CHLIST_46_52_59_66_73_74;
+  prim->channel_desc_1_bef_sti.chan_sel.h = 1;
+  prim->channel_desc_1_bef_sti.chan_sel.rf_channel.maio = 1;
+  prim->channel_desc_1_bef_sti.chan_sel.rf_channel.hsn = 7;
+  prim->channel_desc_1_bef_sti.channel_type = CH_TCH_F;
+  prim->channel_desc_1_bef_sti.sub_channel = 0;
+  prim->channel_desc_1_bef_sti.timeslot_no = 0;
+  prim->channel_desc_1_bef_sti.tsc = 5;
+
+  prim->channel_desc_2_bef_sti._skip;
+  prim->cipher_mode._skip;
+  prim->a5_algorithm._skip;
+  prim->cipher_key._skip;
+  prim->dtx_allowed._skip;
+  prim->amr_configuration._skip;
+  return prim;
+}
+T_PRIMITIVE_UNION mphc_channel_assign_req_2()
+{
+  T_MPHC_CHANNEL_ASSIGN_REQ prim;
+  prim->channel_desc_1 = channel_desc_fr();
+  prim->channel_mode_1._skip;
+  prim->txpwr = POWER_12;
+  prim->frequency_list = freq_list_fr();
+  prim->starting_time = s_time_t1();
+  prim->channel_desc_2._skip;
+  prim->channel_mode_2._skip;
+  prim->frequency_list_bef_sti = freq_list_ia();
+  prim->channel_desc_1_bef_sti = channel_desc_ia();
+  prim->channel_desc_2_bef_sti._skip;
+  prim->cipher_mode._skip;
+  prim->a5_algorithm._skip;
+  prim->cipher_key._skip;
+  prim->dtx_allowed._skip;
+  prim->amr_configuration._skip;
+  return prim;
+}
+
+T_PRIMITIVE_UNION mphc_channel_assign_con_1()
+{
+  T_MPHC_CHANNEL_ASSIGN_CON prim;
+  prim->param._skip;
+  return prim;
+}
+
+T_PRIMITIVE_UNION mph_dedicated_fail_req_1()
+{
+  T_MPH_DEDICATED_FAIL_REQ prim;
+  prim->param._skip;
+  return prim;
+}
+
+
+T_PRIMITIVE_UNION mph_dedicated_fail_cnf_1()
+{
+  T_MPH_DEDICATED_FAIL_CNF prim;
+  prim->param._skip;
+  return prim;
+}
+
+
+T_PRIMITIVE_UNION mphc_async_ho_con_1()
+{
+  T_MPHC_ASYNC_HO_CON prim;
+  prim->param._skip;
+  return prim;
+}
+
+T_PRIMITIVE_UNION mphc_handover_finished_1(CHAR success)
+{
+  T_MPHC_HANDOVER_FINISHED prim;
+  prim->cause = success;
+#ifdef  FF_EGPRS
+  /*valid only for BHO*/
+  prim->fn_offset = FN_OFF_ARFCN_1;
+  prim->time_alignment = TIME_ALIGNMT_1;
+#endif  // FF_EGPRS
+  return prim;
+}
+
+T_PRIMITIVE_UNION mphc_handover_fail_req_1()
+{
+  T_MPHC_HANDOVER_FAIL_REQ prim;
+  prim->param._skip;
+  return prim;
+}
+
+T_PRIMITIVE_UNION mphc_handover_fail_con_1()
+{
+  T_MPHC_HANDOVER_FAIL_CON prim;
+  prim->param._skip;
+  return prim;
+}
+
+T_PRIMITIVE_UNION mphc_change_frequency_con_1()
+{
+  T_MPHC_CHANGE_FREQUENCY_CON prim;
+  prim->param._skip;
+  return prim;
+}
+
+T_RADIO_FRAME copy_array_to_l2_frame(U8 ch_type, const U8 const array[])
+{
+  T_RADIO_FRAME l2_frame;
+  U16   sdu_len = (array[0] + (array[1] << 8)) >> 3;  /* sdu length in bytes */
+  U8    l2_header_off = (ch_type == L2_CHANNEL_SACCH) ? 6 : 4;
+  U8    l2_len = array[l2_header_off+2] >> 2;  /* length in bytes from l2 header */
+
+  tdc_usi_trace ("copy_array_to_l2_frame(): sdu_len=%u l2_len=%u", sdu_len, l2_len);
+  /*
+   * Due to the incorrect SDU lengths in some message sdu“s, we use the length
+   * indicator field of the layer 2 header instead. The remain of the
+   * information will be filled with fill bytes. Please note the layer 1 header
+   * in frames on SACCH.
+   */
+  l2_len += 3/*l2 header*/ + (l2_header_off-4)/*l1 header*/;
+  for (int i = 0; i < l2_len;i++) /* without sdu length and sdu offset */
+  {
+    l2_frame->A[i] = array[i+4];
+  }
+  for (; i < 23; i++)
+  {
+    l2_frame->A[i] = 0x2b;       /* fill bytes */
+  }
+
+  return l2_frame;
+}
+
+T_PRIMITIVE_UNION ph_data_ind_1()
+{
+  const U8 I_SMS[27] = {
+    0xA8, 0x00,
+    0x10, 0x00,
+    0xFF, 0xAA,
+    0x0F,
+    0x02,
+    0x19,
+    0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
+    0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B,
+    0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B
+  };
+  T_PH_DATA_IND prim;
+
+  prim->rf_chan_num._skip;
+  prim->l2_channel_type= L2_CHANNEL_SACCH;
+  prim->l2_frame = copy_array_to_l2_frame (L2_CHANNEL_SACCH, I_SMS);
+  prim->error_cause = VALID_BLOCK;
+  prim->bsic._skip;
+  prim->tc._skip;
+
+  return prim;
+}
+
+T_PRIMITIVE_UNION mph_channel_mode_req_1()
+{
+  T_MPH_CHANNEL_MODE_REQ prim;
+  prim->mode = CHANNEL_MODE_AMR;
+  prim->ch = CHANNEL_0;
+  prim->amr_conf = s_amr_conf_4_icmi();
+  return prim;
+}
+
+T_PRIMITIVE_UNION mphc_channel_mode_modify_req_1()
+{
+  T_MPHC_CHANNEL_MODE_MODIFY_REQ prim;
+  prim->sub_channel = CHANNEL_0;
+  prim->channel_mode = CHM_AHS;
+  prim->amr_configuration = s_amr_configuration();
+  return prim;
+}
+
+T_PRIMITIVE_UNION mphc_channel_mode_modify_con_1()
+{
+  T_MPHC_CHANNEL_MODE_MODIFY_CON prim;
+  prim->param._skip;
+  return prim;
+}
+T_PRIMITIVE_UNION mphc_stop_dedicated_req()
+{
+  T_MPHC_STOP_DEDICATED_REQ prim;
+  prim->param._skip;
+  return prim;
+}
+T_PRIMITIVE_UNION mphc_stop_dedicated_con()
+{
+  T_MPHC_STOP_DEDICATED_CON prim;
+  prim->param._skip;
+  return prim;
+}
+T_PRIMITIVE_UNION mph_stop_dedicated_req()
+{
+  T_MPH_STOP_DEDICATED_REQ prim;
+  prim->param._skip;
+  return prim;
+}
+T_PRIMITIVE_UNION mph_stop_dedicated_cnf()
+{
+  T_MPH_STOP_DEDICATED_CNF prim;
+  prim->param._skip;
+  return prim;
+}
+T_PRIMITIVE_UNION mph_dedicated_req_2g()
+{
+   T_MPH_DEDICATED_REQ prim;
+   prim->mod = MODE_PDCH_ASSIGN;
+   prim->start._skip;
+   prim->ch_type._skip;
+   prim->ch_type2._skip;
+   prim->arfcn._skip;
+   prim->bsic._skip;
+   prim->ho_param._skip;
+   prim->tr_para._skip;
+   prim->ciph._skip;
+   prim->amr_conf._skip;
+   return prim;
+}
+T_PRIMITIVE_UNION mph_dedicated_fail_req_1g()
+{
+   T_MPH_DEDICATED_FAIL_REQ prim;
+   prim->param._skip;
+   return prim;
+}
+#if 0
+T_PRIMITIVE_UNION mphc_immed_assign_req_2g()
+{
+   T_MPHC_IMMED_ASSIGN_REQ prim;
+   prim->channel_desc = channel_desc_1();
+   prim->timing_advance = TIMING_ADVANCE;
+   prim->frequency_list = freq_list();
+   prim->starting_time._skip;
+   prim->frequency_list_bef_sti._skip;
+   prim->maio_bef_sti._skip;
+   prim->dtx_allowed._skip;
+   prim->bcch_allocation._skip;
+   prim->ba_id._skip;
+   prim->pwrc._skip;
+   return prim;
+}
+#endif
+T_PRIMITIVE_UNION mphc_channel_assign_req_1g()
+{
+   T_MPHC_CHANNEL_ASSIGN_REQ prim;
+   prim->channel_desc_1._skip;
+   prim->channel_mode_1._skip;
+   prim->txpwr._skip;
+   prim->frequency_list._skip;
+   prim->starting_time._skip;
+   prim->channel_desc_2._skip;
+   prim->channel_mode_2._skip;
+   prim->frequency_list_bef_sti._skip;
+   prim->channel_desc_1_bef_sti._skip;
+   prim->channel_desc_2_bef_sti._skip;
+   prim->cipher_mode._skip;
+   prim->a5_algorithm._skip;
+   prim->cipher_key._skip;
+   prim->dtx_allowed._skip;
+   prim->amr_configuration._skip;
+   return prim;
+}
+
+T_PRIMITIVE_UNION mphc_channel_assign_con_1g()
+{
+   T_MPHC_CHANNEL_ASSIGN_CON prim;
+   prim->param._skip;
+   return prim;
+}
+
+T_PRIMITIVE_UNION mph_dedicated_fail_cnf_1g()
+{
+   T_MPH_DEDICATED_FAIL_CNF prim;
+   prim->param._skip;
+   return prim;
+}
+
+
+T_PRIMITIVE_UNION mph_dedicated_req_fn(U8 mode, U16 arfcn, U8 bsic)
+{
+  T_MPH_DEDICATED_REQ prim;
+  prim->mod = mode;
+  prim->start._skip;
+  prim->ch_type = ch_type_tch2();
+  prim->ch_type2._skip;
+  prim->arfcn = arfcn;
+  prim->bsic = bsic;
+  prim->ho_param = ho_param_1();
+  prim->tr_para = tr_param();
+  prim->ciph = ciph_param();
+  prim->amr_conf._skip;
+  return prim;
+}
+
+T_PRIMITIVE_UNION mphc_async_ho_req_ho_type_fn(U8 ho_type, U32 fn_offset, U32 time_alignment)
+{
+  T_MPHC_ASYNC_HO_REQ prim;
+  prim->handover_command._skip;
+  prim->fn_offset = fn_offset;
+  prim->time_alignmnt = time_alignment;
+  prim->cipher_key._skip;
+  prim->amr_configuration._skip;
+#ifdef  FF_EGPRS
+  prim->handover_type = ho_type;
+#endif  // FF_EGPRS
+  return prim;
+}
+
+T_PRIMITIVE_UNION mphc_sync_ho_req_ho_type_fn(U8 ho_type, U32 fn_offset, U32 time_alignment)
+{
+  T_MPHC_SYNC_HO_REQ prim;
+  prim->handover_command._skip;
+  prim->fn_offset = fn_offset;
+  prim->time_alignmnt = time_alignment;
+  prim->cipher_key._skip;
+  prim->amr_configuration._skip;
+#ifdef  FF_EGPRS
+  prim->handover_type = ho_type;
+#endif  // FF_EGPRS
+  return prim;
+}
+
+T_PRIMITIVE_UNION mphc_presync_ho_req_ho_type_fn(U8 ho_type, U32 fn_offset, U32 time_alignment)
+{
+  T_MPHC_PRE_SYNC_HO_REQ prim;
+  prim->handover_command._skip;
+  prim->fn_offset = fn_offset;
+  prim->time_alignmnt = time_alignment;
+  prim->cipher_key._skip;
+  prim->amr_configuration._skip;
+#ifdef  FF_EGPRS
+  prim->handover_type = ho_type;
+#endif  // FF_EGPRS
+  return prim;
+}
+
+
+T_PRIMITIVE_UNION mphc_handover_finished_fn(U8 cause)
+{
+  T_MPHC_HANDOVER_FINISHED prim;
+  if(cause == 0xFF) prim->cause._show;
+  else prim->cause = cause;
+  return prim;
+}
+
+
+T_PRIMITIVE_UNION mph_dedicated_cnf_fn(U8 cause)
+{
+  T_MPH_DEDICATED_CNF prim;
+  if(cause == 0xFF) prim->dedi_res._show;
+  else prim->dedi_res = cause;
+  return prim;
+}
+