BTS_Tests_LAPDm: consider frequency hopping parameters

Change-Id: Idd1ffe0ee97805b40bb5e37645aa53a9b1dc4b0a
Related: SYS#4868, OS#4546
This commit is contained in:
Vadim Yanitskiy 2020-07-14 19:04:18 +07:00
parent a9894281ef
commit eec14f0951
2 changed files with 32 additions and 12 deletions

View File

@ -6,6 +6,7 @@ import from LAPDm_RAW_PT all;
import from LAPDm_Types all; import from LAPDm_Types all;
import from RSL_Types all; import from RSL_Types all;
import from BTS_Tests all; import from BTS_Tests all;
import from GSM_RR_Types all;
import from Misc_Helpers all; import from Misc_Helpers all;
/* test that use exclusively only LAPDm over L1CTL */ /* 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 */ /* master function switching to a dedicated radio channel */
function f_switch_dcch(Arfcn arfcn, RslChannelNr chan_nr, GsmTsc tsc) runs on lapdm_test_CT { function f_switch_dcch() runs on ConnHdlr {
var BCCH_tune_req tune_req := { arfcn := arfcn, combined_ccch := true }; var BCCH_tune_req tune_req := { arfcn := { false, mp_trx0_arfcn }, combined_ccch := true };
var DCCH_switch_req sw_req := { arfcn, chan_nr, tsc }; 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(tune_req);
LAPDM.send(sw_req); LAPDM.send(sw_req);
@ -237,7 +245,7 @@ private function fp_common_init() runs on ConnHdlr
/* activate the channel on the BTS side */ /* activate the channel on the BTS side */
f_rsl_chan_act(g_pars.chan_mode, false, {}); f_rsl_chan_act(g_pars.chan_mode, false, {});
/* activate the channel on the MS side */ /* 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 private function fp_common_fini() runs on ConnHdlr

View File

@ -38,9 +38,8 @@ module LAPDm_RAW_PT {
/* directly switch to a dedicated channel (without RACH/IMM.ASS */ /* directly switch to a dedicated channel (without RACH/IMM.ASS */
type record DCCH_switch_req { type record DCCH_switch_req {
Arfcn arfcn, ChannelDescription chan_desc,
RslChannelNr chan_nr, L1ctlMA ma
GsmTsc tsc
} }
type record DCCH_switch_res { type record DCCH_switch_res {
@ -236,17 +235,30 @@ module LAPDm_RAW_PT {
/* store/save channel description */ /* store/save channel description */
chan_desc := imm_ass.chan_desc; 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); f_L1CTL_DM_EST_REQ_IA(L1CTL, imm_ass);
set_ph_state(PH_STATE_DCH); set_ph_state(PH_STATE_DCH);
} }
/* switching directly to a dedicated channel *without RACH/IMM-ASS */ /* 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); set_ph_state(PH_STATE_TUNING_DCH);
/* store/save channel description */ /* store/save channel description */
chan_desc.chan_nr := chan_nr; chan_desc := sw_req.chan_desc;
L1CTL.send(ts_L1CTL_DM_EST_REQ_H0(chan_nr, tsc, arfcn.arfcn));
/* 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); set_ph_state(PH_STATE_DCH);
} }
@ -431,7 +443,7 @@ module LAPDm_RAW_PT {
} }
[] LAPDM_SP.receive(DCCH_switch_req:?) -> value sw_req { [] LAPDM_SP.receive(DCCH_switch_req:?) -> value sw_req {
var DCCH_switch_res res; 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) { if (ph_state == PH_STATE_DCH) {
res := { omit }; res := { omit };
} else { } else {