fixeria has submitted this change. ( https://gerrit.osmocom.org/c/osmocom-bb/+/30485 )
Change subject: trxcon: TRXCON_EV_DCH_REL_REQ does not switch to TRXCON_ST_RESET ......................................................................
trxcon: TRXCON_EV_DCH_REL_REQ does not switch to TRXCON_ST_RESET
It's not really clear to me how the L1 is supposed to handle the L1CTL_DM_REL_REQ message, which maps to the TRXCON_EV_DCH_REL_REQ in our case. Lookig at the layer23 code I see that it's sent along with the L1CTL_RESET_REQ (maps to the TRXCON_EV_RESET_SCHED_REQ). The layer1 firmware does reset some parameters on receipt of the L1CTL_DM_REL_REQ and some more parameters on the L1CTL_RESET_REQ.
It's clear though that we should not switch to the TRXCON_ST_RESET on receipt of the L1CTL_DM_REL_REQ. The layer23 application (e.g. mobile) may send L1CTL_DM_EST_REQ right after that, and we won't be able to transition from the TRXCON_ST_RESET directly to the TRXCON_ST_DEDICATED. Such transition is neither implemented nor permitted by 3GPP TS 44.004, Figure 5.1.
Ideally, according to 3GPP TS 44.004, Figure 5.1, we should have an additional transient state 'TUNING DCH' in the trxcon_fsm and switch there on reciept of the L1CTL_DM_REL_REQ. But currently it's not implemented and adding it would require some effort.
As a temporary solution, let's do not change the current state and stay in the TRXCON_ST_DEDICATED. This workaround is needed to make mobile terminated calls work in the mobile app.
Change-Id: I5bbe6ca4cc6299f9faf343822c992a6872a45081 Related: OS#5599 --- M src/host/trxcon/src/trxcon_fsm.c 1 file changed, 2 insertions(+), 2 deletions(-)
Approvals: fixeria: Looks good to me, approved pespin: Looks good to me, but someone else must approve msuraev: Looks good to me, but someone else must approve Jenkins Builder: Verified
diff --git a/src/host/trxcon/src/trxcon_fsm.c b/src/host/trxcon/src/trxcon_fsm.c index 11b60ac..e3224a9 100644 --- a/src/host/trxcon/src/trxcon_fsm.c +++ b/src/host/trxcon/src/trxcon_fsm.c @@ -428,7 +428,7 @@ break; case TRXCON_EV_DCH_REL_REQ: l1sched_reset(trxcon->sched, false); - osmo_fsm_inst_state_chg(fi, TRXCON_ST_RESET, 0, 0); + /* TODO: switch to (not implemented) TRXCON_ST_DCH_TUNING? */ break; case TRXCON_EV_SET_TCH_MODE_REQ: { @@ -551,7 +551,7 @@ break; case TRXCON_EV_DCH_REL_REQ: l1sched_reset(trxcon->sched, false); - osmo_fsm_inst_state_chg(fi, TRXCON_ST_RESET, 0, 0); + /* TODO: switch to (not implemented) TRXCON_ST_DCH_TUNING? */ break; default: OSMO_ASSERT(0);