LAPDm_RAW_PT: Switch to dedicated channel without RACH+IMM.ASS

Change-Id: I07dd9191ca441bfd1e43e3521e98f88ad2d0489a
This commit is contained in:
Harald Welte 2019-05-30 17:35:31 +02:00
parent 104740610e
commit 66f07549b7
1 changed files with 36 additions and 0 deletions

View File

@ -36,6 +36,17 @@ module LAPDm_RAW_PT {
charstring err optional
}
/* directly switch to a dedicated channel (without RACH/IMM.ASS */
type record DCCH_switch_req {
Arfcn arfcn,
RslChannelNr chan_nr,
GsmTsc tsc
}
type record DCCH_switch_res {
charstring err optional
}
type record length(8) of uint8_t TfiList;
type record TbfPars {
GsmArfcn arfcn optional,
@ -104,12 +115,14 @@ module LAPDm_RAW_PT {
type port LAPDm_SP_PT message {
in BCCH_tune_req,
DCCH_establish_req,
DCCH_switch_req,
DCCH_release_req,
TBF_UL_establish_req,
TBF_DL_establish_req,
RLCMAC_ph_data_req,
LAPDm_ph_data;
out DCCH_establish_res,
DCCH_switch_res,
TBF_UL_establish_res,
RLCMAC_ph_data_ind,
LAPDm_ph_data;
@ -118,11 +131,13 @@ module LAPDm_RAW_PT {
/* port from user (external) point of view */
type port LAPDm_PT message {
in DCCH_establish_res,
DCCH_switch_res,
TBF_UL_establish_res,
RLCMAC_ph_data_ind,
LAPDm_ph_data;
out BCCH_tune_req,
DCCH_establish_req,
DCCH_switch_req,
DCCH_release_req,
TBF_UL_establish_req,
TBF_DL_establish_req,
@ -222,6 +237,15 @@ module LAPDm_RAW_PT {
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 {
set_ph_state(PH_STATE_TUNING_DCH);
/* store/save channel description */
chan_desc.chan_nr := chan_nr;
f_L1CTL_DM_EST_REQ(L1CTL,arfcn, chan_nr, tsc);
set_ph_state(PH_STATE_DCH);
}
/* initialize a tfi_usf array with "not used" value 255 for all TN */
function f_TfiUsfArrInit() return TfiUsfArr {
var TfiUsfArr tua := { 255, 255, 255, 255, 255, 255, 255, 255 };
@ -374,6 +398,7 @@ module LAPDm_RAW_PT {
var RLCMAC_ph_data_ind rpdi;
var RLCMAC_ph_data_req rpdr;
var DCCH_establish_req est_req;
var DCCH_switch_req sw_req;
var DCCH_establish_res est_res;
f_init_tbf();
@ -422,6 +447,17 @@ module LAPDm_RAW_PT {
}
LAPDM_SP.send(res);
}
[] 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);
if (ph_state == PH_STATE_DCH) {
res := { omit };
} else {
res := { "Unable to switch to DCCH" };
}
LAPDM_SP.send(res);
}
[] as_tbf_ul_est();
[] as_tbf_dl_est();