aboutsummaryrefslogtreecommitdiffstats
path: root/include/osmo-bts
diff options
context:
space:
mode:
authorMax <msuraev@sysmocom.de>2016-12-28 12:43:09 +0100
committerMax <msuraev@sysmocom.de>2017-01-04 11:25:17 +0100
commitf9778b2a26ce06959ee7e188eb1d533d896f1846 (patch)
tree6726018873d26f98e57c72aa932882aaacebdbea /include/osmo-bts
parentc2ecca6b0496127709dcd3afa9d366085d8bec97 (diff)
DTX AMR HR: fix inhibition
* Unlike in AMR FR, in AMR HR incoming ONSET have to be treated differently depending on whether we've recently sent SID UPDATE or EMPTY frame. Split ST_SID_U FSM state into 2 states to accommodate for that and make sure that additional states specific to AMR HR are not used for AMR FR. * Avoid sending E_VOICE and E_SID_U in corresponding states as those do not initiate FSM state transitions anyway. This decrease extra load from FSM signalling which otherwise would be triggered on per-frame basis. * Introduce separate signal for SID First P1 -> P2 transition to avoid confusion with E_COMPL and E_SID_U initiated transitions from P1 state. * Don't init DTX FSM for SDCCH channels. Change-Id: I229ba39a38a223fada4881fc9aca35d3639371f8 Related: OS#1801
Diffstat (limited to 'include/osmo-bts')
-rw-r--r--include/osmo-bts/dtx_dl_amr_fsm.h2
-rw-r--r--include/osmo-bts/msg_utils.h1
2 files changed, 3 insertions, 0 deletions
diff --git a/include/osmo-bts/dtx_dl_amr_fsm.h b/include/osmo-bts/dtx_dl_amr_fsm.h
index 4fb2f251..f747f9f1 100644
--- a/include/osmo-bts/dtx_dl_amr_fsm.h
+++ b/include/osmo-bts/dtx_dl_amr_fsm.h
@@ -14,6 +14,7 @@ enum dtx_dl_amr_fsm_states {
ST_SID_F2,
ST_F1_INH,
ST_U_INH,
+ ST_U_NOINH,
ST_F1_INH_REC,
ST_U_INH_REC,
ST_SID_U,
@@ -29,6 +30,7 @@ enum dtx_dl_amr_fsm_events {
E_ONSET,
E_FACCH,
E_COMPL,
+ E_FIRST,
E_INHIB,
E_SID_F,
E_SID_U,
diff --git a/include/osmo-bts/msg_utils.h b/include/osmo-bts/msg_utils.h
index 55e8475d..7ddbe88f 100644
--- a/include/osmo-bts/msg_utils.h
+++ b/include/osmo-bts/msg_utils.h
@@ -37,6 +37,7 @@ bool dtx_dl_amr_enabled(const struct gsm_lchan *lchan);
void dtx_dispatch(struct gsm_lchan *lchan, enum dtx_dl_amr_fsm_events e);
bool dtx_recursion(const struct gsm_lchan *lchan);
void dtx_int_signal(struct gsm_lchan *lchan);
+bool dtx_is_first_p1(const struct gsm_lchan *lchan);
void dtx_cache_payload(struct gsm_lchan *lchan, const uint8_t *l1_payload,
size_t length, uint32_t fn, int update);
int dtx_dl_amr_fsm_step(struct gsm_lchan *lchan, const uint8_t *rtp_pl,