diff --git a/bts/BTS_Tests_LAPDm.ttcn b/bts/BTS_Tests_LAPDm.ttcn index 4242502a6..9981bbc9a 100644 --- a/bts/BTS_Tests_LAPDm.ttcn +++ b/bts/BTS_Tests_LAPDm.ttcn @@ -6,6 +6,7 @@ import from LAPDm_RAW_PT all; import from LAPDm_Types all; import from RSL_Types all; import from BTS_Tests all; +import from GSM_RR_Types all; import from Misc_Helpers all; /* test that use exclusively only LAPDm over L1CTL */ @@ -51,9 +52,16 @@ function f_establish_dcch() runs on lapdm_test_CT { } /* master function switching to a dedicated radio channel */ -function f_switch_dcch(Arfcn arfcn, RslChannelNr chan_nr, GsmTsc tsc) runs on lapdm_test_CT { - var BCCH_tune_req tune_req := { arfcn := arfcn, combined_ccch := true }; - var DCCH_switch_req sw_req := { arfcn, chan_nr, tsc }; +function f_switch_dcch() runs on ConnHdlr { + var BCCH_tune_req tune_req := { arfcn := { false, mp_trx0_arfcn }, combined_ccch := true }; + var DCCH_switch_req sw_req := { ma := g_pars.ma }; + + /* Craft channel description (with or without frequency hopping parameters) */ + if (ispresent(g_pars.maio_hsn)) { + sw_req.chan_desc := valueof(ts_ChanDescH1(g_pars.chan_nr, g_pars.maio_hsn)); + } else { + sw_req.chan_desc := valueof(ts_ChanDescH0(g_pars.chan_nr, mp_trx0_arfcn)); + } LAPDM.send(tune_req); LAPDM.send(sw_req); @@ -237,7 +245,7 @@ private function fp_common_init() runs on ConnHdlr /* activate the channel on the BTS side */ f_rsl_chan_act(g_pars.chan_mode, false, {}); /* activate the channel on the MS side */ - f_switch_dcch({false, mp_trx0_arfcn}, g_chan_nr, 7); + f_switch_dcch(); } private function fp_common_fini() runs on ConnHdlr diff --git a/library/LAPDm_RAW_PT.ttcn b/library/LAPDm_RAW_PT.ttcn index 394deab32..77f0452b0 100644 --- a/library/LAPDm_RAW_PT.ttcn +++ b/library/LAPDm_RAW_PT.ttcn @@ -38,9 +38,8 @@ module LAPDm_RAW_PT { /* directly switch to a dedicated channel (without RACH/IMM.ASS */ type record DCCH_switch_req { - Arfcn arfcn, - RslChannelNr chan_nr, - GsmTsc tsc + ChannelDescription chan_desc, + L1ctlMA ma } type record DCCH_switch_res { @@ -236,17 +235,30 @@ module LAPDm_RAW_PT { /* store/save channel description */ chan_desc := imm_ass.chan_desc; - /* send DM_EST_REQ */ + /* send DM_EST_REQ, TODO: Mobile Allocation */ f_L1CTL_DM_EST_REQ_IA(L1CTL, imm_ass); set_ph_state(PH_STATE_DCH); } /* switching directly to a dedicated channel *without RACH/IMM-ASS */ - private function f_switch_dcch(Arfcn arfcn, RslChannelNr chan_nr, GsmTsc tsc) runs on lapdm_CT { + private function f_switch_dcch(in DCCH_switch_req sw_req) runs on lapdm_CT { set_ph_state(PH_STATE_TUNING_DCH); /* store/save channel description */ - chan_desc.chan_nr := chan_nr; - L1CTL.send(ts_L1CTL_DM_EST_REQ_H0(chan_nr, tsc, arfcn.arfcn)); + chan_desc := sw_req.chan_desc; + + /* tune the L1 to the indicated channel */ + if (chan_desc.h) { + L1CTL.send(ts_L1CTL_DM_EST_REQ_H1(chan_desc.chan_nr, + chan_desc.tsc, + chan_desc.maio_hsn.hsn, + chan_desc.maio_hsn.maio, + sw_req.ma)); + } else { + L1CTL.send(ts_L1CTL_DM_EST_REQ_H0(chan_desc.chan_nr, + chan_desc.tsc, + chan_desc.arfcn)); + } + set_ph_state(PH_STATE_DCH); } @@ -431,7 +443,7 @@ module LAPDm_RAW_PT { } [] LAPDM_SP.receive(DCCH_switch_req:?) -> value sw_req { var DCCH_switch_res res; - f_switch_dcch(sw_req.arfcn, sw_req.chan_nr, sw_req.tsc); + f_switch_dcch(sw_req); if (ph_state == PH_STATE_DCH) { res := { omit }; } else {