falconia has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bts/+/33069 )
Change subject: trx TCH DL: transmit invalid speech frames instead of dummy FACCH ......................................................................
trx TCH DL: transmit invalid speech frames instead of dummy FACCH
In speech TCH operation, there will always be times when a speech frame needs to be transmitted on the downlink, but there is no frame available to transmit (gap in the incoming RTP stream), or the logic of DTXd says that no frame shall be transmitted at this FN, but we are not doing physical DTXd. Previous osmo-bts-trx code sent dummy FACCH during such conditions, but this approach is bad for TCH/HS where we would like to transmit good speech frames or speech frame gaps one 20 ms frame at a time, rather than take out pairs of frames for dummy FACCH/H. Other BTS models (sysmoBTS PHY) send out invalid speech frames with inverted CRC3 under the conditions in question - do the same in osmo-bts-trx.
The present change modifies osmo-bts-trx TCH DL frame gap behavior only for TCH/FS, TCH/HS and TCH/EFS; for all other channel modes, including AMR speech, the previous behavior of sending dummy FACCH is left unchanged.
Depends: Iade3310e16b906efb6892d28f474a0d15204e861 (libosmocore) Change-Id: I78106802a0aa4af39859c75d29fe0e77037899fe --- M src/osmo-bts-trx/sched_lchan_tchf.c M src/osmo-bts-trx/sched_lchan_tchh.c 2 files changed, 55 insertions(+), 2 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/69/33069/1
diff --git a/src/osmo-bts-trx/sched_lchan_tchf.c b/src/osmo-bts-trx/sched_lchan_tchf.c index 0d0f52a..d7a8165 100644 --- a/src/osmo-bts-trx/sched_lchan_tchf.c +++ b/src/osmo-bts-trx/sched_lchan_tchf.c @@ -491,8 +491,22 @@ };
LOGL1SB(DL1P, LOGL_DEBUG, l1ts, br, "No TCH or FACCH prim for transmit.\n"); - gsm0503_tch_fr_encode(*bursts_p, dummy, sizeof(dummy), 1); - chan_state->dl_facch_bursts = 8; + /* If the channel mode is TCH/FS or TCH/EFS, transmit a dummy + * speech frame with inverted CRC3, designed to induce a BFI + * condition in the MS receiver. In all other channel modes, + * transmit dummy FACCH like we always did before. + * + * FIXME: someone who knows AMR needs to look at this problem + * and decide what is the correct BTS Tx behavior for frame + * gaps in TCH/AFS. + */ + if (tch_mode == GSM48_CMODE_SPEECH_V1 || + tch_mode == GSM48_CMODE_SPEECH_EFR) { + gsm0503_tch_fr_encode(*bursts_p, NULL, 0, 1); + } else { + gsm0503_tch_fr_encode(*bursts_p, dummy, sizeof(dummy), 1); + chan_state->dl_facch_bursts = 8; + } goto send_burst; }
diff --git a/src/osmo-bts-trx/sched_lchan_tchh.c b/src/osmo-bts-trx/sched_lchan_tchh.c index c6c2cd0..3d51493 100644 --- a/src/osmo-bts-trx/sched_lchan_tchh.c +++ b/src/osmo-bts-trx/sched_lchan_tchh.c @@ -404,6 +404,19 @@ };
LOGL1SB(DL1P, LOGL_INFO, l1ts, br, "No TCH or FACCH prim for transmit.\n"); + /* If the channel mode is TCH/HS, transmit a dummy speech frame + * with inverted CRC3, designed to induce a BFI condition in + * the MS receiver. In all other channel modes, transmit + * dummy FACCH like we always did before. + * + * FIXME: someone who knows AMR needs to look at this problem + * and decide what is the correct BTS Tx behavior for frame + * gaps in TCH/AHS. + */ + if (tch_mode == GSM48_CMODE_SPEECH_V1) { + gsm0503_tch_hr_encode(*bursts_p, NULL, 0); + goto send_burst; + }
/* FACCH/H can only be scheduled at specific TDMA offset */ if (!sched_tchh_dl_facch_map[br->fn % 26]) {