FreeCalypso > hg > fc-tourmaline
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; +} +