From 21ffe07894ae66346b3073eb0a170a977805b8e7 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Fri, 15 Jul 2016 01:03:32 +0200 Subject: dyn TS: common TCH/F_TCH/H_PDCH implementation common/l1sap: For dyn TS, the BSC will issue RSL Chan Activ requests with a non-standard chan_nr. While the rest of the code now understands that, the L1 phy will not. Translate to standard PDCH (== TCH/F). common/oml: use dyn TS' current pchan mode for lchans config. common/pcu_sock: detect desired PDCH mode of dyn TS. common/rsl: implement reconnection chain of a TS for changing its pchan: * rsl_rx_chan_activ(): ** Add dyn_pchan_from_chan_nr() to derive the requested pchan from the RSL chan_nr IE. ** Notice the need for a pchan change and invoke dyn_ts_l1_reconnect() (s.b.) ** Make Chan Mode IE presence optional, because the non-standard PDCH activation message is simpler and does not require it. ** Do PDCH activation via PCU. * Add dyn_ts_l1_reconnect(): store state and disconnect the L1 channel; then wait for cb_ts_disconnected(). * Add osmo_dyn_ts_disconnected() to cb_ts_disconnected(): verify state and connect with the new pchan type; then wait for cb_ts_connected(). * Add osmo_dyn_ts_connected() to cb_ts_connected(), which re-issues the cached chan activation message from before disconnecting the L1 channel. * Also send an rf chan rel/act ack for dyn TS upon PDCH de/act via PCU. * Add dyn_ts_pdch_release(): on channel release of a dyn TS in PDCH mode, release via the PCU. Call from rsl_rx_rd_chan_rel(). Change-Id: I463bb6b4e57674f091c3badba9257374961c52c7 --- src/common/oml.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/common/oml.c') diff --git a/src/common/oml.c b/src/common/oml.c index 89708583..690a81d9 100644 --- a/src/common/oml.c +++ b/src/common/oml.c @@ -694,6 +694,15 @@ static int conf_lchans(struct gsm_bts_trx_ts *ts) pchan = ts->flags & TS_F_PDCH_ACTIVE? GSM_PCHAN_PDCH : GSM_PCHAN_TCH_F; + /* Osmocom RSL CHAN ACT style dyn TS */ + if (pchan == GSM_PCHAN_TCH_F_TCH_H_PDCH) { + pchan = ts->dyn.pchan_is; + + /* If the dyn TS doesn't have a pchan yet, do nothing. */ + if (pchan == GSM_PCHAN_NONE) + return 0; + } + return conf_lchans_as_pchan(ts, pchan); } -- cgit v1.2.3