BTS_Tests: implement optional frequency hopping support
Change-Id: If0318fd320d4f112341465844555bf8d65b5f88f Depends: I7822c3581fccba3277a63577e740e7486307635d Related: SYS#4868, OS#4546
This commit is contained in:
parent
6c71c17fc5
commit
a9894281ef
|
@ -111,6 +111,10 @@ modulepar {
|
||||||
boolean mp_l1_supports_gprs := false;
|
boolean mp_l1_supports_gprs := false;
|
||||||
/* how many transceivers do we expect to connect */
|
/* how many transceivers do we expect to connect */
|
||||||
integer mp_transceiver_num := 1;
|
integer mp_transceiver_num := 1;
|
||||||
|
/* frequency hopping status */
|
||||||
|
boolean mp_freq_hop_enabled := false;
|
||||||
|
/* frequency hopping parameters */
|
||||||
|
FreqHopConfig mp_fh_config;
|
||||||
}
|
}
|
||||||
|
|
||||||
type record of RslChannelNr ChannelNrs;
|
type record of RslChannelNr ChannelNrs;
|
||||||
|
@ -510,6 +514,49 @@ friend function f_init_l1ctl() runs on test_CT {
|
||||||
|
|
||||||
private type function void_fn(charstring id) runs on ConnHdlr;
|
private type function void_fn(charstring id) runs on ConnHdlr;
|
||||||
|
|
||||||
|
private type record length(8) of FreqHopGroups FreqHopConfig;
|
||||||
|
|
||||||
|
private type record of FreqHopGroup FreqHopGroups;
|
||||||
|
private type record FreqHopGroup {
|
||||||
|
uint6_t hsn,
|
||||||
|
FreqHopGroupItems trx_maio
|
||||||
|
};
|
||||||
|
|
||||||
|
private type record of FreqHopGroupItem FreqHopGroupItems;
|
||||||
|
private type record FreqHopGroupItem {
|
||||||
|
uint8_t trx_nr,
|
||||||
|
uint6_t maio
|
||||||
|
};
|
||||||
|
|
||||||
|
friend function f_resolve_fh_params(inout ConnHdlrPars pars, uint8_t trx_nr := 0)
|
||||||
|
{
|
||||||
|
var FreqHopGroups groups := mp_fh_config[pars.chan_nr.tn];
|
||||||
|
var integer i, j;
|
||||||
|
|
||||||
|
for (i := 0; i < lengthof(groups); i := i + 1) {
|
||||||
|
var FreqHopGroup g := groups[i];
|
||||||
|
for (j := 0; j < lengthof(g.trx_maio); j := j + 1) {
|
||||||
|
var FreqHopGroupItem gi := g.trx_maio[j];
|
||||||
|
if (gi.trx_nr == trx_nr) {
|
||||||
|
pars.maio_hsn := valueof(ts_HsnMaio(g.hsn, gi.maio));
|
||||||
|
pars.ma := { }; /* to be composed below */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ispresent(pars.maio_hsn)) {
|
||||||
|
/* Compose the Mobile Allocation */
|
||||||
|
for (j := 0; j < lengthof(g.trx_maio); j := j + 1) {
|
||||||
|
var FreqHopGroupItem gi := g.trx_maio[j];
|
||||||
|
pars.ma := pars.ma & { l1ctl_ma_def[gi.trx_nr] };
|
||||||
|
}
|
||||||
|
|
||||||
|
log("Freq. hopping parameters: ", pars.maio_hsn, pars.ma);
|
||||||
|
break; /* We're done */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* create a new test component */
|
/* create a new test component */
|
||||||
friend function f_start_handler(void_fn fn, ConnHdlrPars pars,
|
friend function f_start_handler(void_fn fn, ConnHdlrPars pars,
|
||||||
boolean pcu_comp := false,
|
boolean pcu_comp := false,
|
||||||
|
@ -535,6 +582,11 @@ runs on test_CT return ConnHdlr {
|
||||||
map(vc_conn:BTS_TRXC, system:BTS_TRXC);
|
map(vc_conn:BTS_TRXC, system:BTS_TRXC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Obtain frequency hopping parameters for a given timeslot */
|
||||||
|
if (mp_freq_hop_enabled and mp_transceiver_num > 1) {
|
||||||
|
f_resolve_fh_params(pars);
|
||||||
|
}
|
||||||
|
|
||||||
vc_conn.start(f_handler_init(fn, id, pars));
|
vc_conn.start(f_handler_init(fn, id, pars));
|
||||||
return vc_conn;
|
return vc_conn;
|
||||||
}
|
}
|
||||||
|
|
|
@ -228,6 +228,12 @@ private function fp_common_init() runs on ConnHdlr
|
||||||
/* undo what f_start_handler is doing and pull LAPDm_CT into the loop */
|
/* undo what f_start_handler is doing and pull LAPDm_CT into the loop */
|
||||||
unmap(self:L1CTL, system:L1CTL);
|
unmap(self:L1CTL, system:L1CTL);
|
||||||
f_lapdm_init();
|
f_lapdm_init();
|
||||||
|
|
||||||
|
/* Obtain frequency hopping parameters for a given timeslot */
|
||||||
|
if (mp_freq_hop_enabled and mp_transceiver_num > 1) {
|
||||||
|
f_resolve_fh_params(g_pars);
|
||||||
|
}
|
||||||
|
|
||||||
/* 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 */
|
||||||
|
|
Loading…
Reference in New Issue